scip-query 0.17.0 → 0.17.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 (147) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +19 -0
  3. package/dist/{chunk-ZMD4O5UP.js → chunk-2A7LUMZP.js} +2 -2
  4. package/dist/{chunk-VCOAUTSI.js → chunk-4H7T7FIM.js} +2 -2
  5. package/dist/{chunk-LC57FSPX.js → chunk-4QBRVI7D.js} +2 -2
  6. package/dist/chunk-4XTPZ5CR.js +9 -0
  7. package/dist/chunk-6AITNECC.js +928 -0
  8. package/dist/chunk-6JSTKSZH.js +3 -0
  9. package/dist/{chunk-A4KRWTXD.js → chunk-7LERNHDG.js} +2 -2
  10. package/dist/{chunk-75H6GOND.js → chunk-7ROLM67J.js} +2 -2
  11. package/dist/{chunk-EPDV3SQD.js → chunk-7VR5TNOI.js} +2 -2
  12. package/dist/chunk-A2GX3PYV.js +5 -0
  13. package/dist/{chunk-KYUYAWKA.js → chunk-APCXCRED.js} +2 -2
  14. package/dist/{chunk-H4SMB657.js → chunk-ATC4MEVA.js} +2 -2
  15. package/dist/chunk-AWYKDRYV.js +2 -0
  16. package/dist/{chunk-PYOZHG6A.js → chunk-AY44MGWS.js} +2 -2
  17. package/dist/{chunk-7MT6UM4D.js → chunk-BEGHYHOQ.js} +2 -2
  18. package/dist/{chunk-JJAH2VLD.js → chunk-BPMBOZAN.js} +2 -2
  19. package/dist/{chunk-3EBDPBBU.js → chunk-C7MBQSIC.js} +2 -2
  20. package/dist/{chunk-KAOWSWEX.js → chunk-CHJ3QROR.js} +2 -2
  21. package/dist/{chunk-VT2KFEPG.js → chunk-CVWX24IY.js} +2 -2
  22. package/dist/chunk-DJI446FQ.js +18 -0
  23. package/dist/{chunk-6G3GQWTK.js → chunk-ELLPMCWA.js} +2 -2
  24. package/dist/{chunk-42YU6TEB.js → chunk-FVLZB54V.js} +2 -2
  25. package/dist/{chunk-VPVAQRHM.js → chunk-G6DDSHMD.js} +2 -2
  26. package/dist/{chunk-OP5JXGDV.js → chunk-IG6X65MG.js} +2 -2
  27. package/dist/{chunk-KZ2LZBQT.js → chunk-IKMOYFUM.js} +2 -2
  28. package/dist/{chunk-Y3DG4J6A.js → chunk-IS7DZ7TB.js} +2 -2
  29. package/dist/{chunk-HGO3D2JD.js → chunk-J7IMQRCU.js} +2 -2
  30. package/dist/{chunk-J4HK7PQS.js → chunk-K4XL4HOK.js} +2 -2
  31. package/dist/{chunk-5ODF4JGH.js → chunk-K53GNKY3.js} +2 -2
  32. package/dist/{chunk-5N5ZC566.js → chunk-K65T4TJS.js} +2 -2
  33. package/dist/{chunk-YD7GGLGE.js → chunk-KA7RMBVU.js} +2 -2
  34. package/dist/{chunk-7CHIAMKS.js → chunk-KJOKTZUE.js} +2 -2
  35. package/dist/chunk-KSD6IWF4.js +38 -0
  36. package/dist/{chunk-OQRMCT2N.js → chunk-LEKXKHIQ.js} +5 -5
  37. package/dist/{chunk-KTZACYL6.js → chunk-LFPQFRCX.js} +2 -2
  38. package/dist/{chunk-Y5BOEWAE.js → chunk-LL5NQB5V.js} +2 -2
  39. package/dist/{chunk-MVFNACWB.js → chunk-MBVHEPHQ.js} +2 -2
  40. package/dist/{chunk-KO2TFDIP.js → chunk-MFIA6EIT.js} +2 -2
  41. package/dist/{chunk-PVXSHZLW.js → chunk-N3JH45WR.js} +2 -2
  42. package/dist/{chunk-QNCVN5EH.js → chunk-NJD4C5G5.js} +3 -3
  43. package/dist/{chunk-JUADXGUH.js → chunk-NJTIAQY7.js} +2 -2
  44. package/dist/{chunk-LG33DNTZ.js → chunk-NX2YAXVQ.js} +2 -2
  45. package/dist/{chunk-VDHEX6YO.js → chunk-O5A7BTMA.js} +2 -2
  46. package/dist/{chunk-JYBF5CPE.js → chunk-O7NA5FCA.js} +2 -2
  47. package/dist/{chunk-U3JW5AYG.js → chunk-OINSINYW.js} +2 -2
  48. package/dist/{chunk-JVTMRIKU.js → chunk-OQFA2SUQ.js} +2 -2
  49. package/dist/{chunk-DQYG5JHT.js → chunk-OQFPCIXO.js} +2 -2
  50. package/dist/{chunk-ABRWGVC6.js → chunk-P6FOIU7O.js} +2 -2
  51. package/dist/{chunk-NJBARXRO.js → chunk-PQD7P6WB.js} +2 -2
  52. package/dist/{chunk-OP5RO2CF.js → chunk-Q4GKL4CC.js} +2 -2
  53. package/dist/{chunk-TL2IXVGH.js → chunk-ROMKXEUM.js} +2 -2
  54. package/dist/{chunk-CYDOV3AQ.js → chunk-RUV4KHWA.js} +2 -2
  55. package/dist/{chunk-34RCSYMZ.js → chunk-S22ICAWV.js} +2 -2
  56. package/dist/chunk-SALRDXWM.js +121 -0
  57. package/dist/chunk-SON6DQNK.js +7 -0
  58. package/dist/{chunk-SREWDA7Q.js → chunk-SSGACGAD.js} +2 -2
  59. package/dist/{chunk-PA2MQKXD.js → chunk-SUYCF4SX.js} +2 -2
  60. package/dist/chunk-SXDXR5FH.js +2 -0
  61. package/dist/{chunk-TR7C5HOC.js → chunk-T4P27T6S.js} +2 -2
  62. package/dist/{chunk-BBBZB5WY.js → chunk-U4G4UYLB.js} +2 -2
  63. package/dist/{chunk-IK2NG76R.js → chunk-W7FNZKX5.js} +2 -2
  64. package/dist/chunk-WD3PAQJT.js +10 -0
  65. package/dist/{chunk-AQ34B63A.js → chunk-XLJORP6N.js} +2 -2
  66. package/dist/chunk-XTF6ELXT.js +3 -0
  67. package/dist/{chunk-7Z5UT44B.js → chunk-YMFHC5J2.js} +2 -2
  68. package/dist/{chunk-WH65EY7U.js → chunk-YYYERNQL.js} +2 -2
  69. package/dist/chunk-Z4MCFCGX.js +3 -0
  70. package/dist/cli.js +3 -1528
  71. package/dist/command-descriptors-7UUURHWT.js +599 -0
  72. package/dist/direct-navigation-CVCFER5G.js +3 -0
  73. package/dist/index.js +1 -1
  74. package/dist/queries/affected.js +1 -1
  75. package/dist/queries/bottlenecks.js +1 -1
  76. package/dist/queries/call-graph.js +1 -1
  77. package/dist/queries/change-surface.js +1 -1
  78. package/dist/queries/cleanup-plan.js +1 -1
  79. package/dist/queries/co-change.d.ts +2 -0
  80. package/dist/queries/co-change.js +1 -1
  81. package/dist/queries/code.js +1 -1
  82. package/dist/queries/complexity-hotspots.js +1 -1
  83. package/dist/queries/complexity.js +1 -1
  84. package/dist/queries/convergence.js +1 -1
  85. package/dist/queries/coupling.js +1 -1
  86. package/dist/queries/dataflow.js +1 -1
  87. package/dist/queries/dead.js +1 -1
  88. package/dist/queries/decorative-checkers.js +1 -1
  89. package/dist/queries/deps.js +1 -1
  90. package/dist/queries/diff-gate.js +1 -1
  91. package/dist/queries/diff-impact.js +1 -1
  92. package/dist/queries/doc-drift.js +1 -1
  93. package/dist/queries/drift.js +1 -1
  94. package/dist/queries/duplicate-bodies.js +1 -1
  95. package/dist/queries/extract-candidates.js +1 -1
  96. package/dist/queries/fan.js +1 -1
  97. package/dist/queries/health.js +1 -1
  98. package/dist/queries/hierarchy.js +1 -1
  99. package/dist/queries/hotspots.js +1 -1
  100. package/dist/queries/imports.js +1 -1
  101. package/dist/queries/incomplete-migration.js +1 -1
  102. package/dist/queries/index.js +1 -1
  103. package/dist/queries/isolated.js +1 -1
  104. package/dist/queries/locality-candidates.js +1 -1
  105. package/dist/queries/members.js +1 -1
  106. package/dist/queries/methods.js +1 -1
  107. package/dist/queries/not-implemented.js +1 -1
  108. package/dist/queries/outline.js +1 -1
  109. package/dist/queries/passthrough-candidates.js +1 -1
  110. package/dist/queries/plan-context.d.ts +2 -0
  111. package/dist/queries/plan-context.js +1 -1
  112. package/dist/queries/recent-duplicates.js +1 -1
  113. package/dist/queries/redundant-reexports.js +1 -1
  114. package/dist/queries/refs.js +1 -1
  115. package/dist/queries/self-audit.js +1 -1
  116. package/dist/queries/similar-signatures.js +1 -1
  117. package/dist/queries/similar.js +1 -1
  118. package/dist/queries/slice.js +1 -1
  119. package/dist/queries/stale-abstractions.js +1 -1
  120. package/dist/queries/surface.js +1 -1
  121. package/dist/queries/symbols.js +1 -1
  122. package/dist/queries/system.js +1 -1
  123. package/dist/queries/test-quality.js +1 -1
  124. package/dist/queries/trace.js +1 -1
  125. package/dist/queries/twin-ab.js +1 -1
  126. package/dist/queries/twin-drift.js +1 -1
  127. package/dist/queries/unused-imports.js +1 -1
  128. package/dist/queries/unused-params.js +1 -1
  129. package/dist/queries/wrapper-candidates.js +1 -1
  130. package/dist/reindex-worker.js +22 -22
  131. package/dist/reindex.js +36 -36
  132. package/dist/runtime.d.ts +2 -0
  133. package/dist/runtime.js +1 -1
  134. package/dist/watch-server.js +4 -4
  135. package/docs/COMMAND_REFERENCE.md +3 -0
  136. package/package.json +2 -1
  137. package/skills/scip-tla-model-system/SKILL.md +10 -8
  138. package/dist/chunk-2HCWAL42.js +0 -3
  139. package/dist/chunk-GRHA5NGF.js +0 -2
  140. package/dist/chunk-HV4N3UBV.js +0 -10
  141. package/dist/chunk-KLFCCRI7.js +0 -21
  142. package/dist/chunk-L7UITWFE.js +0 -120
  143. package/dist/chunk-QVZSWLLZ.js +0 -2
  144. package/dist/chunk-RSZ4KX4B.js +0 -7
  145. package/dist/chunk-RZEVUYMG.js +0 -2
  146. package/dist/chunk-TCOWAGR2.js +0 -38
  147. package/dist/chunk-X566NT42.js +0 -9
@@ -1,4 +1,4 @@
1
- import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XHIJHI.js";import{A as st,Aa as Ot,C as ut,Ca as Mt,D as pt,F as be,L as $,N as gt,R as ft,S as Y,T as mt,U as K,V as ht,W as yt,X as St,Y as bt,a as X,da as Pt,e as et,ea as xt,f as T,fa as Rt,g as C,ga as It,ha as vt,i as rt,ia as Et,ja as Ft,k as it,ka as jt,l as at,la as wt,m as Q,ma as _t,na as B,oa as te,pa as Dt,ra as ne,s as A,sa as Tt,ta as Pe,ua as kt,va as xe,xa as Re,za as re}from"./chunk-L7UITWFE.js";import{b as tt,c as nt,f as w,g as V,h as ct,i as lt,j as dt}from"./chunk-SMBIGBGN.js";import{a as k,b as O}from"./chunk-3M2UCPFS.js";import{e as F,f as L}from"./chunk-JHK2DMUQ.js";import{a as z,b as Se,c as Ze}from"./chunk-TFWDJDGO.js";import{execFileSync as ia}from"child_process";import{createHash as aa}from"crypto";import{closeSync as sa,copyFileSync as fe,existsSync as E,mkdirSync as ge,mkdtempSync as oa,openSync as ca,readdirSync as la,readFileSync as me,renameSync as Cn,rmSync as D,statSync as da,writeFileSync as ua}from"fs";import{basename as pe,dirname as h,extname as pa,join as R,resolve as Dn}from"path";import{platform as ga}from"os";import{existsSync as Nt,readdirSync as rr}from"fs";import{isAbsolute as ir,join as Ie,resolve as ar}from"path";var sr={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n,projectPath:r})=>{let i=r?["index","--output",e,"--no-progress-bar",r]:["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&!r&&i.splice(1,0,"--pnpm-workspaces"),{binary:n,args:i}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},clojure:{language:"clojure",indexerBinary:"scip-clojure",projectLocalBinaries:["node_modules/.bin/scip-clojure"],checkCommand:"scip-clojure -h",indexArgs:({projectRoot:e,outputPath:t,indexerBinary:n,configPath:r})=>{let i=["-root",e,"-output",t];return r&&i.push("-config",ir(r)?r:ar(e,r)),{binary:n,args:i}},markerFiles:["deps.edn","project.clj","bb.edn","shadow-cljs.edn"],installMethods:[],installUrl:"https://github.com/PlunderStruck/scip-clojure"},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",Lt(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",Lt(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=Ie(e,"vendor","bin","scip-php"),r=Ie(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Nt(r)?r:Nt(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function ve(e){return sr[e]}function Lt(e,t){let n;try{n=rr(e)}catch{return null}for(let r of t)for(let i of n)if(i.endsWith(r))return Ie(e,i);return null}import{execFileSync as Fe}from"child_process";import{existsSync as Ee,readFileSync as or}from"fs";import{createRequire as cr}from"module";import{platform as lr}from"os";import{dirname as Ct,join as ie}from"path";var dr=cr(import.meta.url);function je(e){return[e.indexerBinary,...e.binaryAliases??[]]}function we(e){let t=je(e);return t.length===1?t[0]:t.join(" or ")}function ae(e){for(let t of je(e))if(z(t))return t;return pr(e)}function At(e){return ae(e)!==null||ur(e)}function ur(e){return $t(e)!==null}function pr(e){let t=$t(e);if(!t)return null;let r=JSON.parse(or(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return ie(Ct(t),r);for(let i of je(e)){let a=r[i];if(a)return ie(Ct(t),a)}return null}function $t(e){if(!e.bundledNpmPackage)return null;try{return dr.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Bt(e,t){for(let n of e.projectLocalBinaries??[]){let r=ie(t,n);if(Ee(r))return r}return null}function Gt(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Jt(n,t))return t;let r=gr(n,t);return r?{...t,DOTNET_ROOT:r}:t}function Ut(e,t){let n=e.installMethods,r=we(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(z(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{Fe(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let a=ae(e);if(a){let s=a===e.indexerBinary?"":` (using ${a})`;return t(`Successfully installed ${r} via ${i.label}${s}`),!0}t(`${i.label} command completed but ${r} was not found on PATH`)}catch(a){let s=a instanceof Error?a.message:String(a);t(`${i.label} install failed: ${s}`)}}return t(`Could not auto-install ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function gr(e,t){for(let n of fr(t))if(Jt(e,{...t,DOTNET_ROOT:n}))return n;return null}function fr(e){let t=[],n=e.DOTNET_ROOT;if(n&&Ee(n)&&t.push(n),lr()==="darwin"&&z("brew"))try{let r=Fe("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=ie(r,"libexec");Ee(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function Jt(e,t){try{return Fe(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import{readFileSync as Es}from"fs";import{dirname as js,join as ws}from"path";var Wt=at({kind:"file-dependency-graph",invalidation:Q("file-dependency-graph"),serialize:e=>JSON.stringify(e),deserialize:xr}),mr=tt("file-dep-graph",{clearGroups:["whole-project"]});function M(e,t,n={}){let r=n.scipEdges??"all-references";return mr.get(e,`${r}:${t??""}`,()=>{let i=new Set(w(e,{includeIgnored:!1})),a=rt(e),s=Sr(t,r),o=0,l=0,c=null,d=!1,u=0,g=0;return F("file-dep-graph.product",()=>{if(a){let f=Wt.read(e,s,a);if(f){d=!0;let b=Pr(f);return o=f.sourceFileCount,l=f.sourceEdgeCount,u=f.scipEdgeCount,g=b.size,c=f.sourceImportFingerprint,b}}let m=F("file-dep-graph.source-imports",()=>{let f=hr(e,i,t);return o=f.files.length,l=f.edges.length,c=f.fingerprint,f},()=>({scope:t??null,files:o,edges:l})),p=new Map,S=(f,b)=>Er(e,p,i,f,b);F("file-dep-graph.scip-edges",()=>{for(let f of vr(e,t,r))u+=1,S(f.from_file,f.to_file)},()=>({scope:t??null,edges:u}));for(let f of m.edges)S(f.fromFile,f.toFile);return g=p.size,a&&Wt.write(e,s,a,{sourceImportFingerprint:m.fingerprint,sourceFileCount:m.files.length,sourceEdgeCount:m.edges.length,scipEdgeCount:u,graph:br(p)}),p},()=>({scope:t??null,available:a!==null,hit:d,files:o,sourceEdges:l,scipEdges:u,graphFiles:g,sourceImportFingerprint:c}))})}function hr(e,t,n){let r=[],i=[];for(let a of t)if(!(n&&!a.includes(n))){r.push(a);for(let s of st(e,a))s.sourcePath&&i.push({fromFile:a,toFile:s.sourcePath})}return{files:r,edges:i,fingerprint:yr(r,i)}}function yr(e,t){let n=t.map(r=>`${r.fromFile}\0${r.toFile}`).sort();return C(JSON.stringify({files:e,edges:n}))}function Sr(e,t){return`edge-mode-v2:${t}:${e??"<all>"}`}function br(e){return[...e].map(([t,n])=>[t,[...n]])}function Pr(e){return new Map(e.graph.map(([t,n])=>[t,new Set(n)]))}function xr(e){let t=JSON.parse(e);return Rr(t)?t:null}function Rr(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sourceImportFingerprint=="string"&&typeof t.sourceFileCount=="number"&&typeof t.sourceEdgeCount=="number"&&typeof t.scipEdgeCount=="number"&&Array.isArray(t.graph)&&t.graph.every(Ir)}function Ir(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&Array.isArray(e[1])&&e[1].every(t=>typeof t=="string")}function vr(e,t,n){let r=t?"AND d1.relative_path LIKE ?":"",i=t?[`%${t}%`]:[],a=n==="imports-only"?"AND m.role = 2":"AND m.role != 1";return e.all(`SELECT DISTINCT
1
+ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XHIJHI.js";import{$ as bt,Aa as Re,C as st,Ca as re,Da as Ot,E as ut,F as pt,Fa as Mt,I as be,O as $,Q as gt,U as ft,V as Y,W as mt,X as K,Y as ht,Z as yt,_ as St,a as X,e as Ze,g as et,ga as Pt,h as T,ha as xt,i as C,ia as Rt,ja as It,k as rt,ka as vt,la as Et,m as it,ma as Ft,n as at,na as jt,o as Q,oa as wt,pa as _t,qa as B,ra as te,sa as Dt,u as A,ua as ne,va as Tt,wa as Pe,xa as kt,ya as xe}from"./chunk-SALRDXWM.js";import{b as tt,c as nt,f as w,g as V,h as ct,i as lt,j as dt}from"./chunk-SMBIGBGN.js";import{a as k,b as O}from"./chunk-3M2UCPFS.js";import{e as F,f as L}from"./chunk-JHK2DMUQ.js";import{a as z,b as Se,c as Ke}from"./chunk-TFWDJDGO.js";import{execFileSync as aa}from"child_process";import{createHash as sa}from"crypto";import{closeSync as oa,copyFileSync as fe,existsSync as E,mkdirSync as ge,mkdtempSync as ca,openSync as la,readdirSync as da,readFileSync as me,renameSync as An,rmSync as D,statSync as ua,writeFileSync as pa}from"fs";import{basename as pe,dirname as h,extname as ga,join as R,resolve as Tn}from"path";import{platform as fa}from"os";import{existsSync as Nt,readdirSync as ir}from"fs";import{isAbsolute as ar,join as Ie,resolve as sr}from"path";var or={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n,projectPath:r})=>{let i=r?["index","--output",e,"--no-progress-bar",r]:["index","--infer-tsconfig","--output",e,"--no-progress-bar"];return t&&!r&&i.splice(1,0,"--pnpm-workspaces"),{binary:n,args:i}},markerFiles:["tsconfig.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--infer-tsconfig","--output",e,"--no-progress-bar"]}),markerFiles:["package.json"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","@sourcegraph/scip-typescript"]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["pom.xml","build.gradle"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.sbt"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:["build.gradle.kts"],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:"rust",indexerBinary:"rust-analyzer",checkCommand:"rust-analyzer --version",indexArgs:({outputPath:e})=>({binary:"rust-analyzer",args:["scip",".","--output",e]}),markerFiles:["Cargo.toml"],installMethods:[{label:"rustup",prerequisite:"rustup",binary:"rustup",args:["component","add","rust-analyzer"]}],installUrl:"https://github.com/rust-lang/rust-analyzer"},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--project-name","project"]}),markerFiles:["pyproject.toml","setup.py"],installMethods:[{label:"npm",prerequisite:"npm",binary:"npm",args:["install","-g","scip-python-plus"]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},clojure:{language:"clojure",indexerBinary:"scip-clojure",projectLocalBinaries:["node_modules/.bin/scip-clojure"],checkCommand:"scip-clojure -h",indexArgs:({projectRoot:e,outputPath:t,indexerBinary:n,configPath:r})=>{let i=["-root",e,"-output",t];return r&&i.push("-config",ar(r)?r:sr(e,r)),{binary:n,args:i}},markerFiles:["deps.edn","project.clj","bb.edn","shadow-cljs.edn"],installMethods:[],installUrl:"https://github.com/PlunderStruck/scip-clojure"},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",Lt(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",Lt(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=Ie(e,"vendor","bin","scip-php"),r=Ie(e,"vendor","davidrjenni","scip-php","bin","scip-php");return{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",Nt(r)?r:Nt(n)?n:t]}},defaultOutputPath:"index.scip",markerFiles:["composer.json"],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function ve(e){return or[e]}function Lt(e,t){let n;try{n=ir(e)}catch{return null}for(let r of t)for(let i of n)if(i.endsWith(r))return Ie(e,i);return null}import{execFileSync as Fe}from"child_process";import{existsSync as Ee,readFileSync as cr}from"fs";import{createRequire as lr}from"module";import{platform as dr}from"os";import{dirname as Ct,join as ie}from"path";var ur=lr(import.meta.url);function je(e){return[e.indexerBinary,...e.binaryAliases??[]]}function we(e){let t=je(e);return t.length===1?t[0]:t.join(" or ")}function ae(e){for(let t of je(e))if(z(t))return t;return gr(e)}function At(e){return ae(e)!==null||pr(e)}function pr(e){return $t(e)!==null}function gr(e){let t=$t(e);if(!t)return null;let r=JSON.parse(cr(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return ie(Ct(t),r);for(let i of je(e)){let a=r[i];if(a)return ie(Ct(t),a)}return null}function $t(e){if(!e.bundledNpmPackage)return null;try{return ur.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function Bt(e,t){for(let n of e.projectLocalBinaries??[]){let r=ie(t,n);if(Ee(r))return r}return null}function Gt(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Jt(n,t))return t;let r=fr(n,t);return r?{...t,DOTNET_ROOT:r}:t}function Ut(e,t){let n=e.installMethods,r=we(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(z(i.prerequisite)){t(`Installing ${r} via ${i.label}...`);try{Fe(i.binary,i.args,{stdio:"inherit",timeout:3e5,env:process.env});let a=ae(e);if(a){let s=a===e.indexerBinary?"":` (using ${a})`;return t(`Successfully installed ${r} via ${i.label}${s}`),!0}t(`${i.label} command completed but ${r} was not found on PATH`)}catch(a){let s=a instanceof Error?a.message:String(a);t(`${i.label} install failed: ${s}`)}}return t(`Could not auto-install ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function fr(e,t){for(let n of mr(t))if(Jt(e,{...t,DOTNET_ROOT:n}))return n;return null}function mr(e){let t=[],n=e.DOTNET_ROOT;if(n&&Ee(n)&&t.push(n),dr()==="darwin"&&z("brew"))try{let r=Fe("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=ie(r,"libexec");Ee(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function Jt(e,t){try{return Fe(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}import{readFileSync as Fs}from"fs";import{dirname as ws,join as _s}from"path";var Wt=at({kind:"file-dependency-graph",invalidation:Q("file-dependency-graph"),serialize:e=>JSON.stringify(e),deserialize:Rr}),hr=tt("file-dep-graph",{clearGroups:["whole-project"]});function M(e,t,n={}){let r=n.scipEdges??"all-references";return hr.get(e,`${r}:${t??""}`,()=>{let i=new Set(w(e,{includeIgnored:!1})),a=rt(e),s=br(t,r),o=0,l=0,c=null,d=!1,u=0,g=0;return F("file-dep-graph.product",()=>{if(a){let f=Wt.read(e,s,a);if(f){d=!0;let b=xr(f);return o=f.sourceFileCount,l=f.sourceEdgeCount,u=f.scipEdgeCount,g=b.size,c=f.sourceImportFingerprint,b}}let m=F("file-dep-graph.source-imports",()=>{let f=yr(e,i,t);return o=f.files.length,l=f.edges.length,c=f.fingerprint,f},()=>({scope:t??null,files:o,edges:l})),p=new Map,S=(f,b)=>Fr(e,p,i,f,b);F("file-dep-graph.scip-edges",()=>{for(let f of Er(e,t,r))u+=1,S(f.from_file,f.to_file)},()=>({scope:t??null,edges:u}));for(let f of m.edges)S(f.fromFile,f.toFile);return g=p.size,a&&Wt.write(e,s,a,{sourceImportFingerprint:m.fingerprint,sourceFileCount:m.files.length,sourceEdgeCount:m.edges.length,scipEdgeCount:u,graph:Pr(p)}),p},()=>({scope:t??null,available:a!==null,hit:d,files:o,sourceEdges:l,scipEdges:u,graphFiles:g,sourceImportFingerprint:c}))})}function yr(e,t,n){let r=[],i=[];for(let a of t)if(!(n&&!a.includes(n))){r.push(a);for(let s of st(e,a))s.sourcePath&&i.push({fromFile:a,toFile:s.sourcePath})}return{files:r,edges:i,fingerprint:Sr(r,i)}}function Sr(e,t){let n=t.map(r=>`${r.fromFile}\0${r.toFile}`).sort();return C(JSON.stringify({files:e,edges:n}))}function br(e,t){return`edge-mode-v2:${t}:${e??"<all>"}`}function Pr(e){return[...e].map(([t,n])=>[t,[...n]])}function xr(e){return new Map(e.graph.map(([t,n])=>[t,new Set(n)]))}function Rr(e){let t=JSON.parse(e);return Ir(t)?t:null}function Ir(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sourceImportFingerprint=="string"&&typeof t.sourceFileCount=="number"&&typeof t.sourceEdgeCount=="number"&&typeof t.scipEdgeCount=="number"&&Array.isArray(t.graph)&&t.graph.every(vr)}function vr(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&Array.isArray(e[1])&&e[1].every(t=>typeof t=="string")}function Er(e,t,n){let r=t?"AND d1.relative_path LIKE ?":"",i=t?[`%${t}%`]:[],a=n==="imports-only"?"AND m.role = 2":"AND m.role != 1";return e.all(`SELECT DISTINCT
2
2
  d1.relative_path AS from_file,
3
3
  d2.relative_path AS to_file
4
4
  FROM mentions m
@@ -16,7 +16,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
16
16
  WHERE d1.id != d2.id
17
17
  ${a}
18
18
  ${e.pathExclusionsFor("d1","d2")}
19
- ${r}`,...i)}function Er(e,t,n,r,i){if(r===i||e.isIgnored(r)||e.isIgnored(i)||!n.has(i))return;let a=t.get(r);a||(a=new Set,t.set(r,a)),a.add(i)}function oe(e){let t=se(e.projectFiles),n=new Set(t),r=new Map(e.snapshot.files.map(u=>[u.path,u])),i=e.snapshot.files.filter(u=>{let g=V(u.path,["typescript"]);return g==="config"||g==="ambient"}).map(u=>u.path),a=se([...t,...i]),s=a.find(u=>!r.has(u)),o=new Set(e.snapshot.files.map(u=>u.path)).size!==e.snapshot.files.length,l=!s&&a.some(u=>Ht(r.get(u))),c=C(JSON.stringify({pnpmWorkspaces:e.snapshot.pnpmWorkspaces,typescriptProjectMode:e.snapshot.typescriptProjectMode,typescriptProjects:se(e.snapshot.typescriptProjects),membership:t})),d=new Map;return{identityFor(u,g){if(!n.has(u))return N("target-outside-project");if(o)return N("duplicate-input-path");if(s)return N("missing-input-fingerprint");if(l)return N("unreadable-input");let m=[],p,S;if(e.graph===null)m.push("dependency-graph-unavailable"),S="whole-project",p=a;else{let y=jr(u,e.graph,d);if(y.find(P=>!r.has(P)))return N("missing-input-fingerprint");if(p=se([...y,...i]),p.some(P=>Ht(r.get(P))))return N("unreadable-input");S="dependency-closure"}let f=p.map(y=>wr(r.get(y)));return{version:1,key:C(JSON.stringify({version:1,engineIdentity:e.engineIdentity,schemaVersion:g,projectIdentity:c,inputs:f})),mode:S,inputFiles:p,reasons:m}}}}function Fr(e,t){let n=new Set,r=[e];for(let i=0;i<r.length;i+=1){let a=r[i];if(!(a===void 0||n.has(a))){n.add(a);for(let s of[...t.get(a)??[]].sort())n.has(s)||r.push(s)}}return[...n].sort()}function jr(e,t,n){let r=n.get(e);if(r)return r;let i=Fr(e,t);return n.set(e,i),i}function wr(e){return{path:e.path,size:e.size,hash:e.hash}}function Ht(e){return e.size<0||e.hash==="unreadable"}function N(e){return{version:1,key:null,mode:"unkeyed",inputFiles:[],reasons:[e]}}function se(e){return[...new Set(e)].sort()}var ks=nt("typescript-semantic-identity-context",{clearGroups:["whole-project"]});function qt(e){return w(e,{includeIgnored:!1}).filter($).sort()}var _r="typescript-reference-fragment-v2",Dr=it({kind:"typescript-reference-fragments",invalidation:Q("typescript-reference-fragments"),serialize:e=>JSON.stringify(e),deserialize:Tr});function zt(e,t,n,r=e){let i=qt(e),a=oe({projectFiles:i,snapshot:t,graph:M(e),engineIdentity:gt()}),s=[...n].map(([o,l])=>({relativePath:o,contentHash:a.identityFor(o,_r).key,value:[...l]}));if(s.some(o=>o.contentHash===null))throw new Error("TypeScript reference fragment identity is unavailable for an affected document.");return Dr.writeBatch(r,s.map(o=>({...o,contentHash:o.contentHash}))),s.length}function Tr(e){try{let t=JSON.parse(e);return!Array.isArray(t)||!t.every(kr)?null:t}catch{return null}}function kr(e){if(!e||typeof e!="object")return!1;let t=e,n=t.location;return typeof t.targetSymbol=="string"&&!!n&&typeof n.file=="string"&&typeof n.line=="number"&&typeof n.column=="number"}import{createHash as Or}from"crypto";import{appendFileSync as Mr,existsSync as Nr,mkdirSync as Lr,readFileSync as Js}from"fs";import{dirname as Vt,join as Xt}from"path";var Cr="<global-symbols>";function Ar(e){let t=[];for(let n of e.all(`
19
+ ${r}`,...i)}function Fr(e,t,n,r,i){if(r===i||e.isIgnored(r)||e.isIgnored(i)||!n.has(i))return;let a=t.get(r);a||(a=new Set,t.set(r,a)),a.add(i)}function oe(e){let t=se(e.projectFiles),n=new Set(t),r=new Map(e.snapshot.files.map(u=>[u.path,u])),i=e.snapshot.files.filter(u=>{let g=V(u.path,["typescript"]);return g==="config"||g==="ambient"}).map(u=>u.path),a=se([...t,...i]),s=a.find(u=>!r.has(u)),o=new Set(e.snapshot.files.map(u=>u.path)).size!==e.snapshot.files.length,l=!s&&a.some(u=>Ht(r.get(u))),c=C(JSON.stringify({pnpmWorkspaces:e.snapshot.pnpmWorkspaces,typescriptProjectMode:e.snapshot.typescriptProjectMode,typescriptProjects:se(e.snapshot.typescriptProjects),membership:t})),d=new Map;return{identityFor(u,g){if(!n.has(u))return N("target-outside-project");if(o)return N("duplicate-input-path");if(s)return N("missing-input-fingerprint");if(l)return N("unreadable-input");let m=[],p,S;if(e.graph===null)m.push("dependency-graph-unavailable"),S="whole-project",p=a;else{let y=wr(u,e.graph,d);if(y.find(P=>!r.has(P)))return N("missing-input-fingerprint");if(p=se([...y,...i]),p.some(P=>Ht(r.get(P))))return N("unreadable-input");S="dependency-closure"}let f=p.map(y=>_r(r.get(y)));return{version:1,key:C(JSON.stringify({version:1,engineIdentity:e.engineIdentity,schemaVersion:g,projectIdentity:c,inputs:f})),mode:S,inputFiles:p,reasons:m}}}}function jr(e,t){let n=new Set,r=[e];for(let i=0;i<r.length;i+=1){let a=r[i];if(!(a===void 0||n.has(a))){n.add(a);for(let s of[...t.get(a)??[]].sort())n.has(s)||r.push(s)}}return[...n].sort()}function wr(e,t,n){let r=n.get(e);if(r)return r;let i=jr(e,t);return n.set(e,i),i}function _r(e){return{path:e.path,size:e.size,hash:e.hash}}function Ht(e){return e.size<0||e.hash==="unreadable"}function N(e){return{version:1,key:null,mode:"unkeyed",inputFiles:[],reasons:[e]}}function se(e){return[...new Set(e)].sort()}var Os=nt("typescript-semantic-identity-context",{clearGroups:["whole-project"]});function qt(e){return w(e,{includeIgnored:!1}).filter($).sort()}var Dr="typescript-reference-fragment-v2",Tr=it({kind:"typescript-reference-fragments",invalidation:Q("typescript-reference-fragments"),serialize:e=>JSON.stringify(e),deserialize:kr});function zt(e,t,n,r=e){let i=qt(e),a=oe({projectFiles:i,snapshot:t,graph:M(e),engineIdentity:gt()}),s=[...n].map(([o,l])=>({relativePath:o,contentHash:a.identityFor(o,Dr).key,value:[...l]}));if(s.some(o=>o.contentHash===null))throw new Error("TypeScript reference fragment identity is unavailable for an affected document.");return Tr.writeBatch(r,s.map(o=>({...o,contentHash:o.contentHash}))),s.length}function kr(e){try{let t=JSON.parse(e);return!Array.isArray(t)||!t.every(Or)?null:t}catch{return null}}function Or(e){if(!e||typeof e!="object")return!1;let t=e,n=t.location;return typeof t.targetSymbol=="string"&&!!n&&typeof n.file=="string"&&typeof n.line=="number"&&typeof n.column=="number"}import{createHash as Mr}from"crypto";import{appendFileSync as Nr,existsSync as Lr,mkdirSync as Cr,readFileSync as Ws}from"fs";import{dirname as Vt,join as Xt}from"path";var Ar="<global-symbols>";function $r(e){let t=[];for(let n of e.all(`
20
20
  SELECT relative_path, language, position_encoding, text
21
21
  FROM documents
22
22
  `))t.push({relativePath:n.relative_path,kind:"document",values:[n.language,n.position_encoding,n.text]});for(let n of e.all(`
@@ -72,9 +72,9 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
72
72
  ) AND NOT EXISTS (
73
73
  SELECT 1 FROM mentions m WHERE m.symbol_id = g.id
74
74
  )
75
- `))t.push({relativePath:Cr,kind:"global-symbol",values:_e(n)});return $r(t)}function $r(e){let t=new Map;for(let r of e){let i=JSON.stringify([r.kind,r.values]),a=t.get(r.relativePath)??[];a.push(i),t.set(r.relativePath,a)}let n=new Map;for(let[r,i]of[...t].sort(([a],[s])=>a.localeCompare(s))){let a=Or("sha256");for(let s of i.sort())a.update(String(Buffer.byteLength(s))),a.update(":"),a.update(s),a.update(`
76
- `);n.set(r,a.digest("hex"))}return n}function Br(e,t){let n=[],r=[],i=[],a=[],s=new Set([...e.keys(),...t.keys()]);for(let o of[...s].sort()){let l=e.get(o),c=t.get(o);l===void 0?n.push(o):c===void 0?i.push(o):l!==c?r.push(o):a.push(o)}return{addedFiles:n,modifiedFiles:r,deletedFiles:i,changedFiles:[...n,...r,...i].sort(),unchangedFiles:a}}function De(e,t,n){let r=new Set(e.affectedFiles),i=new Set(t.changedFiles),a=e.mode==="full-project"?[]:t.changedFiles.filter(l=>!r.has(l)),s=e.affectedFiles.filter(l=>!i.has(l)).sort(),o=t.changedFiles.length-a.length;return{passed:a.length===0,recall:t.changedFiles.length===0?1:o/t.changedFiles.length,affectedRatio:n===0?0:e.affectedFiles.length/n,predictedFiles:[...e.affectedFiles].sort(),actualFiles:[...t.changedFiles],missingFiles:a,extraFiles:s}}function Te(e,t=Ur){let n=t.now();if(!t.databaseExists(e.previousDbPath))return ce(e.refreshResult,"prior-index-unavailable",n,t.now());if(!t.databaseExists(e.candidateDbPath))return ce(e.refreshResult,"candidate-index-unavailable",n,t.now());let r=null,i=null;try{r=t.openDatabase(e.projectRoot,e.previousDbPath,e.previousIndexPath),i=t.openDatabase(e.projectRoot,e.candidateDbPath,e.candidateIndexPath);let a=[...new Set([...t.indexedPaths(r),...t.indexedPaths(i)])].sort(),s=Y(e.previousSnapshot,e.currentSnapshot),o=new Set(a),l=s.changes.length>0&&!mt(s).fullProject&&s.changes.every(g=>o.has(g.path)),c=K(s,l?t.dependencyGraph(r):new Map,a),d=Br(t.factDigests(r),t.factDigests(i)),u=t.now();return{version:1,status:"evaluated",refreshResult:e.refreshResult,recordedAt:new Date(u).toISOString(),durationMs:Math.max(0,u-n),manifest:s,plan:c,comparison:d,evaluation:De(c,d,a.length)}}catch(a){return ce(e.refreshResult,"oracle-error",n,t.now(),a instanceof Error?a.message:String(a))}finally{Qt(r),Qt(i)}}function Yt(e,t,n,r=Date.now()){return ce(e,t,r,r,n)}function Gr(e){let t=Vt(e);return{latestPath:Xt(t,"affected-shadow-latest.json"),historyPath:Xt(t,"affected-shadow.jsonl")}}function Kt(e,t,n=Jr){let r=Gr(e);return n.appendHistory(r.historyPath,t),n.writeLatest(r.latestPath,t),r}function _e(e,t=[]){let n=[];for(let r of t)n.push(r);return n.push(e.symbol,e.display_name,e.kind,e.documentation,e.signature_hex,e.enclosing_symbol,e.relationships_hex),n}var Ur={now:()=>Date.now(),databaseExists:e=>Nr(e),openDatabase:(e,t,n)=>new T({projectRoot:e,dbPath:t,indexPath:n}),indexedPaths:e=>w(e),dependencyGraph:e=>M(e),factDigests:e=>Ar(e)},Jr={appendHistory:(e,t)=>{Lr(Vt(e),{recursive:!0}),Mr(e,`${JSON.stringify(t)}
77
- `)},writeLatest:(e,t)=>O(e,t,{spacing:2,trailingNewline:!0})};function ce(e,t,n,r,i){return{version:1,status:"unavailable",refreshResult:e,recordedAt:new Date(r).toISOString(),durationMs:Math.max(0,r-n),reason:t,...i?{error:i}:{}}}function Qt(e){try{e?.close()}catch{}}import{createHash as Wr}from"crypto";import{copyFileSync as Hr,existsSync as Zt,rmSync as en}from"fs";import{resolve as qr}from"path";import rn from"better-sqlite3";var zr={documents:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"language",type:"TEXT",notnull:0,pk:0},{name:"relative_path",type:"TEXT",notnull:1,pk:0},{name:"position_encoding",type:"TEXT",notnull:0,pk:0},{name:"text",type:"TEXT",notnull:0,pk:0}],chunks:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"chunk_index",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"occurrences",type:"BLOB",notnull:1,pk:0}],global_symbols:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"symbol",type:"TEXT",notnull:1,pk:0},{name:"display_name",type:"TEXT",notnull:0,pk:0},{name:"kind",type:"INTEGER",notnull:0,pk:0},{name:"documentation",type:"TEXT",notnull:0,pk:0},{name:"signature",type:"BLOB",notnull:0,pk:0},{name:"enclosing_symbol",type:"TEXT",notnull:0,pk:0},{name:"relationships",type:"BLOB",notnull:0,pk:0}],mentions:[{name:"chunk_id",type:"INTEGER",notnull:1,pk:1},{name:"symbol_id",type:"INTEGER",notnull:1,pk:2},{name:"role",type:"INTEGER",notnull:1,pk:3}],defn_enclosing_ranges:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"symbol_id",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"start_char",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"end_char",type:"INTEGER",notnull:1,pk:0}]},Xr={idx_chunks_doc_id:{table:"chunks",columns:["document_id"]},idx_chunks_line_range:{table:"chunks",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_document:{table:"defn_enclosing_ranges",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_symbol_id:{table:"defn_enclosing_ranges",columns:["symbol_id"]},idx_global_symbols_symbol:{table:"global_symbols",columns:["symbol"]},idx_mentions_symbol_id_role:{table:"mentions",columns:["symbol_id","role"]}};function an(e){let t=Date.now(),n=Qr(e.affectedFiles);if(Vr(e.previousDbPath,e.miniDbPath,e.candidateDbPath),en(e.candidateDbPath,{force:!0}),!Zt(e.previousDbPath))throw new Error("previous SQLite generation is unavailable");if(!Zt(e.miniDbPath))throw new Error("incremental SQLite mini database is unavailable");tn(e.previousDbPath,"previous SQLite generation",!1),tn(e.miniDbPath,"incremental SQLite mini database"),Hr(e.previousDbPath,e.candidateDbPath);let r=null;try{r=new rn(e.candidateDbPath,{fileMustExist:!0}),r.pragma("busy_timeout = 5000"),r.pragma("foreign_keys = ON"),r.prepare("ATTACH DATABASE ? AS incremental").run(e.miniDbPath),ke(r,"main","candidate SQLite generation"),ke(r,"incremental","incremental SQLite mini database"),Yr(r,n),Kr(r,n.length);let i=Oe(r,"main",!0),a=_(r,"SELECT COUNT(*) AS value FROM main.documents");r.transaction(()=>{Zr(r),ei(r),ti(r),e.onStage?.("after-delete"),ni(r),e.onStage?.("after-symbol-reconciliation"),ri(r),e.onStage?.("after-insert"),ii(r),ai(r,n.length,a),e.onStage?.("before-commit")}).immediate(),sn(r,"main","candidate SQLite generation");let l=[...si(r)].filter(([c,d])=>i.get(c)!==d).map(([c])=>c).sort();return r.exec("DETACH DATABASE incremental"),r.close(),r=null,{candidateDbPath:e.candidateDbPath,affectedDocumentCount:n.length,changedDocumentPaths:l,durationMs:Date.now()-t}}catch(i){try{r?.close()}finally{en(e.candidateDbPath,{force:!0})}throw new Error(`Incremental SQLite publication rejected: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}function Qr(e){if(e.length===0)throw new Error("incremental SQLite publication requires affected documents");let t=[...e].sort();for(let n of t)if(!n||n.startsWith("/")||n.includes("\\")||n.split("/").includes(".."))throw new Error(`invalid affected document path: ${n}`);if(new Set(t).size!==t.length)throw new Error("incremental SQLite publication contains duplicate affected documents");return t}function Vr(e,t,n){let r=[e,t,n].map(i=>qr(i));if(new Set(r).size!==r.length)throw new Error("previous, mini, and candidate SQLite paths must be distinct")}function tn(e,t,n=!0){let r=new rn(e,{readonly:!0,fileMustExist:!0});try{ke(r,"main",t),n&&sn(r,"main",t)}finally{r.close()}}function ke(e,t,n){for(let[r,i]of Object.entries(zr)){let s=e.prepare(`PRAGMA ${t}.table_info('${r}')`).all().map(({name:o,type:l,notnull:c,pk:d})=>({name:o,type:l.toUpperCase(),notnull:c,pk:d}));if(JSON.stringify(s)!==JSON.stringify(i))throw new Error(`${n} schema changed for table ${r}`)}for(let[r,i]of Object.entries(Xr)){let a=e.prepare(`SELECT tbl_name FROM ${t}.sqlite_master WHERE type = 'index' AND name = ?`).get(r),s=e.prepare(`PRAGMA ${t}.index_info('${r}')`).all().map(o=>o.name);if(a?.tbl_name!==i.table||JSON.stringify(s)!==JSON.stringify(i.columns))throw new Error(`${n} schema changed for index ${r}`)}nn(e,t,"documents",["relative_path"],n),nn(e,t,"global_symbols",["symbol"],n)}function nn(e,t,n,r,i){if(!e.prepare(`PRAGMA ${t}.index_list('${n}')`).all().some(o=>{if(o.unique!==1)return!1;let l=e.prepare(`PRAGMA ${t}.index_info('${o.name}')`).all().map(c=>c.name);return JSON.stringify(l)===JSON.stringify(r)}))throw new Error(`${i} lost the unique ${n}(${r.join(", ")}) constraint`)}function sn(e,t,n){let r=e.prepare(`PRAGMA ${t}.integrity_check`).pluck().get();if(r!=="ok")throw new Error(`${n} failed integrity_check: ${String(r)}`);if(e.prepare(`PRAGMA ${t}.foreign_key_check`).all().length>0)throw new Error(`${n} failed foreign_key_check`)}function Yr(e,t){e.exec("CREATE TEMP TABLE incremental_affected_paths (relative_path TEXT PRIMARY KEY) WITHOUT ROWID");let n=e.prepare("INSERT INTO temp.incremental_affected_paths(relative_path) VALUES (?)");e.transaction(i=>{for(let a of i)n.run(a)})(t)}function Kr(e,t){let n=_(e,"SELECT COUNT(*) AS value FROM incremental.documents"),r=_(e,`SELECT COUNT(*) AS value
75
+ `))t.push({relativePath:Ar,kind:"global-symbol",values:_e(n)});return Br(t)}function Br(e){let t=new Map;for(let r of e){let i=JSON.stringify([r.kind,r.values]),a=t.get(r.relativePath)??[];a.push(i),t.set(r.relativePath,a)}let n=new Map;for(let[r,i]of[...t].sort(([a],[s])=>a.localeCompare(s))){let a=Mr("sha256");for(let s of i.sort())a.update(String(Buffer.byteLength(s))),a.update(":"),a.update(s),a.update(`
76
+ `);n.set(r,a.digest("hex"))}return n}function Gr(e,t){let n=[],r=[],i=[],a=[],s=new Set([...e.keys(),...t.keys()]);for(let o of[...s].sort()){let l=e.get(o),c=t.get(o);l===void 0?n.push(o):c===void 0?i.push(o):l!==c?r.push(o):a.push(o)}return{addedFiles:n,modifiedFiles:r,deletedFiles:i,changedFiles:[...n,...r,...i].sort(),unchangedFiles:a}}function De(e,t,n){let r=new Set(e.affectedFiles),i=new Set(t.changedFiles),a=e.mode==="full-project"?[]:t.changedFiles.filter(l=>!r.has(l)),s=e.affectedFiles.filter(l=>!i.has(l)).sort(),o=t.changedFiles.length-a.length;return{passed:a.length===0,recall:t.changedFiles.length===0?1:o/t.changedFiles.length,affectedRatio:n===0?0:e.affectedFiles.length/n,predictedFiles:[...e.affectedFiles].sort(),actualFiles:[...t.changedFiles],missingFiles:a,extraFiles:s}}function Te(e,t=Jr){let n=t.now();if(!t.databaseExists(e.previousDbPath))return ce(e.refreshResult,"prior-index-unavailable",n,t.now());if(!t.databaseExists(e.candidateDbPath))return ce(e.refreshResult,"candidate-index-unavailable",n,t.now());let r=null,i=null;try{r=t.openDatabase(e.projectRoot,e.previousDbPath,e.previousIndexPath),i=t.openDatabase(e.projectRoot,e.candidateDbPath,e.candidateIndexPath);let a=[...new Set([...t.indexedPaths(r),...t.indexedPaths(i)])].sort(),s=Y(e.previousSnapshot,e.currentSnapshot),o=new Set(a),l=s.changes.length>0&&!mt(s).fullProject&&s.changes.every(g=>o.has(g.path)),c=K(s,l?t.dependencyGraph(r):new Map,a),d=Gr(t.factDigests(r),t.factDigests(i)),u=t.now();return{version:1,status:"evaluated",refreshResult:e.refreshResult,recordedAt:new Date(u).toISOString(),durationMs:Math.max(0,u-n),manifest:s,plan:c,comparison:d,evaluation:De(c,d,a.length)}}catch(a){return ce(e.refreshResult,"oracle-error",n,t.now(),a instanceof Error?a.message:String(a))}finally{Qt(r),Qt(i)}}function Yt(e,t,n,r=Date.now()){return ce(e,t,r,r,n)}function Ur(e){let t=Vt(e);return{latestPath:Xt(t,"affected-shadow-latest.json"),historyPath:Xt(t,"affected-shadow.jsonl")}}function Kt(e,t,n=Wr){let r=Ur(e);return n.appendHistory(r.historyPath,t),n.writeLatest(r.latestPath,t),r}function _e(e,t=[]){let n=[];for(let r of t)n.push(r);return n.push(e.symbol,e.display_name,e.kind,e.documentation,e.signature_hex,e.enclosing_symbol,e.relationships_hex),n}var Jr={now:()=>Date.now(),databaseExists:e=>Lr(e),openDatabase:(e,t,n)=>new T({projectRoot:e,dbPath:t,indexPath:n}),indexedPaths:e=>w(e),dependencyGraph:e=>M(e),factDigests:e=>$r(e)},Wr={appendHistory:(e,t)=>{Cr(Vt(e),{recursive:!0}),Nr(e,`${JSON.stringify(t)}
77
+ `)},writeLatest:(e,t)=>O(e,t,{spacing:2,trailingNewline:!0})};function ce(e,t,n,r,i){return{version:1,status:"unavailable",refreshResult:e,recordedAt:new Date(r).toISOString(),durationMs:Math.max(0,r-n),reason:t,...i?{error:i}:{}}}function Qt(e){try{e?.close()}catch{}}import{createHash as Hr}from"crypto";import{copyFileSync as qr,existsSync as Zt,rmSync as en}from"fs";import{resolve as zr}from"path";import rn from"better-sqlite3";var Xr={documents:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"language",type:"TEXT",notnull:0,pk:0},{name:"relative_path",type:"TEXT",notnull:1,pk:0},{name:"position_encoding",type:"TEXT",notnull:0,pk:0},{name:"text",type:"TEXT",notnull:0,pk:0}],chunks:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"chunk_index",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"occurrences",type:"BLOB",notnull:1,pk:0}],global_symbols:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"symbol",type:"TEXT",notnull:1,pk:0},{name:"display_name",type:"TEXT",notnull:0,pk:0},{name:"kind",type:"INTEGER",notnull:0,pk:0},{name:"documentation",type:"TEXT",notnull:0,pk:0},{name:"signature",type:"BLOB",notnull:0,pk:0},{name:"enclosing_symbol",type:"TEXT",notnull:0,pk:0},{name:"relationships",type:"BLOB",notnull:0,pk:0}],mentions:[{name:"chunk_id",type:"INTEGER",notnull:1,pk:1},{name:"symbol_id",type:"INTEGER",notnull:1,pk:2},{name:"role",type:"INTEGER",notnull:1,pk:3}],defn_enclosing_ranges:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"symbol_id",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"start_char",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"end_char",type:"INTEGER",notnull:1,pk:0}]},Qr={idx_chunks_doc_id:{table:"chunks",columns:["document_id"]},idx_chunks_line_range:{table:"chunks",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_document:{table:"defn_enclosing_ranges",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_symbol_id:{table:"defn_enclosing_ranges",columns:["symbol_id"]},idx_global_symbols_symbol:{table:"global_symbols",columns:["symbol"]},idx_mentions_symbol_id_role:{table:"mentions",columns:["symbol_id","role"]}};function an(e){let t=Date.now(),n=Vr(e.affectedFiles);if(Yr(e.previousDbPath,e.miniDbPath,e.candidateDbPath),en(e.candidateDbPath,{force:!0}),!Zt(e.previousDbPath))throw new Error("previous SQLite generation is unavailable");if(!Zt(e.miniDbPath))throw new Error("incremental SQLite mini database is unavailable");tn(e.previousDbPath,"previous SQLite generation",!1),tn(e.miniDbPath,"incremental SQLite mini database"),qr(e.previousDbPath,e.candidateDbPath);let r=null;try{r=new rn(e.candidateDbPath,{fileMustExist:!0}),r.pragma("busy_timeout = 5000"),r.pragma("foreign_keys = ON"),r.prepare("ATTACH DATABASE ? AS incremental").run(e.miniDbPath),ke(r,"main","candidate SQLite generation"),ke(r,"incremental","incremental SQLite mini database"),Kr(r,n),Zr(r,n.length);let i=Oe(r,"main",!0),a=_(r,"SELECT COUNT(*) AS value FROM main.documents");r.transaction(()=>{ei(r),ti(r),ni(r),e.onStage?.("after-delete"),ri(r),e.onStage?.("after-symbol-reconciliation"),ii(r),e.onStage?.("after-insert"),ai(r),si(r,n.length,a),e.onStage?.("before-commit")}).immediate(),sn(r,"main","candidate SQLite generation");let l=[...oi(r)].filter(([c,d])=>i.get(c)!==d).map(([c])=>c).sort();return r.exec("DETACH DATABASE incremental"),r.close(),r=null,{candidateDbPath:e.candidateDbPath,affectedDocumentCount:n.length,changedDocumentPaths:l,durationMs:Date.now()-t}}catch(i){try{r?.close()}finally{en(e.candidateDbPath,{force:!0})}throw new Error(`Incremental SQLite publication rejected: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}function Vr(e){if(e.length===0)throw new Error("incremental SQLite publication requires affected documents");let t=[...e].sort();for(let n of t)if(!n||n.startsWith("/")||n.includes("\\")||n.split("/").includes(".."))throw new Error(`invalid affected document path: ${n}`);if(new Set(t).size!==t.length)throw new Error("incremental SQLite publication contains duplicate affected documents");return t}function Yr(e,t,n){let r=[e,t,n].map(i=>zr(i));if(new Set(r).size!==r.length)throw new Error("previous, mini, and candidate SQLite paths must be distinct")}function tn(e,t,n=!0){let r=new rn(e,{readonly:!0,fileMustExist:!0});try{ke(r,"main",t),n&&sn(r,"main",t)}finally{r.close()}}function ke(e,t,n){for(let[r,i]of Object.entries(Xr)){let s=e.prepare(`PRAGMA ${t}.table_info('${r}')`).all().map(({name:o,type:l,notnull:c,pk:d})=>({name:o,type:l.toUpperCase(),notnull:c,pk:d}));if(JSON.stringify(s)!==JSON.stringify(i))throw new Error(`${n} schema changed for table ${r}`)}for(let[r,i]of Object.entries(Qr)){let a=e.prepare(`SELECT tbl_name FROM ${t}.sqlite_master WHERE type = 'index' AND name = ?`).get(r),s=e.prepare(`PRAGMA ${t}.index_info('${r}')`).all().map(o=>o.name);if(a?.tbl_name!==i.table||JSON.stringify(s)!==JSON.stringify(i.columns))throw new Error(`${n} schema changed for index ${r}`)}nn(e,t,"documents",["relative_path"],n),nn(e,t,"global_symbols",["symbol"],n)}function nn(e,t,n,r,i){if(!e.prepare(`PRAGMA ${t}.index_list('${n}')`).all().some(o=>{if(o.unique!==1)return!1;let l=e.prepare(`PRAGMA ${t}.index_info('${o.name}')`).all().map(c=>c.name);return JSON.stringify(l)===JSON.stringify(r)}))throw new Error(`${i} lost the unique ${n}(${r.join(", ")}) constraint`)}function sn(e,t,n){let r=e.prepare(`PRAGMA ${t}.integrity_check`).pluck().get();if(r!=="ok")throw new Error(`${n} failed integrity_check: ${String(r)}`);if(e.prepare(`PRAGMA ${t}.foreign_key_check`).all().length>0)throw new Error(`${n} failed foreign_key_check`)}function Kr(e,t){e.exec("CREATE TEMP TABLE incremental_affected_paths (relative_path TEXT PRIMARY KEY) WITHOUT ROWID");let n=e.prepare("INSERT INTO temp.incremental_affected_paths(relative_path) VALUES (?)");e.transaction(i=>{for(let a of i)n.run(a)})(t)}function Zr(e,t){let n=_(e,"SELECT COUNT(*) AS value FROM incremental.documents"),r=_(e,`SELECT COUNT(*) AS value
78
78
  FROM main.documents d
79
79
  JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`),i=e.prepare(`SELECT p.relative_path
80
80
  FROM temp.incremental_affected_paths p
@@ -84,7 +84,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
84
84
  FROM incremental.documents d
85
85
  LEFT JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
86
86
  WHERE p.relative_path IS NULL
87
- LIMIT 1`).pluck().get();if(n!==t||r!==t||i!==void 0||a!==void 0)throw new Error("incremental SQLite mini database does not exactly match the affected document set")}function Zr(e){e.exec(`
87
+ LIMIT 1`).pluck().get();if(n!==t||r!==t||i!==void 0||a!==void 0)throw new Error("incremental SQLite mini database does not exactly match the affected document set")}function ei(e){e.exec(`
88
88
  CREATE TEMP TABLE incremental_old_defined_symbols (symbol TEXT PRIMARY KEY) WITHOUT ROWID;
89
89
  INSERT OR IGNORE INTO temp.incremental_old_defined_symbols(symbol)
90
90
  SELECT g.symbol
@@ -111,7 +111,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
111
111
  FROM incremental.mentions m
112
112
  JOIN incremental.global_symbols g ON g.id = m.symbol_id
113
113
  WHERE m.role = 1;
114
- `)}function ei(e){let t=e.prepare(`WITH changed_symbols AS (
114
+ `)}function ti(e){let t=e.prepare(`WITH changed_symbols AS (
115
115
  SELECT symbol FROM temp.incremental_old_defined_symbols
116
116
  UNION
117
117
  SELECT symbol FROM temp.incremental_new_defined_symbols
@@ -134,7 +134,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
134
134
  SELECT u.symbol
135
135
  FROM unaffected_definitions u
136
136
  JOIN changed_symbols c ON c.symbol = u.symbol
137
- LIMIT 1`).pluck().get();if(typeof t=="string")throw new Error(`symbol definition is shared by affected and unaffected documents: ${t}`)}function ti(e){e.exec(`
137
+ LIMIT 1`).pluck().get();if(typeof t=="string")throw new Error(`symbol definition is shared by affected and unaffected documents: ${t}`)}function ni(e){e.exec(`
138
138
  DELETE FROM main.mentions
139
139
  WHERE chunk_id IN (
140
140
  SELECT c.id
@@ -156,7 +156,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
156
156
  );
157
157
  DELETE FROM main.documents
158
158
  WHERE relative_path IN (SELECT relative_path FROM temp.incremental_affected_paths);
159
- `)}function ni(e){e.exec(`
159
+ `)}function ri(e){e.exec(`
160
160
  UPDATE main.global_symbols
161
161
  SET display_name = NULL,
162
162
  kind = NULL,
@@ -198,7 +198,7 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
198
198
  WHERE source.symbol = main.global_symbols.symbol
199
199
  )
200
200
  WHERE symbol IN (SELECT symbol FROM temp.incremental_new_defined_symbols);
201
- `)}function ri(e){let t=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.documents"),n=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.chunks"),r=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.defn_enclosing_ranges");e.prepare(`INSERT INTO main.documents(id, language, relative_path, position_encoding, text)
201
+ `)}function ii(e){let t=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.documents"),n=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.chunks"),r=_(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.defn_enclosing_ranges");e.prepare(`INSERT INTO main.documents(id, language, relative_path, position_encoding, text)
202
202
  SELECT id + ?, language, relative_path, position_encoding, text
203
203
  FROM incremental.documents`).run(t),e.prepare(`INSERT INTO main.chunks(id, document_id, chunk_index, start_line, end_line, occurrences)
204
204
  SELECT id + ?, document_id + ?, chunk_index, start_line, end_line, occurrences
@@ -213,15 +213,15 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
213
213
  r.start_line, r.start_char, r.end_line, r.end_char
214
214
  FROM incremental.defn_enclosing_ranges r
215
215
  JOIN incremental.global_symbols source ON source.id = r.symbol_id
216
- JOIN main.global_symbols target ON target.symbol = source.symbol`).run(r,t)}function ii(e){e.exec(`
216
+ JOIN main.global_symbols target ON target.symbol = source.symbol`).run(r,t)}function ai(e){e.exec(`
217
217
  DELETE FROM main.global_symbols
218
218
  WHERE NOT EXISTS (SELECT 1 FROM main.mentions m WHERE m.symbol_id = main.global_symbols.id)
219
219
  AND NOT EXISTS (
220
220
  SELECT 1 FROM main.defn_enclosing_ranges r WHERE r.symbol_id = main.global_symbols.id
221
221
  );
222
- `)}function ai(e,t,n){let r=_(e,"SELECT COUNT(*) AS value FROM main.documents"),i=_(e,`SELECT COUNT(*) AS value
222
+ `)}function si(e,t,n){let r=_(e,"SELECT COUNT(*) AS value FROM main.documents"),i=_(e,`SELECT COUNT(*) AS value
223
223
  FROM main.documents d
224
- JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`);if(r!==n||i!==t)throw new Error("candidate SQLite document counts changed unexpectedly");let a=e.prepare("SELECT relative_path FROM main.documents GROUP BY relative_path HAVING COUNT(*) > 1 LIMIT 1").pluck().get(),s=e.prepare("SELECT symbol FROM main.global_symbols GROUP BY symbol HAVING COUNT(*) > 1 LIMIT 1").pluck().get();if(a!==void 0||s!==void 0)throw new Error("candidate SQLite generation contains duplicate document paths or symbols")}function si(e){let t=Oe(e,"main",!0),n=Oe(e,"incremental",!1);if(JSON.stringify([...t])!==JSON.stringify([...n]))throw new Error("candidate SQLite affected document facts differ from the mini database");return t}function Oe(e,t,n){let r=n?"JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path":"",i=e.prepare(`SELECT d.relative_path, d.language, d.position_encoding, d.text
224
+ JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`);if(r!==n||i!==t)throw new Error("candidate SQLite document counts changed unexpectedly");let a=e.prepare("SELECT relative_path FROM main.documents GROUP BY relative_path HAVING COUNT(*) > 1 LIMIT 1").pluck().get(),s=e.prepare("SELECT symbol FROM main.global_symbols GROUP BY symbol HAVING COUNT(*) > 1 LIMIT 1").pluck().get();if(a!==void 0||s!==void 0)throw new Error("candidate SQLite generation contains duplicate document paths or symbols")}function oi(e){let t=Oe(e,"main",!0),n=Oe(e,"incremental",!1);if(JSON.stringify([...t])!==JSON.stringify([...n]))throw new Error("candidate SQLite affected document facts differ from the mini database");return t}function Oe(e,t,n){let r=n?"JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path":"",i=e.prepare(`SELECT d.relative_path, d.language, d.position_encoding, d.text
225
225
  FROM ${t}.documents d
226
226
  ${r}
227
227
  ORDER BY d.relative_path`).all(),a=e.prepare(`SELECT d.relative_path, c.chunk_index, c.start_line, c.end_line, hex(c.occurrences) AS occurrences
@@ -243,16 +243,16 @@ import{a as Z,b as ee}from"./chunk-4L4X66GE.js";import{a as ot}from"./chunk-P5XH
243
243
  JOIN ${t}.documents d ON d.id = c.document_id
244
244
  JOIN ${t}.global_symbols g ON g.id = m.symbol_id
245
245
  ${r}
246
- ORDER BY d.relative_path, c.chunk_index, m.role, g.symbol`).all(),l=new Map;for(let[d,u]of Object.entries({documents:i,chunks:a,definitions:s,mentions:o}))for(let g of u){let m=JSON.stringify([d,g]),p=l.get(g.relative_path)??[];p.push(m),l.set(g.relative_path,p)}let c=new Map;for(let[d,u]of[...l].sort(([g],[m])=>g.localeCompare(m))){let g=Wr("sha256");for(let m of u.sort())g.update(m).update(`
247
- `);c.set(d,g.digest("hex"))}return c}function _(e,t){return e.prepare(t).get().value}import{createHash as oi}from"crypto";import{existsSync as Me,readFileSync as ci,readdirSync as li}from"fs";import{dirname as Ne,join as le,relative as di,resolve as Le,sep as on}from"path";function cn(e,t){let n=t.includes("."),r={};for(let a of t)r[a]=[];let i=[];for(let a of e){let s=pn(a.path,t);s?r[s].push(a):n?r["."].push(a):i.push(a)}return{files:r,shared:i}}function ln(e,t){let n=new Map;for(let i of e){let a=t[i]?.packageName;a&&n.set(a,i)}let r=new Map;for(let i of e)r.set(i,new Set);for(let i of e){let a=t[i],s=r.get(i);if(!a||a.parseFailed){for(let o of e)o!==i&&s.add(o);continue}for(let o of a.dependencyNames){let l=n.get(o);l&&l!==i&&s.add(l)}for(let o of[...a.pathsTargets,...a.referencesPaths]){let l=pn(o,e);l&&l!==i&&s.add(l)}}return ui(e,r)}function dn(e,t,n){let r={};for(let i of e){let a=new Map;for(let s of t.files[i]??[])a.set(s.path,s);for(let s of n[i]??[])for(let o of t.files[s]??[])a.set(o.path,o);for(let s of t.shared)a.set(s.path,s);r[i]={files:[...a.values()].sort((s,o)=>s.path.localeCompare(o.path))}}return r}function Ce(e){if(e===".")return"root";let t=oi("sha256").update(e).digest("hex").slice(0,8);return`${e.split("/").join("__")}-${t}`}function un(e,t){let n=Le(e),r={};for(let i of t)r[i]=pi(n,i);return r}function pn(e,t){let n;for(let r of t)r!=="."&&(e===r||e.startsWith(`${r}/`))&&(!n||r.length>n.length)&&(n=r);return n}function ui(e,t){let n={};for(let r of e){let i=new Set,a=[...t.get(r)??[]];for(;a.length>0;){let s=a.pop();if(!(s===r||i.has(s))){i.add(s);for(let o of t.get(s)??[])o!==r&&!i.has(o)&&a.push(o)}}n[r]=[...i].sort((s,o)=>s.localeCompare(o))}return n}function pi(e,t){let n=t==="."?e:le(e,t),r=gi(n),i=fi(n),a=i?mi(i,e):{pathsTargets:[],referencesPaths:[],failed:!1};return{packageName:r.name,dependencyNames:r.dependencyNames,pathsTargets:a.pathsTargets,referencesPaths:a.referencesPaths,parseFailed:r.failed||a.failed}}function gi(e){let t=le(e,"package.json");if(!Me(t))return{name:void 0,dependencyNames:[],failed:!1};let n=Ae(t);if(!n.ok)return{name:void 0,dependencyNames:[],failed:!0};let r=typeof n.value.name=="string"?n.value.name:void 0,i=new Set;for(let a of["dependencies","devDependencies","peerDependencies"]){let s=n.value[a];if(s&&typeof s=="object"&&!Array.isArray(s))for(let o of Object.keys(s))i.add(o)}return{name:r,dependencyNames:[...i],failed:!1}}function fi(e){let t=le(e,"tsconfig.json");if(Me(t))return t;let n;try{n=li(e).filter(r=>/^tsconfig.*\.json$/.test(r))}catch{return}return n.sort((r,i)=>r.localeCompare(i)),n.length>0?le(e,n[0]):void 0}function mi(e,t){let n=Ae(e);if(!n.ok)return{pathsTargets:[],referencesPaths:[],failed:!0};let r=hi(n.value,e,t),i=gn(e,n.value,t,0);return{pathsTargets:i.pathsTargets,referencesPaths:r,failed:i.failed}}function hi(e,t,n){let r=e.references;if(!Array.isArray(r))return[];let i=Ne(t),a=new Set;for(let s of r){if(!s||typeof s!="object")continue;let o=s.path;if(typeof o!="string"||o.trim()==="")continue;let l=fn(o,i,n);l&&a.add(l)}return[...a]}function gn(e,t,n,r){let i=yi(t);if(i)return{pathsTargets:Si(i,Ne(e),n),failed:!1};if(r>=5)return{pathsTargets:[],failed:!1};let a=bi(t.extends,e,n);if(!a)return{pathsTargets:[],failed:!1};let s=Ae(a);return s.ok?gn(a,s.value,n,r+1):{pathsTargets:[],failed:!0}}function yi(e){let t=e.compilerOptions;if(!t||typeof t!="object"||Array.isArray(t))return;let n=t.paths;return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function Si(e,t,n){let r=new Set;for(let i of Object.values(e))if(Array.isArray(i))for(let a of i){if(typeof a!="string")continue;let s=fn(a,t,n);s&&r.add(s)}return[...r]}function bi(e,t,n){let r=Array.isArray(e)?e.at(-1):e;if(typeof r!="string"||r.trim()===""||!r.startsWith(".")&&!r.startsWith("/"))return;let i=Le(Ne(t),r);if(i.endsWith(".json")||(i=`${i}.json`),!i.split(on).includes("node_modules")&&A(n,i)&&Me(i))return i}function fn(e,t,n){let r=e.replace(/\/?\*+$/,""),i=Le(t,r===""?".":r);if(!A(n,i))return;let s=di(n,i).split(on).join("/");return s===""?".":s}function Pi(e){let t="",n=0,r=!1,i=e.length;for(;n<i;){let a=e[n];if(r){if(t+=a,a==="\\"&&n+1<i){t+=e[n+1],n+=2;continue}a==='"'&&(r=!1),n+=1;continue}if(a==='"'){r=!0,t+=a,n+=1;continue}if(a==="/"&&e[n+1]==="/"){for(n+=2;n<i&&e[n]!==`
248
- `;)n+=1;continue}if(a==="/"&&e[n+1]==="*"){for(n+=2;n<i&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}t+=a,n+=1}return t}function Ae(e){try{let t=ci(e,"utf-8"),n=JSON.parse(Pi(t));return n&&typeof n=="object"&&!Array.isArray(n)?{ok:!0,value:n}:{ok:!1}}catch{return{ok:!1}}}import{existsSync as xi,readFileSync as Ri,readdirSync as Ii,statSync as vi}from"fs";import x from"path";var Ei=new Set([".cache",".git",".next",".nuxt",".turbo",".nx","build","coverage","dist","node_modules","tmp","vendor"]);function G(e,t=[]){let n=x.resolve(e),r=t.flatMap(l=>ji(n,l));if(r.length>0)return mn(n,hn(r));let i=Fi(n),a=hn(i),s=_i(n,a)?[n,...a]:a,o=s.length>0?s:[n];return mn(n,o)}function mn(e,t){return[...new Set(t.map(n=>Ti(e,n)))].sort((n,r)=>n.localeCompare(r))}function Fi(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),i;try{i=Ii(r,{withFileTypes:!0})}catch{continue}for(let a of i){let s=x.join(r,a.name);if(a.isDirectory()){!Ei.has(a.name)&&!a.name.startsWith(".")&&n.push(s);continue}a.isFile()&&wi(s)&&t.push(x.dirname(s))}}return t}function ji(e,t){let n=t.trim();if(!n)return[];let r=x.resolve(e,n);if(!A(e,r))return[];try{let i=vi(r);if(i.isDirectory())return[r];if(i.isFile()&&yn(x.basename(r)))return[x.dirname(r)]}catch{return[]}return[]}function wi(e){if(!yn(x.basename(e)))return!1;let t=Sn(e);return t?x.basename(e)==="tsconfig.json"||"include"in t||"files"in t||"references"in t:!1}function yn(e){return e.startsWith("tsconfig")&&e.endsWith(".json")}function hn(e){let t=[...new Set(e.map(n=>x.resolve(n)))].sort((n,r)=>n.localeCompare(r));return t.length<=1?t:t.filter(n=>!t.some(r=>r!==n&&ki(n,r)))}function _i(e,t){if(t.length===0||t.some(r=>x.resolve(r)===e))return!1;let n=x.join(e,"tsconfig.json");return xi(n)&&Di(n)}function Di(e){let n=Sn(e)?.include;return Array.isArray(n)?n.some(r=>typeof r=="string"&&r.trim()!==""&&!r.startsWith("!")&&(r.includes("/")||r.includes("**")||!x.extname(r))):!1}function Sn(e){try{let t=JSON.parse(Ri(e,"utf-8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function Ti(e,t){let n=x.relative(e,t);return n?n.split(x.sep).join("/"):"."}function ki(e,t){let n=x.relative(e,t);return!!n&&!n.startsWith("..")&&!x.isAbsolute(n)}import{createHash as Wi}from"crypto";import{existsSync as Be,readFileSync as En,statSync as Hi,writeFileSync as Ge}from"fs";import{join as qi}from"path";import{randomUUID as Oi}from"crypto";import{existsSync as Mi,mkdirSync as bn,readFileSync as Ni,rmSync as Pn}from"fs";import{resolve as $e}from"path";var Li=12e4,Ci=5,de=class{projectRoot;cacheDir;baseGeneration;timeoutMs;runtime;constructor(t,n={}){this.projectRoot=$e(t.projectRoot),this.cacheDir=t.cacheDir,this.baseGeneration=t.baseGeneration,this.timeoutMs=n.timeoutMs??Ui(),this.runtime=n.runtime??Ji}request(t){let n=pt(this.cacheDir),r=Ot(this.cacheDir),i=be(n.statePath);if(!xn(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript index service is not running.");let a=this.runtime.randomId(),s=$e(r.requestDir,`${a}.json`),o=$e(r.responseDir,`${a}.json`),l=this.runtime.now()+this.timeoutMs;bn(r.requestDir,{recursive:!0}),bn(r.responseDir,{recursive:!0}),O(s,{protocolVersion:re,id:a,baseGeneration:this.baseGeneration,deadlineAtMs:l,request:t});try{for(;this.runtime.now()<=l;){if(Mi(o))return Ai(Ni(o,"utf8"),a,this.baseGeneration,t.producerIdentity,t.affectedFiles);let c=be(n.statePath);if(!xn(c,this.projectRoot,this.runtime))throw new Error("TypeScript index service stopped while processing a request.");this.runtime.sleep(Ci)}throw new Error(`TypeScript index service timed out after ${this.timeoutMs}ms.`)}finally{Pn(s,{force:!0}),Pn(o,{force:!0})}}};function xn(e,t,n){let r=e!==null&&n.now()-Date.parse(e.heartbeatAt)<=ut,i=e?.typescriptIndex?.busyUntil!==void 0&&n.now()<=Date.parse(e.typescriptIndex.busyUntil);return e!==null&&e.projectRoot===t&&e.typescriptIndex?.protocolVersion===re&&n.isProcessAlive(e.pid)&&(r||i)}function Ai(e,t,n,r,i){let a=JSON.parse(e);if(a.protocolVersion!==re||a.id!==t||a.ok===!0&&a.baseGeneration!==n)throw new Error("TypeScript index service wrote an incompatible response.");if(a.ok!==!0)throw new Error(typeof a.error=="string"?a.error:"TypeScript index service request failed.");let s=$i(a.response,r),o=[...new Set(i)].sort(),l=s.fragments.map(c=>c.relativePath).sort();if(JSON.stringify(l)!==JSON.stringify(o))throw new Error("TypeScript index service omitted or added an affected document.");return s}function $i(e,t){if(!e||typeof e!="object")throw new Error("TypeScript index service wrote an invalid response.");let n=e;if(n.producerIdentity!==t||typeof n.cold!="boolean"||typeof n.durationMs!="number"||!Number.isFinite(n.durationMs)||!Array.isArray(n.fragments))throw new Error("TypeScript index service wrote an invalid response.");let r=new Set,i=n.fragments.map(a=>{if(!a||typeof a.relativePath!="string"||a.bytesBase64!==null&&typeof a.bytesBase64!="string"||typeof a.occurrences!="number"||!Number.isInteger(a.occurrences)||a.occurrences<0||typeof a.symbols!="number"||!Number.isInteger(a.symbols)||a.symbols<0||!Array.isArray(a.referenceFragments)||!a.referenceFragments.every(Bi)||r.has(a.relativePath))throw new Error("TypeScript index service wrote an invalid fragment.");r.add(a.relativePath);let s=a.bytesBase64===null?null:Gi(a.bytesBase64);return{relativePath:a.relativePath,bytes:s,occurrences:a.occurrences,symbols:a.symbols,referenceFragments:a.referenceFragments}});return{producerIdentity:n.producerIdentity,cold:n.cold,durationMs:n.durationMs,fragments:i}}function Bi(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.targetSymbol=="string"&&!!t.location&&typeof t.location.file=="string"&&Number.isInteger(t.location.line)&&Number.isInteger(t.location.column)}function Gi(e){let t=Buffer.from(e,"base64");if(t.toString("base64")!==e)throw new Error("TypeScript index service wrote invalid base64.");return t}function Ui(){let e=Number(process.env.SCIP_TYPESCRIPT_INDEX_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:Li}var Ji={now:Date.now,randomId:Oi,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:k};function zi(e){let t=e.projectMode==="workspace"?e.workspaceProjects??[]:["."];if(t.length===0)return{eligible:!1,reason:"workspace project roots unavailable"};if(t.length===1&&t[0]==="."&&!e.rootTsconfigExists)return{eligible:!1,reason:"root tsconfig unavailable"};if(!e.previousSnapshot)return{eligible:!1,reason:"prior project snapshot unavailable"};if(e.graph===null)return{eligible:!1,reason:"dependency graph unavailable"};if(e.projectFiles.length===0)return{eligible:!1,reason:"prior TypeScript documents unavailable"};let n=Y(e.previousSnapshot,e.currentSnapshot);if(n.changes.length===0)return{eligible:!1,reason:"no changed project inputs"};if(n.changes.some(c=>c.kind!=="modified"||c.inputKind!=="source"||!$(c.path)))return{eligible:!1,reason:"change is not a modified TypeScript source file"};let r=K(n,e.graph,e.projectFiles);if(r.mode!=="closure"||r.affectedFiles.length===0)return{eligible:!1,reason:r.reasons.length>0?`affected set widened: ${r.reasons.join(", ")}`:"empty affected set"};let i=Xi([...r.changedFiles,...r.affectedFiles],t);if(!i)return{eligible:!1,reason:"affected files cross or ambiguously match TypeScript projects"};let a=Rn(e.currentSnapshot,e.projectFiles,e.producerIdentity),s=Rn(e.previousSnapshot,e.projectFiles,e.producerIdentity);if(a!==s)return{eligible:!1,reason:"TypeScript fragment project identity changed"};let o=vn(e.previousSnapshot,e.projectFiles,e.graph,e.producerIdentity,e.projectFiles);if(!o)return{eligible:!1,reason:"prior document identity unavailable"};let l=vn(e.currentSnapshot,e.projectFiles,e.graph,e.producerIdentity,r.affectedFiles);return l?{eligible:!0,manifest:n,plan:r,projectIdentity:a,previousFragmentGeneration:In(e.previousSnapshot,e.producerIdentity),nextFragmentGeneration:In(e.currentSnapshot,e.producerIdentity),previousDocumentIdentities:o,nextDocumentIdentities:l,tsconfigPath:i==="."?"tsconfig.json":`${i}/tsconfig.json`,projectArgument:i}:{eligible:!1,reason:"next document identity unavailable"}}function Xi(e,t){let n=null;for(let r of e){let i=t.filter(a=>a==="."||r===a||r.startsWith(`${a}/`));if(i.length!==1||n!==null&&n!==i[0])return null;n=i[0]}return n}function Fn(e){let t=Date.now();try{if(!Be(e.previousDbPath)||!Be(e.previousShardPath))throw new Error("prior TypeScript graph or language shard unavailable");let n=performance.now(),r=Re();if(!r.available)throw new Error(r.reason);let i=performance.now()-n;n=performance.now();let a=new T({projectRoot:e.projectRoot,dbPath:e.previousDbPath,indexPath:e.previousIndexPath}),s,o;try{s=w(a,{includeIgnored:!1}).filter($).sort(),o=M(a)}finally{a.close()}let l=performance.now()-n,c=zi({projectMode:e.projectMode,workspaceProjects:e.projectMode==="workspace"?G(e.projectRoot,e.currentSnapshot.typescriptProjects):void 0,previousSnapshot:e.previousSnapshot,currentSnapshot:e.currentSnapshot,projectFiles:s,graph:o,producerIdentity:r.producerIdentity,rootTsconfigExists:Be(qi(e.projectRoot,"tsconfig.json"))});if(!c.eligible)throw new Error(c.reason);let d=Mt(e.previousDbPath);if(!d)throw new Error("published TypeScript base generation unavailable");n=performance.now();let g=new de({projectRoot:e.projectRoot,cacheDir:e.cacheDir,baseGeneration:d}).request({kind:"emit-documents",tsconfigPath:c.tsconfigPath,projectArgument:c.projectArgument,projectIdentity:c.projectIdentity,producerIdentity:r.producerIdentity,modifiedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles}),m=performance.now()-n,p=Hi(e.previousShardPath).size>=vt;n=performance.now();let S=p?null:En(e.previousShardPath),f=p?{completeIndexBytes:null,affectedIndexBytes:Pt(g.fragments)}:It({packageVersion:r.packageVersion,baseIndexBytes:S,fragments:g.fragments}),b=performance.now()-n;n=performance.now(),p?Et({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,nextGenerationIdentity:c.nextFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,baseShardCurrent:e.baseShardCurrent,fragments:g.fragments}):(xt({cacheDir:e.cacheDir,packageVersion:r.packageVersion,indexBytes:S,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.previousFragmentGeneration,documentIdentities:c.previousDocumentIdentities,allowUntrackedDocuments:!0}),Rt({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.nextFragmentGeneration,fragments:g.fragments,documentIdentities:c.nextDocumentIdentities}));let y=performance.now()-n;n=performance.now(),f.completeIndexBytes&&Ge(e.candidateShardPath,f.completeIndexBytes),Ge(e.candidateAffectedScipPath,f.affectedIndexBytes);let I=performance.now()-n,P={scipPath:p?e.previousShardPath:e.candidateShardPath,candidateScipPath:e.candidateShardPath,affectedScipPath:e.candidateAffectedScipPath,completeScipUpdated:!p,durationMs:Date.now()-t,cold:g.cold,changedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles,producerIdentity:r.producerIdentity,previousFragmentGeneration:c.previousFragmentGeneration,nextFragmentGeneration:c.nextFragmentGeneration,manifest:c.manifest,plan:c.plan,projectFileCount:s.length,referenceFragmentsByFile:new Map(g.fragments.map(q=>[q.relativePath,q.referenceFragments])),timings:{runtimeMs:i,graphMs:l,requestMs:m,serviceMs:g.durationMs,assemblyMs:b,fragmentStoreMs:y,writeMs:I}};return e.onStatus(`Incremental TypeScript index emitted ${P.affectedFiles.length} affected document(s) in ${(P.durationMs/1e3).toFixed(3)}s (${P.cold?"cold":"warm"} service; ${p?"whole SCIP deferred":"whole SCIP current"}; runtime ${i.toFixed(0)}ms, graph ${l.toFixed(0)}ms, request ${m.toFixed(0)}ms, assembly ${b.toFixed(0)}ms, fragments ${y.toFixed(0)}ms, write ${I.toFixed(0)}ms).`),P}catch(n){return e.onStatus(`Incremental TypeScript index unavailable: ${n instanceof Error?n.message:String(n)}. Falling back to the whole-project indexer.`),null}}function jn(e){let t=Re();if(!t.available)throw new Error(t.reason);let n=Ft({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,baseIndexBytes:En(e.baseShardPath),packageVersion:t.packageVersion});Ge(e.candidateShardPath,n)}function Rn(e,t,n){let r=e.files.filter(i=>V(i.path,e.languages)!=="source").map(i=>({path:i.path,size:i.size,hash:i.hash})).sort((i,a)=>i.path.localeCompare(a.path));return Ue(JSON.stringify({version:1,producerIdentity:n,pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:[...e.typescriptProjects].sort(),projectFiles:[...t].sort(),nonSourceInputs:r}))}function In(e,t){return Ue(JSON.stringify({version:1,producerIdentity:t,snapshot:e}))}function vn(e,t,n,r,i){let a=new Set(e.files.map(l=>l.path)),s=oe({projectFiles:t.filter(l=>a.has(l)),snapshot:e,graph:n,engineIdentity:r}),o=new Map;for(let l of i){let c=s.identityFor(l,"typescript-scip-document-v1");if(c.key){o.set(l,c.key);continue}if(a.has(l))return null;o.set(l,Ue(JSON.stringify({version:1,producerIdentity:r,generatedDocument:l})))}return o}function Ue(e){return Wi("sha256").update(e).digest("hex")}import{execFile as Qi}from"child_process";import{existsSync as ue,renameSync as We,rmSync as He,statSync as Vi}from"fs";import{cpus as Yi}from"os";import{join as wn}from"path";function Ki(e,t,n){if(!e.defaultOutputPath)return;let r=wn(t,e.defaultOutputPath);n!==r&&ue(r)&&We(r,n)}function Zi(e,t,n){if(!e.defaultOutputPath)return null;let r=wn(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return He(i,{force:!0}),ue(r)?(We(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function ea(e){e&&(He(e.defaultOutputPath,{force:!0}),e.backupPath&&ue(e.backupPath)&&We(e.backupPath,e.defaultOutputPath))}function ta(e,t){if(e<=1)return 1;let n=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,Yi().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function _n(e,t,n,r){let i=e.filter(c=>c.config.defaultOutputPath),a=e.filter(c=>!c.config.defaultOutputPath),s=[],o=ta(a.length,r),l=await ra(a,o,c=>Je(c,t,n));if(o>1){let c=new Map;for(let d of l.filter(u=>u.skipped)){let u=a.find(g=>g.id===d.id);u&&(n(`Retrying ${u.label} indexer serially after parallel failure...`),c.set(u.id,await Je(u,t,n)))}s.push(...l.map(d=>c.get(d.id)??d))}else s.push(...l);for(let c of i)s.push(await Je(c,t,n));return s.sort((c,d)=>e.findIndex(u=>u.id===c.id)-e.findIndex(u=>u.id===d.id))}async function Je(e,t,n){n(`Indexing ${e.label} with ${e.resolvedBinary}...`),He(e.scipPath,{force:!0});let r=Zi(e.config,t,e.scipPath),i=[e.binary,...e.args].join(" "),a=Date.now();try{await na(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),Ki(e.config,t,e.scipPath)}catch(o){let l=o instanceof Error?o.message:String(o),c=`${e.resolvedBinary} indexer failed: ${l.split(`
249
- `)[0]}`,d=e.label===e.language?c:`${e.label}: ${c}`;return n(`Skipping ${e.label}: ${c}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:d}}}finally{ea(r)}if(!ue(e.scipPath)){let o=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`,l=e.label===e.language?o:`${e.label}: ${o}`;return n(`Skipping ${e.label}: ${o}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:l}}}let s;try{s=Vi(e.scipPath).size}catch{s=void 0}return{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,outputBytes:s}}function na(e,t,n){return new Promise((r,i)=>{Qi(e,[...t],n,a=>{a?i(a):r()})})}async function ra(e,t,n){if(e.length===0)return[];let r=new Array(e.length),i=0,a=Math.max(1,Math.min(e.length,t)),s=Array.from({length:a},async()=>{for(;i<e.length;){let o=i++;r[o]=await n(e[o])}});return await Promise.all(s),r}async function An(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,a=ma(e),s=Date.now();ge(h(a.outputScip),{recursive:!0}),ge(h(a.outputDb),{recursive:!0});let o=e.languages??ht(t);if(o.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: ${o.join(", ")}`);let l=F("reindex.fingerprint",()=>Xa(t,o,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath}),{languages:o.length}),c,d;if(e.skipIfUnchanged!==!1&&!Dt(t,a.outputDb)&&Dn(a.outputScip)===Dn(R(h(a.outputDb),"index.scip"))){let p=X(t);if(c=p?te(p,l):void 0,c){let S=ne(c);if(S){if(!fa(a,l))try{Pe({snapshot:c,manifest:S,targetCacheDir:h(a.outputDb),targetProjectRoot:t}),r(`Attached shared generation ${c.generationId.slice(0,12)}`)}catch(f){r(`Shared generation attach failed; continuing locally: ${ze(f)}`)}}else{let f=await kt(c);if(f.kind==="owner")d=f.release;else if(f.kind==="generation-ready"){let b=ne(c);if(b)try{Pe({snapshot:c,manifest:b,targetCacheDir:h(a.outputDb),targetProjectRoot:t,action:"waited"}),r(`Attached shared generation ${c.generationId.slice(0,12)} after waiting`)}catch(y){r(`Shared generation attach failed after waiting; continuing locally: ${ze(y)}`)}}else r("Shared generation build lock timed out; continuing with an isolated local reindex")}}}let u=et(R(h(a.outputDb),"cache-lifecycle.lock"),{waitMs:3e4});if(!u)throw d?.(),new Error(`Could not acquire scip-query cache lifecycle lock for ${h(a.outputDb)}.`);let g;try{g=await L("reindex.lock",()=>Ga(R(h(a.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),{languages:o.length})}catch(p){throw u.release(),d?.(),p}let m=null;try{let p=null,S=F("reindex.reuse-check",()=>(p=ha({opts:e,paths:a,languages:o,fingerprint:l,start:s,onStatus:r}),p),()=>({languages:o.length,reused:p!==null}));if(S)return Tn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),S;await L("reindex.scip-cli-ready",()=>Oa(i,r));let f=Sa(a);m=f.runDir;let b,y=await L("reindex.fresh",async()=>(b=await ba({opts:e,languages:o,projectRoot:t,paths:a,tempPaths:f,fingerprint:l,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r}),b),()=>({languages:o.length,reused:b?.reused,skipped:b?.skipped.length}));return Tn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),y}catch(p){throw Xn(a.metaPath,ye({trigger:e.trigger,result:"failed",start:s,error:p instanceof Error?p.message:String(p)})),p}finally{m&&D(m,{recursive:!0,force:!0}),g(),u.release(),d?.()}}function Tn(e){if(e.snapshot){if(ne(e.snapshot)){xe(e.snapshot,h(e.paths.outputDb),"local-fresh");return}try{let t=X(e.projectRoot),n=t?te(t,e.fingerprint):void 0;if(!n||n.generationId!==e.snapshot.generationId){e.onStatus("Skipped shared generation publication because the worktree changed during indexing");return}Tt({snapshot:e.snapshot,sourceCacheDir:h(e.paths.outputDb),sourceProjectRoot:e.projectRoot,sourceStillValid:()=>{let r=X(e.projectRoot);return(r?te(r,e.fingerprint):void 0)?.generationId===e.snapshot?.generationId}}),xe(e.snapshot,h(e.paths.outputDb),"built"),e.onStatus(`Published shared generation ${e.snapshot.generationId.slice(0,12)}`)}catch(t){e.onStatus(`Shared generation publication failed; local index remains valid: ${ze(t)}`)}}}function fa(e,t){if(!E(e.outputScip)||!E(e.outputDb)||!zn(e.metaPath,t))return!1;let n=B(e.outputDb,e.metaPath);return n.state!=="invalid"&&n.state!=="drifted"}function ze(e){return e instanceof Error?e.message:String(e)}function ma(e){let t=e.outputScip??R(e.projectRoot,"index.scip"),n=e.outputDb??R(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:R(h(n),"meta.json")}}function ha(e){let t=B(e.paths.outputDb,e.paths.metaPath);if(e.opts.skipIfUnchanged===!1||!E(e.paths.outputScip)||!E(e.paths.outputDb)||!zn(e.paths.metaPath,e.fingerprint)||t.state==="invalid"||t.state==="drifted")return null;ee(Z(),{projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start,r=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:e.languages,skipped:[]});return Xn(e.paths.metaPath,r),e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[],lastRefresh:r,shards:ya(e.paths,e.opts.projectRoot,e.languages,e.opts)}}function ya(e,t,n,r){let i=Hn(t,n,r);return n.map(a=>({id:a,language:a,reused:!0,fingerprint:U(i[a]),outputBytes:J(Qe(e.outputDb,a)),durationMs:0}))}function Sa(e){let t=oa(R(h(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:R(t,pe(e.outputScip)),tempOutputDb:R(t,pe(e.outputDb)),tempMetaPath:R(t,pe(e.metaPath))}}async function ba(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},n,r=await L("reindex.language-indexers",async()=>(n=await xa(e,t),n),()=>({languages:e.languages.length,indexed:n?.indexedOutputs.length,reused:n?.reusedLanguages.length,skipped:n?.skippedLanguages.length})),{indexedOutputs:i,skippedLanguages:a,reusedLanguages:s,languageFingerprints:o,shards:l,typescriptProjectShardContext:c,incrementalTypeScript:d}=r;if(s.length>0&&e.onStatus(`Reused ${s.length} cached language shard(s): ${s.join(", ")}`),Pa({run:e,indexedOutputs:i,skippedLanguages:a,reusedLanguages:s})){let m=F("reindex.publish",()=>Da(e,i,a,s,o,c),{mode:"metadata-only",languages:i.length,reused:s.length}),p=m.durationMs;return e.onStatus(`All language shards unchanged; reused existing SQLite index in ${(p/1e3).toFixed(1)}s`),{languages:i.map(S=>S.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:p,reused:!0,skipped:a,lastRefresh:m,shards:l}}let u=F("reindex.publish",()=>_a(e,t,i,a,s,o,c,d),{mode:d?"incremental-or-fallback":"full",languages:i.length,reused:s.length,skipped:a.length}),g=u.durationMs;return e.onStatus(`Done in ${(g/1e3).toFixed(1)}s`),{languages:i.map(m=>m.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:g,reused:!1,skipped:a,lastRefresh:u,shards:l}}function Pa(e){if(e.run.opts.skipIfUnchanged===!1||e.skippedLanguages.length>0||!E(e.run.paths.outputScip)||!E(e.run.paths.outputDb))return!1;let t=B(e.run.paths.outputDb,e.run.paths.metaPath);if(t.state==="invalid"||t.state==="drifted")return!1;let n=new Set(e.reusedLanguages),r=new Set(e.indexedOutputs.map(i=>i.language));return e.run.languages.length>0&&r.size===e.run.languages.length&&e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(i=>n.has(i)&&r.has(i))}async function xa(e,t){let n=Fa({paths:e.paths,projectRoot:e.projectRoot,languages:e.languages,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,clojureConfigPath:e.opts.clojureConfigPath}),r=[],i=new Set;for(let[v,Ke]of n)Ke.reused&&(r.push({language:v,scipPath:Ke.scipPath}),i.add(v));for(let v of i)e.onStatus(`Reusing cached ${v} SCIP shard (language inputs unchanged).`);let a=n.get("typescript"),s=B(e.paths.outputDb,e.paths.metaPath),o=H(e.paths.metaPath),l=s.state==="legacy"||s.state==="current",c=o?.scipCompanion!=="deferred"&&(s.state!=="current"||s.generation.publication?.scipCompanion!=="deferred"),d=a&&!a.reused&&l?Fn({projectRoot:e.projectRoot,cacheDir:h(e.paths.outputDb),previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,previousShardPath:a.scipPath,candidateShardPath:W(e.tempPaths.tempOutputScip,"typescript-incremental",0),candidateAffectedScipPath:W(e.tempPaths.tempOutputScip,"typescript-affected",0),baseShardCurrent:c,previousSnapshot:Xe(e.paths.metaPath),currentSnapshot:e.fingerprint,projectMode:e.opts.typescriptProjectMode,onStatus:e.onStatus}):null,u=new Set(d?["typescript"]:[]),g=d?void 0:Ra(e,n),{preparedRuns:m,skippedLanguages:p,languageOutputScipPaths:S}=Ma({languages:e.languages.filter(v=>!i.has(v)&&!u.has(v)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,preDiscoveredTypeScriptProjects:g?.allProjects,clojureConfigPath:e.opts.clojureConfigPath,onStatus:e.onStatus}),f=g?m.filter(v=>v.language!=="typescript"||g.missedProjectIds.has(v.id)):m,b=await _n(f,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),y=[];if(g){va(e.paths.outputDb,b);let v=S.typescript??e.tempPaths.tempOutputScip;y=Ea({outputDb:e.paths.outputDb,tempOutputScip:e.tempPaths.tempOutputScip,outputScipPath:v,reusedProjects:g.reusedProjects})}let I=[...b,...y],{indexedOutputs:P}=La(I,p),q=d?[{language:"typescript",scipPath:d.scipPath}]:[],Ye=[...r,...q,...P];Ca(Ye,p,e.languages,e.opts.allowPartial,e.onStatus);let tr=d?[{id:"typescript",language:"typescript",label:"typescript (incremental documents)",scipPath:d.scipPath,outputScipPath:d.scipPath,durationMs:d.durationMs,command:"watch-service:typescript-index",outputBytes:J(d.scipPath)??void 0}]:[],nr=ja(n,[...b,...tr],g?{outputDb:e.paths.outputDb,classification:g.classification}:void 0);return{indexedOutputs:Ye,skippedLanguages:p,reusedLanguages:[...i],languageFingerprints:wa(n,e.languages),shards:nr,typescriptProjectShardContext:g?{projects:g.allProjects,fingerprints:g.fingerprints}:void 0,incrementalTypeScript:d??void 0}}function Ra(e,t){let n=t.get("typescript");if(!n||n.reused||e.opts.typescriptProjectMode!=="workspace")return;let r=G(e.projectRoot,e.opts.typescriptProjects);if(r.length===0)return;let i=un(e.projectRoot,r),a=cn(n.fingerprint.files,r),s=ln(r,i),o=dn(r,a,s),l=H(e.paths.metaPath),d=Ia(l,o,p=>E(he(e.paths.outputDb,p))),u=[...d.entries()].filter(([,p])=>p.reused).map(([p])=>p),g=new Set(u),m=new Set(r.filter(p=>!g.has(p)).map(p=>`typescript:${p}`));return{allProjects:r,fingerprints:o,classification:d,reusedProjects:u,missedProjectIds:m}}function Ia(e,t,n){let r=new Map;for(let i of Object.keys(t)){let a=t[i];if(!e){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:a});continue}let s=e.typescriptProjectShards?.[i];if(!s){r.set(i,{reused:!1,reason:"no cached fingerprint for this project",fingerprint:a});continue}if(!n(i)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:a});continue}if(j(s)!==j(a)){r.set(i,{reused:!1,reason:"project inputs changed since last index",fingerprint:a});continue}r.set(i,{reused:!0,fingerprint:a})}return r}function va(e,t){for(let n of t){if(n.skipped||!n.id.startsWith("typescript:"))continue;let r=n.id.slice(11),i=he(e,r);ge(h(i),{recursive:!0}),fe(n.scipPath,i)}}function Ea(e){return e.reusedProjects.map((t,n)=>{let r=he(e.outputDb,t),i=W(e.tempOutputScip,"typescript-project-cached",n);return fe(r,i),{id:`typescript:${t}`,language:"typescript",label:`typescript (${t})`,scipPath:i,outputScipPath:e.outputScipPath,durationMs:0,command:"cached",outputBytes:J(i)??void 0}})}function Fa(e){let t=H(e.paths.metaPath),n=Hn(e.projectRoot,e.languages,e),r=new Map;for(let i of e.languages){let a=Qe(e.paths.outputDb,i),s=n[i];if(!t){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:s,scipPath:a});continue}if(t.version!==3){r.set(i,{reused:!1,reason:`metadata version ${String(t.version??"unknown")} predates per-language shard caching`,fingerprint:s,scipPath:a});continue}if(i==="typescript"&&t.scipCompanion==="deferred"){r.set(i,{reused:!1,reason:"whole TypeScript SCIP companion is deferred behind changed-document overlays",fingerprint:s,scipPath:a});continue}if(!t.languageFingerprints){r.set(i,{reused:!1,reason:"no per-language fingerprints recorded in metadata",fingerprint:s,scipPath:a});continue}let o=t.languageFingerprints[i];if(!o){r.set(i,{reused:!1,reason:"no cached fingerprint for this language",fingerprint:s,scipPath:a});continue}if(!E(a)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:s,scipPath:a});continue}if(j(o)!==j(s)){r.set(i,{reused:!1,reason:"language inputs changed since last index",fingerprint:s,scipPath:a});continue}r.set(i,{reused:!0,fingerprint:s,scipPath:a})}return r}function ja(e,t,n){let r=[];for(let[i,a]of e)a.reused&&r.push({id:i,language:i,reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(a.scipPath),durationMs:0});for(let i of t){let a=e.get(i.language),s=n&&i.id.startsWith("typescript:")?i.id.slice(11):null,o=s?n.classification.get(s):void 0;r.push({id:i.id,language:i.language,reused:!1,missReason:o?.reason??a?.reason??i.skipped?.reason,fingerprint:o?U(o.fingerprint):a?U(a.fingerprint):"unknown",outputBytes:i.outputBytes??null,durationMs:i.durationMs,command:i.command})}if(n)for(let[i,a]of n.classification)a.reused&&r.push({id:`typescript:${i}`,language:"typescript",reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(he(n.outputDb,i)),durationMs:0});return r}function U(e){return aa("sha256").update(j(e)).digest("hex").slice(0,16)}function J(e){try{return da(e).size}catch{return null}}function wa(e,t){let n={};for(let r of t){let i=e.get(r);i&&(n[r]=i.fingerprint)}return n}function _a(e,t,n,r,i,a,s,o){let l=!o||o.completeScipUpdated,c=!1;l&&(kn(e.paths.outputDb,n),c=On(n,e.tempPaths.tempOutputScip,e.onStatus));let d=Aa({run:e,env:t,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,incrementalTypeScript:o,completeScipAvailable:l,completeScipSanitized:c,materializeFullFallback:()=>{if(!o||o.completeScipUpdated)return c;e.onStatus("Materializing the deferred whole TypeScript SCIP companion for full conversion..."),jn({cacheDir:h(e.paths.outputDb),generationIdentity:o.nextFragmentGeneration,baseShardPath:o.scipPath,candidateShardPath:o.candidateScipPath});let y=n.map(I=>I.language==="typescript"?{language:I.language,scipPath:o.candidateScipPath}:I);return kn(e.paths.outputDb,y),c=On(y,e.tempPaths.tempOutputScip,e.onStatus),c}});if(ee(Z(),{projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),d.mode==="incremental"&&o){let y=null,I=null;try{y=new T({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,indexPath:e.tempPaths.tempOutputScip}),I=new T({projectRoot:e.projectRoot,dbPath:e.paths.outputDb,indexPath:e.paths.outputScip});let P=zt(y,e.fingerprint,o.referenceFragmentsByFile,I);e.onStatus(`Cached exact TypeScript reference fragments for ${P} affected document(s).`)}catch(P){e.onStatus(`Exact TypeScript reference fragment prefill unavailable: ${P instanceof Error?P.message:String(P)}.`)}finally{y?.close(),I?.close()}}let u=Xe(e.paths.metaPath),g=d.mode==="incremental"&&o?Ba(o,d.changedDocumentPaths):Te({projectRoot:e.projectRoot,previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.tempPaths.tempOutputDb,candidateIndexPath:e.tempPaths.tempOutputScip,previousSnapshot:u,currentSnapshot:e.fingerprint,refreshResult:"rebuilt"}),m=ye({trigger:e.opts.trigger,result:"rebuilt",start:e.start,languages:n.map(y=>y.language),skipped:[...r]}),p=d.mode==="incremental"&&d.scipCompanion==="deferred",S={...a};p&&delete S.typescript;let{metadata:f,pruneProjects:b}=Bn({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,languageFingerprints:S,typescriptProjectShardContext:s,lastRefresh:m});return f.scipCompanion=p?"deferred":"current",Gn(e.paths.outputDb,b),Ve(e.tempPaths.tempMetaPath,f),wt({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath,preserveOutputScip:d.mode==="incremental"&&d.scipCompanion==="deferred",publication:d.mode==="incremental"?{mode:"incremental",validation:"passed",converterDurationMs:d.converterDurationMs,affectedDocumentCount:o?.affectedFiles.length,changedDocumentCount:d.changedDocumentPaths.length,producerDurationMs:o?.timings.serviceMs,materializationDurationMs:o?.durationMs,patchDurationMs:d.patchDurationMs,scipCompanion:d.scipCompanion,...d.scipCompanion==="deferred"&&o?{typescriptOverlayGeneration:o.nextFragmentGeneration}:{}}:{mode:"full",validation:"passed",converterDurationMs:d.converterDurationMs,scipCompanion:"current",...d.fallbackReason?{fallbackReason:d.fallbackReason}:{}}}),jt(h(e.paths.outputDb),d.mode==="incremental"&&d.scipCompanion==="deferred"?[o.nextFragmentGeneration]:[]),$n(e.paths.outputDb,g,e.onStatus),m}function Da(e,t,n,r,i,a){let s=Xe(e.paths.metaPath),o=null;try{fe(e.paths.outputDb,e.tempPaths.tempOutputDb)}catch(u){o=Yt("reused","oracle-error",`Could not snapshot the prior database: ${u instanceof Error?u.message:String(u)}`)}ee(Z(),{projectRoot:e.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),o??=Te({projectRoot:e.projectRoot,previousDbPath:e.tempPaths.tempOutputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.paths.outputDb,candidateIndexPath:e.paths.outputScip,previousSnapshot:s,currentSnapshot:e.fingerprint,refreshResult:"reused"});let l=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:t.map(u=>u.language),skipped:[...n]}),{metadata:c,pruneProjects:d}=Bn({run:e,indexedOutputs:t,skippedLanguages:n,reusedLanguages:r,languageFingerprints:i,typescriptProjectShardContext:a,lastRefresh:l});return Gn(e.paths.outputDb,d),Ve(e.paths.metaPath,c),_t(e.paths.outputDb,e.paths.metaPath),$n(e.paths.outputDb,o,e.onStatus),l}function Xe(e){return ft(H(e)?.fingerprint)}function $n(e,t,n){try{Kt(e,t),t.status==="evaluated"?n(`Affected-set shadow: ${(t.evaluation.recall*100).toFixed(1)}% recall; ${t.plan.affectedFiles.length} predicted, ${t.comparison.changedFiles.length} changed.`):n(`Affected-set shadow unavailable: ${t.reason}.`)}catch(r){n(`Affected-set shadow telemetry unavailable: ${r instanceof Error?r.message:String(r)}`)}}function Bn(e){let t=Ta({mode:e.run.opts.typescriptProjectMode,skippedLanguages:e.skippedLanguages,reusedLanguages:e.reusedLanguages,context:e.typescriptProjectShardContext,metaPath:e.run.paths.metaPath});return{metadata:{version:3,status:e.skippedLanguages.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.run.fingerprint,languageFingerprints:e.languageFingerprints,typescriptProjectShards:t.field,requestedLanguages:e.run.languages,indexedLanguages:e.indexedOutputs.map(n=>n.language),skipped:[...e.skippedLanguages],lastRefresh:e.lastRefresh},pruneProjects:t.pruneProjects}}function Ta(e){if(e.mode!=="workspace")return{field:void 0,pruneProjects:null};if(e.skippedLanguages.some(t=>t.language==="typescript"))return{field:void 0,pruneProjects:null};if(e.reusedLanguages.includes("typescript")){let t=H(e.metaPath)?.typescriptProjectShards;return{field:t,pruneProjects:t?Object.keys(t):[]}}return e.context?{field:e.context.fingerprints,pruneProjects:e.context.projects}:{field:void 0,pruneProjects:[]}}function Gn(e,t){let n=qn(e);if(t===null){D(n,{recursive:!0,force:!0});return}let r;try{r=la(n)}catch{return}for(let i of ka(r,t))D(R(n,i),{force:!0})}function ka(e,t){let n=new Set(t.map(r=>`${Ce(r)}.scip`));return e.filter(r=>!n.has(r))}function kn(e,t){for(let n of t){let r=Qe(e,n.language);ge(h(r),{recursive:!0}),n.scipPath!==r&&fe(n.scipPath,r)}}async function Oa(e,t){if(!Se()){if(e)throw new Error(`The scip CLI is required but not found on PATH.
250
- Install from: https://github.com/sourcegraph/scip/releases`);if(ga()==="win32")throw new Error("The scip CLI was not found. On Windows it ships via the npm sidecar package scip-query-scip-windows (installed automatically with scip-query). Reinstall with optional dependencies enabled, run 'npm install -g scip-query-scip-windows', or set SCIP_QUERY_SCIP_BIN to a local scip.exe path.");if(t("scip CLI not found on PATH. Attempting auto-install..."),!Ze(t))throw new Error(`The scip CLI is required but could not be installed.
251
- Install manually from: https://github.com/sourcegraph/scip/releases`)}}function Ma(e){let t=[],n=[],r=e.languages.map((a,s)=>({language:a,scipPath:e.languages.length>1?W(e.tempOutputScip,a,s):e.tempOutputScip})),i=Object.fromEntries(r.map(({language:a,scipPath:s})=>[a,s]));for(let{language:a,scipPath:s}of r){let o=Na({...e,language:a,scipPath:s});for(let l of o)"skipped"in l?Un(n,l.skipped):t.push(l.prepared)}return{preparedRuns:t,skippedLanguages:n,languageOutputScipPaths:i}}function Na(e){if(e.language!=="typescript"||e.typescriptProjectMode!=="workspace")return[qe({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})];let t=e.preDiscoveredTypeScriptProjects??G(e.projectRoot,e.typescriptProjects);return t.length===0?[qe({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})]:(e.onStatus(`Indexing TypeScript workspace as ${t.length} project shard(s).`),t.map((n,r)=>qe({...e,id:`typescript:${n}`,label:`typescript (${n})`,scipPath:W(e.tempOutputScip,"typescript-project",r),outputScipPath:e.scipPath,pnpmWorkspaces:!1,projectPath:n})))}function qe(e){let t=ve(e.language),n=we(t),r=Bt(t,e.projectRoot);if(!r&&!At(t)){if(e.skipAutoInstall){let o=`${n} not found on PATH (auto-install disabled). ${t.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!Ut(t,e.onStatus)){let o=`${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}: ${o}`),{skipped:{language:e.language,reason:o}}}}let i=r??ae(t);if(!i){let o=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}let{binary:a,args:s}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:i,projectPath:e.projectPath,configPath:e.language==="clojure"?e.clojureConfigPath:void 0});return{prepared:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,config:t,resolvedBinary:i,binary:a,args:s,env:Gt(t,e.env,i)}}}function La(e,t){let n=new Map;for(let i of e)if(i.skipped)Un(t,i.skipped);else{let a=`${i.language}\0${i.outputScipPath}`,s=n.get(a)??{language:i.language,outputScipPath:i.outputScipPath,scipPaths:[]};s.scipPaths.push(i.scipPath),n.set(a,s)}let r=[];for(let i of n.values())if(i.scipPaths.length>1)St(i.scipPaths,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath});else{let a=i.scipPaths[0];a!==i.outputScipPath&&Cn(a,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath})}return{indexedOutputs:r}}function Un(e,t){let n=e.find(r=>r.language===t.language);if(!n){e.push(t);return}n.reason.includes(t.reason)||(n.reason=`${n.reason}; ${t.reason}`)}function Ca(e,t,n,r,i){if(e.length===0){let a=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
246
+ ORDER BY d.relative_path, c.chunk_index, m.role, g.symbol`).all(),l=new Map;for(let[d,u]of Object.entries({documents:i,chunks:a,definitions:s,mentions:o}))for(let g of u){let m=JSON.stringify([d,g]),p=l.get(g.relative_path)??[];p.push(m),l.set(g.relative_path,p)}let c=new Map;for(let[d,u]of[...l].sort(([g],[m])=>g.localeCompare(m))){let g=Hr("sha256");for(let m of u.sort())g.update(m).update(`
247
+ `);c.set(d,g.digest("hex"))}return c}function _(e,t){return e.prepare(t).get().value}import{createHash as ci}from"crypto";import{existsSync as Me,readFileSync as li,readdirSync as di}from"fs";import{dirname as Ne,join as le,relative as ui,resolve as Le,sep as on}from"path";function cn(e,t){let n=t.includes("."),r={};for(let a of t)r[a]=[];let i=[];for(let a of e){let s=pn(a.path,t);s?r[s].push(a):n?r["."].push(a):i.push(a)}return{files:r,shared:i}}function ln(e,t){let n=new Map;for(let i of e){let a=t[i]?.packageName;a&&n.set(a,i)}let r=new Map;for(let i of e)r.set(i,new Set);for(let i of e){let a=t[i],s=r.get(i);if(!a||a.parseFailed){for(let o of e)o!==i&&s.add(o);continue}for(let o of a.dependencyNames){let l=n.get(o);l&&l!==i&&s.add(l)}for(let o of[...a.pathsTargets,...a.referencesPaths]){let l=pn(o,e);l&&l!==i&&s.add(l)}}return pi(e,r)}function dn(e,t,n){let r={};for(let i of e){let a=new Map;for(let s of t.files[i]??[])a.set(s.path,s);for(let s of n[i]??[])for(let o of t.files[s]??[])a.set(o.path,o);for(let s of t.shared)a.set(s.path,s);r[i]={files:[...a.values()].sort((s,o)=>s.path.localeCompare(o.path))}}return r}function Ce(e){if(e===".")return"root";let t=ci("sha256").update(e).digest("hex").slice(0,8);return`${e.split("/").join("__")}-${t}`}function un(e,t){let n=Le(e),r={};for(let i of t)r[i]=gi(n,i);return r}function pn(e,t){let n;for(let r of t)r!=="."&&(e===r||e.startsWith(`${r}/`))&&(!n||r.length>n.length)&&(n=r);return n}function pi(e,t){let n={};for(let r of e){let i=new Set,a=[...t.get(r)??[]];for(;a.length>0;){let s=a.pop();if(!(s===r||i.has(s))){i.add(s);for(let o of t.get(s)??[])o!==r&&!i.has(o)&&a.push(o)}}n[r]=[...i].sort((s,o)=>s.localeCompare(o))}return n}function gi(e,t){let n=t==="."?e:le(e,t),r=fi(n),i=mi(n),a=i?hi(i,e):{pathsTargets:[],referencesPaths:[],failed:!1};return{packageName:r.name,dependencyNames:r.dependencyNames,pathsTargets:a.pathsTargets,referencesPaths:a.referencesPaths,parseFailed:r.failed||a.failed}}function fi(e){let t=le(e,"package.json");if(!Me(t))return{name:void 0,dependencyNames:[],failed:!1};let n=Ae(t);if(!n.ok)return{name:void 0,dependencyNames:[],failed:!0};let r=typeof n.value.name=="string"?n.value.name:void 0,i=new Set;for(let a of["dependencies","devDependencies","peerDependencies"]){let s=n.value[a];if(s&&typeof s=="object"&&!Array.isArray(s))for(let o of Object.keys(s))i.add(o)}return{name:r,dependencyNames:[...i],failed:!1}}function mi(e){let t=le(e,"tsconfig.json");if(Me(t))return t;let n;try{n=di(e).filter(r=>/^tsconfig.*\.json$/.test(r))}catch{return}return n.sort((r,i)=>r.localeCompare(i)),n.length>0?le(e,n[0]):void 0}function hi(e,t){let n=Ae(e);if(!n.ok)return{pathsTargets:[],referencesPaths:[],failed:!0};let r=yi(n.value,e,t),i=gn(e,n.value,t,0);return{pathsTargets:i.pathsTargets,referencesPaths:r,failed:i.failed}}function yi(e,t,n){let r=e.references;if(!Array.isArray(r))return[];let i=Ne(t),a=new Set;for(let s of r){if(!s||typeof s!="object")continue;let o=s.path;if(typeof o!="string"||o.trim()==="")continue;let l=fn(o,i,n);l&&a.add(l)}return[...a]}function gn(e,t,n,r){let i=Si(t);if(i)return{pathsTargets:bi(i,Ne(e),n),failed:!1};if(r>=5)return{pathsTargets:[],failed:!1};let a=Pi(t.extends,e,n);if(!a)return{pathsTargets:[],failed:!1};let s=Ae(a);return s.ok?gn(a,s.value,n,r+1):{pathsTargets:[],failed:!0}}function Si(e){let t=e.compilerOptions;if(!t||typeof t!="object"||Array.isArray(t))return;let n=t.paths;return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function bi(e,t,n){let r=new Set;for(let i of Object.values(e))if(Array.isArray(i))for(let a of i){if(typeof a!="string")continue;let s=fn(a,t,n);s&&r.add(s)}return[...r]}function Pi(e,t,n){let r=Array.isArray(e)?e.at(-1):e;if(typeof r!="string"||r.trim()===""||!r.startsWith(".")&&!r.startsWith("/"))return;let i=Le(Ne(t),r);if(i.endsWith(".json")||(i=`${i}.json`),!i.split(on).includes("node_modules")&&A(n,i)&&Me(i))return i}function fn(e,t,n){let r=e.replace(/\/?\*+$/,""),i=Le(t,r===""?".":r);if(!A(n,i))return;let s=ui(n,i).split(on).join("/");return s===""?".":s}function xi(e){let t="",n=0,r=!1,i=e.length;for(;n<i;){let a=e[n];if(r){if(t+=a,a==="\\"&&n+1<i){t+=e[n+1],n+=2;continue}a==='"'&&(r=!1),n+=1;continue}if(a==='"'){r=!0,t+=a,n+=1;continue}if(a==="/"&&e[n+1]==="/"){for(n+=2;n<i&&e[n]!==`
248
+ `;)n+=1;continue}if(a==="/"&&e[n+1]==="*"){for(n+=2;n<i&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}t+=a,n+=1}return t}function Ae(e){try{let t=li(e,"utf-8"),n=JSON.parse(xi(t));return n&&typeof n=="object"&&!Array.isArray(n)?{ok:!0,value:n}:{ok:!1}}catch{return{ok:!1}}}import{existsSync as Ri,readFileSync as Ii,readdirSync as vi,statSync as Ei}from"fs";import x from"path";var Fi=new Set([".cache",".git",".next",".nuxt",".turbo",".nx","build","coverage","dist","node_modules","tmp","vendor"]);function G(e,t=[]){let n=x.resolve(e),r=t.flatMap(l=>wi(n,l));if(r.length>0)return mn(n,hn(r));let i=ji(n),a=hn(i),s=Di(n,a)?[n,...a]:a,o=s.length>0?s:[n];return mn(n,o)}function mn(e,t){return[...new Set(t.map(n=>ki(e,n)))].sort((n,r)=>n.localeCompare(r))}function ji(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),i;try{i=vi(r,{withFileTypes:!0})}catch{continue}for(let a of i){let s=x.join(r,a.name);if(a.isDirectory()){!Fi.has(a.name)&&!a.name.startsWith(".")&&n.push(s);continue}a.isFile()&&_i(s)&&t.push(x.dirname(s))}}return t}function wi(e,t){let n=t.trim();if(!n)return[];let r=x.resolve(e,n);if(!A(e,r))return[];try{let i=Ei(r);if(i.isDirectory())return[r];if(i.isFile()&&yn(x.basename(r)))return[x.dirname(r)]}catch{return[]}return[]}function _i(e){if(!yn(x.basename(e)))return!1;let t=Sn(e);return t?x.basename(e)==="tsconfig.json"||"include"in t||"files"in t||"references"in t:!1}function yn(e){return e.startsWith("tsconfig")&&e.endsWith(".json")}function hn(e){let t=[...new Set(e.map(n=>x.resolve(n)))].sort((n,r)=>n.localeCompare(r));return t.length<=1?t:t.filter(n=>!t.some(r=>r!==n&&Oi(n,r)))}function Di(e,t){if(t.length===0||t.some(r=>x.resolve(r)===e))return!1;let n=x.join(e,"tsconfig.json");return Ri(n)&&Ti(n)}function Ti(e){let n=Sn(e)?.include;return Array.isArray(n)?n.some(r=>typeof r=="string"&&r.trim()!==""&&!r.startsWith("!")&&(r.includes("/")||r.includes("**")||!x.extname(r))):!1}function Sn(e){try{let t=JSON.parse(Ii(e,"utf-8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function ki(e,t){let n=x.relative(e,t);return n?n.split(x.sep).join("/"):"."}function Oi(e,t){let n=x.relative(e,t);return!!n&&!n.startsWith("..")&&!x.isAbsolute(n)}import{createHash as Hi}from"crypto";import{existsSync as $e,readFileSync as Fn,statSync as qi,writeFileSync as Be}from"fs";import{join as zi}from"path";import{randomUUID as Mi}from"crypto";import{existsSync as Ni,mkdirSync as bn,readFileSync as Li,rmSync as Pn}from"fs";import{resolve as xn}from"path";var Ci=12e4,Ai=5,de=class{projectRoot;cacheDir;baseGeneration;timeoutMs;runtime;constructor(t,n={}){this.projectRoot=Ze(t.projectRoot),this.cacheDir=t.cacheDir,this.baseGeneration=t.baseGeneration,this.timeoutMs=n.timeoutMs??Ji(),this.runtime=n.runtime??Wi}request(t){let n=pt(this.cacheDir),r=Ot(this.cacheDir),i=be(n.statePath);if(!Rn(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript index service is not running.");let a=this.runtime.randomId(),s=xn(r.requestDir,`${a}.json`),o=xn(r.responseDir,`${a}.json`),l=this.runtime.now()+this.timeoutMs;bn(r.requestDir,{recursive:!0}),bn(r.responseDir,{recursive:!0}),O(s,{protocolVersion:re,id:a,baseGeneration:this.baseGeneration,deadlineAtMs:l,request:t});try{for(;this.runtime.now()<=l;){if(Ni(o))return $i(Li(o,"utf8"),a,this.baseGeneration,t.producerIdentity,t.affectedFiles);let c=be(n.statePath);if(!Rn(c,this.projectRoot,this.runtime))throw new Error("TypeScript index service stopped while processing a request.");this.runtime.sleep(Ai)}throw new Error(`TypeScript index service timed out after ${this.timeoutMs}ms.`)}finally{Pn(s,{force:!0}),Pn(o,{force:!0})}}};function Rn(e,t,n){let r=e!==null&&n.now()-Date.parse(e.heartbeatAt)<=ut,i=e?.typescriptIndex?.busyUntil!==void 0&&n.now()<=Date.parse(e.typescriptIndex.busyUntil);return e!==null&&e.projectRoot===t&&e.typescriptIndex?.protocolVersion===re&&n.isProcessAlive(e.pid)&&(r||i)}function $i(e,t,n,r,i){let a=JSON.parse(e);if(a.protocolVersion!==re||a.id!==t||a.ok===!0&&a.baseGeneration!==n)throw new Error("TypeScript index service wrote an incompatible response.");if(a.ok!==!0)throw new Error(typeof a.error=="string"?a.error:"TypeScript index service request failed.");let s=Bi(a.response,r),o=[...new Set(i)].sort(),l=s.fragments.map(c=>c.relativePath).sort();if(JSON.stringify(l)!==JSON.stringify(o))throw new Error("TypeScript index service omitted or added an affected document.");return s}function Bi(e,t){if(!e||typeof e!="object")throw new Error("TypeScript index service wrote an invalid response.");let n=e;if(n.producerIdentity!==t||typeof n.cold!="boolean"||typeof n.durationMs!="number"||!Number.isFinite(n.durationMs)||!Array.isArray(n.fragments))throw new Error("TypeScript index service wrote an invalid response.");let r=new Set,i=n.fragments.map(a=>{if(!a||typeof a.relativePath!="string"||a.bytesBase64!==null&&typeof a.bytesBase64!="string"||typeof a.occurrences!="number"||!Number.isInteger(a.occurrences)||a.occurrences<0||typeof a.symbols!="number"||!Number.isInteger(a.symbols)||a.symbols<0||!Array.isArray(a.referenceFragments)||!a.referenceFragments.every(Gi)||r.has(a.relativePath))throw new Error("TypeScript index service wrote an invalid fragment.");r.add(a.relativePath);let s=a.bytesBase64===null?null:Ui(a.bytesBase64);return{relativePath:a.relativePath,bytes:s,occurrences:a.occurrences,symbols:a.symbols,referenceFragments:a.referenceFragments}});return{producerIdentity:n.producerIdentity,cold:n.cold,durationMs:n.durationMs,fragments:i}}function Gi(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.targetSymbol=="string"&&!!t.location&&typeof t.location.file=="string"&&Number.isInteger(t.location.line)&&Number.isInteger(t.location.column)}function Ui(e){let t=Buffer.from(e,"base64");if(t.toString("base64")!==e)throw new Error("TypeScript index service wrote invalid base64.");return t}function Ji(){let e=Number(process.env.SCIP_TYPESCRIPT_INDEX_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:Ci}var Wi={now:Date.now,randomId:Mi,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:k};function Xi(e){let t=e.projectMode==="workspace"?e.workspaceProjects??[]:["."];if(t.length===0)return{eligible:!1,reason:"workspace project roots unavailable"};if(t.length===1&&t[0]==="."&&!e.rootTsconfigExists)return{eligible:!1,reason:"root tsconfig unavailable"};if(!e.previousSnapshot)return{eligible:!1,reason:"prior project snapshot unavailable"};if(e.graph===null)return{eligible:!1,reason:"dependency graph unavailable"};if(e.projectFiles.length===0)return{eligible:!1,reason:"prior TypeScript documents unavailable"};let n=Y(e.previousSnapshot,e.currentSnapshot);if(n.changes.length===0)return{eligible:!1,reason:"no changed project inputs"};if(n.changes.some(c=>c.kind!=="modified"||c.inputKind!=="source"||!$(c.path)))return{eligible:!1,reason:"change is not a modified TypeScript source file"};let r=K(n,e.graph,e.projectFiles);if(r.mode!=="closure"||r.affectedFiles.length===0)return{eligible:!1,reason:r.reasons.length>0?`affected set widened: ${r.reasons.join(", ")}`:"empty affected set"};let i=Qi([...r.changedFiles,...r.affectedFiles],t);if(!i)return{eligible:!1,reason:"affected files cross or ambiguously match TypeScript projects"};let a=In(e.currentSnapshot,e.projectFiles,e.producerIdentity),s=In(e.previousSnapshot,e.projectFiles,e.producerIdentity);if(a!==s)return{eligible:!1,reason:"TypeScript fragment project identity changed"};let o=En(e.previousSnapshot,e.projectFiles,e.graph,e.producerIdentity,e.projectFiles);if(!o)return{eligible:!1,reason:"prior document identity unavailable"};let l=En(e.currentSnapshot,e.projectFiles,e.graph,e.producerIdentity,r.affectedFiles);return l?{eligible:!0,manifest:n,plan:r,projectIdentity:a,previousFragmentGeneration:vn(e.previousSnapshot,e.producerIdentity),nextFragmentGeneration:vn(e.currentSnapshot,e.producerIdentity),previousDocumentIdentities:o,nextDocumentIdentities:l,tsconfigPath:i==="."?"tsconfig.json":`${i}/tsconfig.json`,projectArgument:i}:{eligible:!1,reason:"next document identity unavailable"}}function Qi(e,t){let n=null;for(let r of e){let i=t.filter(a=>a==="."||r===a||r.startsWith(`${a}/`));if(i.length!==1||n!==null&&n!==i[0])return null;n=i[0]}return n}function jn(e){let t=Date.now();try{if(!$e(e.previousDbPath)||!$e(e.previousShardPath))throw new Error("prior TypeScript graph or language shard unavailable");let n=performance.now(),r=Re();if(!r.available)throw new Error(r.reason);let i=performance.now()-n;n=performance.now();let a=new T({projectRoot:e.projectRoot,dbPath:e.previousDbPath,indexPath:e.previousIndexPath}),s,o;try{s=w(a,{includeIgnored:!1}).filter($).sort(),o=M(a)}finally{a.close()}let l=performance.now()-n,c=Xi({projectMode:e.projectMode,workspaceProjects:e.projectMode==="workspace"?G(e.projectRoot,e.currentSnapshot.typescriptProjects):void 0,previousSnapshot:e.previousSnapshot,currentSnapshot:e.currentSnapshot,projectFiles:s,graph:o,producerIdentity:r.producerIdentity,rootTsconfigExists:$e(zi(e.projectRoot,"tsconfig.json"))});if(!c.eligible)throw new Error(c.reason);let d=Mt(e.previousDbPath);if(!d)throw new Error("published TypeScript base generation unavailable");n=performance.now();let g=new de({projectRoot:e.projectRoot,cacheDir:e.cacheDir,baseGeneration:d}).request({kind:"emit-documents",tsconfigPath:c.tsconfigPath,projectArgument:c.projectArgument,projectIdentity:c.projectIdentity,producerIdentity:r.producerIdentity,modifiedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles}),m=performance.now()-n,p=qi(e.previousShardPath).size>=vt;n=performance.now();let S=p?null:Fn(e.previousShardPath),f=p?{completeIndexBytes:null,affectedIndexBytes:Pt(g.fragments)}:It({packageVersion:r.packageVersion,baseIndexBytes:S,fragments:g.fragments}),b=performance.now()-n;n=performance.now(),p?Et({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,nextGenerationIdentity:c.nextFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,baseShardCurrent:e.baseShardCurrent,fragments:g.fragments}):(xt({cacheDir:e.cacheDir,packageVersion:r.packageVersion,indexBytes:S,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.previousFragmentGeneration,documentIdentities:c.previousDocumentIdentities,allowUntrackedDocuments:!0}),Rt({cacheDir:e.cacheDir,previousGenerationIdentity:c.previousFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:c.projectIdentity,generationIdentity:c.nextFragmentGeneration,fragments:g.fragments,documentIdentities:c.nextDocumentIdentities}));let y=performance.now()-n;n=performance.now(),f.completeIndexBytes&&Be(e.candidateShardPath,f.completeIndexBytes),Be(e.candidateAffectedScipPath,f.affectedIndexBytes);let I=performance.now()-n,P={scipPath:p?e.previousShardPath:e.candidateShardPath,candidateScipPath:e.candidateShardPath,affectedScipPath:e.candidateAffectedScipPath,completeScipUpdated:!p,durationMs:Date.now()-t,cold:g.cold,changedFiles:c.plan.changedFiles,affectedFiles:c.plan.affectedFiles,producerIdentity:r.producerIdentity,previousFragmentGeneration:c.previousFragmentGeneration,nextFragmentGeneration:c.nextFragmentGeneration,manifest:c.manifest,plan:c.plan,projectFileCount:s.length,referenceFragmentsByFile:new Map(g.fragments.map(q=>[q.relativePath,q.referenceFragments])),timings:{runtimeMs:i,graphMs:l,requestMs:m,serviceMs:g.durationMs,assemblyMs:b,fragmentStoreMs:y,writeMs:I}};return e.onStatus(`Incremental TypeScript index emitted ${P.affectedFiles.length} affected document(s) in ${(P.durationMs/1e3).toFixed(3)}s (${P.cold?"cold":"warm"} service; ${p?"whole SCIP deferred":"whole SCIP current"}; runtime ${i.toFixed(0)}ms, graph ${l.toFixed(0)}ms, request ${m.toFixed(0)}ms, assembly ${b.toFixed(0)}ms, fragments ${y.toFixed(0)}ms, write ${I.toFixed(0)}ms).`),P}catch(n){return e.onStatus(`Incremental TypeScript index unavailable: ${n instanceof Error?n.message:String(n)}. Falling back to the whole-project indexer.`),null}}function wn(e){let t=Re();if(!t.available)throw new Error(t.reason);let n=Ft({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,baseIndexBytes:Fn(e.baseShardPath),packageVersion:t.packageVersion});Be(e.candidateShardPath,n)}function In(e,t,n){let r=e.files.filter(i=>V(i.path,e.languages)!=="source").map(i=>({path:i.path,size:i.size,hash:i.hash})).sort((i,a)=>i.path.localeCompare(a.path));return Ge(JSON.stringify({version:1,producerIdentity:n,pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:[...e.typescriptProjects].sort(),projectFiles:[...t].sort(),nonSourceInputs:r}))}function vn(e,t){return Ge(JSON.stringify({version:1,producerIdentity:t,snapshot:e}))}function En(e,t,n,r,i){let a=new Set(e.files.map(l=>l.path)),s=oe({projectFiles:t.filter(l=>a.has(l)),snapshot:e,graph:n,engineIdentity:r}),o=new Map;for(let l of i){let c=s.identityFor(l,"typescript-scip-document-v1");if(c.key){o.set(l,c.key);continue}if(a.has(l))return null;o.set(l,Ge(JSON.stringify({version:1,producerIdentity:r,generatedDocument:l})))}return o}function Ge(e){return Hi("sha256").update(e).digest("hex")}import{execFile as Vi}from"child_process";import{existsSync as ue,renameSync as Je,rmSync as We,statSync as Yi}from"fs";import{cpus as Ki}from"os";import{join as _n}from"path";function Zi(e,t,n){if(!e.defaultOutputPath)return;let r=_n(t,e.defaultOutputPath);n!==r&&ue(r)&&Je(r,n)}function ea(e,t,n){if(!e.defaultOutputPath)return null;let r=_n(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return We(i,{force:!0}),ue(r)?(Je(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function ta(e){e&&(We(e.defaultOutputPath,{force:!0}),e.backupPath&&ue(e.backupPath)&&Je(e.backupPath,e.defaultOutputPath))}function na(e,t){if(e<=1)return 1;let n=Number(process.env.SCIP_QUERY_INDEXER_CONCURRENCY??0),r=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,Ki().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function Dn(e,t,n,r){let i=e.filter(c=>c.config.defaultOutputPath),a=e.filter(c=>!c.config.defaultOutputPath),s=[],o=na(a.length,r),l=await ia(a,o,c=>Ue(c,t,n));if(o>1){let c=new Map;for(let d of l.filter(u=>u.skipped)){let u=a.find(g=>g.id===d.id);u&&(n(`Retrying ${u.label} indexer serially after parallel failure...`),c.set(u.id,await Ue(u,t,n)))}s.push(...l.map(d=>c.get(d.id)??d))}else s.push(...l);for(let c of i)s.push(await Ue(c,t,n));return s.sort((c,d)=>e.findIndex(u=>u.id===c.id)-e.findIndex(u=>u.id===d.id))}async function Ue(e,t,n){n(`Indexing ${e.label} with ${e.resolvedBinary}...`),We(e.scipPath,{force:!0});let r=ea(e.config,t,e.scipPath),i=[e.binary,...e.args].join(" "),a=Date.now();try{await ra(e.binary,e.args,{cwd:t,env:e.env,maxBuffer:50*1024*1024}),Zi(e.config,t,e.scipPath)}catch(o){let l=o instanceof Error?o.message:String(o),c=`${e.resolvedBinary} indexer failed: ${l.split(`
249
+ `)[0]}`,d=e.label===e.language?c:`${e.label}: ${c}`;return n(`Skipping ${e.label}: ${c}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:d}}}finally{ta(r)}if(!ue(e.scipPath)){let o=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`,l=e.label===e.language?o:`${e.label}: ${o}`;return n(`Skipping ${e.label}: ${o}`),{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,skipped:{language:e.language,reason:l}}}let s;try{s=Yi(e.scipPath).size}catch{s=void 0}return{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:Date.now()-a,command:i,outputBytes:s}}function ra(e,t,n){return new Promise((r,i)=>{Vi(e,[...t],n,a=>{a?i(a):r()})})}async function ia(e,t,n){if(e.length===0)return[];let r=new Array(e.length),i=0,a=Math.max(1,Math.min(e.length,t)),s=Array.from({length:a},async()=>{for(;i<e.length;){let o=i++;r[o]=await n(e[o])}});return await Promise.all(s),r}async function $n(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log,skipAutoInstall:i=!1}=e,a=ha(e),s=Date.now();ge(h(a.outputScip),{recursive:!0}),ge(h(a.outputDb),{recursive:!0});let o=e.languages??ht(t);if(o.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: ${o.join(", ")}`);let l=F("reindex.fingerprint",()=>Qa(t,o,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath}),{languages:o.length}),c,d;if(e.skipIfUnchanged!==!1&&!Dt(t,a.outputDb)&&Tn(a.outputScip)===Tn(R(h(a.outputDb),"index.scip"))){let p=X(t);if(c=p?te(p,l):void 0,c){let S=ne(c);if(S){if(!ma(a,l))try{Pe({snapshot:c,manifest:S,targetCacheDir:h(a.outputDb),targetProjectRoot:t}),r(`Attached shared generation ${c.generationId.slice(0,12)}`)}catch(f){r(`Shared generation attach failed; continuing locally: ${qe(f)}`)}}else{let f=await kt(c);if(f.kind==="owner")d=f.release;else if(f.kind==="generation-ready"){let b=ne(c);if(b)try{Pe({snapshot:c,manifest:b,targetCacheDir:h(a.outputDb),targetProjectRoot:t,action:"waited"}),r(`Attached shared generation ${c.generationId.slice(0,12)} after waiting`)}catch(y){r(`Shared generation attach failed after waiting; continuing locally: ${qe(y)}`)}}else r("Shared generation build lock timed out; continuing with an isolated local reindex")}}}let u=et(R(h(a.outputDb),"cache-lifecycle.lock"),{waitMs:3e4});if(!u)throw d?.(),new Error(`Could not acquire scip-query cache lifecycle lock for ${h(a.outputDb)}.`);let g;try{g=await L("reindex.lock",()=>Ua(R(h(a.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),{languages:o.length})}catch(p){throw u.release(),d?.(),p}let m=null;try{let p=null,S=F("reindex.reuse-check",()=>(p=ya({opts:e,paths:a,languages:o,fingerprint:l,start:s,onStatus:r}),p),()=>({languages:o.length,reused:p!==null}));if(S)return kn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),S;await L("reindex.scip-cli-ready",()=>Ma(i,r));let f=ba(a);m=f.runDir;let b,y=await L("reindex.fresh",async()=>(b=await Pa({opts:e,languages:o,projectRoot:t,paths:a,tempPaths:f,fingerprint:l,start:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r}),b),()=>({languages:o.length,reused:b?.reused,skipped:b?.skipped.length}));return kn({snapshot:c,paths:a,projectRoot:t,fingerprint:l,onStatus:r}),y}catch(p){throw Qn(a.metaPath,ye({trigger:e.trigger,result:"failed",start:s,error:p instanceof Error?p.message:String(p)})),p}finally{m&&D(m,{recursive:!0,force:!0}),g(),u.release(),d?.()}}function kn(e){if(e.snapshot){if(ne(e.snapshot)){xe(e.snapshot,h(e.paths.outputDb),"local-fresh");return}try{let t=X(e.projectRoot),n=t?te(t,e.fingerprint):void 0;if(!n||n.generationId!==e.snapshot.generationId){e.onStatus("Skipped shared generation publication because the worktree changed during indexing");return}Tt({snapshot:e.snapshot,sourceCacheDir:h(e.paths.outputDb),sourceProjectRoot:e.projectRoot,sourceStillValid:()=>{let r=X(e.projectRoot);return(r?te(r,e.fingerprint):void 0)?.generationId===e.snapshot?.generationId}}),xe(e.snapshot,h(e.paths.outputDb),"built"),e.onStatus(`Published shared generation ${e.snapshot.generationId.slice(0,12)}`)}catch(t){e.onStatus(`Shared generation publication failed; local index remains valid: ${qe(t)}`)}}}function ma(e,t){if(!E(e.outputScip)||!E(e.outputDb)||!Xn(e.metaPath,t))return!1;let n=B(e.outputDb,e.metaPath);return n.state!=="invalid"&&n.state!=="drifted"}function qe(e){return e instanceof Error?e.message:String(e)}function ha(e){let t=e.outputScip??R(e.projectRoot,"index.scip"),n=e.outputDb??R(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:R(h(n),"meta.json")}}function ya(e){let t=B(e.paths.outputDb,e.paths.metaPath);if(e.opts.skipIfUnchanged===!1||!E(e.paths.outputScip)||!E(e.paths.outputDb)||!Xn(e.paths.metaPath,e.fingerprint)||t.state==="invalid"||t.state==="drifted")return null;ee(Z(),{projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus});let n=Date.now()-e.start,r=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:e.languages,skipped:[]});return Qn(e.paths.metaPath,r),e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[],lastRefresh:r,shards:Sa(e.paths,e.opts.projectRoot,e.languages,e.opts)}}function Sa(e,t,n,r){let i=qn(t,n,r);return n.map(a=>({id:a,language:a,reused:!0,fingerprint:U(i[a]),outputBytes:J(Xe(e.outputDb,a)),durationMs:0}))}function ba(e){let t=ca(R(h(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:R(t,pe(e.outputScip)),tempOutputDb:R(t,pe(e.outputDb)),tempMetaPath:R(t,pe(e.metaPath))}}async function Pa(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},n,r=await L("reindex.language-indexers",async()=>(n=await Ra(e,t),n),()=>({languages:e.languages.length,indexed:n?.indexedOutputs.length,reused:n?.reusedLanguages.length,skipped:n?.skippedLanguages.length})),{indexedOutputs:i,skippedLanguages:a,reusedLanguages:s,languageFingerprints:o,shards:l,typescriptProjectShardContext:c,incrementalTypeScript:d}=r;if(s.length>0&&e.onStatus(`Reused ${s.length} cached language shard(s): ${s.join(", ")}`),xa({run:e,indexedOutputs:i,skippedLanguages:a,reusedLanguages:s})){let m=F("reindex.publish",()=>Ta(e,i,a,s,o,c),{mode:"metadata-only",languages:i.length,reused:s.length}),p=m.durationMs;return e.onStatus(`All language shards unchanged; reused existing SQLite index in ${(p/1e3).toFixed(1)}s`),{languages:i.map(S=>S.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:p,reused:!0,skipped:a,lastRefresh:m,shards:l}}let u=F("reindex.publish",()=>Da(e,t,i,a,s,o,c,d),{mode:d?"incremental-or-fallback":"full",languages:i.length,reused:s.length,skipped:a.length}),g=u.durationMs;return e.onStatus(`Done in ${(g/1e3).toFixed(1)}s`),{languages:i.map(m=>m.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:g,reused:!1,skipped:a,lastRefresh:u,shards:l}}function xa(e){if(e.run.opts.skipIfUnchanged===!1||e.skippedLanguages.length>0||!E(e.run.paths.outputScip)||!E(e.run.paths.outputDb))return!1;let t=B(e.run.paths.outputDb,e.run.paths.metaPath);if(t.state==="invalid"||t.state==="drifted")return!1;let n=new Set(e.reusedLanguages),r=new Set(e.indexedOutputs.map(i=>i.language));return e.run.languages.length>0&&r.size===e.run.languages.length&&e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(i=>n.has(i)&&r.has(i))}async function Ra(e,t){let n=ja({paths:e.paths,projectRoot:e.projectRoot,languages:e.languages,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,clojureConfigPath:e.opts.clojureConfigPath}),r=[],i=new Set;for(let[v,Ye]of n)Ye.reused&&(r.push({language:v,scipPath:Ye.scipPath}),i.add(v));for(let v of i)e.onStatus(`Reusing cached ${v} SCIP shard (language inputs unchanged).`);let a=n.get("typescript"),s=B(e.paths.outputDb,e.paths.metaPath),o=H(e.paths.metaPath),l=s.state==="legacy"||s.state==="current",c=o?.scipCompanion!=="deferred"&&(s.state!=="current"||s.generation.publication?.scipCompanion!=="deferred"),d=a&&!a.reused&&l?jn({projectRoot:e.projectRoot,cacheDir:h(e.paths.outputDb),previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,previousShardPath:a.scipPath,candidateShardPath:W(e.tempPaths.tempOutputScip,"typescript-incremental",0),candidateAffectedScipPath:W(e.tempPaths.tempOutputScip,"typescript-affected",0),baseShardCurrent:c,previousSnapshot:ze(e.paths.metaPath),currentSnapshot:e.fingerprint,projectMode:e.opts.typescriptProjectMode,onStatus:e.onStatus}):null,u=new Set(d?["typescript"]:[]),g=d?void 0:Ia(e,n),{preparedRuns:m,skippedLanguages:p,languageOutputScipPaths:S}=Na({languages:e.languages.filter(v=>!i.has(v)&&!u.has(v)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,preDiscoveredTypeScriptProjects:g?.allProjects,clojureConfigPath:e.opts.clojureConfigPath,onStatus:e.onStatus}),f=g?m.filter(v=>v.language!=="typescript"||g.missedProjectIds.has(v.id)):m,b=await Dn(f,e.projectRoot,e.onStatus,e.opts.indexerConcurrency),y=[];if(g){Ea(e.paths.outputDb,b);let v=S.typescript??e.tempPaths.tempOutputScip;y=Fa({outputDb:e.paths.outputDb,tempOutputScip:e.tempPaths.tempOutputScip,outputScipPath:v,reusedProjects:g.reusedProjects})}let I=[...b,...y],{indexedOutputs:P}=Ca(I,p),q=d?[{language:"typescript",scipPath:d.scipPath}]:[],Ve=[...r,...q,...P];Aa(Ve,p,e.languages,e.opts.allowPartial,e.onStatus);let nr=d?[{id:"typescript",language:"typescript",label:"typescript (incremental documents)",scipPath:d.scipPath,outputScipPath:d.scipPath,durationMs:d.durationMs,command:"watch-service:typescript-index",outputBytes:J(d.scipPath)??void 0}]:[],rr=wa(n,[...b,...nr],g?{outputDb:e.paths.outputDb,classification:g.classification}:void 0);return{indexedOutputs:Ve,skippedLanguages:p,reusedLanguages:[...i],languageFingerprints:_a(n,e.languages),shards:rr,typescriptProjectShardContext:g?{projects:g.allProjects,fingerprints:g.fingerprints}:void 0,incrementalTypeScript:d??void 0}}function Ia(e,t){let n=t.get("typescript");if(!n||n.reused||e.opts.typescriptProjectMode!=="workspace")return;let r=G(e.projectRoot,e.opts.typescriptProjects);if(r.length===0)return;let i=un(e.projectRoot,r),a=cn(n.fingerprint.files,r),s=ln(r,i),o=dn(r,a,s),l=H(e.paths.metaPath),d=va(l,o,p=>E(he(e.paths.outputDb,p))),u=[...d.entries()].filter(([,p])=>p.reused).map(([p])=>p),g=new Set(u),m=new Set(r.filter(p=>!g.has(p)).map(p=>`typescript:${p}`));return{allProjects:r,fingerprints:o,classification:d,reusedProjects:u,missedProjectIds:m}}function va(e,t,n){let r=new Map;for(let i of Object.keys(t)){let a=t[i];if(!e){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:a});continue}let s=e.typescriptProjectShards?.[i];if(!s){r.set(i,{reused:!1,reason:"no cached fingerprint for this project",fingerprint:a});continue}if(!n(i)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:a});continue}if(j(s)!==j(a)){r.set(i,{reused:!1,reason:"project inputs changed since last index",fingerprint:a});continue}r.set(i,{reused:!0,fingerprint:a})}return r}function Ea(e,t){for(let n of t){if(n.skipped||!n.id.startsWith("typescript:"))continue;let r=n.id.slice(11),i=he(e,r);ge(h(i),{recursive:!0}),fe(n.scipPath,i)}}function Fa(e){return e.reusedProjects.map((t,n)=>{let r=he(e.outputDb,t),i=W(e.tempOutputScip,"typescript-project-cached",n);return fe(r,i),{id:`typescript:${t}`,language:"typescript",label:`typescript (${t})`,scipPath:i,outputScipPath:e.outputScipPath,durationMs:0,command:"cached",outputBytes:J(i)??void 0}})}function ja(e){let t=H(e.paths.metaPath),n=qn(e.projectRoot,e.languages,e),r=new Map;for(let i of e.languages){let a=Xe(e.paths.outputDb,i),s=n[i];if(!t){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:s,scipPath:a});continue}if(t.version!==3){r.set(i,{reused:!1,reason:`metadata version ${String(t.version??"unknown")} predates per-language shard caching`,fingerprint:s,scipPath:a});continue}if(i==="typescript"&&t.scipCompanion==="deferred"){r.set(i,{reused:!1,reason:"whole TypeScript SCIP companion is deferred behind changed-document overlays",fingerprint:s,scipPath:a});continue}if(!t.languageFingerprints){r.set(i,{reused:!1,reason:"no per-language fingerprints recorded in metadata",fingerprint:s,scipPath:a});continue}let o=t.languageFingerprints[i];if(!o){r.set(i,{reused:!1,reason:"no cached fingerprint for this language",fingerprint:s,scipPath:a});continue}if(!E(a)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:s,scipPath:a});continue}if(j(o)!==j(s)){r.set(i,{reused:!1,reason:"language inputs changed since last index",fingerprint:s,scipPath:a});continue}r.set(i,{reused:!0,fingerprint:s,scipPath:a})}return r}function wa(e,t,n){let r=[];for(let[i,a]of e)a.reused&&r.push({id:i,language:i,reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(a.scipPath),durationMs:0});for(let i of t){let a=e.get(i.language),s=n&&i.id.startsWith("typescript:")?i.id.slice(11):null,o=s?n.classification.get(s):void 0;r.push({id:i.id,language:i.language,reused:!1,missReason:o?.reason??a?.reason??i.skipped?.reason,fingerprint:o?U(o.fingerprint):a?U(a.fingerprint):"unknown",outputBytes:i.outputBytes??null,durationMs:i.durationMs,command:i.command})}if(n)for(let[i,a]of n.classification)a.reused&&r.push({id:`typescript:${i}`,language:"typescript",reused:!0,fingerprint:U(a.fingerprint),outputBytes:J(he(n.outputDb,i)),durationMs:0});return r}function U(e){return sa("sha256").update(j(e)).digest("hex").slice(0,16)}function J(e){try{return ua(e).size}catch{return null}}function _a(e,t){let n={};for(let r of t){let i=e.get(r);i&&(n[r]=i.fingerprint)}return n}function Da(e,t,n,r,i,a,s,o){let l=!o||o.completeScipUpdated,c=!1;l&&(On(e.paths.outputDb,n),c=Mn(n,e.tempPaths.tempOutputScip,e.onStatus));let d=$a({run:e,env:t,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,incrementalTypeScript:o,completeScipAvailable:l,completeScipSanitized:c,materializeFullFallback:()=>{if(!o||o.completeScipUpdated)return c;e.onStatus("Materializing the deferred whole TypeScript SCIP companion for full conversion..."),wn({cacheDir:h(e.paths.outputDb),generationIdentity:o.nextFragmentGeneration,baseShardPath:o.scipPath,candidateShardPath:o.candidateScipPath});let y=n.map(I=>I.language==="typescript"?{language:I.language,scipPath:o.candidateScipPath}:I);return On(e.paths.outputDb,y),c=Mn(y,e.tempPaths.tempOutputScip,e.onStatus),c}});if(ee(Z(),{projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),d.mode==="incremental"&&o){let y=null,I=null;try{y=new T({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,indexPath:e.tempPaths.tempOutputScip}),I=new T({projectRoot:e.projectRoot,dbPath:e.paths.outputDb,indexPath:e.paths.outputScip});let P=zt(y,e.fingerprint,o.referenceFragmentsByFile,I);e.onStatus(`Cached exact TypeScript reference fragments for ${P} affected document(s).`)}catch(P){e.onStatus(`Exact TypeScript reference fragment prefill unavailable: ${P instanceof Error?P.message:String(P)}.`)}finally{y?.close(),I?.close()}}let u=ze(e.paths.metaPath),g=d.mode==="incremental"&&o?Ga(o,d.changedDocumentPaths):Te({projectRoot:e.projectRoot,previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.tempPaths.tempOutputDb,candidateIndexPath:e.tempPaths.tempOutputScip,previousSnapshot:u,currentSnapshot:e.fingerprint,refreshResult:"rebuilt"}),m=ye({trigger:e.opts.trigger,result:"rebuilt",start:e.start,languages:n.map(y=>y.language),skipped:[...r]}),p=d.mode==="incremental"&&d.scipCompanion==="deferred",S={...a};p&&delete S.typescript;let{metadata:f,pruneProjects:b}=Gn({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,languageFingerprints:S,typescriptProjectShardContext:s,lastRefresh:m});return f.scipCompanion=p?"deferred":"current",Un(e.paths.outputDb,b),Qe(e.tempPaths.tempMetaPath,f),wt({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath,preserveOutputScip:d.mode==="incremental"&&d.scipCompanion==="deferred",publication:d.mode==="incremental"?{mode:"incremental",validation:"passed",converterDurationMs:d.converterDurationMs,affectedDocumentCount:o?.affectedFiles.length,changedDocumentCount:d.changedDocumentPaths.length,producerDurationMs:o?.timings.serviceMs,materializationDurationMs:o?.durationMs,patchDurationMs:d.patchDurationMs,scipCompanion:d.scipCompanion,...d.scipCompanion==="deferred"&&o?{typescriptOverlayGeneration:o.nextFragmentGeneration}:{}}:{mode:"full",validation:"passed",converterDurationMs:d.converterDurationMs,scipCompanion:"current",...d.fallbackReason?{fallbackReason:d.fallbackReason}:{}}}),jt(h(e.paths.outputDb),d.mode==="incremental"&&d.scipCompanion==="deferred"?[o.nextFragmentGeneration]:[]),Bn(e.paths.outputDb,g,e.onStatus),m}function Ta(e,t,n,r,i,a){let s=ze(e.paths.metaPath),o=null;try{fe(e.paths.outputDb,e.tempPaths.tempOutputDb)}catch(u){o=Yt("reused","oracle-error",`Could not snapshot the prior database: ${u instanceof Error?u.message:String(u)}`)}ee(Z(),{projectRoot:e.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),o??=Te({projectRoot:e.projectRoot,previousDbPath:e.tempPaths.tempOutputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.paths.outputDb,candidateIndexPath:e.paths.outputScip,previousSnapshot:s,currentSnapshot:e.fingerprint,refreshResult:"reused"});let l=ye({trigger:e.opts.trigger,result:"reused",start:e.start,languages:t.map(u=>u.language),skipped:[...n]}),{metadata:c,pruneProjects:d}=Gn({run:e,indexedOutputs:t,skippedLanguages:n,reusedLanguages:r,languageFingerprints:i,typescriptProjectShardContext:a,lastRefresh:l});return Un(e.paths.outputDb,d),Qe(e.paths.metaPath,c),_t(e.paths.outputDb,e.paths.metaPath),Bn(e.paths.outputDb,o,e.onStatus),l}function ze(e){return ft(H(e)?.fingerprint)}function Bn(e,t,n){try{Kt(e,t),t.status==="evaluated"?n(`Affected-set shadow: ${(t.evaluation.recall*100).toFixed(1)}% recall; ${t.plan.affectedFiles.length} predicted, ${t.comparison.changedFiles.length} changed.`):n(`Affected-set shadow unavailable: ${t.reason}.`)}catch(r){n(`Affected-set shadow telemetry unavailable: ${r instanceof Error?r.message:String(r)}`)}}function Gn(e){let t=ka({mode:e.run.opts.typescriptProjectMode,skippedLanguages:e.skippedLanguages,reusedLanguages:e.reusedLanguages,context:e.typescriptProjectShardContext,metaPath:e.run.paths.metaPath});return{metadata:{version:3,status:e.skippedLanguages.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.run.fingerprint,languageFingerprints:e.languageFingerprints,typescriptProjectShards:t.field,requestedLanguages:e.run.languages,indexedLanguages:e.indexedOutputs.map(n=>n.language),skipped:[...e.skippedLanguages],lastRefresh:e.lastRefresh},pruneProjects:t.pruneProjects}}function ka(e){if(e.mode!=="workspace")return{field:void 0,pruneProjects:null};if(e.skippedLanguages.some(t=>t.language==="typescript"))return{field:void 0,pruneProjects:null};if(e.reusedLanguages.includes("typescript")){let t=H(e.metaPath)?.typescriptProjectShards;return{field:t,pruneProjects:t?Object.keys(t):[]}}return e.context?{field:e.context.fingerprints,pruneProjects:e.context.projects}:{field:void 0,pruneProjects:[]}}function Un(e,t){let n=zn(e);if(t===null){D(n,{recursive:!0,force:!0});return}let r;try{r=da(n)}catch{return}for(let i of Oa(r,t))D(R(n,i),{force:!0})}function Oa(e,t){let n=new Set(t.map(r=>`${Ce(r)}.scip`));return e.filter(r=>!n.has(r))}function On(e,t){for(let n of t){let r=Xe(e,n.language);ge(h(r),{recursive:!0}),n.scipPath!==r&&fe(n.scipPath,r)}}async function Ma(e,t){if(!Se()){if(e)throw new Error(`The scip CLI is required but not found on PATH.
250
+ Install from: https://github.com/sourcegraph/scip/releases`);if(fa()==="win32")throw new Error("The scip CLI was not found. On Windows it ships via the npm sidecar package scip-query-scip-windows (installed automatically with scip-query). Reinstall with optional dependencies enabled, run 'npm install -g scip-query-scip-windows', or set SCIP_QUERY_SCIP_BIN to a local scip.exe path.");if(t("scip CLI not found on PATH. Attempting auto-install..."),!Ke(t))throw new Error(`The scip CLI is required but could not be installed.
251
+ Install manually from: https://github.com/sourcegraph/scip/releases`)}}function Na(e){let t=[],n=[],r=e.languages.map((a,s)=>({language:a,scipPath:e.languages.length>1?W(e.tempOutputScip,a,s):e.tempOutputScip})),i=Object.fromEntries(r.map(({language:a,scipPath:s})=>[a,s]));for(let{language:a,scipPath:s}of r){let o=La({...e,language:a,scipPath:s});for(let l of o)"skipped"in l?Jn(n,l.skipped):t.push(l.prepared)}return{preparedRuns:t,skippedLanguages:n,languageOutputScipPaths:i}}function La(e){if(e.language!=="typescript"||e.typescriptProjectMode!=="workspace")return[He({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})];let t=e.preDiscoveredTypeScriptProjects??G(e.projectRoot,e.typescriptProjects);return t.length===0?[He({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})]:(e.onStatus(`Indexing TypeScript workspace as ${t.length} project shard(s).`),t.map((n,r)=>He({...e,id:`typescript:${n}`,label:`typescript (${n})`,scipPath:W(e.tempOutputScip,"typescript-project",r),outputScipPath:e.scipPath,pnpmWorkspaces:!1,projectPath:n})))}function He(e){let t=ve(e.language),n=we(t),r=Bt(t,e.projectRoot);if(!r&&!At(t)){if(e.skipAutoInstall){let o=`${n} not found on PATH (auto-install disabled). ${t.installUrl??""}`.trim();return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!Ut(t,e.onStatus)){let o=`${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}: ${o}`),{skipped:{language:e.language,reason:o}}}}let i=r??ae(t);if(!i){let o=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${o}`),{skipped:{language:e.language,reason:o}}}let{binary:a,args:s}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:i,projectPath:e.projectPath,configPath:e.language==="clojure"?e.clojureConfigPath:void 0});return{prepared:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,config:t,resolvedBinary:i,binary:a,args:s,env:Gt(t,e.env,i)}}}function Ca(e,t){let n=new Map;for(let i of e)if(i.skipped)Jn(t,i.skipped);else{let a=`${i.language}\0${i.outputScipPath}`,s=n.get(a)??{language:i.language,outputScipPath:i.outputScipPath,scipPaths:[]};s.scipPaths.push(i.scipPath),n.set(a,s)}let r=[];for(let i of n.values())if(i.scipPaths.length>1)St(i.scipPaths,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath});else{let a=i.scipPaths[0];a!==i.outputScipPath&&An(a,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath})}return{indexedOutputs:r}}function Jn(e,t){let n=e.find(r=>r.language===t.language);if(!n){e.push(t);return}n.reason.includes(t.reason)||(n.reason=`${n.reason}; ${t.reason}`)}function Aa(e,t,n,r,i){if(e.length===0){let a=t.map(s=>` - ${s.language}: ${s.reason}`).join(`
252
252
  `);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
253
253
  `+a)}if(t.length!==0&&(i(`Indexed ${e.length} language output(s); skipped or incomplete: ${t.map(a=>a.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.
254
254
  `+t.map(a=>` - ${a.language}: ${a.reason}`).join(`
255
- `))}function On(e,t,n){if(e.length>1){n(`Merging ${e.length} language indexes...`);let r=performance.now(),i=bt(e.map(a=>a.scipPath),t);return Wn(i,n),n(`Merged and sanitized SCIP indexes in ${(performance.now()-r).toFixed(0)}ms.`),!0}else e[0].scipPath!==t&&Cn(e[0].scipPath,t);return!1}function Aa(e){let t;if($a(e)){let i=R(e.run.tempPaths.runDir,"typescript-affected.db");try{Jn(e.incrementalTypeScript.affectedScipPath,e.run.onStatus),e.run.onStatus(`Converting ${e.incrementalTypeScript.affectedFiles.length} affected TypeScript document(s) to SQLite...`);let a=performance.now();Mn(e.incrementalTypeScript.affectedScipPath,i,e.env,e.run.onStatus),e.run.onStatus(`Converted affected SCIP documents in ${(performance.now()-a).toFixed(0)}ms.`);let s=an({previousDbPath:e.run.paths.outputDb,miniDbPath:i,candidateDbPath:e.run.tempPaths.tempOutputDb,affectedFiles:e.incrementalTypeScript.affectedFiles});return e.run.onStatus(`Patched ${s.affectedDocumentCount} SQLite document(s) in ${(s.durationMs/1e3).toFixed(3)}s.`),{mode:"incremental",changedDocumentPaths:s.changedDocumentPaths,patchDurationMs:s.durationMs,converterDurationMs:performance.now()-a,scipCompanion:e.incrementalTypeScript.completeScipUpdated?"current":"deferred"}}catch(a){t=a instanceof Error?a.message:String(a),D(i,{force:!0}),D(e.run.tempPaths.tempOutputDb,{force:!0}),e.run.onStatus(`Incremental SQLite publication unavailable: ${t}. Falling back to complete conversion.`)}}let n=e.completeScipSanitized;e.completeScipAvailable||(n=e.materializeFullFallback());let r=performance.now();return Mn(e.run.tempPaths.tempOutputScip,e.run.tempPaths.tempOutputDb,e.env,e.run.onStatus,n),{mode:"full",converterDurationMs:performance.now()-r,...t?{fallbackReason:t}:{}}}function $a(e){if(!e.incrementalTypeScript||e.skippedLanguages.length>0||!E(e.run.paths.outputDb)||!E(e.run.paths.outputScip))return!1;let t=new Set(e.reusedLanguages);return e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(n=>n==="typescript"||t.has(n))}function Ba(e,t){let n=Date.now(),r=[...t].sort(),i=new Set(r),a={addedFiles:[],modifiedFiles:r,deletedFiles:[],changedFiles:r,unchangedFiles:e.affectedFiles.filter(s=>!i.has(s)).sort()};return{version:1,status:"evaluated",refreshResult:"rebuilt",recordedAt:new Date().toISOString(),durationMs:Date.now()-n,manifest:e.manifest,plan:e.plan,comparison:a,evaluation:De(e.plan,a,e.projectFileCount)}}function Mn(e,t,n,r,i=!1){if(r("Converting to SQLite..."),!E(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{i||Jn(e,r);let a=Se();if(!a)throw new Error("scip CLI is not available");ia(a,["expt-convert","--output",t,e],{env:n,stdio:"pipe",maxBuffer:50*1024*1024})}catch(a){let s=a instanceof Error?a.message:String(a);throw new Error(`Failed to convert SCIP index to SQLite: ${s}`,{cause:a})}}function Jn(e,t){let n=yt(e);Wn(n,t)}function Wn(e,t){e.removedDefinitionOccurrences!==0&&t(`Sanitized ${e.removedDefinitionOccurrences} invalid definition occurrences across ${e.touchedDocuments} documents before SQLite conversion.`)}function W(e,t,n){let r=pa(e)||".scip",i=pe(e,r);return R(h(e),`${i}.${n+1}.${t}${r}`)}async function Ga(e,t){for(let n=0;n<2;n++){let r=Ua(e,t);if(r)return r;let i=Ja(e);if(i&&Wa(t.trigger,i)){if(t.onStatus(`Manual reindex preempting watcher refresh started at ${i.startedAt}.`),!await qa(i.pid))throw new Error(`Could not confirm the watcher's in-progress reindex (pid ${i.pid}) terminated for ${h(e)}; refusing to steal an active lock.`);D(e,{force:!0});continue}if(i&&!k(i.pid)){D(e,{force:!0});continue}throw new Error(`Another scip-query reindex is already running for ${h(e)}.`)}throw new Error(`Could not acquire scip-query reindex lock for ${h(e)}.`)}function Ua(e,t){let n;try{n=ca(e,"wx")}catch(i){if((typeof i=="object"&&i&&"code"in i?i.code:void 0)==="EEXIST")return null;throw i}let r={version:1,pid:process.pid,projectRoot:t.projectRoot,startedAt:new Date().toISOString(),trigger:t.trigger};return ua(n,JSON.stringify(r)+`
256
- `),()=>{try{sa(n)}finally{D(e,{force:!0})}}}function Ja(e){try{let t=JSON.parse(me(e,"utf-8"));return typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0?null:{version:1,pid:t.pid,projectRoot:typeof t.projectRoot=="string"?t.projectRoot:h(e),startedAt:typeof t.startedAt=="string"?t.startedAt:"unknown",trigger:t.trigger}}catch{return null}}function Wa(e,t){return e?.kind==="manual-cli"&&Ha(t?.trigger)}function Ha(e){return e?.kind==="watch-source"||e?.kind==="watch-git-head"||e?.kind==="watch-git-index"||e?.kind==="watch-git-state"}async function qa(e){return Nn(e,"SIGTERM"),await Ln(e,2e3)?!0:(Nn(e,"SIGKILL"),Ln(e,1e3))}function Nn(e,t){try{process.kill(-e,t)}catch{try{process.kill(e,t)}catch{}}}async function Ln(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!k(e))return!0;await za(50)}return!k(e)}function za(e){return new Promise(t=>setTimeout(t,e))}function Xa(e,t,n){return dt(e,t,n)}function Hn(e,t,n){return Object.fromEntries(t.map(r=>{let i=ve(r).markerFiles,a=r==="typescript"?{typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:ct(n.typescriptProjects)}:{typescriptProjectMode:"single",typescriptProjects:[]},s=r==="clojure"?Qa(n.clojureConfigPath):void 0;return[r,{version:2,languages:[r],pnpmWorkspaces:r==="typescript"&&Va(n),...a,clojureConfigPath:s,files:lt(e,{language:r,markerFiles:i})}]}))}function Qa(e){return e?.trim()||void 0}function Va(e){return e.typescriptProjectMode!=="workspace"&&e.pnpmWorkspaces===!0}function Qe(e,t){return R(h(e),"language-indexes",`${t}.scip`)}function qn(e){return R(h(e),"language-indexes","typescript-projects")}function he(e,t){return R(qn(e),`${Ce(t)}.scip`)}function H(e){try{return JSON.parse(me(e,"utf-8"))}catch{return null}}function zn(e,t){try{let n=JSON.parse(me(e,"utf-8"));return(n.version===2||n.version===3)&&n.status==="complete"&&j(n.fingerprint)===j(t)&&j([...n.indexedLanguages??[]].sort())===j(t.languages)}catch{return!1}}function Ve(e,t){O(e,t,{spacing:2,trailingNewline:!0})}function Xn(e,t){try{let n=JSON.parse(me(e,"utf-8"));if(n.version!==2&&n.version!==3)return;Ve(e,{...n,lastRefresh:t})}catch{}}function ye(e){return{trigger:e.trigger??{kind:"unknown"},result:e.result,startedAt:new Date(e.start).toISOString(),completedAt:new Date().toISOString(),durationMs:Date.now()-e.start,indexedLanguages:e.languages?[...e.languages]:void 0,skipped:e.skipped?[...e.skipped]:void 0,error:e.error}}function j(e){return JSON.stringify(e)}var Kn=process.env.SCIP_REINDEX_PROJECT_ROOT,Zn=process.env.SCIP_REINDEX_OUTPUT_SCIP,er=process.env.SCIP_REINDEX_OUTPUT_DB,Qn=process.env.SCIP_REINDEX_LANGUAGES,Ya=ot(process.env.SCIP_REINDEX_INDEXER_CONCURRENCY),Ka=process.env.SCIP_REINDEX_PNPM_WORKSPACES==="1",Vn=rs(process.env.SCIP_REINDEX_TYPESCRIPT_CONFIG),Za=process.env.SCIP_REINDEX_CLOJURE_CONFIG_PATH||void 0,es=ns(process.env.SCIP_REINDEX_TRIGGER_KIND),ts=process.env.SCIP_REINDEX_TRIGGER_DETAIL;(!Kn||!Zn||!er)&&(console.error("reindex-worker: missing required env vars"),process.exit(1));var Yn=Qn?Qn.split(",").filter(Boolean):void 0;An({projectRoot:Kn,outputScip:Zn,outputDb:er,languages:Yn?.length?Yn:void 0,pnpmWorkspaces:Ka,typescriptProjectMode:Vn.projectMode,typescriptProjects:Vn.projects,clojureConfigPath:Za,indexerConcurrency:Ya,trigger:{kind:es,detail:ts||void 0},onStatus:e=>process.stderr.write(`[reindex] ${e}
257
- `)}).then(()=>{process.exit(0)}).catch(e=>{console.error(`reindex-worker error: ${e}`),process.exit(1)});function ns(e){switch(e){case"manual-cli":case"setup":case"watch-source":case"watch-git-head":case"watch-git-index":case"watch-git-state":return e;default:return"unknown"}}function rs(e){if(!e)return{};try{let t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))return{};let n=t,r=n.projectMode==="single"||n.projectMode==="workspace"?n.projectMode:void 0,i=Array.isArray(n.projects)?n.projects.filter(a=>typeof a=="string"&&a.trim()!==""):void 0;return{projectMode:r,projects:i&&i.length>0?i:void 0}}catch{return{}}}
255
+ `))}function Mn(e,t,n){if(e.length>1){n(`Merging ${e.length} language indexes...`);let r=performance.now(),i=bt(e.map(a=>a.scipPath),t);return Hn(i,n),n(`Merged and sanitized SCIP indexes in ${(performance.now()-r).toFixed(0)}ms.`),!0}else e[0].scipPath!==t&&An(e[0].scipPath,t);return!1}function $a(e){let t;if(Ba(e)){let i=R(e.run.tempPaths.runDir,"typescript-affected.db");try{Wn(e.incrementalTypeScript.affectedScipPath,e.run.onStatus),e.run.onStatus(`Converting ${e.incrementalTypeScript.affectedFiles.length} affected TypeScript document(s) to SQLite...`);let a=performance.now();Nn(e.incrementalTypeScript.affectedScipPath,i,e.env,e.run.onStatus),e.run.onStatus(`Converted affected SCIP documents in ${(performance.now()-a).toFixed(0)}ms.`);let s=an({previousDbPath:e.run.paths.outputDb,miniDbPath:i,candidateDbPath:e.run.tempPaths.tempOutputDb,affectedFiles:e.incrementalTypeScript.affectedFiles});return e.run.onStatus(`Patched ${s.affectedDocumentCount} SQLite document(s) in ${(s.durationMs/1e3).toFixed(3)}s.`),{mode:"incremental",changedDocumentPaths:s.changedDocumentPaths,patchDurationMs:s.durationMs,converterDurationMs:performance.now()-a,scipCompanion:e.incrementalTypeScript.completeScipUpdated?"current":"deferred"}}catch(a){t=a instanceof Error?a.message:String(a),D(i,{force:!0}),D(e.run.tempPaths.tempOutputDb,{force:!0}),e.run.onStatus(`Incremental SQLite publication unavailable: ${t}. Falling back to complete conversion.`)}}let n=e.completeScipSanitized;e.completeScipAvailable||(n=e.materializeFullFallback());let r=performance.now();return Nn(e.run.tempPaths.tempOutputScip,e.run.tempPaths.tempOutputDb,e.env,e.run.onStatus,n),{mode:"full",converterDurationMs:performance.now()-r,...t?{fallbackReason:t}:{}}}function Ba(e){if(!e.incrementalTypeScript||e.skippedLanguages.length>0||!E(e.run.paths.outputDb)||!E(e.run.paths.outputScip))return!1;let t=new Set(e.reusedLanguages);return e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(n=>n==="typescript"||t.has(n))}function Ga(e,t){let n=Date.now(),r=[...t].sort(),i=new Set(r),a={addedFiles:[],modifiedFiles:r,deletedFiles:[],changedFiles:r,unchangedFiles:e.affectedFiles.filter(s=>!i.has(s)).sort()};return{version:1,status:"evaluated",refreshResult:"rebuilt",recordedAt:new Date().toISOString(),durationMs:Date.now()-n,manifest:e.manifest,plan:e.plan,comparison:a,evaluation:De(e.plan,a,e.projectFileCount)}}function Nn(e,t,n,r,i=!1){if(r("Converting to SQLite..."),!E(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{i||Wn(e,r);let a=Se();if(!a)throw new Error("scip CLI is not available");aa(a,["expt-convert","--output",t,e],{env:n,stdio:"pipe",maxBuffer:50*1024*1024})}catch(a){let s=a instanceof Error?a.message:String(a);throw new Error(`Failed to convert SCIP index to SQLite: ${s}`,{cause:a})}}function Wn(e,t){let n=yt(e);Hn(n,t)}function Hn(e,t){e.removedDefinitionOccurrences!==0&&t(`Sanitized ${e.removedDefinitionOccurrences} invalid definition occurrences across ${e.touchedDocuments} documents before SQLite conversion.`)}function W(e,t,n){let r=ga(e)||".scip",i=pe(e,r);return R(h(e),`${i}.${n+1}.${t}${r}`)}async function Ua(e,t){for(let n=0;n<2;n++){let r=Ja(e,t);if(r)return r;let i=Wa(e);if(i&&Ha(t.trigger,i)){if(t.onStatus(`Manual reindex preempting watcher refresh started at ${i.startedAt}.`),!await za(i.pid))throw new Error(`Could not confirm the watcher's in-progress reindex (pid ${i.pid}) terminated for ${h(e)}; refusing to steal an active lock.`);D(e,{force:!0});continue}if(i&&!k(i.pid)){D(e,{force:!0});continue}throw new Error(`Another scip-query reindex is already running for ${h(e)}.`)}throw new Error(`Could not acquire scip-query reindex lock for ${h(e)}.`)}function Ja(e,t){let n;try{n=la(e,"wx")}catch(i){if((typeof i=="object"&&i&&"code"in i?i.code:void 0)==="EEXIST")return null;throw i}let r={version:1,pid:process.pid,projectRoot:t.projectRoot,startedAt:new Date().toISOString(),trigger:t.trigger};return pa(n,JSON.stringify(r)+`
256
+ `),()=>{try{oa(n)}finally{D(e,{force:!0})}}}function Wa(e){try{let t=JSON.parse(me(e,"utf-8"));return typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0?null:{version:1,pid:t.pid,projectRoot:typeof t.projectRoot=="string"?t.projectRoot:h(e),startedAt:typeof t.startedAt=="string"?t.startedAt:"unknown",trigger:t.trigger}}catch{return null}}function Ha(e,t){return e?.kind==="manual-cli"&&qa(t?.trigger)}function qa(e){return e?.kind==="watch-source"||e?.kind==="watch-git-head"||e?.kind==="watch-git-index"||e?.kind==="watch-git-state"}async function za(e){return Ln(e,"SIGTERM"),await Cn(e,2e3)?!0:(Ln(e,"SIGKILL"),Cn(e,1e3))}function Ln(e,t){try{process.kill(-e,t)}catch{try{process.kill(e,t)}catch{}}}async function Cn(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!k(e))return!0;await Xa(50)}return!k(e)}function Xa(e){return new Promise(t=>setTimeout(t,e))}function Qa(e,t,n){return dt(e,t,n)}function qn(e,t,n){return Object.fromEntries(t.map(r=>{let i=ve(r).markerFiles,a=r==="typescript"?{typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:ct(n.typescriptProjects)}:{typescriptProjectMode:"single",typescriptProjects:[]},s=r==="clojure"?Va(n.clojureConfigPath):void 0;return[r,{version:2,languages:[r],pnpmWorkspaces:r==="typescript"&&Ya(n),...a,clojureConfigPath:s,files:lt(e,{language:r,markerFiles:i})}]}))}function Va(e){return e?.trim()||void 0}function Ya(e){return e.typescriptProjectMode!=="workspace"&&e.pnpmWorkspaces===!0}function Xe(e,t){return R(h(e),"language-indexes",`${t}.scip`)}function zn(e){return R(h(e),"language-indexes","typescript-projects")}function he(e,t){return R(zn(e),`${Ce(t)}.scip`)}function H(e){try{return JSON.parse(me(e,"utf-8"))}catch{return null}}function Xn(e,t){try{let n=JSON.parse(me(e,"utf-8"));return(n.version===2||n.version===3)&&n.status==="complete"&&j(n.fingerprint)===j(t)&&j([...n.indexedLanguages??[]].sort())===j(t.languages)}catch{return!1}}function Qe(e,t){O(e,t,{spacing:2,trailingNewline:!0})}function Qn(e,t){try{let n=JSON.parse(me(e,"utf-8"));if(n.version!==2&&n.version!==3)return;Qe(e,{...n,lastRefresh:t})}catch{}}function ye(e){return{trigger:e.trigger??{kind:"unknown"},result:e.result,startedAt:new Date(e.start).toISOString(),completedAt:new Date().toISOString(),durationMs:Date.now()-e.start,indexedLanguages:e.languages?[...e.languages]:void 0,skipped:e.skipped?[...e.skipped]:void 0,error:e.error}}function j(e){return JSON.stringify(e)}var Zn=process.env.SCIP_REINDEX_PROJECT_ROOT,er=process.env.SCIP_REINDEX_OUTPUT_SCIP,tr=process.env.SCIP_REINDEX_OUTPUT_DB,Vn=process.env.SCIP_REINDEX_LANGUAGES,Ka=ot(process.env.SCIP_REINDEX_INDEXER_CONCURRENCY),Za=process.env.SCIP_REINDEX_PNPM_WORKSPACES==="1",Yn=is(process.env.SCIP_REINDEX_TYPESCRIPT_CONFIG),es=process.env.SCIP_REINDEX_CLOJURE_CONFIG_PATH||void 0,ts=rs(process.env.SCIP_REINDEX_TRIGGER_KIND),ns=process.env.SCIP_REINDEX_TRIGGER_DETAIL;(!Zn||!er||!tr)&&(console.error("reindex-worker: missing required env vars"),process.exit(1));var Kn=Vn?Vn.split(",").filter(Boolean):void 0;$n({projectRoot:Zn,outputScip:er,outputDb:tr,languages:Kn?.length?Kn:void 0,pnpmWorkspaces:Za,typescriptProjectMode:Yn.projectMode,typescriptProjects:Yn.projects,clojureConfigPath:es,indexerConcurrency:Ka,trigger:{kind:ts,detail:ns||void 0},onStatus:e=>process.stderr.write(`[reindex] ${e}
257
+ `)}).then(()=>{process.exit(0)}).catch(e=>{console.error(`reindex-worker error: ${e}`),process.exit(1)});function rs(e){switch(e){case"manual-cli":case"setup":case"watch-source":case"watch-git-head":case"watch-git-index":case"watch-git-state":return e;default:return"unknown"}}function is(e){if(!e)return{};try{let t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))return{};let n=t,r=n.projectMode==="single"||n.projectMode==="workspace"?n.projectMode:void 0,i=Array.isArray(n.projects)?n.projects.filter(a=>typeof a=="string"&&a.trim()!==""):void 0;return{projectMode:r,projects:i&&i.length>0?i:void 0}}catch{return{}}}
258
258
  //# sourceMappingURL=reindex-worker.js.map