scip-query 0.19.4 → 0.19.5
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.
- package/CHANGELOG.md +27 -0
- package/README.md +1 -1
- package/dist/{chunk-SVLTAG5O.js → chunk-7UY7SD7D.js} +119 -119
- package/dist/{chunk-VMNZB6WI.js → chunk-TW4OG5FC.js} +2 -2
- package/dist/chunk-XAGAZSFE.js +6 -0
- package/dist/cli.js +3 -3
- package/dist/command-descriptors-N2TL4XM2.js +613 -0
- package/dist/direct-navigation-DUCZCTOE.js +3 -0
- package/docs/AI_FAILURE_MODES.md +1 -1
- package/docs/COMMAND_REFERENCE.md +5 -5
- package/docs/DETECTOR_GUIDE.md +1 -1
- package/package.json +1 -1
- package/skills/_shared/SKILL.md +6 -16
- package/skills/scip-api-impact/SKILL.md +22 -21
- package/skills/scip-claim-audit/SKILL.md +18 -17
- package/skills/scip-cleanup-audit/SKILL.md +24 -20
- package/skills/scip-cleanup-improve/SKILL.md +19 -18
- package/skills/scip-concrete-plan/HIGH_ASSURANCE.md +317 -0
- package/skills/scip-concrete-plan/SKILL.md +70 -227
- package/skills/scip-conductor/SKILL.md +14 -14
- package/skills/scip-debug/SKILL.md +21 -21
- package/skills/scip-diagram/SKILL.md +27 -27
- package/skills/scip-directory-architecture/SKILL.md +44 -32
- package/skills/scip-doc-reconcile/SKILL.md +17 -17
- package/skills/scip-explore/SKILL.md +23 -23
- package/skills/scip-hyper-optimization/SKILL.md +23 -23
- package/skills/scip-language-playbook/SKILL.md +34 -34
- package/skills/scip-maintainability/SKILL.md +21 -21
- package/skills/scip-probe-reachability/SKILL.md +10 -9
- package/skills/scip-query/SKILL.md +39 -39
- package/skills/scip-react-maintainability/SKILL.md +21 -21
- package/skills/scip-root-cause/SKILL.md +21 -20
- package/skills/scip-setup/SKILL.md +25 -24
- package/skills/scip-tla-model-system/SKILL.md +7 -7
- package/skills/scip-triage-issue/SKILL.md +27 -20
- package/skills/scip-twin-drift/SKILL.md +18 -16
- package/skills/scip-verify/SKILL.md +25 -9
- package/skills/scip-vue-maintainability/SKILL.md +21 -21
- package/dist/chunk-ZAIILQNP.js +0 -5
- package/dist/command-descriptors-MFU4BCJ7.js +0 -612
- package/dist/direct-navigation-MRMQFIRB.js +0 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createHash as
|
|
2
|
+
import{createHash as WR}from"crypto";import{existsSync as GR,mkdirSync as zR,readFileSync as VR}from"fs";import{dirname as Ec,join as Km}from"path";import Dc from"better-sqlite3";var Vm=[];function mn(e){e.groups.length>0&&Vm.push(e)}function wc(e,t){let n=new Set(t.groups);for(let r of Vm)r.groups.some(i=>n.has(i))&&(t.file!==void 0&&r.clearFile?r.clearFile(e,t.file):r.clearAll(e))}function qm(){let e=new WeakMap;return{cache:e,ensure(t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}}}function j(e,t){let{cache:n,ensure:r}=qm(),i={get(o,s,a){let c=r(o);if(c.has(s))return c.get(s);let l=a();return c.set(s,l),l},invalidate(o,s){n.get(o)?.delete(s)},invalidateAll(o){n.delete(o)},size(o){return n.get(o)?.size??0}};return mn({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}function X(e,t){let n=new WeakMap,r={get(i,o){let s=n.get(i);if(s)return s.value;let a=o();return n.set(i,{value:a}),a},invalidate(i){n.delete(i)},has(i){return n.has(i)}};return mn({name:e,groups:t.clearGroups,clearAll:i=>r.invalidate(i)}),r}var UR={clearGroups:["whole-project","source-file"]};function fn(e){return On(e,UR)}function On(e,t){let{cache:n,ensure:r}=qm(),i={get(o,s,a,c){let l=r(o),u=l.get(s);if(u&&u.source===a)return u.value;let d=c();return l.set(s,{source:a,value:d}),d},invalidate(o,s){n.get(o)?.delete(s)},invalidateAll(o){n.delete(o)}};return mn({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}var qR="evidence.db";var KR=["source-facts","definition-exclusions","doc-path-tokens","react-component-behavior-profiles"],kc=new Set(KR),JR=25e4,YR=512*1024*1024,XR=5e3,$o=new WeakMap,QR=j("evidence-content-hash",{clearGroups:["whole-project","source-file"]}),ZR=j("evidence-project-fingerprint",{clearGroups:["whole-project"]}),nt="evidence-v1",pr="version NOT LIKE 'evidence-%'";function he(e){return WR("sha256").update(e).digest("hex")}function ce(e,t,n){return QR.get(e,t,()=>he(n))}function Te(e){return ZR.get(e,"current",()=>{try{let t=JSON.parse(VR(Km(Ec(e.config.dbPath),"meta.json"),"utf-8"));if(t.version!==2&&t.version!==3||t.status!=="complete"&&t.status!=="partial"||t.fingerprint===void 0)return null;let n=Array.isArray(t.indexedLanguages)?[...t.indexedLanguages].sort():[];return he(JSON.stringify({fingerprint:t.fingerprint,indexedLanguages:n,status:t.status}))}catch(t){return gr("project fingerprint unavailable",t),null}})}function gr(e,t){process.env.SCIP_QUERY_DEBUG&&console.error(`evidence-cache: ${e}: ${t instanceof Error?t.message:String(t)}`)}function ht(e){if($o.has(e))return $o.get(e)??null;let t=null;try{let n=new Dc(Km(Ec(e.config.dbPath),qR));n.pragma("journal_mode = WAL"),n.pragma("busy_timeout = 5000"),n.pragma("synchronous = NORMAL"),n.exec(`
|
|
3
3
|
CREATE TABLE IF NOT EXISTS file_evidence (
|
|
4
4
|
kind TEXT NOT NULL,
|
|
5
5
|
relative_path TEXT NOT NULL,
|
|
@@ -42,7 +42,7 @@ import{createHash as Uv}from"crypto";import{existsSync as Wv,mkdirSync as Gv,rea
|
|
|
42
42
|
outcome TEXT NOT NULL,
|
|
43
43
|
PRIMARY KEY (check_name, finding_id)
|
|
44
44
|
);
|
|
45
|
-
`),t={evidence:n,shared:
|
|
45
|
+
`),t={evidence:n,shared:eI(e.config.sharedEvidenceDbPath),readFileEvidence:n.prepare("SELECT payload FROM file_evidence WHERE kind = ? AND relative_path = ? AND content_hash = ? AND version = ?"),readLegacyFileEvidence:n.prepare(`SELECT payload FROM file_evidence
|
|
46
46
|
WHERE kind = ? AND relative_path = ? AND content_hash = ? AND ${pr}
|
|
47
47
|
ORDER BY version DESC
|
|
48
48
|
LIMIT 1`),writeFileEvidence:n.prepare("INSERT OR REPLACE INTO file_evidence (kind, relative_path, content_hash, version, payload) VALUES (?, ?, ?, ?, ?)"),readProjectEvidence:n.prepare("SELECT payload FROM project_evidence WHERE kind = ? AND cache_key = ? AND project_fingerprint = ? AND version = ?"),readLegacyProjectEvidence:n.prepare(`SELECT payload FROM project_evidence
|
|
@@ -65,7 +65,7 @@ import{createHash as Uv}from"crypto";import{existsSync as Wv,mkdirSync as Gv,rea
|
|
|
65
65
|
WHERE relative_path = ? AND project_fingerprint = ? AND ${pr}
|
|
66
66
|
ORDER BY symbol, version DESC`),writeReferences:n.prepare(`INSERT OR REPLACE INTO semantic_references
|
|
67
67
|
(relative_path, symbol, project_fingerprint, version, payload) VALUES (?, ?, ?, ?, ?)`),dropStaleReferences:n.prepare("DELETE FROM semantic_references WHERE relative_path = ? AND project_fingerprint != ?"),readFindingOutcomeLedger:n.prepare("SELECT check_name, finding_id, first_seen, last_seen, times_shown, outcome FROM finding_outcome_ledger"),deleteFindingOutcomeLedgerForCheck:n.prepare("DELETE FROM finding_outcome_ledger WHERE check_name = ?"),writeFindingOutcomeLedgerRow:n.prepare(`INSERT INTO finding_outcome_ledger
|
|
68
|
-
(check_name, finding_id, first_seen, last_seen, times_shown, outcome) VALUES (?, ?, ?, ?, ?, ?)`)}}catch(n){gr("disabled (open failed)",n)}return
|
|
68
|
+
(check_name, finding_id, first_seen, last_seen, times_shown, outcome) VALUES (?, ?, ?, ?, ?, ?)`)}}catch(n){gr("disabled (open failed)",n)}return $o.set(e,t),t}function yt(e,t,n){gr(`disabled (${t})`,n),$o.set(e,null)}function eI(e){if(!e)return null;try{zR(Ec(e),{recursive:!0});let t=new Dc(e);return t.pragma("journal_mode = WAL"),t.pragma("busy_timeout = 250"),t.pragma("synchronous = NORMAL"),t.exec(`
|
|
69
69
|
CREATE TABLE IF NOT EXISTS file_evidence (
|
|
70
70
|
kind TEXT NOT NULL,
|
|
71
71
|
relative_path TEXT NOT NULL,
|
|
@@ -78,39 +78,39 @@ import{createHash as Uv}from"crypto";import{existsSync as Wv,mkdirSync as Gv,rea
|
|
|
78
78
|
`),{evidence:t,readFileEvidence:t.prepare("SELECT payload FROM file_evidence WHERE kind = ? AND relative_path = ? AND content_hash = ? AND version = ?"),writeFileEvidence:t.prepare(`INSERT INTO file_evidence (kind, relative_path, content_hash, version, payload, last_accessed_at)
|
|
79
79
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
80
80
|
ON CONFLICT(kind, relative_path, content_hash, version)
|
|
81
|
-
DO UPDATE SET payload = excluded.payload, last_accessed_at = excluded.last_accessed_at`)}}catch(t){return gr("shared cache disabled (open failed)",t),null}}function
|
|
81
|
+
DO UPDATE SET payload = excluded.payload, last_accessed_at = excluded.last_accessed_at`)}}catch(t){return gr("shared cache disabled (open failed)",t),null}}function Pc(e,t,n){gr(`shared cache disabled (${t})`,n);try{e.shared?.evidence.close()}catch{}e.shared=null}function n5(e,t={}){if(!GR(e))return null;let n;try{n=new Dc(e),n.pragma("busy_timeout = 50"),n.pragma("wal_checkpoint(TRUNCATE)");let r=n.prepare("SELECT COUNT(*) AS count FROM file_evidence").get().count,i=t.maxRows??JR,o=t.budgetBytes??YR,s=Number(n.pragma("page_size",{simple:!0})),a=Number(n.pragma("page_count",{simple:!0})),c=Number(n.pragma("freelist_count",{simple:!0})),l=Math.max(0,a-c)*s,u=r>0&&l>o?Math.min(r,Math.ceil((l-o)/Math.max(1,l/r))):0,d=Math.max(r-i,u);return d>0&&(n.prepare(`DELETE FROM file_evidence WHERE rowid IN (
|
|
82
82
|
SELECT rowid FROM file_evidence ORDER BY last_accessed_at ASC, rowid ASC LIMIT ?
|
|
83
|
-
)`).run(d),n.pragma("wal_checkpoint(TRUNCATE)")),{deletedRows:d,remainingRows:r-d}}catch(r){return gr("shared cache maintenance skipped",r),null}finally{try{n?.close()}catch{}}}function Jm(e,t,n,r){let i=ht(e);if(!i)return null;try{let o=i.readFileEvidence.get(t,n,r,nt)??i.readLegacyFileEvidence.get(t,n,r);if(o?.payload!==void 0)return o.payload;if(!
|
|
84
|
-
`;if(t)try{let o=
|
|
85
|
-
`));return}U()&&process.stderr.write(i)}function
|
|
86
|
-
`).map(c=>c.trim());if(t.length!==5)return;let[n,r,i,o,s]=t;if(!n||!r||!i||!o||!s||!Sf.test(o)||!Sf.test(s))return;let a=It(n);return{root:a,gitDir:It(
|
|
87
|
-
`):[]})}var
|
|
88
|
-
`).length}function $c(e,t,n){let r={relativePath:t,template:null,scripts:[],styles:[],customBlocks:[],errors:[]};if(!n)return r;let i;try{i=
|
|
89
|
-
`).length-1):0;return{kind:n,ownerPath:t,sourcePath:c,external:!0,src:s,attrs:i,lang:o,body:l,startLine:0,endLine:u,errors:l?[]:[`Vue ${n} block source not found: ${c}`]}}let a=Math.max(0,r.loc.start.line-1);return{kind:n,ownerPath:t,sourcePath:t,external:!1,attrs:i,lang:o,body:r.content,startLine:a,endLine:Math.max(a,r.loc.end.line-1),errors:[]}}function
|
|
83
|
+
)`).run(d),n.pragma("wal_checkpoint(TRUNCATE)")),{deletedRows:d,remainingRows:r-d}}catch(r){return gr("shared cache maintenance skipped",r),null}finally{try{n?.close()}catch{}}}function Jm(e,t,n,r){let i=ht(e);if(!i)return null;try{let o=i.readFileEvidence.get(t,n,r,nt)??i.readLegacyFileEvidence.get(t,n,r);if(o?.payload!==void 0)return o.payload;if(!kc.has(t)||!i.shared)return null;try{return i.shared.readFileEvidence.get(t,n,r,nt)?.payload??null}catch(s){return Pc(i,"file_evidence read",s),null}}catch(o){return yt(e,"file_evidence read",o),null}}function Ym(e,t,n,r,i){let o=ht(e);if(o)try{if(o.writeFileEvidence.run(t,n,r,nt,i),kc.has(t)&&o.shared)try{o.shared.writeFileEvidence.run(t,n,r,nt,i,Date.now())}catch(s){Pc(o,"file_evidence write",s)}}catch(s){yt(e,"file_evidence write",s)}}function Xm(e,t){if(t.length===0)return;let n=ht(e);if(n)try{n.evidence.transaction(()=>{for(let i of t)n.writeFileEvidence.run(i.kind,i.relativePath,i.contentHash,nt,i.payload)})();let r=t.filter(i=>kc.has(i.kind));if(r.length>0&&n.shared)try{n.shared.evidence.transaction(()=>{for(let i of r)n.shared.writeFileEvidence.run(i.kind,i.relativePath,i.contentHash,nt,i.payload,Date.now())})()}catch(i){Pc(n,"file_evidence batch write",i)}}catch(r){yt(e,"file_evidence batch write",r)}}function Qm(e,t,n,r){let i=ht(e);if(!i)return null;try{return(i.readProjectEvidence.get(t,n,r,nt)??i.readLegacyProjectEvidence.get(t,n,r))?.payload??null}catch(o){return yt(e,"project_evidence read",o),null}}function Zm(e,t,n,r,i){let o=ht(e);if(o)try{o.writeProjectEvidence.run(t,n,r,nt,i)}catch(s){yt(e,"project_evidence write",s)}}function ef(e,t,n,r){let i=ht(e);if(!i)return new Map;try{let o=i.readCalleesForFile.all(t,n,r,nt),s=i.readLegacyCalleesForFile.all(t,n,r);return nf([...s,...o])}catch(o){return yt(e,"semantic_callees bulk read",o),new Map}}function tf(e,t,n){let r=ht(e);if(!r)return new Map;try{let i=r.readReferencesForFile.all(t,n,nt),o=r.readLegacyReferencesForFile.all(t,n);return nf([...o,...i])}catch(i){return yt(e,"semantic_references bulk read",i),new Map}}function nf(e){let t=new Map;for(let n of e)t.set(n.symbol,n.payload);return t}function Tc(e,t){if(t.length===0)return;let n=ht(e);if(n)try{n.evidence.transaction(()=>{let r=new Set;for(let i of t){let o=`${i.relativePath}\0${i.contentHash}`;r.has(o)||(r.add(o),n.dropStaleCallees.run(i.relativePath,i.contentHash)),n.writeCallees.run(i.relativePath,i.symbol,i.contentHash,i.depsDigest,nt,i.payload)}})()}catch(r){yt(e,"semantic_callees write",r)}}function rf(e,t){if(t.length===0)return;let n=ht(e);if(n)try{n.evidence.transaction(()=>{let r=new Set;for(let i of t){let o=`${i.relativePath}\0${i.projectFingerprint}`;r.has(o)||(r.add(o),n.dropStaleReferences.run(i.relativePath,i.projectFingerprint)),n.writeReferences.run(i.relativePath,i.symbol,i.projectFingerprint,nt,i.payload)}})()}catch(r){yt(e,"semantic_references write",r)}}function of(e){let t=ht(e);if(!t)return[];try{return t.readFindingOutcomeLedger.all().map(r=>({check:r.check_name,findingId:r.finding_id,firstSeen:r.first_seen,lastSeen:r.last_seen,timesShown:r.times_shown,outcome:r.outcome}))}catch(n){return yt(e,"finding_outcome_ledger read",n),[]}}function sf(e,t){let n=ht(e);if(n)try{let r=new Map;for(let i of t){let o=r.get(i.check)??[];o.push(i),r.set(i.check,o)}n.evidence.transaction(()=>{for(let[i,o]of r){n.deleteFindingOutcomeLedgerForCheck.run(i);let s=[...o].sort((a,c)=>c.lastSeen-a.lastSeen).slice(0,XR);for(let a of s)n.writeFindingOutcomeLedgerRow.run(a.check,a.findingId,a.firstSeen,a.lastSeen,a.timesShown,a.outcome)}})()}catch(r){yt(e,"finding_outcome_ledger write",r)}}import{appendFileSync as tI,mkdirSync as nI}from"fs";import{createHash as rI,randomUUID as iI}from"crypto";import{dirname as oI}from"path";import{performance as hr}from"perf_hooks";var uf="SCIP_QUERY_PROFILE",df="SCIP_QUERY_PROFILE_OUT",mf="SCIP_QUERY_PROFILE_COMMAND",ff="SCIP_QUERY_PROFILE_CACHE_STATE",Fc="SCIP_QUERY_PROFILE_RUN_ID",_c="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY",Lc="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY_KIND",pf=[uf,df,mf,ff,Fc,_c,Lc],c5=new Set(pf),af=new Set,cf=new Map,lf=!1;function U(){let e=process.env[uf];return e==="1"||e==="true"}function sI(){return process.env[df]}function gf(){return process.env[mf]}function aI(){return process.env[ff]}function hf(){let e=process.env[Fc];if(e)return e;if(!U())return;let t=iI();return process.env[Fc]=t,t}function yf(){return process.env[_c]}function cI(e){let t=yf();if(t)return t;if(!U())return;let n=hf();if(!n)return;let r=e.projectFingerprint?"published-project":"run-only",i=ci(["profile-workload-v1",e.toolVersion,e.command,e.projectFingerprint??n]);return process.env[_c]=i,process.env[Lc]=r,i}function ci(e){return rI("sha256").update(JSON.stringify(e)).digest("hex").slice(0,24)}function bf(){return Object.fromEntries(pf.flatMap(e=>{let t=process.env[e];return t===void 0?[]:[[e,t]]}))}function E(e,t,n){if(!U())return t();let r=hr.now();try{let i=t();return pn({type:"span",name:e,durationMs:Math.round(hr.now()-r),ok:!0,...Ho(n)??{}}),i}catch(i){throw pn({type:"span",name:e,durationMs:Math.round(hr.now()-r),ok:!1,error:i instanceof Error?i.message:String(i),...Ho(n)??{}}),i}}async function l5(e,t,n){if(!U())return t();let r=hr.now();try{let i=await t();return pn({type:"span",name:e,durationMs:Math.round(hr.now()-r),ok:!0,...Ho(n)??{}}),i}catch(i){throw pn({type:"span",name:e,durationMs:Math.round(hr.now()-r),ok:!1,error:i instanceof Error?i.message:String(i),...Ho(n)??{}}),i}}function pn(e,t=sI()){let n=lI(e),r={timestamp:new Date().toISOString(),pid:process.pid,runId:hf(),command:gf(),cacheState:aI(),...n,...e},i=`${JSON.stringify(r)}
|
|
84
|
+
`;if(t)try{let o=oI(t);af.has(o)||(nI(o,{recursive:!0}),af.add(o)),tI(t,i);return}catch(o){lf||(lf=!0,process.stderr.write(`[profile] failed to write ${t}: ${o instanceof Error?o.message:String(o)}
|
|
85
|
+
`));return}U()&&process.stderr.write(i)}function lI(e){let t=yf()??cI({command:gf()??"unknown",toolVersion:"unknown",projectFingerprint:null});if(!t)return{};let n=process.env[Lc],r=typeof e.name=="string"?e.name:void 0;if(!r)return{workloadIdentity:t,workloadIdentityKind:n};let i=r.split(/[.:]/,1)[0]??r,o=`${t}\0${r}`,s=cf.get(o);return s||(s=ci(["profile-subsystem-v1",t,r]),cf.set(o,s)),{workloadIdentity:t,workloadIdentityKind:n,subsystem:i,subsystemWorkIdentity:s}}function Ho(e){return typeof e=="function"?e():e}import{spawnSync as uI}from"child_process";import{createHash as dI}from"crypto";import{existsSync as mI,lstatSync as fI,realpathSync as pI}from"fs";import{dirname as gI,isAbsolute as hI,join as yI,resolve as Wo}from"path";var li={run(e,t){let n=Cf(e,t);return n.kind==="success"?n.output:void 0},runResult:Cf},bI=["rev-parse","--show-toplevel","--absolute-git-dir","--git-common-dir","HEAD","HEAD^{tree}"],Sf=/^[0-9a-f]{40,64}$/;function g5(e,t=li){let n=t.run(e,["rev-parse","--show-toplevel"])?.trim();return n?It(n):void 0}function yr(e,t=li){let n=t.runResult(e,bI);if(n.kind==="success"){let r=SI(n.output);if(r)return CI(r,t)}return xI(e,t)}function SI(e){let t=e.split(`
|
|
86
|
+
`).map(c=>c.trim());if(t.length!==5)return;let[n,r,i,o,s]=t;if(!n||!r||!i||!o||!s||!Sf.test(o)||!Sf.test(s))return;let a=It(n);return{root:a,gitDir:It(Uo(a,r)),commonDir:It(Uo(a,i)),headCommit:o,treeOid:s}}function CI(e,t){let n=t.run(e.root,["status","--porcelain=v1","-z","--untracked-files=all"]);return n===void 0?void 0:{...xf(e.root,e.gitDir),commonDir:e.commonDir,repositoryId:Ac("repository",e.commonDir),headCommit:e.headCommit,treeOid:e.treeOid,clean:n.length===0}}function xI(e,t){let n=vI(e,t);if(n.kind!=="worktree")return;let r=n.identity,i=r.projectRoot,o=t.run(i,["rev-parse","--git-common-dir"])?.trim();if(!o)return;let s=It(Uo(i,o)),a=Nc(t.run(i,["rev-parse","--verify","HEAD"])),c=Nc(t.run(i,["rev-parse","--verify","HEAD^{tree}"])),l=t.run(i,["status","--porcelain=v1","-z","--untracked-files=all"]);if(l!==void 0)return{...r,commonDir:s,repositoryId:Ac("repository",s),headCommit:a,treeOid:c,clean:l.length===0}}function vI(e,t=li){let n=t.runResult(e,["rev-parse","--show-toplevel"]);if(n.kind==="not-repository")return{kind:"non-git"};if(n.kind==="error")return n;let r=n.output.trim();if(!r)return{kind:"error",message:"Git returned an empty worktree root."};let i=It(r),o=t.run(i,["rev-parse","--absolute-git-dir"])?.trim();if(!o)return{kind:"error",message:"Git did not return an absolute worktree directory."};let s=It(Uo(i,o));return{kind:"worktree",identity:xf(i,s)}}function xf(e,t){return{projectRoot:e,gitDir:t,worktreeId:Ac("worktree",`${e}\0${t}`)}}function vf(e,t=li){let n=t.run(e,["worktree","list","--porcelain","-z"]);return n===void 0?[]:RI(n)}function RI(e){let t=[],n;for(let r of e.split("\0")){if(r===""){n&&t.push(n),n=void 0;continue}let i=r.indexOf(" "),o=i<0?r:r.slice(0,i),s=i<0?"":r.slice(i+1);if(o==="worktree"){n&&t.push(n),n={path:It(s),detached:!1,bare:!1,prunable:!1,locked:!1};continue}n&&(o==="HEAD"?n.head=s:o==="branch"?n.branch=s:o==="detached"?n.detached=!0:o==="bare"?n.bare=!0:o==="prunable"?n.prunable=!0:o==="locked"&&(n.locked=!0))}return n&&t.push(n),t}function h5(e,t,n=li){return Nc(n.run(e,t))}function Uo(e,t){return hI(t)?t:Wo(e,t)}function It(e){try{return pI(e)}catch{return Wo(e)}}function Ac(e,t){return dI("sha256").update(`${e}\0${t}`).digest("hex").slice(0,24)}function Nc(e){return e?.trim()||void 0}function Cf(e,t){let n=uI("git",["-C",e,...t],{encoding:"utf-8",env:{...process.env,LC_ALL:"C"},maxBuffer:52428800,stdio:["ignore","pipe","pipe"]});if(n.status===0)return{kind:"success",output:n.stdout.trimEnd()};let i=(typeof n.stderr=="string"?n.stderr.trim():"")||n.error?.message||`git exited with status ${n.status??"unknown"}`,o=n.error?.code;return(/not a git repository/i.test(i)||o==="ENOENT"&&mI(Wo(e)))&&!II(e)?{kind:"not-repository"}:{kind:"error",message:i}}function II(e){if(process.env.GIT_DIR||process.env.GIT_COMMON_DIR)return!0;let t=Wo(e);for(;;){try{return fI(yI(t,".git")),!0}catch(r){let i=r.code;if(i!=="ENOENT"&&i!=="ENOTDIR")return!0}let n=gI(t);if(n===t)return!1;t=n}}var wI={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function ye(e){if(e.startsWith("local "))return{kind:"local",id:e.slice(6),raw:e};let t=e.split(" ");if(t.length<4)return{scheme:t[0]??"",manager:t[1]??"",packageName:t[2]??"",version:"",descriptors:[],raw:e};let n=t[0],r=t[1],i=e.slice(n.length+1+r.length+1),o;if(i.startsWith("`")){let l=i.indexOf("`",1);l===-1?(o=i.slice(1),i=""):(o=i.slice(1,l),i=i.slice(l+2))}else{let l=i.indexOf(" ");l===-1?(o=i,i=""):(o=i.slice(0,l),i=i.slice(l+1))}let s,a=i.indexOf(" ");a===-1?(s=i,i=""):(s=i.slice(0,a),i=i.slice(a+1));let c=EI(i);return{scheme:n,manager:r,packageName:o,version:s,descriptors:c,raw:e}}function wt(e){let t=ye(e);if("kind"in t)return null;for(let n=t.descriptors.length-2;n>=0;n--){let r=t.descriptors[n];if(r?.suffix==="type")return r.name}return null}function EI(e){let t=[],n=0;for(;n<e.length;){if(e[n]==="["){let o=e.indexOf("]",n+1);if(o===-1){t.push({name:e.slice(n+1),suffix:"type-param"});break}t.push({name:e.slice(n+1,o),suffix:"type-param"}),n=o+1;continue}if(e[n]==="("&&(t.length===0||n===0||Rf(e[n-1]))){let o=e.indexOf(")",n+1);if(o!==-1&&e[o+1]!=="."){t.push({name:e.slice(n+1,o),suffix:"parameter"}),n=o+1;continue}}let r;if(e[n]==="`"){let o=e.indexOf("`",n+1);if(o===-1){r=e.slice(n+1),t.push({name:r,suffix:"term"});break}r=e.slice(n+1,o),n=o+1}else{let o=n;for(;n<e.length&&!Rf(e[n]);)n++;r=e.slice(o,n)}if(n>=e.length){r&&t.push({name:r,suffix:"term"});break}let i=e[n];if(i==="("){let o=e.indexOf(")",n+1);o!==-1&&e[o+1]==="."?(t.push({name:r,suffix:"method"}),n=o+2):o!==-1?(t.push({name:r,suffix:"method"}),n=o+1):(t.push({name:r,suffix:"term"}),n++)}else{let o=wI[i];o&&t.push({name:r,suffix:o}),n+=1}}return t}function Rf(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function I(e){let t=ye(e);if("kind"in t&&t.kind==="local")return`local:${t.id}`;let n=t;if(n.descriptors.length===0)return n.raw;let r=[];for(let i of n.descriptors){let o=DI(i);o&&r.push(o)}return r.join(":")}function DI(e){let t=e.suffix==="namespace"?kI(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function kI(e){return e.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/,"").replace(/\.(py|pyi)$/,"").replace(/\.(rs)$/,"").replace(/\.(java|scala|kt|kts)$/,"").replace(/\.(rb)$/,"").replace(/\.(go)$/,"").replace(/\.(cs|vb)$/,"").replace(/\.(dart)$/,"").replace(/\.(php)$/,"").replace(/\.(c|cc|cpp|cxx|h|hpp)$/,"")}function T(e){let t=ye(e);if("kind"in t&&t.kind==="local")return t.id;let n=t;return n.descriptors.length===0?"":n.descriptors[n.descriptors.length-1].name}function ue(e){let t=ye(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function le(e){return e.endsWith("().")||ue(e)==="method"}function te(e){let t=ue(e);return t==="method"?!0:t!=="term"?!1:e.endsWith("().")?!0:e.startsWith("rust-analyzer ")&&e.includes("#")?!1:e.startsWith("scip-typescript ")?!/#[A-Za-z0-9_$]+\.$/.test(e):!0}function gn(e){return ue(e)==="namespace"}var PI=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function Ie(e){return PI.test(e)}var TI=new Set(["test","tests","_tests"]);function br(e){let t=ye(e);if("kind"in t)return!1;for(let n=0;n<t.descriptors.length-1;n+=1){let r=t.descriptors[n];if(r?.suffix==="namespace"&&r.name&&TI.has(r.name))return!0}return!1}function If(e,t){let n=ye(e),r=ye(t);if("kind"in n||"kind"in r)return!1;let i=n.descriptors,o=r.descriptors;if(o.length!==i.length+1)return!1;for(let s=0;s<i.length;s++){let a=i[s],c=o[s];if(a.name!==c.name||a.suffix!==c.suffix)return!1}return!0}function wf(e,t){let n=ye(e),r=ye(t);if("kind"in n||"kind"in r)return!1;let i=n.descriptors,o=r.descriptors;if(o.length<=i.length)return!1;for(let s=0;s<i.length;s++){let a=i[s],c=o[s];if(a.name!==c.name||a.suffix!==c.suffix)return!1}return!0}import{extname as Ef}from"path";var FI={".rs":"rust",".ts":"typescript",".mts":"typescript",".cts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".pyi":"python",".java":"java",".kt":"kotlin",".kts":"kotlin",".scala":"scala",".sc":"scala",".rb":"ruby",".c":"c",".h":"c",".cc":"cpp",".cpp":"cpp",".cxx":"cpp",".hpp":"cpp",".hh":"cpp",".hxx":"cpp",".cs":"csharp",".php":"php",".vb":"vb",".clj":"clojure",".cljs":"clojure",".cljc":"clojure"};function M(e){return FI[Ef(e).toLowerCase()]??null}function Ut(e){return Ef(e).toLowerCase()===".vue"}import{createRequire as _I}from"module";var Ae=_I(import.meta.url),ui=null,Mc=!1;function Df(){if(Mc)return null;if(ui)return ui;try{return ui=Ae("tree-sitter"),ui}catch{return Mc=!0,null}}function v5(e){if(e==="clojure")return"reader";let t=Df();if(!t)return"unavailable";let n=kf(e);if(!n)return"unavailable";try{return new t().setLanguage(n),"ast"}catch{return Sr.add(e),"unavailable"}}var Oc=new Map,Sr=new Set;function kf(e){if(Sr.has(e))return null;let t=Oc.get(e);if(t)return t;let n;try{switch(e){case"rust":n=Ae("tree-sitter-rust");break;case"typescript":n=Ae("tree-sitter-typescript").typescript;break;case"tsx":n=Ae("tree-sitter-typescript").tsx;break;case"javascript":n=Ae("tree-sitter-javascript");break;case"python":n=Ae("tree-sitter-python");break;case"java":n=Ae("tree-sitter-java");break;case"kotlin":n=Ae("tree-sitter-kotlin");break;case"scala":n=Ae("tree-sitter-scala");break;case"ruby":n=Ae("tree-sitter-ruby");break;case"c":n=Ae("tree-sitter-c");break;case"cpp":n=Ae("tree-sitter-cpp");break;case"csharp":n=Ae("tree-sitter-c-sharp");break;case"php":n=Ae("tree-sitter-php").php;break;case"vb":{let r=Ae("tree-sitter-vb-dotnet");n=r.language??r;break}case"clojure":return Sr.add(e),null}}catch{return Sr.add(e),null}return Oc.set(e,n),n}var jc=new Map;function R5(){ui=null,Mc=!1,Oc.clear(),Sr.clear(),jc.clear(),AI.clear()}function LI(e){let t=jc.get(e);if(t)return t;let n=kf(e);if(!n)return null;let r=Df();if(!r)return null;let i=new r;try{i.setLanguage(n)}catch{return Sr.add(e),null}return jc.set(e,i),i}function NI(e,t){return e.parse(r=>r>=t.length?null:t.slice(r,Math.min(t.length,r+16384)))}function di(e,t){let n=LI(e);if(!n)return null;try{return NI(n,t)}catch{return null}}var AI=new Map;import{readFileSync as MI}from"fs";import{join as OI}from"path";var jI=j("source-text",{clearGroups:["whole-project","source-file"]}),BI=j("source-lines",{clearGroups:["whole-project","source-file"]});function P(e,t){let n=t.replace(/\\/g,"/");return jI.get(e,n,()=>{let r=OI(e.config.projectRoot,n);try{return MI(r,"utf-8")}catch(i){if($I(i))return"";throw i}})}function $I(e){return typeof e=="object"&&e!==null&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function Ce(e,t){let n=t.replace(/\\/g,"/");return BI.get(e,n,()=>{let r=P(e,n);return r?r.split(`
|
|
87
|
+
`):[]})}var HI=/^\s*(?:\/\/|#|\/\*+|\*)\s*scip-query[\s:-]*ignore(?:[\s:-]+(dead(?:-code)?|stale|wrapper|passthrough|drift|extract|similar|twin))?\b/i;function mi(e){let t=HI.exec(e);return t?t[1]??"":null}function Go(e,t,n){return Pf(e,t,n).length>0}function zo(e,t,n,r){let i=r.toLowerCase();return Pf(e,t,n).some(o=>o.toLowerCase()===i)}function Pf(e,t,n){if(n<=0)return[];let r=Ce(e,t);if(r.length===0)return[];let i=[];for(let o=n-1;o>=0&&o>=n-5;o-=1){let s=(r[o]??"").trim();if(s==="")continue;let a=mi(s);if(a!==null){i.push(a);continue}if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return i}return i}import{posix as Bc}from"path";import{parse as UI}from"@vue/compiler-sfc";var WI=fn("vue-sfc-units");function Cr(e,t){let n=_f(t),r=P(e,n);return WI.get(e,n,r,()=>$c(e,n,r))}function _f(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function GI(e){let t=e?.toLowerCase();return!t||t==="js"||t==="javascript"||t==="jsx"?"javascript":t==="ts"||t==="typescript"?"typescript":t==="tsx"?"tsx":null}function jn(e){return!e||e.body.length===0?0:e.body.split(`
|
|
88
|
+
`).length}function $c(e,t,n){let r={relativePath:t,template:null,scripts:[],styles:[],customBlocks:[],errors:[]};if(!n)return r;let i;try{i=UI(n,{filename:t})}catch(s){return r.errors.push(Ff(s)),r}r.errors.push(...i.errors.map(Ff));let{descriptor:o}=i;return o.template&&(r.template=Vo(e,t,"template",o.template)),o.script&&r.scripts.push(Tf(e,t,o.script,!1)),o.scriptSetup&&r.scripts.push(Tf(e,t,o.scriptSetup,!0)),r.styles=o.styles.map(s=>Vo(e,t,"style",s)),r.customBlocks=o.customBlocks.map(s=>Vo(e,t,"custom",s)),r.errors.push(...[r.template,...r.scripts,...r.styles,...r.customBlocks].flatMap(s=>s?.errors??[])),r}function Tf(e,t,n,r){let i=Vo(e,t,"script",n);return{...i,kind:"script",setup:r,astLanguage:GI(i.lang)}}function Vo(e,t,n,r){let i=VI(r.attrs),o=typeof i.lang=="string"?i.lang:null,s=typeof i.src=="string"?i.src:typeof r.src=="string"?r.src:void 0;if(s){let c=zI(t,s);if(!c)return{kind:n,ownerPath:t,sourcePath:t,external:!0,src:s,attrs:i,lang:o,body:"",startLine:0,endLine:0,errors:[`Could not resolve Vue ${n} block source: ${s}`]};let l=P(e,c),u=l?Math.max(0,l.split(`
|
|
89
|
+
`).length-1):0;return{kind:n,ownerPath:t,sourcePath:c,external:!0,src:s,attrs:i,lang:o,body:l,startLine:0,endLine:u,errors:l?[]:[`Vue ${n} block source not found: ${c}`]}}let a=Math.max(0,r.loc.start.line-1);return{kind:n,ownerPath:t,sourcePath:t,external:!1,attrs:i,lang:o,body:r.content,startLine:a,endLine:Math.max(a,r.loc.end.line-1),errors:[]}}function zI(e,t){let n=t.split(/[?#]/,1)[0];if(!n||n.startsWith("/")||n.includes("://"))return null;let r=_f(Bc.normalize(Bc.join(Bc.dirname(e),n)));return r===".."||r.startsWith("../")?null:r}function VI(e){return{...e}}function Ff(e){return e instanceof Error?e.message:String(e)}function qo(e,t,n){let i=$c(e,t,n).scripts.filter(s=>s.astLanguage&&s.body.length>0),o=i[0]?.astLanguage;return o?{body:i.map(s=>`${`
|
|
90
90
|
`.repeat(s.startLine)}${s.body}`).join(`
|
|
91
|
-
`),startLine:0,language:o}:null}var Lf=On("ast-trees",{clearGroups:["whole-project","source-file"]});function K(e,t){if(Ut(t))return
|
|
92
|
-
`.repeat(r.startLine)+r.body;return di(r.language,i)}):null}function xr(e,t){let n=qI(e,t);if(!n)return null;let r=Bn(n);return r?{calleeLeaf:r,memberAccess:KI(n),line:e.startPosition.row}:null}function qI(e,t){if(t==="rust")return e.type==="call_expression"?e.childForFieldName("function")??e.namedChild(0):e.type==="macro_invocation"?e.childForFieldName("macro")??e.namedChild(0):null;if(t==="python")return e.type!=="call"?null:e.childForFieldName("function")??e.namedChild(0);if(t==="typescript"||t==="tsx"||t==="javascript"){if(e.type==="call_expression")return e.childForFieldName("function")??e.namedChild(0);if(e.type==="new_expression")return e.childForFieldName("constructor")??e.namedChild(0)}return null}function KI(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function Bn(e){switch(e.type){case"identifier":case"type_identifier":case"field_identifier":case"property_identifier":case"shorthand_property_identifier":return e.text;case"field_expression":case"member_expression":case"attribute":{let t=e.namedChild(e.namedChildCount-1);return t?Bn(t):null}case"generic_function":{let t=e.childForFieldName("function")??e.namedChild(0);return t?Bn(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?Bn(t):null}case"super":case"self":case"this":return null;default:return null}}var JI=[Be("source-facts",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/source/source-facts.ts"}),Be("file-definitions",{dependsOn:["content-hash","project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","contentHash","projectFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/symbols/definition-catalog.ts"}),Be("definition-exclusions",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/analysis/framework-patterns.ts"}),Be("doc-path-tokens",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-products.test.ts",owner:"tests/storage/evidence-cache.test.ts"}),Be("doc-path-evidence",{dependsOn:["content-hash","git-history","git-head","tool-version"],keyParts:["kind","relativePath","contentHash","trackedFiles","historyWindow","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/queries/cleanup/doc-drift.ts"}),Be("source-imports",{dependsOn:["content-hash","import-resolution-fingerprint","config","tool-version"],keyParts:["kind","relativePath","contentHash","importResolutionFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/language-parsers/index.ts"}),Be("source-reexports",{dependsOn:["content-hash","import-resolution-fingerprint","config","tool-version"],keyParts:["kind","relativePath","contentHash","importResolutionFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/language-parsers/index.ts"}),Be("source-fingerprints",{dependsOn:["content-hash","project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","contentHash","projectFingerprint","payloadVersion"],stalenessTest:"tests/symbols/definition-catalog.test.ts",owner:"src/queries/cleanup/similar.ts"}),Be("consumer-file-usage",{dependsOn:["content-hash","project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","contentHash","projectFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/queries/internal/consumer-evidence.ts"}),Be("react-component-behavior-profiles",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/source/react-profile.ts"}),Be("git-file-adds",{dependsOn:["git-head","git-history","tool-version"],keyParts:["kind","cacheKey","head","historyWindow","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/analysis/git-history.ts"}),Be("typescript-reference-fragments",{dependsOn:["content-hash","transitive-deps-digest","config","tool-version"],keyParts:["kind","relativePath","semanticIdentity","payloadVersion"],stalenessTest:"tests/semantic/typescript/typescript-reference-fragments.test.ts",owner:"src/semantic/typescript/reference-fragment-shadow.ts"}),Be("typescript-import-usage",{dependsOn:["content-hash","transitive-deps-digest","config","tool-version"],keyParts:["kind","relativePath","semanticIdentity","payloadVersion"],stalenessTest:"tests/semantic/typescript/typescript-semantic-provider.test.ts",owner:"src/semantic/shared-primitives.ts"}),Be("typescript-signatures",{dependsOn:["content-hash","transitive-deps-digest","config","tool-version"],keyParts:["kind","relativePath","semanticIdentity","payloadVersion"],stalenessTest:"tests/semantic/typescript/typescript-semantic-provider.test.ts",owner:"src/semantic/shared-primitives.ts"}),qo("file-dependency-graph",{dependsOn:["project-fingerprint","indexed-language-set","import-resolution-fingerprint","tool-version"],keyParts:["kind","scope","projectFingerprint","payloadVersion"],stalenessTest:"tests/symbols/file-dep-graph.test.ts",owner:"src/symbols/graph/file-dep-graph.ts"}),qo("semantic-import-usage",{dependsOn:["project-fingerprint","indexed-language-set","import-resolution-fingerprint","tool-version"],keyParts:["kind","relativePath","projectFingerprint","language","semanticEngine","payloadVersion"],stalenessTest:"tests/semantic/rust/rust-semantic-cache-gate.test.ts",owner:"src/semantic/shared-primitives.ts"}),qo("semantic-signatures",{dependsOn:["project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","symbol","projectFingerprint","language","semanticEngine","payloadVersion"],stalenessTest:"tests/semantic/rust/rust-semantic-cache-gate.test.ts",owner:"src/semantic/shared-primitives.ts"}),qo("health-semantic-prewarm",{dependsOn:["project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","scope","cliVersion","projectFingerprint","payloadVersion"],stalenessTest:"tests/runtime/cli-support.test.ts",owner:"src/runtime/cli-support.ts"})];function oe(e){let t=new Map;return{kind:e.kind,read(n,r,i){let o=!1,s=0,a;if(U()){let c=Te(n);if(c){let l=`${c}\0${r}\0${i}`;a=t.get(l),a||(a=ci(["evidence-product-file-read-v1",e.kind,c,r,i]),t.set(l,a))}}return E("evidence-product.file.read",()=>{let c=Jm(n,e.kind,r,i);if(c===null)return null;s=c.length;try{let l=e.deserialize(c);return o=l!==null,l}catch{return null}},()=>({...a?{workIdentity:a,workOutcome:"computed"}:{},scope:"file",kind:e.kind,available:!0,hit:o,payloadBytes:s}))},write(n,r,i,o){Ym(n,e.kind,r,i,e.serialize(o))},writeBatch(n,r){Xm(n,r.map(i=>({kind:e.kind,relativePath:i.relativePath,contentHash:i.contentHash,payload:e.serialize(i.value)})))}}}function $n(e){let t=new Map;return{kind:e.kind,read(n,r,i){let o=!1,s=0,a;if(U()){let c=`${i}\0${r}`;a=t.get(c),a||(a=ci(["evidence-product-project-read-v1",e.kind,i,r]),t.set(c,a))}return E("evidence-product.project.read",()=>{let c=Qm(n,e.kind,r,i);if(c===null)return null;s=c.length;try{let l=e.deserialize(c);return o=l!==null,l}catch{return null}},()=>({...a?{workIdentity:a,workOutcome:"computed"}:{},scope:"project",kind:e.kind,available:!0,hit:o,payloadBytes:s}))},write(n,r,i,o){Zm(n,e.kind,r,i,e.serialize(o))}}}function J(e){let t=JI.find(n=>n.kind===e);if(!t)throw new Error(`missing evidence product manifest entry for ${e}`);return t.invalidation}function Be(e,t){return{scope:"file",kind:e,invalidation:{scope:"file",...t}}}function qo(e,t){return{scope:"project",kind:e,invalidation:{scope:"project",...t}}}function fi(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var YI=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function Ko(e,t){let n=QI(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:Mf(n.functionNode),params:Nf(n.functionNode),paramsEndLine:Af(n.functionNode),isLiteralPassthrough:Of(n.functionNode,t)};if(!XI(e.type,t))return null;let r=e.childForFieldName("name")??e.namedChildren.find(i=>i.type==="identifier"||i.type==="property_identifier");return r?{name:r.text,startLine:e.startPosition.row,endLine:e.endPosition.row,paramCount:Mf(e),params:Nf(e),paramsEndLine:Af(e),isLiteralPassthrough:Of(e,t)}:null}function jf(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function Nf(e){let t=jf(e);if(!t)return[];let n=[];for(let r of t.namedChildren){if(fi(r))continue;if(r.type==="identifier"){n.push({name:r.text,simple:!0});continue}let i=r.namedChildren.some(a=>a.type.endsWith("_modifier"))||/^\s*(?:public|private|protected|readonly|override)\b/.test(r.text),o=r.childForFieldName("pattern");if(!i&&o&&o.type==="identifier"){n.push({name:o.text,simple:!0});continue}let s=r.namedChildren.find(a=>a.type==="identifier");n.push({name:o?.type==="identifier"?o.text:s?.text??"",simple:!1})}return n}function Af(e){let t=jf(e);return t?t.endPosition.row:e.startPosition.row}function XI(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?YI.has(e):!1}function QI(e,t){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript")return null;if(e.type==="variable_declarator"){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);return!n||!r||r.type!=="arrow_function"&&r.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:r}}if(e.type==="public_field_definition"){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);return!n||!r||r.type!=="arrow_function"&&r.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:r}}return null}function Mf(e){let t=e.namedChildren.find(r=>r.type==="parameters"||r.type==="formal_parameters");if(!t)return 0;let n=0;for(let r of t.namedChildren)fi(r)||(n+=1);return n}function Of(e,t){let n=e.namedChildren.find(d=>d.type==="block"||d.type==="statement_block");if(!n)return!1;let r=n.namedChildren.filter(d=>!fi(d));if(r.length!==1)return!1;let i=r[0],o=null;if(i.type==="return_statement"||i.type==="expression_statement"?o=i.namedChild(0)??null:t==="rust"&&(i.type==="call_expression"||i.type==="macro_invocation")&&(o=i),!o)return!1;let s=t==="python"?"call":"call_expression";if(o.type!==s)return!1;let a=o.namedChildren.find(d=>d.type==="arguments"||d.type==="argument_list");if(!a)return!1;let c=a.namedChildren.filter(d=>!fi(d)),l=e.namedChildren.find(d=>d.type==="parameters"||d.type==="formal_parameters");if(!l)return!1;let u=[];for(let d of l.namedChildren){if(d.type==="identifier"){u.push(d.text);continue}let m=d.namedChildren.find(f=>f.type==="identifier");m&&u.push(m.text)}if(c.length!==u.length)return!1;for(let d=0;d<u.length;d+=1){let m=c[d];if(m.type!=="identifier"||m.text!==u[d])return!1}return!0}var ZI=new Set(["identifier","type_identifier","field_identifier"]),ew=new Set(["identifier"]),tw=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),nw=new Set(["rust","python"]),rw=/\{([^{}]*)\}/g,iw=/\b([A-Za-z_][\w]*)\b/g;function Bf(e,t){return ow(t).has(e.type)}function $f(e,t){return nw.has(t)&&e.type==="string_content"}function Hc(e){let t=0;for(let r of e.values()){let i=r[r.length-1];i!==void 0&&i>t&&(t=i)}let n=new Array(t+1);for(let r=0;r<=t;r+=1)n[r]=new Set;for(let[r,i]of e)for(let o of i)n[o].add(r);return n}function ow(e){return e==="rust"?ZI:e==="python"?ew:tw}function Hf(e,t){let n=e.startPosition.row;for(let r of e.text.matchAll(rw)){let i=r[1]??"";for(let o of i.matchAll(iw))o[1]&&t(o[1],n)}}var sw=[/\bdefault\s*=\s*"([^"]+)"/g,/\bwith\s*=\s*"([^"]+)"/g,/\bserialize_with\s*=\s*"([^"]+)"/g,/\bdeserialize_with\s*=\s*"([^"]+)"/g,/\bskip_serializing_if\s*=\s*"([^"]+)"/g,/\bgetter\s*=\s*"([^"]+)"/g,/\brename_all_with\s*=\s*"([^"]+)"/g,/\bschema_with\s*=\s*"([^"]+)"/g],aw=/^#!?\[\s*serde\s*\(/,cw=/^#!?\[\s*schemars\s*\(/,lw=/^#!?\[\s*validate\s*\(/,uw=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function Uf(e,t,n){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript"||e.type!=="call_expression")return;let r=e.childForFieldName("function")??e.namedChild(0);if(!r)return;let i=Bn(r);if(!i||!uw.has(i))return;let o=e.namedChildren.find(c=>c.type==="arguments");if(!o)return;let s=o.namedChild(0);if(!s||s.type!=="string")return;let a=s.namedChildren.find(c=>c.type==="string_fragment");a&&n.add(a.text)}function Wf(e,t){let n=aw.test(e),r=cw.test(e),i=lw.test(e);if(!(!n&&!r&&!i))for(let o of sw){o.lastIndex=0;let s;for(;(s=o.exec(e))!==null;){let a=s[1],c=a.split("::").pop()??a;c==="is_none"&&/\bOption\b/.test(a)||c==="is_empty"&&/\b(String|Vec|HashMap|BTreeMap|HashSet|BTreeSet)\b/.test(a)||c&&t.add(c)}}}function Gf(e,t){let n=new Map,r=(s,a)=>{if(s===a)return;let c=n.get(s);c||(c=new Set,n.set(s,c)),c.add(a)},i=t==="python"?new Set(["identifier"]):new Set(["type_identifier"]),o=(s,a)=>{let c=l=>{i.has(l.type)&&l.text!==a&&r(l.text,a);for(let u of l.children)c(u)};for(let l of s.children)c(l)};if(t==="rust")for(let s of e.rootNode.descendantsOfType(["struct_item","enum_item","union_item","type_item"])){let a=s.namedChildren.find(l=>l.type==="type_identifier")?.text;if(!a)continue;let c=s.namedChildren.find(l=>l.type==="field_declaration_list"||l.type==="enum_variant_list"||l.type==="ordered_field_declaration_list");c&&o(c,a),s.type==="type_item"&&o(s,a)}else if(t==="python")for(let s of e.rootNode.descendantsOfType("class_definition")){let a=s.namedChildren.find(u=>u.type==="identifier")?.text;if(!a)continue;let c=s.childForFieldName("superclasses");c&&o(c,a);let l=s.namedChildren.find(u=>u.type==="block");if(l)for(let u of l.descendantsOfType("type"))for(let d of u.descendantsOfType("identifier"))d.text!==a&&r(d.text,a)}else for(let s of e.rootNode.descendantsOfType(["interface_declaration","type_alias_declaration","class_declaration"])){let a=s.namedChildren.find(c=>c.type==="type_identifier")?.text;a&&o(s,a)}return n}var dw=new Map([["defn","function"],["defn-","function"],["defmacro","macro"],["defmacro-","macro"],["defmethod","method"]]),Uc=new Set(["catch","comment","def","defprotocol","defrecord","deftype","defmethod","defmacro","defmacro-","defn","defn-","do","doseq","dotimes","fn","for","if","let","loop","ns","quote","recur","throw","try","extend-protocol","extend-type","when","when-let","when-not"]);function zf(e){let t=[],n=[],r=[],i=new Map,o=[],s=0,a=0,c=(l,u)=>{let d=i.get(l);if(!d){i.set(l,[u]);return}d[d.length-1]!==u&&d.push(u)};for(;a<e.length;){let l=e[a];if(l===`
|
|
93
|
-
`){s+=1,a+=1;continue}if(/\s|,/.test(l)){a+=1;continue}if(l===";"){a=
|
|
91
|
+
`),startLine:0,language:o}:null}var Lf=On("ast-trees",{clearGroups:["whole-project","source-file"]});function K(e,t){if(Ut(t))return qI(e,t);let n=M(t);if(!n)return null;let r=P(e,t);return r?Lf.get(e,t,r,()=>di(n,r)):null}function qI(e,t){let n=P(e,t);return n?Lf.get(e,t,n,()=>{let r=qo(e,t,n);if(!r)return null;let i=`
|
|
92
|
+
`.repeat(r.startLine)+r.body;return di(r.language,i)}):null}function xr(e,t){let n=KI(e,t);if(!n)return null;let r=Bn(n);return r?{calleeLeaf:r,memberAccess:JI(n),line:e.startPosition.row}:null}function KI(e,t){if(t==="rust")return e.type==="call_expression"?e.childForFieldName("function")??e.namedChild(0):e.type==="macro_invocation"?e.childForFieldName("macro")??e.namedChild(0):null;if(t==="python")return e.type!=="call"?null:e.childForFieldName("function")??e.namedChild(0);if(t==="typescript"||t==="tsx"||t==="javascript"){if(e.type==="call_expression")return e.childForFieldName("function")??e.namedChild(0);if(e.type==="new_expression")return e.childForFieldName("constructor")??e.namedChild(0)}return null}function JI(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function Bn(e){switch(e.type){case"identifier":case"type_identifier":case"field_identifier":case"property_identifier":case"shorthand_property_identifier":return e.text;case"field_expression":case"member_expression":case"attribute":{let t=e.namedChild(e.namedChildCount-1);return t?Bn(t):null}case"generic_function":{let t=e.childForFieldName("function")??e.namedChild(0);return t?Bn(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?Bn(t):null}case"super":case"self":case"this":return null;default:return null}}var YI=[Be("source-facts",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/source/source-facts.ts"}),Be("file-definitions",{dependsOn:["content-hash","project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","contentHash","projectFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/symbols/definition-catalog.ts"}),Be("definition-exclusions",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/analysis/framework-patterns.ts"}),Be("doc-path-tokens",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-products.test.ts",owner:"tests/storage/evidence-cache.test.ts"}),Be("doc-path-evidence",{dependsOn:["content-hash","git-history","git-head","tool-version"],keyParts:["kind","relativePath","contentHash","trackedFiles","historyWindow","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/queries/cleanup/doc-drift.ts"}),Be("source-imports",{dependsOn:["content-hash","import-resolution-fingerprint","config","tool-version"],keyParts:["kind","relativePath","contentHash","importResolutionFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/language-parsers/index.ts"}),Be("source-reexports",{dependsOn:["content-hash","import-resolution-fingerprint","config","tool-version"],keyParts:["kind","relativePath","contentHash","importResolutionFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/language-parsers/index.ts"}),Be("source-fingerprints",{dependsOn:["content-hash","project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","contentHash","projectFingerprint","payloadVersion"],stalenessTest:"tests/symbols/definition-catalog.test.ts",owner:"src/queries/cleanup/similar.ts"}),Be("consumer-file-usage",{dependsOn:["content-hash","project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","contentHash","projectFingerprint","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/queries/internal/consumer-evidence.ts"}),Be("react-component-behavior-profiles",{dependsOn:["content-hash","tool-version"],keyParts:["kind","relativePath","contentHash","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/source/react-profile.ts"}),Be("git-file-adds",{dependsOn:["git-head","git-history","tool-version"],keyParts:["kind","cacheKey","head","historyWindow","payloadVersion"],stalenessTest:"tests/storage/evidence-cache.test.ts",owner:"src/analysis/git-history.ts"}),Be("typescript-reference-fragments",{dependsOn:["content-hash","transitive-deps-digest","config","tool-version"],keyParts:["kind","relativePath","semanticIdentity","payloadVersion"],stalenessTest:"tests/semantic/typescript/typescript-reference-fragments.test.ts",owner:"src/semantic/typescript/reference-fragment-shadow.ts"}),Be("typescript-import-usage",{dependsOn:["content-hash","transitive-deps-digest","config","tool-version"],keyParts:["kind","relativePath","semanticIdentity","payloadVersion"],stalenessTest:"tests/semantic/typescript/typescript-semantic-provider.test.ts",owner:"src/semantic/shared-primitives.ts"}),Be("typescript-signatures",{dependsOn:["content-hash","transitive-deps-digest","config","tool-version"],keyParts:["kind","relativePath","semanticIdentity","payloadVersion"],stalenessTest:"tests/semantic/typescript/typescript-semantic-provider.test.ts",owner:"src/semantic/shared-primitives.ts"}),Ko("file-dependency-graph",{dependsOn:["project-fingerprint","indexed-language-set","import-resolution-fingerprint","tool-version"],keyParts:["kind","scope","projectFingerprint","payloadVersion"],stalenessTest:"tests/symbols/file-dep-graph.test.ts",owner:"src/symbols/graph/file-dep-graph.ts"}),Ko("semantic-import-usage",{dependsOn:["project-fingerprint","indexed-language-set","import-resolution-fingerprint","tool-version"],keyParts:["kind","relativePath","projectFingerprint","language","semanticEngine","payloadVersion"],stalenessTest:"tests/semantic/rust/rust-semantic-cache-gate.test.ts",owner:"src/semantic/shared-primitives.ts"}),Ko("semantic-signatures",{dependsOn:["project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","relativePath","symbol","projectFingerprint","language","semanticEngine","payloadVersion"],stalenessTest:"tests/semantic/rust/rust-semantic-cache-gate.test.ts",owner:"src/semantic/shared-primitives.ts"}),Ko("health-semantic-prewarm",{dependsOn:["project-fingerprint","indexed-language-set","tool-version"],keyParts:["kind","scope","cliVersion","projectFingerprint","payloadVersion"],stalenessTest:"tests/runtime/cli-support.test.ts",owner:"src/runtime/cli-support.ts"})];function oe(e){let t=new Map;return{kind:e.kind,read(n,r,i){let o=!1,s=0,a;if(U()){let c=Te(n);if(c){let l=`${c}\0${r}\0${i}`;a=t.get(l),a||(a=ci(["evidence-product-file-read-v1",e.kind,c,r,i]),t.set(l,a))}}return E("evidence-product.file.read",()=>{let c=Jm(n,e.kind,r,i);if(c===null)return null;s=c.length;try{let l=e.deserialize(c);return o=l!==null,l}catch{return null}},()=>({...a?{workIdentity:a,workOutcome:"computed"}:{},scope:"file",kind:e.kind,available:!0,hit:o,payloadBytes:s}))},write(n,r,i,o){Ym(n,e.kind,r,i,e.serialize(o))},writeBatch(n,r){Xm(n,r.map(i=>({kind:e.kind,relativePath:i.relativePath,contentHash:i.contentHash,payload:e.serialize(i.value)})))}}}function $n(e){let t=new Map;return{kind:e.kind,read(n,r,i){let o=!1,s=0,a;if(U()){let c=`${i}\0${r}`;a=t.get(c),a||(a=ci(["evidence-product-project-read-v1",e.kind,i,r]),t.set(c,a))}return E("evidence-product.project.read",()=>{let c=Qm(n,e.kind,r,i);if(c===null)return null;s=c.length;try{let l=e.deserialize(c);return o=l!==null,l}catch{return null}},()=>({...a?{workIdentity:a,workOutcome:"computed"}:{},scope:"project",kind:e.kind,available:!0,hit:o,payloadBytes:s}))},write(n,r,i,o){Zm(n,e.kind,r,i,e.serialize(o))}}}function J(e){let t=YI.find(n=>n.kind===e);if(!t)throw new Error(`missing evidence product manifest entry for ${e}`);return t.invalidation}function Be(e,t){return{scope:"file",kind:e,invalidation:{scope:"file",...t}}}function Ko(e,t){return{scope:"project",kind:e,invalidation:{scope:"project",...t}}}function fi(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var XI=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function Jo(e,t){let n=ZI(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:Mf(n.functionNode),params:Nf(n.functionNode),paramsEndLine:Af(n.functionNode),isLiteralPassthrough:Of(n.functionNode,t)};if(!QI(e.type,t))return null;let r=e.childForFieldName("name")??e.namedChildren.find(i=>i.type==="identifier"||i.type==="property_identifier");return r?{name:r.text,startLine:e.startPosition.row,endLine:e.endPosition.row,paramCount:Mf(e),params:Nf(e),paramsEndLine:Af(e),isLiteralPassthrough:Of(e,t)}:null}function jf(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function Nf(e){let t=jf(e);if(!t)return[];let n=[];for(let r of t.namedChildren){if(fi(r))continue;if(r.type==="identifier"){n.push({name:r.text,simple:!0});continue}let i=r.namedChildren.some(a=>a.type.endsWith("_modifier"))||/^\s*(?:public|private|protected|readonly|override)\b/.test(r.text),o=r.childForFieldName("pattern");if(!i&&o&&o.type==="identifier"){n.push({name:o.text,simple:!0});continue}let s=r.namedChildren.find(a=>a.type==="identifier");n.push({name:o?.type==="identifier"?o.text:s?.text??"",simple:!1})}return n}function Af(e){let t=jf(e);return t?t.endPosition.row:e.startPosition.row}function QI(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?XI.has(e):!1}function ZI(e,t){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript")return null;if(e.type==="variable_declarator"){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);return!n||!r||r.type!=="arrow_function"&&r.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:r}}if(e.type==="public_field_definition"){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);return!n||!r||r.type!=="arrow_function"&&r.type!=="function_expression"?null:{name:n.text,definitionNode:e,functionNode:r}}return null}function Mf(e){let t=e.namedChildren.find(r=>r.type==="parameters"||r.type==="formal_parameters");if(!t)return 0;let n=0;for(let r of t.namedChildren)fi(r)||(n+=1);return n}function Of(e,t){let n=e.namedChildren.find(d=>d.type==="block"||d.type==="statement_block");if(!n)return!1;let r=n.namedChildren.filter(d=>!fi(d));if(r.length!==1)return!1;let i=r[0],o=null;if(i.type==="return_statement"||i.type==="expression_statement"?o=i.namedChild(0)??null:t==="rust"&&(i.type==="call_expression"||i.type==="macro_invocation")&&(o=i),!o)return!1;let s=t==="python"?"call":"call_expression";if(o.type!==s)return!1;let a=o.namedChildren.find(d=>d.type==="arguments"||d.type==="argument_list");if(!a)return!1;let c=a.namedChildren.filter(d=>!fi(d)),l=e.namedChildren.find(d=>d.type==="parameters"||d.type==="formal_parameters");if(!l)return!1;let u=[];for(let d of l.namedChildren){if(d.type==="identifier"){u.push(d.text);continue}let m=d.namedChildren.find(f=>f.type==="identifier");m&&u.push(m.text)}if(c.length!==u.length)return!1;for(let d=0;d<u.length;d+=1){let m=c[d];if(m.type!=="identifier"||m.text!==u[d])return!1}return!0}var ew=new Set(["identifier","type_identifier","field_identifier"]),tw=new Set(["identifier"]),nw=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),rw=new Set(["rust","python"]),iw=/\{([^{}]*)\}/g,ow=/\b([A-Za-z_][\w]*)\b/g;function Bf(e,t){return sw(t).has(e.type)}function $f(e,t){return rw.has(t)&&e.type==="string_content"}function Hc(e){let t=0;for(let r of e.values()){let i=r[r.length-1];i!==void 0&&i>t&&(t=i)}let n=new Array(t+1);for(let r=0;r<=t;r+=1)n[r]=new Set;for(let[r,i]of e)for(let o of i)n[o].add(r);return n}function sw(e){return e==="rust"?ew:e==="python"?tw:nw}function Hf(e,t){let n=e.startPosition.row;for(let r of e.text.matchAll(iw)){let i=r[1]??"";for(let o of i.matchAll(ow))o[1]&&t(o[1],n)}}var aw=[/\bdefault\s*=\s*"([^"]+)"/g,/\bwith\s*=\s*"([^"]+)"/g,/\bserialize_with\s*=\s*"([^"]+)"/g,/\bdeserialize_with\s*=\s*"([^"]+)"/g,/\bskip_serializing_if\s*=\s*"([^"]+)"/g,/\bgetter\s*=\s*"([^"]+)"/g,/\brename_all_with\s*=\s*"([^"]+)"/g,/\bschema_with\s*=\s*"([^"]+)"/g],cw=/^#!?\[\s*serde\s*\(/,lw=/^#!?\[\s*schemars\s*\(/,uw=/^#!?\[\s*validate\s*\(/,dw=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function Uf(e,t,n){if(t!=="typescript"&&t!=="tsx"&&t!=="javascript"||e.type!=="call_expression")return;let r=e.childForFieldName("function")??e.namedChild(0);if(!r)return;let i=Bn(r);if(!i||!dw.has(i))return;let o=e.namedChildren.find(c=>c.type==="arguments");if(!o)return;let s=o.namedChild(0);if(!s||s.type!=="string")return;let a=s.namedChildren.find(c=>c.type==="string_fragment");a&&n.add(a.text)}function Wf(e,t){let n=cw.test(e),r=lw.test(e),i=uw.test(e);if(!(!n&&!r&&!i))for(let o of aw){o.lastIndex=0;let s;for(;(s=o.exec(e))!==null;){let a=s[1],c=a.split("::").pop()??a;c==="is_none"&&/\bOption\b/.test(a)||c==="is_empty"&&/\b(String|Vec|HashMap|BTreeMap|HashSet|BTreeSet)\b/.test(a)||c&&t.add(c)}}}function Gf(e,t){let n=new Map,r=(s,a)=>{if(s===a)return;let c=n.get(s);c||(c=new Set,n.set(s,c)),c.add(a)},i=t==="python"?new Set(["identifier"]):new Set(["type_identifier"]),o=(s,a)=>{let c=l=>{i.has(l.type)&&l.text!==a&&r(l.text,a);for(let u of l.children)c(u)};for(let l of s.children)c(l)};if(t==="rust")for(let s of e.rootNode.descendantsOfType(["struct_item","enum_item","union_item","type_item"])){let a=s.namedChildren.find(l=>l.type==="type_identifier")?.text;if(!a)continue;let c=s.namedChildren.find(l=>l.type==="field_declaration_list"||l.type==="enum_variant_list"||l.type==="ordered_field_declaration_list");c&&o(c,a),s.type==="type_item"&&o(s,a)}else if(t==="python")for(let s of e.rootNode.descendantsOfType("class_definition")){let a=s.namedChildren.find(u=>u.type==="identifier")?.text;if(!a)continue;let c=s.childForFieldName("superclasses");c&&o(c,a);let l=s.namedChildren.find(u=>u.type==="block");if(l)for(let u of l.descendantsOfType("type"))for(let d of u.descendantsOfType("identifier"))d.text!==a&&r(d.text,a)}else for(let s of e.rootNode.descendantsOfType(["interface_declaration","type_alias_declaration","class_declaration"])){let a=s.namedChildren.find(c=>c.type==="type_identifier")?.text;a&&o(s,a)}return n}var mw=new Map([["defn","function"],["defn-","function"],["defmacro","macro"],["defmacro-","macro"],["defmethod","method"]]),Uc=new Set(["catch","comment","def","defprotocol","defrecord","deftype","defmethod","defmacro","defmacro-","defn","defn-","do","doseq","dotimes","fn","for","if","let","loop","ns","quote","recur","throw","try","extend-protocol","extend-type","when","when-let","when-not"]);function zf(e){let t=[],n=[],r=[],i=new Map,o=[],s=0,a=0,c=(l,u)=>{let d=i.get(l);if(!d){i.set(l,[u]);return}d[d.length-1]!==u&&d.push(u)};for(;a<e.length;){let l=e[a];if(l===`
|
|
93
|
+
`){s+=1,a+=1;continue}if(/\s|,/.test(l)){a+=1;continue}if(l===";"){a=Xo(e,a);continue}if(l==='"'){let p=gi(e,a,s);s=p.line,a=p.index;continue}if(l==="("||l==="["||l==="{"){o.push({kind:l,startLine:s,endLine:s,headTokens:[],tokens:[],children:[]}),a+=1;continue}if(l===")"||l==="]"||l==="}"){let p=o.pop();p&&(p.endLine=s,fw(p,{callables:t,callSites:n,clojureMembers:r,recordIdentifier:c}),o[o.length-1]?.children.push(p)),a+=1;continue}if(Wc(l)){a+=1;continue}let u=s,d=a;for(;a<e.length&&!Gc(e[a]);)a+=1;let m=e.slice(d,a);if(!m)continue;let f={text:m,line:u};pw(o[o.length-1],f),c(rt(m),u)}return{language:"clojure",callables:t,callSites:n,clojureMembers:r,typeContainerMap:new Map,identifierLineMap:i,identifiersByLine:Sw(i),fileIdentifiers:new Set(i.keys()),rustAttrReferencedNames:new Set,crossLanguageDispatchNames:new Set}}function fw(e,t){if(e.kind!=="("||e.headTokens.length===0)return;let n=e.headTokens[0],r=rt(n.text),i=mw.get(n.text);if(i){let s=e.headTokens[1];if(s){let a=rt(s.text);t.recordIdentifier(a,s.line),t.callables.push({name:a,startLine:e.startLine,endLine:e.endLine,paramCount:0,params:[],paramsEndLine:s.line,isLiteralPassthrough:!1,clojureKind:i})}}if(gw(e,t),!r||Uc.has(n.text)||Uc.has(r)||r.startsWith(":"))return;let o=bw(n.text);t.callSites.push({calleeLeaf:o.leaf,calleeQualifier:o.qualifier,calleeText:o.text,memberAccess:!1,line:n.line})}function pw(e,t){e&&(e.headTokens.length<2&&e.headTokens.push(t),e.tokens.length<200&&e.tokens.push(t))}function gw(e,t){let n=rt(e.tokens[0]?.text??"");if(n==="defprotocol"){let r=rt(e.tokens[1]?.text??"");if(!r)return;for(let i of Yo(e))pi(t,r,"protocol",i,"protocol-method");return}if(n==="defrecord"||n==="deftype"){let r=rt(e.tokens[1]?.text??"");if(!r)return;let i=n==="defrecord"?"record":"type",o=n==="defrecord"?"record-method":"type-method";for(let s of Yo(e))pi(t,r,i,s,o);return}if(n==="extend-type"){let r=rt(e.tokens[1]?.text??"");if(!r)return;for(let i of Yo(e))pi(t,r,"extension",i,"extension-method");return}if(n==="extend-protocol"){let r=rt(e.tokens[1]?.text??"");for(let i of Yo(e)){r&&pi(t,r,"extension",i,"extension-method");let o=yw(e,i.startLine);o&&o!==r&&pi(t,o,"extension",i,"extension-method")}}}function Yo(e){return e.children.filter(hw)}function hw(e){if(e.kind!=="(")return!1;let t=rt(e.tokens[0]?.text??"");return!!(t&&!Uc.has(t)&&!t.startsWith(":"))}function pi(e,t,n,r,i){let o=r.tokens[0],s=rt(o?.text??"");!o||!s||(e.recordIdentifier(s,o.line),e.clojureMembers.push({ownerName:t,ownerKind:n,memberName:s,memberKind:i,startLine:r.startLine,endLine:r.endLine}))}function yw(e,t){let n=null;for(let r=2;r<e.tokens.length;r+=1){let i=e.tokens[r];if(i.line>t)break;let o=rt(i.text);o&&!o.startsWith(":")&&(n=o)}return n}function rt(e){return e.replace(/^#?['`~@]+/,"").split("/").pop()?.replace(/^\./,"")??""}function bw(e){let t=e.replace(/^#?['`~@]+/,""),n=t.lastIndexOf("/"),r=rt(t);if(n<=0)return{leaf:r,text:t};let i=t.slice(0,n);return{leaf:r,qualifier:i,text:t}}function Xo(e,t){let n=t;for(;n<e.length&&e[n]!==`
|
|
94
94
|
`;)n+=1;return n}function gi(e,t,n){let r=t+1,i=n;for(;r<e.length;){let o=e[r];if(o==="\\"){r+=2;continue}if(o===`
|
|
95
|
-
`&&(i+=1),r+=1,o==='"')break}return{index:r,line:i}}function Wc(e){return e==="'"||e==="`"||e==="~"||e==="@"||e==="^"||e==="#"}function Gc(e){return/\s|,/.test(e)||e==="("||e===")"||e==="["||e==="]"||e==="{"||e==="}"||e==='"'||e===";"}function
|
|
95
|
+
`&&(i+=1),r+=1,o==='"')break}return{index:r,line:i}}function Wc(e){return e==="'"||e==="`"||e==="~"||e==="@"||e==="^"||e==="#"}function Gc(e){return/\s|,/.test(e)||e==="("||e===")"||e==="["||e==="]"||e==="{"||e==="}"||e==='"'||e===";"}function Sw(e){let t=[];for(let[n,r]of e)for(let i of r)t[i]??=new Set,t[i].add(n);return t}var Vf=3,Cw=On("source-facts",{clearGroups:["whole-project","source-file"]}),zc=oe({kind:"source-facts",invalidation:J("source-facts"),serialize:Rw,deserialize:Iw});function z(e,t){return Vc(e,t).facts}function Vc(e,t){let n=P(e,t);if(!n)return{facts:null};let r=xw(e,t,n);return r?Cw.get(e,t,n,()=>vw(e,t,r,n)):{facts:null}}function xw(e,t,n){return Ut(t)?qo(e,t,n)?.language??null:M(t)}function vw(e,t,n,r){let i=ce(e,t,r),o=zc.read(e,t,i);if(o&&o.language===n)return{facts:o};if(n==="clojure"){let c=zf(r);return zc.write(e,t,i,c),{facts:c}}let s=K(e,t);if(!s)return{facts:null,unavailable:{language:n,reason:"parser-unavailable"}};let a=Ew(s,n);return zc.write(e,t,i,a),{facts:a}}function Rw(e){let t={version:Vf,language:e.language,callables:e.callables,callSites:e.callSites,clojureMembers:e.clojureMembers,typeContainerMap:[...e.typeContainerMap.entries()].map(([n,r])=>[n,[...r]]),identifierLineMap:[...e.identifierLineMap.entries()],rustAttrReferencedNames:[...e.rustAttrReferencedNames],crossLanguageDispatchNames:[...e.crossLanguageDispatchNames]};return JSON.stringify(t)}function Iw(e){try{let t=JSON.parse(e);if(t.version!==Vf||t.language==="clojure"&&(t.clojureMembers===void 0||t.callSites.some(r=>r.calleeText===void 0)))return null;let n=new Map(t.identifierLineMap);return{language:t.language,callables:t.callables,callSites:t.callSites,clojureMembers:t.clojureMembers??[],typeContainerMap:new Map(t.typeContainerMap.map(([r,i])=>[r,new Set(i)])),identifierLineMap:n,identifiersByLine:Hc(n),fileIdentifiers:new Set(n.keys()),rustAttrReferencedNames:new Set(t.rustAttrReferencedNames),crossLanguageDispatchNames:new Set(t.crossLanguageDispatchNames)}}catch{return null}}function qc(e,t,n,r){let i=z(e,t);return i?ww(i,n,r)?.isLiteralPassthrough??!0:!0}function hi(e,t){return t.relativePath.includes(".clj-kondo/hooks/")?!0:z(e,t.relativePath)?.callables.find(r=>r.startLine===t.startLine&&r.endLine===t.endLine)?.clojureKind==="macro"}function ww(e,t,n){return e.callables.find(r=>r.startLine===t&&r.endLine===n)??null}function Ew(e,t){let n=[],r=[],i=new Set,o=new Set,s=new Map,a=(l,u)=>{let d=s.get(l);if(!d){s.set(l,[u]);return}d[d.length-1]!==u&&d.push(u)},c=l=>{let u=Jo(l,t);u&&n.push(u);let d=xr(l,t);d&&r.push(d),Uf(l,t,o),t==="rust"&&(l.type==="attribute_item"||l.type==="inner_attribute_item")&&Wf(l.text,i),Bf(l,t)&&a(l.text,l.startPosition.row),$f(l,t)&&Hf(l,a);for(let m of l.children)c(m)};return c(e.rootNode),{language:t,callables:n,callSites:r,clojureMembers:[],typeContainerMap:Gf(e,t),identifierLineMap:s,identifiersByLine:Hc(s),fileIdentifiers:new Set(s.keys()),rustAttrReferencedNames:i,crossLanguageDispatchNames:o}}var qf=new Set(["rust","typescript","tsx","javascript","python","clojure"]);function Kc(e,t){let n=z(e,t);return!n||!qf.has(n.language)?null:n.callables.map(r=>({name:r.name,startLine:r.startLine,endLine:r.endLine}))}function hn(e,t){let n=z(e,t);return!n||!qf.has(n.language)?null:n.callSites}function Jc(e,t){return z(e,t)?.typeContainerMap??new Map}import{ElementTypes as kw,NodeTypes as Yc,parse as Pw}from"@vue/compiler-dom";import{parse as vX}from"@vue/compiler-sfc";var Dw=new Set(["children","className","data","e","err","error","ev","event","false","id","idx","index","item","key","null","props","res","result","state","style","true","undefined","val","value"]);function Qo(e){return e.length<=2||Dw.has(e)}function Zo(e,t){return e.split(t).filter(Boolean).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}var Tw=fn("vue-template-facts"),Fw=new Set(["component","keep-alive","slot","suspense","teleport","template","transition","transition-group"]),_w=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","menu","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","search","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]),Lw=new Set(["div","span","template"]),Nw=new Set(["as","await","break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","false","finally","for","from","function","if","import","in","instanceof","let","new","null","of","return","super","switch","this","throw","true","try","typeof","undefined","var","void","while","with","yield"]);function es(e,t){let n=t.replace(/\\/g,"/"),r=P(e,n);return Tw.get(e,n,r,()=>Aw(n,Cr(e,n).template))}function Aw(e,t){let n={relativePath:e,template:t?{startLine:t.startLine,endLine:t.endLine}:null,componentTags:[],nativeTags:[],builtinTags:[],props:[],events:[],directives:[],slots:[],expressionIdentifiers:[],structuralTokens:[]};if(!t)return n;let r;try{r=Pw(t.body,{comments:!1})}catch{return n}let i=new Set,o=s=>{s.trim()&&i.add(s)};return Jf(r.children,t.startLine,n,o),n.structuralTokens=[...i].sort(),n}function Jf(e,t,n,r){for(let i of e)if(i.type===Yc.ELEMENT)Mw(i,t,n,r),Jf(i.children,t,n,r);else if(i.type===Yc.INTERPOLATION){r("interpolation");let o=Xc(i.content);o&&Yf(o,t,i.loc.start.line,n,r)}}function Mw(e,t,n,r){let i=Ww(e.tag),o={tag:e.tag,normalized:i,kind:Uw(e),startLine:vr(t,e.loc.start.line),endLine:vr(t,e.loc.end.line)};o.kind==="component"?(n.componentTags.push(o),r(`component:${i}`)):o.kind==="builtin"?(n.builtinTags.push(o),r(`builtin:${i}`)):(n.nativeTags.push(o),Lw.has(e.tag)||r(`native:${e.tag}`));for(let s of e.props)Ow(s,t,n,r)}function Ow(e,t,n,r){if(e.type===Yc.ATTRIBUTE){let a=e.value?.content??null,c=Kf("prop",e.name,a,t,e.loc.start.line,e.loc.end.line);n.props.push(c),r(`prop:${e.name}`);return}let i=Bw(e),o=Xc(e.exp),s=Kf(jw(e.name),i,o,t,e.loc.start.line,e.loc.end.line);switch(s.kind){case"prop":n.props.push(s),r(`prop:${i}`);break;case"event":n.events.push(s),r(`event:${i}`);break;case"slot":n.slots.push(s),r(`slot:${i}`);break;case"directive":n.directives.push(s),r(`directive:${i}`);break}o&&Yf(o,t,e.loc.start.line,n,r)}function Kf(e,t,n,r,i,o){return{kind:e,name:t,value:n,startLine:vr(r,i),endLine:vr(r,o)}}function jw(e){switch(e){case"bind":case"model":return"prop";case"on":return"event";case"slot":return"slot";default:return"directive"}}function Bw(e){let t=Xc(e.arg);return t||e.name}function Xc(e){if(!e)return null;let t=("content"in e&&typeof e.content=="string"?e.content:e.loc.source).trim();return t||null}function Yf(e,t,n,r,i){for(let o of $w(e)){let s={name:o,startLine:vr(t,n),endLine:vr(t,n)};r.expressionIdentifiers.push(s),i(`id:${o}`)}}function $w(e){let t=new Set,n=Hw(e),r=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,i;for(;i=r.exec(n);){let o=i[0];Nw.has(o)||Qo(o)||/^[A-Z_]+$/.test(o)||t.add(o)}return[...t].sort()}function Hw(e){return e.replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/.*$/gm," ").replace(/`(?:\\[\s\S]|\$\{([^}]*)\}|[^`\\])*`/g,(t,n)=>n??" ").replace(/'(?:\\[\s\S]|[^'\\])*'/g," ").replace(/"(?:\\[\s\S]|[^"\\])*"/g," ")}function Uw(e){let t=e.tag;return e.tagType===kw.COMPONENT?"component":Fw.has(t)?"builtin":_w.has(t)?"native":/^[A-Z]/.test(t)||t.includes("-")?"component":"native"}function Ww(e){return Zo(e,/[-_:]/)}function vr(e,t){return e+Math.max(0,t-1)}import{createRequire as tE}from"module";import{existsSync as Wn}from"fs";import{basename as Xf,dirname as qe,extname as Wt,join as it,relative as Hn,resolve as we,sep as nE}from"path";function N(e,t={}){let n=t.scope?"AND relative_path LIKE ?":"",r=t.like?"AND relative_path LIKE ?":"",i=[...t.scope?[`%${t.scope}%`]:[],...t.like?[t.like]:[]],o=e.all(`SELECT relative_path
|
|
96
96
|
FROM documents
|
|
97
97
|
WHERE 1 = 1
|
|
98
98
|
${e.pathExclusionsFor("documents")}
|
|
99
99
|
${n}
|
|
100
100
|
${r}
|
|
101
|
-
ORDER BY relative_path`,...i).map(a=>a.relative_path),s=t.extensions?o.filter(a=>t.extensions.some(c=>a.toLowerCase().endsWith(c.toLowerCase()))):o;return t.includeIgnored===!1?s.filter(a=>!e.isIgnored(a)):s}import{isAbsolute as
|
|
102
|
-
`)))}import{readdirSync as
|
|
103
|
-
`)){let o=i.trim();o&&(
|
|
104
|
-
`).length:0,u=jn(r.template),d=o.lineCount,m=r.styles.reduce((y,h)=>y+jn(h),0),f=r.customBlocks.reduce((y,h)=>y+jn(h),0),{lines:p,paths:g}=
|
|
105
|
-
`).length:0)},0),paths:i}}function mD(e){let t=fD(e.scriptFacts);return{...e,scriptFacts:t,templateTokens:new Set(e.templateTokens),behaviorTokens:new Set(e.behaviorTokens),templateBindingNames:[...e.templateBindingNames],templateLocalNames:[...e.templateLocalNames],componentNames:[...e.componentNames],externalScriptPaths:t.externalScriptPaths,delegatedComposablePaths:[...e.delegatedComposablePaths]}}function fD(e){return{...e,imports:e.imports.map(t=>({...t})),functions:e.functions.map(t=>({...t})),calls:e.calls.map(t=>({...t,categories:[...t.categories]})),composables:[...e.composables],stores:[...e.stores],reactivity:[...e.reactivity],lifecycle:[...e.lifecycle],requests:[...e.requests],macros:[...e.macros],externalScriptPaths:[...e.externalScriptPaths],unresolvedScripts:e.unresolvedScripts.map(t=>({...t}))}}function pD(e,t,n){let r=new Set;for(let i of t.composables)r.add(`composable:${i}`);for(let i of t.stores)r.add(`store:${i}`);for(let i of t.reactivity)r.add(`reactivity:${i}`);for(let i of t.lifecycle)r.add(`lifecycle:${i}`);for(let i of t.requests)r.add(`request:${i}`);for(let i of t.macros)r.add(`macro:${i}`);for(let i of t.functions){if(cD.has(i.name))continue;r.add(`function:${i.name}`);let o=/^[a-z]+/.exec(i.name)?.[0]??null;o&&o.length>2&&o!==i.name&&r.add(`function-verb:${o}`)}for(let i of e.events)r.add(`template-event:${i.name}`);for(let i of n)r.add(`template-binding:${i}`);return r}function gD(e){let t=new Set;for(let n of e.directives)if(n.name==="for"&&n.value)for(let r of hD(n.value))t.add(r);for(let n of e.slots)if(n.value)for(let r of mp(n.value))t.add(r);return[...t].sort()}function hD(e){let t=/^(.*?)\s+(?:in|of)\s+/.exec(e.trim());return t?mp(t[1]??""):[]}function mp(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let r=n[0];aD.has(r)||t.push(r)}return t}import{extname as yD}from"path";function Et(e){return typeof e=="object"&&e!==null}function Me(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")?e:null}var bD=[".tsx",".jsx"],fp=new Set(["useActionState","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","useReducer","useRef","useState","useSyncExternalStore","useTransition"]),SD=new Set(["useEffect","useInsertionEffect","useLayoutEffect"]),CD=new Set(["useActionState","useOptimistic","useReducer","useRef","useState"]),xD=new Set(["useLocation","useNavigate","useParams","useSearchParams","useTranslation"]),RD=new Set(["axios","fetch","gql","graphql","mutate","query","request","useMutation","useQuery","useSuspenseQuery"]),vD=new Set(["add","apply","cancel","change","clear","close","create","delete","fetch","filter","handle","load","open","refresh","remove","render","reset","save","select","submit","toggle","update"]),ID=new Set(["aria-hidden","className","clipRule","d","fill","fillRule","height","role","stroke","strokeLinecap","strokeLinejoin","strokeWidth","style","viewBox","width","xmlns"]),wD=fn("react-component-behavior-profiles"),pp=oe({kind:"react-component-behavior-profiles",invalidation:J("react-component-behavior-profiles"),serialize:kD,deserialize:TD});function bp(e,t={}){let n=$e(e,{extensions:bD}).filter(i=>!t.scope||i.includes(t.scope)).sort();return(typeof t.scanLimit=="number"&&t.scanLimit>0?n.slice(0,t.scanLimit):n).flatMap(i=>fl(e,i)).filter(i=>(t.minJsxTokens===void 0||i.jsxTokens.size>=t.minJsxTokens)&&(t.minBehaviorTokens===void 0||i.behaviorTokens.size>=t.minBehaviorTokens))}function fl(e,t){let n=t.replace(/\\/g,"/"),r=k(e,n);return wD.get(e,n,r,()=>ED(e,n,r)).map(PD)}function ED(e,t,n){let r=ce(e,t,n),i=pp.read(e,t,r);if(i)return i;let o=DD(e,t);return pp.write(e,t,r,o),o}function DD(e,t){let n=_D(t);if(!n)return[];let r=K(e,t);if(!r)return[];let i=Ce(e,t).length;return LD(r.rootNode,n).filter(s=>s.kind==="hook"||pl(s.bodyNode)).map(s=>{let a=$D(s.bodyNode),c=zD(s.bodyNode,n);return{file:t,name:s.name,kind:s.kind,startLine:s.node.startPosition.row,endLine:s.node.endPosition.row,loc:Math.max(1,s.node.endPosition.row-s.node.startPosition.row+1),fileLines:i,jsxTokens:a.tokens,behaviorTokens:c.tokens,componentNames:qt(a.componentNames),nativeTags:qt(a.nativeTags),propNames:qt(a.propNames),eventNames:qt(a.eventNames),hookNames:qt(c.hookNames),requestNames:qt(c.requestNames),stateNames:qt(c.stateNames),effectNames:qt(c.effectNames),handlerNames:qt(c.handlerNames)}})}function PD(e){return{...e,jsxTokens:new Set(e.jsxTokens),behaviorTokens:new Set(e.behaviorTokens),componentNames:[...e.componentNames],nativeTags:[...e.nativeTags],propNames:[...e.propNames],eventNames:[...e.eventNames],hookNames:[...e.hookNames],requestNames:[...e.requestNames],stateNames:[...e.stateNames],effectNames:[...e.effectNames],handlerNames:[...e.handlerNames]}}function kD(e){return JSON.stringify(e.map(t=>({...t,jsxTokens:[...t.jsxTokens],behaviorTokens:[...t.behaviorTokens]})))}function TD(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=[];for(let r of t){let i=FD(r);if(!i)return null;n.push(i)}return n}catch{return null}}function FD(e){if(!Et(e))return null;let{file:t,name:n,kind:r,startLine:i,endLine:o,loc:s,fileLines:a,jsxTokens:c,behaviorTokens:l,componentNames:u,nativeTags:d,propNames:m,eventNames:f,hookNames:p,requestNames:g,stateNames:y,effectNames:h,handlerNames:x}=e;if(typeof t!="string"||typeof n!="string"||r!=="component"&&r!=="hook"||!ms(i)||!ms(o)||!ms(s)||!ms(a))return null;let b={jsxTokens:Me(c),behaviorTokens:Me(l),componentNames:Me(u),nativeTags:Me(d),propNames:Me(m),eventNames:Me(f),hookNames:Me(p),requestNames:Me(g),stateNames:Me(y),effectNames:Me(h),handlerNames:Me(x)};return Object.values(b).some(C=>C===null)?null:{file:t,name:n,kind:r,startLine:i,endLine:o,loc:s,fileLines:a,jsxTokens:new Set(b.jsxTokens),behaviorTokens:new Set(b.behaviorTokens),componentNames:b.componentNames,nativeTags:b.nativeTags,propNames:b.propNames,eventNames:b.eventNames,hookNames:b.hookNames,requestNames:b.requestNames,stateNames:b.stateNames,effectNames:b.effectNames,handlerNames:b.handlerNames}}function ms(e){return typeof e=="number"&&Number.isFinite(e)}function _D(e){let t=yD(e).toLowerCase();return t!==".tsx"&&t!==".jsx"?null:M(e)}function LD(e,t){let n=[],r=new Set,i=o=>{let s=ND(o);if(s&&(!jD(o)||s.kind==="component")){let a=`${s.name}:${s.node.startIndex}:${s.node.endIndex}`;r.has(a)||(r.add(a),n.push(s))}for(let a of o.namedChildren)i(a)};return(t==="tsx"||t==="javascript")&&i(e),n}function ND(e){if(e.type==="class_declaration"){let o=ml(e);if(!o||!/^[A-Z]/.test(o))return null;let s=AD(e);return!s||!MD(e)&&!pl(s)?null:{name:o,kind:"component",node:e,bodyNode:s}}if(e.type==="function_declaration"){let o=ml(e);return!o||!gp(o)?null:{name:o,kind:hp(o),node:e,bodyNode:e}}if(e.type!=="variable_declarator")return null;let t=e.childForFieldName("name")??e.namedChild(0),n=e.childForFieldName("value")??e.namedChild(1),r=bi(t);if(!r||!n||!gp(r))return null;let i=OD(n);return i?{name:r,kind:hp(r),node:e,bodyNode:i}:null}function AD(e){for(let t of e.namedChildren)if(t.type==="class_body")for(let n of t.namedChildren){if(n.type!=="method_definition")continue;if((n.childForFieldName("name")??n.namedChild(0))?.text==="render")return n}return null}function MD(e){return/\b(?:React\.)?(?:Pure)?Component\b/.test(e.text)}function gp(e){return/^[A-Z]/.test(e)||/^use[A-Z0-9_]/.test(e)}function hp(e){return/^use[A-Z0-9_]/.test(e)?"hook":"component"}function OD(e){if(e.type==="arrow_function"||e.type==="function_expression")return e;if(e.type!=="call_expression")return null;let t=BD(e);return t!=="memo"&&t!=="forwardRef"?null:e.namedChildren.find(i=>i.type==="arguments")?.namedChildren.find(i=>i.type==="arrow_function"||i.type==="function_expression")??null}function jD(e){let t=e.parent;for(;t;){if(t.type==="function_declaration"||t.type==="function_expression"||t.type==="arrow_function"||t.type==="method_definition")return!0;t=t.parent}return!1}function ml(e){return bi(e.childForFieldName("name")??e.namedChild(0))}function BD(e){let t=e.childForFieldName("function")??e.namedChild(0);return t?t.text.split(".").pop()??t.text:null}function pl(e){return e.type.startsWith("jsx_")?!0:e.namedChildren.some(pl)}function $D(e){let t={tokens:new Set,componentNames:new Set,nativeTags:new Set,propNames:new Set,eventNames:new Set},n=r=>{r.type==="jsx_opening_element"||r.type==="jsx_self_closing_element"?HD(r,t):r.type==="jsx_element"&&r.text.trimStart().startsWith("<>")?t.tokens.add("jsx:fragment"):r.type==="jsx_expression"?UD(r,t):r.type==="jsx_fragment"&&t.tokens.add("jsx:fragment");for(let i of r.children)n(i)};return n(e),t}function HD(e,t){let n=WD(e),r=!1;if(n){let i=yp(n),o=i==="Fragment"||i==="React.Fragment";r=YD(i)&&!o,o?t.tokens.add("jsx:fragment"):r?(t.componentNames.add(i),t.tokens.add(`component:${i}`)):(t.nativeTags.add(i),t.tokens.add(`native:${i}`))}for(let i of e.namedChildren)if(i.type==="jsx_attribute"){let o=GD(i);if(!o)continue;let s=yp(o);if(s.startsWith("on")&&s.length>2){let a=s.slice(2).replace(/^[A-Z]/,c=>c.toLowerCase());t.eventNames.add(a),t.tokens.add(`event:${a}`)}else ID.has(s)||(t.propNames.add(s),t.tokens.add(`${r?"prop":"native-prop"}:${s}`))}else i.type==="jsx_spread_attribute"&&t.tokens.add(Sp(i))}function UD(e,t){let n=e.text;/^\{\s*\.\.\./.test(n)&&t.tokens.add(Sp(e)),Cp(e)&&t.tokens.add("jsx:conditional"),(n.includes(".map(")||n.includes(".flatMap("))&&t.tokens.add("jsx:list");for(let r of XD(n))Xo(r)||t.tokens.add(`binding:${r}`)}function Sp(e){let t=/^\{\s*\.\.\.\s*([^}]+)\s*\}$/.exec(e.text)?.[1],n=e.namedChildren.find(o=>o.type!=="comment"),r=t??n?.text??"",i=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*$/.exec(r.trim())?.[0];return i?`prop:spread:${i}`:"prop:spread"}function Cp(e){return e.type==="ternary_expression"||e.type==="conditional_expression"?!0:e.namedChildren.some(Cp)}function WD(e){for(let t of e.namedChildren)if(t.type==="identifier"||t.type==="jsx_identifier"||t.type==="property_identifier"||t.type==="member_expression"||t.type==="jsx_member_expression")return t.text;return/^<\s*([A-Za-z][\w$.]*)/.exec(e.text)?.[1]??null}function GD(e){for(let t of e.namedChildren)if(t.type==="property_identifier"||t.type==="identifier"||t.type==="jsx_identifier")return t.text;return/^([A-Za-z_$][\w$:-]*)/.exec(e.text)?.[1]??null}function zD(e,t){let n={tokens:new Set,hookNames:new Set,requestNames:new Set,stateNames:new Set,effectNames:new Set,handlerNames:new Set},r=i=>{if(i.type==="call_expression"){let o=xr(i,t);o&&VD(o.calleeLeaf,n)}else if(i.type==="variable_declarator")KD(i,n);else if(i.type==="function_declaration"){let o=ml(i);o&&xp(o,n)}for(let o of i.namedChildren)r(o)};return r(e),n}function VD(e,t){/^use[A-Z0-9_]/.test(e)&&(t.hookNames.add(e),!fp.has(e)&&!xD.has(e)&&t.tokens.add(`hook:${e}`)),fp.has(e)&&t.tokens.add(`react-hook:${e}`),SD.has(e)&&(t.effectNames.add(e),t.tokens.add(`effect:${e}`)),CD.has(e)&&t.tokens.add(`state-hook:${e}`),qD(e)&&(t.requestNames.add(e),t.tokens.add(`request:${e}`))}function qD(e){if(RD.has(e))return!0;let t=/^use([A-Z0-9_].*)$/.exec(e)?.[1];return t?/(Query|Mutation|Fetch|Resource)$/.test(t):!1}function KD(e,t){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);if(n?.type==="array_pattern"&&r?.text.includes("useState")){let o=n.namedChildren.find(a=>bi(a)),s=bi(o);s&&(t.stateNames.add(s),t.tokens.add(`state:${s}`))}let i=bi(n);i&&xp(i,t)}function xp(e,t){let n=JD(e);!n||!vD.has(n)||(t.handlerNames.add(e),t.tokens.add(`handler:${e}`),t.tokens.add(`handler-verb:${n}`))}function JD(e){let t=e.startsWith("handle")&&e.length>6?e.slice(6).replace(/^[A-Z]/,n=>n.toLowerCase()):e;return/^[a-z]+/.exec(t)?.[0]??null}function YD(e){return/^[A-Z]/.test(e)||e.includes(".")}function yp(e){return e.replace(/^this\./,"").replace(/\$/g,".")}function bi(e){return e&&(e.type==="identifier"||e.type==="property_identifier"||e.type==="shorthand_property_identifier"||/^[A-Za-z_$][\w$]*$/.test(e.text))?e.text:null}function XD(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let r=n[0];t.includes(r)||t.push(r)}return t}function qt(e){return[...e].sort()}function ot(e){return{capability:(t,n)=>QD(t,n),reactProfiles:(t={})=>bp(e,t),reactProfilesForFile:t=>fl(e,t),vueProfiles:(t={})=>dp(e,t),vueProfileForFile:t=>dl(e,t),vueTemplateFacts:t=>Zo(e,t),vueScriptFacts:t=>ds(Cr(e,t))}}function QD(e,t){let n=e.startsWith("react-")?"react":"vue";if(t===void 0)return{slot:e,available:!0,framework:n};let r=t.replace(/\\/g,"/").toLowerCase();return n==="react"&&!r.endsWith(".tsx")&&!r.endsWith(".jsx")?{slot:e,available:!1,framework:n,reason:"React behavior profiles are only available for .tsx and .jsx files"}:n==="vue"&&!r.endsWith(".vue")?{slot:e,available:!1,framework:n,reason:"Vue behavior facts are only available for .vue files"}:{slot:e,available:!0,framework:n}}function zn(e,t,n={}){let r=z(e,t);if(!r)return[];let i=[];if(n.includeCrossLanguageDispatchNames)for(let o of r.crossLanguageDispatchNames)i.push({name:o,kind:"cross-language-dispatch",occurrences:1});if(n.includeRustAttributeNames&&r.language==="rust")for(let o of r.rustAttrReferencedNames)i.push({name:o,kind:"rust-attribute",occurrences:1});return i}import{basename as Ip}from"path";function $(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function st(e){return e.replace(/'''[\s\S]*?'''/g,Sn).replace(/"""[\s\S]*?"""/g,Sn).replace(/#.*$/gm,Sn).replace(/\/\/.*$/gm,Sn).replace(/\/\*[\s\S]*?\*\//g,Sn).replace(/`(?:\\[\s\S]|[^`])*`/g,Sn).replace(/'(?:\\.|[^'\\\r\n])*'/g,Sn).replace(/"(?:\\.|[^"\\\r\n])*"/g,Sn)}function Ci(e){return vp(e,{maskStrings:!1})}function Rp(e){return vp(e,{maskStrings:!0})}function vp(e,t){let n="",r=0,i=e.length;for(;r<i;){if(e[r]==="/"&&e[r+1]==="/"){let s=e.indexOf(`
|
|
101
|
+
ORDER BY relative_path`,...i).map(a=>a.relative_path),s=t.extensions?o.filter(a=>t.extensions.some(c=>a.toLowerCase().endsWith(c.toLowerCase()))):o;return t.includeIgnored===!1?s.filter(a=>!e.isIgnored(a)):s}import{isAbsolute as Gw,relative as zw}from"path";function yn(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function ne(e){return e.replace(/\\/g,"/")}function Ve(e,t){return yn(e)===yn(t)}function FX(e,t){let n=zw(e,t);return n===""||!n.startsWith("..")&&!Gw(n)}import{existsSync as Zc,readFileSync as el,readdirSync as Vw,statSync as qw}from"fs";import{join as Rr,relative as Kw}from"path";function Ir(e){let t=Jw(e)??Zw(e);if(!t||t.length===0)return[];let n=[],r=new Set;for(let i of t)for(let o of tl(e,i)){if(r.has(o))continue;r.add(o);let s=eE(e,o);s&&n.push(s)}return n}function Jw(e){let t=Rr(e,"pnpm-workspace.yaml");if(!Zc(t))return null;try{return Yw(el(t,"utf8"))}catch{return null}}function Yw(e){let t=[],n=!1;for(let r of e.split(/\r?\n/)){let i=Xw(r);if(!n){/^packages\s*:\s*$/.test(i.trim())&&(n=!0);continue}let o=/^\s+-\s*(.+)$/.exec(i);if(o){let s=Qw(o[1].trim());s&&t.push(s);continue}if(i.trim()!=="")break}return t}function Xw(e){let t=e.indexOf("#");return t===-1?e:e.slice(0,t)}function Qw(e){return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e}function Zw(e){let t=Rr(e,"package.json");if(!Zc(t))return null;try{let n=JSON.parse(el(t,"utf8"));return n.workspaces?Array.isArray(n.workspaces)?n.workspaces:n.workspaces.packages??[]:null}catch{return null}}function tl(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=Rr(e,t);return Qc(s)?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=Rr(e,r||".");return Qc(o)?Vw(o).map(s=>Rr(o,s,i)).filter(Qc):[]}function Qc(e){try{return qw(e).isDirectory()}catch{return!1}}function eE(e,t){let n=Rr(t,"package.json");if(!Zc(n))return null;try{let r=JSON.parse(el(n,"utf8"));return typeof r.name!="string"||r.name.length===0?null:{name:r.name,relativeDir:Kw(e,t).replace(/\\/g,"/"),exports:r.exports}}catch{return null}}var rE=X("indexed-paths",{clearGroups:[]}),iE=X("indexed-path-digest",{clearGroups:[]}),oE=j("tsconfig-alias-config",{clearGroups:["whole-project"]}),sE=j("tsconfig-alias-config-for-dir",{clearGroups:["whole-project"]}),aE=tE(import.meta.url),yi;function cE(){if(yi!==void 0)return yi;try{yi=aE("typescript")}catch{yi=null}return yi}var lE=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"],uE=X("workspace-packages",{clearGroups:["whole-project"]}),Un=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],ts=[".py",".pyi"],Ke=[".java",".scala",".kt",".kts"],ns=[".rs"],rs=[".rb"],is=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],bn=[".cs",".vb"],os=[".dart"],Gn=[".php"],wr=[".clj",".cljs",".cljc"],dE=new Set(Un),nl=new Set(ts),Qf=new Set(Ke),rl=new Set(ns),il=new Set(rs),Zf=new Set(is),ep=new Set(bn),ol=new Set(os),tp=new Set(Gn),np=new Set(wr),mE=[{extensions:Un,lookup:dE},{extensions:ts,lookup:nl},{extensions:Ke,lookup:Qf},{extensions:ns,lookup:rl},{extensions:rs,lookup:il},{extensions:is,lookup:Zf},{extensions:bn,lookup:ep},{extensions:os,lookup:ol},{extensions:Gn,lookup:tp},{extensions:wr,lookup:np}];function Gt(e,t){return t.has(Wt(e).toLowerCase())}function fE(e){return Gt(e,nl)}function pE(e){return Gt(e,Qf)}function gE(e){return Gt(e,rl)}function hE(e){return Gt(e,il)}function yE(e){return Gt(e,Zf)}function bE(e){return Gt(e,ep)}function rp(e){return Wt(e).toLowerCase()===".vb"}function SE(e){return Gt(e,ol)}function CE(e){return Gt(e,tp)}function xE(e){return Gt(e,np)}function sl(e){let t=Wt(e).toLowerCase();for(let n of mE)if(n.lookup.has(t))return n.extensions;return Un}function vE(e){return pE(e)||bE(e)||CE(e)}function Je(e,t,n){return fE(t)?Er(e,t,n):gE(t)?zt(e,t,n):hE(t)?ss(e,t,n):yE(t)?as(e,t,n):vE(t)?be(e,n.replace(/\\/g,"."),sl(t)):SE(t)?cs(e,t,n):xE(t)?al(e,n):RE(e,t,n)}function RE(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return IE(e,t,n)??EE(e,n);let r=qe(it(e.config.projectRoot,t)),i=we(r,n),o=Vt(e);for(let s of ll(i)){let a=ne(Hn(e.config.projectRoot,s));if(o.has(a)||Wn(s))return a}return ne(Hn(e.config.projectRoot,i))}function IE(e,t,n){let r=_E(e,t);if(!r)return null;let i=Vt(e);for(let o of wE(r,n)){let s=we(r.baseUrl,o);for(let a of ll(s)){let c=ne(Hn(e.config.projectRoot,a));if(i.has(c)||Wn(a))return c}}return null}function wE(e,t){let n=[];for(let[r,i]of Object.entries(e.paths)){let o=r.indexOf("*");if(o===-1){if(t!==r)continue;n.push(...i);continue}let s=r.slice(0,o),a=r.slice(o+1);if(!t.startsWith(s)||!t.endsWith(a)||t.length<s.length+a.length)continue;let c=t.slice(s.length,t.length-a.length);for(let l of i)n.push(l.includes("*")?l.replace("*",c):l)}return n}function EE(e,t){let n=kE(DE(e),t);if(!n)return null;let r=Vt(e);for(let i of PE(n)){let o=we(e.config.projectRoot,n.pkg.relativeDir,i);for(let s of ll(o)){let a=ne(Hn(e.config.projectRoot,s));if(r.has(a)||Wn(s))return a}}return null}function DE(e){return uE.get(e,()=>Ir(e.config.projectRoot))}function kE(e,t){let n=null;for(let r of e){let i=null;t===r.name?i="":t.startsWith(`${r.name}/`)&&(i=t.slice(r.name.length+1)),i!==null&&(!n||r.name.length>n.pkg.name.length)&&(n={pkg:r,subpath:i})}return n}function PE(e){let t=[],n=TE(e.pkg.exports,e.subpath);if(n){let r=FE(n);r&&t.push(r)}return t.push(e.subpath?`src/${e.subpath}`:"src/index"),t}function TE(e,t){if(!e||typeof e!="object")return null;let n=t===""?".":`./${t}`;return ip(e[n])}function ip(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return null;let t=e;for(let n of["types","import","default","require","node"]){let r=ip(t[n]);if(r)return r}return null}function FE(e){let t=e.replace(/^\.\//,"");return t.startsWith("dist/")?`src/${t.slice(5)}`:null}function _E(e,t){let n=ne(qe(t));return sE.get(e,n,()=>LE(e,n))}function LE(e,t){let n=cE();if(!n)return null;let r=we(e.config.projectRoot),i=we(r,t);for(;i===r||i.startsWith(r+nE);){for(let s of lE){let a=it(i,s);if(!Wn(a))continue;let c=oE.get(e,a,()=>NE(n,a));if(c)return c}let o=qe(i);if(o===i)break;i=o}return null}function NE(e,t){try{let n=e.readConfigFile(t,e.sys.readFile);if(n.error||!n.config)return null;let r=e.parseJsonConfigFileContent(n.config,e.sys,qe(t)),i=r.options.paths;return!i||Object.keys(i).length===0?null:{baseUrl:r.options.baseUrl?we(qe(t),r.options.baseUrl):qe(t),paths:i}}catch{return null}}function Er(e,t,n){let r=Vt(e),i;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=qe(it(e.config.projectRoot,t));for(let l=1;l<s;l++)c=qe(c);i=a?we(c,a.replace(/\./g,"/")):c}else i=we(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of AE(i)){let s=ne(Hn(e.config.projectRoot,o));if(r.has(s)||Wn(o))return s}return null}function zt(e,t,n){if(!n)return null;let r=n.replace(/\s+as\s+.+$/,"").trim();if(!r.startsWith("crate::")&&!r.startsWith("self::")&&!r.startsWith("super::"))return null;let i=qe(it(e.config.projectRoot,t)),o;return r.startsWith("crate::")?o=we(e.config.projectRoot,"src",r.slice(7).replace(/::/g,"/")):r.startsWith("self::")?o=we(i,r.slice(6).replace(/::/g,"/")):o=we(qe(i),r.slice(7).replace(/::/g,"/")),cl(e,ME(o))}function ss(e,t,n){let r=qe(it(e.config.projectRoot,t)),i=we(r,n);return cl(e,OE(i))}function as(e,t,n){let r=qe(it(e.config.projectRoot,t)),i=[we(r,n),we(e.config.projectRoot,n),we(e.config.projectRoot,"include",n),we(e.config.projectRoot,"src",n)];return cl(e,i)}function be(e,t,n){let r=Vt(e),i=t.replace(/\\/g,".").replace(/::/g,".").replace(/^global::/,""),o=i.replace(/\./g,"/"),s=i.split(".").pop()??i;for(let c of n){let l=`${o}${c}`,u=[...r].find(d=>d.endsWith(l));if(u)return u}for(let c of n){let l=[...r].find(u=>Xf(u)===`${s}${c}`);if(l)return l}let a=[...r].filter(c=>n.includes(Wt(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function cs(e,t,n){let r=Vt(e);if(n.startsWith("package:")){let s=n.slice(8),a=s.indexOf("/");if(a<0)return null;let c=s.slice(a+1),l=ne(c.startsWith("lib/")?c:`lib/${c}`);return r.has(l)?l:null}let i=qe(it(e.config.projectRoot,t)),o=we(i,n);for(let s of jE(o)){let a=ne(Hn(e.config.projectRoot,s));if(r.has(a)||Wn(s))return a}return null}function al(e,t){let n=t.replace(/-/g,"_").replace(/\./g,"/"),r=Vt(e);for(let i of wr){let o=`${n}${i}`,s=[...r].find(a=>a.endsWith(o));if(s)return s}for(let i of wr){let o=[...r].find(s=>Xf(s)===`${n.split("/").pop()}${i}`);if(o)return o}return null}function AE(e){let t=Wt(e);return nl.has(t)?[e]:[`${e}.py`,`${e}.pyi`,it(e,"__init__.py"),it(e,"__init__.pyi")]}function cl(e,t){let n=Vt(e);for(let r of t){let i=ne(Hn(e.config.projectRoot,r));if(n.has(i)||Wn(r))return i}return null}function ME(e){let t=Wt(e);return rl.has(t)?[e]:[`${e}.rs`,it(e,"mod.rs")]}function OE(e){let t=Wt(e);return il.has(t)?[e]:[`${e}.rb`,it(e,"index.rb")]}function jE(e){let t=Wt(e);return ol.has(t)?[e]:[`${e}.dart`,e]}function ll(e){let t=Wt(e),n=new Set;if(t){n.add(e);for(let r of Un)n.add(e.slice(0,-t.length)+r)}else for(let r of Un)n.add(`${e}${r}`),n.add(it(e,`index${r}`));return[...n]}function Vt(e){return rE.get(e,()=>new Set(N(e,{includeIgnored:!1}).map(ne)))}function ul(e){return iE.get(e,()=>he([...Vt(e)].sort().join(`
|
|
102
|
+
`)))}import{readdirSync as BE}from"fs";import{execFileSync as $E}from"child_process";import{extname as ls,join as HE}from"path";var UE=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue",".rs",".py",".pyi",".java",".kt",".kts",".scala",".sc",".clj",".cljs",".cljc",".rb",".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx",".cs",".vb",".php",".dart"],YX=[".vue"],op=[".tsx",".jsx"],sp=[".vue"],WE=[...op,...sp],GE=new Set(op),zE=new Set(sp),ap=new Set(UE.map(e=>e.toLowerCase())),VE=[...ap].sort().join(","),cp=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo",".nbb",".cpcache",".shadow-cljs","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);function $e(e,t={}){let n=t.includeIndexed??!0,r=t.includeAuxiliary??!0,i=t.extensions?.map(c=>c.toLowerCase()),o=i?new Set(i):ap,s=i?[...o].sort().join(","):VE,a=`${n?"1":"0"}|${r?"1":"0"}|${s}`;return qE.get(e,a,()=>{let c=new Set;if(n)for(let l of N(e,{includeIgnored:!1}))o.has(ls(l).toLowerCase())&&c.add(l);if(r)for(let l of KE(e.config.projectRoot,o))e.isIgnored(l)||n&&c.has(l)||c.add(l);return[...c].sort()})}function us(e,t={}){let n=!1,r=!1;for(let i of $e(e,{extensions:WE})){if(t.scope&&!i.includes(t.scope))continue;let o=ls(i).toLowerCase();if(n||=GE.has(o),r||=zE.has(o),n&&r)break}return{react:n,vue:r}}var qE=j("source-files",{clearGroups:[]});function KE(e,t){return JE(e,t)??XE(e,t)}function JE(e,t){try{let n=$E("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e,encoding:"utf-8",timeout:1e4,stdio:["ignore","pipe","ignore"]}),r=new Set;for(let i of n.split(`
|
|
103
|
+
`)){let o=i.trim();o&&(YE(o)||t.has(ls(o).toLowerCase())&&r.add(o))}return r}catch{return null}}function YE(e){return e.split("/").some(t=>cp.has(t))}function XE(e,t){let n=new Set,r=i=>{let o=i?HE(e,i):e,s;try{s=BE(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!cp.has(a.name)){if(a.isDirectory()){r(i?`${i}/${a.name}`:a.name);continue}t.has(ls(a.name).toLowerCase())&&n.add(i?`${i}/${a.name}`:a.name)}};return r(""),n}var QE=new Set(["ref","shallowRef","reactive","computed","watch","watchEffect"]),ZE=new Set(["onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onUnmounted","onActivated","onDeactivated","onErrorCaptured"]),eD=new Set(["axios","fetch","runRequest","useAsyncData","useFetch","useResource"]),tD=new Set(["defineEmits","defineExpose","defineModel","defineOptions","defineProps","withDefaults"]),nD=new Set(["catch","for","function","if","return","switch","while"]);function ms(e){let t={imports:[],functions:[],calls:[],composables:[],stores:[],reactivity:[],lifecycle:[],requests:[],macros:[],lineCount:0,externalLineCount:0,externalScriptPaths:[],unresolvedScripts:[]};for(let n of e.scripts){t.lineCount+=jn(n),n.external&&(t.externalLineCount+=jn(n),t.externalScriptPaths.push(n.sourcePath));for(let i of n.errors)t.unresolvedScripts.push({sourcePath:n.sourcePath,reason:i});if(!n.body||!n.astLanguage){n.astLanguage||t.unresolvedScripts.push({sourcePath:n.sourcePath,reason:`Unsupported Vue script language: ${n.lang??"unknown"}`});continue}t.imports.push(...sD(n));let r=di(n.astLanguage,n.body);r?iD(n,r.rootNode,t):oD(n,t)}return rD(t),t.externalScriptPaths=up(t.externalScriptPaths),t}function rD(e){e.composables=Dr(e,"composable"),e.stores=Dr(e,"store"),e.reactivity=Dr(e,"reactivity"),e.lifecycle=Dr(e,"lifecycle"),e.requests=Dr(e,"request"),e.macros=Dr(e,"macro")}function Dr(e,t){return up(e.calls.filter(n=>n.categories.includes(t)).map(n=>n.name))}function iD(e,t,n){let r=new Set,i=new Set,o=s=>{let a=Jo(s,e.astLanguage);if(a){let l=`${a.name}:${a.startLine}:${a.endLine}`;i.has(l)||(i.add(l),n.functions.push({name:a.name,sourcePath:e.sourcePath,startLine:e.startLine+a.startLine,endLine:e.startLine+a.endLine,setup:e.setup}))}let c=xr(s,e.astLanguage);if(c){let l=`${c.calleeLeaf}:${c.line}`;r.has(l)||(r.add(l),n.calls.push({name:c.calleeLeaf,sourcePath:e.sourcePath,line:e.startLine+c.line,categories:lp(c.calleeLeaf),setup:e.setup}))}for(let l of s.children)o(l)};o(t)}function oD(e,t){for(let n of e.body.matchAll(/\b([A-Za-z_$][\w$]*)\s*\(/g)){let r=n[1];!r||nD.has(r)||t.calls.push({name:r,sourcePath:e.sourcePath,line:e.startLine+ds(e.body,n.index??0),categories:lp(r),setup:e.setup})}for(let n of e.body.matchAll(/\bfunction\s+([A-Za-z_$][\w$]*)\b/g)){let r=n[1];if(!r)continue;let i=e.startLine+ds(e.body,n.index??0);t.functions.push({name:r,sourcePath:e.sourcePath,startLine:i,endLine:i,setup:e.setup})}for(let n of e.body.matchAll(/\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?(?:function\b|\([^)]*\)\s*=>|[A-Za-z_$][\w$]*\s*=>)/g)){let r=n[1];if(!r)continue;let i=e.startLine+ds(e.body,n.index??0);t.functions.push({name:r,sourcePath:e.sourcePath,startLine:i,endLine:i,setup:e.setup})}}function sD(e){let t=[];for(let n of e.body.matchAll(/\bimport\s+(?:type\s+)?([^'";]+?)\s+from\s+['"]([^'"]+)['"]/g)){let r=n[1]?.trim(),i=n[2];if(!r||!i)continue;let o=e.startLine+ds(e.body,n.index??0);for(let s of aD(r))t.push({local:s,source:i,sourcePath:e.sourcePath,line:o,setup:e.setup})}return t}function aD(e){let t=[],r=e.split(",").map(s=>s.trim()).filter(Boolean)[0];r&&!r.startsWith("{")&&!r.startsWith("*")&&t.push(r);let i=/\{([^}]*)\}/.exec(e)?.[1];if(i)for(let s of i.split(",")){let a=s.trim();if(!a)continue;let c=/\bas\s+([A-Za-z_$][\w$]*)$/.exec(a)?.[1];t.push(c??a.replace(/^type\s+/,"").trim())}let o=/\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(e)?.[1];return o&&t.push(o),t.filter(s=>/^[A-Za-z_$][\w$]*$/.test(s))}function lp(e){let t=["call"];return/^use[A-Z0-9_]/.test(e)&&t.push("composable"),/^use[A-Z0-9_].*Store$/.test(e)&&t.push("store"),QE.has(e)&&t.push("reactivity"),ZE.has(e)&&t.push("lifecycle"),eD.has(e)&&t.push("request"),tD.has(e)&&t.push("macro"),t}function ds(e,t){let n=0;for(let r=0;r<t&&r<e.length;r+=1)e.charCodeAt(r)===10&&(n+=1);return n}function up(e){return[...new Set(e)].sort()}var cD=new Set(["in","key","of"]),lD=new Set(["computed","defineEmits","defineProps","reactive","ref","watch","watchEffect"]),uD=fn("vue-component-behavior-profiles");function dp(e,t={}){let n=$e(e,{extensions:[".vue"]}).filter(i=>!t.scope||i.includes(t.scope)).sort();return(typeof t.scanLimit=="number"&&t.scanLimit>0?n.slice(0,t.scanLimit):n).map(i=>dl(e,i)).filter(i=>(t.minTemplateTokens===void 0||i.templateTokens.size>=t.minTemplateTokens)&&(t.minBehaviorTokens===void 0||i.behaviorTokens.size>=t.minBehaviorTokens))}function dl(e,t){let n=t.replace(/\\/g,"/"),r=P(e,n),i=uD.get(e,n,r,()=>dD(e,n,r));return fD(i)}function dD(e,t,n){let r=Cr(e,t),i=es(e,t),o=ms(r),s=hD(i),a=i.expressionIdentifiers.map(y=>y.name).filter(y=>!s.includes(y)).filter((y,h,x)=>x.indexOf(y)===h).sort(),c=i.componentTags.map(y=>y.normalized).filter((y,h,x)=>x.indexOf(y)===h).sort(),l=n?n.split(`
|
|
104
|
+
`).length:0,u=jn(r.template),d=o.lineCount,m=r.styles.reduce((y,h)=>y+jn(h),0),f=r.customBlocks.reduce((y,h)=>y+jn(h),0),{lines:p,paths:g}=mD(e,t,o);return{file:t,sfc:r,templateFacts:i,scriptFacts:o,templateTokens:new Set(i.structuralTokens),behaviorTokens:gD(i,o,a),templateBindingNames:a,templateLocalNames:s,componentNames:c,sfcLines:l,totalLines:l+o.externalLineCount,templateLines:u,scriptLines:d,styleLines:m,externalScriptLines:o.externalLineCount,externalScriptPaths:o.externalScriptPaths,customBlockLines:f,delegatedComposableLines:p,delegatedComposablePaths:g}}function mD(e,t,n){let r=new Set;for(let s of n.composables){let a=n.imports.find(l=>l.local===s);if(!a)continue;let c=Je(e,a.sourcePath,a.source);!c||c===t||r.add(c)}let i=[...r].sort();return{lines:i.reduce((s,a)=>{let c=P(e,a);return s+(c?c.split(`
|
|
105
|
+
`).length:0)},0),paths:i}}function fD(e){let t=pD(e.scriptFacts);return{...e,scriptFacts:t,templateTokens:new Set(e.templateTokens),behaviorTokens:new Set(e.behaviorTokens),templateBindingNames:[...e.templateBindingNames],templateLocalNames:[...e.templateLocalNames],componentNames:[...e.componentNames],externalScriptPaths:t.externalScriptPaths,delegatedComposablePaths:[...e.delegatedComposablePaths]}}function pD(e){return{...e,imports:e.imports.map(t=>({...t})),functions:e.functions.map(t=>({...t})),calls:e.calls.map(t=>({...t,categories:[...t.categories]})),composables:[...e.composables],stores:[...e.stores],reactivity:[...e.reactivity],lifecycle:[...e.lifecycle],requests:[...e.requests],macros:[...e.macros],externalScriptPaths:[...e.externalScriptPaths],unresolvedScripts:e.unresolvedScripts.map(t=>({...t}))}}function gD(e,t,n){let r=new Set;for(let i of t.composables)r.add(`composable:${i}`);for(let i of t.stores)r.add(`store:${i}`);for(let i of t.reactivity)r.add(`reactivity:${i}`);for(let i of t.lifecycle)r.add(`lifecycle:${i}`);for(let i of t.requests)r.add(`request:${i}`);for(let i of t.macros)r.add(`macro:${i}`);for(let i of t.functions){if(lD.has(i.name))continue;r.add(`function:${i.name}`);let o=/^[a-z]+/.exec(i.name)?.[0]??null;o&&o.length>2&&o!==i.name&&r.add(`function-verb:${o}`)}for(let i of e.events)r.add(`template-event:${i.name}`);for(let i of n)r.add(`template-binding:${i}`);return r}function hD(e){let t=new Set;for(let n of e.directives)if(n.name==="for"&&n.value)for(let r of yD(n.value))t.add(r);for(let n of e.slots)if(n.value)for(let r of mp(n.value))t.add(r);return[...t].sort()}function yD(e){let t=/^(.*?)\s+(?:in|of)\s+/.exec(e.trim());return t?mp(t[1]??""):[]}function mp(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let r=n[0];cD.has(r)||t.push(r)}return t}import{extname as bD}from"path";function Et(e){return typeof e=="object"&&e!==null}function Me(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")?e:null}var SD=[".tsx",".jsx"],fp=new Set(["useActionState","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","useReducer","useRef","useState","useSyncExternalStore","useTransition"]),CD=new Set(["useEffect","useInsertionEffect","useLayoutEffect"]),xD=new Set(["useActionState","useOptimistic","useReducer","useRef","useState"]),vD=new Set(["useLocation","useNavigate","useParams","useSearchParams","useTranslation"]),RD=new Set(["axios","fetch","gql","graphql","mutate","query","request","useMutation","useQuery","useSuspenseQuery"]),ID=new Set(["add","apply","cancel","change","clear","close","create","delete","fetch","filter","handle","load","open","refresh","remove","render","reset","save","select","submit","toggle","update"]),wD=new Set(["aria-hidden","className","clipRule","d","fill","fillRule","height","role","stroke","strokeLinecap","strokeLinejoin","strokeWidth","style","viewBox","width","xmlns"]),ED=fn("react-component-behavior-profiles"),pp=oe({kind:"react-component-behavior-profiles",invalidation:J("react-component-behavior-profiles"),serialize:TD,deserialize:FD});function bp(e,t={}){let n=$e(e,{extensions:SD}).filter(i=>!t.scope||i.includes(t.scope)).sort();return(typeof t.scanLimit=="number"&&t.scanLimit>0?n.slice(0,t.scanLimit):n).flatMap(i=>fl(e,i)).filter(i=>(t.minJsxTokens===void 0||i.jsxTokens.size>=t.minJsxTokens)&&(t.minBehaviorTokens===void 0||i.behaviorTokens.size>=t.minBehaviorTokens))}function fl(e,t){let n=t.replace(/\\/g,"/"),r=P(e,n);return ED.get(e,n,r,()=>DD(e,n,r)).map(PD)}function DD(e,t,n){let r=ce(e,t,n),i=pp.read(e,t,r);if(i)return i;let o=kD(e,t);return pp.write(e,t,r,o),o}function kD(e,t){let n=LD(t);if(!n)return[];let r=K(e,t);if(!r)return[];let i=Ce(e,t).length;return ND(r.rootNode,n).filter(s=>s.kind==="hook"||pl(s.bodyNode)).map(s=>{let a=HD(s.bodyNode),c=VD(s.bodyNode,n);return{file:t,name:s.name,kind:s.kind,startLine:s.node.startPosition.row,endLine:s.node.endPosition.row,loc:Math.max(1,s.node.endPosition.row-s.node.startPosition.row+1),fileLines:i,jsxTokens:a.tokens,behaviorTokens:c.tokens,componentNames:qt(a.componentNames),nativeTags:qt(a.nativeTags),propNames:qt(a.propNames),eventNames:qt(a.eventNames),hookNames:qt(c.hookNames),requestNames:qt(c.requestNames),stateNames:qt(c.stateNames),effectNames:qt(c.effectNames),handlerNames:qt(c.handlerNames)}})}function PD(e){return{...e,jsxTokens:new Set(e.jsxTokens),behaviorTokens:new Set(e.behaviorTokens),componentNames:[...e.componentNames],nativeTags:[...e.nativeTags],propNames:[...e.propNames],eventNames:[...e.eventNames],hookNames:[...e.hookNames],requestNames:[...e.requestNames],stateNames:[...e.stateNames],effectNames:[...e.effectNames],handlerNames:[...e.handlerNames]}}function TD(e){return JSON.stringify(e.map(t=>({...t,jsxTokens:[...t.jsxTokens],behaviorTokens:[...t.behaviorTokens]})))}function FD(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=[];for(let r of t){let i=_D(r);if(!i)return null;n.push(i)}return n}catch{return null}}function _D(e){if(!Et(e))return null;let{file:t,name:n,kind:r,startLine:i,endLine:o,loc:s,fileLines:a,jsxTokens:c,behaviorTokens:l,componentNames:u,nativeTags:d,propNames:m,eventNames:f,hookNames:p,requestNames:g,stateNames:y,effectNames:h,handlerNames:x}=e;if(typeof t!="string"||typeof n!="string"||r!=="component"&&r!=="hook"||!fs(i)||!fs(o)||!fs(s)||!fs(a))return null;let b={jsxTokens:Me(c),behaviorTokens:Me(l),componentNames:Me(u),nativeTags:Me(d),propNames:Me(m),eventNames:Me(f),hookNames:Me(p),requestNames:Me(g),stateNames:Me(y),effectNames:Me(h),handlerNames:Me(x)};return Object.values(b).some(C=>C===null)?null:{file:t,name:n,kind:r,startLine:i,endLine:o,loc:s,fileLines:a,jsxTokens:new Set(b.jsxTokens),behaviorTokens:new Set(b.behaviorTokens),componentNames:b.componentNames,nativeTags:b.nativeTags,propNames:b.propNames,eventNames:b.eventNames,hookNames:b.hookNames,requestNames:b.requestNames,stateNames:b.stateNames,effectNames:b.effectNames,handlerNames:b.handlerNames}}function fs(e){return typeof e=="number"&&Number.isFinite(e)}function LD(e){let t=bD(e).toLowerCase();return t!==".tsx"&&t!==".jsx"?null:M(e)}function ND(e,t){let n=[],r=new Set,i=o=>{let s=AD(o);if(s&&(!BD(o)||s.kind==="component")){let a=`${s.name}:${s.node.startIndex}:${s.node.endIndex}`;r.has(a)||(r.add(a),n.push(s))}for(let a of o.namedChildren)i(a)};return(t==="tsx"||t==="javascript")&&i(e),n}function AD(e){if(e.type==="class_declaration"){let o=ml(e);if(!o||!/^[A-Z]/.test(o))return null;let s=MD(e);return!s||!OD(e)&&!pl(s)?null:{name:o,kind:"component",node:e,bodyNode:s}}if(e.type==="function_declaration"){let o=ml(e);return!o||!gp(o)?null:{name:o,kind:hp(o),node:e,bodyNode:e}}if(e.type!=="variable_declarator")return null;let t=e.childForFieldName("name")??e.namedChild(0),n=e.childForFieldName("value")??e.namedChild(1),r=bi(t);if(!r||!n||!gp(r))return null;let i=jD(n);return i?{name:r,kind:hp(r),node:e,bodyNode:i}:null}function MD(e){for(let t of e.namedChildren)if(t.type==="class_body")for(let n of t.namedChildren){if(n.type!=="method_definition")continue;if((n.childForFieldName("name")??n.namedChild(0))?.text==="render")return n}return null}function OD(e){return/\b(?:React\.)?(?:Pure)?Component\b/.test(e.text)}function gp(e){return/^[A-Z]/.test(e)||/^use[A-Z0-9_]/.test(e)}function hp(e){return/^use[A-Z0-9_]/.test(e)?"hook":"component"}function jD(e){if(e.type==="arrow_function"||e.type==="function_expression")return e;if(e.type!=="call_expression")return null;let t=$D(e);return t!=="memo"&&t!=="forwardRef"?null:e.namedChildren.find(i=>i.type==="arguments")?.namedChildren.find(i=>i.type==="arrow_function"||i.type==="function_expression")??null}function BD(e){let t=e.parent;for(;t;){if(t.type==="function_declaration"||t.type==="function_expression"||t.type==="arrow_function"||t.type==="method_definition")return!0;t=t.parent}return!1}function ml(e){return bi(e.childForFieldName("name")??e.namedChild(0))}function $D(e){let t=e.childForFieldName("function")??e.namedChild(0);return t?t.text.split(".").pop()??t.text:null}function pl(e){return e.type.startsWith("jsx_")?!0:e.namedChildren.some(pl)}function HD(e){let t={tokens:new Set,componentNames:new Set,nativeTags:new Set,propNames:new Set,eventNames:new Set},n=r=>{r.type==="jsx_opening_element"||r.type==="jsx_self_closing_element"?UD(r,t):r.type==="jsx_element"&&r.text.trimStart().startsWith("<>")?t.tokens.add("jsx:fragment"):r.type==="jsx_expression"?WD(r,t):r.type==="jsx_fragment"&&t.tokens.add("jsx:fragment");for(let i of r.children)n(i)};return n(e),t}function UD(e,t){let n=GD(e),r=!1;if(n){let i=yp(n),o=i==="Fragment"||i==="React.Fragment";r=XD(i)&&!o,o?t.tokens.add("jsx:fragment"):r?(t.componentNames.add(i),t.tokens.add(`component:${i}`)):(t.nativeTags.add(i),t.tokens.add(`native:${i}`))}for(let i of e.namedChildren)if(i.type==="jsx_attribute"){let o=zD(i);if(!o)continue;let s=yp(o);if(s.startsWith("on")&&s.length>2){let a=s.slice(2).replace(/^[A-Z]/,c=>c.toLowerCase());t.eventNames.add(a),t.tokens.add(`event:${a}`)}else wD.has(s)||(t.propNames.add(s),t.tokens.add(`${r?"prop":"native-prop"}:${s}`))}else i.type==="jsx_spread_attribute"&&t.tokens.add(Sp(i))}function WD(e,t){let n=e.text;/^\{\s*\.\.\./.test(n)&&t.tokens.add(Sp(e)),Cp(e)&&t.tokens.add("jsx:conditional"),(n.includes(".map(")||n.includes(".flatMap("))&&t.tokens.add("jsx:list");for(let r of QD(n))Qo(r)||t.tokens.add(`binding:${r}`)}function Sp(e){let t=/^\{\s*\.\.\.\s*([^}]+)\s*\}$/.exec(e.text)?.[1],n=e.namedChildren.find(o=>o.type!=="comment"),r=t??n?.text??"",i=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*$/.exec(r.trim())?.[0];return i?`prop:spread:${i}`:"prop:spread"}function Cp(e){return e.type==="ternary_expression"||e.type==="conditional_expression"?!0:e.namedChildren.some(Cp)}function GD(e){for(let t of e.namedChildren)if(t.type==="identifier"||t.type==="jsx_identifier"||t.type==="property_identifier"||t.type==="member_expression"||t.type==="jsx_member_expression")return t.text;return/^<\s*([A-Za-z][\w$.]*)/.exec(e.text)?.[1]??null}function zD(e){for(let t of e.namedChildren)if(t.type==="property_identifier"||t.type==="identifier"||t.type==="jsx_identifier")return t.text;return/^([A-Za-z_$][\w$:-]*)/.exec(e.text)?.[1]??null}function VD(e,t){let n={tokens:new Set,hookNames:new Set,requestNames:new Set,stateNames:new Set,effectNames:new Set,handlerNames:new Set},r=i=>{if(i.type==="call_expression"){let o=xr(i,t);o&&qD(o.calleeLeaf,n)}else if(i.type==="variable_declarator")JD(i,n);else if(i.type==="function_declaration"){let o=ml(i);o&&xp(o,n)}for(let o of i.namedChildren)r(o)};return r(e),n}function qD(e,t){/^use[A-Z0-9_]/.test(e)&&(t.hookNames.add(e),!fp.has(e)&&!vD.has(e)&&t.tokens.add(`hook:${e}`)),fp.has(e)&&t.tokens.add(`react-hook:${e}`),CD.has(e)&&(t.effectNames.add(e),t.tokens.add(`effect:${e}`)),xD.has(e)&&t.tokens.add(`state-hook:${e}`),KD(e)&&(t.requestNames.add(e),t.tokens.add(`request:${e}`))}function KD(e){if(RD.has(e))return!0;let t=/^use([A-Z0-9_].*)$/.exec(e)?.[1];return t?/(Query|Mutation|Fetch|Resource)$/.test(t):!1}function JD(e,t){let n=e.childForFieldName("name")??e.namedChild(0),r=e.childForFieldName("value")??e.namedChild(1);if(n?.type==="array_pattern"&&r?.text.includes("useState")){let o=n.namedChildren.find(a=>bi(a)),s=bi(o);s&&(t.stateNames.add(s),t.tokens.add(`state:${s}`))}let i=bi(n);i&&xp(i,t)}function xp(e,t){let n=YD(e);!n||!ID.has(n)||(t.handlerNames.add(e),t.tokens.add(`handler:${e}`),t.tokens.add(`handler-verb:${n}`))}function YD(e){let t=e.startsWith("handle")&&e.length>6?e.slice(6).replace(/^[A-Z]/,n=>n.toLowerCase()):e;return/^[a-z]+/.exec(t)?.[0]??null}function XD(e){return/^[A-Z]/.test(e)||e.includes(".")}function yp(e){return e.replace(/^this\./,"").replace(/\$/g,".")}function bi(e){return e&&(e.type==="identifier"||e.type==="property_identifier"||e.type==="shorthand_property_identifier"||/^[A-Za-z_$][\w$]*$/.test(e.text))?e.text:null}function QD(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let r=n[0];t.includes(r)||t.push(r)}return t}function qt(e){return[...e].sort()}function ot(e){return{capability:(t,n)=>ZD(t,n),reactProfiles:(t={})=>bp(e,t),reactProfilesForFile:t=>fl(e,t),vueProfiles:(t={})=>dp(e,t),vueProfileForFile:t=>dl(e,t),vueTemplateFacts:t=>es(e,t),vueScriptFacts:t=>ms(Cr(e,t))}}function ZD(e,t){let n=e.startsWith("react-")?"react":"vue";if(t===void 0)return{slot:e,available:!0,framework:n};let r=t.replace(/\\/g,"/").toLowerCase();return n==="react"&&!r.endsWith(".tsx")&&!r.endsWith(".jsx")?{slot:e,available:!1,framework:n,reason:"React behavior profiles are only available for .tsx and .jsx files"}:n==="vue"&&!r.endsWith(".vue")?{slot:e,available:!1,framework:n,reason:"Vue behavior facts are only available for .vue files"}:{slot:e,available:!0,framework:n}}function zn(e,t,n={}){let r=z(e,t);if(!r)return[];let i=[];if(n.includeCrossLanguageDispatchNames)for(let o of r.crossLanguageDispatchNames)i.push({name:o,kind:"cross-language-dispatch",occurrences:1});if(n.includeRustAttributeNames&&r.language==="rust")for(let o of r.rustAttrReferencedNames)i.push({name:o,kind:"rust-attribute",occurrences:1});return i}import{basename as Ip}from"path";function $(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function st(e){return e.replace(/'''[\s\S]*?'''/g,Sn).replace(/"""[\s\S]*?"""/g,Sn).replace(/#.*$/gm,Sn).replace(/\/\/.*$/gm,Sn).replace(/\/\*[\s\S]*?\*\//g,Sn).replace(/`(?:\\[\s\S]|[^`])*`/g,Sn).replace(/'(?:\\.|[^'\\\r\n])*'/g,Sn).replace(/"(?:\\.|[^"\\\r\n])*"/g,Sn)}function Ci(e){return Rp(e,{maskStrings:!1})}function vp(e){return Rp(e,{maskStrings:!0})}function Rp(e,t){let n="",r=0,i=e.length;for(;r<i;){if(e[r]==="/"&&e[r+1]==="/"){let s=e.indexOf(`
|
|
106
106
|
`,r),a=s===-1?i:s;n+=gl(e,r,a),r=a;continue}if(e[r]==="/"&&e[r+1]==="*"){let s=e.indexOf("*/",r+2),a=s===-1?i:s+2;n+=gl(e,r,a),r=a;continue}let o=e[r];if(o==="`"||o==="'"||o==='"'){let s=o,a=r+1;for(;a<i;){if(e[a]==="\\"){a+=2;continue}if(e[a]===s){a+=1;break}if(s!=="`"&&e[a]===`
|
|
107
107
|
`)break;a+=1}n+=t.maskStrings?gl(e,r,a):e.slice(r,a),r=a;continue}n+=o,r+=1}return n}function gl(e,t,n){let r="";for(let i=t;i<n;i+=1)r+=e[i]===`
|
|
108
108
|
`?`
|
|
109
|
-
`:" ";return r}function Sn(e){return e.replace(/[^\r\n]/g," ")}var
|
|
109
|
+
`:" ";return r}function Sn(e){return e.replace(/[^\r\n]/g," ")}var GQ=On("stripped-lines",{clearGroups:["whole-project","source-file"]});mn({name:"stripped-source-singleton",groups:["whole-project","source-file"],clearAll:()=>{ps=null,Si=""},clearFile:()=>{ps=null,Si=""}});var ps=null,Si="";function ek(e){return ps===e||(ps=e,Si=st(e)),Si}function Cn(e,t,n){let r=ek(e);return`${r.slice(0,t)}${" ".repeat(n-t)}${r.slice(n)}`}function He(e,t){return new RegExp(`\\b${$(t)}\\b`,"m").test(e)}function kr(e,t){let n=new Set,r=new RegExp(`\\b${$(t)}\\s*\\.\\s*([A-Za-z_$][\\w$]*)`,"g");for(let i of e.matchAll(r)){let o=i[1];o&&n.add(o)}return[...n]}function xi(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var tk=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function Ue(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let o=e[i];(o==="{"||o==="["||o==="(")&&n++,(o==="}"||o==="]"||o===")")&&n--,o===","&&n===0&&(t.push(e.slice(r,i)),r=i+1)}return t.push(e.slice(r)),t}function Ye(e,t){for(let n of e.namedChildren)if(n.type===t)return n;return null}function Se(e,t){let n=new Set,r=(i,o)=>{let s=o||t.has(i.type);!s&&tk.has(i.type)&&n.add(i.text);for(let a of i.children)r(a,s)};return r(e.rootNode,!1),n}function bt(e,t,n,r,i,o,s){return{importedName:i,localName:o,sourcePath:s??be(e,r,sl(t)),kind:"named",used:He(n,o),usedMembers:[]}}function pe(e,t,n,r,i="named",o={}){return{importedName:e,localName:t,sourcePath:n,kind:i,used:r.has(t),usedMembers:[],isTypeOnly:o.isTypeOnly}}function Kt(e,t,n,r,i="named",o=[],s={}){return{importedName:e,localName:t,sourcePath:n,kind:i,used:r,usedMembers:o,isTypeOnly:s.isTypeOnly}}function Vn(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function qn(e,t,n={}){return{importedName:e,localName:n.localName??null,sourcePath:t,kind:"namespace",used:n.used??!0,usedMembers:n.usedMembers??[],isTypeOnly:n.isTypeOnly}}function at(e,t,n){let r=[];for(let i of e.matchAll(t)){let o=i[0];if(!o||typeof i.index!="number")continue;let s=Cn(e,i.index,i.index+o.length);for(let a of n(i,s))r.push(a)}return r}function ct(e,t,n,r){let i=K(e,t);if(i){let o=n(i);if(o)return o}return r()}function gs(e,t,n,r){let i=K(e,t),o=M(t),s=o?n[o]:void 0;return i&&s?s(i):r()}function wp(e,t,n){return ct(e,t,r=>rk(e,t,r),()=>nk(e,t,n))}function nk(e,t,n){return at(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(r,i)=>{let o=r[1]?.trim();if(!o)return[];let s=Ip(o).replace(/\.[^.]+$/,"");return[Kt(o,s,as(e,t,o),He(i,s))]})}function rk(e,t,n){let r=Se(n,new Set(["preproc_include"])),i=[];for(let o of n.rootNode.descendantsOfType("preproc_include")){let s=null;for(let c of o.namedChildren){if(c.type==="system_lib_string"){s=c.text.replace(/^<|>$/g,"");break}if(c.type==="string_literal"){s=c.namedChildren.find(u=>u.type==="string_content")?.text??c.text.replace(/^"|"$/g,"");break}}if(!s)continue;let a=Ip(s).replace(/\.[^.]+$/,"");i.push(pe(s,a,as(e,t,s),r))}return i}var ik=new Set([":require",":require-macros",":use"]),bl=String.raw`A-Za-z0-9_$*+!?.<>=-`;function Dp(e,t,n){let r=gk(n);if(!r)return[];let i=pk(n,r.start,r.end),o=[];for(let s of r.children.slice(2)){if(s.type!=="list"||s.children.length===0)continue;let a=lt(s.children[0]);if(a){if(ik.has(a)){for(let c of ak(s.children.slice(1)))o.push(...sk(e,c,i));continue}if(a===":import")for(let c of lk(s.children.slice(1)))o.push(c)}}return o}function ok(e){return e.type==="list"&<(e.children[0])==="ns"}function sk(e,t,n){let r=al(e,t.namespace),i=t.alias??t.namespace,o=dk(n,i),s=[{importedName:t.namespace,localName:i,sourcePath:r,kind:"namespace",used:t.refers.length>0||t.referAll||o.length>0||mk(n,t.namespace),usedMembers:o}];t.referAll&&s.push({importedName:"*",localName:null,sourcePath:r,kind:"side-effect",used:!0,usedMembers:[]});for(let a of t.refers)s.push({importedName:a,localName:a,sourcePath:r,kind:"named",used:fk(n,a),usedMembers:[]});return s}function ak(e){return e.flatMap(t=>hs(t,null))}function hs(e,t){if(e.type==="atom")return e.text.startsWith(":")?[]:[{namespace:yl(t,e.text),alias:null,refers:[],referAll:!1}];if(e.type==="vector")return e.children.length>0&<(e.children[0])===null?e.children.flatMap(n=>hs(n,t)):ck(e,t);if(e.type==="list"&&e.children.length>0){let n=lt(e.children[0]);return n?!n||n.startsWith(":")?[]:e.children.slice(1).flatMap(r=>hs(r,yl(t,n))):e.children.flatMap(r=>hs(r,t))}return[]}function ck(e,t){let n=lt(e.children[0]);if(!n||n.startsWith(":"))return[];let r={namespace:yl(t,n),alias:null,refers:[],referAll:!1};for(let i=1;i<e.children.length;i+=1){let o=lt(e.children[i]);if(!o?.startsWith(":"))continue;let s=e.children[i+1];if((o===":as"||o===":as-alias")&&s){r.alias=lt(s),i+=1;continue}o===":refer"&&s&&(lt(s)===":all"?r.referAll=!0:(s.type==="vector"||s.type==="list")&&r.refers.push(...s.children.map(lt).filter(uk)),i+=1)}return[r]}function lk(e){let t=[];for(let n of e){if(n.type==="atom"){let i=n.text.split(".").pop()??n.text;t.push(Kt(i,i,null,!0));continue}if(n.type!=="vector")continue;let r=lt(n.children[0]);if(r)for(let i of n.children.slice(1)){let o=lt(i);o&&t.push(Kt(`${r}.${o}`,o,null,!0))}}return t}function yl(e,t){return e?`${e}.${t}`:t}function lt(e){return e?.type==="atom"?e.text:null}function uk(e){return!!(e&&!e.startsWith(":"))}function dk(e,t){let n=new Set,r=new RegExp(`${Sl()}${$(t)}\\s*/\\s*([${bl}]+)`,"g");for(let i of e.matchAll(r)){let o=i[1];o&&n.add(o)}return[...n]}function mk(e,t){return new RegExp(`${Sl()}${$(t)}\\s*/`,"m").test(e)}function fk(e,t){return new RegExp(`${Sl()}${$(t)}(?![${bl}])`,"m").test(e)}function Sl(){return`(?<![${bl}])`}function pk(e,t,n){let r="",i=0;for(;i<e.length;){if(i>=t&&i<n){r+=e[i]===`
|
|
110
110
|
`?`
|
|
111
|
-
`:" ",i+=1;continue}let o=e[i];if(o===";"){let s=Yo(e,i);r+=Ep(e.slice(i,s)),i=s;continue}if(o==='"'){let s=gi(e,i,0).index;r+=Ep(e.slice(i,s)),i=s;continue}r+=o,i+=1}return r}function pP(e){let t=0;for(;t<e.length&&(t=Cl(e,t),!(t>=e.length));){let n=hs(e,t);if(!n){t+=1;continue}if(iP(n.form))return n.form;t=n.index}return null}function hs(e,t){let n=Cl(e,t);if(e.startsWith("#?@",n)||e.startsWith("#?",n))return gP(e,n);if(e.startsWith("#_",n)){let i=hs(e,n+2);return i?{form:{type:"atom",text:"",start:n,end:i.index},index:i.index}:null}for(;Wc(e[n]);)n+=1;let r=e[n];return r?r==="("?hl(e,n,"list",")"):r==="["?hl(e,n,"vector","]"):r==="{"?hl(e,n,"map","}"):r==='"'?{form:{type:"atom",text:"",start:n,end:gi(e,n,0).index},index:gi(e,n,0).index}:yP(e,n):null}function gP(e,t){let n=e.startsWith("#?@",t)?3:2,r=hs(e,t+n);return r?{form:{type:"list",children:r.form.type==="list"||r.form.type==="vector"||r.form.type==="map"?hP(r.form.children):[],start:t,end:r.index},index:r.index}:null}function hP(e){let t=[];for(let n=0;n<e.length;n+=2){let r=lt(e[n]),i=e[n+1];r?.startsWith(":")&&i&&t.push(i)}return t}function hl(e,t,n,r){let i=[],o=t+1;for(;o<e.length;){if(o=Cl(e,o),e[o]===r)return{form:{type:n,children:i,start:t,end:o+1},index:o+1};let s=hs(e,o);if(!s){o+=1;continue}s.form.type==="atom"&&s.form.text===""||i.push(s.form),o=s.index}return{form:{type:n,children:i,start:t,end:e.length},index:e.length}}function yP(e,t){let n=t;for(;n<e.length&&!Gc(e[n]);)n+=1;return{form:{type:"atom",text:e.slice(t,n),start:t,end:n},index:n}}function Cl(e,t){let n=t;for(;n<e.length;){let r=e[n];if(/\s|,/.test(r)){n+=1;continue}if(r===";"){n=Yo(e,n);continue}break}return n}function Ep(e){return e.replace(/[^\r\n]/g," ")}function Pp(e,t,n){let r=[];for(let i of n.matchAll(/^[ \t]*import\s+['"]([^'"]+)['"](?:\s+as\s+([A-Za-z_]\w*))?[\s\S]*?;$/gm)){let o=i[1]?.trim(),s=i[2]?.trim()??null,a=i[0];if(!o||!a||typeof i.index!="number")continue;let c=Cn(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:as(e,t,o),kind:s?"namespace":"side-effect",used:s?He(c,s):!0,usedMembers:s?Pr(c,s):[]})}return r}function kp(e,t,n){let r=[];for(let i of n.matchAll(/^[ \t]*export\s+['"]([^'"]+)['"][\s\S]*?;$/gm)){let o=i[1]?.trim();o&&r.push({specifier:o,sourcePath:as(e,t,o)})}return r}function Tp(e,t,n){return ps(e,t,{csharp:r=>SP(e,t,r),vb:r=>bP(e,t,r)},()=>{let r=rp(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return at(n,r,(i,o)=>{let s=i[1]?.trim();if(!s)return[];let[a,c]=s.split(/\s*=\s*/),l=!!c,u=(l?c:a)?.trim()??s,d=u.split(".").pop()??u,m=l?a?.trim()??d:d;return[bt(e,t,o,u,d,m,be(e,u,bn))]})})}function bP(e,t,n){let r=Se(n,new Set(["imports_statement"])),i=[];for(let o of n.rootNode.descendantsOfType("imports_statement")){let s=o.namedChildren.filter(m=>m.type==="namespace_name");if(s.length===0)continue;let a=s[s.length-1],c=s.length>1?s[0]:null,l=a.text,u=l.split(".").pop()??l,d=c?.text??u;i.push(pe(u,d,be(e,l,bn),r,c?"namespace":"named"))}return i}function SP(e,t,n){let r=Se(n,new Set(["using_directive"])),i=[];for(let o of n.rootNode.descendantsOfType("using_directive")){let s=o.namedChildren;if(s.length===0)continue;let a=null,c;s.length>=2&&s[0].type==="identifier"&&(s[1].type==="qualified_name"||s[1].type==="identifier")?(a=s[0],c=s[1]):c=s[s.length-1];let l=c.text,u=l.split(".").pop()??l,d=a?.text??u;i.push(pe(u,d,be(e,l,bn),r,a?"namespace":"named"))}return i}var CP=j("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function Fp(e,t){return CP.get(e,t,()=>{let n=new Set,r=k(e,t);if(!r)return n;let o=r.replace(/<script\b[^>]*>[\s\S]*?<\/script>/g,s=>s.replace(/[^\r\n]/g," ")).replace(/<!--[\s\S]*?-->/g,s=>s.replace(/[^\r\n]/g," ")).replace(/\/\*[\s\S]*?\*\//g,s=>s.replace(/[^\r\n]/g," "));for(let s of o.matchAll(/[A-Za-z_$][\w$]*/g))n.add(s[0]);return n})}function xl(e,t,n){return ct(e,t,r=>RP(e,t,r),()=>xP(e,t,n))}function xP(e,t,n){return LP(n).flatMap(r=>NP(e,t,r.clause,r.specifier,r.start,r.end,n))}function RP(e,t,n){let r=vP(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...IP(e,t,n,o,r));return i}function vP(e,t,n){let r=Se(n,new Set(["import_statement"]));if(Ut(t))for(let i of Fp(e,t))r.add(i);return r}function IP(e,t,n,r,i){let o=kP(r);if(!o)return[];let s=Je(e,t,o),a=Ye(r,"import_clause");return a?wP(n,a,s,i,TP(r.text)):[Vn("*",s)]}function wP(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(EP(s.text,n,r,i));else if(s.type==="namespace_import"){let a=DP(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...PP(s,n,r,i));return o}function EP(e,t,n,r){return pe("default",e,t,n,"default",{isTypeOnly:r})}function DP(e,t,n,r,i){let s=Ye(t,"identifier")?.text??"";if(!s)return null;let a=_P(e,s);return qn("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function PP(e,t,n,r){let i=[];for(let o of e.namedChildren){if(o.type!=="import_specifier")continue;let s=o.namedChild(0),a=o.namedChild(1);if(!s)continue;let c=s.text,l=a?.text??c;i.push(pe(c,l,t,n,"named",{isTypeOnly:r||FP(o.text)}))}return i}function kP(e){let t=Ye(e,"string");if(!t)return null;let n=Ye(t,"string_fragment");return n?n.text:null}function TP(e){return/^\s*import\s+type\b/.test(e)}function FP(e){return/^\s*type\b/.test(e.trim())}function _P(e,t){let n=new Set;for(let r of e.rootNode.descendantsOfType("member_expression")){let i=r.namedChild(0),o=r.namedChild(1);!i||!o||i.type!=="identifier"||i.text!==t||(o.type==="property_identifier"||o.type==="identifier")&&n.add(o.text)}return[...n]}function LP(e){let t=[],n=/^[ \t]*import\s+([\s\S]*?)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let i of e.matchAll(n)){let o=i[0],s=i[1],a=i[2];!o||!a||typeof i.index!="number"||t.push({clause:s,specifier:a,start:i.index,end:i.index+o.length})}let r=/^[ \t]*import\s+['"]([^'"]+)['"]\s*;?/gm;for(let i of e.matchAll(r)){let o=i[0],s=i[1];!o||!s||typeof i.index!="number"||t.push({clause:null,specifier:s,start:i.index,end:i.index+o.length})}return t.sort((i,o)=>i.start-o.start)}function NP(e,t,n,r,i,o,s){let a=Je(e,t,r),c=Cn(s,i,o);return n?AP(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let d=Pr(c,u.localName);return qn(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:d,used:d.length>0||He(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?Vn(u.importedName,u.sourcePath):Kt(u.importedName,u.localName??"",u.sourcePath,u.localName?He(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[Vn("*",a)]}function AP(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=MP(r),s=[];return i&&s.push(..._p(i,n)),o&&s.push(..._p(o,n)),s}function _p(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?Ue(r).map(i=>{let o=i.trim(),s=t||/^type\b/.test(o),a=o.replace(/^type\s+/,""),[c,l]=a.split(/\s+as\s+/);return{importedName:c.trim(),localName:(l??c).trim(),kind:"named",isTypeOnly:s}}):[]}return n.startsWith("* as ")?[{importedName:"*",localName:n.slice(5).trim(),kind:"namespace",isTypeOnly:t}]:[{importedName:"default",localName:n,kind:"default",isTypeOnly:t}]}function MP(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n];if(r==="{"&&t++,r==="}"&&t--,r===","&&t===0)return[e.slice(0,n).trim(),e.slice(n+1).trim()]}return[e.trim(),null]}function Rl(e,t,n){let r=K(e,t);return r?UP(e,t,r):OP(e,t,n)}function OP(e,t,n){return[...jP(e,t,n),...BP(e,t,n),...$P(e,t,n)]}function jP(e,t,n){let r=[],i=/^[ \t]*export\s+(?:type\s+)?\{([\s\S]*?)\}\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[1]??"",a=o[2]??"",c=Ue(s).map(d=>HP(d.trim())).filter(d=>!!d),l=kr(n,o.index),u=kr(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:Je(e,t,a),names:c,startLine:l,endLine:u})}return r}function BP(e,t,n){let r=[],i=/^[ \t]*export\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[2]??"",a=kr(n,o.index),c=kr(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:Je(e,t,s),names:[],startLine:a,endLine:c})}return r}function $P(e,t,n){let r=[],i=/^[ \t]*export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[1]??"",a=kr(n,o.index),c=kr(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:Je(e,t,s),names:[],startLine:a,endLine:c})}return r}function HP(e){if(!e)return null;let t=e.replace(/^type\s+/,"").trim();if(!t)return null;let n=t.match(/^(\w+)\s+as\s+(\w+)$/);if(n)return n[2]??null;let r=t.match(/^(\w+)$/);return r?r[1]??null:null}function kr(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function UP(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=WP(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,c=GP(i,o,s,a);r.push(c)}return r}function WP(e,t,n){let r=Ye(n,"string");if(!r)return;let i=Ye(r,"string_fragment");if(i)return Je(e,t,i.text)}function GP(e,t,n,r){let i=Ye(e,"export_clause");if(i){let s=[];for(let a of i.namedChildren){if(a.type!=="export_specifier")continue;let c=a.namedChild(0),l=a.namedChild(1);c&&s.push((l??c).text)}return{kind:"named",sourcePath:t,names:s,startLine:n,endLine:r}}return Ye(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function Lp(e,t,n){return ps(e,t,{java:r=>zP(e,t,r),kotlin:r=>VP(e,t,r),scala:r=>qP(e,t,r)},()=>at(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?KP(e,t,o,i):[]}))}function zP(e,t,n){let r=Se(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.children.some(d=>d.type==="asterisk"),c=o.namedChildren.find(d=>d.type==="scoped_identifier")??o.namedChildren.find(d=>d.type==="identifier");if(!c)continue;let l=c.text;if(s){i.push(qn("*",be(e,l,Ke)));continue}let u=l.split(".").pop()??l;i.push(pe(u,u,be(e,l,Ke),r))}return i}function VP(e,t,n){let r=Se(n,new Set(["import_header","import_list"])),i=[];for(let o of n.rootNode.descendantsOfType("import_header")){let s=o.namedChildren.find(f=>f.type==="identifier");if(!s)continue;let a=o.namedChildren.some(f=>f.type==="wildcard_import"),c=o.namedChildren.find(f=>f.type==="import_alias");if(a){i.push(qn("*",be(e,s.text,Ke)));continue}let l=s.text,u=l.split(".").pop()??l,m=c?.namedChild(0)?.text??u;i.push(pe(u,m,be(e,l,Ke),r))}return i}function qP(e,t,n){let r=Se(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.namedChildren.find(d=>d.type==="namespace_selectors"||d.type==="namespace_wildcard"),a=o.namedChildren.filter(d=>d!==s&&(d.type==="identifier"||d.type==="stable_identifier")),c=a.map(d=>d.text).join(".");if(!c)continue;if(s?.type==="namespace_wildcard"){i.push(qn("*",be(e,c,Ke)));continue}if(s?.type==="namespace_selectors"){for(let d of s.namedChildren)if(d.type==="arrow_renamed_identifier"){let[m,f]=d.namedChildren;if(!m)continue;let p=m.text,g=f?.text??p;if(p==="_")continue;i.push(pe(p,g,be(e,`${c}.${p}`,Ke),r))}else if(d.type==="identifier"){let m=d.text;i.push(pe(m,m,be(e,`${c}.${m}`,Ke),r))}continue}let l=a[a.length-1]?.text??c,u=a.slice(0,-1).map(d=>d.text).join(".")||c;i.push(pe(l,l,be(e,u&&a.length>1?`${u}.${l}`:c,Ke),r))}return i}function KP(e,t,n,r){if(n.includes("{")&&n.includes("}")){let i=n.slice(0,n.indexOf("{")).replace(/\.$/,"").trim(),o=n.slice(n.indexOf("{")+1,n.lastIndexOf("}")).trim();return Ue(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.includes("=>")?a.split(/\s*=>\s*/):a.split(/\s+as\s+/),u=c?.trim();if(!u||u==="_")return[];let d=(l??u.split(".").pop()??u).trim(),m=u==="_"?i:`${i}.${u}`.replace(/\.\./g,".");return[bt(e,t,r,m,u,d)]})}return[bt(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function Ap(e,t,n){return ct(e,t,r=>JP(e,t,r),()=>at(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?Ue(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.split(/\s+as\s+/i),u=c?.trim()??a,d=u.split("\\").pop()??u,m=(l??d).trim();return[bt(e,t,i,u,d,m,be(e,u.replace(/\\/g,"."),Gn))]}):[]}))}function JP(e,t,n){let r=Se(n,new Set(["namespace_use_declaration"])),i=[],o=(s,a,c)=>{i.push(pe(a,c,be(e,s.replace(/\\/g,"."),Gn),r))};for(let s of n.rootNode.descendantsOfType("namespace_use_declaration")){let a=s.namedChildren.find(c=>c.type==="namespace_use_group");if(a){let c=s.namedChildren.find(l=>l.type==="namespace_name")?.text??"";for(let l of a.namedChildren){if(l.type!=="namespace_use_clause")continue;let{importedName:u,localName:d,qualified:m}=Np(l,c);u&&o(m,u,d)}continue}for(let c of s.namedChildren){if(c.type!=="namespace_use_clause")continue;let{importedName:l,localName:u,qualified:d}=Np(c,"");l&&o(d,l,u)}}return i}function Np(e,t){let n=e.namedChildren.find(l=>l.type==="qualified_name"),r=e.namedChildren.filter(l=>l.type==="name"),i="";n?i=n.text:r.length>=1&&(i=r[0].text);let o=n&&r.length>0?r[r.length-1]:null,s=i.split("\\").pop()??i,a=o?.text??s,c=t?`${t}\\${i}`:i;return{importedName:s,localName:a,qualified:c}}function Op(e,t,n){return ct(e,t,r=>YP(e,t,r),()=>QP(n).flatMap(r=>ek(e,t,r,n)))}function YP(e,t,n){let r=Se(n,new Set(["import_statement","import_from_statement"])),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))for(let s of o.namedChildren){let a=Mp(s);if(!a)continue;let c=Er(e,t,a.qualifiedName);i.push({importedName:a.qualifiedName,localName:a.localName,sourcePath:c,kind:"namespace",used:r.has(a.localName),usedMembers:[]})}for(let o of n.rootNode.descendantsOfType("import_from_statement")){let s=o.namedChild(0);if(!s)continue;let a=XP(s);if(a===null)continue;let c=Er(e,t,a);for(let l=1;l<o.namedChildCount;l+=1){let u=o.namedChild(l);if(u.type==="wildcard_import"){i.push({importedName:"*",localName:null,sourcePath:c,kind:"side-effect",used:!0,usedMembers:[]});continue}let d=Mp(u);d&&i.push({importedName:d.qualifiedName,localName:d.localName,sourcePath:c,kind:"named",used:r.has(d.localName),usedMembers:[]})}}return i}function Mp(e){if(e.type==="aliased_import"){let t=e.namedChild(0),n=e.namedChild(1);return!t||!n?null:{qualifiedName:t.text,localName:n.text}}if(e.type==="dotted_name"){let t=e.text;return{qualifiedName:t,localName:t.split(".")[0]??t}}return e.type==="identifier"?{qualifiedName:e.text,localName:e.text}:null}function XP(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=Ye(e,"import_prefix")?.text??"",n=Ye(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function QP(e){let t=e.split(`
|
|
111
|
+
`:" ",i+=1;continue}let o=e[i];if(o===";"){let s=Xo(e,i);r+=Ep(e.slice(i,s)),i=s;continue}if(o==='"'){let s=gi(e,i,0).index;r+=Ep(e.slice(i,s)),i=s;continue}r+=o,i+=1}return r}function gk(e){let t=0;for(;t<e.length&&(t=Cl(e,t),!(t>=e.length));){let n=ys(e,t);if(!n){t+=1;continue}if(ok(n.form))return n.form;t=n.index}return null}function ys(e,t){let n=Cl(e,t);if(e.startsWith("#?@",n)||e.startsWith("#?",n))return hk(e,n);if(e.startsWith("#_",n)){let i=ys(e,n+2);return i?{form:{type:"atom",text:"",start:n,end:i.index},index:i.index}:null}for(;Wc(e[n]);)n+=1;let r=e[n];return r?r==="("?hl(e,n,"list",")"):r==="["?hl(e,n,"vector","]"):r==="{"?hl(e,n,"map","}"):r==='"'?{form:{type:"atom",text:"",start:n,end:gi(e,n,0).index},index:gi(e,n,0).index}:bk(e,n):null}function hk(e,t){let n=e.startsWith("#?@",t)?3:2,r=ys(e,t+n);return r?{form:{type:"list",children:r.form.type==="list"||r.form.type==="vector"||r.form.type==="map"?yk(r.form.children):[],start:t,end:r.index},index:r.index}:null}function yk(e){let t=[];for(let n=0;n<e.length;n+=2){let r=lt(e[n]),i=e[n+1];r?.startsWith(":")&&i&&t.push(i)}return t}function hl(e,t,n,r){let i=[],o=t+1;for(;o<e.length;){if(o=Cl(e,o),e[o]===r)return{form:{type:n,children:i,start:t,end:o+1},index:o+1};let s=ys(e,o);if(!s){o+=1;continue}s.form.type==="atom"&&s.form.text===""||i.push(s.form),o=s.index}return{form:{type:n,children:i,start:t,end:e.length},index:e.length}}function bk(e,t){let n=t;for(;n<e.length&&!Gc(e[n]);)n+=1;return{form:{type:"atom",text:e.slice(t,n),start:t,end:n},index:n}}function Cl(e,t){let n=t;for(;n<e.length;){let r=e[n];if(/\s|,/.test(r)){n+=1;continue}if(r===";"){n=Xo(e,n);continue}break}return n}function Ep(e){return e.replace(/[^\r\n]/g," ")}function kp(e,t,n){let r=[];for(let i of n.matchAll(/^[ \t]*import\s+['"]([^'"]+)['"](?:\s+as\s+([A-Za-z_]\w*))?[\s\S]*?;$/gm)){let o=i[1]?.trim(),s=i[2]?.trim()??null,a=i[0];if(!o||!a||typeof i.index!="number")continue;let c=Cn(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:cs(e,t,o),kind:s?"namespace":"side-effect",used:s?He(c,s):!0,usedMembers:s?kr(c,s):[]})}return r}function Pp(e,t,n){let r=[];for(let i of n.matchAll(/^[ \t]*export\s+['"]([^'"]+)['"][\s\S]*?;$/gm)){let o=i[1]?.trim();o&&r.push({specifier:o,sourcePath:cs(e,t,o)})}return r}function Tp(e,t,n){return gs(e,t,{csharp:r=>Ck(e,t,r),vb:r=>Sk(e,t,r)},()=>{let r=rp(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return at(n,r,(i,o)=>{let s=i[1]?.trim();if(!s)return[];let[a,c]=s.split(/\s*=\s*/),l=!!c,u=(l?c:a)?.trim()??s,d=u.split(".").pop()??u,m=l?a?.trim()??d:d;return[bt(e,t,o,u,d,m,be(e,u,bn))]})})}function Sk(e,t,n){let r=Se(n,new Set(["imports_statement"])),i=[];for(let o of n.rootNode.descendantsOfType("imports_statement")){let s=o.namedChildren.filter(m=>m.type==="namespace_name");if(s.length===0)continue;let a=s[s.length-1],c=s.length>1?s[0]:null,l=a.text,u=l.split(".").pop()??l,d=c?.text??u;i.push(pe(u,d,be(e,l,bn),r,c?"namespace":"named"))}return i}function Ck(e,t,n){let r=Se(n,new Set(["using_directive"])),i=[];for(let o of n.rootNode.descendantsOfType("using_directive")){let s=o.namedChildren;if(s.length===0)continue;let a=null,c;s.length>=2&&s[0].type==="identifier"&&(s[1].type==="qualified_name"||s[1].type==="identifier")?(a=s[0],c=s[1]):c=s[s.length-1];let l=c.text,u=l.split(".").pop()??l,d=a?.text??u;i.push(pe(u,d,be(e,l,bn),r,a?"namespace":"named"))}return i}var xk=j("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function Fp(e,t){return xk.get(e,t,()=>{let n=new Set,r=P(e,t);if(!r)return n;let o=r.replace(/<script\b[^>]*>[\s\S]*?<\/script>/g,s=>s.replace(/[^\r\n]/g," ")).replace(/<!--[\s\S]*?-->/g,s=>s.replace(/[^\r\n]/g," ")).replace(/\/\*[\s\S]*?\*\//g,s=>s.replace(/[^\r\n]/g," "));for(let s of o.matchAll(/[A-Za-z_$][\w$]*/g))n.add(s[0]);return n})}function xl(e,t,n){return ct(e,t,r=>Rk(e,t,r),()=>vk(e,t,n))}function vk(e,t,n){return Nk(n).flatMap(r=>Ak(e,t,r.clause,r.specifier,r.start,r.end,n))}function Rk(e,t,n){let r=Ik(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...wk(e,t,n,o,r));return i}function Ik(e,t,n){let r=Se(n,new Set(["import_statement"]));if(Ut(t))for(let i of Fp(e,t))r.add(i);return r}function wk(e,t,n,r,i){let o=Tk(r);if(!o)return[];let s=Je(e,t,o),a=Ye(r,"import_clause");return a?Ek(n,a,s,i,Fk(r.text)):[Vn("*",s)]}function Ek(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(Dk(s.text,n,r,i));else if(s.type==="namespace_import"){let a=kk(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...Pk(s,n,r,i));return o}function Dk(e,t,n,r){return pe("default",e,t,n,"default",{isTypeOnly:r})}function kk(e,t,n,r,i){let s=Ye(t,"identifier")?.text??"";if(!s)return null;let a=Lk(e,s);return qn("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function Pk(e,t,n,r){let i=[];for(let o of e.namedChildren){if(o.type!=="import_specifier")continue;let s=o.namedChild(0),a=o.namedChild(1);if(!s)continue;let c=s.text,l=a?.text??c;i.push(pe(c,l,t,n,"named",{isTypeOnly:r||_k(o.text)}))}return i}function Tk(e){let t=Ye(e,"string");if(!t)return null;let n=Ye(t,"string_fragment");return n?n.text:null}function Fk(e){return/^\s*import\s+type\b/.test(e)}function _k(e){return/^\s*type\b/.test(e.trim())}function Lk(e,t){let n=new Set;for(let r of e.rootNode.descendantsOfType("member_expression")){let i=r.namedChild(0),o=r.namedChild(1);!i||!o||i.type!=="identifier"||i.text!==t||(o.type==="property_identifier"||o.type==="identifier")&&n.add(o.text)}return[...n]}function Nk(e){let t=[],n=/^[ \t]*import\s+([\s\S]*?)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let i of e.matchAll(n)){let o=i[0],s=i[1],a=i[2];!o||!a||typeof i.index!="number"||t.push({clause:s,specifier:a,start:i.index,end:i.index+o.length})}let r=/^[ \t]*import\s+['"]([^'"]+)['"]\s*;?/gm;for(let i of e.matchAll(r)){let o=i[0],s=i[1];!o||!s||typeof i.index!="number"||t.push({clause:null,specifier:s,start:i.index,end:i.index+o.length})}return t.sort((i,o)=>i.start-o.start)}function Ak(e,t,n,r,i,o,s){let a=Je(e,t,r),c=Cn(s,i,o);return n?Mk(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let d=kr(c,u.localName);return qn(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:d,used:d.length>0||He(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?Vn(u.importedName,u.sourcePath):Kt(u.importedName,u.localName??"",u.sourcePath,u.localName?He(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[Vn("*",a)]}function Mk(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=Ok(r),s=[];return i&&s.push(..._p(i,n)),o&&s.push(..._p(o,n)),s}function _p(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?Ue(r).map(i=>{let o=i.trim(),s=t||/^type\b/.test(o),a=o.replace(/^type\s+/,""),[c,l]=a.split(/\s+as\s+/);return{importedName:c.trim(),localName:(l??c).trim(),kind:"named",isTypeOnly:s}}):[]}return n.startsWith("* as ")?[{importedName:"*",localName:n.slice(5).trim(),kind:"namespace",isTypeOnly:t}]:[{importedName:"default",localName:n,kind:"default",isTypeOnly:t}]}function Ok(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n];if(r==="{"&&t++,r==="}"&&t--,r===","&&t===0)return[e.slice(0,n).trim(),e.slice(n+1).trim()]}return[e.trim(),null]}function vl(e,t,n){let r=K(e,t);return r?Wk(e,t,r):jk(e,t,n)}function jk(e,t,n){return[...Bk(e,t,n),...$k(e,t,n),...Hk(e,t,n)]}function Bk(e,t,n){let r=[],i=/^[ \t]*export\s+(?:type\s+)?\{([\s\S]*?)\}\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[1]??"",a=o[2]??"",c=Ue(s).map(d=>Uk(d.trim())).filter(d=>!!d),l=Pr(n,o.index),u=Pr(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:Je(e,t,a),names:c,startLine:l,endLine:u})}return r}function $k(e,t,n){let r=[],i=/^[ \t]*export\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[2]??"",a=Pr(n,o.index),c=Pr(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:Je(e,t,s),names:[],startLine:a,endLine:c})}return r}function Hk(e,t,n){let r=[],i=/^[ \t]*export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?/gm;for(let o of n.matchAll(i)){if(typeof o.index!="number")continue;let s=o[1]??"",a=Pr(n,o.index),c=Pr(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:Je(e,t,s),names:[],startLine:a,endLine:c})}return r}function Uk(e){if(!e)return null;let t=e.replace(/^type\s+/,"").trim();if(!t)return null;let n=t.match(/^(\w+)\s+as\s+(\w+)$/);if(n)return n[2]??null;let r=t.match(/^(\w+)$/);return r?r[1]??null:null}function Pr(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function Wk(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=Gk(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,c=zk(i,o,s,a);r.push(c)}return r}function Gk(e,t,n){let r=Ye(n,"string");if(!r)return;let i=Ye(r,"string_fragment");if(i)return Je(e,t,i.text)}function zk(e,t,n,r){let i=Ye(e,"export_clause");if(i){let s=[];for(let a of i.namedChildren){if(a.type!=="export_specifier")continue;let c=a.namedChild(0),l=a.namedChild(1);c&&s.push((l??c).text)}return{kind:"named",sourcePath:t,names:s,startLine:n,endLine:r}}return Ye(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function Lp(e,t,n){return gs(e,t,{java:r=>Vk(e,t,r),kotlin:r=>qk(e,t,r),scala:r=>Kk(e,t,r)},()=>at(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?Jk(e,t,o,i):[]}))}function Vk(e,t,n){let r=Se(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.children.some(d=>d.type==="asterisk"),c=o.namedChildren.find(d=>d.type==="scoped_identifier")??o.namedChildren.find(d=>d.type==="identifier");if(!c)continue;let l=c.text;if(s){i.push(qn("*",be(e,l,Ke)));continue}let u=l.split(".").pop()??l;i.push(pe(u,u,be(e,l,Ke),r))}return i}function qk(e,t,n){let r=Se(n,new Set(["import_header","import_list"])),i=[];for(let o of n.rootNode.descendantsOfType("import_header")){let s=o.namedChildren.find(f=>f.type==="identifier");if(!s)continue;let a=o.namedChildren.some(f=>f.type==="wildcard_import"),c=o.namedChildren.find(f=>f.type==="import_alias");if(a){i.push(qn("*",be(e,s.text,Ke)));continue}let l=s.text,u=l.split(".").pop()??l,m=c?.namedChild(0)?.text??u;i.push(pe(u,m,be(e,l,Ke),r))}return i}function Kk(e,t,n){let r=Se(n,new Set(["import_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("import_declaration")){let s=o.namedChildren.find(d=>d.type==="namespace_selectors"||d.type==="namespace_wildcard"),a=o.namedChildren.filter(d=>d!==s&&(d.type==="identifier"||d.type==="stable_identifier")),c=a.map(d=>d.text).join(".");if(!c)continue;if(s?.type==="namespace_wildcard"){i.push(qn("*",be(e,c,Ke)));continue}if(s?.type==="namespace_selectors"){for(let d of s.namedChildren)if(d.type==="arrow_renamed_identifier"){let[m,f]=d.namedChildren;if(!m)continue;let p=m.text,g=f?.text??p;if(p==="_")continue;i.push(pe(p,g,be(e,`${c}.${p}`,Ke),r))}else if(d.type==="identifier"){let m=d.text;i.push(pe(m,m,be(e,`${c}.${m}`,Ke),r))}continue}let l=a[a.length-1]?.text??c,u=a.slice(0,-1).map(d=>d.text).join(".")||c;i.push(pe(l,l,be(e,u&&a.length>1?`${u}.${l}`:c,Ke),r))}return i}function Jk(e,t,n,r){if(n.includes("{")&&n.includes("}")){let i=n.slice(0,n.indexOf("{")).replace(/\.$/,"").trim(),o=n.slice(n.indexOf("{")+1,n.lastIndexOf("}")).trim();return Ue(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.includes("=>")?a.split(/\s*=>\s*/):a.split(/\s+as\s+/),u=c?.trim();if(!u||u==="_")return[];let d=(l??u.split(".").pop()??u).trim(),m=u==="_"?i:`${i}.${u}`.replace(/\.\./g,".");return[bt(e,t,r,m,u,d)]})}return[bt(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function Ap(e,t,n){return ct(e,t,r=>Yk(e,t,r),()=>at(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?Ue(o).flatMap(s=>{let a=s.trim();if(!a)return[];let[c,l]=a.split(/\s+as\s+/i),u=c?.trim()??a,d=u.split("\\").pop()??u,m=(l??d).trim();return[bt(e,t,i,u,d,m,be(e,u.replace(/\\/g,"."),Gn))]}):[]}))}function Yk(e,t,n){let r=Se(n,new Set(["namespace_use_declaration"])),i=[],o=(s,a,c)=>{i.push(pe(a,c,be(e,s.replace(/\\/g,"."),Gn),r))};for(let s of n.rootNode.descendantsOfType("namespace_use_declaration")){let a=s.namedChildren.find(c=>c.type==="namespace_use_group");if(a){let c=s.namedChildren.find(l=>l.type==="namespace_name")?.text??"";for(let l of a.namedChildren){if(l.type!=="namespace_use_clause")continue;let{importedName:u,localName:d,qualified:m}=Np(l,c);u&&o(m,u,d)}continue}for(let c of s.namedChildren){if(c.type!=="namespace_use_clause")continue;let{importedName:l,localName:u,qualified:d}=Np(c,"");l&&o(d,l,u)}}return i}function Np(e,t){let n=e.namedChildren.find(l=>l.type==="qualified_name"),r=e.namedChildren.filter(l=>l.type==="name"),i="";n?i=n.text:r.length>=1&&(i=r[0].text);let o=n&&r.length>0?r[r.length-1]:null,s=i.split("\\").pop()??i,a=o?.text??s,c=t?`${t}\\${i}`:i;return{importedName:s,localName:a,qualified:c}}function Op(e,t,n){return ct(e,t,r=>Xk(e,t,r),()=>Zk(n).flatMap(r=>tP(e,t,r,n)))}function Xk(e,t,n){let r=Se(n,new Set(["import_statement","import_from_statement"])),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))for(let s of o.namedChildren){let a=Mp(s);if(!a)continue;let c=Er(e,t,a.qualifiedName);i.push({importedName:a.qualifiedName,localName:a.localName,sourcePath:c,kind:"namespace",used:r.has(a.localName),usedMembers:[]})}for(let o of n.rootNode.descendantsOfType("import_from_statement")){let s=o.namedChild(0);if(!s)continue;let a=Qk(s);if(a===null)continue;let c=Er(e,t,a);for(let l=1;l<o.namedChildCount;l+=1){let u=o.namedChild(l);if(u.type==="wildcard_import"){i.push({importedName:"*",localName:null,sourcePath:c,kind:"side-effect",used:!0,usedMembers:[]});continue}let d=Mp(u);d&&i.push({importedName:d.qualifiedName,localName:d.localName,sourcePath:c,kind:"named",used:r.has(d.localName),usedMembers:[]})}}return i}function Mp(e){if(e.type==="aliased_import"){let t=e.namedChild(0),n=e.namedChild(1);return!t||!n?null:{qualifiedName:t.text,localName:n.text}}if(e.type==="dotted_name"){let t=e.text;return{qualifiedName:t,localName:t.split(".")[0]??t}}return e.type==="identifier"?{qualifiedName:e.text,localName:e.text}:null}function Qk(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=Ye(e,"import_prefix")?.text??"",n=Ye(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function Zk(e){let t=e.split(`
|
|
112
112
|
`),n=[],r=0;for(let i=0;i<t.length;i++){let o=t[i],s=o.trimStart(),a=r;if(r+=o.length+1,!s.startsWith("import ")&&!s.startsWith("from "))continue;let c=o,l=a+o.length,u=xi(o);for(;i+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){i++;let m=t[i];c+=`
|
|
113
|
-
${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=
|
|
113
|
+
${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=eP(c);d&&n.push({...d,start:a,end:l})}return n}function eP(e){let t=e.replace(/\\\s*\n/g," ").trim();if(t.startsWith("import "))return{kind:"import",module:null,clause:t.slice(7).trim()};let n=t.match(/^from\s+([.\w]+)\s+import\s+([\s\S]+)$/);if(!n)return null;let r=n[2].trim();return r.startsWith("(")&&r.endsWith(")")&&(r=r.slice(1,-1).trim()),{kind:"from",module:n[1],clause:r}}function tP(e,t,n,r){let i=Cn(r,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return Ue(o).flatMap(c=>{let l=c.trim().replace(/,$/,"");if(!l)return[];let[u,d]=l.split(/\s+as\s+/),m=u.trim(),f=(d??m.split(".")[0]??m).trim(),p=Er(e,t,m),g=kr(i,f);return[{importedName:m,localName:f,sourcePath:p,kind:"namespace",used:He(i,f)||g.length>0,usedMembers:g}]});let s=n.module?Er(e,t,n.module):null,a=[];for(let c of Ue(o)){let l=c.trim().replace(/,$/,"");if(!l)continue;if(l==="*"){a.push({importedName:"*",localName:null,sourcePath:s,kind:"side-effect",used:!0,usedMembers:[]});continue}let[u,d]=l.split(/\s+as\s+/),m=(d??u).trim();a.push({importedName:u.trim(),localName:m,sourcePath:s,kind:"named",used:He(i,m),usedMembers:[]})}return a}import{basename as nP}from"path";function jp(e,t,n){return ct(e,t,r=>iP(e,t,r),()=>rP(e,t,n))}function rP(e,t,n){return at(n,/^[ \t]*(require_relative|require)\s+["']([^"']+)["']\s*$/gm,(r,i)=>{let o=r[1],s=r[2];if(!o||!s)return[];let a=o==="require_relative"?ss(e,t,s):null;if(a){let c=Bp(s);return[Kt(c,c,a,He(i,c))]}return[Vn(s,a)]})}function iP(e,t,n){let r=Se(n,new Set([])),i=[],o=new Set(["require","require_relative","load"]);for(let s of n.rootNode.descendantsOfType("call")){let a=s.namedChild(0);if(!a||a.type!=="identifier"||!o.has(a.text))continue;let l=s.namedChildren.find(f=>f.type==="argument_list")?.namedChild(0);if(!l||l.type!=="string")continue;let d=l.namedChildren.find(f=>f.type==="string_content")?.text;if(!d)continue;let m=a.text==="require_relative"?ss(e,t,d):null;if(m){let f=Bp(d);i.push(pe(f,f,m,r))}else i.push(Vn(d,m))}return i}function Bp(e){return Zo(nP(e).replace(/\.[^.]+$/,""),/_/)}function $p(e,t,n){return ct(e,t,r=>oP(e,t,r),()=>at(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?sP(e,t,o,i):[]}))}function oP(e,t,n){let r=Se(n,new Set(["use_declaration"])),i=[];for(let o of n.rootNode.descendantsOfType("use_declaration")){let s=o.namedChild(0);if(s)for(let a of vi(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=zt(e,t,a.qualifiedName)??zt(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));i.push(pe(a.importedName,a.localName,c,r))}}return i}function vi(e,t){switch(e.type){case"identifier":case"super":case"crate":{let n=e.text;return[{qualifiedName:Tr(t,n),importedName:n,localName:n}]}case"self":{let n=t.split("::").filter(Boolean).pop()??"self";return[{qualifiedName:t||"self",importedName:n,localName:n}]}case"scoped_identifier":{let n=e.text,r=n.split("::").pop()??n;return[{qualifiedName:Tr(t,n),importedName:r,localName:r}]}case"scoped_use_list":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=Tr(t,n.text),o=[];for(let s of r.namedChildren)o.push(...vi(s,i));return o}case"use_list":{let n=[];for(let r of e.namedChildren)n.push(...vi(r,t));return n}case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=vi(n,t),o=r.text;return i.map(s=>({...s,localName:o}))}case"use_wildcard":{let n=e.namedChild(0),r=n?n.text:"";return[{qualifiedName:Tr(t,`${r}::*`),importedName:"*",localName:"*"}]}default:return[]}}function Tr(e,t){return e?t?`${e}::${t}`:e:t}function sP(e,t,n,r){let i=n.trim();if(i.includes("{")&&i.includes("}")){let u=i.slice(0,i.indexOf("{")).replace(/::$/,"").trim(),d=i.slice(i.indexOf("{")+1,i.lastIndexOf("}")).trim();return Ue(d).flatMap(m=>{let f=m.trim();if(!f)return[];if(f==="self"){let b=u.split("::").filter(Boolean).pop();return b?[bt(e,t,r,u,b,b)]:[]}let[p,g]=f.split(/\s+as\s+/),y=p?.trim();if(!y)return[];let h=(g??y.split("::").pop()??y).trim(),x=`${u}::${y}`.replace(/::::/g,"::");return[bt(e,t,r,x,y.split("::").pop()??y,h,zt(e,t,u))]})}let[o,s]=i.split(/\s+as\s+/),a=o?.trim()??i,c=(s??a.split("::").pop()??a).trim(),l=zt(e,t,a)??zt(e,t,a.split("::").slice(0,-1).join("::"));return[bt(e,t,r,a,a.split("::").pop()??a,c,l)]}function Hp(e,t,n){let r=K(e,t);if(r)return aP(e,t,r);let i=[];for(let o of n.matchAll(/^[ \t]*pub\s+use\s+(.+?)\s*;$/gm)){let s=o[1]?.trim();s&&i.push(...lP(e,t,s))}return i}function aP(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("use_declaration")){if(!cP(i))continue;let o=i.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of vi(o,""))s.importedName&&r.push(Rl(e,t,s.qualifiedName))}return r}function cP(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function lP(e,t,n){let r=n.trim();if(r.includes("{")&&r.includes("}")){let i=r.slice(0,r.indexOf("{")).replace(/::$/,"").trim(),o=r.slice(r.indexOf("{")+1,r.lastIndexOf("}")).trim();return Ue(o).flatMap(s=>{let a=s.trim();if(!a||a==="self")return[];let[c]=a.split(/\s+as\s+/),l=`${i}::${c?.trim()??a}`.replace(/::::/g,"::");return[Rl(e,t,l)]})}return[Rl(e,t,r)]}function Rl(e,t,n){return{specifier:n,sourcePath:zt(e,t,n)??zt(e,t,n.split("::").slice(0,-1).join("::"))}}function xn({language:e,extensions:t,imports:n,parseImports:r}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:r}}function Up(e,t){let n=t.toLowerCase();for(let r of e)for(let i of r.extensions)if(n.endsWith(i))return r;return null}var uP={language:"javascript",extensions:Un,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:xl,parseReExports:vl},dP=xn({language:"python",extensions:ts,imports:"ast-with-regex-fallback",parseImports:Op}),mP=xn({language:"jvm",extensions:Ke,imports:"ast-dispatch-with-regex-fallback",parseImports:Lp}),fP={language:"rust",extensions:ns,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:$p,parseExports:Hp},pP=xn({language:"ruby",extensions:rs,imports:"ast-with-regex-fallback",parseImports:jp}),gP=xn({language:"c/cpp",extensions:is,imports:"ast-with-regex-fallback",parseImports:wp}),hP=xn({language:"dotnet",extensions:bn,imports:"ast-dispatch-with-regex-fallback",parseImports:Tp}),yP={language:"dart",extensions:os,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:kp,parseExports:Pp},bP=xn({language:"php",extensions:Gn,imports:"ast-with-regex-fallback",parseImports:Ap}),SP=xn({language:"clojure",extensions:wr,imports:"regex-only",parseImports:Dp}),Wp=[uP,dP,mP,fP,pP,gP,hP,yP,bP,SP];function bs(e){return Up(Wp,e)}function c8(e){return Wp.find(n=>n.language===e)?.capabilities??null}var Il={clearGroups:["whole-project","source-file"]},CP=j("source-imports",Il),xP=j("source-exports",Il),vP=j("source-reexports",Il),Gp=oe({kind:"source-imports",invalidation:J("source-imports"),serialize:RP,deserialize:IP}),zp=oe({kind:"source-reexports",invalidation:J("source-reexports"),serialize:wP,deserialize:EP});function Jt(e,t){let n=ne(t);return vP.get(e,n,()=>{let r=bs(n);if(!r?.parseReExports)return[];let i=P(e,n);if(!i)return[];let o=ce(e,n,i),s=ul(e),a=zp.read(e,n,o);if(a?.resolutionFingerprint===s)return a.reExports;let c=r.parseReExports(e,n,i);return zp.write(e,n,o,{resolutionFingerprint:s,reExports:c}),c})}function Z(e,t){let n=ne(t);return CP.get(e,n,()=>{let r=bs(n);if(!r)return[];let i=P(e,n);if(!i)return[];let o=ce(e,n,i),s=ul(e),a=Gp.read(e,n,o);if(a?.resolutionFingerprint===s)return a.imports;let c=r.parseImports(e,n,i);return Gp.write(e,n,o,{resolutionFingerprint:s,imports:c}),c})}function Ss(e,t){let n=ne(t);return xP.get(e,n,()=>{let r=bs(n);if(!r?.parseExports)return[];let i=P(e,n);return i?r.parseExports(e,n,i):[]})}function RP(e){return JSON.stringify(e)}function IP(e){try{let t=JSON.parse(e);return!Et(t)||typeof t.resolutionFingerprint!="string"||!Array.isArray(t.imports)?null:{resolutionFingerprint:t.resolutionFingerprint,imports:t.imports}}catch{return null}}function wP(e){return JSON.stringify(e)}function EP(e){try{let t=JSON.parse(e);return!Et(t)||typeof t.resolutionFingerprint!="string"||!Array.isArray(t.reExports)?null:{resolutionFingerprint:t.resolutionFingerprint,reExports:t.reExports}}catch{return null}}function ut(e){return{forFile(t,n){return Vp(e,t,n)},forFiles(t,n){let r=new Map;for(let i of t)r.set(i,Vp(e,i,n));return r}}}function Vp(e,t,n){let r={file:t},i=n.facts||n.identifiers;if(n.text&&(r.text=P(e,t)),n.lines&&(r.lines=Ce(e,t)),n.ast&&(r.ast=K(e,t)),n.imports&&(r.imports=Z(e,t)),n.reexports&&(r.reexports=Jt(e,t)),i){let o=Vc(e,t),s=o.facts;n.facts&&(r.facts=s),o.unavailable&&(r.sourceFactsUnavailable=o.unavailable),n.identifiers&&s&&(r.identifiers=s.fileIdentifiers,r.identifierLineMap=s.identifierLineMap)}return r}function Kn(e,t){return e.all(`SELECT gs.id, gs.symbol, der.document_id, der.start_line, der.start_char, der.end_line, der.end_char, d.relative_path, gs.display_name, gs.documentation
|
|
114
114
|
FROM global_symbols gs
|
|
115
115
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
116
116
|
JOIN documents d ON der.document_id = d.id
|
|
@@ -137,7 +137,7 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
137
137
|
${e.pathExclusionsFor("d")}
|
|
138
138
|
GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path, gs.display_name, gs.documentation
|
|
139
139
|
${Kp(t.orderBy)}
|
|
140
|
-
${Jp(t.limit)}`,...t.params??[])}function Kp(e){return e?`ORDER BY ${e}`:""}function Jp(e){return typeof e=="number"?`LIMIT ${e}`:""}function Yt(e){return!e||!e.trim()?null:e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim()||null}function Xt(e){if(!e)return null;let t=qp(e);if(t)return t.replace(/\n/g," ");let n=e.indexOf("|");if(n===-1)return e.replace(/\n/g," ");let r=e.slice(n+1);return(qp(r)??r).replace(/\n/g," ")}function qp(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function
|
|
140
|
+
${Jp(t.limit)}`,...t.params??[])}function Kp(e){return e?`ORDER BY ${e}`:""}function Jp(e){return typeof e=="number"?`LIMIT ${e}`:""}function Yt(e){return!e||!e.trim()?null:e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim()||null}function Xt(e){if(!e)return null;let t=qp(e);if(t)return t.replace(/\n/g," ");let n=e.indexOf("|");if(n===-1)return e.replace(/\n/g," ");let r=e.slice(n+1);return(qp(r)??r).replace(/\n/g," ")}function qp(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function DP(e,t={}){if(wt(e.symbol)!==null)return t.includeClassMemberFallbacks===!0;let i=(e.documentation??"").replace(/^```\w*\s*/,"").replace(/\s*```$/,"").trim();return/^(?:var|let|const|function|class|interface|type|enum)\b/.test(i)}function vn(e,t,n={}){let r=new Map;for(let o of t)e.length>0&&!DP(o,{includeClassMemberFallbacks:n.includeClassMemberFallbacks})||r.set(o.id,o);for(let o of e)r.set(o.id,o);let i=[...r.values()];return n.sort?i.sort((o,s)=>o.start_line-s.start_line||o.end_line-s.end_line||o.symbol.localeCompare(s.symbol)):i}var kP=j("file-definitions",{clearGroups:["definition-catalog"]}),PP=j("file-function-like-definitions",{clearGroups:["definition-catalog"]}),Yp=new WeakMap;function Y(e,t,n={}){return n.includeClassMemberFallbacks?wl(e,t,void 0,{includeClassMemberFallbacks:!0}):kP.get(e,t,()=>{let r=eg(e,t);if(r)return r;let i=wl(e,t),o=Te(e),s=ut(e).forFile(t,{text:!0}).text;return o&&s&&Zp.write(e,t,ce(e,t,s),{projectFingerprint:o,definitions:i.map(a=>({...a}))}),i})}function TP(e,t){return PP.get(e,t,()=>{let n=eg(e,t);return n?n.filter(r=>r.isFunctionLike):wl(e,t,r=>r.isFunctionLike)})}var Zp=oe({kind:"file-definitions",invalidation:J("file-definitions"),serialize:FP,deserialize:_P});function eg(e,t){let n=Te(e);if(!n)return null;let r=ut(e).forFile(t,{text:!0}).text;if(!r)return null;let i=Zp.read(e,t,ce(e,t,r));return i?LP(i,n,t):null}function FP(e){return JSON.stringify(e)}function _P(e){try{let t=JSON.parse(e);return!Et(t)||typeof t.projectFingerprint!="string"||!Array.isArray(t.definitions)?null:{projectFingerprint:t.projectFingerprint,definitions:t.definitions}}catch{return null}}function LP(e,t,n){if(e.projectFingerprint!==t)return null;let r=[];for(let i of e.definitions){let o=NP(i,n);if(!o)return null;r.push(o)}return r}function NP(e,t){return!Et(e)||typeof e.symbolId!="number"||typeof e.symbol!="string"||typeof e.documentId!="number"||typeof e.startLine!="number"||typeof e.startChar!="number"&&e.startChar!==void 0||typeof e.endLine!="number"||typeof e.endChar!="number"&&e.endChar!==void 0||e.relativePath!==t||typeof e.leaf!="string"||typeof e.parentTypeName!="string"&&e.parentTypeName!==null||typeof e.isFunctionLike!="boolean"||typeof e.isTypeLike!="boolean"||typeof e.kind!="number"&&e.kind!==null||typeof e.documentation!="string"&&e.documentation!==null||typeof e.enclosingSymbol!="string"&&e.enclosingSymbol!==null?null:{symbolId:e.symbolId,symbol:e.symbol,documentId:e.documentId,startLine:e.startLine,startChar:e.startChar,endLine:e.endLine,endChar:e.endChar,relativePath:e.relativePath,leaf:e.leaf,parentTypeName:e.parentTypeName,isFunctionLike:e.isFunctionLike,isTypeLike:e.isTypeLike,kind:e.kind,documentation:e.documentation,enclosingSymbol:e.enclosingSymbol}}function wl(e,t,n,r={}){let i=vn(AP(e,t),MP(e,t),{sort:!0,includeClassMemberFallbacks:r.includeClassMemberFallbacks}).map(tg);return n&&(i=i.filter(n)),ig(e,t,i)}function AP(e,t){return e.all(`SELECT
|
|
141
141
|
gs.id,
|
|
142
142
|
gs.symbol,
|
|
143
143
|
der.document_id,
|
|
@@ -155,7 +155,7 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
155
155
|
JOIN documents d ON der.document_id = d.id
|
|
156
156
|
WHERE d.relative_path = ?
|
|
157
157
|
${e.symbolNoiseFor("gs")}
|
|
158
|
-
ORDER BY der.start_line, der.end_line`,t)}function
|
|
158
|
+
ORDER BY der.start_line, der.end_line`,t)}function MP(e,t){return e.all(`SELECT
|
|
159
159
|
gs.id,
|
|
160
160
|
gs.symbol,
|
|
161
161
|
c.document_id,
|
|
@@ -176,7 +176,7 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
176
176
|
AND m.role = 1
|
|
177
177
|
${e.symbolNoiseFor("gs")}
|
|
178
178
|
GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
|
|
179
|
-
ORDER BY start_line, end_line`,t)}function tg(e){return{symbolId:e.id,symbol:e.symbol,documentId:e.document_id,startLine:e.start_line,startChar:e.start_char??0,endLine:e.end_line,endChar:e.end_char??0,relativePath:e.relative_path,leaf:T(e.symbol),parentTypeName:wt(e.symbol),isFunctionLike:te(e.symbol),isTypeLike:ue(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function xe(e,t={}){return El(e,t.scope)}function El(e,t){return N(e,{scope:t,includeIgnored:!1}).flatMap(n=>Y(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function ng(e,t){return N(e,{scope:t,includeIgnored:!1}).flatMap(n=>
|
|
179
|
+
ORDER BY start_line, end_line`,t)}function tg(e){return{symbolId:e.id,symbol:e.symbol,documentId:e.document_id,startLine:e.start_line,startChar:e.start_char??0,endLine:e.end_line,endChar:e.end_char??0,relativePath:e.relative_path,leaf:T(e.symbol),parentTypeName:wt(e.symbol),isFunctionLike:te(e.symbol),isTypeLike:ue(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function xe(e,t={}){return El(e,t.scope)}function El(e,t){return N(e,{scope:t,includeIgnored:!1}).flatMap(n=>Y(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function ng(e,t){return N(e,{scope:t,includeIgnored:!1}).flatMap(n=>TP(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function Ri(e,t){let n=Xp(OP(e,t.scope,t.sqlPrefilter)),r=Xp(jP(e,t.scope,t.sqlPrefilter)),i=new Set([...n.keys(),...r.keys()]),o=[];for(let s of[...i].sort()){if(e.isIgnored(s))continue;let a=vn(n.get(s)??[],r.get(s)??[],{sort:!0}).filter(c=>t.symbolMatches(c.symbol));a.length!==0&&o.push(...ig(e,s,a.map(tg)))}return o}function OP(e,t,n){let r=t?"AND d.relative_path LIKE ?":"",i=n?`AND ${rg("gs",n)}`:"",o=t?[`%${t}%`]:[];return e.all(`SELECT
|
|
180
180
|
gs.id,
|
|
181
181
|
gs.symbol,
|
|
182
182
|
der.document_id,
|
|
@@ -197,7 +197,7 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
197
197
|
${r}
|
|
198
198
|
${i}
|
|
199
199
|
${e.symbolNoiseFor("gs")}
|
|
200
|
-
ORDER BY d.relative_path, der.start_line, der.end_line`,...o)}function
|
|
200
|
+
ORDER BY d.relative_path, der.start_line, der.end_line`,...o)}function jP(e,t,n){let r=t?"AND d.relative_path LIKE ?":"",i=n?`AND ${rg("gs",n)}`:"",o=t?[`%${t}%`]:[];return e.all(`SELECT
|
|
201
201
|
gs.id,
|
|
202
202
|
gs.symbol,
|
|
203
203
|
c.document_id,
|
|
@@ -220,8 +220,8 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
220
220
|
${i}
|
|
221
221
|
${e.symbolNoiseFor("gs")}
|
|
222
222
|
GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
|
|
223
|
-
ORDER BY d.relative_path, start_line, end_line`,...o)}function
|
|
224
|
-
AND `),o=Kn(e,{where:i,params:r,limit:200}),s=Fr(e,{where:i,params:r,limit:200});return
|
|
223
|
+
ORDER BY d.relative_path, start_line, end_line`,...o)}function BP(e){return`(${e}.symbol LIKE '%().' OR ${e}.symbol LIKE '%()')`}function rg(e,t){return t==="callable"?BP(e):$P(e)}function $P(e){return`(${e}.symbol LIKE '%.' OR ${e}.symbol LIKE '%()')`}function Xp(e){let t=new Map;for(let n of e){let r=t.get(n.relative_path);r?r.push(n):t.set(n.relative_path,[n])}return t}function Cs(e,t,n={}){if(t.length===0)return[];let r=t.flatMap(i=>Y(e,i)).filter(i=>!e.isIgnored(i.relativePath));return n.onlyDocumented&&(r=r.filter(i=>i.documentation!==null&&i.documentation!=="")),n.sort&&(r=r.sort((i,o)=>i.relativePath.localeCompare(o.relativePath)||i.startLine-o.startLine||i.endLine-o.endLine)),r.map(i=>({startLine:i.startLine,endLine:i.endLine,symbol:i.symbol,shortName:I(i.symbol),signature:Yt(Xt(i.documentation)),relativePath:i.relativePath,enclosingSymbol:i.enclosingSymbol}))}function Dl(e){let t=new Map,n=e.map((r,i)=>({definition:r,index:i,span:r.endLine-r.startLine})).sort((r,i)=>r.span-i.span||r.index-i.index);for(let{definition:r}of n)for(let i=r.startLine;i<=r.endLine;i+=1)t.has(i)||t.set(i,r);return t}function Dt(e,t){let n=Yp.get(e);return n||(n=Dl(e),Yp.set(e,n)),n.get(t)??null}function xs(e,t){let n=Y(e,t.relative_path).find(r=>r.symbolId===t.id);return n?{symbolId:n.symbolId,symbol:n.symbol,documentId:n.documentId,startLine:n.startLine,startChar:n.startChar,endLine:n.endLine,endChar:n.endChar,relativePath:n.relativePath}:{symbolId:t.id,symbol:t.symbol,documentId:t.document_id,startLine:t.start_line,startChar:t.start_char??0,endLine:t.end_line,endChar:t.end_char??0,relativePath:t.relative_path}}function ig(e,t,n){let r=ut(e).forFile(t,{text:!0}).text,i=Kc(e,t);return i?VP(n,i,r):r?HP(n,r):n}function HP(e,t){let n=t.split(/\r?\n/),r=UP(e,n),i=WP(e,r),o=GP(i,n);return zP(e,o)}function UP(e,t){let n=e.some(i=>vs(i.symbol))?ZP(t):null,r=new Map;for(let i of e)r.set(i.symbolId,QP(t,n,i));return r}function WP(e,t){return e.filter(n=>vs(n.symbol)).map(n=>({definition:n,startLine:t.get(n.symbolId)??n.startLine})).sort((n,r)=>n.startLine-r.startLine||n.definition.startLine-r.definition.startLine||n.definition.symbol.localeCompare(r.definition.symbol))}function GP(e,t){let n=new Map;for(let r=0;r<e.length;r+=1){let i=e[r],o=e[r+1],s=o?Math.max(i.startLine,o.startLine-1):t.length-1;n.set(i.definition.symbolId,{startLine:i.startLine,endLine:eT(t,i.definition,i.startLine,s)})}return n}function zP(e,t){return e.map(n=>{let r=t.get(n.symbolId);return r?{...n,startLine:r.startLine,endLine:r.endLine}:n})}function VP(e,t,n=null){let r=new Map;for(let i of t){let o=r.get(i.name);o?o.push(i):r.set(i.name,[i])}return e.map(i=>{if(!XP(i)||!i.leaf)return Qp(i,n);let o=r.get(i.leaf);if(!o||o.length===0)return Qp(i,n);let s=n?qP(i,o,n):null;if(s)return{...i,startLine:s.startLine,endLine:s.endLine};let a=o[0],c=Math.abs(a.startLine-i.startLine);for(let l=1;l<o.length;l+=1){let u=o[l],d=Math.abs(u.startLine-i.startLine);d<c&&(a=u,c=d)}return{...i,startLine:a.startLine,endLine:a.endLine}})}function qP(e,t,n){let r=KP(e.symbol);if(!r)return null;let i=n.split(/\r?\n/),o=new RegExp(`\\b${$(r)}\\b`);for(let s of t){let a=JP(i,s.startLine);if(a&&o.test(a))return s}return null}function KP(e){return e.match(/\/impl#\[([^\]]+)\]/)?.[1]??null}function JP(e,t){for(let n=t;n>=0;n-=1){let r=e[n]?.trim()??"";if(r){if(/^impl\b/.test(r))return YP(e,n,t);if(/^(?:struct|enum|trait|mod)\b/.test(r))return null}}return null}function YP(e,t,n){let r=[];for(let i=t;i<=n;i+=1){let o=e[i]??"";if(r.push(o),o.includes("{"))break}return r.join(" ")}function XP(e){return vs(e.symbol)?!0:ue(e.symbol)==="term"&&wt(e.symbol)===null}function Qp(e,t){if(!t||!e.leaf||ue(e.symbol)!=="term"||wt(e.symbol)!==null)return e;let n=$(e.leaf),r=new RegExp(`\\b(?:export\\s+)?(?:const|let|var)\\s+${n}\\b`),o=t.split(/\r?\n/).findIndex(s=>r.test(s));return o>=0?{...e,startLine:o,endLine:o}:e}function QP(e,t,n){if(!vs(n.symbol))return n.startLine;let r=Math.max(0,Math.min(n.startLine,e.length-1));if(!t)return r;let i=t.get(n.leaf);if(!i||i.length===0)return r;let o=null;for(let s of i){let a=Math.abs(s-n.startLine);(!o||a<o.distance)&&(o={line:s,distance:a})}return o?.line??r}function ZP(e){let t=/\b(?:function|def|fn)\s+([A-Za-z_$][\w$]*)/g,n=/\b([A-Za-z_$][\w$]*)\s*[:=]\s*(?:async\s*)?(?:function\b|\()/g,r=/^\s*(?:(?:export|public|private|protected|static|readonly|async|abstract|get|set)\s+)*([A-Za-z_$][\w$]*)\s*(?:<[^(]*>)?\s*\(/,i=/\b([A-Za-z_$][\w$]*)\s*\(/g,o=new Map,s=(a,c)=>{let l=o.get(a);if(!l){o.set(a,[c]);return}l[l.length-1]!==c&&l.push(c)};for(let a=0;a<e.length;a+=1){let c=e[a]??"";for(let u of c.matchAll(t))u[1]&&s(u[1],a);for(let u of c.matchAll(n))u[1]&&s(u[1],a);let l=c.match(r);l?.[1]&&s(l[1],a);for(let u of c.matchAll(i))u[1]&&s(u[1],a)}return o}function eT(e,t,n,r){let i=Math.max(n,Math.min(e.length-1,r)),o=Math.max(n,Math.min(i,t.endLine)),s=0,a=0,c=!1;for(let l=n;l<=i;l+=1){let u=tT(e[l]??"");for(let d of u)d==="{"?(s+=1,c=!0):d==="}"?s=Math.max(0,s-1):d==="("?a+=1:d===")"&&(a=Math.max(0,a-1));if(c&&s===0||!c&&a===0&&l>=o)return l}return o}function tT(e){let t="",n=null,r=!1;for(let i=0;i<e.length;i+=1){let o=e[i],s=e[i+1];if(!n&&o==="/"&&s==="/"){t+=" ".repeat(e.length-i);break}if(n){if(r){r=!1,t+=" ";continue}if(o==="\\"){r=!0,t+=" ";continue}o===n&&(n=null),t+=" ";continue}if(o==='"'||o==="'"||o==="`"){n=o,t+=" ";continue}t+=o}return t}function vs(e){return e.includes("().")}function Rs(e){let t=ye(e);if("kind"in t)return[];let n=[];for(let r=t.descriptors.length-2;r>=0;r-=1){let i=t.descriptors[r];i?.suffix==="type"&&i.name&&n.push(i.name)}return n}var nT=j("symbol-resolution",{clearGroups:[]});function B(e,t){return wi(e,t).match}function wi(e,t){return nT.get(e,t,()=>{let n=sg(e,t.trim()).filter(o=>!e.isIgnored(o.relative_path));if(n.length>0)return Ii(e,n);let r=lT(e,t);if(r&&!e.isIgnored(r.relative_path))return Ii(e,[r]);let i=rT(e,t);return i.length>0?Ii(e,i):aT(e,t)})}function rT(e,t){let n=ws(t),r=kl(n);if(!r)return[];let i=`%${r.path}%`,o=r.leaf;return iT(e,i,o,n)}function iT(e,t,n,r){let i=vn([],[...oT(e,t,n),...sT(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>_r(o,r)>1);return i.sort((o,s)=>_r(s,r)-_r(o,r)||o.end_line-o.start_line-(s.end_line-s.start_line)||o.start_line-s.start_line||o.symbol.localeCompare(s.symbol)),i}function oT(e,t,n){return Kn(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function sT(e,t,n){return Fr(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function aT(e,t){let n=ws(t),r=gT(t),i=fT(e,r),o=hT(i,t,n).filter(a=>!e.isIgnored(a.relative_path));if(o.length>0)return Ii(e,o);let s=[];for(let a of i){if(e.isIgnored(a.relative_path))continue;let c=pT(a,t,n,r);c<=0||s.push({row:a,score:c})}return s.sort((a,c)=>c.score-a.score||a.row.end_line-a.row.start_line-(c.row.end_line-c.row.start_line)||a.row.relative_path.localeCompare(c.row.relative_path)||a.row.symbol.localeCompare(c.row.symbol)),Ii(e,s.map(a=>a.row))}function Ii(e,t){let n=t.map(i=>xs(e,i)),r=n[0]??null;return{match:r,candidates:r?cT(n,r):[],total:n.length}}function cT(e,t){let n=new Set([`${t.symbolId}:${t.relativePath}:${t.startLine}`]),r=[];for(let i of e){let o=`${i.symbolId}:${i.relativePath}:${i.startLine}`;if(!n.has(o)&&(n.add(o),r.push({symbol:i.symbol,shortName:I(i.symbol),relativePath:i.relativePath,startLine:i.startLine}),r.length>=5))break}return r}function lT(e,t){let n=t.match(/^(.+):(\d+)-(\d+)$/);if(!n)return;let[,r,i,o]=n,s=Math.max(0,parseInt(i,10)-1),a=Math.max(s,parseInt(o,10)-1);return uT(e,r,s,a)??dT(e,r,s,a)}function uT(e,t,n,r){return Kn(e,{where:"d.relative_path LIKE ? AND der.start_line <= ? AND der.end_line >= ?",params:[`%${t}%`,n,r],orderBy:"(der.end_line - der.start_line) ASC",limit:1})[0]}function dT(e,t,n,r){return Fr(e,{where:"d.relative_path LIKE ? AND c.start_line <= ? AND c.end_line >= ?",params:[`%${t}%`,n,r],orderBy:"(MAX(c.end_line) - MIN(c.start_line)) ASC",limit:1})[0]}function Ei(e,t){let n=sg(e,t).find(r=>!e.isIgnored(r.relative_path));return n?xs(e,n):null}function sg(e,t){let n=Kn(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line"}),r=n.length>0?[]:Fr(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line"});return vn(n,r)}function Is(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=mT(e,t.symbolId)[0];return n?xs(e,n):null}function mT(e,t){let n=Kn(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),r=Fr(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return vn(n,r)}function fT(e,t){let n=t.map(()=>"(gs.symbol LIKE ? OR d.relative_path LIKE ? OR COALESCE(gs.display_name, '') LIKE ?)"),r=t.flatMap(a=>{let c=`%${a}%`;return[c,c,c]}),i=n.join(`
|
|
224
|
+
AND `),o=Kn(e,{where:i,params:r,limit:200}),s=Fr(e,{where:i,params:r,limit:200});return vn(o,s)}function pT(e,t,n,r){let i=t.trim(),o=n,s=o.replace(/\(\)$/,""),a=t.toLowerCase(),c=n.toLowerCase(),l=c.replace(/\(\)$/,""),u=e.symbol,d=I(e.symbol),m=T(e.symbol),f=e.display_name??"",p=e.symbol.toLowerCase(),g=d.toLowerCase(),y=m.toLowerCase(),h=f.toLowerCase(),x=e.relative_path.toLowerCase(),b=/[/:.]/.test(n),C=kl(n),S=C?.leaf.toLowerCase(),R=0;return(u===i||u===o)&&(R+=1150),(d===i||d===o)&&(R+=1100),f===s&&(R+=1180),m===s&&(R+=1160),(`${m}()`===i||`${m}()`===o)&&(R+=955),(p===a||p===c)&&(R+=1e3),(g===a||g===c)&&(R+=950),(x===a||x===c)&&(R+=925),(x.endsWith(`/${c}`)||x.endsWith(`/${a}`))&&(R+=875),h===l&&(R+=850),y===l&&(R+=825),(`${y}()`===a||`${y}()`===c)&&(R+=820),(g.endsWith(`:${c}`)||g.endsWith(`:${l}`)||g.endsWith(`:${l}()`))&&(R+=800),p.includes(c)&&(R+=120),g.includes(c)&&(R+=140),x.includes(c)&&(R+=140),h.includes(c)&&(R+=110),r.every(v=>{let D=v.toLowerCase();return p.includes(D)||g.includes(D)||x.includes(D)||h.includes(D)})&&(R+=100+r.length*15),C&&x.includes(C.path.toLowerCase())&&(R+=360,S&&(y===S||`${y}()`===S||`${y}()`==`${S}()`)&&(R+=700),le(e.symbol)&&(R+=180)),te(e.symbol)&&y===l&&(R+=60),!b&&gn(e.symbol)&&(R-=160),R-=Math.min(50,Math.max(0,e.end_line-e.start_line)),R}function kl(e){let t=e.trim().replace(/\\/g,"/"),n=t.lastIndexOf("/");if(n<=0||n===t.length-1)return null;let r=t.slice(n+1).replace(/\(\)$/,"");return!r||r.includes(".")?null:{path:t.slice(0,n),leaf:r}}function ws(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function gT(e){let t=ws(e),n=t.split(/[^A-Za-z0-9_]+/).map(r=>r.trim()).filter(r=>r.length>0);return n.length>0?[...new Set(n)]:[t]}function hT(e,t,n){let r=t.trim(),i=e.filter(o=>{let s=I(o.symbol),a=(o.display_name??"").trim();return o.symbol===r||s===r||s===n||a===r||a===n||`${a}()`===r||_r(o,n)>1||o.relative_path===r});return i.length===0?[]:(i.sort((o,s)=>_r(s,n)-_r(o,n)||o.end_line-o.start_line-(s.end_line-s.start_line)||o.relative_path.localeCompare(s.relative_path)||o.symbol.localeCompare(s.symbol)),i)}function _r(e,t){let n=kl(t);if(!n)return 0;let r=e.relative_path.toLowerCase(),i=T(e.symbol).toLowerCase(),o=n.path.toLowerCase(),s=n.leaf.toLowerCase();return r.includes(o)?i!==s?1:le(e.symbol)?wt(e.symbol)===null?5:4:wt(e.symbol)===null?3:2:0}function G8(e,t,n=5){let r=og(t);if(!r)return[];let i=Kn(e,{where:"1 = 1",orderBy:"d.relative_path, der.start_line",limit:5e3}),o=new Map;for(let s of i){if(e.isIgnored(s.relative_path))continue;let a=I(s.symbol),c=T(s.symbol),l=s.display_name??c,u=[a,c,l].filter(f=>f.trim().length>0),d=Math.min(...u.map(f=>yT(og(f),r))),m=o.get(a);(!m||d<m.distance)&&o.set(a,{shortName:a,distance:d})}return[...o.values()].sort((s,a)=>s.distance-a.distance||s.shortName.localeCompare(a.shortName)).slice(0,n).map(s=>s.shortName)}function og(e){return ws(e).toLowerCase().replace(/[^a-z0-9_]+/g,"")}function yT(e,t){if(e===t)return 0;if(e.length===0)return t.length;if(t.length===0)return e.length;let n=Array.from({length:t.length+1},(r,i)=>i);for(let r=0;r<e.length;r++){let i=[r+1];for(let o=0;o<t.length;o++){let s=e[r]===t[o]?0:1;i[o+1]=Math.min(i[o]+1,n[o+1]+1,n[o]+s)}n=i}return n[t.length]}function Es(e,t,n,r={}){if(!n)return[];let i=P(e,t);return i?i.indexOf(n)===-1?[]:(Qt(e,t).get(n)??[]).filter(s=>!bT(s,r)):[]}function bT(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var ST=j("file-identifiers",{clearGroups:["whole-project","source-file"]});function ag(e,t){let n=z(e,t);return n?n.fileIdentifiers:ST.get(e,t,()=>new Set(Qt(e,t).keys()))}var CT=j("file-ident-lines",{clearGroups:["whole-project","source-file"]});function Qt(e,t){let n=z(e,t);return n?n.identifierLineMap:CT.get(e,t,()=>vT(e,t))}var xT=j("file-idents-by-line",{clearGroups:["whole-project","source-file"]});function cg(e,t){let n=z(e,t);return n?n.identifiersByLine:xT.get(e,t,()=>{let r=Qt(e,t),i=0;for(let s of r.values()){let a=s[s.length-1];a!==void 0&&a>i&&(i=a)}let o=new Array(i+1);for(let s=0;s<=i;s+=1)o[s]=new Set;for(let[s,a]of r)for(let c of a)o[c].add(s);return o})}function vT(e,t){let n=new Map,r=(a,c)=>{let l=n.get(a);if(!l){n.set(a,[c]);return}l[l.length-1]!==c&&l.push(c)},i=P(e,t);if(!i)return n;let o=st(i).split(/\r?\n/),s=/\b([A-Za-z_$][\w$]*)\b/g;for(let a=0;a<o.length;a+=1){let c=o[a]??"";for(let l of c.matchAll(s))l[1]&&r(l[1],a)}return n}function lg(e,t){return Ds(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
|
|
225
225
|
m.symbol_id,
|
|
226
226
|
d.relative_path,
|
|
227
227
|
COUNT(*) AS ref_count
|
|
@@ -231,16 +231,16 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
231
231
|
WHERE m.role != 1
|
|
232
232
|
${r}
|
|
233
233
|
${e.pathExclusionsFor("d")}
|
|
234
|
-
GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function ug(e,t){return
|
|
234
|
+
GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function ug(e,t){return Ds(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id, d.relative_path
|
|
235
235
|
FROM mentions m
|
|
236
236
|
JOIN chunks c ON m.chunk_id = c.id
|
|
237
237
|
JOIN documents d ON c.document_id = d.id
|
|
238
238
|
WHERE m.role != 1
|
|
239
239
|
${r}
|
|
240
|
-
${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function dg(e,t){return
|
|
240
|
+
${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function dg(e,t){return Ds(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id
|
|
241
241
|
FROM mentions m
|
|
242
242
|
WHERE m.role != 1
|
|
243
|
-
${r}`,...n??[])}).filter(n=>n.symbol_id!==null)}function Lr(e,t){return
|
|
243
|
+
${r}`,...n??[])}).filter(n=>n.symbol_id!==null)}function Lr(e,t){return Ds(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id, d.relative_path, c.document_id,
|
|
244
244
|
c.start_line AS chunk_start, c.end_line AS chunk_end
|
|
245
245
|
FROM mentions m
|
|
246
246
|
JOIN chunks c ON m.chunk_id = c.id
|
|
@@ -248,7 +248,7 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
248
248
|
WHERE m.role != 1
|
|
249
249
|
${r}
|
|
250
250
|
${e.pathExclusionsFor("d")}
|
|
251
|
-
ORDER BY d.relative_path, c.start_line`,...n??[])})}function
|
|
251
|
+
ORDER BY d.relative_path, c.start_line`,...n??[])})}function Ds(e,t,n){if(!t)return n();if(t.length===0)return[];let r=[];for(let i=0;i<t.length;i+=750)r.push(...n(t.slice(i,i+750)));return r}function ks(e,t){let n=mg(e);return n?t.filter(r=>mg(r.file)===n):t}function Ps(e,t,n,r){let i=n.find(o=>o.file===t);if(i)return i;if(r){let o=new Set(Z(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(Ve(a,s.file))return s;return null}return n.length===1?n[0]:null}function mg(e){let t=M(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var RT=X("global-leaf-index",{clearGroups:["whole-project"]});function Zt(e){return RT.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
|
|
252
252
|
COALESCE(der_doc.relative_path, mention_doc.relative_path) AS relative_path
|
|
253
253
|
FROM global_symbols gs
|
|
254
254
|
LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
@@ -262,7 +262,7 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
262
262
|
GROUP BY m.symbol_id
|
|
263
263
|
) mention_doc ON mention_doc.symbol_id = gs.id
|
|
264
264
|
WHERE 1 = 1
|
|
265
|
-
${e.symbolNoiseFor("gs")}`),n=new Map;for(let r of t){if(!r.relative_path||e.isIgnored(r.relative_path))continue;let i=T(r.symbol);if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.some(s=>s.symbolId===r.id)||o.push({symbol:r.symbol,symbolId:r.id,file:r.relative_path})}return n})}var fg=/[A-Za-z_$][A-Za-z0-9_$]*/g,pg=/^[A-Za-z_$][A-Za-z0-9_$]*$/,
|
|
265
|
+
${e.symbolNoiseFor("gs")}`),n=new Map;for(let r of t){if(!r.relative_path||e.isIgnored(r.relative_path))continue;let i=T(r.symbol);if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.some(s=>s.symbolId===r.id)||o.push({symbol:r.symbol,symbolId:r.id,file:r.relative_path})}return n})}var fg=/[A-Za-z_$][A-Za-z0-9_$]*/g,pg=/^[A-Za-z_$][A-Za-z0-9_$]*$/,IT=512;function Di(e){let t=[],n=!1;for(let r of e)r&&(n=!0,pg.test(r)||t.push(r));return{candidateNames:e,hasUsableCandidate:n,nonIdentifierNames:t}}function Ts(e,t){let n=wT(t)?t:Di(t);if(n.candidateNames.size===0||!n.hasUsableCandidate)return!0;if(n.candidateNames.size<=IT){for(let i of n.candidateNames)if(i){if(pg.test(i)){if(ET(i).test(e))return!0;continue}if(e.includes(i))return!0}return!1}fg.lastIndex=0;let r;for(;(r=fg.exec(e))!==null;)if(n.candidateNames.has(r[0]))return!0;for(let i of n.nonIdentifierNames)if(e.includes(i))return!0;return!1}function wT(e){return"candidateNames"in e}function ET(e){return new RegExp(`(?<![A-Za-z_$0-9])${$(e)}(?![A-Za-z_$0-9])`)}var DT=j("source-import-paths-by-local-name",{clearGroups:["whole-project","source-file"]});function Fs(e,t){let n=yn(t);return DT.get(e,n,()=>kT(e,n))}function kT(e,t){let n=new Map;for(let r of Z(e,t)){if(!r.sourcePath)continue;let i=r.localName??r.importedName;if(i&&gg(n,i,r.sourcePath),r.kind==="namespace")for(let o of r.usedMembers)gg(n,o,r.sourcePath)}return n}function gg(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function Nr(e,t,n){let r=Zt(e).get(n);if(!r||r.length===0)return[];if(r.length===1)return[ki(r[0])];let i=r.filter(c=>c.file===t);if(i.length>0)return i.map(ki);let o=Fs(e,t),s=o.get(n);if(s)for(let c of s){let l=r.filter(u=>Ve(c,u.file));if(l.length>0)return l.map(ki)}let a=new Set;for(let c of o.values())for(let l of c)a.add(l);for(let c of a){let l=r.filter(u=>Ve(c,u.file));if(l.length>0&&l.length===r.length)return l.map(ki)}return[]}function hg(e,t,n){let r=Nr(e,t,n);if(r.length>0)return r;let i=Zt(e).get(n);return!i||i.length===0?[]:i.map(ki)}function yg(e,t,n={}){let r=Is(e,t);if(!r)return[];let i=T(r.symbol);if(!i)return[];if(n.semantic!==!1&&n.semanticEvidence){let s=n.semanticEvidence.references(e,{...r,leaf:i,parentTypeName:null,isFunctionLike:!1,isTypeLike:!1,kind:null,documentation:null,enclosingSymbol:null});if(s.length>0){let a=new Map;for(let c of s){let l=a.get(c.file)??[];l.push(c.line),a.set(c.file,l)}return _s(e,a)}}let o=new Map;for(let s of $e(e)){let a=P(e,s);if(!a||a.indexOf(i)===-1||s!==r.relativePath&&!Nr(e,s,i).some(u=>u.symbolId===r.symbolId))continue;let c=Es(e,s,i,s===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{});c.length>0&&o.set(s,c)}return _s(e,o)}function bg(e,t,n={}){let r=new Map;for(let c of t){if(!c.leaf)continue;let l=r.get(c.leaf)??[];l.push(c),r.set(c.leaf,l)}if(r.size===0)return new Map;let i=new Set(t.map(c=>c.symbolId)),o=new Set(r.keys()),s=Di(o),a=new Map;for(let c of $e(e)){if(n.skipPath?.(c)||!Ts(P(e,c),s))continue;let l=ag(e,c);if(l.size!==0){for(let u of l)if(r.has(u))for(let d of Nr(e,c,u)){if(!i.has(d.symbolId)||c===d.relativePath)continue;let m=a.get(d.symbolId);m||(m=new Set,a.set(d.symbolId,m)),m.add(c)}}}return a}function ki(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function _s(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=Y(e,i);for(let a of o){let c=Dt(s,a),l=`${i}|${a}|${c?.symbol??""}`;r.has(l)||(r.add(l),n.push({file:i,line:a,enclosingSymbol:c?.symbol??null}))}}return n}function Pi(e,t){let n=NT(e,t);return n?_s(e,TT(e,n.match,n.identifier)):[]}function kt(e,t,n={}){return PT(e,t,n).map(r=>({file:r.file,line:r.line,enclosingSymbol:r.enclosingSymbol}))}function PT(e,t,n={}){let r=yg(e,t,{semantic:n.semantic,semanticEvidence:n.semanticEvidence}),i=r.length>0?Sg(r,"source-attribution"):Sg(Pi(e,t),"scip-reference-chunk");return n.includeIgnored===!0?i:i.filter(o=>!e.isIgnored(o.file))}function Sg(e,t){return e.map(n=>({...n,provenance:t}))}function TT(e,t,n){let r=new Map;for(let[i,o]of FT(e,t.symbolId))r.set(i,_T(e,i,o,t,n));return r}function FT(e,t){let n=new Map;for(let r of Lr(e,[t])){if(e.isIgnored(r.relative_path))continue;let i=n.get(r.relative_path);i||(i=[],n.set(r.relative_path,i)),i.push({start_line:r.chunk_start,end_line:r.chunk_end})}return n}function _T(e,t,n,r,i){let o=t===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{},s=i?Es(e,t,i,o):[];return n.flatMap(a=>LT(s,a))}function LT(e,t){let n=e.filter(r=>r>=t.start_line&&r<=t.end_line);return n.length>0?n:[t.start_line]}function NT(e,t){let n=Is(e,t);return n?{match:n,identifier:T(n.symbol)||null}:null}var Cg=$n({kind:"file-dependency-graph",invalidation:J("file-dependency-graph"),serialize:e=>JSON.stringify(e),deserialize:HT}),AT=j("file-dep-graph",{clearGroups:["whole-project"]});function ie(e,t,n={}){let r=n.scipEdges??"all-references",i=n.sourceEdges??"imports-only",o=jT(t,r,i);return AT.get(e,o,()=>{let s=new Set(N(e,{includeIgnored:!1})),a=Te(e),c=0,l=0,u=null,d=!1,m=0,f=0;return E("file-dep-graph.product",()=>{if(a){let h=Cg.read(e,o,a);if(h){d=!0;let x=$T(h);return c=h.sourceFileCount,l=h.sourceEdgeCount,m=h.scipEdgeCount,f=x.size,u=h.sourceDependencyFingerprint,x}}let p=E("file-dep-graph.source-imports",()=>{let h=MT(e,s,t,i);return c=h.files.length,l=h.edges.length,u=h.fingerprint,h},()=>({scope:t??null,sourceEdges:i,files:c,edges:l})),g=new Map,y=(h,x)=>zT(e,g,s,h,x);E("file-dep-graph.scip-edges",()=>{for(let h of GT(e,t,r))m+=1,y(h.from_file,h.to_file)},()=>({scope:t??null,edges:m}));for(let h of p.edges)y(h.fromFile,h.toFile);return f=g.size,a&&Cg.write(e,o,a,{sourceDependencyFingerprint:p.fingerprint,sourceFileCount:p.files.length,sourceEdgeCount:p.edges.length,scipEdgeCount:m,graph:BT(g)}),g},()=>({scope:t??null,available:a!==null,hit:d,files:c,sourceEdges:l,sourceEdgeMode:i,scipEdges:m,graphFiles:f,sourceDependencyFingerprint:u}))})}function MT(e,t,n,r){let i=[],o=[];for(let s of t)if(!(n&&!s.includes(n))){i.push(s);for(let a of Z(e,s))a.sourcePath&&o.push({fromFile:s,toFile:a.sourcePath});if(r==="imports-and-reexports")for(let a of Jt(e,s))a.sourcePath&&o.push({fromFile:s,toFile:a.sourcePath})}return{files:i,edges:o,fingerprint:OT(i,o)}}function OT(e,t){let n=t.map(r=>`${r.fromFile}\0${r.toFile}`).sort();return he(JSON.stringify({files:e,edges:n}))}function jT(e,t,n){return`edge-mode-v3:${t}:${n}:${e??"<all>"}`}function BT(e){return[...e].map(([t,n])=>[t,[...n]])}function $T(e){return new Map(e.graph.map(([t,n])=>[t,new Set(n)]))}function HT(e){let t=JSON.parse(e);return UT(t)?t:null}function UT(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sourceDependencyFingerprint=="string"&&typeof t.sourceFileCount=="number"&&typeof t.sourceEdgeCount=="number"&&typeof t.scipEdgeCount=="number"&&Array.isArray(t.graph)&&t.graph.every(WT)}function WT(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&Array.isArray(e[1])&&e[1].every(t=>typeof t=="string")}function GT(e,t,n){let r=t?"AND d1.relative_path LIKE ?":"",i=t?[`%${t}%`]:[],o=n==="imports-only"?"AND m.role = 2":"AND m.role != 1";return e.all(`SELECT DISTINCT
|
|
266
266
|
d1.relative_path AS from_file,
|
|
267
267
|
d2.relative_path AS to_file
|
|
268
268
|
FROM mentions m
|
|
@@ -280,15 +280,15 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
280
280
|
WHERE d1.id != d2.id
|
|
281
281
|
${o}
|
|
282
282
|
${e.pathExclusionsFor("d1","d2")}
|
|
283
|
-
${r}`,...i)}function
|
|
284
|
-
`:i),
|
|
285
|
-
`).filter(Boolean)}catch{return null}}function VF(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?Yg(e,r):e,o;try{o=MF(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){Xg(a)||n.push(a);continue}t.push(a)}}return t}function Xg(e){let t=e.split("/");return e==="meta.json"||t.some(n=>qF.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var qF=new Set([".git","node_modules",".scipquery-cache",".scipquery-generations",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);var JF=new Set(["Cargo.lock","Cargo.toml","rust-project.json","rust-toolchain","rust-toolchain.toml"]);function Qg(e){let t=Bl(e,{includePath:YF});return KF("sha256").update(JSON.stringify(t)).digest("hex")}function YF(e){let t=e.replaceAll("\\","/"),n=t.split("/").at(-1)??t;return t.endsWith(".rs")||JF.has(n)?!0:t===".cargo/config"||t===".cargo/config.toml"||t.endsWith("/.cargo/config")||t.endsWith("/.cargo/config.toml")}var oh=2,n_=5e3,r_=5e3,sh=10,i_=3e4;function eh(e,t,n,r=uh){let i=r.engineIdentity(e),o={protocolVersion:oh,projectRoot:r.canonicalProjectRoot(e),projectFingerprint:r.projectFingerprint(e),engine:{engine:i.engine,resolvedBinary:i.resolvedBinary,version:i.version},workerFingerprint:r.fileFingerprint(t),environment:ah(r.environment())};return{key:Bs(js(o)),...o}}function Fi(e,t,n){return e.protocolVersion===oh&&(t-e.heartbeatAtMs<=n_||e.busyUntilMs!==void 0&&t<=e.busyUntilMs)&&n(e.pid)}function Hl(e,t,n){let r;try{r=Bs($s(t))}catch{r="missing"}let i=Bs(js({projectRoot:kt(e),serverPath:kt(t),serverFingerprint:r})).slice(0,20);return kt(n,`scip-query-rust-session-${i}`)}function th(e){let t=e===void 0?Number.NaN:Number(e);return Number.isInteger(t)&&t>=0?t:0}function ah(e){return Object.fromEntries(Object.entries(e).filter(([t])=>lh(t)).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,n??null]))}function ch(e,t){let n=t.runtime??l_,r=t.identityRuntime??uh,i=Hl(e,t.serverPath,t.tempRoot??t_()),o=!1,s=(a,c)=>{if(o)throw new Error("Durable Rust semantic session was already disposed.");return s_(i,t.serverPath,t.semanticWorkerPath,a,c,n)};return{requestSemantic(a,c){let l=eh(e,t.semanticWorkerPath,a,r),u=n.now()+Math.max(1,c-1e3);return s({kind:"semantic",identityKey:l.key,workerEnvironment:rh(),request:{...a,readinessDeadlineMs:u,referenceRetryTimeoutMs:o_(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,a.referenceRetryTimeoutMs),settleDelayMs:process.env.SCIP_RUST_SEMANTIC_SETTLE_MS===void 0?a.settleDelayMs:th(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS)},timeoutMs:c},c)},requestImportDefinitions(a,c){let l=eh(e,t.semanticWorkerPath,a,r),u=n.now()+Math.max(1,c-1e3);return s({kind:"import-definitions",identityKey:l.key,workerEnvironment:rh(),request:{...a,readinessDeadlineMs:u,settleDelayMs:process.env.SCIP_RUST_SEMANTIC_SETTLE_MS===void 0?a.settleDelayMs:th(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS)},timeoutMs:c},c)},shutdown(){o=!0}}}function o_(e,t){return t!==void 0?t:e===void 0?i_:void 0}function s_(e,t,n,r,i,o){let s=o.randomId(),a=o.now(),c=kt(e,"requests"),l=kt(e,"responses"),u=kt(c,`${s}.json`),d=kt(l,`${s}.json`);Zg(c,{recursive:!0}),Zg(l,{recursive:!0}),Fe(u,{id:s,request:r});let m=o.now()+i;try{for(nh(e,t,n,m,o);o.now()<=m;){if(ih(d)){let p=a_($s(d,"utf8"));if(!p.ok)throw new Error(p.error);return U()&&pn({type:"span",name:"rust.semantic.durable-session.request",durationMs:o.now()-a,ok:!0,session:p.session,kind:r.kind}),p.response}let f=_i(e);(!f||!Fi(f,o.now(),o.isProcessAlive))&&nh(e,t,n,m,o),o.sleep(sh)}throw new Error(`Durable Rust semantic session timed out after ${(i/1e3).toFixed(0)}s.`)}finally{$l(u,{force:!0}),$l(d,{force:!0})}}function nh(e,t,n,r,i){let o=_i(e);if(o&&Fi(o,i.now(),i.isProcessAlive))return;$l(kt(e,"server.json"),{force:!0}),i.spawnServer(t,e,n);let s=Math.min(r,i.now()+r_);for(;i.now()<=s;){let a=_i(e);if(a&&Fi(a,i.now(),i.isProcessAlive))return;i.sleep(sh)}throw new Error("Durable Rust semantic session helper did not become ready within 5s.")}function _i(e){try{let t=JSON.parse($s(kt(e,"server.json"),"utf8"));return typeof t.protocolVersion!="number"||typeof t.pid!="number"||typeof t.heartbeatAtMs!="number"||t.busyUntilMs!==void 0&&typeof t.busyUntilMs!="number"?null:{protocolVersion:t.protocolVersion,pid:t.pid,heartbeatAtMs:t.heartbeatAtMs,...t.busyUntilMs===void 0?{}:{busyUntilMs:t.busyUntilMs}}}catch{return null}}function a_(e){try{let t=JSON.parse(e);return t.ok===!0&&(t.session==="created"||t.session==="reused"||t.session==="invalidated")&&t.response&&typeof t.response=="object"?{ok:!0,session:t.session,response:t.response}:{ok:!1,error:typeof t.error=="string"?t.error:"helper wrote an invalid response"}}catch(t){return{ok:!1,error:`helper wrote malformed JSON: ${t instanceof Error?t.message:String(t)}`}}}function rh(){return Object.fromEntries(Object.entries(process.env).filter(([e])=>c_(e)).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,t??null]))}function lh(e){return e==="HOME"||e==="PATH"||e.startsWith("CARGO_")||e.startsWith("RA_")||e.startsWith("RUST")}function c_(e){return lh(e)||e.startsWith("SCIP_RUST_")||e==="SCIP_QUERY_PROFILE"||e==="SCIP_QUERY_PROFILE_CACHE_STATE"||e==="SCIP_QUERY_PROFILE_COMMAND"||e==="SCIP_QUERY_PROFILE_OUT"||e==="SCIP_QUERY_PROFILE_RUN_ID"||e==="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY"||e==="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY_KIND"||e==="SCIP_QUERY_PROFILE_MIN_MS"}var uh={canonicalProjectRoot(e){try{return e_(e)}catch{return kt(e)}},projectFingerprint(e){return Qg(e)},engineIdentity:Ol,fileFingerprint(e){return Bs($s(e))},environment(){return ah(process.env)}},l_={now:Date.now,randomId:ZF,isProcessAlive:dt,spawnServer(e,t,n){if(!ih(e))throw new Error(`Durable Rust semantic session helper was not found at ${e}. Run npm run build first.`);XF(process.execPath,[e,t,n],{detached:!0,stdio:"ignore"}).unref()},sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)}};function js(e){return Array.isArray(e)?`[${e.map(js).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>`${JSON.stringify(t)}:${js(n)}`).join(",")}}`:JSON.stringify(e)}function Bs(e){return QF("sha256").update(e).digest("hex")}var fh=15e3,ph=8,hh=5e3,p_=64,g_=96,Vl=class{constructor(t,n,r={}){this.projectRoot=t;this.status=n;this.opts=r;this.requester=r.requester??b_(t,process.env.SCIP_RUST_SEMANTIC_DURABLE_SESSION)}projectRoot;status;opts;requester;referencesForDefinitions(t){let n=this.status(this.projectRoot);if(!n.available||!n.resolvedBinary)return{available:!1,resolvedBinary:n.resolvedBinary,reason:n.reason,references:Li(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,references:In(t,new Map(r.references),new Set(r.incompleteReferenceSymbolIds??[]))}}catch(r){return this.opts.fallbackReferenceResolver?.referencesForDefinitions(t)??{available:!1,resolvedBinary:n.resolvedBinary,reason:r instanceof Error?r.message:String(r),references:Li(t)}}}calleesForDefinitions(t){let n=this.status(this.projectRoot);if(!n.available||!n.resolvedBinary)return{available:!1,resolvedBinary:n.resolvedBinary,reason:n.reason,callees:Ni(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!1,includeCallees:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,callees:Gl(t,new Map(r.callees??[]))}}catch(r){return this.opts.fallbackCalleeResolver?.calleesForDefinitions(t)??{available:!1,resolvedBinary:n.resolvedBinary,reason:r instanceof Error?r.message:String(r),callees:Ni(t)}}}referencesAndCalleesForDefinitions(t,n){let r=this.status(this.projectRoot);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,references:Li(t),callees:Ni(n)};let i=[...t,...n];try{let o=this.requestSession(r.resolvedBinary,i,{includeReferences:t.length>0,includeCallees:n.length>0,referenceDefinitions:t,calleeDefinitions:n});return{available:o.available,resolvedBinary:r.resolvedBinary,reason:o.reason,references:In(t,new Map(o.references),new Set(o.incompleteReferenceSymbolIds??[])),callees:Gl(n,new Map(o.callees??[]))}}catch(o){return this.fallbackReferencesAndCallees(r,t,n,o)}}signaturesForDefinitions(t){let n=this.status(this.projectRoot);if(!n.available||!n.resolvedBinary)return{available:!1,resolvedBinary:n.resolvedBinary,reason:n.reason,signatures:gh(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!1,includeCallees:!1,includeSignatures:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,signatures:v_(t,new Map(r.signatures??[]))}}catch(r){return this.opts.fallbackSignatureResolver?.signaturesForDefinitions(t)??{available:!1,resolvedBinary:n.resolvedBinary,reason:r instanceof Error?r.message:String(r),signatures:gh(t)}}}importDefinitionsForFile(t,n){let r=this.status(this.projectRoot);if(n.length===0)return{available:r.available,resolvedBinary:r.resolvedBinary,reason:r.reason,sourcePaths:new Map};if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,sourcePaths:new Map(n.map(i=>[i.id,null]))};try{let i=this.requestImportDefinitions(r.resolvedBinary,t,n);return{available:i.available,resolvedBinary:r.resolvedBinary,reason:i.reason,sourcePaths:new Map(i.sourcePaths)}}catch(i){return{available:!1,resolvedBinary:r.resolvedBinary,reason:i instanceof Error?i.message:String(i),sourcePaths:new Map(n.map(o=>[o.id,null]))}}}dispose(){this.requester.shutdown()}requestSession(t,n,r){let i=Hs(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,fh),o=Us(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,0),s=Hs(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,ph),a=Us(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(i,1e4)),c=r.referenceDefinitions?[...r.referenceDefinitions]:void 0,l=r.calleeDefinitions?[...r.calleeDefinitions]:void 0,u=r.signatureDefinitions?[...r.signatureDefinitions]:void 0,d=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,...r}),m={projectRoot:this.projectRoot,rustAnalyzerBinary:t,definitions:[...n],...c?{referenceDefinitions:c}:{},...l?{calleeDefinitions:l}:{},...u?{signatureDefinitions:u}:{},requestTimeoutMs:i,...r.includeReferences!==!1&&o>0?{referenceRetryTimeoutMs:o}:{},diagnosticsTimeoutMs:a,settleDelayMs:d,concurrency:s,includeReferences:r.includeReferences,includeCallees:r.includeCallees,includeSignatures:r.includeSignatures},f=I_(m);return E("rust.semantic.session.request",()=>this.requester.requestSemantic(m,Jn(f,ql(i,m.referenceRetryTimeoutMs),s)),()=>({definitions:n.length,operationDefinitions:f,referenceDefinitions:m.referenceDefinitions?.length,calleeDefinitions:m.calleeDefinitions?.length,signatureDefinitions:m.signatureDefinitions?.length,references:m.includeReferences!==!1,callees:m.includeCallees===!0,signatures:m.includeSignatures===!0,referenceRetryTimeoutMs:m.referenceRetryTimeoutMs}))}fallbackReferencesAndCallees(t,n,r,i){let o=n.length===0?{available:!0,references:Li(n)}:this.opts.fallbackReferenceResolver?.referencesForDefinitions(n),s=r.length===0?{available:!0,callees:Ni(r)}:this.opts.fallbackCalleeResolver?.calleesForDefinitions(r);return o&&s?{available:o.available&&s.available,resolvedBinary:o.resolvedBinary??s.resolvedBinary??t.resolvedBinary,reason:o.reason??s.reason,references:In(n,o.references),callees:Gl(r,s.callees)}:{available:!1,resolvedBinary:t.resolvedBinary,reason:i instanceof Error?i.message:String(i),references:Li(n),callees:Ni(r)}}requestImportDefinitions(t,n,r){let i=Hs(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,fh),o=Hs(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,ph),s=Us(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(i,1e4)),a=Us(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,hh),c={projectRoot:this.projectRoot,rustAnalyzerBinary:t,file:n,positions:[...r],requestTimeoutMs:i,diagnosticsTimeoutMs:s,settleDelayMs:a,concurrency:o};return E("rust.semantic.import-definitions.session.request",()=>this.requester.requestImportDefinitions(c,Jn(r.length,i,o)),()=>({file:n,positions:r.length}))}};function yh(e,t,n={}){return new Vl(e,t,n)}function Mi(e,t){let n=xh(e);if(n!==null)return n;let r=t.includeReferences!==!1;return r&&t.includeCallees!==!0&&t.includeSignatures!==!0&&t.definitionCount<=p_||r&&t.includeCallees===!0&&t.includeSignatures!==!0&&t.definitionCount<=g_?0:hh}function bh(e){let t=e?.trim().toLowerCase(),n=t==="0"||t==="false"||t==="off"||t==="worker",r=t==="1"||t==="true"||t==="on"||t==="durable",i=t===void 0||t==="";return{transport:n||!i&&!r?"worker":"durable",source:i?"default":"environment",fallback:"worker",valid:i||n||r,optOut:"SCIP_RUST_SEMANTIC_DURABLE_SESSION=0"}}function h_(e){return bh(e).transport}function o6(e,t){let n=bh(t);if(n.transport==="worker")return{...n,state:"per-command"};let r=Ai(Ch()),i=Hl(e,r,zl()),o=_i(i);return o?{...n,state:Fi(o,Date.now(),dt)?"live":"stale",pid:o.pid,heartbeatAtMs:o.heartbeatAtMs,...o.busyUntilMs===void 0?{}:{busyUntilMs:o.busyUntilMs}}:{...n,state:"stopped"}}function y_(e,t){let n=null,r=!1,i=!1,o=!1,s=()=>n??=t(),a=()=>{i||(e.shutdown(),i=!0)},c=(u,d,m)=>{let f=R_(u);r=!0;try{a()}catch{}U()&&pn({type:"span",name:"rust.semantic.durable-session.request",durationMs:m,ok:!1,kind:d,session:"worker-fallback",reason:f})},l=(u,d,m)=>{if(o)throw new Error("Rust semantic failover session was already disposed.");if(r)return m(s());let f=Date.now();try{return d(e)}catch(p){c(p,u,Date.now()-f)}return m(s())};return{requestSemantic(u,d){return l("semantic",m=>m.requestSemantic(u,d),m=>m.requestSemantic(u,d))},requestImportDefinitions(u,d){return l("import-definitions",m=>m.requestImportDefinitions(u,d),m=>m.requestImportDefinitions(u,d))},shutdown(){if(o)return;o=!0;let u=[];try{a()}catch(d){u.push(d)}try{n?.shutdown()}catch(d){u.push(d)}if(u.length>0)throw u[0]}}}function b_(e,t,n={worker:()=>S_(),durable:()=>ch(e,{serverPath:Ai(Ch()),semanticWorkerPath:Ai(Sh())})}){return h_(t)==="durable"?y_(n.durable(),n.worker):n.worker()}function S_(e={}){let t=null,n=null,r=1,i=!1,o=()=>{n&&(Ul(n,{recursive:!0,force:!0}),n=null)},s=()=>{let l=t;t=null,l&&l.terminate(),o()},a=()=>{if(t)return t;let l=e.semanticWorkerPath?d_(e.semanticWorkerPath):Sh();if(!u_(Ai(l)))throw new Error(`Rust semantic session worker was not found at ${Ai(l)}. Run npm run build before using built semantic Rust queries.`);return n=dh(Wl(zl(),"scip-query-rust-session-")),t=new f_(l,e.shareEnvironment?{env:m_}:void 0),t.unref(),t},c=()=>{let l=n??dh(Wl(zl(),"scip-query-rust-session-"));return n=l,Wl(l,`${r++}.json`)};return{requestSemantic(l,u){if(i)throw new Error("Rust semantic session was already disposed.");let d=a(),m=c(),f=new SharedArrayBuffer(4),p=new Int32Array(f);if(d.postMessage({kind:"semantic",request:l,responsePath:m,sharedBuffer:f}),Atomics.wait(p,0,0,u)==="timed-out")throw s(),new Error(`Rust semantic session worker timed out after ${(u/1e3).toFixed(0)}s`);try{let y=C_(mh(m,"utf8"));if(!y.ok)throw new Error(y.error);return y.response}finally{Ul(m,{force:!0})}},requestImportDefinitions(l,u){if(i)throw new Error("Rust semantic session was already disposed.");let d=a(),m=c(),f=new SharedArrayBuffer(4),p=new Int32Array(f);if(d.postMessage({kind:"import-definitions",request:l,responsePath:m,sharedBuffer:f}),Atomics.wait(p,0,0,u)==="timed-out")throw s(),new Error(`Rust semantic import-definition session worker timed out after ${(u/1e3).toFixed(0)}s`);try{let y=x_(mh(m,"utf8"));if(!y.ok)throw new Error(y.error);return y.response}finally{Ul(m,{force:!0})}},shutdown(){if(i)return;if(i=!0,!t){o();return}let l=c(),u=new SharedArrayBuffer(4),d=new Int32Array(u);t.postMessage({kind:"shutdown",responsePath:l,sharedBuffer:u}),Atomics.wait(d,0,0,5e3),s()}}}function C_(e){let t=JSON.parse(e);if(!t||typeof t!="object")return{ok:!1,error:"Rust semantic session worker wrote a non-object response."};let n=t;return n.ok===!0&&"response"in n?{ok:!0,response:n.response}:{ok:!1,error:typeof t.error=="string"?t.error:"Rust semantic session worker failed."}}function x_(e){let t=JSON.parse(e);if(!t||typeof t!="object")return{ok:!1,error:"Rust semantic session worker wrote a non-object response."};let n=t;return n.ok===!0&&"response"in n?{ok:!0,response:n.response}:{ok:!1,error:typeof t.error=="string"?t.error:"Rust semantic session worker failed."}}function R_(e){let t=e instanceof Error?`${e.name} ${e.message}`.toLowerCase():String(e).toLowerCase();return t.includes("readiness")?"readiness":t.includes("timeout")||t.includes("timed out")?"timeout":t.includes("helper")?"helper":"request"}function Li(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Ni(e){return new Map(e.map(t=>[t.symbolId,[]]))}function gh(e){return new Map(e.map(t=>[t.symbolId,null]))}function Gl(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??[]]))}function v_(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??null]))}function I_(e){let t=0;return e.includeReferences!==!1&&(t+=(e.referenceDefinitions??e.definitions).length),e.includeCallees===!0&&(t+=(e.calleeDefinitions??e.definitions).length),e.includeSignatures===!0&&(t+=(e.signatureDefinitions??e.definitions).length),Math.max(1,t)}function ql(e,t){return t&&t>0?Math.max(e,t):e}function Sh(){return new URL("./rust-semantic-session-worker.js",import.meta.url)}function Ch(){return new URL("./rust-semantic-session-server.js",import.meta.url)}function Hs(e,t){return vn(e)??t}function Us(e,t){return xh(e)??t}function xh(e){if(!e)return null;let t=Number(e);return Number.isInteger(t)&&t>=0?t:null}var Yl=15e3,Xl=8;function wh(e,t={}){let n=t.status??As,r=P_(e,n),i=k_(e,n),o=T_(e,n),s=t.referenceResolver||t.calleeResolver||t.signatureResolver||!E_(t)?null:yh(e,n,{fallbackReferenceResolver:r,fallbackCalleeResolver:i,fallbackSignatureResolver:o}),a=t.referenceResolver??s??r,c=t.calleeResolver??s??i,l=t.signatureResolver??s??o,u=t.importUsageResolver??vg(t.sourceImportUsageResolver??D_(),t.importDefinitionResolver??s),d=t.calleeSymbolResolver,m=t.sourceZeroCalleeOracle,f=t.scipOccurrenceCalleeOracle,p=new Map,g=new Map,y=null,h=null,x=()=>(y??=n(e),y),b=()=>{let D=x();return D.dependencyAvailable?h??D:D},C=D=>{if(D.length===0)return new Map;let w=Oi(D);try{let P=a.referencesForDefinitions(w),L=x();return h={...L,available:P.available,resolvedBinary:P.resolvedBinary??L.resolvedBinary,reason:P.reason??L.reason},P.available?new Map(P.references):In(w,P.references)}catch(P){return h={...x(),available:!1,reason:P instanceof Error?P.message:String(P)},Xn(w)}},S=D=>{if(D.length===0)return new Map;let w=Oi(D),P=w.filter(Rh);if(P.length===0)return Qn(w);let L=new Map,re=Ih(P,f),Q=[];for(let _ of P)g.has(_.symbolId)?L.set(_.symbolId,g.get(_.symbolId)??[]):re.has(_.symbolId)?L.set(_.symbolId,re.get(_.symbolId)??[]):vh(_,m)?L.set(_.symbolId,[]):Q.push(_);if(Q.length===0)return Ar(w,L,void 0);try{let _=c.calleesForDefinitions(Q),ae=x();h={...ae,available:_.available,resolvedBinary:_.resolvedBinary??ae.resolvedBinary,reason:_.reason??ae.reason};let ee=Ar(Q,_.callees,d);for(let[dn,Rc]of ee)L.set(dn,Rc);return Ar(w,L,void 0)}catch(_){return h={...x(),available:!1,reason:_ instanceof Error?_.message:String(_)},Qn(w)}},v=(D,w)=>{let P=Oi(D),L=Oi(w),re=L.filter(Rh),Q=new Map,_=Ih(re,f),ae=[];for(let ee of re)_.has(ee.symbolId)?Q.set(ee.symbolId,_.get(ee.symbolId)??[]):vh(ee,m)?Q.set(ee.symbolId,[]):ae.push(ee);if(P.length===0&&ae.length===0)return{references:Xn(P),callees:Ar(L,Q,void 0)};try{let ee=s?s.referencesAndCalleesForDefinitions(P,ae):N_(a,c,{referenceDefinitions:P,calleeDefinitions:ae}),dn=x();h={...dn,available:ee.available,resolvedBinary:ee.resolvedBinary??dn.resolvedBinary,reason:ee.reason??dn.reason};let Rc=ee.available?new Map(ee.references):In(P,ee.references);for(let[vc,Ic]of ee.callees)Q.set(vc,Ic);let zm=Ar(L,Q,d);for(let[vc,Ic]of zm)g.set(vc,Ic);return{references:Rc,callees:zm}}catch(ee){return h={...x(),available:!1,reason:ee instanceof Error?ee.message:String(ee)},{references:Xn(P),callees:Qn(L)}}},R=D=>{if(D.length===0)return new Map;let w=Oi(D);try{let P=l.signaturesForDefinitions(w),L=x();return h={...L,available:P.available,resolvedBinary:P.resolvedBinary??L.resolvedBinary,reason:P.reason??L.reason},Eh(w,P.signatures)}catch(P){return h={...x(),available:!1,reason:P instanceof Error?P.message:String(P)},Ws(w)}};return{language:"rust",availability:b,dispose:()=>{s?.dispose()},importUsage:D=>{let w=p.get(D);if(w)return w;try{let P=u.importUsage(D);return p.set(D,P),P}catch(P){return h={...x(),available:!1,reason:P instanceof Error?P.message:String(P)},[]}},referencesFor:D=>C([D]).get(D.symbolId)??[],referencesForDefinitions:C,referencesAndCalleesForDefinitions:v,calleesFor:D=>S([D]).get(D.symbolId)??[],calleesForDefinitions:S,signatureFor:D=>R([D]).get(D.symbolId)??null}}function E_(e){if(e.usePersistentSession!==void 0)return e.usePersistentSession;let t=process.env.SCIP_RUST_SEMANTIC_SESSION;return t!=="0"&&t!=="false"}function D_(){return{importUsageFacts:()=>({usage:[],positions:[]})}}function Oi(e){return e.map(t=>{let n=t;return{...t,leaf:typeof n.leaf=="string"?n.leaf:T(t.symbol),parentTypeName:n.parentTypeName??null,isFunctionLike:typeof n.isFunctionLike=="boolean"?n.isFunctionLike:te(t.symbol),isTypeLike:n.isTypeLike??!1,kind:n.kind??null,documentation:n.documentation??null,enclosingSymbol:n.enclosingSymbol??null}})}function Rh(e){return e.isFunctionLike}function vh(e,t){if(!t)return!1;try{return t(e)}catch{return!1}}function Ih(e,t){if(!t||e.length===0)return new Map;try{return t(e)}catch{return new Map}}function P_(e,t){return{referencesForDefinitions:n=>F_(e,t,n)}}function k_(e,t){return{calleesForDefinitions:n=>__(e,t,n)}}function T_(e,t){return{signaturesForDefinitions:n=>L_(e,t,n)}}function F_(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,references:Xn(n)};let i=Ql();if(!Jl(i))return{available:!1,resolvedBinary:r.resolvedBinary,reason:`Rust semantic worker was not found at ${i}. Run npm run build before using built semantic Rust queries.`,references:Xn(n)};let o=Mr(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Yl),s=Gs(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,0),a=Mr(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Xl),c=Gs(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),l=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,includeReferences:!0}),u={projectRoot:e,rustAnalyzerBinary:r.resolvedBinary,definitions:[...n],requestTimeoutMs:o,...s>0?{referenceRetryTimeoutMs:s}:{},diagnosticsTimeoutMs:c,settleDelayMs:l,concurrency:a},d=Kl(process.execPath,[i],{cwd:e,input:JSON.stringify(u),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Jn(n.length,ql(o,u.referenceRetryTimeoutMs),a)}),m=Zl(d.stdout);if(m)return{available:m.available,resolvedBinary:r.resolvedBinary,reason:m.reason,references:In(n,new Map(m.references),new Set(m.incompleteReferenceSymbolIds??[]))};let f=d.error instanceof Error?d.error.message:d.stderr.trim()||`Rust semantic worker exited with status ${d.status??"unknown"}.`;return{available:!1,resolvedBinary:r.resolvedBinary,reason:f,references:Xn(n)}}function __(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,callees:Qn(n)};let i=Ql();if(!Jl(i))return{available:!1,resolvedBinary:r.resolvedBinary,reason:`Rust semantic worker was not found at ${i}. Run npm run build before using built semantic Rust queries.`,callees:Qn(n)};let o=Mr(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Yl),s=Mr(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Xl),a=Gs(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),c=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,includeReferences:!1,includeCallees:!0}),l={projectRoot:e,rustAnalyzerBinary:r.resolvedBinary,definitions:[...n],requestTimeoutMs:o,diagnosticsTimeoutMs:a,settleDelayMs:c,concurrency:s,includeReferences:!1,includeCallees:!0},u=Kl(process.execPath,[i],{cwd:e,input:JSON.stringify(l),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Jn(n.length,o,s)}),d=Zl(u.stdout);if(d)return{available:d.available,resolvedBinary:r.resolvedBinary,reason:d.reason,callees:Ar(n,new Map(d.callees??[]),void 0)};let m=u.error instanceof Error?u.error.message:u.stderr.trim()||`Rust semantic worker exited with status ${u.status??"unknown"}.`;return{available:!1,resolvedBinary:r.resolvedBinary,reason:m,callees:Qn(n)}}function L_(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,signatures:Ws(n)};let i=Ql();if(!Jl(i))return{available:!1,resolvedBinary:r.resolvedBinary,reason:`Rust semantic worker was not found at ${i}. Run npm run build before using built semantic Rust queries.`,signatures:Ws(n)};let o=Mr(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Yl),s=Mr(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Xl),a=Gs(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),c=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,includeReferences:!1,includeCallees:!1,includeSignatures:!0}),l={projectRoot:e,rustAnalyzerBinary:r.resolvedBinary,definitions:[...n],requestTimeoutMs:o,diagnosticsTimeoutMs:a,settleDelayMs:c,concurrency:s,includeReferences:!1,includeCallees:!1,includeSignatures:!0},u=Kl(process.execPath,[i],{cwd:e,input:JSON.stringify(l),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Jn(n.length,o,s)}),d=Zl(u.stdout);if(d)return{available:d.available,resolvedBinary:r.resolvedBinary,reason:d.reason,signatures:Eh(n,new Map(d.signatures??[]))};let m=u.error instanceof Error?u.error.message:u.stderr.trim()||`Rust semantic worker exited with status ${u.status??"unknown"}.`;return{available:!1,resolvedBinary:r.resolvedBinary,reason:m,signatures:Ws(n)}}function N_(e,t,n){let r=n.referenceDefinitions.length>0?e.referencesForDefinitions(n.referenceDefinitions):{available:!0,references:Xn(n.referenceDefinitions)},i=n.calleeDefinitions.length>0?t.calleesForDefinitions(n.calleeDefinitions):{available:!0,callees:Qn(n.calleeDefinitions)};return{available:r.available&&i.available,resolvedBinary:r.resolvedBinary??i.resolvedBinary,reason:r.reason??i.reason,references:r.references,callees:i.callees}}function Xn(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Qn(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Ws(e){return new Map(e.map(t=>[t.symbolId,null]))}function Ar(e,t,n){let r=0,i=0;return E("rust.semantic.callees.complete-map",()=>{let o=new Map;for(let s of e){let a=t.get(s.symbolId)??[];a.length>0&&(r+=1),i+=a.length,o.set(s.symbolId,a.map(c=>({...c,symbol:n?n(c):c.symbol})))}return o},()=>({definitions:e.length,rows:r,callees:i,resolveSymbols:!!n}))}function Eh(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??null]))}function Ql(){return w_(new URL("./rust-semantic-worker.js",import.meta.url))}function Zl(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;return typeof n.available!="boolean"||!Array.isArray(n.references)?null:{available:n.available,reason:typeof n.reason=="string"?n.reason:void 0,references:n.references,incompleteReferenceSymbolIds:Array.isArray(n.incompleteReferenceSymbolIds)?n.incompleteReferenceSymbolIds.filter(r=>typeof r=="number"):void 0,callees:Array.isArray(n.callees)?n.callees:void 0,signatures:Array.isArray(n.signatures)?n.signatures:void 0}}catch{return null}}function Mr(e,t){return vn(e)??t}function Gs(e,t){if(!e)return t;let n=Number(e);return Number.isInteger(n)&&n>=0?n:t}import{existsSync as A_,readFileSync as M_}from"fs";import{deserializeSCIP as O_,SymbolRole as j_}from"@c4312/scip";var eu=new WeakMap;function Ph(e,t){let n=t.filter(B_);if(n.length===0)return new Map;let r=!1,i=0,o=0;return E("rust.scip-occurrence.callees",()=>{let s=U_(e);if(r=!!s,!s)return new Map;let a=new Map;for(let c of n){let l=$_(e,s,c);l!==null&&(a.set(c.symbolId,l),i+=1,o+=l.length)}return a},()=>({definitions:t.length,candidates:n.length,indexAvailable:r,resolvedDefinitions:i,resolvedCallees:o}))}function B_(e){return!(!e.symbol.startsWith("rust-analyzer ")||!e.relativePath.endsWith(".rs")||!e.isFunctionLike||e.leaf==="main"||Ie(e.symbol))}function $_(e,t,n){let r=z(e,n.relativePath);if(!r||r.language!=="rust")return null;let i=r.callables.find(l=>l.startLine!==n.startLine||l.endLine!==n.endLine?!1:l.name===n.leaf||n.leaf.endsWith(l.name)||l.name.endsWith(n.leaf));if(!i)return null;let o=r.callSites.filter(l=>l.line>=i.startLine&&l.line<=i.endLine);if(o.length===0)return null;let s=(t.occurrencesByFile.get(n.relativePath)??[]).filter(l=>l.line>=i.startLine&&l.line<=i.endLine&&l.callee.symbol!==n.symbol);if(s.some(l=>l.traitImplMember)||!H_(o,s))return null;let a=[],c=new Set;for(let l of s){let u=`${l.callee.symbol}\0${l.callee.file}\0${l.callee.line}`;c.has(u)||(c.add(u),a.push(l.callee))}return a}function H_(e,t){let n=Dh(e),r=Dh(t);if(n.size!==r.size)return!1;for(let[i,o]of n)if(r.get(i)!==o)return!1;return!0}function Dh(e){let t=new Map;for(let n of e){let r=n.calleeLeaf??n.leaf;if(!r)continue;let i=`${n.line}\0${r}`;t.set(i,(t.get(i)??0)+1)}return t}function U_(e){if(eu.has(e))return eu.get(e)??null;let t=W_(e);return eu.set(e,t),t}function W_(e){if(!A_(e.config.indexPath))return null;try{let t=xe(e).filter(o=>o.symbol.startsWith("rust-analyzer ")&&o.relativePath.endsWith(".rs")&&o.isFunctionLike),n=new Map(t.map(o=>[o.symbol,o])),r=O_(M_(e.config.indexPath)),i=new Map;for(let o of r.documents??[]){let s=o.relativePath;if(!s||!s.endsWith(".rs")||e.isIgnored(s))continue;let a=[];for(let c of o.occurrences??[]){if(!c.symbol||(c.symbolRoles&j_.Definition)!==0)continue;let l=n.get(c.symbol);if(!l)continue;let u=c.range?.[0];Number.isInteger(u)&&a.push({line:u,leaf:l.leaf,traitImplMember:Ie(l.symbol),callee:{symbol:l.symbol,file:l.relativePath,line:l.startLine}})}i.set(s,a)}return{occurrencesByFile:i}}catch{return null}}var zs=class{sessions=new WeakMap;getOrCreate(t,n,r){let i=G_(t,n),o=this.sessions.get(t);o||(o=new Map,this.sessions.set(t,o));let s=o.get(i);if(s)return s.hits+=1,s.lastUsedAtMs=Date.now(),s.provider;let a=Date.now(),c=r();return o.set(i,{key:i,language:n,projectRoot:t.config.projectRoot,provider:c,createdAtMs:a,lastUsedAtMs:a,hits:1}),c}sessionsFor(t){return[...this.sessions.get(t)?.values()??[]]}clear(t){let n=this.sessions.get(t);if(n)for(let r of n.values())r.provider.dispose?.();this.sessions.delete(t)}};function G_(e,t){return`${e.config.projectRoot}:${t}-workspace`}import{randomUUID as FL}from"crypto";import{existsSync as _L,mkdirSync as ny,readFileSync as LL,rmSync as ry}from"fs";import{dirname as NL,resolve as iy}from"path";import{readFileSync as z_}from"fs";import{join as tu}from"path";var P6=4,kh=5e3,V_="watch.lock",q_="watch-state.json",K_="watch-activity.json";function Th(e){return{lockPath:tu(e,V_),statePath:tu(e,q_),activityPath:tu(e,K_)}}function nu(e){try{return J_(JSON.parse(z_(e,"utf8")))}catch{return null}}function J_(e){if(!e||typeof e!="object")return null;let t=e;return t.version!==1||typeof t.protocolVersion!="number"||typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0||typeof t.projectRoot!="string"||t.worktreeId!==void 0&&(typeof t.worktreeId!="string"||t.worktreeId.length===0)||typeof t.cliVersion!="string"||!Ze(t.startedAt)||!Ze(t.heartbeatAt)||!Ze(t.lastActivityAt)||!Y_(t.watcher)||t.idleDeadlineAt!==void 0&&!Ze(t.idleDeadlineAt)||t.indexGeneration!==void 0&&!/^[a-f0-9]{64}$/.test(t.indexGeneration)||t.lastError!==void 0&&!X_(t.lastError)||t.lastRefresh!==void 0&&!Q_(t.lastRefresh)||t.reindexActivity!==void 0&&!Z_(t.reindexActivity)||t.typescriptSemantic!==void 0&&!eL(t.typescriptSemantic)||t.typescriptIndex!==void 0&&!tL(t.typescriptIndex)?null:t}function Ze(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function Y_(e){if(!e||typeof e!="object"||!("state"in e))return!1;let t=e;switch(t.state){case"idle":return!0;case"waiting":return Qe(t.changedFiles)&&Qe(t.reindexAt);case"indexing":return Qe(t.startedAt);case"cooldown":return Qe(t.until)&&typeof t.dirty=="boolean";default:return!1}}function X_(e){if(!e||typeof e!="object")return!1;let t=e;return Ze(t.at)&&typeof t.message=="string"}function Q_(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.trigger?.kind=="string"&&typeof t.result=="string"&&Ze(t.startedAt)&&Ze(t.completedAt)&&Qe(t.durationMs)}function Z_(e){if(!e||typeof e!="object")return!1;let t=e;return!Ze(t.windowStartedAt)||!Ze(t.windowEndedAt)||!Xe(t.runs)||!Xe(t.rebuilt)||!Xe(t.reused)||!Xe(t.failed)||!Xe(t.suppressed)||!Qe(t.estimatedLogicalOutputBytes)||t.estimatedLogicalOutputBytes<0||!t.byTrigger||typeof t.byTrigger!="object"?!1:Object.values(t.byTrigger).every(n=>n===void 0||Xe(n))}function eL(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.protocolVersion=="number"&&(t.state==="idle"||t.state==="ready"||t.state==="unavailable"||t.state==="error")&&Qe(t.requests)&&Qe(t.sessionsCreated)&&Qe(t.sessionsReused)&&Qe(t.sessionsRefreshed)&&Qe(t.sessionsReplaced)&&Qe(t.projectsCreated)&&(t.lastRequestAt===void 0||Ze(t.lastRequestAt))&&(t.lastError===void 0||typeof t.lastError=="string")&&(t.busyUntil===void 0||Ze(t.busyUntil))}function tL(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.protocolVersion=="number"&&(t.state==="idle"||t.state==="ready"||t.state==="unavailable"||t.state==="error")&&Xe(t.requests)&&Xe(t.sessionsCreated)&&Xe(t.sessionsReplaced)&&Xe(t.initializations)&&Xe(t.programUpdates)&&Xe(t.documentsEmitted)&&Xe(t.documentsRemoved)&&(t.lastRequestAt===void 0||Ze(t.lastRequestAt))&&(t.lastDurationMs===void 0||Qe(t.lastDurationMs)&&t.lastDurationMs>=0)&&(t.lastError===void 0||typeof t.lastError=="string")&&(t.busyUntil===void 0||Ze(t.busyUntil))}function Qe(e){return typeof e=="number"&&Number.isFinite(e)}function Xe(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}import{performance as W}from"perf_hooks";function mt(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import Fh from"path";function nL(e,t){return e.getReferences().map(n=>{let r=n.getNode();return Vs(r,t)})}function rL(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function _h(e,t,n,r){let i=[];for(let o of rL(e))for(let s of nL(o,r))s.file===t.relativePath&&s.line>=t.startLine&&s.line<=t.endLine||i.push(s);for(let o of n)i.push(o);return Or(i)}function Lh(e,t,n,r){let i=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();jr(r,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||i.push({location:Vs(a,r),node:a}))}return i}function Vs(e,t){let n=e.getSourceFile(),r=n.getLineAndColumnAtPos(e.getStart());return{file:jr(t,n.getFilePath())??n.getBaseName(),line:r.line-1,column:r.column-1}}function Nh(e,t,n){let r=e.getSourceFile(),i=iu(r,e),o=e.getText(),s=new RegExp(`\\b${$(o)}\\b`,"g"),a=r.getFullText().split(`
|
|
286
|
-
`),c=[];for(let l=0;l<a.length;l++){if(l===i)continue;let u=a[l]??"";s.lastIndex=0;let d;for(;(d=s.exec(u))!==null;)c.push({file:t,line:l,column:d.index})}return Or(c.filter(l=>jr(n,Fh.join(n,l.file))===t))}function ru(e){for(let t=e;t;t=t.getParent()){let n=t.getKindName();if(n.includes("Type")||n==="InterfaceDeclaration"||n==="TypeAliasDeclaration")return!0;if(n==="CallExpression"||n==="NewExpression"||n==="ExpressionStatement")return!1}return!1}function iu(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function Or(e){let t=new Set,n=[];for(let r of e){let i=`${r.file}:${r.line}:${r.column}`;t.has(i)||(t.add(i),n.push(r))}return n}function jr(e,t){let n=Fh.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function Ah(e,t,n,r){let i=iL(t,r);return i.size===0?new Map:oL(e,n,i)}function iL(e,t){let n=new Map;for(let r of Y(e,t)){let i=T(r.symbol)??r.leaf;if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push(r)}return n}function oL(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of sL(e,o)){let a=n.get(s);if(!a)continue;let c=iu(t,o);for(let l of a){if(c<l.startLine-1||c>l.endLine+1)continue;let u=Math.abs(c-l.startLine),d=i.get(l.symbolId);d!==void 0&&d<=u||(i.set(l.symbolId,u),r.set(l.symbolId,o))}}}),r}function sL(e,t){let n=[],r=i=>{i&&!n.includes(i)&&n.push(i)};if("getNameNode"in t&&typeof t.getNameNode=="function"){let i=t.getNameNode();r(i?.getText())}if("getName"in t&&typeof t.getName=="function"){let i=t.getName();r(i)}return e.Node.isIdentifier(t)&&r(t.getText()),n}var aL=j("ts-definition-leaf-candidates",{clearGroups:["definition-catalog"]});function Mh(e,t,n,r){let i=au(e,t),o=ou(i.get(r)??[],n);if(o)return o;let s=[];for(let a of i.values())for(let c of a)((c.leaf||T(c.symbol)||"").includes(r)||c.symbol.includes(r))&&s.push(c);return ou(s,n)}function su(e,t,n,r){return ou(au(e,t).get(r)??[],n)}function Oh(e,t){let n=new Map;for(let[r,i]of au(e,t)){let o=i[0];o&&n.set(r,o)}return n}function au(e,t){return aL.get(e,t,()=>{let n=new Map;for(let r of Y(e,t)){let i=r.leaf||T(r.symbol);if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push({...r,leaf:i})}for(let r of n.values())r.sort((i,o)=>i.startLine-o.startLine||i.endLine-o.endLine||i.symbolId-o.symbolId);return n})}function ou(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let i of e){let o=Math.abs(i.startLine-t);(o<r||o===r&&n&&i.startLine<n.startLine)&&(n=i,r=o)}return n}import cu from"path";var ji=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function Tt(e){let t=e.toLowerCase();return ji.some(n=>t.endsWith(n))}function jh(e,t){let n=new Map,r=null,i=null,o=()=>(i??=N(e,{extensions:ji}),i),s=()=>(r??=E("typescript.source-file-index",()=>cL(e.config.projectRoot,t,o()),()=>({projects:t.length,indexedDocuments:o().length})),r),a=c=>Tt(c)?mt(n,c,()=>{let l=Bi(cu.resolve(e.config.projectRoot,c));for(let{project:u,sourceFiles:d}of s()){let m=d.get(l)??null;if(m||(m=u.addSourceFileAtPathIfExists(l)??null,m&&d.set(Bi(m.getFilePath()),m)),m)return{project:u,sourceFile:m}}return null}):null;return{sourceFile:c=>a(c)?.sourceFile??null,sourceFileMatch:a,indexedTypeScriptLikeDocuments:o}}function cL(e,t,n){let r=t.map(({project:i})=>({project:i,sourceFiles:new Map(i.getSourceFiles().map(o=>[Bi(o.getFilePath()),o]))}));for(let i of n){let o=Bi(cu.resolve(e,i));for(let s of r){if(s.sourceFiles.has(o))break;let a=s.project.addSourceFileAtPathIfExists(o)??null;if(a){s.sourceFiles.set(Bi(a.getFilePath()),a);break}}}return r}function Bi(e){return cu.resolve(e)}function lu(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function Bh(e){let t=`${e.relativeDir}/src`;return[`${t}/index.ts`,`${t}/index.tsx`,`${t}/index.mts`,`${t}/index.cts`]}import{existsSync as $i,readFileSync as lL}from"fs";import _e from"path";var uu=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function du(e,t){let r=t?_e.dirname(_e.join(e,t)):e,i=_e.resolve(e);for(;r.startsWith(i);){for(let s of uu){let a=_e.join(r,s);if($i(a))return a}let o=_e.dirname(r);if(o===r)break;r=o}for(let o of uu){let s=_e.join(e,o);if($i(s))return s}return null}function $h(e){let t=e.config.projectRoot,n=new Set(uL(t,e.config.semantic?.typescript?.tsconfigs)),r=N(e,{includeIgnored:!1,extensions:ji});for(let i of r){let o=du(t,i);o&&n.add(_e.resolve(o))}if(n.size===0){let i=du(t);i&&n.add(_e.resolve(i))}return[...n].filter(i=>!Hh(t,i)).sort((i,o)=>i.localeCompare(o))}function uL(e,t=[]){let n=new Set;for(let r of t){let i=_e.isAbsolute(r)?r:_e.join(e,r);$i(i)&&n.add(_e.resolve(i))}for(let r of dL(e))for(let i of uu){let o=_e.join(r,i);$i(o)&&n.add(_e.resolve(o))}if(n.size===0){let r=du(e);r&&n.add(_e.resolve(r))}return[...n].filter(r=>!Hh(e,r)).sort((r,i)=>r.localeCompare(i))}function dL(e){let t=_e.join(e,"package.json");if(!$i(t))return[];let n;try{n=JSON.parse(lL(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>tl(e,i))}function Hh(e,t){let n=_e.relative(e,t).replace(/\\/g,"/");return n.startsWith("..")||n.includes("/node_modules/")||n.startsWith("node_modules/")||n.includes("/dist/")||n.startsWith("dist/")}import{createRequire as mL}from"module";var Uh=mL(import.meta.url),Hi,qs;function mu(){if(Hi!==void 0)return Hi;try{Hi=Uh("ts-morph")}catch{Hi=null}return Hi}function Ks(){if(qs)return qs;let e=mu();if(!e)return"ts-morph:unavailable";let t="unknown";try{t=Uh("ts-morph/package.json").version??"unknown"}catch{}return qs=`ts-morph:${t}:typescript:${e.ts.version}`,qs}function Wh(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!0})}))}function Js(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function Ys(e,t){let n=new Map(e.map(i=>[i.symbol,i])),r=new Map(e.map(i=>[i.symbolId,[]]));for(let i of t.values())for(let o of i){let s=n.get(o.targetSymbol);s&&r.get(s.symbolId).push(o.location)}for(let[i,o]of r)r.set(i,fL(o));return r}function Vh(e,t,n){let r=zh(e,t),i=zh(e,n),o=[...r].filter(d=>!i.has(d)).sort(),s=[...i].filter(d=>!r.has(d)).sort(),a=Gh(e,t),c=Gh(e,n),l=[...a].filter(d=>!c.has(d)).sort(),u=[...c].filter(d=>!a.has(d)).sort();return{passed:o.length===0&&s.length===0,expectedCount:r.size,actualCount:i.size,missing:o,extra:s,callerFiles:{passed:l.length===0&&u.length===0,expectedCount:a.size,actualCount:c.size,missing:l,extra:u}}}function Gh(e,t){let n=new Set;for(let r of e)for(let i of t.get(r.symbolId)??[])i.file!==r.relativePath&&n.add(`${r.symbol}\0${i.file}`);return n}function qh(e,t,n){let r=new Set(n),i=new Map(n.map(o=>[o,[]]));for(let o of e)for(let s of t.get(o.symbolId)??[])r.has(s.file)&&i.get(s.file).push({targetSymbol:o.symbol,location:s});for(let[o,s]of i)i.set(o,pL(s));return i}function zh(e,t){let n=new Set;for(let r of e)for(let i of t.get(r.symbolId)??[])n.add(`${r.symbol}\0${i.file}\0${i.line}\0${i.column}`);return n}function fL(e){let t=new Map;for(let n of e)t.set(`${n.file}\0${n.line}\0${n.column}`,n);return[...t.values()].sort(Kh)}function pL(e){let t=new Map;for(let n of e){let{location:r}=n;t.set(`${n.targetSymbol}\0${r.file}\0${r.line}\0${r.column}`,n)}return[...t.values()].sort((n,r)=>n.targetSymbol.localeCompare(r.targetSymbol)||Kh(n.location,r.location))}function Kh(e,t){return e.file.localeCompare(t.file)||e.line-t.line||e.column-t.column}var gL=32;function ey(e,t){let n=E("typescript.provider.load",()=>mu());if(!n)return Js("ts-morph is not installed");let r=E("typescript.provider.tsconfig-discovery",()=>$h(e));if(r.length===0)return Js("no tsconfig found");try{let i=E("typescript.provider.project-bundles",()=>Wh(n,r),()=>({tsconfigs:r.length}));return hL(e,n,i)}catch(i){return Js(i instanceof Error?i.message:String(i),r[0],r)}}function hL(e,t,n,r={}){return E("typescript.provider.construct",()=>new pu(e,t,n),()=>({tsconfigs:n.length,reusedProjects:r.reusedProjects===!0}))}var pu=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=Ir(t.config.projectRoot),this.sourceFiles=jh(t,r)}db;tsMorph;projects;language="typescript";importUsageCache=new Map;referencesCache=new Map;calleesCache=new Map;fileCalleesCache=new Map;signatureCache=new Map;definitionNodeCache=new Map;fileDefinitionNodeCache=new Map;indexedDefinitionLeafCache=new Map;compilerCheckerCache=new WeakMap;packageImportReferenceIndex=null;packageExportIndex=null;workspacePackages;sourceFiles;availability(){return{available:!0,tsconfigPath:this.projects[0]?.tsconfigPath,tsconfigPaths:this.projects.map(t=>t.tsconfigPath)}}importUsage(t){return mt(this.importUsageCache,t,()=>{let n=this.sourceFiles.sourceFile(t);if(!n)return[];let r=bL();return E("typescript.import-usage.file",()=>this.importUsageForSourceFile(t,n,r),()=>({file:t,...r}))})}referencesFor(t){return mt(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t);return this.referencesForDefinitionNode(t,n)})}referencesForDefinitions(t,n={}){let r=new Map,i=U(),o=[];for(let u of t){let d=this.referencesCache.get(u.symbolId);d?r.set(u.symbolId,d):o.push(u)}if(o.length===0)return r;let s=o,a=n.exact?[]:o.filter(u=>!Yh(u));if(a.length>=gL){let u=this.referencesForDefinitionsBySymbolScan(a);for(let d of a){let m=u.get(d.symbolId)??[];this.referencesCache.set(d.symbolId,m),r.set(d.symbolId,m)}if(s=o.filter(d=>Yh(d)),s.length===0)return r}let c=new Map;for(let u of s){let d=c.get(u.relativePath);d?d.push(u):c.set(u.relativePath,[u])}let l=[];for(let[u,d]of c){let m=Xh();E("typescript.references-map.file",()=>{let f=this.definitionNodesForFile(u);for(let p of d){i&&(m.cacheMisses+=1);let g=f.get(p.symbolId)??null;i&&(g?m.nodeHits+=1:m.nodeMisses+=1);try{let y=this.referencesForDefinitionNode(p,g,i?m:void 0);this.referencesCache.set(p.symbolId,y),r.set(p.symbolId,y)}catch{m.preciseSearchFailures+=1,l.push(p)}}},()=>({relativePath:u,definitions:d.length,...Qh(m)}))}if(l.length>0){let u=this.referencesForDefinitionsBySymbolScan(l);for(let d of l){let m=u.get(d.symbolId)??[];this.referencesCache.set(d.symbolId,m),r.set(d.symbolId,m)}}return r}referenceFragmentsForFiles(t){let n=xe(this.db).filter(o=>Tt(o.relativePath)),r=t.filter(o=>this.sourceFiles.sourceFile(o)!==null),i=this.referencesForDefinitionsBySymbolScan(n,r);return qh(n,i,r)}referencesForDefinitionsBySymbolScan(t,n){let r=U(),i=Xh(),o=new Map,s=new Set(t.map(c=>c.symbolId)),a=new Map(t.map(c=>[c.symbolId,c]));for(let c of t)o.set(c.symbolId,[]);return E("typescript.references-map.inverted-scan",()=>{let c=r?W.now():0,l=n?this.packageImportReferencesForFiles(n):this.packageImportReferences();for(let y of t){let h=l.get(y.symbolId)??[];if(h.length>0){let x=o.get(y.symbolId)??[];x.push(...h),o.set(y.symbolId,x)}r&&(i.packageReferenceCount+=h.length)}r&&(i.packageRefsMs+=W.now()-c);let u=new Map,d=new Map,m=this.hierarchyTargetsForDefinitions(t),f=new Set(t.map(y=>y.leaf).filter(Boolean)),p=r?W.now():0;for(let y of n??this.sourceFiles.indexedTypeScriptLikeDocuments()){if(this.db.isIgnored(y))continue;let h=this.sourceFiles.sourceFile(y);h&&(r&&(i.scanFiles+=1),this.addReferencesFromSourceFileScan(h,y,s,a,m,f,u,d,o,r?i:void 0))}r&&(i.scanMs+=W.now()-p);let g=r?W.now():0;this.addHierarchyMemberReferences(t,o,r?i:void 0),r&&(i.hierarchyMs+=W.now()-g);for(let[y,h]of o){let x=Or(h);o.set(y,x),r&&(i.referenceCount+=x.length)}},()=>({definitions:t.length,...Qh(i)})),o}addReferencesFromSourceFileScan(t,n,r,i,o,s,a,c,l,u){let d=this.compilerCheckerForSourceFile(t),m=t.compilerNode,f=xL(t),p=g=>{if(this.tsMorph.ts.isIdentifier(g)){if(u&&(u.identifiers+=1),!s.has(g.text)&&!f.has(g.text)){this.tsMorph.ts.forEachChild(g,p);return}let y=this.compilerReferenceSymbol(d,g,u);if(y){let h;a.has(y)?h=a.get(y)??null:(h=this.referenceDefinitionFromCompilerSymbol(y),a.set(y,h)),u&&(h?u.targetHits+=1:u.targetMisses+=1);let x=mt(c,y,()=>this.compilerSymbolKeys(y)),b=null,C=null,S=h&&r.has(h.symbolId)?i.get(h.symbolId):void 0;if(S&&(b=fu(m,g),!Jh(S,n,b))){let v=m.getLineAndCharacterOfPosition(g.getStart(m));C={file:n,line:v.line,column:v.character};let R=l.get(S.symbolId)??[];R.push(C),l.set(S.symbolId,R),u&&(u.requestedHits+=1)}for(let v of x)for(let R of o.get(v)?.values()??[]){if(b??=fu(m,g),Jh(R,n,b))continue;if(!C){let w=m.getLineAndCharacterOfPosition(g.getStart(m));C={file:n,line:w.line,column:w.character}}let D=l.get(R.symbolId)??[];D.push(C),l.set(R.symbolId,D),u&&(u.requestedHits+=1)}}}this.tsMorph.ts.forEachChild(g,p)};p(m)}hierarchyTargetsForDefinitions(t){let n=new Map;for(let r of t){let i=this.nodeForDefinition(r),o=i?.compilerNode;if(!o||!this.isHierarchyMethod(o))continue;let s=o.parent;if(!this.isHierarchyContainer(s))continue;let a=this.compilerCheckerForSourceFile(i.getSourceFile()),c=a.getSymbolAtLocation(o.name);if(c)for(let l of this.hierarchyMemberSymbols(a,s,c))for(let u of this.compilerSymbolKeys(l)){let d=n.get(u)??new Map;d.set(r.symbolId,r),n.set(u,d)}}return n}hierarchyMemberSymbols(t,n,r){let i=new Set,o=new Set,s=(a,c,l)=>{if(!o.has(a)){o.add(a),i.add(c);for(let u of l){let d=u.getProperty(r.name);d&&s(u,d,this.hierarchyAncestorTypesForType(t,u))}}};return s(t.getTypeAtLocation(n),r,this.hierarchyAncestorTypes(t,n)),i}addHierarchyMemberReferences(t,n,r){let i=new Map;for(let o of t){let s=this.nodeForDefinition(o),a=s?.compilerNode;if(!a||!this.isHierarchyMethod(a))continue;let c=a.parent;if(!this.isHierarchyContainer(c))continue;let l=this.compilerCheckerForSourceFile(s.getSourceFile()),u=l.getSymbolAtLocation(a.name);if(!u)continue;let d=a.getSourceFile(),m=d.getLineAndCharacterOfPosition(a.name.getStart(d)),f={definition:o,location:{file:o.relativePath,line:m.line,column:m.character}},p=n.get(o.symbolId)??[];for(let y of this.hierarchyMemberSymbols(l,c,u))if(y!==u)for(let h of this.compilerSymbolLocations(y))p.push(h),r&&(r.hierarchyReferences+=1);n.set(o.symbolId,p);let g=this.hierarchyRootMemberSymbols(l,c,u);for(let y of g){let h=i.get(y)??new Map;h.set(o.symbolId,f),i.set(y,h)}r&&(r.hierarchyDefinitions+=1)}for(let o of i.values())if(!(o.size<2)){r&&(r.hierarchyFamilies+=1);for(let{definition:s}of o.values()){let a=n.get(s.symbolId)??[];for(let c of o.values())c.definition.symbolId!==s.symbolId&&(a.push(c.location),r&&(r.hierarchyReferences+=1));n.set(s.symbolId,a)}}}hierarchyRootMemberSymbols(t,n,r){let i=new Set,o=new Set,s=(a,c,l)=>{if(o.has(a))return;o.add(a);let u=!1;for(let d of l){let m=d.getProperty(r.name);m&&(u=!0,s(d,m,this.hierarchyAncestorTypesForType(t,d)))}if(!u)for(let d of this.compilerSymbolKeys(c))i.add(d)};return s(t.getTypeAtLocation(n),r,this.hierarchyAncestorTypes(t,n)),i}compilerSymbolKeys(t){return(t.declarations??[]).map(n=>{let r=n.getSourceFile();return`${r.fileName}\0${n.getStart(r)}\0${t.name}`})}compilerSymbolLocations(t){let n=[];for(let r of t.declarations??[]){let i=r.getSourceFile(),o=jr(this.db.config.projectRoot,i.fileName);if(!o)continue;let s=r.name,a=i.getLineAndCharacterOfPosition((s??r).getStart(i));n.push({file:o,line:a.line,column:a.character})}return n}baseTypes(t,n){try{return t.getBaseTypes(n)??[]}catch{return[]}}hierarchyAncestorTypes(t,n){let r=new Set(this.hierarchyAncestorTypesForType(t,t.getTypeAtLocation(n)));for(let i of n.heritageClauses??[])for(let o of i.types)r.add(t.getTypeAtLocation(o));return[...r]}hierarchyAncestorTypesForType(t,n){let r=new Set(this.baseTypes(t,n));for(let i of n.getSymbol()?.declarations??[])if(this.isHierarchyContainer(i))for(let o of i.heritageClauses??[])for(let s of o.types)r.add(t.getTypeAtLocation(s));return[...r]}isHierarchyMethod(t){return this.tsMorph.ts.isMethodDeclaration(t)||this.tsMorph.ts.isMethodSignature(t)}isHierarchyContainer(t){return this.tsMorph.ts.isClassDeclaration(t)||this.tsMorph.ts.isClassExpression(t)||this.tsMorph.ts.isInterfaceDeclaration(t)}compilerReferenceSymbol(t,n,r){r&&(r.symbolLookups+=1);let i=t.getSymbolAtLocation(n);if(i){if((i.flags&this.tsMorph.ts.SymbolFlags.Alias)===0)return i;try{return r&&(r.aliasResolutions+=1),t.getAliasedSymbol(i)}catch{return i}}}calleesFor(t){return mt(this.calleesCache,t.symbolId,()=>mt(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}calleesForDefinitions(t){let n=new Map,r=new Map;for(let i of t){let o=r.get(i.relativePath);o?o.push(i):r.set(i.relativePath,[i])}for(let[i,o]of r){let s=this.fileCalleesCache.get(i),a=new Set(o.map(l=>l.symbolId)),c=s??this.calleeMapForFile(i,a);for(let l of o){let u=c.get(l.symbolId)??[];this.calleesCache.set(l.symbolId,u),n.set(l.symbolId,u)}}return n}referencesForDefinitionNode(t,n,r){let i=r?W.now():0,o=this.packageImportReferencesForDefinition(t);if(r&&(r.packageRefsMs+=W.now()-i,r.packageReferenceCount+=o.length),!n)return o;let s=r?W.now():0,a=_h(n,t,o,this.db.config.projectRoot);return r&&(r.semanticRefsMs+=W.now()-s,r.referenceCount+=a.length),a}signatureFor(t){return mt(this.signatureCache,t.symbolId,()=>{let n=this.nodeForDefinition(t);if(!n||!this.tsMorph.Node.isFunctionDeclaration(n)&&!this.tsMorph.Node.isMethodDeclaration(n)&&!this.tsMorph.Node.isArrowFunction(n)&&!this.tsMorph.Node.isFunctionExpression(n)&&!this.tsMorph.Node.isConstructorDeclaration(n))return null;let r=n.getType().getCallSignatures()[0];if(!r)return null;let i=r.getParameters().map(s=>{let a=s.getDeclarations()[0],c=a?s.getTypeAtLocation(a).getText(a):s.getValueDeclaration()?.getType().getText()??"unknown";return Zh(c)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${Zh(o)}`})}importUsageForSourceFile(t,n,r){let i=[],o=new Map;for(let s of n.getImportDeclarations()){r.declarations+=1;let a=Je(this.db,t,s.getModuleSpecifierValue()),c=s.getImportClause()?.isTypeOnly()??!1;for(let l of gu(s)){r.entries+=1;let u=c?null:l.identifier?.getSymbol()?.compilerSymbol??null;!c&&l.identifier&&(u?r.bindingSymbols+=1:r.missingBindingSymbols+=1);let d={sourcePath:a,entry:l,typeOnlyDeclaration:c,bindingSymbol:u,references:[]};if(i.push(d),c||!l.localName||!u)continue;let m=o.get(l.localName);m?m.push(d):o.set(l.localName,[d])}}return o.size>0&&n.forEachDescendant(s=>{if(s.getKindName()!=="Identifier")return;let a=o.get(s.getText());if(!a||SL(s))return;r.scannedIdentifiers+=1;let c=s.getSymbol()?.compilerSymbol;if(r.symbolLookups+=1,!!c){for(let l of a)if(l.bindingSymbol===c){l.references.push({location:Vs(s,this.db.config.projectRoot),node:s}),r.matchedReferences+=1;break}}}),i.map(s=>s.typeOnlyDeclaration?yL(t,s.sourcePath,s.entry):s.entry.identifier&&!s.bindingSymbol?(r.fallbackEntries+=1,this.valueImportUsageForEntry(t,s.sourcePath,s.entry)):this.valueImportUsageFromLocations(t,s.sourcePath,s.entry,s.references))}valueImportUsageForEntry(t,n,r){let i=r.identifier?r.identifier.findReferences():[],o=[];for(let s of i)for(let a of Lh(s,t,r.identifier,this.db.config.projectRoot))o.push(a);return this.valueImportUsageFromLocations(t,n,r,o)}valueImportUsageFromLocations(t,n,r,i){let o=i.some(c=>!ru(c.node)),s=i.some(c=>ru(c.node)),a=r.isTypeOnly;return{importer:t,sourcePath:n,importedName:r.importedName,localName:r.localName,kind:r.kind,isTypeOnly:a,isUsed:a||i.length>0,isTypeUsed:a||s,isValueUsed:o,references:i.map(c=>c.location)}}packageImportReferencesForDefinition(t){return this.packageImportReferences().get(t.symbolId)??[]}packageImportReferencesForFiles(t){let n=new Map,r=new Set;for(let o of t){let s=this.sourceFiles.sourceFile(o);if(s)for(let a of s.getImportDeclarations()){let c=lu(this.workspacePackages,a.getModuleSpecifierValue());c&&r.add(c)}}if(r.size===0)return n;let i=this.packageExportsForNames(r);for(let o of t)this.addPackageImportReferencesForDocument(n,i,o);for(let[o,s]of n)n.set(o,Or(s));return n}packageImportReferences(){if(this.packageImportReferenceIndex)return this.packageImportReferenceIndex;let t=new Map,n=this.packageExports();for(let r of this.sourceFiles.indexedTypeScriptLikeDocuments())this.addPackageImportReferencesForDocument(t,n,r);for(let[r,i]of t)t.set(r,Or(i));return this.packageImportReferenceIndex=t,t}addPackageImportReferencesForDocument(t,n,r){if(this.db.isIgnored(r))return;let i=this.sourceFiles.sourceFileMatch(r);if(i)for(let o of i.sourceFile.getImportDeclarations())this.addPackageImportReferencesForDeclaration(t,n,r,o)}addPackageImportReferencesForDeclaration(t,n,r,i){let o=lu(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of gu(i)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=Nh(a.identifier,r,this.db.config.projectRoot);l.length>0&&wL(t,c,l)}}packageExports(){return this.packageExportIndex?this.packageExportIndex:(this.packageExportIndex=this.packageExportsForNames(new Set(this.workspacePackages.map(t=>t.name))),this.packageExportIndex)}packageExportsForNames(t){let n=new Map;for(let r of this.workspacePackages){if(!t.has(r.name))continue;let i=new Map;for(let o of Bh(r))this.collectPackageExports(r,o,i,new Set);i.size>0&&n.set(r.name,i)}return n}collectPackageExports(t,n,r,i){if(i.has(n))return;i.add(n);let o=this.sourceFiles.sourceFile(n);if(o)for(let s of o.getExportDeclarations()){let a=s.getModuleSpecifierValue(),c=a?Je(this.db,n,a):n;if(!c||!c.startsWith(`${t.relativeDir}/src/`))continue;let l=s.getNamedExports();if(l.length===0){if(s.isNamespaceExport())continue;this.collectPackageExports(t,c,r,i);continue}for(let u of l){let d=u.getNameNode().getText(),m=u.getAliasNode()?.getText()??d,f=this.indexedDefinitionByLeaf(c,d);if(!f)continue;let p=r.get(m);p||(p=new Set,r.set(m,p)),p.add(f.symbolId)}}}indexedDefinitionByLeaf(t,n){return mt(this.indexedDefinitionLeafCache,t,()=>Oh(this.db,t)).get(n)??null}nodeForDefinition(t){return mt(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return mt(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?Ah(this.tsMorph,this.db,n,t):new Map})}referenceDefinitionFromCompilerSymbol(t){return this.definitionFromCompilerSymbol(t,void 0,!0)}definitionFromCompilerSymbol(t,n,r=!1){let i=t.name,o=n?W.now():0,s=t.declarations??[];n&&(n.declarationsMs+=W.now()-o,n.declarationChecks+=s.length);for(let a of s){let c=n?W.now():0,l=a.getSourceFile(),u=jr(this.db.config.projectRoot,l.fileName),d=l.getLineAndCharacterOfPosition(a.getStart(l)).line;if(n&&(n.declarationLocationMs+=W.now()-c),!u||this.db.isIgnored(u))continue;let m=n?W.now():0,f=this.compilerDeclarationName(a),p=r?su(this.db,u,d,i)??(f&&f!==i?su(this.db,u,d,f):null):Mh(this.db,u,d,i);if(n&&(n.indexedLookupMs+=W.now()-m),p)return{symbolId:p.symbolId,symbol:p.symbol,file:p.relativePath,line:p.startLine}}return null}compilerDeclarationName(t){let n=t.name;return n&&this.tsMorph.ts.isIdentifier(n)?n.text:null}calleeMapForFile(t,n){let r=U(),i=0,o=0,s=0,a=0,c=0,l=0,u=0,d=0,m=r?vL():void 0;return E("typescript.callee-map.file",()=>{let f=r?W.now():0,p=this.sourceFiles.sourceFile(t);if(r&&(c=Math.round(W.now()-f)),!p)return new Map;let g=r?W.now():0,y=Y(this.db,t).sort((D,w)=>D.startLine-w.startLine||w.endLine-D.endLine);if(r&&(l=Math.round(W.now()-g)),i=y.length,y.length===0)return new Map;let h=new Map,x=r?W.now():0,b=this.compilerCheckerForSourceFile(p),C=p.compilerNode;r&&(u=Math.round(W.now()-x));let S=new Map,v=D=>{if(this.tsMorph.ts.isCallExpression(D)||this.tsMorph.ts.isNewExpression(D)){r&&(o+=1);let w=this.semanticCalleeForCallNode(b,C,y,D,S,n,m);w&&(r&&(s+=1),CL(h,w.callerId,w.target))}this.tsMorph.ts.forEachChild(D,v)},R=r?W.now():0;v(C),r&&(d=Math.round(W.now()-R));for(let[D,w]of h)h.set(D,EL(w));return a=h.size,h},()=>({relativePath:t,definitions:i,callNodes:o,resolvedCallees:s,outputRows:a,requestedDefinitions:n?.size??i,sourceFileLookupMs:c,definitionsLoadMs:l,checkerLookupMs:u,traversalMs:d,...m?IL(m):{}}))}semanticCalleeForCallNode(t,n,r,i,o,s,a){let c=a?W.now():0,l=RL(r,fu(n,i));if(a&&(a.callerLookupMs+=W.now()-c),!l)return null;if(s&&!s.has(l.symbolId))return a&&(a.skippedUnrequestedCallers+=1),null;let u=i.expression,d=this.compilerSymbolForExpression(t,u,a),m=null;if(d)if(a&&(a.targetSymbolHits+=1),o.has(d))a&&(a.compilerSymbolCacheHits+=1),m=o.get(d)??null;else{a&&(a.compilerSymbolCacheMisses+=1);let f=a?W.now():0;m=this.definitionFromCompilerSymbol(d,a),a&&(a.targetLookupMs+=W.now()-f),o.set(d,m)}else a&&(a.targetMisses+=1);return m?{callerId:l.symbolId,target:{symbol:m.symbol,file:m.file,line:m.line}}:null}compilerSymbolForExpression(t,n,r){let i=r?W.now():0,o=t.getSymbolAtLocation(n);if(r&&(r.expressionSymbolMs+=W.now()-i),o)return o;r&&(r.typeFallbacks+=1);let s=r?W.now():0,a=t.getTypeAtLocation(n).getSymbol();return r&&(r.typeSymbolMs+=W.now()-s),a}compilerCheckerForSourceFile(t){let n=t.getProject(),r=this.compilerCheckerCache.get(n);return r||(r=n.getTypeChecker().compilerObject,this.compilerCheckerCache.set(n,r)),r}};function gu(e){let t=[],n=e.getDefaultImport();n&&t.push({identifier:n,importedName:"default",localName:n.getText(),kind:"default",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});let r=e.getNamespaceImport();r&&t.push({identifier:r,importedName:"*",localName:r.getText(),kind:"namespace",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});for(let i of e.getNamedImports()){let o=i.getNameNode(),a=i.getAliasNode()??(o.getKindName()==="Identifier"?o:null);t.push({identifier:a,importedName:o.getText(),localName:a?.getText()??o.getText(),kind:"named",isTypeOnly:i.isTypeOnly()||(e.getImportClause()?.isTypeOnly()??!1)})}return t.length===0&&t.push({identifier:null,importedName:"*",localName:null,kind:"side-effect",isTypeOnly:!1}),t}function yL(e,t,n){return{importer:e,sourcePath:t,importedName:n.importedName,localName:n.localName,kind:n.kind,isTypeOnly:!0,isUsed:!0,isTypeUsed:!0,isValueUsed:!1,references:[]}}function bL(){return{declarations:0,entries:0,bindingSymbols:0,missingBindingSymbols:0,scannedIdentifiers:0,symbolLookups:0,matchedReferences:0,fallbackEntries:0}}function SL(e){for(let t=e;t;t=t.getParent())if(t.getKindName()==="ImportDeclaration")return!0;return!1}function CL(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function xL(e){let t=new Set;for(let n of e.getImportDeclarations())for(let r of gu(n))r.localName&&t.add(r.localName);return t}function RL(e,t){let n=null;for(let r of e)t<r.startLine||t>r.endLine||(!n||r.startLine>=n.startLine)&&(n=r);return n}function fu(e,t){return e.getLineAndCharacterOfPosition(t.getStart(e)).line}function Jh(e,t,n){return t===e.relativePath&&n>=e.startLine&&n<=e.endLine}function Yh(e){return e.symbol.includes("#")?ue(e.symbol)==="type"&&e.relativePath.endsWith(".d.ts"):!1}function vL(){return{callerLookupMs:0,expressionSymbolMs:0,typeSymbolMs:0,targetLookupMs:0,declarationsMs:0,declarationLocationMs:0,indexedLookupMs:0,compilerSymbolCacheHits:0,compilerSymbolCacheMisses:0,targetSymbolHits:0,targetMisses:0,typeFallbacks:0,declarationChecks:0,skippedUnrequestedCallers:0}}function IL(e){return{...e,callerLookupMs:Math.round(e.callerLookupMs),expressionSymbolMs:Math.round(e.expressionSymbolMs),typeSymbolMs:Math.round(e.typeSymbolMs),targetLookupMs:Math.round(e.targetLookupMs),declarationsMs:Math.round(e.declarationsMs),declarationLocationMs:Math.round(e.declarationLocationMs),indexedLookupMs:Math.round(e.indexedLookupMs)}}function Xh(){return{cacheHits:0,cacheMisses:0,nodeHits:0,nodeMisses:0,scanFiles:0,identifiers:0,symbolLookups:0,aliasResolutions:0,targetHits:0,targetMisses:0,requestedHits:0,scanMs:0,packageRefsMs:0,semanticRefsMs:0,packageReferenceCount:0,referenceCount:0,preciseSearchFailures:0,hierarchyDefinitions:0,hierarchyFamilies:0,hierarchyReferences:0,hierarchyMs:0}}function Qh(e){return{...e,scanMs:Math.round(e.scanMs),packageRefsMs:Math.round(e.packageRefsMs),semanticRefsMs:Math.round(e.semanticRefsMs),hierarchyMs:Math.round(e.hierarchyMs)}}function wL(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function EL(e){let t=new Set,n=[];for(let r of e){let i=`${r.symbol}|${r.file}|${r.line}`;t.has(i)||(t.add(i),n.push(r))}return n}function Zh(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}import{createHash as DL}from"crypto";import{readFileSync as PL}from"fs";import{dirname as kL,join as Xs}from"path";var Qs=2,TL="typescript-semantic";function ty(e){let t=Xs(e,TL);return{rootDir:t,requestDir:Xs(t,"requests"),responseDir:Xs(t,"responses")}}function Zs(e){try{let t=JSON.parse(PL(Xs(kL(e),"meta.json"),"utf8"));return t.version!==2&&t.version!==3||typeof t.status!="string"||typeof t.updatedAt!="string"||t.fingerprint===void 0?null:DL("sha256").update(JSON.stringify({version:t.version,status:t.status,updatedAt:t.updatedAt,fingerprint:t.fingerprint,indexedLanguages:t.indexedLanguages})).digest("hex")}catch{return null}}var AL=12e4,ML=5;function ay(e,t,n={}){let r=new hu(e,n),i=null,o=null,s=process.env.SCIP_QUERY_SKIP_WATCH_SERVICE==="1",a=()=>(i??=ey(e,t),i),c=(d,m,f)=>{if(s)return f();try{return m(r.request(d))}catch{return s=!0,f()}},l=(d,m)=>c({kind:"references",definitions:[...d],...m?.exact?{exact:!0}:{}},f=>sy(f),()=>a().referencesForDefinitions?.(d,m)??new Map(d.map(f=>[f.symbolId,a().referencesFor(f)]))),u=d=>c({kind:"callees",definitions:[...d]},m=>sy(m),()=>a().calleesForDefinitions?.(d)??new Map(d.map(m=>[m.symbolId,a().calleesFor(m)])));return{language:"typescript",availability:()=>(o??=c({kind:"availability"},BL,()=>a().availability()),o),importUsage:d=>c({kind:"import-usage",file:d},m=>m,()=>a().importUsage(d)),referencesFor:d=>l([d]).get(d.symbolId)??[],referencesForDefinitions:l,referenceFragmentsForFiles:d=>c({kind:"reference-fragments",files:[...d]},m=>jL(m),()=>a().referenceFragmentsForFiles?.(d)??new Map),calleesFor:d=>u([d]).get(d.symbolId)??[],calleesForDefinitions:u,signatureFor:d=>c({kind:"signature",definition:d},$L,()=>a().signatureFor(d)),dispose:()=>i?.dispose?.()}}var hu=class{constructor(t,n={}){this.db=t;this.runtime=n.runtime??UL,this.timeoutMs=n.timeoutMs??HL(),this.cacheDir=NL(t.config.dbPath),this.projectRoot=It(t.config.projectRoot)}db;runtime;timeoutMs;cacheDir;projectRoot;request(t){let n=Th(this.cacheDir),r=ty(this.cacheDir),i=nu(n.statePath);if(!oy(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript semantic service is not running.");let o=Zs(this.db.config.dbPath);if(!o)throw new Error("Published TypeScript generation identity is unavailable.");let s=this.runtime.randomId(),a=iy(r.requestDir,`${s}.json`),c=iy(r.responseDir,`${s}.json`),l=this.runtime.now()+this.timeoutMs;ny(r.requestDir,{recursive:!0}),ny(r.responseDir,{recursive:!0}),Fe(a,{protocolVersion:Qs,id:s,generation:o,deadlineAtMs:l,profileEnvironment:bf(),request:t});try{for(;this.runtime.now()<=l;){if(_L(c))return OL(LL(c,"utf8"),s,o);let u=nu(n.statePath);if(!oy(u,this.projectRoot,this.runtime))throw new Error("TypeScript semantic service stopped while processing a request.");this.runtime.sleep(ML)}throw new Error(`TypeScript semantic service timed out after ${this.timeoutMs}ms.`)}finally{ry(a,{force:!0}),ry(c,{force:!0})}}};function oy(e,t,n){let r=e!==null&&n.now()-Date.parse(e.heartbeatAt)<=kh,i=e?.typescriptSemantic?.busyUntil!==void 0&&n.now()<=Date.parse(e.typescriptSemantic.busyUntil);return e!==null&&e.projectRoot===t&&e.typescriptSemantic?.protocolVersion===Qs&&n.isProcessAlive(e.pid)&&(r||i)}function OL(e,t,n){let r=JSON.parse(e);if(r.protocolVersion!==Qs||r.id!==t||r.ok===!0&&r.generation!==n)throw new Error("TypeScript semantic service wrote an incompatible response.");if(r.ok===!0)return r.response;throw new Error(typeof r.error=="string"?r.error:"TypeScript semantic service request failed.")}function sy(e){if(!Array.isArray(e))throw new Error("TypeScript semantic service wrote an invalid numeric map.");return new Map(e)}function jL(e){if(!Array.isArray(e))throw new Error("TypeScript semantic service wrote an invalid string map.");return new Map(e)}function BL(e){if(!e||typeof e!="object"||typeof e.available!="boolean")throw new Error("TypeScript semantic service wrote invalid availability.");return e}function $L(e){if(e!==null&&typeof e!="string")throw new Error("TypeScript semantic service wrote an invalid signature.");return e}function HL(){let e=Number(process.env.SCIP_TYPESCRIPT_SEMANTIC_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:AL}var UL={now:Date.now,randomId:FL,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:dt};var cy=new zs;mn({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>cy.clear(e)});function Zn(e,t){let n=Ee(t)??"typescript";return cy.getOrCreate(e,n,()=>n==="rust"?wh(e.config.projectRoot,{sourceImportUsageResolver:{importUsageFacts:r=>Rg(e,r)},calleeSymbolResolver:xg(e),sourceZeroCalleeOracle:r=>WL(e,r),scipOccurrenceCalleeOracle:r=>Ph(e,r)}):ay(e,t))}function Ee(e){return e?M(e)==="rust"?"rust":Tt(e)?"typescript":null:"typescript"}function WL(e,t){let n=z(e,t.relativePath);if(!n||n.language!=="rust")return!1;let r=n.callables.find(i=>i.startLine===t.startLine&&i.endLine===t.endLine&&i.name===t.leaf)??n.callables.find(i=>i.startLine===t.startLine&&i.endLine===t.endLine);return r?!n.callSites.some(i=>i.line>=r.startLine&&i.line<=r.endLine):!1}import{existsSync as GL,readFileSync as zL}from"fs";import{resolve as VL}from"path";var qL=/^[A-Za-z_][A-Za-z0-9_]*$/,ly=/\bDefault::default\b/g,KL=/^\.\.\s*Default::default\b/;function uy(e,t){let n=new Map,r=new Map;for(let i of t){let o=yu(e,i,r);o!==null&&n.set(i.symbolId,o)}return n}function yu(e,t,n=new Map){let r=YL(t.symbol);if(!r)return null;let i=Lr(e,[t.symbolId]);if(i.length===0)return null;let o=new RegExp(`(^|[^A-Za-z0-9_])${$(r)}::default\\b`,"g"),s=new RegExp(`(^|[^A-Za-z0-9_])${$(r)}\\s*$`),a=JL(e,t.symbolId),c=[];for(let l of i){let u=XL(e,l.relative_path,n);if(u===null)return null;let d=u.split(/\r?\n/),m=0,f=[],p=0;for(let g=l.chunk_start;g<=l.chunk_end&&g<d.length;g+=1){let h=d[g]??"",x=new Set;o.lastIndex=0;let b;for(;b=o.exec(h);)c.push({file:l.relative_path,line:g,column:b.index+b[1].length+r.length+2}),p+=1;for(let C=0;C<h.length;C+=1){let S=KL.exec(h.slice(C));if(S){if(a&&f.includes(m)){let R=C+S[0].lastIndexOf("default");c.push({file:l.relative_path,line:g,column:R}),x.add(R),p+=1}C+=S[0].length-1;continue}let v=h[C];if(v==="{"){let R=s.test(h.slice(0,C));m+=1,R&&f.push(m);continue}if(v==="}")for(m=Math.max(0,m-1);f.length>0&&f[f.length-1]>m;)f.pop()}for(ly.lastIndex=0;b=ly.exec(h);){let C=b.index+9;if(!x.has(C))return null}}if(p===0)return null}return Ms(c)}function JL(e,t){return e.get("SELECT 1 AS present FROM mentions WHERE symbol_id = ? AND role = 1 LIMIT 1",t)?.present===1}function YL(e){let t=/impl#\[([^\]]+)\]\[Default\]default\(\)\./.exec(e)?.[1]??null;return!t||!qL.test(t)?null:t}function XL(e,t,n){if(n.has(t))return n.get(t)??null;let r=e.get("SELECT text FROM documents WHERE relative_path = ?",t),i=typeof r?.text=="string"?r.text:QL(e,t);return n.set(t,i),i}function QL(e,t){let n=VL(e.config.projectRoot,t);if(!GL(n))return null;try{return zL(n,"utf8")}catch{return null}}import{readFileSync as nN}from"fs";import{dirname as rN,join as iN}from"path";function ta(e){let t=ea(e.projectFiles),n=new Set(t),r=new Map(e.snapshot.files.map(d=>[d.path,d])),i=e.snapshot.files.filter(d=>{let m=jl(d.path,["typescript"]);return m==="config"||m==="ambient"}).map(d=>d.path),o=ea([...t,...i]),s=o.find(d=>!r.has(d)),a=new Set(e.snapshot.files.map(d=>d.path)).size!==e.snapshot.files.length,c=!s&&o.some(d=>dy(r.get(d))),l=he(JSON.stringify({pnpmWorkspaces:e.snapshot.pnpmWorkspaces,typescriptProjectMode:e.snapshot.typescriptProjectMode,typescriptProjects:ea(e.snapshot.typescriptProjects),membership:t})),u=new Map;return{identityFor(d,m){if(!n.has(d))return Br("target-outside-project");if(a)return Br("duplicate-input-path");if(s)return Br("missing-input-fingerprint");if(c)return Br("unreadable-input");let f=[],p,g;if(e.graph===null)f.push("dependency-graph-unavailable"),g="whole-project",p=o;else{let x=eN(d,e.graph,u);if(x.find(C=>!r.has(C)))return Br("missing-input-fingerprint");if(p=ea([...x,...i]),p.some(C=>dy(r.get(C))))return Br("unreadable-input");g="dependency-closure"}let y=p.map(x=>tN(r.get(x)));return{version:1,key:he(JSON.stringify({version:1,engineIdentity:e.engineIdentity,schemaVersion:m,projectIdentity:l,inputs:y})),mode:g,inputFiles:p,reasons:f}}}}function ZL(e,t){let n=new Set,r=[e];for(let i=0;i<r.length;i+=1){let o=r[i];if(!(o===void 0||n.has(o))){n.add(o);for(let s of[...t.get(o)??[]].sort())n.has(s)||r.push(s)}}return[...n].sort()}function eN(e,t,n){let r=n.get(e);if(r)return r;let i=ZL(e,t);return n.set(e,i),i}function tN(e){return{path:e.path,size:e.size,hash:e.hash}}function dy(e){return e.size<0||e.hash==="unreadable"}function Br(e){return{version:1,key:null,mode:"unkeyed",inputFiles:[],reasons:[e]}}function ea(e){return[...new Set(e)].sort()}var oN=X("typescript-semantic-identity-context",{clearGroups:["whole-project"]});function wn(e,t,n){let r=oN.get(e,()=>sN(e));if(!r)return null;let i=`${n}\0${t}`,o=r.identities.get(i);if(o)return o;let s=r.builder.identityFor(t,n);return r.identities.set(i,s),s}function Ui(e){return N(e,{includeIgnored:!1}).filter(Tt).sort()}function sN(e){try{let t=JSON.parse(nN(iN(rN(e.config.dbPath),"meta.json"),"utf8")),n=zg(t.fingerprint);return n?{builder:ta({projectFiles:Ui(e),snapshot:n,graph:ie(e),engineIdentity:Ks()}),identities:new Map}:null}catch{return null}}var bu="typescript-reference-fragment-v2",ra=oe({kind:"typescript-reference-fragments",invalidation:J("typescript-reference-fragments"),serialize:e=>JSON.stringify(e),deserialize:cN});function x7(e,t,n,r=e){let i=Ui(e),o=ta({projectFiles:i,snapshot:t,graph:ie(e),engineIdentity:Ks()}),s=[...n].map(([a,c])=>({relativePath:a,contentHash:o.identityFor(a,bu).key,value:[...c]}));if(s.some(a=>a.contentHash===null))throw new Error("TypeScript reference fragment identity is unavailable for an affected document.");return ra.writeBatch(r,s.map(a=>({...a,contentHash:a.contentHash}))),s.length}function Su(e,t,n,r){let i=t.filter(s=>Tt(s.relativePath));if(i.length===0)return na("no TypeScript definitions");let o=na("shadow did not run");return E("typescript.reference-fragments.shadow",()=>{try{let s=r(i[0].relativePath);if(!s.availability().available||!s.referenceFragmentsForFiles)return o=na("TypeScript reference fragment provider is unavailable"),o;let a=Ui(e),c=new Set(a),l=s.referenceFragmentsForFiles(a),u=Ys(i,l),d=Vh(i,aN(n,c),u);if(!d.passed)return o={state:"failing",files:a.length,keyedFiles:0,writtenFiles:0,...d},o;let m=[];for(let f of a){let p=wn(e,f,bu);p?.key&&m.push({relativePath:f,contentHash:p.key,value:l.get(f)??[]})}return ra.writeBatch(e,m),o={state:"passing",files:a.length,keyedFiles:m.length,writtenFiles:m.length,...d},o}catch(s){return o=na(s instanceof Error?s.message:String(s)),o}},()=>({...o}))}function aN(e,t){return new Map([...e].map(([n,r])=>[n,r.filter(i=>t.has(i.file))]))}function Cu(e,t,n){if(t.length===0)return{references:new Map,files:0,cacheHits:0,cacheMisses:0,computedFiles:0};let r="fallback",i=0,o=0,s=0,a=0;return E("typescript.reference-fragments.materialize",()=>{try{let c=Ui(e);i=c.length;let l=new Map,u=new Map,d=[];for(let p of c){let g=wn(e,p,bu);if(!g?.key)return null;l.set(p,g.key);let y=ra.read(e,p,g.key);y===null?(s+=1,d.push(p)):(o+=1,u.set(p,y))}if(s===0)return r="hit",{references:Ys(t,u),files:i,cacheHits:o,cacheMisses:s,computedFiles:a};let m=n(t[0].relativePath);if(!m.availability().available||!m.referenceFragmentsForFiles)return null;let f=m.referenceFragmentsForFiles(d);if(d.some(p=>!f.has(p)))return null;a=f.size,ra.writeBatch(e,d.map(p=>({relativePath:p,contentHash:l.get(p),value:f.get(p)??[]})));for(let[p,g]of f)u.set(p,g);return r="computed",{references:Ys(t,u),files:i,cacheHits:o,cacheMisses:s,computedFiles:a}}catch{return null}},()=>({state:r,files:i,cacheHits:o,cacheMisses:s,computedFiles:a}))}function na(e){return{state:"unavailable",files:0,keyedFiles:0,writtenFiles:0,expectedCount:0,actualCount:0,missing:[],extra:[],reason:e}}function cN(e){try{let t=JSON.parse(e);return!Array.isArray(t)||!t.every(lN)?null:t}catch{return null}}function lN(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"}var uN="typescript-import-usage-v1",dN="typescript-signatures-v1",xu=X("semantic-prefetched-callees",{clearGroups:["whole-project","source-file","semantic-provider"]}),my=$n({kind:"semantic-import-usage",invalidation:J("semantic-import-usage"),serialize:e=>JSON.stringify(e),deserialize:vy}),fy=$n({kind:"semantic-signatures",invalidation:J("semantic-signatures"),serialize:e=>JSON.stringify(e),deserialize:CN}),py=oe({kind:"typescript-import-usage",invalidation:J("typescript-import-usage"),serialize:e=>JSON.stringify(e),deserialize:vy}),gy=oe({kind:"typescript-signatures",invalidation:J("typescript-signatures"),serialize:e=>JSON.stringify(e),deserialize:xN});function We(e){let t=new Map,n=new Set;return{capability:(r,i)=>Iy(e,r,i),importUsage:r=>fN(e,r),references:r=>by(e,r),materializeReferences:(r,i)=>Cy(e,r,t,n,i),callerMap:r=>pN(e,r,t,n),calleeMap:r=>yN(e,r),signature:r=>bN(e,r)}}function mN(e,t){if(t.size===0)return;let n=xu.get(e,()=>new Map);for(let[r,i]of t)n.set(r,[...i])}function yy(e,t){if(!xu.has(e))return{hits:[],misses:[...t]};let n=xu.get(e,()=>new Map),r=[],i=[];for(let o of t)n.has(o.symbolId)?r.push({definition:o,callees:n.get(o.symbolId)??[]}):i.push(o);return{hits:r,misses:i}}function Gi(e,t){return We(e).importUsage(t)}function fN(e,t){if(Ee(t)==="typescript"){let o="fallback",s=0,a=0,c=0,l=0;return E("typescript.import-usage.materialize",()=>{let u=wn(e,t,uN);if(u?.key){s=1;let m=py.read(e,t,u.key);if(m)return o="hit",a=1,m;c=1;let f=Ft(e,t);if(!f)return o="unavailable",[];let p=f.importUsage(t);return py.write(e,t,u.key,p),o="computed",p}l=1;let d=Ft(e,t);return d?(o="direct-fallback",d.importUsage(t)):(o="unavailable",[])},()=>({state:o,eligible:s,cacheHits:a,cacheMisses:c,fallbacks:l}))}let n=Ry(e,"semantic-import-usage",t);if(n){let o=my.read(e,t,n);if(o)return o}let r=Ft(e,t);if(!r)return[];let i=r.importUsage(t);return n&&my.write(e,t,n,i),i}function ia(e,t){return We(e).references(t)}function by(e,t){let n=yu(e,t);if(n)return n;let r=Mg(e,t);if(r)return r;let i=Ft(e,t.relativePath);return i?i.referencesFor(t):[]}function En(e,t){return We(e).callerMap(t)}function Sy(e,t){let n=new Map,r=new Map;for(let i of t){if(Ee(i.relativePath)==="typescript"){let o=Ft(e,i.relativePath);if(!o)continue;let s=r.get(o)??[];s.push(i),r.set(o,s);continue}Ru(e,n,i,by(e,i))}for(let[i,o]of r){let s=Cu(e,o,c=>Zn(e,c)),a=s?.references??(i.referencesForDefinitions?i.referencesForDefinitions(o,{exact:!0}):new Map(o.map(c=>[c.symbolId,i.referencesFor(c)])));!s&&U()&&Su(e,o,a,c=>Zn(e,c));for(let c of o)Ru(e,n,c,a.get(c.symbolId)??[])}return n}function pN(e,t,n=new Map,r=new Set){let i=new Map,o=Cy(e,t,n,r),s=0;return E("semantic.callers.from-references",()=>{for(let a of t)s+=Ru(e,i,a,n.get(a.symbolId)??[])},()=>({definitions:t.length,materialized:o.definitions,inMemoryHits:o.inMemoryHits,incompleteInMemoryHits:o.incompleteInMemoryHits,resultRows:i.size,callerFiles:s})),i}function Cy(e,t,n,r,i={}){let o=Te(e),s=[],a=[],c=[],l=0,u=0,d=0,m=0,f=0,p=0,g=0,y=0,h=0,x=0,b=0,C=0,S=[],v=new Map,R=t.filter(w=>Ee(w.relativePath)==="typescript"&&!n.has(w.symbolId)&&!r.has(w.symbolId)),D=Cu(e,R,w=>Zn(e,w));if(D){h=R.length,x=D.cacheHits,b=D.cacheMisses,C=D.computedFiles;for(let w of R)n.set(w.symbolId,D.references.get(w.symbolId)??[])}if(E("semantic.references.cache-scan",()=>{for(let[w,P]of _s(t)){let L=[];for(let _ of P)n.has(_.symbolId)?u+=1:r.has(_.symbolId)?y+=1:L.push(_);if(L.length===0){g+=1;continue}let re=gN(e,o,w);if(!re){for(let _ of L)Ee(_.relativePath)||(l+=1),c.push(_);continue}p+=1;let Q=tf(e,w,re);for(let _ of L){let ae=Q.get(_.symbol)??null;if(ae!==null){let ee=hN(ae);if(ee){d+=1,n.set(_.symbolId,ee);continue}m+=1}a.push({definition:_,cacheFingerprint:re})}}},()=>({definitions:t.length,skippedUnsupportedLanguage:l,cacheHits:d,parseFailures:m,misses:a.length,unkeyed:c.length,inMemoryHits:u,incompleteInMemoryHits:y,fullyInMemoryFiles:g,cacheReadFiles:p})),a.length>0||c.length>0){S=[...c,...a.map(w=>w.definition)],v=E("semantic.references.compute-misses",()=>{let w=vu(e,S,i);return f=w.size,w},()=>({definitions:S.length,misses:a.length,unkeyed:c.length,rows:f}));for(let w of S)v.has(w.symbolId)?(n.set(w.symbolId,v.get(w.symbolId)??[]),r.delete(w.symbolId)):r.add(w.symbolId);for(let{definition:w,cacheFingerprint:P}of a)v.has(w.symbolId)&&Iy(e,"semantic-references",w.relativePath).available&&s.push({relativePath:w.relativePath,symbol:w.symbol,projectFingerprint:P,payload:JSON.stringify(v.get(w.symbolId)??[])})}return s.length>0&&E("semantic.references.cache-write",()=>rf(e,s),()=>({entries:s.length})),v.size>0&&Su(e,S,v,w=>Zn(e,w)),{definitions:t.length,inMemoryHits:u,incompleteInMemoryHits:y,cacheHits:d,misses:a.length,unkeyed:c.length,skippedUnsupportedLanguage:l,parseFailures:m,computed:f,incomplete:r.size,cacheWrites:s.length,fragmentDefinitions:h,fragmentCacheHits:x,fragmentCacheMisses:b,fragmentComputedFiles:C}}function gN(e,t,n){if(!t)return null;let r=Ee(n);return r==="typescript"?t:r==="rust"?he(JSON.stringify({kind:"semantic-references",language:r,engine:Yn(e.config.projectRoot),projectFingerprint:t})):null}function vu(e,t,n={}){let r=U(),i=new Map,o=0,s=0,a=0,c=0,l=0,u=0,d=0,m=0,f=0;return E("semantic.references.provider-loop",()=>{let p=uy(e,t),g=Ag(e,t),y=new Map,h=n.prefetchCallees?new Map:null,x=[];for(let C of t){let S,v=()=>(S??=Ft(e,C.relativePath),S);if(h){let P=v();if(P?.referencesAndCalleesForDefinitions){let L=h.get(P);L?L.push(C):h.set(P,[C]),f+=1}}let R=p.get(C.symbolId);if(R){a+=1,c+=R.length,Wi(i,C.symbolId,R,r,P=>{d+=1,m+=P});continue}let D=g.get(C.symbolId);if(D){l+=1,u+=D.length,Wi(i,C.symbolId,D,r,P=>{d+=1,m+=P});continue}let w=v();if(!w){r&&(s+=1);continue}if(r&&(o+=1),w.referencesForDefinitions){let P=y.get(w);P?P.push(C):y.set(w,[C])}else x.push({provider:w,definition:C})}let b=new Set;if(h)for(let[C,S]of h){if(!C.referencesAndCalleesForDefinitions)continue;let v=y.get(C)??[],R=C.referencesAndCalleesForDefinitions(v,S);b.add(C),mN(e,R.callees);for(let D of v){if(!R.references.has(D.symbolId))continue;let w=R.references.get(D.symbolId)??[];Wi(i,D.symbolId,w,r,P=>{d+=1,m+=P})}}for(let[C,S]of y){if(b.has(C))continue;let v=C.referencesForDefinitions(S);for(let R of S){if(!v.has(R.symbolId))continue;let D=v.get(R.symbolId)??[];Wi(i,R.symbolId,D,r,w=>{d+=1,m+=w})}}for(let{provider:C,definition:S}of x){let v=C.referencesFor(S);Wi(i,S.symbolId,v,r,R=>{d+=1,m+=R})}return i},()=>({definitions:t.length,providerHits:o,providerMisses:s,rustDefaultFastPathRows:a,rustDefaultFastPathReferences:c,rustScipOccurrenceFastPathRows:l,rustScipOccurrenceFastPathReferences:u,prefetchCalleeDefinitions:f,definitionsWithReferences:d,referenceCount:m,rows:i.size}))}function Wi(e,t,n,r,i){e.set(t,n),r&&n.length>0&&i(n.length)}function Ru(e,t,n,r){let i=0;for(let o of r){if(o.file===n.relativePath||e.isIgnored(o.file))continue;let s=t.get(n.symbolId);s||(s=new Set,t.set(n.symbolId,s));let a=s.size;s.add(o.file),s.size!==a&&(i+=1)}return i}function hN(e){try{return JSON.parse(e)}catch{return null}}function oa(e,t){return We(e).calleeMap(t)}function yN(e,t){let n=U(),r=new Map,i=0,o=0,s=0,a=0;return E("semantic.callees.provider-loop",()=>{let c=new Map,l=[];for(let u of t){let d=Ft(e,u.relativePath);if(!d){n&&(o+=1);continue}n&&(i+=1);let m=u;if(d.calleesForDefinitions){let f=c.get(d);f?f.push(m):c.set(d,[m])}else l.push({provider:d,definition:m})}for(let[u,d]of c){let m=u.calleesForDefinitions(d);for(let f of d){let p=m.get(f.symbolId)??[];hy(r,f.symbolId,p,n,g=>{s+=1,a+=g})}}for(let{provider:u,definition:d}of l){let m=u.calleesFor(d);hy(r,d.symbolId,m,n,f=>{s+=1,a+=f})}return r},()=>({definitions:t.length,providerHits:i,providerMisses:o,definitionsWithCallees:s,calleeCount:a,rows:r.size}))}function hy(e,t,n,r,i){n.length>0&&(e.set(t,n),r&&i(n.length))}function xy(e,t){return We(e).signature(t)}function bN(e,t){if(Ee(t.relativePath)==="typescript"){let s="fallback",a=0,c=0,l=0,u=0;return E("typescript.signature.materialize",()=>{let d=wn(e,t.relativePath,dN);if(d?.key){a=1;let f=gy.read(e,t.relativePath,d.key)??{};if(Object.prototype.hasOwnProperty.call(f,t.symbol))return s="hit",c=1,f[t.symbol]??null;l=1;let p=Ft(e,t.relativePath);if(!p)return s="unavailable",null;let g=p.signatureFor(t);return gy.write(e,t.relativePath,d.key,{...f,[t.symbol]:g}),s="computed",g}u=1;let m=Ft(e,t.relativePath);return m?(s="direct-fallback",m.signatureFor(t)):(s="unavailable",null)},()=>({state:s,eligible:a,cacheHits:c,cacheMisses:l,fallbacks:u}))}let n=Ry(e,"semantic-signatures",t.relativePath),r=SN(t);if(n){let s=fy.read(e,r,n);if(s)return s.signature}let i=Ft(e,t.relativePath);if(!i)return null;let o=i.signatureFor(t);return n&&fy.write(e,r,n,{signature:o}),o}function Ry(e,t,n){let r=Te(e);if(!r)return null;let i=Ee(n);return i!=="rust"?null:he(JSON.stringify({kind:t,language:i,engine:Yn(e.config.projectRoot),projectFingerprint:r}))}function SN(e){return`${e.relativePath}\0${e.symbol}`}function vy(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function CN(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t.signature;return n!==null&&typeof n!="string"?null:{signature:n}}catch{return null}}function xN(e){try{let t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))return null;for(let n of Object.values(t))if(n!==null&&typeof n!="string")return null;return t}catch{return null}}function Iy(e,t,n){let r=Ee(n);if(!r)return{slot:t,language:"typescript",available:!1,reason:"semantic evidence is only available for TypeScript or Rust files"};try{return{slot:t,language:r,...Zn(e,n).availability()}}catch(i){return{slot:t,language:r,available:!1,reason:i instanceof Error?i.message:String(i)}}}function Ft(e,t){if(!Ee(t))return null;let n=Zn(e,t);return n.availability().available?n:null}var H={references:ia,referenceMap:vu,callerMap:(e,t)=>We(e).callerMap(t),calleeMap:Iu};function Iu(e,t){let n=U(),r=new Map,i=yy(e,t),o=[],s=[],a=0,c=0,l=0,u=0,d=0,m=0,f=0;for(let{definition:b,callees:C}of i.hits)d+=1,C.length>0&&(m+=1,f+=C.length,r.set(b.symbolId,C));let p=RN(e,i.hits);if(p.entries.length>0&&E("semantic.callees.prefetch-cache-write",()=>Tc(e,p.entries),()=>({entries:p.entries.length,sourceMissing:p.sourceMissing,skippedUnsupportedLanguage:p.skippedUnsupportedLanguage})),E("semantic.callees.cache-scan",()=>{for(let[b,C]of _s(i.misses)){if(!Ee(b)){n&&(a+=C.length);continue}let S=k(e,b);if(!S){n&&(c+=C.length),s.push(...C);continue}let v=ce(e,b,S),R=wy(e,b);if(!R){s.push(...C);continue}let D=ef(e,b,v,R);for(let w of C){let P=D.get(w.symbol)??null;if(P!==null){let L=IN(P);if(L){n&&(l+=1),L.length>0&&r.set(w.symbolId,L);continue}n&&(u+=1)}o.push({def:w,contentHash:v,depsDigest:R})}}},()=>({definitions:t.length,skippedUnsupportedLanguage:a,sourceMissing:c,cacheHits:l,parseFailures:u,misses:o.length,unkeyed:s.length,inMemoryHits:d,inMemoryRows:m,inMemoryCalleeCount:f,resultRows:r.size})),o.length===0&&s.length===0)return r;let g=[...s,...o.map(b=>b.def)],y=0,h=E("semantic.callees.compute-misses",()=>{let b=oa(e,g);return y=b.size,b},()=>({definitions:g.length,misses:o.length,unkeyed:s.length,rows:y}));for(let[b,C]of h)r.set(b,C);let x=o.filter(b=>We(e).capability("semantic-callees",b.def.relativePath).available).map(b=>({relativePath:b.def.relativePath,symbol:b.def.symbol,contentHash:b.contentHash,depsDigest:b.depsDigest,payload:JSON.stringify(h.get(b.def.symbolId)??[])}));return x.length>0?E("semantic.callees.cache-write",()=>Tc(e,x),()=>({entries:x.length})):E("semantic.callees.cache-write-skip",()=>{},()=>({reason:"provider-unavailable",misses:o.length})),r}function RN(e,t){let n=[],r=new Map,i=0,o=0;for(let{definition:s,callees:a}of t){if(!Ee(s.relativePath)){o+=1;continue}if(!r.has(s.relativePath)){let l=k(e,s.relativePath),u=l?wy(e,s.relativePath):null;r.set(s.relativePath,l&&u?{contentHash:ce(e,s.relativePath,l),depsDigest:u}:null)}let c=r.get(s.relativePath);if(!c){i+=1;continue}n.push({relativePath:s.relativePath,symbol:s.symbol,contentHash:c.contentHash,depsDigest:c.depsDigest,payload:JSON.stringify(a)})}return{entries:n,sourceMissing:i,skippedUnsupportedLanguage:o}}var vN="typescript-callees-v1";function wy(e,t){let n=Ee(t);if(n==="typescript")return wn(e,t,vN)?.key??null;let r=EN(e,t);return n==="rust"?he(JSON.stringify({kind:"semantic-callees",language:n,engine:Yn(e.config.projectRoot),positionMapping:"nearby-leaf-v1",depsDigest:r})):r}function IN(e){try{return JSON.parse(e)}catch{return null}}var wN=j("semantic-deps-digest",{clearGroups:["whole-project","source-file"]});function EN(e,t){return wN.get(e,t,()=>{let r=[...ie(e).get(t)??[]].sort().map(i=>`${i}:${ce(e,i,k(e,i))}`);return he(r.join("|"))})}function Q7(e,t,n={}){let r=B(e,t);if(!r)return[];let o=!te(r.symbol)&&!e.isIgnored(r.relativePath)?[{relativePath:r.relativePath,line:r.startLine}]:[],s=Pt(e,r,{semantic:n.semantic,semanticEvidence:H}).map(u=>({relativePath:u.file,line:u.line})),a=DN(e,r),c=new Set,l=[];for(let u of[...o,...s,...a]){let d=`${u.relativePath}:${u.line}`;c.has(d)||(c.add(d),l.push(u))}return l}function DN(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=PN(t.symbol);if(n.length===0)return[];let r=[];for(let i of N(e,{extensions:[".rb"],includeIgnored:!1})){let o=k(e,i);if(!o)continue;let s=o.split(`
|
|
287
|
-
`);for(let a=0;a<s.length;a++){let c=s[a]??"";n.some(l=>new RegExp(`@${l}\\b|\\b${l}:`).test(c))&&r.push({relativePath:i,line:a})}}return r}function PN(e){let n=(e.split(":").pop()??e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[^A-Za-z0-9_]+/g,"_").toLowerCase().replace(/^_+|_+$/g,""),r=n.split("_").filter(Boolean),i=new Set;return n&&i.add(n),r.length>=1&&i.add(r[r.length-1]),r.length>=2&&i.add(r.slice(-2).join("_")),[...i]}import{existsSync as
|
|
283
|
+
${r}`,...i)}function zT(e,t,n,r,i){if(r===i||e.isIgnored(r)||e.isIgnored(i)||!n.has(i))return;let o=t.get(r);o||(o=new Set,t.set(r,o)),o.add(i)}function Ls(e){let t=new Map;for(let n of e){let r=t.get(n.relativePath)??[];r.push(n),t.set(n.relativePath,r)}return t}function xg(e){let t=new Map,n=qT(e),r=new Map;return i=>{let o=VT(i),s=r.get(o);if(s!==void 0)return s;if(!n.has(i.file))return r.set(o,i.symbol),i.symbol;let a=t.get(i.file);a||(a=KT(Y(e,i.file)),t.set(i.file,a));let c=JT(a,i);return r.set(o,c),c}}function VT(e){return`${e.file}\0${e.symbol}\0${e.line}`}function qT(e){return new Set(e.all("SELECT relative_path FROM documents").map(t=>t.relative_path))}function KT(e){let t=new Map,n=new Map;for(let r of e){let i=t.get(r.leaf);i?i.push(r):t.set(r.leaf,[r]);let o=n.get(r.startLine);o?o.push(r):n.set(r.startLine,[r])}return{definitions:e,byLeaf:t,byStartLine:n}}function JT(e,t){if(e.definitions.length===0)return t.symbol;let n=QT(t.symbol),r=YT(e.byLeaf,n),i=XT(r,t.line);if(i)return i.symbol;let o=e.byStartLine.get(t.line)??[];return o.length===1?o[0].symbol:t.symbol}function YT(e,t){let n=[],r=new Set;for(let i of t)for(let o of e.get(i)??[])r.has(o.symbolId)||(r.add(o.symbolId),n.push(o));return n}function XT(e,t){let n=null;for(let r of e)if(!(r.startLine>t||r.endLine<t)){if(r.startLine===t)return r;(!n||r.endLine-r.startLine<n.endLine-n.startLine)&&(n=r)}return n}function QT(e){let t=new Set([e]),r=e.split(/::|\.|#/).filter(Boolean).at(-1);return r&&t.add(r),t}function vg(e,t){let r=Z(e,t).map(i=>eF(t,i));return{usage:r,positions:tF(e,t,r)}}function Rg(e,t){return{importUsage(n){let r=e.importUsageFacts(n);if(!t||r.positions.length===0)return r.usage;let i=t.importDefinitionsForFile(n,r.positions);return i.available?ZT(r.usage,i.sourcePaths):r.usage}}}function ZT(e,t){return e.map((n,r)=>{let i=t.get(String(r));return i?{...n,sourcePath:i}:n})}function eF(e,t){let n=t.isTypeOnly===!0,r=t.kind==="side-effect"||n||t.used;return{importer:e,sourcePath:t.sourcePath,importedName:t.importedName,localName:t.localName,kind:t.kind,isTypeOnly:n,isUsed:r,isTypeUsed:n,isValueUsed:t.kind==="side-effect"||!n&&t.used,references:[]}}function tF(e,t,n){let r=K(e,t);if(!r)return[];let i=nF(r.rootNode),o=new Map;for(let a of i){let c=o.get(Tl(a.importedName,a.localName));c?c.push(a.position):o.set(Tl(a.importedName,a.localName),[a.position])}let s=[];return n.forEach((a,c)=>{let l=o.get(Tl(a.importedName,a.localName??a.importedName))?.shift();l&&s.push({...l,id:String(c),file:t})}),s}function nF(e){let t=[];for(let n of e.descendantsOfType("use_declaration")){let r=n.namedChildren.find(i=>i.type!=="visibility_modifier");r&&t.push(...Ns(r,""))}return t.filter(n=>n.importedName!=="*")}function Ns(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":return[{importedName:e.text,localName:e.text,position:Pl(e,e.text)}];case"scoped_identifier":{let n=e.text.split("::").pop()??e.text;return[{importedName:n,localName:n,position:Pl(e,n)}]}case"scoped_use_list":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=Tr(t,n.text);return r.namedChildren.flatMap(o=>Ns(o,i))}case"use_list":return e.namedChildren.flatMap(n=>Ns(n,t));case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);return!n||!r?[]:Ns(n,t).map(i=>({...i,localName:r.text}))}case"use_wildcard":{let n=e.namedChild(0),r="*";return[{importedName:r,localName:r,position:Pl(n??e,r)}]}default:return[]}}function Pl(e,t){let n=Math.max(0,e.text.lastIndexOf(t));return{id:"",file:"",line:e.startPosition.row,column:e.startPosition.column+n+rF(t)}}function rF(e){return Math.max(0,Math.min(e.length-1,1))}function Tl(e,t){return`${e}\0${t}`}import{spawnSync as Kl}from"child_process";import{existsSync as Jl}from"fs";import{fileURLToPath as E_}from"url";function Rn(e){if(!e)return;let t=Number(e);return Number.isInteger(t)&&t>0?t:void 0}import{execFileSync as kg}from"child_process";import{existsSync as _l,readFileSync as lF}from"fs";import{createRequire as uF}from"module";import{platform as Pg}from"os";import{dirname as Dg,join as As}from"path";import{execFileSync as Ig,spawnSync as iF}from"child_process";import{platform as oF}from"os";var wg=oF()==="win32";function zZ(e,t=iF){try{return t(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function Fl(e){let t=wg?"where":"which";try{return Ig(t,[e],{stdio:"pipe"}),!0}catch{return!1}}var sF=/\.(?:c|m)?js$/i,aF=/\.(?:exe|com)$/i;function VZ(e,t){return sF.test(e)?{binary:process.execPath,args:[e,...t]}:{binary:e,args:[...t]}}function cF(e,t){return Ig(e,t,{stdio:["ignore","pipe","ignore"],encoding:"utf8"})}function Eg(e,t={}){let n=t.isWindows??wg,r=t.lookup??cF,i;try{i=r(n?"where":"which",[e])}catch{return null}let o=i.split(/\r?\n/).map(s=>s.trim()).filter(Boolean);return n?o.find(s=>aF.test(s))??null:o[0]??null}var dF=uF(import.meta.url),Tg={language:"rust",indexerBinary:"rust-analyzer",installUrl:"https://github.com/rust-lang/rust-analyzer"};function Ll(e){return[e.indexerBinary,...e.binaryAliases??[]]}function mF(e){let t=Ll(e);return t.length===1?t[0]:t.join(" or ")}function Nl(e){for(let t of Ll(e))if(Pg()==="win32"){let n=Eg(t);if(n)return n}else if(Fl(t))return t;return pF(e)}function e3(e){return Nl(e)!==null||fF(e)}function fF(e){return Fg(e)!==null}function pF(e){let t=Fg(e);if(!t)return null;let r=JSON.parse(lF(t,"utf8")).bin;if(!r)return null;if(typeof r=="string")return As(Dg(t),r);for(let i of Ll(e)){let o=r[i];if(o)return As(Dg(t),o)}return null}function Fg(e){if(!e.bundledNpmPackage)return null;try{return dF.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function gF(e,t){for(let n of e.projectLocalBinaries??[]){let r=As(t,n);if(_l(r))return r}return null}function hF(e,t){return gF(e,t)??Nl(e)}function t3(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||Al(n,t))return t;let r=Lg(n,t);return r?{...t,DOTNET_ROOT:r}:t}function _g(e,t){let n=mF(e),r=t?hF(e,t):Nl(e);if(!r)return{language:e.language,binaryLabel:n,installed:!1,runnable:!1,resolvedBinary:null,installUrl:e.installUrl};if(e.indexerBinary!=="scip-dotnet")return{language:e.language,binaryLabel:n,installed:!0,runnable:!0,resolvedBinary:r};let i=yF(r);return{language:e.language,binaryLabel:n,installed:!0,runnable:i.runnable,resolvedBinary:r,installUrl:e.installUrl,note:i.note}}function yF(e){if(Al(e,process.env))return{runnable:!0};let t=Lg(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=Ng(process.env);return{runnable:!1,note:n.length>0?`.NET 9 runtime still unavailable after checking ${n.join(", ")}`:"binary is present, but scip-dotnet still needs a .NET 9 runtime"}}function Lg(e,t){for(let n of Ng(t))if(Al(e,{...t,DOTNET_ROOT:n}))return n;return null}function Ng(e){let t=[],n=e.DOTNET_ROOT;if(n&&_l(n)&&t.push(n),Pg()==="darwin"&&Fl("brew"))try{let r=kg("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e}).toString().trim(),i=As(r,"libexec");_l(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function Al(e,t){try{return kg(e,["--version"],{stdio:"pipe",env:t}),!0}catch{return!1}}function Ms(e){let t=_g(Tg,e),n=t.runnable;return{available:n,dependencyAvailable:n,resolvedBinary:t.resolvedBinary??void 0,reason:n?"rust-analyzer semantic reference queries are enabled.":"rust-analyzer is not runnable; Rust semantic checks will use SCIP/source evidence only."}}import{existsSync as d_,mkdtempSync as dh,readFileSync as mh,rmSync as Ul}from"fs";import{tmpdir as zl}from"os";import{join as Wl}from"path";import{fileURLToPath as Ai,pathToFileURL as m_}from"url";import{SHARE_ENV as f_,Worker as p_}from"worker_threads";function dt(e){try{return process.kill(e,0),!0}catch(t){return typeof t=="object"&&t!==null&&"code"in t&&t.code==="EPERM"}}function In(e,t,n=new Set){let r=new Map;for(let i of e)n.has(i.symbolId)||r.set(i.symbolId,t.get(i.symbolId)??[]);return r}function Jn(e,t,n){let r=Rn(process.env.SCIP_RUST_SEMANTIC_BATCH_TIMEOUT_MS)??0;if(r>0)return r;let i=Math.max(1,Math.ceil(e/Math.max(1,n)));return Math.max(12e4,3e4+i*t)}import{spawn as QF}from"child_process";import{createHash as ZF,randomUUID as e_}from"crypto";import{existsSync as ih,mkdirSync as Zg,readFileSync as Hs,realpathSync as t_,rmSync as $l}from"fs";import{tmpdir as n_}from"os";import{resolve as Pt}from"path";import{mkdirSync as bF,renameSync as SF,writeFileSync as CF}from"fs";import{dirname as xF}from"path";function Fe(e,t,n={}){bF(xF(e),{recursive:!0});let r=`${e}.${process.pid}.${Date.now()}.tmp`,i=JSON.stringify(t,null,n.spacing);CF(r,n.trailingNewline?`${i}
|
|
284
|
+
`:i),SF(r,e)}import{execFileSync as TF}from"child_process";import{existsSync as vF,readFileSync as RF}from"fs";import{deserializeSCIP as IF,SymbolRole as wF}from"@c4312/scip";import{existsSync as m3,readFileSync as f3}from"fs";import{relative as g3,resolve as h3,sep as y3}from"path";import{fileURLToPath as S3,pathToFileURL as C3}from"url";function Os(e){let t=new Map;for(let n of e)t.set(`${n.file}\0${n.line}\0${n.column}`,n);return[...t.values()].sort((n,r)=>{let i=n.file.localeCompare(r.file);return i!==0?i:n.line!==r.line?n.line-r.line:n.column-r.column})}var Ml=new WeakMap,EF="SCIP_RUST_SCIP_OCCURRENCE_REFERENCE_MODE";function Ag(e,t){let n=new Map,r=js(),i=t.filter(s=>jg(s,r));if(i.length===0)return n;let o=Bg(e);if(!o)return n;for(let s of i){let a=Og(o,s);a!==null&&n.set(s.symbolId,a)}return n}function Mg(e,t){if(!jg(t,js()))return null;let n=Bg(e);return n?Og(n,t):null}function Og(e,t){return e.referencesBySymbol.get(t.symbol)??[]}function jg(e,t="safe"){if(!e.symbol.startsWith("rust-analyzer ")||!e.relativePath.endsWith(".rs")||Ie(e.symbol)||/impl#\[[^\]]+\]\[Default\]default\(\)\.$/.test(e.symbol))return!1;if(t==="all")return!0;let n=ue(e.symbol);if(n==="method")return!0;if(n!=="term")return!1;let r=ye(e.symbol);return"kind"in r?!1:!DF(r)}function DF(e){for(let t=0;t<e.descriptors.length-1;t+=1)if(e.descriptors[t]?.suffix==="type")return!0;return!1}function Bg(e){if(Ml.has(e))return Ml.get(e)??null;let t=kF(e);return Ml.set(e,t),t}function kF(e){if(!vF(e.config.indexPath))return null;try{let t=IF(RF(e.config.indexPath)),n=new Map;for(let r of t.documents??[]){let i=r.relativePath;if(!(!i||e.isIgnored(i)))for(let o of r.occurrences??[]){if(!o.symbol||(o.symbolRoles&wF.Definition)!==0)continue;let s=PF(i,o.range);if(!s)continue;let a=n.get(o.symbol)??[];a.push(s),n.set(o.symbol,a)}}for(let[r,i]of n)n.set(r,Os(i));return{referencesBySymbol:n}}catch{return null}}function PF(e,t){if(t.length<3)return null;let n=t[0],r=t[1];return!Number.isInteger(n)||!Number.isInteger(r)?null:{file:e,line:n,column:r}}function js(){return process.env[EF]==="all"?"all":"safe"}var $g=new Map;function Ol(e){let n=Ms(e).resolvedBinary??null;return{engine:"rust-analyzer",resolvedBinary:n,version:n?FF(e,n):"unavailable"}}function Yn(e){return{...Ol(e),scipOccurrenceReferenceMode:js()}}function FF(e,t){let n=`${e}\0${t}`,r=$g.get(n);if(r)return r;let i;try{i=TF(t,["--version"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:2e3}).trim()}catch{i="unknown"}return $g.set(n,i),i}import{createHash as JF}from"crypto";import{execFileSync as AF}from"child_process";import{createHash as Kg}from"crypto";import{lstatSync as MF,readdirSync as OF,readFileSync as jF,readlinkSync as BF,realpathSync as Jg}from"fs";import{isAbsolute as $F,join as Yg,relative as HF,sep as UF}from"path";function jl(e,t){let n=e.split("/").at(-1)??e;if(Vg.has(n)||n===".scipquery.json"||/^tsconfig(?:\..+)?\.json$/.test(n))return"config";if(/\.d\.(?:ts|mts|cts)$/.test(e.toLowerCase()))return"ambient";let r=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return t.some(i=>(qg[i]??[]).includes(r))?"source":"other"}function Gg(e,t,n){let r=e.split("/").at(-1)??e;if(n?.includes(e)||n?.includes(r)||Vg.has(r))return!0;let i=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(qg[t]??[]).includes(i)}function zg(e){if(typeof e!="object"||e===null)return null;let t=e;return typeof t.version!="number"||!Hg(t.languages)||typeof t.pnpmWorkspaces!="boolean"||typeof t.typescriptProjectMode!="string"||!Hg(t.typescriptProjects)||t.clojureConfigPath!==void 0&&typeof t.clojureConfigPath!="string"||!Array.isArray(t.files)||!t.files.every(_F)?null:t}function F3(e,t){let n=new Map((e?.files??[]).map(a=>[a.path,a])),r=new Map(t.files.map(a=>[a.path,a])),i=new Set([...n.keys(),...r.keys()]),o=[];for(let a of[...i].sort()){let c=n.get(a),l=r.get(a),u=jl(a,t.languages);!c&&l?o.push({kind:"added",path:a,inputKind:u,after:l}):c&&!l?o.push({kind:"deleted",path:a,inputKind:u,before:c}):c&&l&&(c.hash!==l.hash||c.size!==l.size)&&o.push({kind:"modified",path:a,inputKind:u,before:c,after:l})}let s=new Set;return e||s.add("prior-snapshot-unavailable"),e&&e.version!==t.version&&s.add("snapshot-version-changed"),(Ug(e?.files??[])||Ug(t.files))&&s.add("duplicate-input-path"),[...e?.files??[],...t.files].some(LF)&&s.add("unreadable-input"),{version:1,changes:o,projectIdentityChanged:e?!NF(e,t):!0,uncertainty:[...s].sort()}}function Hg(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function Ug(e){return new Set(e.map(t=>t.path)).size!==e.length}function _F(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.path=="string"&&typeof t.size=="number"&&typeof t.hash=="string"}function LF(e){return e.hash==="unreadable"||e.size<0}function NF(e,t){return Wg(e.languages,t.languages)&&e.pnpmWorkspaces===t.pnpmWorkspaces&&e.typescriptProjectMode===t.typescriptProjectMode&&Wg(e.typescriptProjects,t.typescriptProjects)&&e.clojureConfigPath===t.clojureConfigPath}function Wg(e,t){if(e.length!==t.length)return!1;let n=[...e].sort(),r=[...t].sort();return n.every((i,o)=>i===r[o])}var Vg=new Set(["package.json","package-lock.json","pnpm-lock.yaml","yarn.lock","bun.lockb","tsconfig.json","tsconfig.base.json","pyproject.toml","setup.py","setup.cfg","Cargo.toml","Cargo.lock","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","build.sbt","compile_commands.json","CMakeLists.txt","Makefile","Gemfile","Gemfile.lock","composer.json","composer.lock","pubspec.yaml","pubspec.lock","deps.edn","project.clj","bb.edn","shadow-cljs.edn"]),qg={typescript:[".ts",".tsx",".mts",".cts"],javascript:[".js",".jsx",".mjs",".cjs"],java:[".java"],scala:[".scala"],kotlin:[".kt",".kts"],rust:[".rs"],python:[".py",".pyi"],ruby:[".rb"],go:[".go"],cpp:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"],c:[".c",".h"],csharp:[".cs"],vb:[".vb"],dart:[".dart"],php:[".php"],clojure:[".clj",".cljs",".cljc"]};function WF(e){return[...new Set((e??[]).map(t=>t.trim()).filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function GF(e){return(VF(e)??qF(e)).filter(t=>t&&!Xg(t)).sort()}function Bl(e,t={}){let n=GF(e).filter(i=>!t.language||Gg(i,t.language,t.markerFiles)).filter(i=>!t.includePath||t.includePath(i)),r=Jg(e);return n.map(i=>{let o=Yg(e,i);try{if(MF(o).isSymbolicLink()){let a=Jg(o),c=HF(r,a);if(c===".."||c.startsWith(`..${UF}`)||$F(c))throw new Error("external symlink");let l=BF(o);return{path:i,size:Buffer.byteLength(l),hash:Kg("sha256").update("symlink\0").update(l).digest("hex")}}let s=jF(o);return{path:i,size:s.byteLength,hash:Kg("sha256").update(s).digest("hex")}}catch{return{path:i,size:-1,hash:"unreadable"}}})}function Ti(e,t,n){return{version:2,languages:[...t].sort(),pnpmWorkspaces:n.typescriptProjectMode!=="workspace"&&n.pnpmWorkspaces===!0,typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:WF(n.typescriptProjects),clojureConfigPath:zF(n.clojureConfigPath),files:Bl(e)}}function zF(e){return e?.trim()||void 0}function VF(e){try{return AF("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
|
|
285
|
+
`).filter(Boolean)}catch{return null}}function qF(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?Yg(e,r):e,o;try{o=OF(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){Xg(a)||n.push(a);continue}t.push(a)}}return t}function Xg(e){let t=e.split("/");return e==="meta.json"||t.some(n=>KF.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var KF=new Set([".git","node_modules",".scipquery-cache",".scipquery-generations",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);var YF=new Set(["Cargo.lock","Cargo.toml","rust-project.json","rust-toolchain","rust-toolchain.toml"]);function Qg(e){let t=Bl(e,{includePath:XF});return JF("sha256").update(JSON.stringify(t)).digest("hex")}function XF(e){let t=e.replaceAll("\\","/"),n=t.split("/").at(-1)??t;return t.endsWith(".rs")||YF.has(n)?!0:t===".cargo/config"||t===".cargo/config.toml"||t.endsWith("/.cargo/config")||t.endsWith("/.cargo/config.toml")}var oh=2,r_=5e3,i_=5e3,sh=10,o_=3e4;function eh(e,t,n,r=uh){let i=r.engineIdentity(e),o={protocolVersion:oh,projectRoot:r.canonicalProjectRoot(e),projectFingerprint:r.projectFingerprint(e),engine:{engine:i.engine,resolvedBinary:i.resolvedBinary,version:i.version},workerFingerprint:r.fileFingerprint(t),environment:ah(r.environment())};return{key:$s(Bs(o)),...o}}function Fi(e,t,n){return e.protocolVersion===oh&&(t-e.heartbeatAtMs<=r_||e.busyUntilMs!==void 0&&t<=e.busyUntilMs)&&n(e.pid)}function Hl(e,t,n){let r;try{r=$s(Hs(t))}catch{r="missing"}let i=$s(Bs({projectRoot:Pt(e),serverPath:Pt(t),serverFingerprint:r})).slice(0,20);return Pt(n,`scip-query-rust-session-${i}`)}function th(e){let t=e===void 0?Number.NaN:Number(e);return Number.isInteger(t)&&t>=0?t:0}function ah(e){return Object.fromEntries(Object.entries(e).filter(([t])=>lh(t)).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,n??null]))}function ch(e,t){let n=t.runtime??u_,r=t.identityRuntime??uh,i=Hl(e,t.serverPath,t.tempRoot??n_()),o=!1,s=(a,c)=>{if(o)throw new Error("Durable Rust semantic session was already disposed.");return a_(i,t.serverPath,t.semanticWorkerPath,a,c,n)};return{requestSemantic(a,c){let l=eh(e,t.semanticWorkerPath,a,r),u=n.now()+Math.max(1,c-1e3);return s({kind:"semantic",identityKey:l.key,workerEnvironment:rh(),request:{...a,readinessDeadlineMs:u,referenceRetryTimeoutMs:s_(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,a.referenceRetryTimeoutMs),settleDelayMs:process.env.SCIP_RUST_SEMANTIC_SETTLE_MS===void 0?a.settleDelayMs:th(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS)},timeoutMs:c},c)},requestImportDefinitions(a,c){let l=eh(e,t.semanticWorkerPath,a,r),u=n.now()+Math.max(1,c-1e3);return s({kind:"import-definitions",identityKey:l.key,workerEnvironment:rh(),request:{...a,readinessDeadlineMs:u,settleDelayMs:process.env.SCIP_RUST_SEMANTIC_SETTLE_MS===void 0?a.settleDelayMs:th(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS)},timeoutMs:c},c)},shutdown(){o=!0}}}function s_(e,t){return t!==void 0?t:e===void 0?o_:void 0}function a_(e,t,n,r,i,o){let s=o.randomId(),a=o.now(),c=Pt(e,"requests"),l=Pt(e,"responses"),u=Pt(c,`${s}.json`),d=Pt(l,`${s}.json`);Zg(c,{recursive:!0}),Zg(l,{recursive:!0}),Fe(u,{id:s,request:r});let m=o.now()+i;try{for(nh(e,t,n,m,o);o.now()<=m;){if(ih(d)){let p=c_(Hs(d,"utf8"));if(!p.ok)throw new Error(p.error);return U()&&pn({type:"span",name:"rust.semantic.durable-session.request",durationMs:o.now()-a,ok:!0,session:p.session,kind:r.kind}),p.response}let f=_i(e);(!f||!Fi(f,o.now(),o.isProcessAlive))&&nh(e,t,n,m,o),o.sleep(sh)}throw new Error(`Durable Rust semantic session timed out after ${(i/1e3).toFixed(0)}s.`)}finally{$l(u,{force:!0}),$l(d,{force:!0})}}function nh(e,t,n,r,i){let o=_i(e);if(o&&Fi(o,i.now(),i.isProcessAlive))return;$l(Pt(e,"server.json"),{force:!0}),i.spawnServer(t,e,n);let s=Math.min(r,i.now()+i_);for(;i.now()<=s;){let a=_i(e);if(a&&Fi(a,i.now(),i.isProcessAlive))return;i.sleep(sh)}throw new Error("Durable Rust semantic session helper did not become ready within 5s.")}function _i(e){try{let t=JSON.parse(Hs(Pt(e,"server.json"),"utf8"));return typeof t.protocolVersion!="number"||typeof t.pid!="number"||typeof t.heartbeatAtMs!="number"||t.busyUntilMs!==void 0&&typeof t.busyUntilMs!="number"?null:{protocolVersion:t.protocolVersion,pid:t.pid,heartbeatAtMs:t.heartbeatAtMs,...t.busyUntilMs===void 0?{}:{busyUntilMs:t.busyUntilMs}}}catch{return null}}function c_(e){try{let t=JSON.parse(e);return t.ok===!0&&(t.session==="created"||t.session==="reused"||t.session==="invalidated")&&t.response&&typeof t.response=="object"?{ok:!0,session:t.session,response:t.response}:{ok:!1,error:typeof t.error=="string"?t.error:"helper wrote an invalid response"}}catch(t){return{ok:!1,error:`helper wrote malformed JSON: ${t instanceof Error?t.message:String(t)}`}}}function rh(){return Object.fromEntries(Object.entries(process.env).filter(([e])=>l_(e)).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,t??null]))}function lh(e){return e==="HOME"||e==="PATH"||e.startsWith("CARGO_")||e.startsWith("RA_")||e.startsWith("RUST")}function l_(e){return lh(e)||e.startsWith("SCIP_RUST_")||e==="SCIP_QUERY_PROFILE"||e==="SCIP_QUERY_PROFILE_CACHE_STATE"||e==="SCIP_QUERY_PROFILE_COMMAND"||e==="SCIP_QUERY_PROFILE_OUT"||e==="SCIP_QUERY_PROFILE_RUN_ID"||e==="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY"||e==="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY_KIND"||e==="SCIP_QUERY_PROFILE_MIN_MS"}var uh={canonicalProjectRoot(e){try{return t_(e)}catch{return Pt(e)}},projectFingerprint(e){return Qg(e)},engineIdentity:Ol,fileFingerprint(e){return $s(Hs(e))},environment(){return ah(process.env)}},u_={now:Date.now,randomId:e_,isProcessAlive:dt,spawnServer(e,t,n){if(!ih(e))throw new Error(`Durable Rust semantic session helper was not found at ${e}. Run npm run build first.`);QF(process.execPath,[e,t,n],{detached:!0,stdio:"ignore"}).unref()},sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)}};function Bs(e){return Array.isArray(e)?`[${e.map(Bs).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>`${JSON.stringify(t)}:${Bs(n)}`).join(",")}}`:JSON.stringify(e)}function $s(e){return ZF("sha256").update(e).digest("hex")}var fh=15e3,ph=8,hh=5e3,g_=64,h_=96,Vl=class{constructor(t,n,r={}){this.projectRoot=t;this.status=n;this.opts=r;this.requester=r.requester??S_(t,process.env.SCIP_RUST_SEMANTIC_DURABLE_SESSION)}projectRoot;status;opts;requester;referencesForDefinitions(t){let n=this.status(this.projectRoot);if(!n.available||!n.resolvedBinary)return{available:!1,resolvedBinary:n.resolvedBinary,reason:n.reason,references:Li(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,references:In(t,new Map(r.references),new Set(r.incompleteReferenceSymbolIds??[]))}}catch(r){return this.opts.fallbackReferenceResolver?.referencesForDefinitions(t)??{available:!1,resolvedBinary:n.resolvedBinary,reason:r instanceof Error?r.message:String(r),references:Li(t)}}}calleesForDefinitions(t){let n=this.status(this.projectRoot);if(!n.available||!n.resolvedBinary)return{available:!1,resolvedBinary:n.resolvedBinary,reason:n.reason,callees:Ni(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!1,includeCallees:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,callees:Gl(t,new Map(r.callees??[]))}}catch(r){return this.opts.fallbackCalleeResolver?.calleesForDefinitions(t)??{available:!1,resolvedBinary:n.resolvedBinary,reason:r instanceof Error?r.message:String(r),callees:Ni(t)}}}referencesAndCalleesForDefinitions(t,n){let r=this.status(this.projectRoot);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,references:Li(t),callees:Ni(n)};let i=[...t,...n];try{let o=this.requestSession(r.resolvedBinary,i,{includeReferences:t.length>0,includeCallees:n.length>0,referenceDefinitions:t,calleeDefinitions:n});return{available:o.available,resolvedBinary:r.resolvedBinary,reason:o.reason,references:In(t,new Map(o.references),new Set(o.incompleteReferenceSymbolIds??[])),callees:Gl(n,new Map(o.callees??[]))}}catch(o){return this.fallbackReferencesAndCallees(r,t,n,o)}}signaturesForDefinitions(t){let n=this.status(this.projectRoot);if(!n.available||!n.resolvedBinary)return{available:!1,resolvedBinary:n.resolvedBinary,reason:n.reason,signatures:gh(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!1,includeCallees:!1,includeSignatures:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,signatures:I_(t,new Map(r.signatures??[]))}}catch(r){return this.opts.fallbackSignatureResolver?.signaturesForDefinitions(t)??{available:!1,resolvedBinary:n.resolvedBinary,reason:r instanceof Error?r.message:String(r),signatures:gh(t)}}}importDefinitionsForFile(t,n){let r=this.status(this.projectRoot);if(n.length===0)return{available:r.available,resolvedBinary:r.resolvedBinary,reason:r.reason,sourcePaths:new Map};if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,sourcePaths:new Map(n.map(i=>[i.id,null]))};try{let i=this.requestImportDefinitions(r.resolvedBinary,t,n);return{available:i.available,resolvedBinary:r.resolvedBinary,reason:i.reason,sourcePaths:new Map(i.sourcePaths)}}catch(i){return{available:!1,resolvedBinary:r.resolvedBinary,reason:i instanceof Error?i.message:String(i),sourcePaths:new Map(n.map(o=>[o.id,null]))}}}dispose(){this.requester.shutdown()}requestSession(t,n,r){let i=Us(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,fh),o=Ws(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,0),s=Us(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,ph),a=Ws(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(i,1e4)),c=r.referenceDefinitions?[...r.referenceDefinitions]:void 0,l=r.calleeDefinitions?[...r.calleeDefinitions]:void 0,u=r.signatureDefinitions?[...r.signatureDefinitions]:void 0,d=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,...r}),m={projectRoot:this.projectRoot,rustAnalyzerBinary:t,definitions:[...n],...c?{referenceDefinitions:c}:{},...l?{calleeDefinitions:l}:{},...u?{signatureDefinitions:u}:{},requestTimeoutMs:i,...r.includeReferences!==!1&&o>0?{referenceRetryTimeoutMs:o}:{},diagnosticsTimeoutMs:a,settleDelayMs:d,concurrency:s,includeReferences:r.includeReferences,includeCallees:r.includeCallees,includeSignatures:r.includeSignatures},f=w_(m);return E("rust.semantic.session.request",()=>this.requester.requestSemantic(m,Jn(f,ql(i,m.referenceRetryTimeoutMs),s)),()=>({definitions:n.length,operationDefinitions:f,referenceDefinitions:m.referenceDefinitions?.length,calleeDefinitions:m.calleeDefinitions?.length,signatureDefinitions:m.signatureDefinitions?.length,references:m.includeReferences!==!1,callees:m.includeCallees===!0,signatures:m.includeSignatures===!0,referenceRetryTimeoutMs:m.referenceRetryTimeoutMs}))}fallbackReferencesAndCallees(t,n,r,i){let o=n.length===0?{available:!0,references:Li(n)}:this.opts.fallbackReferenceResolver?.referencesForDefinitions(n),s=r.length===0?{available:!0,callees:Ni(r)}:this.opts.fallbackCalleeResolver?.calleesForDefinitions(r);return o&&s?{available:o.available&&s.available,resolvedBinary:o.resolvedBinary??s.resolvedBinary??t.resolvedBinary,reason:o.reason??s.reason,references:In(n,o.references),callees:Gl(r,s.callees)}:{available:!1,resolvedBinary:t.resolvedBinary,reason:i instanceof Error?i.message:String(i),references:Li(n),callees:Ni(r)}}requestImportDefinitions(t,n,r){let i=Us(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,fh),o=Us(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,ph),s=Ws(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(i,1e4)),a=Ws(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,hh),c={projectRoot:this.projectRoot,rustAnalyzerBinary:t,file:n,positions:[...r],requestTimeoutMs:i,diagnosticsTimeoutMs:s,settleDelayMs:a,concurrency:o};return E("rust.semantic.import-definitions.session.request",()=>this.requester.requestImportDefinitions(c,Jn(r.length,i,o)),()=>({file:n,positions:r.length}))}};function yh(e,t,n={}){return new Vl(e,t,n)}function Mi(e,t){let n=xh(e);if(n!==null)return n;let r=t.includeReferences!==!1;return r&&t.includeCallees!==!0&&t.includeSignatures!==!0&&t.definitionCount<=g_||r&&t.includeCallees===!0&&t.includeSignatures!==!0&&t.definitionCount<=h_?0:hh}function bh(e){let t=e?.trim().toLowerCase(),n=t==="0"||t==="false"||t==="off"||t==="worker",r=t==="1"||t==="true"||t==="on"||t==="durable",i=t===void 0||t==="";return{transport:n||!i&&!r?"worker":"durable",source:i?"default":"environment",fallback:"worker",valid:i||n||r,optOut:"SCIP_RUST_SEMANTIC_DURABLE_SESSION=0"}}function y_(e){return bh(e).transport}function l6(e,t){let n=bh(t);if(n.transport==="worker")return{...n,state:"per-command"};let r=Ai(Ch()),i=Hl(e,r,zl()),o=_i(i);return o?{...n,state:Fi(o,Date.now(),dt)?"live":"stale",pid:o.pid,heartbeatAtMs:o.heartbeatAtMs,...o.busyUntilMs===void 0?{}:{busyUntilMs:o.busyUntilMs}}:{...n,state:"stopped"}}function b_(e,t){let n=null,r=!1,i=!1,o=!1,s=()=>n??=t(),a=()=>{i||(e.shutdown(),i=!0)},c=(u,d,m)=>{let f=R_(u);r=!0;try{a()}catch{}U()&&pn({type:"span",name:"rust.semantic.durable-session.request",durationMs:m,ok:!1,kind:d,session:"worker-fallback",reason:f})},l=(u,d,m)=>{if(o)throw new Error("Rust semantic failover session was already disposed.");if(r)return m(s());let f=Date.now();try{return d(e)}catch(p){c(p,u,Date.now()-f)}return m(s())};return{requestSemantic(u,d){return l("semantic",m=>m.requestSemantic(u,d),m=>m.requestSemantic(u,d))},requestImportDefinitions(u,d){return l("import-definitions",m=>m.requestImportDefinitions(u,d),m=>m.requestImportDefinitions(u,d))},shutdown(){if(o)return;o=!0;let u=[];try{a()}catch(d){u.push(d)}try{n?.shutdown()}catch(d){u.push(d)}if(u.length>0)throw u[0]}}}function S_(e,t,n={worker:()=>C_(),durable:()=>ch(e,{serverPath:Ai(Ch()),semanticWorkerPath:Ai(Sh())})}){return y_(t)==="durable"?b_(n.durable(),n.worker):n.worker()}function C_(e={}){let t=null,n=null,r=1,i=!1,o=()=>{n&&(Ul(n,{recursive:!0,force:!0}),n=null)},s=()=>{let l=t;t=null,l&&l.terminate(),o()},a=()=>{if(t)return t;let l=e.semanticWorkerPath?m_(e.semanticWorkerPath):Sh();if(!d_(Ai(l)))throw new Error(`Rust semantic session worker was not found at ${Ai(l)}. Run npm run build before using built semantic Rust queries.`);return n=dh(Wl(zl(),"scip-query-rust-session-")),t=new p_(l,e.shareEnvironment?{env:f_}:void 0),t.unref(),t},c=()=>{let l=n??dh(Wl(zl(),"scip-query-rust-session-"));return n=l,Wl(l,`${r++}.json`)};return{requestSemantic(l,u){if(i)throw new Error("Rust semantic session was already disposed.");let d=a(),m=c(),f=new SharedArrayBuffer(4),p=new Int32Array(f);if(d.postMessage({kind:"semantic",request:l,responsePath:m,sharedBuffer:f}),Atomics.wait(p,0,0,u)==="timed-out")throw s(),new Error(`Rust semantic session worker timed out after ${(u/1e3).toFixed(0)}s`);try{let y=x_(mh(m,"utf8"));if(!y.ok)throw new Error(y.error);return y.response}finally{Ul(m,{force:!0})}},requestImportDefinitions(l,u){if(i)throw new Error("Rust semantic session was already disposed.");let d=a(),m=c(),f=new SharedArrayBuffer(4),p=new Int32Array(f);if(d.postMessage({kind:"import-definitions",request:l,responsePath:m,sharedBuffer:f}),Atomics.wait(p,0,0,u)==="timed-out")throw s(),new Error(`Rust semantic import-definition session worker timed out after ${(u/1e3).toFixed(0)}s`);try{let y=v_(mh(m,"utf8"));if(!y.ok)throw new Error(y.error);return y.response}finally{Ul(m,{force:!0})}},shutdown(){if(i)return;if(i=!0,!t){o();return}let l=c(),u=new SharedArrayBuffer(4),d=new Int32Array(u);t.postMessage({kind:"shutdown",responsePath:l,sharedBuffer:u}),Atomics.wait(d,0,0,5e3),s()}}}function x_(e){let t=JSON.parse(e);if(!t||typeof t!="object")return{ok:!1,error:"Rust semantic session worker wrote a non-object response."};let n=t;return n.ok===!0&&"response"in n?{ok:!0,response:n.response}:{ok:!1,error:typeof t.error=="string"?t.error:"Rust semantic session worker failed."}}function v_(e){let t=JSON.parse(e);if(!t||typeof t!="object")return{ok:!1,error:"Rust semantic session worker wrote a non-object response."};let n=t;return n.ok===!0&&"response"in n?{ok:!0,response:n.response}:{ok:!1,error:typeof t.error=="string"?t.error:"Rust semantic session worker failed."}}function R_(e){let t=e instanceof Error?`${e.name} ${e.message}`.toLowerCase():String(e).toLowerCase();return t.includes("readiness")?"readiness":t.includes("timeout")||t.includes("timed out")?"timeout":t.includes("helper")?"helper":"request"}function Li(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Ni(e){return new Map(e.map(t=>[t.symbolId,[]]))}function gh(e){return new Map(e.map(t=>[t.symbolId,null]))}function Gl(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??[]]))}function I_(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??null]))}function w_(e){let t=0;return e.includeReferences!==!1&&(t+=(e.referenceDefinitions??e.definitions).length),e.includeCallees===!0&&(t+=(e.calleeDefinitions??e.definitions).length),e.includeSignatures===!0&&(t+=(e.signatureDefinitions??e.definitions).length),Math.max(1,t)}function ql(e,t){return t&&t>0?Math.max(e,t):e}function Sh(){return new URL("./rust-semantic-session-worker.js",import.meta.url)}function Ch(){return new URL("./rust-semantic-session-server.js",import.meta.url)}function Us(e,t){return Rn(e)??t}function Ws(e,t){return xh(e)??t}function xh(e){if(!e)return null;let t=Number(e);return Number.isInteger(t)&&t>=0?t:null}var Yl=15e3,Xl=8;function wh(e,t={}){let n=t.status??Ms,r=P_(e,n),i=T_(e,n),o=F_(e,n),s=t.referenceResolver||t.calleeResolver||t.signatureResolver||!D_(t)?null:yh(e,n,{fallbackReferenceResolver:r,fallbackCalleeResolver:i,fallbackSignatureResolver:o}),a=t.referenceResolver??s??r,c=t.calleeResolver??s??i,l=t.signatureResolver??s??o,u=t.importUsageResolver??Rg(t.sourceImportUsageResolver??k_(),t.importDefinitionResolver??s),d=t.calleeSymbolResolver,m=t.sourceZeroCalleeOracle,f=t.scipOccurrenceCalleeOracle,p=new Map,g=new Map,y=null,h=null,x=()=>(y??=n(e),y),b=()=>{let D=x();return D.dependencyAvailable?h??D:D},C=D=>{if(D.length===0)return new Map;let w=Oi(D);try{let k=a.referencesForDefinitions(w),L=x();return h={...L,available:k.available,resolvedBinary:k.resolvedBinary??L.resolvedBinary,reason:k.reason??L.reason},k.available?new Map(k.references):In(w,k.references)}catch(k){return h={...x(),available:!1,reason:k instanceof Error?k.message:String(k)},Xn(w)}},S=D=>{if(D.length===0)return new Map;let w=Oi(D),k=w.filter(vh);if(k.length===0)return Qn(w);let L=new Map,re=Ih(k,f),Q=[];for(let _ of k)g.has(_.symbolId)?L.set(_.symbolId,g.get(_.symbolId)??[]):re.has(_.symbolId)?L.set(_.symbolId,re.get(_.symbolId)??[]):Rh(_,m)?L.set(_.symbolId,[]):Q.push(_);if(Q.length===0)return Ar(w,L,void 0);try{let _=c.calleesForDefinitions(Q),ae=x();h={...ae,available:_.available,resolvedBinary:_.resolvedBinary??ae.resolvedBinary,reason:_.reason??ae.reason};let ee=Ar(Q,_.callees,d);for(let[dn,vc]of ee)L.set(dn,vc);return Ar(w,L,void 0)}catch(_){return h={...x(),available:!1,reason:_ instanceof Error?_.message:String(_)},Qn(w)}},R=(D,w)=>{let k=Oi(D),L=Oi(w),re=L.filter(vh),Q=new Map,_=Ih(re,f),ae=[];for(let ee of re)_.has(ee.symbolId)?Q.set(ee.symbolId,_.get(ee.symbolId)??[]):Rh(ee,m)?Q.set(ee.symbolId,[]):ae.push(ee);if(k.length===0&&ae.length===0)return{references:Xn(k),callees:Ar(L,Q,void 0)};try{let ee=s?s.referencesAndCalleesForDefinitions(k,ae):A_(a,c,{referenceDefinitions:k,calleeDefinitions:ae}),dn=x();h={...dn,available:ee.available,resolvedBinary:ee.resolvedBinary??dn.resolvedBinary,reason:ee.reason??dn.reason};let vc=ee.available?new Map(ee.references):In(k,ee.references);for(let[Rc,Ic]of ee.callees)Q.set(Rc,Ic);let zm=Ar(L,Q,d);for(let[Rc,Ic]of zm)g.set(Rc,Ic);return{references:vc,callees:zm}}catch(ee){return h={...x(),available:!1,reason:ee instanceof Error?ee.message:String(ee)},{references:Xn(k),callees:Qn(L)}}},v=D=>{if(D.length===0)return new Map;let w=Oi(D);try{let k=l.signaturesForDefinitions(w),L=x();return h={...L,available:k.available,resolvedBinary:k.resolvedBinary??L.resolvedBinary,reason:k.reason??L.reason},Eh(w,k.signatures)}catch(k){return h={...x(),available:!1,reason:k instanceof Error?k.message:String(k)},Gs(w)}};return{language:"rust",availability:b,dispose:()=>{s?.dispose()},importUsage:D=>{let w=p.get(D);if(w)return w;try{let k=u.importUsage(D);return p.set(D,k),k}catch(k){return h={...x(),available:!1,reason:k instanceof Error?k.message:String(k)},[]}},referencesFor:D=>C([D]).get(D.symbolId)??[],referencesForDefinitions:C,referencesAndCalleesForDefinitions:R,calleesFor:D=>S([D]).get(D.symbolId)??[],calleesForDefinitions:S,signatureFor:D=>v([D]).get(D.symbolId)??null}}function D_(e){if(e.usePersistentSession!==void 0)return e.usePersistentSession;let t=process.env.SCIP_RUST_SEMANTIC_SESSION;return t!=="0"&&t!=="false"}function k_(){return{importUsageFacts:()=>({usage:[],positions:[]})}}function Oi(e){return e.map(t=>{let n=t;return{...t,leaf:typeof n.leaf=="string"?n.leaf:T(t.symbol),parentTypeName:n.parentTypeName??null,isFunctionLike:typeof n.isFunctionLike=="boolean"?n.isFunctionLike:te(t.symbol),isTypeLike:n.isTypeLike??!1,kind:n.kind??null,documentation:n.documentation??null,enclosingSymbol:n.enclosingSymbol??null}})}function vh(e){return e.isFunctionLike}function Rh(e,t){if(!t)return!1;try{return t(e)}catch{return!1}}function Ih(e,t){if(!t||e.length===0)return new Map;try{return t(e)}catch{return new Map}}function P_(e,t){return{referencesForDefinitions:n=>__(e,t,n)}}function T_(e,t){return{calleesForDefinitions:n=>L_(e,t,n)}}function F_(e,t){return{signaturesForDefinitions:n=>N_(e,t,n)}}function __(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,references:Xn(n)};let i=Ql();if(!Jl(i))return{available:!1,resolvedBinary:r.resolvedBinary,reason:`Rust semantic worker was not found at ${i}. Run npm run build before using built semantic Rust queries.`,references:Xn(n)};let o=Mr(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Yl),s=zs(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,0),a=Mr(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Xl),c=zs(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),l=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,includeReferences:!0}),u={projectRoot:e,rustAnalyzerBinary:r.resolvedBinary,definitions:[...n],requestTimeoutMs:o,...s>0?{referenceRetryTimeoutMs:s}:{},diagnosticsTimeoutMs:c,settleDelayMs:l,concurrency:a},d=Kl(process.execPath,[i],{cwd:e,input:JSON.stringify(u),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Jn(n.length,ql(o,u.referenceRetryTimeoutMs),a)}),m=Zl(d.stdout);if(m)return{available:m.available,resolvedBinary:r.resolvedBinary,reason:m.reason,references:In(n,new Map(m.references),new Set(m.incompleteReferenceSymbolIds??[]))};let f=d.error instanceof Error?d.error.message:d.stderr.trim()||`Rust semantic worker exited with status ${d.status??"unknown"}.`;return{available:!1,resolvedBinary:r.resolvedBinary,reason:f,references:Xn(n)}}function L_(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,callees:Qn(n)};let i=Ql();if(!Jl(i))return{available:!1,resolvedBinary:r.resolvedBinary,reason:`Rust semantic worker was not found at ${i}. Run npm run build before using built semantic Rust queries.`,callees:Qn(n)};let o=Mr(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Yl),s=Mr(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Xl),a=zs(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),c=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,includeReferences:!1,includeCallees:!0}),l={projectRoot:e,rustAnalyzerBinary:r.resolvedBinary,definitions:[...n],requestTimeoutMs:o,diagnosticsTimeoutMs:a,settleDelayMs:c,concurrency:s,includeReferences:!1,includeCallees:!0},u=Kl(process.execPath,[i],{cwd:e,input:JSON.stringify(l),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Jn(n.length,o,s)}),d=Zl(u.stdout);if(d)return{available:d.available,resolvedBinary:r.resolvedBinary,reason:d.reason,callees:Ar(n,new Map(d.callees??[]),void 0)};let m=u.error instanceof Error?u.error.message:u.stderr.trim()||`Rust semantic worker exited with status ${u.status??"unknown"}.`;return{available:!1,resolvedBinary:r.resolvedBinary,reason:m,callees:Qn(n)}}function N_(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,signatures:Gs(n)};let i=Ql();if(!Jl(i))return{available:!1,resolvedBinary:r.resolvedBinary,reason:`Rust semantic worker was not found at ${i}. Run npm run build before using built semantic Rust queries.`,signatures:Gs(n)};let o=Mr(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Yl),s=Mr(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Xl),a=zs(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),c=Mi(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,{definitionCount:n.length,includeReferences:!1,includeCallees:!1,includeSignatures:!0}),l={projectRoot:e,rustAnalyzerBinary:r.resolvedBinary,definitions:[...n],requestTimeoutMs:o,diagnosticsTimeoutMs:a,settleDelayMs:c,concurrency:s,includeReferences:!1,includeCallees:!1,includeSignatures:!0},u=Kl(process.execPath,[i],{cwd:e,input:JSON.stringify(l),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Jn(n.length,o,s)}),d=Zl(u.stdout);if(d)return{available:d.available,resolvedBinary:r.resolvedBinary,reason:d.reason,signatures:Eh(n,new Map(d.signatures??[]))};let m=u.error instanceof Error?u.error.message:u.stderr.trim()||`Rust semantic worker exited with status ${u.status??"unknown"}.`;return{available:!1,resolvedBinary:r.resolvedBinary,reason:m,signatures:Gs(n)}}function A_(e,t,n){let r=n.referenceDefinitions.length>0?e.referencesForDefinitions(n.referenceDefinitions):{available:!0,references:Xn(n.referenceDefinitions)},i=n.calleeDefinitions.length>0?t.calleesForDefinitions(n.calleeDefinitions):{available:!0,callees:Qn(n.calleeDefinitions)};return{available:r.available&&i.available,resolvedBinary:r.resolvedBinary??i.resolvedBinary,reason:r.reason??i.reason,references:r.references,callees:i.callees}}function Xn(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Qn(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Gs(e){return new Map(e.map(t=>[t.symbolId,null]))}function Ar(e,t,n){let r=0,i=0;return E("rust.semantic.callees.complete-map",()=>{let o=new Map;for(let s of e){let a=t.get(s.symbolId)??[];a.length>0&&(r+=1),i+=a.length,o.set(s.symbolId,a.map(c=>({...c,symbol:n?n(c):c.symbol})))}return o},()=>({definitions:e.length,rows:r,callees:i,resolveSymbols:!!n}))}function Eh(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??null]))}function Ql(){return E_(new URL("./rust-semantic-worker.js",import.meta.url))}function Zl(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;return typeof n.available!="boolean"||!Array.isArray(n.references)?null:{available:n.available,reason:typeof n.reason=="string"?n.reason:void 0,references:n.references,incompleteReferenceSymbolIds:Array.isArray(n.incompleteReferenceSymbolIds)?n.incompleteReferenceSymbolIds.filter(r=>typeof r=="number"):void 0,callees:Array.isArray(n.callees)?n.callees:void 0,signatures:Array.isArray(n.signatures)?n.signatures:void 0}}catch{return null}}function Mr(e,t){return Rn(e)??t}function zs(e,t){if(!e)return t;let n=Number(e);return Number.isInteger(n)&&n>=0?n:t}import{existsSync as M_,readFileSync as O_}from"fs";import{deserializeSCIP as j_,SymbolRole as B_}from"@c4312/scip";var eu=new WeakMap;function kh(e,t){let n=t.filter($_);if(n.length===0)return new Map;let r=!1,i=0,o=0;return E("rust.scip-occurrence.callees",()=>{let s=W_(e);if(r=!!s,!s)return new Map;let a=new Map;for(let c of n){let l=H_(e,s,c);l!==null&&(a.set(c.symbolId,l),i+=1,o+=l.length)}return a},()=>({definitions:t.length,candidates:n.length,indexAvailable:r,resolvedDefinitions:i,resolvedCallees:o}))}function $_(e){return!(!e.symbol.startsWith("rust-analyzer ")||!e.relativePath.endsWith(".rs")||!e.isFunctionLike||e.leaf==="main"||Ie(e.symbol))}function H_(e,t,n){let r=z(e,n.relativePath);if(!r||r.language!=="rust")return null;let i=r.callables.find(l=>l.startLine!==n.startLine||l.endLine!==n.endLine?!1:l.name===n.leaf||n.leaf.endsWith(l.name)||l.name.endsWith(n.leaf));if(!i)return null;let o=r.callSites.filter(l=>l.line>=i.startLine&&l.line<=i.endLine);if(o.length===0)return null;let s=(t.occurrencesByFile.get(n.relativePath)??[]).filter(l=>l.line>=i.startLine&&l.line<=i.endLine&&l.callee.symbol!==n.symbol);if(s.some(l=>l.traitImplMember)||!U_(o,s))return null;let a=[],c=new Set;for(let l of s){let u=`${l.callee.symbol}\0${l.callee.file}\0${l.callee.line}`;c.has(u)||(c.add(u),a.push(l.callee))}return a}function U_(e,t){let n=Dh(e),r=Dh(t);if(n.size!==r.size)return!1;for(let[i,o]of n)if(r.get(i)!==o)return!1;return!0}function Dh(e){let t=new Map;for(let n of e){let r=n.calleeLeaf??n.leaf;if(!r)continue;let i=`${n.line}\0${r}`;t.set(i,(t.get(i)??0)+1)}return t}function W_(e){if(eu.has(e))return eu.get(e)??null;let t=G_(e);return eu.set(e,t),t}function G_(e){if(!M_(e.config.indexPath))return null;try{let t=xe(e).filter(o=>o.symbol.startsWith("rust-analyzer ")&&o.relativePath.endsWith(".rs")&&o.isFunctionLike),n=new Map(t.map(o=>[o.symbol,o])),r=j_(O_(e.config.indexPath)),i=new Map;for(let o of r.documents??[]){let s=o.relativePath;if(!s||!s.endsWith(".rs")||e.isIgnored(s))continue;let a=[];for(let c of o.occurrences??[]){if(!c.symbol||(c.symbolRoles&B_.Definition)!==0)continue;let l=n.get(c.symbol);if(!l)continue;let u=c.range?.[0];Number.isInteger(u)&&a.push({line:u,leaf:l.leaf,traitImplMember:Ie(l.symbol),callee:{symbol:l.symbol,file:l.relativePath,line:l.startLine}})}i.set(s,a)}return{occurrencesByFile:i}}catch{return null}}var Vs=class{sessions=new WeakMap;getOrCreate(t,n,r){let i=z_(t,n),o=this.sessions.get(t);o||(o=new Map,this.sessions.set(t,o));let s=o.get(i);if(s)return s.hits+=1,s.lastUsedAtMs=Date.now(),s.provider;let a=Date.now(),c=r();return o.set(i,{key:i,language:n,projectRoot:t.config.projectRoot,provider:c,createdAtMs:a,lastUsedAtMs:a,hits:1}),c}sessionsFor(t){return[...this.sessions.get(t)?.values()??[]]}clear(t){let n=this.sessions.get(t);if(n)for(let r of n.values())r.provider.dispose?.();this.sessions.delete(t)}};function z_(e,t){return`${e.config.projectRoot}:${t}-workspace`}import{randomUUID as _L}from"crypto";import{existsSync as LL,mkdirSync as ny,readFileSync as NL,rmSync as ry}from"fs";import{dirname as AL,resolve as iy}from"path";import{readFileSync as V_}from"fs";import{join as tu}from"path";var _6=4,Ph=5e3,q_="watch.lock",K_="watch-state.json",J_="watch-activity.json";function Th(e){return{lockPath:tu(e,q_),statePath:tu(e,K_),activityPath:tu(e,J_)}}function nu(e){try{return Y_(JSON.parse(V_(e,"utf8")))}catch{return null}}function Y_(e){if(!e||typeof e!="object")return null;let t=e;return t.version!==1||typeof t.protocolVersion!="number"||typeof t.pid!="number"||!Number.isInteger(t.pid)||t.pid<=0||typeof t.projectRoot!="string"||t.worktreeId!==void 0&&(typeof t.worktreeId!="string"||t.worktreeId.length===0)||typeof t.cliVersion!="string"||!Ze(t.startedAt)||!Ze(t.heartbeatAt)||!Ze(t.lastActivityAt)||!X_(t.watcher)||t.idleDeadlineAt!==void 0&&!Ze(t.idleDeadlineAt)||t.indexGeneration!==void 0&&!/^[a-f0-9]{64}$/.test(t.indexGeneration)||t.lastError!==void 0&&!Q_(t.lastError)||t.lastRefresh!==void 0&&!Z_(t.lastRefresh)||t.reindexActivity!==void 0&&!eL(t.reindexActivity)||t.typescriptSemantic!==void 0&&!tL(t.typescriptSemantic)||t.typescriptIndex!==void 0&&!nL(t.typescriptIndex)?null:t}function Ze(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function X_(e){if(!e||typeof e!="object"||!("state"in e))return!1;let t=e;switch(t.state){case"idle":return!0;case"waiting":return Qe(t.changedFiles)&&Qe(t.reindexAt);case"indexing":return Qe(t.startedAt);case"cooldown":return Qe(t.until)&&typeof t.dirty=="boolean";default:return!1}}function Q_(e){if(!e||typeof e!="object")return!1;let t=e;return Ze(t.at)&&typeof t.message=="string"}function Z_(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.trigger?.kind=="string"&&typeof t.result=="string"&&Ze(t.startedAt)&&Ze(t.completedAt)&&Qe(t.durationMs)}function eL(e){if(!e||typeof e!="object")return!1;let t=e;return!Ze(t.windowStartedAt)||!Ze(t.windowEndedAt)||!Xe(t.runs)||!Xe(t.rebuilt)||!Xe(t.reused)||!Xe(t.failed)||!Xe(t.suppressed)||!Qe(t.estimatedLogicalOutputBytes)||t.estimatedLogicalOutputBytes<0||!t.byTrigger||typeof t.byTrigger!="object"?!1:Object.values(t.byTrigger).every(n=>n===void 0||Xe(n))}function tL(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.protocolVersion=="number"&&(t.state==="idle"||t.state==="ready"||t.state==="unavailable"||t.state==="error")&&Qe(t.requests)&&Qe(t.sessionsCreated)&&Qe(t.sessionsReused)&&Qe(t.sessionsRefreshed)&&Qe(t.sessionsReplaced)&&Qe(t.projectsCreated)&&(t.lastRequestAt===void 0||Ze(t.lastRequestAt))&&(t.lastError===void 0||typeof t.lastError=="string")&&(t.busyUntil===void 0||Ze(t.busyUntil))}function nL(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.protocolVersion=="number"&&(t.state==="idle"||t.state==="ready"||t.state==="unavailable"||t.state==="error")&&Xe(t.requests)&&Xe(t.sessionsCreated)&&Xe(t.sessionsReplaced)&&Xe(t.initializations)&&Xe(t.programUpdates)&&Xe(t.documentsEmitted)&&Xe(t.documentsRemoved)&&(t.lastRequestAt===void 0||Ze(t.lastRequestAt))&&(t.lastDurationMs===void 0||Qe(t.lastDurationMs)&&t.lastDurationMs>=0)&&(t.lastError===void 0||typeof t.lastError=="string")&&(t.busyUntil===void 0||Ze(t.busyUntil))}function Qe(e){return typeof e=="number"&&Number.isFinite(e)}function Xe(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0}import{performance as W}from"perf_hooks";function mt(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import Fh from"path";function rL(e,t){return e.getReferences().map(n=>{let r=n.getNode();return qs(r,t)})}function iL(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function _h(e,t,n,r){let i=[];for(let o of iL(e))for(let s of rL(o,r))s.file===t.relativePath&&s.line>=t.startLine&&s.line<=t.endLine||i.push(s);for(let o of n)i.push(o);return Or(i)}function Lh(e,t,n,r){let i=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();jr(r,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||i.push({location:qs(a,r),node:a}))}return i}function qs(e,t){let n=e.getSourceFile(),r=n.getLineAndColumnAtPos(e.getStart());return{file:jr(t,n.getFilePath())??n.getBaseName(),line:r.line-1,column:r.column-1}}function Nh(e,t,n){let r=e.getSourceFile(),i=iu(r,e),o=e.getText(),s=new RegExp(`\\b${$(o)}\\b`,"g"),a=r.getFullText().split(`
|
|
286
|
+
`),c=[];for(let l=0;l<a.length;l++){if(l===i)continue;let u=a[l]??"";s.lastIndex=0;let d;for(;(d=s.exec(u))!==null;)c.push({file:t,line:l,column:d.index})}return Or(c.filter(l=>jr(n,Fh.join(n,l.file))===t))}function ru(e){for(let t=e;t;t=t.getParent()){let n=t.getKindName();if(n.includes("Type")||n==="InterfaceDeclaration"||n==="TypeAliasDeclaration")return!0;if(n==="CallExpression"||n==="NewExpression"||n==="ExpressionStatement")return!1}return!1}function iu(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function Or(e){let t=new Set,n=[];for(let r of e){let i=`${r.file}:${r.line}:${r.column}`;t.has(i)||(t.add(i),n.push(r))}return n}function jr(e,t){let n=Fh.relative(e||process.cwd(),t).replace(/\\/g,"/");return!n||n.startsWith("..")?null:n}function Ah(e,t,n,r){let i=oL(t,r);return i.size===0?new Map:sL(e,n,i)}function oL(e,t){let n=new Map;for(let r of Y(e,t)){let i=T(r.symbol)??r.leaf;if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push(r)}return n}function sL(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of aL(e,o)){let a=n.get(s);if(!a)continue;let c=iu(t,o);for(let l of a){if(c<l.startLine-1||c>l.endLine+1)continue;let u=Math.abs(c-l.startLine),d=i.get(l.symbolId);d!==void 0&&d<=u||(i.set(l.symbolId,u),r.set(l.symbolId,o))}}}),r}function aL(e,t){let n=[],r=i=>{i&&!n.includes(i)&&n.push(i)};if("getNameNode"in t&&typeof t.getNameNode=="function"){let i=t.getNameNode();r(i?.getText())}if("getName"in t&&typeof t.getName=="function"){let i=t.getName();r(i)}return e.Node.isIdentifier(t)&&r(t.getText()),n}var cL=j("ts-definition-leaf-candidates",{clearGroups:["definition-catalog"]});function Mh(e,t,n,r){let i=au(e,t),o=ou(i.get(r)??[],n);if(o)return o;let s=[];for(let a of i.values())for(let c of a)((c.leaf||T(c.symbol)||"").includes(r)||c.symbol.includes(r))&&s.push(c);return ou(s,n)}function su(e,t,n,r){return ou(au(e,t).get(r)??[],n)}function Oh(e,t){let n=new Map;for(let[r,i]of au(e,t)){let o=i[0];o&&n.set(r,o)}return n}function au(e,t){return cL.get(e,t,()=>{let n=new Map;for(let r of Y(e,t)){let i=r.leaf||T(r.symbol);if(!i)continue;let o=n.get(i);o||(o=[],n.set(i,o)),o.push({...r,leaf:i})}for(let r of n.values())r.sort((i,o)=>i.startLine-o.startLine||i.endLine-o.endLine||i.symbolId-o.symbolId);return n})}function ou(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let i of e){let o=Math.abs(i.startLine-t);(o<r||o===r&&n&&i.startLine<n.startLine)&&(n=i,r=o)}return n}import cu from"path";var ji=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function Tt(e){let t=e.toLowerCase();return ji.some(n=>t.endsWith(n))}function jh(e,t){let n=new Map,r=null,i=null,o=()=>(i??=N(e,{extensions:ji}),i),s=()=>(r??=E("typescript.source-file-index",()=>lL(e.config.projectRoot,t,o()),()=>({projects:t.length,indexedDocuments:o().length})),r),a=c=>Tt(c)?mt(n,c,()=>{let l=Bi(cu.resolve(e.config.projectRoot,c));for(let{project:u,sourceFiles:d}of s()){let m=d.get(l)??null;if(m||(m=u.addSourceFileAtPathIfExists(l)??null,m&&d.set(Bi(m.getFilePath()),m)),m)return{project:u,sourceFile:m}}return null}):null;return{sourceFile:c=>a(c)?.sourceFile??null,sourceFileMatch:a,indexedTypeScriptLikeDocuments:o}}function lL(e,t,n){let r=t.map(({project:i})=>({project:i,sourceFiles:new Map(i.getSourceFiles().map(o=>[Bi(o.getFilePath()),o]))}));for(let i of n){let o=Bi(cu.resolve(e,i));for(let s of r){if(s.sourceFiles.has(o))break;let a=s.project.addSourceFileAtPathIfExists(o)??null;if(a){s.sourceFiles.set(Bi(a.getFilePath()),a);break}}}return r}function Bi(e){return cu.resolve(e)}function lu(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function Bh(e){let t=`${e.relativeDir}/src`;return[`${t}/index.ts`,`${t}/index.tsx`,`${t}/index.mts`,`${t}/index.cts`]}import{existsSync as $i,readFileSync as uL}from"fs";import _e from"path";var uu=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function du(e,t){let r=t?_e.dirname(_e.join(e,t)):e,i=_e.resolve(e);for(;r.startsWith(i);){for(let s of uu){let a=_e.join(r,s);if($i(a))return a}let o=_e.dirname(r);if(o===r)break;r=o}for(let o of uu){let s=_e.join(e,o);if($i(s))return s}return null}function $h(e){let t=e.config.projectRoot,n=new Set(dL(t,e.config.semantic?.typescript?.tsconfigs)),r=N(e,{includeIgnored:!1,extensions:ji});for(let i of r){let o=du(t,i);o&&n.add(_e.resolve(o))}if(n.size===0){let i=du(t);i&&n.add(_e.resolve(i))}return[...n].filter(i=>!Hh(t,i)).sort((i,o)=>i.localeCompare(o))}function dL(e,t=[]){let n=new Set;for(let r of t){let i=_e.isAbsolute(r)?r:_e.join(e,r);$i(i)&&n.add(_e.resolve(i))}for(let r of mL(e))for(let i of uu){let o=_e.join(r,i);$i(o)&&n.add(_e.resolve(o))}if(n.size===0){let r=du(e);r&&n.add(_e.resolve(r))}return[...n].filter(r=>!Hh(e,r)).sort((r,i)=>r.localeCompare(i))}function mL(e){let t=_e.join(e,"package.json");if(!$i(t))return[];let n;try{n=JSON.parse(uL(t,"utf8"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>tl(e,i))}function Hh(e,t){let n=_e.relative(e,t).replace(/\\/g,"/");return n.startsWith("..")||n.includes("/node_modules/")||n.startsWith("node_modules/")||n.includes("/dist/")||n.startsWith("dist/")}import{createRequire as fL}from"module";var Uh=fL(import.meta.url),Hi,Ks;function mu(){if(Hi!==void 0)return Hi;try{Hi=Uh("ts-morph")}catch{Hi=null}return Hi}function Js(){if(Ks)return Ks;let e=mu();if(!e)return"ts-morph:unavailable";let t="unknown";try{t=Uh("ts-morph/package.json").version??"unknown"}catch{}return Ks=`ts-morph:${t}:typescript:${e.ts.version}`,Ks}function Wh(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!0})}))}function Ys(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function Xs(e,t){let n=new Map(e.map(i=>[i.symbol,i])),r=new Map(e.map(i=>[i.symbolId,[]]));for(let i of t.values())for(let o of i){let s=n.get(o.targetSymbol);s&&r.get(s.symbolId).push(o.location)}for(let[i,o]of r)r.set(i,pL(o));return r}function Vh(e,t,n){let r=zh(e,t),i=zh(e,n),o=[...r].filter(d=>!i.has(d)).sort(),s=[...i].filter(d=>!r.has(d)).sort(),a=Gh(e,t),c=Gh(e,n),l=[...a].filter(d=>!c.has(d)).sort(),u=[...c].filter(d=>!a.has(d)).sort();return{passed:o.length===0&&s.length===0,expectedCount:r.size,actualCount:i.size,missing:o,extra:s,callerFiles:{passed:l.length===0&&u.length===0,expectedCount:a.size,actualCount:c.size,missing:l,extra:u}}}function Gh(e,t){let n=new Set;for(let r of e)for(let i of t.get(r.symbolId)??[])i.file!==r.relativePath&&n.add(`${r.symbol}\0${i.file}`);return n}function qh(e,t,n){let r=new Set(n),i=new Map(n.map(o=>[o,[]]));for(let o of e)for(let s of t.get(o.symbolId)??[])r.has(s.file)&&i.get(s.file).push({targetSymbol:o.symbol,location:s});for(let[o,s]of i)i.set(o,gL(s));return i}function zh(e,t){let n=new Set;for(let r of e)for(let i of t.get(r.symbolId)??[])n.add(`${r.symbol}\0${i.file}\0${i.line}\0${i.column}`);return n}function pL(e){let t=new Map;for(let n of e)t.set(`${n.file}\0${n.line}\0${n.column}`,n);return[...t.values()].sort(Kh)}function gL(e){let t=new Map;for(let n of e){let{location:r}=n;t.set(`${n.targetSymbol}\0${r.file}\0${r.line}\0${r.column}`,n)}return[...t.values()].sort((n,r)=>n.targetSymbol.localeCompare(r.targetSymbol)||Kh(n.location,r.location))}function Kh(e,t){return e.file.localeCompare(t.file)||e.line-t.line||e.column-t.column}var hL=32;function ey(e,t){let n=E("typescript.provider.load",()=>mu());if(!n)return Ys("ts-morph is not installed");let r=E("typescript.provider.tsconfig-discovery",()=>$h(e));if(r.length===0)return Ys("no tsconfig found");try{let i=E("typescript.provider.project-bundles",()=>Wh(n,r),()=>({tsconfigs:r.length}));return yL(e,n,i)}catch(i){return Ys(i instanceof Error?i.message:String(i),r[0],r)}}function yL(e,t,n,r={}){return E("typescript.provider.construct",()=>new pu(e,t,n),()=>({tsconfigs:n.length,reusedProjects:r.reusedProjects===!0}))}var pu=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=Ir(t.config.projectRoot),this.sourceFiles=jh(t,r)}db;tsMorph;projects;language="typescript";importUsageCache=new Map;referencesCache=new Map;calleesCache=new Map;fileCalleesCache=new Map;signatureCache=new Map;definitionNodeCache=new Map;fileDefinitionNodeCache=new Map;indexedDefinitionLeafCache=new Map;compilerCheckerCache=new WeakMap;packageImportReferenceIndex=null;packageExportIndex=null;workspacePackages;sourceFiles;availability(){return{available:!0,tsconfigPath:this.projects[0]?.tsconfigPath,tsconfigPaths:this.projects.map(t=>t.tsconfigPath)}}importUsage(t){return mt(this.importUsageCache,t,()=>{let n=this.sourceFiles.sourceFile(t);if(!n)return[];let r=SL();return E("typescript.import-usage.file",()=>this.importUsageForSourceFile(t,n,r),()=>({file:t,...r}))})}referencesFor(t){return mt(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t);return this.referencesForDefinitionNode(t,n)})}referencesForDefinitions(t,n={}){let r=new Map,i=U(),o=[];for(let u of t){let d=this.referencesCache.get(u.symbolId);d?r.set(u.symbolId,d):o.push(u)}if(o.length===0)return r;let s=o,a=n.exact?[]:o.filter(u=>!Yh(u));if(a.length>=hL){let u=this.referencesForDefinitionsBySymbolScan(a);for(let d of a){let m=u.get(d.symbolId)??[];this.referencesCache.set(d.symbolId,m),r.set(d.symbolId,m)}if(s=o.filter(d=>Yh(d)),s.length===0)return r}let c=new Map;for(let u of s){let d=c.get(u.relativePath);d?d.push(u):c.set(u.relativePath,[u])}let l=[];for(let[u,d]of c){let m=Xh();E("typescript.references-map.file",()=>{let f=this.definitionNodesForFile(u);for(let p of d){i&&(m.cacheMisses+=1);let g=f.get(p.symbolId)??null;i&&(g?m.nodeHits+=1:m.nodeMisses+=1);try{let y=this.referencesForDefinitionNode(p,g,i?m:void 0);this.referencesCache.set(p.symbolId,y),r.set(p.symbolId,y)}catch{m.preciseSearchFailures+=1,l.push(p)}}},()=>({relativePath:u,definitions:d.length,...Qh(m)}))}if(l.length>0){let u=this.referencesForDefinitionsBySymbolScan(l);for(let d of l){let m=u.get(d.symbolId)??[];this.referencesCache.set(d.symbolId,m),r.set(d.symbolId,m)}}return r}referenceFragmentsForFiles(t){let n=xe(this.db).filter(o=>Tt(o.relativePath)),r=t.filter(o=>this.sourceFiles.sourceFile(o)!==null),i=this.referencesForDefinitionsBySymbolScan(n,r);return qh(n,i,r)}referencesForDefinitionsBySymbolScan(t,n){let r=U(),i=Xh(),o=new Map,s=new Set(t.map(c=>c.symbolId)),a=new Map(t.map(c=>[c.symbolId,c]));for(let c of t)o.set(c.symbolId,[]);return E("typescript.references-map.inverted-scan",()=>{let c=r?W.now():0,l=n?this.packageImportReferencesForFiles(n):this.packageImportReferences();for(let y of t){let h=l.get(y.symbolId)??[];if(h.length>0){let x=o.get(y.symbolId)??[];x.push(...h),o.set(y.symbolId,x)}r&&(i.packageReferenceCount+=h.length)}r&&(i.packageRefsMs+=W.now()-c);let u=new Map,d=new Map,m=this.hierarchyTargetsForDefinitions(t),f=new Set(t.map(y=>y.leaf).filter(Boolean)),p=r?W.now():0;for(let y of n??this.sourceFiles.indexedTypeScriptLikeDocuments()){if(this.db.isIgnored(y))continue;let h=this.sourceFiles.sourceFile(y);h&&(r&&(i.scanFiles+=1),this.addReferencesFromSourceFileScan(h,y,s,a,m,f,u,d,o,r?i:void 0))}r&&(i.scanMs+=W.now()-p);let g=r?W.now():0;this.addHierarchyMemberReferences(t,o,r?i:void 0),r&&(i.hierarchyMs+=W.now()-g);for(let[y,h]of o){let x=Or(h);o.set(y,x),r&&(i.referenceCount+=x.length)}},()=>({definitions:t.length,...Qh(i)})),o}addReferencesFromSourceFileScan(t,n,r,i,o,s,a,c,l,u){let d=this.compilerCheckerForSourceFile(t),m=t.compilerNode,f=vL(t),p=g=>{if(this.tsMorph.ts.isIdentifier(g)){if(u&&(u.identifiers+=1),!s.has(g.text)&&!f.has(g.text)){this.tsMorph.ts.forEachChild(g,p);return}let y=this.compilerReferenceSymbol(d,g,u);if(y){let h;a.has(y)?h=a.get(y)??null:(h=this.referenceDefinitionFromCompilerSymbol(y),a.set(y,h)),u&&(h?u.targetHits+=1:u.targetMisses+=1);let x=mt(c,y,()=>this.compilerSymbolKeys(y)),b=null,C=null,S=h&&r.has(h.symbolId)?i.get(h.symbolId):void 0;if(S&&(b=fu(m,g),!Jh(S,n,b))){let R=m.getLineAndCharacterOfPosition(g.getStart(m));C={file:n,line:R.line,column:R.character};let v=l.get(S.symbolId)??[];v.push(C),l.set(S.symbolId,v),u&&(u.requestedHits+=1)}for(let R of x)for(let v of o.get(R)?.values()??[]){if(b??=fu(m,g),Jh(v,n,b))continue;if(!C){let w=m.getLineAndCharacterOfPosition(g.getStart(m));C={file:n,line:w.line,column:w.character}}let D=l.get(v.symbolId)??[];D.push(C),l.set(v.symbolId,D),u&&(u.requestedHits+=1)}}}this.tsMorph.ts.forEachChild(g,p)};p(m)}hierarchyTargetsForDefinitions(t){let n=new Map;for(let r of t){let i=this.nodeForDefinition(r),o=i?.compilerNode;if(!o||!this.isHierarchyMethod(o))continue;let s=o.parent;if(!this.isHierarchyContainer(s))continue;let a=this.compilerCheckerForSourceFile(i.getSourceFile()),c=a.getSymbolAtLocation(o.name);if(c)for(let l of this.hierarchyMemberSymbols(a,s,c))for(let u of this.compilerSymbolKeys(l)){let d=n.get(u)??new Map;d.set(r.symbolId,r),n.set(u,d)}}return n}hierarchyMemberSymbols(t,n,r){let i=new Set,o=new Set,s=(a,c,l)=>{if(!o.has(a)){o.add(a),i.add(c);for(let u of l){let d=u.getProperty(r.name);d&&s(u,d,this.hierarchyAncestorTypesForType(t,u))}}};return s(t.getTypeAtLocation(n),r,this.hierarchyAncestorTypes(t,n)),i}addHierarchyMemberReferences(t,n,r){let i=new Map;for(let o of t){let s=this.nodeForDefinition(o),a=s?.compilerNode;if(!a||!this.isHierarchyMethod(a))continue;let c=a.parent;if(!this.isHierarchyContainer(c))continue;let l=this.compilerCheckerForSourceFile(s.getSourceFile()),u=l.getSymbolAtLocation(a.name);if(!u)continue;let d=a.getSourceFile(),m=d.getLineAndCharacterOfPosition(a.name.getStart(d)),f={definition:o,location:{file:o.relativePath,line:m.line,column:m.character}},p=n.get(o.symbolId)??[];for(let y of this.hierarchyMemberSymbols(l,c,u))if(y!==u)for(let h of this.compilerSymbolLocations(y))p.push(h),r&&(r.hierarchyReferences+=1);n.set(o.symbolId,p);let g=this.hierarchyRootMemberSymbols(l,c,u);for(let y of g){let h=i.get(y)??new Map;h.set(o.symbolId,f),i.set(y,h)}r&&(r.hierarchyDefinitions+=1)}for(let o of i.values())if(!(o.size<2)){r&&(r.hierarchyFamilies+=1);for(let{definition:s}of o.values()){let a=n.get(s.symbolId)??[];for(let c of o.values())c.definition.symbolId!==s.symbolId&&(a.push(c.location),r&&(r.hierarchyReferences+=1));n.set(s.symbolId,a)}}}hierarchyRootMemberSymbols(t,n,r){let i=new Set,o=new Set,s=(a,c,l)=>{if(o.has(a))return;o.add(a);let u=!1;for(let d of l){let m=d.getProperty(r.name);m&&(u=!0,s(d,m,this.hierarchyAncestorTypesForType(t,d)))}if(!u)for(let d of this.compilerSymbolKeys(c))i.add(d)};return s(t.getTypeAtLocation(n),r,this.hierarchyAncestorTypes(t,n)),i}compilerSymbolKeys(t){return(t.declarations??[]).map(n=>{let r=n.getSourceFile();return`${r.fileName}\0${n.getStart(r)}\0${t.name}`})}compilerSymbolLocations(t){let n=[];for(let r of t.declarations??[]){let i=r.getSourceFile(),o=jr(this.db.config.projectRoot,i.fileName);if(!o)continue;let s=r.name,a=i.getLineAndCharacterOfPosition((s??r).getStart(i));n.push({file:o,line:a.line,column:a.character})}return n}baseTypes(t,n){try{return t.getBaseTypes(n)??[]}catch{return[]}}hierarchyAncestorTypes(t,n){let r=new Set(this.hierarchyAncestorTypesForType(t,t.getTypeAtLocation(n)));for(let i of n.heritageClauses??[])for(let o of i.types)r.add(t.getTypeAtLocation(o));return[...r]}hierarchyAncestorTypesForType(t,n){let r=new Set(this.baseTypes(t,n));for(let i of n.getSymbol()?.declarations??[])if(this.isHierarchyContainer(i))for(let o of i.heritageClauses??[])for(let s of o.types)r.add(t.getTypeAtLocation(s));return[...r]}isHierarchyMethod(t){return this.tsMorph.ts.isMethodDeclaration(t)||this.tsMorph.ts.isMethodSignature(t)}isHierarchyContainer(t){return this.tsMorph.ts.isClassDeclaration(t)||this.tsMorph.ts.isClassExpression(t)||this.tsMorph.ts.isInterfaceDeclaration(t)}compilerReferenceSymbol(t,n,r){r&&(r.symbolLookups+=1);let i=t.getSymbolAtLocation(n);if(i){if((i.flags&this.tsMorph.ts.SymbolFlags.Alias)===0)return i;try{return r&&(r.aliasResolutions+=1),t.getAliasedSymbol(i)}catch{return i}}}calleesFor(t){return mt(this.calleesCache,t.symbolId,()=>mt(this.fileCalleesCache,t.relativePath,()=>this.calleeMapForFile(t.relativePath)).get(t.symbolId)??[])}calleesForDefinitions(t){let n=new Map,r=new Map;for(let i of t){let o=r.get(i.relativePath);o?o.push(i):r.set(i.relativePath,[i])}for(let[i,o]of r){let s=this.fileCalleesCache.get(i),a=new Set(o.map(l=>l.symbolId)),c=s??this.calleeMapForFile(i,a);for(let l of o){let u=c.get(l.symbolId)??[];this.calleesCache.set(l.symbolId,u),n.set(l.symbolId,u)}}return n}referencesForDefinitionNode(t,n,r){let i=r?W.now():0,o=this.packageImportReferencesForDefinition(t);if(r&&(r.packageRefsMs+=W.now()-i,r.packageReferenceCount+=o.length),!n)return o;let s=r?W.now():0,a=_h(n,t,o,this.db.config.projectRoot);return r&&(r.semanticRefsMs+=W.now()-s,r.referenceCount+=a.length),a}signatureFor(t){return mt(this.signatureCache,t.symbolId,()=>{let n=this.nodeForDefinition(t);if(!n||!this.tsMorph.Node.isFunctionDeclaration(n)&&!this.tsMorph.Node.isMethodDeclaration(n)&&!this.tsMorph.Node.isArrowFunction(n)&&!this.tsMorph.Node.isFunctionExpression(n)&&!this.tsMorph.Node.isConstructorDeclaration(n))return null;let r=n.getType().getCallSignatures()[0];if(!r)return null;let i=r.getParameters().map(s=>{let a=s.getDeclarations()[0],c=a?s.getTypeAtLocation(a).getText(a):s.getValueDeclaration()?.getType().getText()??"unknown";return Zh(c)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${Zh(o)}`})}importUsageForSourceFile(t,n,r){let i=[],o=new Map;for(let s of n.getImportDeclarations()){r.declarations+=1;let a=Je(this.db,t,s.getModuleSpecifierValue()),c=s.getImportClause()?.isTypeOnly()??!1;for(let l of gu(s)){r.entries+=1;let u=c?null:l.identifier?.getSymbol()?.compilerSymbol??null;!c&&l.identifier&&(u?r.bindingSymbols+=1:r.missingBindingSymbols+=1);let d={sourcePath:a,entry:l,typeOnlyDeclaration:c,bindingSymbol:u,references:[]};if(i.push(d),c||!l.localName||!u)continue;let m=o.get(l.localName);m?m.push(d):o.set(l.localName,[d])}}return o.size>0&&n.forEachDescendant(s=>{if(s.getKindName()!=="Identifier")return;let a=o.get(s.getText());if(!a||CL(s))return;r.scannedIdentifiers+=1;let c=s.getSymbol()?.compilerSymbol;if(r.symbolLookups+=1,!!c){for(let l of a)if(l.bindingSymbol===c){l.references.push({location:qs(s,this.db.config.projectRoot),node:s}),r.matchedReferences+=1;break}}}),i.map(s=>s.typeOnlyDeclaration?bL(t,s.sourcePath,s.entry):s.entry.identifier&&!s.bindingSymbol?(r.fallbackEntries+=1,this.valueImportUsageForEntry(t,s.sourcePath,s.entry)):this.valueImportUsageFromLocations(t,s.sourcePath,s.entry,s.references))}valueImportUsageForEntry(t,n,r){let i=r.identifier?r.identifier.findReferences():[],o=[];for(let s of i)for(let a of Lh(s,t,r.identifier,this.db.config.projectRoot))o.push(a);return this.valueImportUsageFromLocations(t,n,r,o)}valueImportUsageFromLocations(t,n,r,i){let o=i.some(c=>!ru(c.node)),s=i.some(c=>ru(c.node)),a=r.isTypeOnly;return{importer:t,sourcePath:n,importedName:r.importedName,localName:r.localName,kind:r.kind,isTypeOnly:a,isUsed:a||i.length>0,isTypeUsed:a||s,isValueUsed:o,references:i.map(c=>c.location)}}packageImportReferencesForDefinition(t){return this.packageImportReferences().get(t.symbolId)??[]}packageImportReferencesForFiles(t){let n=new Map,r=new Set;for(let o of t){let s=this.sourceFiles.sourceFile(o);if(s)for(let a of s.getImportDeclarations()){let c=lu(this.workspacePackages,a.getModuleSpecifierValue());c&&r.add(c)}}if(r.size===0)return n;let i=this.packageExportsForNames(r);for(let o of t)this.addPackageImportReferencesForDocument(n,i,o);for(let[o,s]of n)n.set(o,Or(s));return n}packageImportReferences(){if(this.packageImportReferenceIndex)return this.packageImportReferenceIndex;let t=new Map,n=this.packageExports();for(let r of this.sourceFiles.indexedTypeScriptLikeDocuments())this.addPackageImportReferencesForDocument(t,n,r);for(let[r,i]of t)t.set(r,Or(i));return this.packageImportReferenceIndex=t,t}addPackageImportReferencesForDocument(t,n,r){if(this.db.isIgnored(r))return;let i=this.sourceFiles.sourceFileMatch(r);if(i)for(let o of i.sourceFile.getImportDeclarations())this.addPackageImportReferencesForDeclaration(t,n,r,o)}addPackageImportReferencesForDeclaration(t,n,r,i){let o=lu(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of gu(i)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=Nh(a.identifier,r,this.db.config.projectRoot);l.length>0&&EL(t,c,l)}}packageExports(){return this.packageExportIndex?this.packageExportIndex:(this.packageExportIndex=this.packageExportsForNames(new Set(this.workspacePackages.map(t=>t.name))),this.packageExportIndex)}packageExportsForNames(t){let n=new Map;for(let r of this.workspacePackages){if(!t.has(r.name))continue;let i=new Map;for(let o of Bh(r))this.collectPackageExports(r,o,i,new Set);i.size>0&&n.set(r.name,i)}return n}collectPackageExports(t,n,r,i){if(i.has(n))return;i.add(n);let o=this.sourceFiles.sourceFile(n);if(o)for(let s of o.getExportDeclarations()){let a=s.getModuleSpecifierValue(),c=a?Je(this.db,n,a):n;if(!c||!c.startsWith(`${t.relativeDir}/src/`))continue;let l=s.getNamedExports();if(l.length===0){if(s.isNamespaceExport())continue;this.collectPackageExports(t,c,r,i);continue}for(let u of l){let d=u.getNameNode().getText(),m=u.getAliasNode()?.getText()??d,f=this.indexedDefinitionByLeaf(c,d);if(!f)continue;let p=r.get(m);p||(p=new Set,r.set(m,p)),p.add(f.symbolId)}}}indexedDefinitionByLeaf(t,n){return mt(this.indexedDefinitionLeafCache,t,()=>Oh(this.db,t)).get(n)??null}nodeForDefinition(t){return mt(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return mt(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?Ah(this.tsMorph,this.db,n,t):new Map})}referenceDefinitionFromCompilerSymbol(t){return this.definitionFromCompilerSymbol(t,void 0,!0)}definitionFromCompilerSymbol(t,n,r=!1){let i=t.name,o=n?W.now():0,s=t.declarations??[];n&&(n.declarationsMs+=W.now()-o,n.declarationChecks+=s.length);for(let a of s){let c=n?W.now():0,l=a.getSourceFile(),u=jr(this.db.config.projectRoot,l.fileName),d=l.getLineAndCharacterOfPosition(a.getStart(l)).line;if(n&&(n.declarationLocationMs+=W.now()-c),!u||this.db.isIgnored(u))continue;let m=n?W.now():0,f=this.compilerDeclarationName(a),p=r?su(this.db,u,d,i)??(f&&f!==i?su(this.db,u,d,f):null):Mh(this.db,u,d,i);if(n&&(n.indexedLookupMs+=W.now()-m),p)return{symbolId:p.symbolId,symbol:p.symbol,file:p.relativePath,line:p.startLine}}return null}compilerDeclarationName(t){let n=t.name;return n&&this.tsMorph.ts.isIdentifier(n)?n.text:null}calleeMapForFile(t,n){let r=U(),i=0,o=0,s=0,a=0,c=0,l=0,u=0,d=0,m=r?IL():void 0;return E("typescript.callee-map.file",()=>{let f=r?W.now():0,p=this.sourceFiles.sourceFile(t);if(r&&(c=Math.round(W.now()-f)),!p)return new Map;let g=r?W.now():0,y=Y(this.db,t).sort((D,w)=>D.startLine-w.startLine||w.endLine-D.endLine);if(r&&(l=Math.round(W.now()-g)),i=y.length,y.length===0)return new Map;let h=new Map,x=r?W.now():0,b=this.compilerCheckerForSourceFile(p),C=p.compilerNode;r&&(u=Math.round(W.now()-x));let S=new Map,R=D=>{if(this.tsMorph.ts.isCallExpression(D)||this.tsMorph.ts.isNewExpression(D)){r&&(o+=1);let w=this.semanticCalleeForCallNode(b,C,y,D,S,n,m);w&&(r&&(s+=1),xL(h,w.callerId,w.target))}this.tsMorph.ts.forEachChild(D,R)},v=r?W.now():0;R(C),r&&(d=Math.round(W.now()-v));for(let[D,w]of h)h.set(D,DL(w));return a=h.size,h},()=>({relativePath:t,definitions:i,callNodes:o,resolvedCallees:s,outputRows:a,requestedDefinitions:n?.size??i,sourceFileLookupMs:c,definitionsLoadMs:l,checkerLookupMs:u,traversalMs:d,...m?wL(m):{}}))}semanticCalleeForCallNode(t,n,r,i,o,s,a){let c=a?W.now():0,l=RL(r,fu(n,i));if(a&&(a.callerLookupMs+=W.now()-c),!l)return null;if(s&&!s.has(l.symbolId))return a&&(a.skippedUnrequestedCallers+=1),null;let u=i.expression,d=this.compilerSymbolForExpression(t,u,a),m=null;if(d)if(a&&(a.targetSymbolHits+=1),o.has(d))a&&(a.compilerSymbolCacheHits+=1),m=o.get(d)??null;else{a&&(a.compilerSymbolCacheMisses+=1);let f=a?W.now():0;m=this.definitionFromCompilerSymbol(d,a),a&&(a.targetLookupMs+=W.now()-f),o.set(d,m)}else a&&(a.targetMisses+=1);return m?{callerId:l.symbolId,target:{symbol:m.symbol,file:m.file,line:m.line}}:null}compilerSymbolForExpression(t,n,r){let i=r?W.now():0,o=t.getSymbolAtLocation(n);if(r&&(r.expressionSymbolMs+=W.now()-i),o)return o;r&&(r.typeFallbacks+=1);let s=r?W.now():0,a=t.getTypeAtLocation(n).getSymbol();return r&&(r.typeSymbolMs+=W.now()-s),a}compilerCheckerForSourceFile(t){let n=t.getProject(),r=this.compilerCheckerCache.get(n);return r||(r=n.getTypeChecker().compilerObject,this.compilerCheckerCache.set(n,r)),r}};function gu(e){let t=[],n=e.getDefaultImport();n&&t.push({identifier:n,importedName:"default",localName:n.getText(),kind:"default",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});let r=e.getNamespaceImport();r&&t.push({identifier:r,importedName:"*",localName:r.getText(),kind:"namespace",isTypeOnly:e.getImportClause()?.isTypeOnly()??!1});for(let i of e.getNamedImports()){let o=i.getNameNode(),a=i.getAliasNode()??(o.getKindName()==="Identifier"?o:null);t.push({identifier:a,importedName:o.getText(),localName:a?.getText()??o.getText(),kind:"named",isTypeOnly:i.isTypeOnly()||(e.getImportClause()?.isTypeOnly()??!1)})}return t.length===0&&t.push({identifier:null,importedName:"*",localName:null,kind:"side-effect",isTypeOnly:!1}),t}function bL(e,t,n){return{importer:e,sourcePath:t,importedName:n.importedName,localName:n.localName,kind:n.kind,isTypeOnly:!0,isUsed:!0,isTypeUsed:!0,isValueUsed:!1,references:[]}}function SL(){return{declarations:0,entries:0,bindingSymbols:0,missingBindingSymbols:0,scannedIdentifiers:0,symbolLookups:0,matchedReferences:0,fallbackEntries:0}}function CL(e){for(let t=e;t;t=t.getParent())if(t.getKindName()==="ImportDeclaration")return!0;return!1}function xL(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function vL(e){let t=new Set;for(let n of e.getImportDeclarations())for(let r of gu(n))r.localName&&t.add(r.localName);return t}function RL(e,t){let n=null;for(let r of e)t<r.startLine||t>r.endLine||(!n||r.startLine>=n.startLine)&&(n=r);return n}function fu(e,t){return e.getLineAndCharacterOfPosition(t.getStart(e)).line}function Jh(e,t,n){return t===e.relativePath&&n>=e.startLine&&n<=e.endLine}function Yh(e){return e.symbol.includes("#")?ue(e.symbol)==="type"&&e.relativePath.endsWith(".d.ts"):!1}function IL(){return{callerLookupMs:0,expressionSymbolMs:0,typeSymbolMs:0,targetLookupMs:0,declarationsMs:0,declarationLocationMs:0,indexedLookupMs:0,compilerSymbolCacheHits:0,compilerSymbolCacheMisses:0,targetSymbolHits:0,targetMisses:0,typeFallbacks:0,declarationChecks:0,skippedUnrequestedCallers:0}}function wL(e){return{...e,callerLookupMs:Math.round(e.callerLookupMs),expressionSymbolMs:Math.round(e.expressionSymbolMs),typeSymbolMs:Math.round(e.typeSymbolMs),targetLookupMs:Math.round(e.targetLookupMs),declarationsMs:Math.round(e.declarationsMs),declarationLocationMs:Math.round(e.declarationLocationMs),indexedLookupMs:Math.round(e.indexedLookupMs)}}function Xh(){return{cacheHits:0,cacheMisses:0,nodeHits:0,nodeMisses:0,scanFiles:0,identifiers:0,symbolLookups:0,aliasResolutions:0,targetHits:0,targetMisses:0,requestedHits:0,scanMs:0,packageRefsMs:0,semanticRefsMs:0,packageReferenceCount:0,referenceCount:0,preciseSearchFailures:0,hierarchyDefinitions:0,hierarchyFamilies:0,hierarchyReferences:0,hierarchyMs:0}}function Qh(e){return{...e,scanMs:Math.round(e.scanMs),packageRefsMs:Math.round(e.packageRefsMs),semanticRefsMs:Math.round(e.semanticRefsMs),hierarchyMs:Math.round(e.hierarchyMs)}}function EL(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function DL(e){let t=new Set,n=[];for(let r of e){let i=`${r.symbol}|${r.file}|${r.line}`;t.has(i)||(t.add(i),n.push(r))}return n}function Zh(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}import{createHash as kL}from"crypto";import{readFileSync as PL}from"fs";import{dirname as TL,join as Qs}from"path";var Zs=2,FL="typescript-semantic";function ty(e){let t=Qs(e,FL);return{rootDir:t,requestDir:Qs(t,"requests"),responseDir:Qs(t,"responses")}}function ea(e){try{let t=JSON.parse(PL(Qs(TL(e),"meta.json"),"utf8"));return t.version!==2&&t.version!==3||typeof t.status!="string"||typeof t.updatedAt!="string"||t.fingerprint===void 0?null:kL("sha256").update(JSON.stringify({version:t.version,status:t.status,updatedAt:t.updatedAt,fingerprint:t.fingerprint,indexedLanguages:t.indexedLanguages})).digest("hex")}catch{return null}}var ML=12e4,OL=5;function ay(e,t,n={}){let r=new hu(e,n),i=null,o=null,s=process.env.SCIP_QUERY_SKIP_WATCH_SERVICE==="1",a=()=>(i??=ey(e,t),i),c=(d,m,f)=>{if(s)return f();try{return m(r.request(d))}catch{return s=!0,f()}},l=(d,m)=>c({kind:"references",definitions:[...d],...m?.exact?{exact:!0}:{}},f=>sy(f),()=>a().referencesForDefinitions?.(d,m)??new Map(d.map(f=>[f.symbolId,a().referencesFor(f)]))),u=d=>c({kind:"callees",definitions:[...d]},m=>sy(m),()=>a().calleesForDefinitions?.(d)??new Map(d.map(m=>[m.symbolId,a().calleesFor(m)])));return{language:"typescript",availability:()=>(o??=c({kind:"availability"},$L,()=>a().availability()),o),importUsage:d=>c({kind:"import-usage",file:d},m=>m,()=>a().importUsage(d)),referencesFor:d=>l([d]).get(d.symbolId)??[],referencesForDefinitions:l,referenceFragmentsForFiles:d=>c({kind:"reference-fragments",files:[...d]},m=>BL(m),()=>a().referenceFragmentsForFiles?.(d)??new Map),calleesFor:d=>u([d]).get(d.symbolId)??[],calleesForDefinitions:u,signatureFor:d=>c({kind:"signature",definition:d},HL,()=>a().signatureFor(d)),dispose:()=>i?.dispose?.()}}var hu=class{constructor(t,n={}){this.db=t;this.runtime=n.runtime??WL,this.timeoutMs=n.timeoutMs??UL(),this.cacheDir=AL(t.config.dbPath),this.projectRoot=It(t.config.projectRoot)}db;runtime;timeoutMs;cacheDir;projectRoot;request(t){let n=Th(this.cacheDir),r=ty(this.cacheDir),i=nu(n.statePath);if(!oy(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript semantic service is not running.");let o=ea(this.db.config.dbPath);if(!o)throw new Error("Published TypeScript generation identity is unavailable.");let s=this.runtime.randomId(),a=iy(r.requestDir,`${s}.json`),c=iy(r.responseDir,`${s}.json`),l=this.runtime.now()+this.timeoutMs;ny(r.requestDir,{recursive:!0}),ny(r.responseDir,{recursive:!0}),Fe(a,{protocolVersion:Zs,id:s,generation:o,deadlineAtMs:l,profileEnvironment:bf(),request:t});try{for(;this.runtime.now()<=l;){if(LL(c))return jL(NL(c,"utf8"),s,o);let u=nu(n.statePath);if(!oy(u,this.projectRoot,this.runtime))throw new Error("TypeScript semantic service stopped while processing a request.");this.runtime.sleep(OL)}throw new Error(`TypeScript semantic service timed out after ${this.timeoutMs}ms.`)}finally{ry(a,{force:!0}),ry(c,{force:!0})}}};function oy(e,t,n){let r=e!==null&&n.now()-Date.parse(e.heartbeatAt)<=Ph,i=e?.typescriptSemantic?.busyUntil!==void 0&&n.now()<=Date.parse(e.typescriptSemantic.busyUntil);return e!==null&&e.projectRoot===t&&e.typescriptSemantic?.protocolVersion===Zs&&n.isProcessAlive(e.pid)&&(r||i)}function jL(e,t,n){let r=JSON.parse(e);if(r.protocolVersion!==Zs||r.id!==t||r.ok===!0&&r.generation!==n)throw new Error("TypeScript semantic service wrote an incompatible response.");if(r.ok===!0)return r.response;throw new Error(typeof r.error=="string"?r.error:"TypeScript semantic service request failed.")}function sy(e){if(!Array.isArray(e))throw new Error("TypeScript semantic service wrote an invalid numeric map.");return new Map(e)}function BL(e){if(!Array.isArray(e))throw new Error("TypeScript semantic service wrote an invalid string map.");return new Map(e)}function $L(e){if(!e||typeof e!="object"||typeof e.available!="boolean")throw new Error("TypeScript semantic service wrote invalid availability.");return e}function HL(e){if(e!==null&&typeof e!="string")throw new Error("TypeScript semantic service wrote an invalid signature.");return e}function UL(){let e=Number(process.env.SCIP_TYPESCRIPT_SEMANTIC_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:ML}var WL={now:Date.now,randomId:_L,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:dt};var cy=new Vs;mn({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>cy.clear(e)});function Zn(e,t){let n=Ee(t)??"typescript";return cy.getOrCreate(e,n,()=>n==="rust"?wh(e.config.projectRoot,{sourceImportUsageResolver:{importUsageFacts:r=>vg(e,r)},calleeSymbolResolver:xg(e),sourceZeroCalleeOracle:r=>GL(e,r),scipOccurrenceCalleeOracle:r=>kh(e,r)}):ay(e,t))}function Ee(e){return e?M(e)==="rust"?"rust":Tt(e)?"typescript":null:"typescript"}function GL(e,t){let n=z(e,t.relativePath);if(!n||n.language!=="rust")return!1;let r=n.callables.find(i=>i.startLine===t.startLine&&i.endLine===t.endLine&&i.name===t.leaf)??n.callables.find(i=>i.startLine===t.startLine&&i.endLine===t.endLine);return r?!n.callSites.some(i=>i.line>=r.startLine&&i.line<=r.endLine):!1}import{existsSync as zL,readFileSync as VL}from"fs";import{resolve as qL}from"path";var KL=/^[A-Za-z_][A-Za-z0-9_]*$/,ly=/\bDefault::default\b/g,JL=/^\.\.\s*Default::default\b/;function uy(e,t){let n=new Map,r=new Map;for(let i of t){let o=yu(e,i,r);o!==null&&n.set(i.symbolId,o)}return n}function yu(e,t,n=new Map){let r=XL(t.symbol);if(!r)return null;let i=Lr(e,[t.symbolId]);if(i.length===0)return null;let o=new RegExp(`(^|[^A-Za-z0-9_])${$(r)}::default\\b`,"g"),s=new RegExp(`(^|[^A-Za-z0-9_])${$(r)}\\s*$`),a=YL(e,t.symbolId),c=[];for(let l of i){let u=QL(e,l.relative_path,n);if(u===null)return null;let d=u.split(/\r?\n/),m=0,f=[],p=0;for(let g=l.chunk_start;g<=l.chunk_end&&g<d.length;g+=1){let h=d[g]??"",x=new Set;o.lastIndex=0;let b;for(;b=o.exec(h);)c.push({file:l.relative_path,line:g,column:b.index+b[1].length+r.length+2}),p+=1;for(let C=0;C<h.length;C+=1){let S=JL.exec(h.slice(C));if(S){if(a&&f.includes(m)){let v=C+S[0].lastIndexOf("default");c.push({file:l.relative_path,line:g,column:v}),x.add(v),p+=1}C+=S[0].length-1;continue}let R=h[C];if(R==="{"){let v=s.test(h.slice(0,C));m+=1,v&&f.push(m);continue}if(R==="}")for(m=Math.max(0,m-1);f.length>0&&f[f.length-1]>m;)f.pop()}for(ly.lastIndex=0;b=ly.exec(h);){let C=b.index+9;if(!x.has(C))return null}}if(p===0)return null}return Os(c)}function YL(e,t){return e.get("SELECT 1 AS present FROM mentions WHERE symbol_id = ? AND role = 1 LIMIT 1",t)?.present===1}function XL(e){let t=/impl#\[([^\]]+)\]\[Default\]default\(\)\./.exec(e)?.[1]??null;return!t||!KL.test(t)?null:t}function QL(e,t,n){if(n.has(t))return n.get(t)??null;let r=e.get("SELECT text FROM documents WHERE relative_path = ?",t),i=typeof r?.text=="string"?r.text:ZL(e,t);return n.set(t,i),i}function ZL(e,t){let n=qL(e.config.projectRoot,t);if(!zL(n))return null;try{return VL(n,"utf8")}catch{return null}}import{readFileSync as rN}from"fs";import{dirname as iN,join as oN}from"path";function na(e){let t=ta(e.projectFiles),n=new Set(t),r=new Map(e.snapshot.files.map(d=>[d.path,d])),i=e.snapshot.files.filter(d=>{let m=jl(d.path,["typescript"]);return m==="config"||m==="ambient"}).map(d=>d.path),o=ta([...t,...i]),s=o.find(d=>!r.has(d)),a=new Set(e.snapshot.files.map(d=>d.path)).size!==e.snapshot.files.length,c=!s&&o.some(d=>dy(r.get(d))),l=he(JSON.stringify({pnpmWorkspaces:e.snapshot.pnpmWorkspaces,typescriptProjectMode:e.snapshot.typescriptProjectMode,typescriptProjects:ta(e.snapshot.typescriptProjects),membership:t})),u=new Map;return{identityFor(d,m){if(!n.has(d))return Br("target-outside-project");if(a)return Br("duplicate-input-path");if(s)return Br("missing-input-fingerprint");if(c)return Br("unreadable-input");let f=[],p,g;if(e.graph===null)f.push("dependency-graph-unavailable"),g="whole-project",p=o;else{let x=tN(d,e.graph,u);if(x.find(C=>!r.has(C)))return Br("missing-input-fingerprint");if(p=ta([...x,...i]),p.some(C=>dy(r.get(C))))return Br("unreadable-input");g="dependency-closure"}let y=p.map(x=>nN(r.get(x)));return{version:1,key:he(JSON.stringify({version:1,engineIdentity:e.engineIdentity,schemaVersion:m,projectIdentity:l,inputs:y})),mode:g,inputFiles:p,reasons:f}}}}function eN(e,t){let n=new Set,r=[e];for(let i=0;i<r.length;i+=1){let o=r[i];if(!(o===void 0||n.has(o))){n.add(o);for(let s of[...t.get(o)??[]].sort())n.has(s)||r.push(s)}}return[...n].sort()}function tN(e,t,n){let r=n.get(e);if(r)return r;let i=eN(e,t);return n.set(e,i),i}function nN(e){return{path:e.path,size:e.size,hash:e.hash}}function dy(e){return e.size<0||e.hash==="unreadable"}function Br(e){return{version:1,key:null,mode:"unkeyed",inputFiles:[],reasons:[e]}}function ta(e){return[...new Set(e)].sort()}var sN=X("typescript-semantic-identity-context",{clearGroups:["whole-project"]});function wn(e,t,n){let r=sN.get(e,()=>aN(e));if(!r)return null;let i=`${n}\0${t}`,o=r.identities.get(i);if(o)return o;let s=r.builder.identityFor(t,n);return r.identities.set(i,s),s}function Ui(e){return N(e,{includeIgnored:!1}).filter(Tt).sort()}function aN(e){try{let t=JSON.parse(rN(oN(iN(e.config.dbPath),"meta.json"),"utf8")),n=zg(t.fingerprint);return n?{builder:na({projectFiles:Ui(e),snapshot:n,graph:ie(e),engineIdentity:Js()}),identities:new Map}:null}catch{return null}}var bu="typescript-reference-fragment-v2",ia=oe({kind:"typescript-reference-fragments",invalidation:J("typescript-reference-fragments"),serialize:e=>JSON.stringify(e),deserialize:lN});function w7(e,t,n,r=e){let i=Ui(e),o=na({projectFiles:i,snapshot:t,graph:ie(e),engineIdentity:Js()}),s=[...n].map(([a,c])=>({relativePath:a,contentHash:o.identityFor(a,bu).key,value:[...c]}));if(s.some(a=>a.contentHash===null))throw new Error("TypeScript reference fragment identity is unavailable for an affected document.");return ia.writeBatch(r,s.map(a=>({...a,contentHash:a.contentHash}))),s.length}function Su(e,t,n,r){let i=t.filter(s=>Tt(s.relativePath));if(i.length===0)return ra("no TypeScript definitions");let o=ra("shadow did not run");return E("typescript.reference-fragments.shadow",()=>{try{let s=r(i[0].relativePath);if(!s.availability().available||!s.referenceFragmentsForFiles)return o=ra("TypeScript reference fragment provider is unavailable"),o;let a=Ui(e),c=new Set(a),l=s.referenceFragmentsForFiles(a),u=Xs(i,l),d=Vh(i,cN(n,c),u);if(!d.passed)return o={state:"failing",files:a.length,keyedFiles:0,writtenFiles:0,...d},o;let m=[];for(let f of a){let p=wn(e,f,bu);p?.key&&m.push({relativePath:f,contentHash:p.key,value:l.get(f)??[]})}return ia.writeBatch(e,m),o={state:"passing",files:a.length,keyedFiles:m.length,writtenFiles:m.length,...d},o}catch(s){return o=ra(s instanceof Error?s.message:String(s)),o}},()=>({...o}))}function cN(e,t){return new Map([...e].map(([n,r])=>[n,r.filter(i=>t.has(i.file))]))}function Cu(e,t,n){if(t.length===0)return{references:new Map,files:0,cacheHits:0,cacheMisses:0,computedFiles:0};let r="fallback",i=0,o=0,s=0,a=0;return E("typescript.reference-fragments.materialize",()=>{try{let c=Ui(e);i=c.length;let l=new Map,u=new Map,d=[];for(let p of c){let g=wn(e,p,bu);if(!g?.key)return null;l.set(p,g.key);let y=ia.read(e,p,g.key);y===null?(s+=1,d.push(p)):(o+=1,u.set(p,y))}if(s===0)return r="hit",{references:Xs(t,u),files:i,cacheHits:o,cacheMisses:s,computedFiles:a};let m=n(t[0].relativePath);if(!m.availability().available||!m.referenceFragmentsForFiles)return null;let f=m.referenceFragmentsForFiles(d);if(d.some(p=>!f.has(p)))return null;a=f.size,ia.writeBatch(e,d.map(p=>({relativePath:p,contentHash:l.get(p),value:f.get(p)??[]})));for(let[p,g]of f)u.set(p,g);return r="computed",{references:Xs(t,u),files:i,cacheHits:o,cacheMisses:s,computedFiles:a}}catch{return null}},()=>({state:r,files:i,cacheHits:o,cacheMisses:s,computedFiles:a}))}function ra(e){return{state:"unavailable",files:0,keyedFiles:0,writtenFiles:0,expectedCount:0,actualCount:0,missing:[],extra:[],reason:e}}function lN(e){try{let t=JSON.parse(e);return!Array.isArray(t)||!t.every(uN)?null:t}catch{return null}}function uN(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"}var dN="typescript-import-usage-v1",mN="typescript-signatures-v1",xu=X("semantic-prefetched-callees",{clearGroups:["whole-project","source-file","semantic-provider"]}),my=$n({kind:"semantic-import-usage",invalidation:J("semantic-import-usage"),serialize:e=>JSON.stringify(e),deserialize:Ry}),fy=$n({kind:"semantic-signatures",invalidation:J("semantic-signatures"),serialize:e=>JSON.stringify(e),deserialize:xN}),py=oe({kind:"typescript-import-usage",invalidation:J("typescript-import-usage"),serialize:e=>JSON.stringify(e),deserialize:Ry}),gy=oe({kind:"typescript-signatures",invalidation:J("typescript-signatures"),serialize:e=>JSON.stringify(e),deserialize:vN});function We(e){let t=new Map,n=new Set;return{capability:(r,i)=>Iy(e,r,i),importUsage:r=>pN(e,r),references:r=>by(e,r),materializeReferences:(r,i)=>Cy(e,r,t,n,i),callerMap:r=>gN(e,r,t,n),calleeMap:r=>bN(e,r),signature:r=>SN(e,r)}}function fN(e,t){if(t.size===0)return;let n=xu.get(e,()=>new Map);for(let[r,i]of t)n.set(r,[...i])}function yy(e,t){if(!xu.has(e))return{hits:[],misses:[...t]};let n=xu.get(e,()=>new Map),r=[],i=[];for(let o of t)n.has(o.symbolId)?r.push({definition:o,callees:n.get(o.symbolId)??[]}):i.push(o);return{hits:r,misses:i}}function Gi(e,t){return We(e).importUsage(t)}function pN(e,t){if(Ee(t)==="typescript"){let o="fallback",s=0,a=0,c=0,l=0;return E("typescript.import-usage.materialize",()=>{let u=wn(e,t,dN);if(u?.key){s=1;let m=py.read(e,t,u.key);if(m)return o="hit",a=1,m;c=1;let f=Ft(e,t);if(!f)return o="unavailable",[];let p=f.importUsage(t);return py.write(e,t,u.key,p),o="computed",p}l=1;let d=Ft(e,t);return d?(o="direct-fallback",d.importUsage(t)):(o="unavailable",[])},()=>({state:o,eligible:s,cacheHits:a,cacheMisses:c,fallbacks:l}))}let n=vy(e,"semantic-import-usage",t);if(n){let o=my.read(e,t,n);if(o)return o}let r=Ft(e,t);if(!r)return[];let i=r.importUsage(t);return n&&my.write(e,t,n,i),i}function oa(e,t){return We(e).references(t)}function by(e,t){let n=yu(e,t);if(n)return n;let r=Mg(e,t);if(r)return r;let i=Ft(e,t.relativePath);return i?i.referencesFor(t):[]}function En(e,t){return We(e).callerMap(t)}function Sy(e,t){let n=new Map,r=new Map;for(let i of t){if(Ee(i.relativePath)==="typescript"){let o=Ft(e,i.relativePath);if(!o)continue;let s=r.get(o)??[];s.push(i),r.set(o,s);continue}vu(e,n,i,by(e,i))}for(let[i,o]of r){let s=Cu(e,o,c=>Zn(e,c)),a=s?.references??(i.referencesForDefinitions?i.referencesForDefinitions(o,{exact:!0}):new Map(o.map(c=>[c.symbolId,i.referencesFor(c)])));!s&&U()&&Su(e,o,a,c=>Zn(e,c));for(let c of o)vu(e,n,c,a.get(c.symbolId)??[])}return n}function gN(e,t,n=new Map,r=new Set){let i=new Map,o=Cy(e,t,n,r),s=0;return E("semantic.callers.from-references",()=>{for(let a of t)s+=vu(e,i,a,n.get(a.symbolId)??[])},()=>({definitions:t.length,materialized:o.definitions,inMemoryHits:o.inMemoryHits,incompleteInMemoryHits:o.incompleteInMemoryHits,resultRows:i.size,callerFiles:s})),i}function Cy(e,t,n,r,i={}){let o=Te(e),s=[],a=[],c=[],l=0,u=0,d=0,m=0,f=0,p=0,g=0,y=0,h=0,x=0,b=0,C=0,S=[],R=new Map,v=t.filter(w=>Ee(w.relativePath)==="typescript"&&!n.has(w.symbolId)&&!r.has(w.symbolId)),D=Cu(e,v,w=>Zn(e,w));if(D){h=v.length,x=D.cacheHits,b=D.cacheMisses,C=D.computedFiles;for(let w of v)n.set(w.symbolId,D.references.get(w.symbolId)??[])}if(E("semantic.references.cache-scan",()=>{for(let[w,k]of Ls(t)){let L=[];for(let _ of k)n.has(_.symbolId)?u+=1:r.has(_.symbolId)?y+=1:L.push(_);if(L.length===0){g+=1;continue}let re=hN(e,o,w);if(!re){for(let _ of L)Ee(_.relativePath)||(l+=1),c.push(_);continue}p+=1;let Q=tf(e,w,re);for(let _ of L){let ae=Q.get(_.symbol)??null;if(ae!==null){let ee=yN(ae);if(ee){d+=1,n.set(_.symbolId,ee);continue}m+=1}a.push({definition:_,cacheFingerprint:re})}}},()=>({definitions:t.length,skippedUnsupportedLanguage:l,cacheHits:d,parseFailures:m,misses:a.length,unkeyed:c.length,inMemoryHits:u,incompleteInMemoryHits:y,fullyInMemoryFiles:g,cacheReadFiles:p})),a.length>0||c.length>0){S=[...c,...a.map(w=>w.definition)],R=E("semantic.references.compute-misses",()=>{let w=Ru(e,S,i);return f=w.size,w},()=>({definitions:S.length,misses:a.length,unkeyed:c.length,rows:f}));for(let w of S)R.has(w.symbolId)?(n.set(w.symbolId,R.get(w.symbolId)??[]),r.delete(w.symbolId)):r.add(w.symbolId);for(let{definition:w,cacheFingerprint:k}of a)R.has(w.symbolId)&&Iy(e,"semantic-references",w.relativePath).available&&s.push({relativePath:w.relativePath,symbol:w.symbol,projectFingerprint:k,payload:JSON.stringify(R.get(w.symbolId)??[])})}return s.length>0&&E("semantic.references.cache-write",()=>rf(e,s),()=>({entries:s.length})),R.size>0&&Su(e,S,R,w=>Zn(e,w)),{definitions:t.length,inMemoryHits:u,incompleteInMemoryHits:y,cacheHits:d,misses:a.length,unkeyed:c.length,skippedUnsupportedLanguage:l,parseFailures:m,computed:f,incomplete:r.size,cacheWrites:s.length,fragmentDefinitions:h,fragmentCacheHits:x,fragmentCacheMisses:b,fragmentComputedFiles:C}}function hN(e,t,n){if(!t)return null;let r=Ee(n);return r==="typescript"?t:r==="rust"?he(JSON.stringify({kind:"semantic-references",language:r,engine:Yn(e.config.projectRoot),projectFingerprint:t})):null}function Ru(e,t,n={}){let r=U(),i=new Map,o=0,s=0,a=0,c=0,l=0,u=0,d=0,m=0,f=0;return E("semantic.references.provider-loop",()=>{let p=uy(e,t),g=Ag(e,t),y=new Map,h=n.prefetchCallees?new Map:null,x=[];for(let C of t){let S,R=()=>(S??=Ft(e,C.relativePath),S);if(h){let k=R();if(k?.referencesAndCalleesForDefinitions){let L=h.get(k);L?L.push(C):h.set(k,[C]),f+=1}}let v=p.get(C.symbolId);if(v){a+=1,c+=v.length,Wi(i,C.symbolId,v,r,k=>{d+=1,m+=k});continue}let D=g.get(C.symbolId);if(D){l+=1,u+=D.length,Wi(i,C.symbolId,D,r,k=>{d+=1,m+=k});continue}let w=R();if(!w){r&&(s+=1);continue}if(r&&(o+=1),w.referencesForDefinitions){let k=y.get(w);k?k.push(C):y.set(w,[C])}else x.push({provider:w,definition:C})}let b=new Set;if(h)for(let[C,S]of h){if(!C.referencesAndCalleesForDefinitions)continue;let R=y.get(C)??[],v=C.referencesAndCalleesForDefinitions(R,S);b.add(C),fN(e,v.callees);for(let D of R){if(!v.references.has(D.symbolId))continue;let w=v.references.get(D.symbolId)??[];Wi(i,D.symbolId,w,r,k=>{d+=1,m+=k})}}for(let[C,S]of y){if(b.has(C))continue;let R=C.referencesForDefinitions(S);for(let v of S){if(!R.has(v.symbolId))continue;let D=R.get(v.symbolId)??[];Wi(i,v.symbolId,D,r,w=>{d+=1,m+=w})}}for(let{provider:C,definition:S}of x){let R=C.referencesFor(S);Wi(i,S.symbolId,R,r,v=>{d+=1,m+=v})}return i},()=>({definitions:t.length,providerHits:o,providerMisses:s,rustDefaultFastPathRows:a,rustDefaultFastPathReferences:c,rustScipOccurrenceFastPathRows:l,rustScipOccurrenceFastPathReferences:u,prefetchCalleeDefinitions:f,definitionsWithReferences:d,referenceCount:m,rows:i.size}))}function Wi(e,t,n,r,i){e.set(t,n),r&&n.length>0&&i(n.length)}function vu(e,t,n,r){let i=0;for(let o of r){if(o.file===n.relativePath||e.isIgnored(o.file))continue;let s=t.get(n.symbolId);s||(s=new Set,t.set(n.symbolId,s));let a=s.size;s.add(o.file),s.size!==a&&(i+=1)}return i}function yN(e){try{return JSON.parse(e)}catch{return null}}function sa(e,t){return We(e).calleeMap(t)}function bN(e,t){let n=U(),r=new Map,i=0,o=0,s=0,a=0;return E("semantic.callees.provider-loop",()=>{let c=new Map,l=[];for(let u of t){let d=Ft(e,u.relativePath);if(!d){n&&(o+=1);continue}n&&(i+=1);let m=u;if(d.calleesForDefinitions){let f=c.get(d);f?f.push(m):c.set(d,[m])}else l.push({provider:d,definition:m})}for(let[u,d]of c){let m=u.calleesForDefinitions(d);for(let f of d){let p=m.get(f.symbolId)??[];hy(r,f.symbolId,p,n,g=>{s+=1,a+=g})}}for(let{provider:u,definition:d}of l){let m=u.calleesFor(d);hy(r,d.symbolId,m,n,f=>{s+=1,a+=f})}return r},()=>({definitions:t.length,providerHits:i,providerMisses:o,definitionsWithCallees:s,calleeCount:a,rows:r.size}))}function hy(e,t,n,r,i){n.length>0&&(e.set(t,n),r&&i(n.length))}function xy(e,t){return We(e).signature(t)}function SN(e,t){if(Ee(t.relativePath)==="typescript"){let s="fallback",a=0,c=0,l=0,u=0;return E("typescript.signature.materialize",()=>{let d=wn(e,t.relativePath,mN);if(d?.key){a=1;let f=gy.read(e,t.relativePath,d.key)??{};if(Object.prototype.hasOwnProperty.call(f,t.symbol))return s="hit",c=1,f[t.symbol]??null;l=1;let p=Ft(e,t.relativePath);if(!p)return s="unavailable",null;let g=p.signatureFor(t);return gy.write(e,t.relativePath,d.key,{...f,[t.symbol]:g}),s="computed",g}u=1;let m=Ft(e,t.relativePath);return m?(s="direct-fallback",m.signatureFor(t)):(s="unavailable",null)},()=>({state:s,eligible:a,cacheHits:c,cacheMisses:l,fallbacks:u}))}let n=vy(e,"semantic-signatures",t.relativePath),r=CN(t);if(n){let s=fy.read(e,r,n);if(s)return s.signature}let i=Ft(e,t.relativePath);if(!i)return null;let o=i.signatureFor(t);return n&&fy.write(e,r,n,{signature:o}),o}function vy(e,t,n){let r=Te(e);if(!r)return null;let i=Ee(n);return i!=="rust"?null:he(JSON.stringify({kind:t,language:i,engine:Yn(e.config.projectRoot),projectFingerprint:r}))}function CN(e){return`${e.relativePath}\0${e.symbol}`}function Ry(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function xN(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t.signature;return n!==null&&typeof n!="string"?null:{signature:n}}catch{return null}}function vN(e){try{let t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))return null;for(let n of Object.values(t))if(n!==null&&typeof n!="string")return null;return t}catch{return null}}function Iy(e,t,n){let r=Ee(n);if(!r)return{slot:t,language:"typescript",available:!1,reason:"semantic evidence is only available for TypeScript or Rust files"};try{return{slot:t,language:r,...Zn(e,n).availability()}}catch(i){return{slot:t,language:r,available:!1,reason:i instanceof Error?i.message:String(i)}}}function Ft(e,t){if(!Ee(t))return null;let n=Zn(e,t);return n.availability().available?n:null}var H={references:oa,referenceMap:Ru,callerMap:(e,t)=>We(e).callerMap(t),calleeMap:Iu};function Iu(e,t){let n=U(),r=new Map,i=yy(e,t),o=[],s=[],a=0,c=0,l=0,u=0,d=0,m=0,f=0;for(let{definition:b,callees:C}of i.hits)d+=1,C.length>0&&(m+=1,f+=C.length,r.set(b.symbolId,C));let p=RN(e,i.hits);if(p.entries.length>0&&E("semantic.callees.prefetch-cache-write",()=>Tc(e,p.entries),()=>({entries:p.entries.length,sourceMissing:p.sourceMissing,skippedUnsupportedLanguage:p.skippedUnsupportedLanguage})),E("semantic.callees.cache-scan",()=>{for(let[b,C]of Ls(i.misses)){if(!Ee(b)){n&&(a+=C.length);continue}let S=P(e,b);if(!S){n&&(c+=C.length),s.push(...C);continue}let R=ce(e,b,S),v=wy(e,b);if(!v){s.push(...C);continue}let D=ef(e,b,R,v);for(let w of C){let k=D.get(w.symbol)??null;if(k!==null){let L=wN(k);if(L){n&&(l+=1),L.length>0&&r.set(w.symbolId,L);continue}n&&(u+=1)}o.push({def:w,contentHash:R,depsDigest:v})}}},()=>({definitions:t.length,skippedUnsupportedLanguage:a,sourceMissing:c,cacheHits:l,parseFailures:u,misses:o.length,unkeyed:s.length,inMemoryHits:d,inMemoryRows:m,inMemoryCalleeCount:f,resultRows:r.size})),o.length===0&&s.length===0)return r;let g=[...s,...o.map(b=>b.def)],y=0,h=E("semantic.callees.compute-misses",()=>{let b=sa(e,g);return y=b.size,b},()=>({definitions:g.length,misses:o.length,unkeyed:s.length,rows:y}));for(let[b,C]of h)r.set(b,C);let x=o.filter(b=>We(e).capability("semantic-callees",b.def.relativePath).available).map(b=>({relativePath:b.def.relativePath,symbol:b.def.symbol,contentHash:b.contentHash,depsDigest:b.depsDigest,payload:JSON.stringify(h.get(b.def.symbolId)??[])}));return x.length>0?E("semantic.callees.cache-write",()=>Tc(e,x),()=>({entries:x.length})):E("semantic.callees.cache-write-skip",()=>{},()=>({reason:"provider-unavailable",misses:o.length})),r}function RN(e,t){let n=[],r=new Map,i=0,o=0;for(let{definition:s,callees:a}of t){if(!Ee(s.relativePath)){o+=1;continue}if(!r.has(s.relativePath)){let l=P(e,s.relativePath),u=l?wy(e,s.relativePath):null;r.set(s.relativePath,l&&u?{contentHash:ce(e,s.relativePath,l),depsDigest:u}:null)}let c=r.get(s.relativePath);if(!c){i+=1;continue}n.push({relativePath:s.relativePath,symbol:s.symbol,contentHash:c.contentHash,depsDigest:c.depsDigest,payload:JSON.stringify(a)})}return{entries:n,sourceMissing:i,skippedUnsupportedLanguage:o}}var IN="typescript-callees-v1";function wy(e,t){let n=Ee(t);if(n==="typescript")return wn(e,t,IN)?.key??null;let r=DN(e,t);return n==="rust"?he(JSON.stringify({kind:"semantic-callees",language:n,engine:Yn(e.config.projectRoot),positionMapping:"nearby-leaf-v1",depsDigest:r})):r}function wN(e){try{return JSON.parse(e)}catch{return null}}var EN=j("semantic-deps-digest",{clearGroups:["whole-project","source-file"]});function DN(e,t){return EN.get(e,t,()=>{let r=[...ie(e).get(t)??[]].sort().map(i=>`${i}:${ce(e,i,P(e,i))}`);return he(r.join("|"))})}function nee(e,t,n={}){let r=B(e,t);if(!r)return[];let o=!te(r.symbol)&&!e.isIgnored(r.relativePath)?[{relativePath:r.relativePath,line:r.startLine}]:[],s=kt(e,r,{semantic:n.semantic,semanticEvidence:H}).map(u=>({relativePath:u.file,line:u.line})),a=kN(e,r),c=new Set,l=[];for(let u of[...o,...s,...a]){let d=`${u.relativePath}:${u.line}`;c.has(d)||(c.add(d),l.push(u))}return l}function kN(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=PN(t.symbol);if(n.length===0)return[];let r=[];for(let i of N(e,{extensions:[".rb"],includeIgnored:!1})){let o=P(e,i);if(!o)continue;let s=o.split(`
|
|
287
|
+
`);for(let a=0;a<s.length;a++){let c=s[a]??"";n.some(l=>new RegExp(`@${l}\\b|\\b${l}:`).test(c))&&r.push({relativePath:i,line:a})}}return r}function PN(e){let n=(e.split(":").pop()??e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[^A-Za-z0-9_]+/g,"_").toLowerCase().replace(/^_+|_+$/g,""),r=n.split("_").filter(Boolean),i=new Set;return n&&i.add(n),r.length>=1&&i.add(r[r.length-1]),r.length>=2&&i.add(r.slice(-2).join("_")),[...i]}import{existsSync as TN}from"fs";import{basename as Ey,isAbsolute as FN,join as _N}from"path";function Oe(e,t){let n=Dy(e,t,{allowMultiple:!1})[0]?.relativePath;return n||LN(e,t)}function $r(e,t){return Dy(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function LN(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),r=FN(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,i=_N(e.config.projectRoot,r);return TN(i)?r:null}function Dy(e,t,n){let r=ky(t);if(!r)return[];let i=N(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:NN(a,r)})).filter(a=>a.score>0).sort((a,c)=>c.score-a.score||a.relativePath.localeCompare(c.relativePath));if(i.length===0){let a=B(e,t);return!a||e.isIgnored(a.relativePath)?[]:[{relativePath:a.relativePath,score:700}]}let o=i.filter(a=>a.score>=1100);if(o.length>0)return n.allowMultiple?o:[o[0]];let s=i.filter(a=>a.score>=800);return s.length>0?n.allowMultiple?s:[s[0]]:n.allowMultiple?i:[i[0]]}function NN(e,t){let n=ky(e),r=Ey(n),i=Ey(t),o=0;return n===t&&(o+=1200),n.endsWith(`/${t}`)&&(o+=1100),r===i&&(o+=900),n.startsWith(`${t}/`)&&(o+=850),n.includes(t)&&(o+=250),o}function ky(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}function mee(e,t){let n=$r(e,t),r=Cs(e,n,{sort:!0});if(r.length===0)return[];let i=r.map(a=>({symbol:a.symbol,shortName:a.shortName,startLine:a.startLine,endLine:a.endLine,signature:a.signature,children:[]})),o=new Map;for(let a of i)o.set(a.symbol,a);let s=[];for(let a=0;a<r.length;a++){let c=r[a],l=i[a];if(c.enclosingSymbol&&o.has(c.enclosingSymbol)){o.get(c.enclosingSymbol).children.push(l);continue}let u=null,d=1/0;for(let m of i)if(m!==l&&m.startLine<=l.startLine&&m.endLine>=l.endLine){if(m.startLine===l.startLine&&m.endLine===l.endLine&&!wf(m.symbol,l.symbol))continue;let p=m.endLine-m.startLine;p<d&&(d=p,u=m)}u?u.children.push(l):s.push(l)}return s}import{readFileSync as Py}from"fs";import{extname as AN,join as Ty}from"path";function See(e,t,n={}){let{context:r=0}=n,i=MN(t);if(i)return jN(e,i.filePath,i.startLine,i.endLine,r);let o=B(e,t);return o?ON(e,o,r):null}function MN(e){let t=e.match(/^(.+\.\w+):(\d+)-(\d+)$/);return t?{filePath:t[1],startLine:parseInt(t[2],10),endLine:parseInt(t[3],10)}:null}function ON(e,t,n){let r=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),i=Ty(e.config.projectRoot,t.relativePath),o;try{o=Py(i,"utf-8")}catch{return null}let s=o.split(`
|
|
288
288
|
`),a=Math.max(0,t.startLine-n),c=Math.min(s.length-1,t.endLine+n),l=s.slice(a,c+1).join(`
|
|
289
|
-
`);return{symbol:t.symbol,shortName:I(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:r?.language??Fy(t.relativePath),source:l}}function
|
|
289
|
+
`);return{symbol:t.symbol,shortName:I(t.symbol),relativePath:t.relativePath,startLine:a,endLine:c,language:r?.language??Fy(t.relativePath),source:l}}function jN(e,t,n,r,i){let o=Oe(e,t);if(!o)return null;let s=e.get("SELECT relative_path, language FROM documents WHERE relative_path = ?",o);if(!s)return null;let a=Ty(e.config.projectRoot,s.relative_path),c;try{c=Py(a,"utf-8")}catch{return null}let l=c.split(`
|
|
290
290
|
`),u=Math.max(0,n-1-i),d=Math.min(l.length-1,r-1+i),m=l.slice(u,d+1).join(`
|
|
291
|
-
`);return{symbol:`${s.relative_path}:${n}-${r}`,shortName:`${s.relative_path}:${n}-${r}`,relativePath:s.relative_path,startLine:u,endLine:d,language:s.language??Fy(s.relative_path),source:m}}function Fy(e){switch(
|
|
291
|
+
`);return{symbol:`${s.relative_path}:${n}-${r}`,shortName:`${s.relative_path}:${n}-${r}`,relativePath:s.relative_path,startLine:u,endLine:d,language:s.language??Fy(s.relative_path),source:m}}function Fy(e){switch(AN(e).toLowerCase()){case".ts":case".tsx":case".mts":case".cts":return"typescript";case".js":case".jsx":case".mjs":case".cjs":return"javascript";case".py":case".pyi":return"python";case".rs":return"rust";case".go":return"go";case".java":return"java";case".kt":case".kts":return"kotlin";case".scala":return"scala";case".rb":return"ruby";case".php":return"php";case".cs":return"csharp";case".vb":return"vb";case".dart":return"dart";case".c":case".h":return"c";case".cc":case".cpp":case".cxx":case".hpp":case".hh":case".hxx":return"cpp";case".vue":return"vue";default:return null}}import{createRequire as BN}from"module";var $N=BN(import.meta.url),er=HN().version;function HN(){for(let e of["../package.json","../../package.json"])try{return $N(e)}catch{}return{version:"0.0.0"}}import{existsSync as ad,statSync as t0}from"fs";import{join as n0}from"path";import{createHash as UN}from"crypto";import{mkdirSync as WN,realpathSync as GN}from"fs";import{homedir as zN}from"os";import{join as tr,resolve as _y}from"path";function VN(e,t){let n=process.env.SCIP_QUERY_CACHE_DIR;if(n)return wu(n);if(t?.dbPath)return wu(_y(e,t.dbPath));let r=aa(e);return wu(r)}function Ly(){let e=process.env.XDG_CACHE_HOME;return tr(e||tr(zN(),".cache"),"scip-query")}function aa(e){let t=_y(e);try{t=GN(t)}catch{}let n=UN("sha256").update(t).digest("hex").slice(0,12);return tr(Ly(),"projects",n)}function zi(e){if(!/^[a-f0-9]{24}$/.test(e))throw new Error(`invalid repository cache identity: ${e}`);return tr(Ly(),"repositories",e)}function Eu(e){return process.env.SCIP_QUERY_SHARED_CACHE!=="0"&&!process.env.SCIP_QUERY_CACHE_DIR&&!process.env.SCIP_QUERY_INDEX_DB&&!e?.dbPath}function Ny(e,t){let n=VN(e,t);return{cacheDir:n,dbPath:tr(n,"index.db"),indexPath:tr(n,"index.scip"),metaPath:tr(n,"meta.json")}}function wu(e){return WN(e,{recursive:!0}),e}import qN from"better-sqlite3";var KN=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".nbb",".cpcache",".shadow-cljs",".scipquery-cache","__pycache__",".venv","venv"],ca=class{db;config;pathFilter;statementCache=new Map;constructor(t,n){this.config=t,this.pathFilter=n??null,this.db=new qN(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000"),this.db.pragma("query_only = ON"),this.db.pragma("temp_store = MEMORY"),this.db.pragma("cache_size = -64000"),this.db.pragma("mmap_size = 268435456")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
|
|
292
292
|
EXISTS (
|
|
293
293
|
SELECT 1
|
|
294
294
|
FROM defn_enclosing_ranges local_der
|
|
@@ -305,9 +305,9 @@ ${m}`,l+=1+m.length,u+=xi(m),r+=m.length+1}let d=ZP(c);d&&n.push({...d,start:a,e
|
|
|
305
305
|
AND local_m.role = 1
|
|
306
306
|
${this.pathExclusionsFor("local_d").trimStart()}
|
|
307
307
|
)
|
|
308
|
-
)`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>
|
|
309
|
-
`)}symbolNoiseFor(t){return`AND ${t}.symbol NOT LIKE '%().(%' AND ${t}.symbol NOT LIKE '%typeLiteral%'`}all(t,...n){return this.statement(t).all(...n)}get(t,...n){return this.statement(t).get(...n)}close(){this.statementCache.clear(),this.db.close()}statement(t){let n=this.statementCache.get(t);return n||(n=this.db.prepare(t),this.statementCache.set(t,n)),n}};import
|
|
310
|
-
`)}function
|
|
308
|
+
)`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>KN.flatMap(r=>[`AND ${n}.relative_path NOT LIKE '${r}/%'`,`AND ${n}.relative_path NOT LIKE '%/${r}/%'`])).join(`
|
|
309
|
+
`)}symbolNoiseFor(t){return`AND ${t}.symbol NOT LIKE '%().(%' AND ${t}.symbol NOT LIKE '%typeLiteral%'`}all(t,...n){return this.statement(t).all(...n)}get(t,...n){return this.statement(t).get(...n)}close(){this.statementCache.clear(),this.db.close()}statement(t){let n=this.statementCache.get(t);return n||(n=this.db.prepare(t),this.statementCache.set(t,n)),n}};import JN from"ignore";import{readFileSync as YN,existsSync as Ay,readdirSync as XN}from"fs";import{dirname as Du,isAbsolute as My,join as la,relative as QN,resolve as ZN}from"path";function Oy(e){let t=JN();return eA(e,t)||t.add(rA),{isIgnored:r=>ku(t,e,r),filter:r=>r.filter(i=>!ku(t,e,i))}}function eA(e,t){let n=new Set,r=(s,a)=>{if(!(n.has(s)||!Ay(s)))try{let c=YN(s,"utf-8");t.add(a?tA(c,a):c),n.add(s)}catch{}},i=Du(e),o=0;for(;i!==Du(i)&&o<5&&(r(la(i,".gitignore"),""),!Ay(la(i,".git")));)i=Du(i),o++;return jy(e,"",t,r),n.size>0}function jy(e,t,n,r){let i=t?la(e,t):e;r(la(i,".gitignore"),t);let o;try{o=XN(i,{withFileTypes:!0})}catch{return}for(let s of o){if(!s.isDirectory()||s.name===".git")continue;let a=t?`${t}/${s.name}`:s.name;ku(n,e,`${a}/`)||jy(e,a,n,r)}}function tA(e,t){let n=t.replaceAll("\\","/").replace(/\/+$/,"");return e.split(/\r?\n/).map(r=>nA(r,n)).join(`
|
|
310
|
+
`)}function nA(e,t){let n=e.trimStart();if(!n||n.startsWith("#"))return e;let r=e.slice(0,e.length-n.length),i=n.startsWith("!"),o=i?n.slice(1):n;if(!o||o.startsWith("#"))return e;let s=o.startsWith("/"),a=s?o.slice(1):o,u=(a.endsWith("/")?a.slice(0,-1):a).includes("/")||s?`${t}/${a}`:`${t}/**/${a}`;return`${r}${i?"!":""}${u}`}var rA=`
|
|
311
311
|
# Dependencies
|
|
312
312
|
node_modules/
|
|
313
313
|
vendor/
|
|
@@ -364,21 +364,21 @@ Thumbs.db
|
|
|
364
364
|
|
|
365
365
|
# Type definitions (often noise in queries)
|
|
366
366
|
*.d.ts
|
|
367
|
-
`;function Pu(e,t,n){let r=rA(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function rA(e,t){if(!t||t===".")return null;if(!My(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=My(t)?t:QN(e,t),r=XN(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{readFileSync as iA,writeFileSync as ku,existsSync as en}from"fs";import{isAbsolute as By,join as nr,relative as $y,resolve as Hy}from"path";var Hr=".scipquery.json",Gy=250,zy=0,Vy=10*6e4,oA={enabled:!1,debounceMs:Gy,cooldownMs:zy,gitPollMs:2e3,idleTimeoutMs:Vy,autoRefresh:!0,ignore:[]},qy=["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php","clojure"],sA=new Set(["languages","indexerConcurrency","watch","hooks","indexer","dbPath","entryRoots","semantic","suppressions","declaredCouplings","locality","architecture","coverageContracts","docs"]),aA=new Set(["enabled","debounceMs","cooldownMs","gitPollMs","idleTimeoutMs","autoRefresh","ignore"]),cA=new Set(["router"]),lA=new Set(["pathPrefixes","files","symbolPatterns","qualifiedVars"]),uA=new Set(["typescript","rust"]),dA=new Set(["tsconfigs"]),mA=new Set(["rustAnalyzerPath"]),Uy=new Set(qy),fA=new Set(["pnpmWorkspaces","projectMode","projects","configPath"]),pA=new Set(["architecturalBoundarySegments"]),gA=new Set(["boundaries","allowedDependencies","requireCompletePolicy","requireAcyclic","requireResolvedBoundaries","requireMinimalPolicy","maxBoundaryFanOut","maxBoundaryFiles","testPaths"]),hA=new Set(["name","paths","subUnits","maxFiles"]),yA=new Set(["snapshotPaths"]),bA=new Set(["name","files","reason"]),SA=new Set(["id","check","file","reason","expiresAt","createdAt"]),CA=new Set(["name","file","keys","mustEqual","allowExtra"]),xA=new Set(["type","identifier","marker"]),RA=new Set(["type","path","pattern"]),vA=new Set(["object-literal-keys","string-array","markdown-list"]),IA=new Set(["top-level-dirs","file-glob","registered-commands","builtin-skills"]);function Ky(e){let t=nr(e,Hr);if(!en(t))return{};try{let n=iA(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);throw n instanceof SyntaxError?new Error(`invalid ${Hr} at ${t}: ${r}`,{cause:n}):new Error(`unable to read ${Hr} at ${t}: ${r}`,{cause:n})}}function _ee(e,t={}){let n=[];kA(e,n);let r=new Set(qy);for(let[c,l]of(e.languages??[]).entries())r.has(l)||n.push({level:"error",path:`languages[${c}]`,message:`Unsupported language: ${l}`});e.indexerConcurrency!==void 0&&(!Number.isInteger(e.indexerConcurrency)||e.indexerConcurrency<=0)&&n.push({level:"error",path:"indexerConcurrency",message:"Must be a positive integer."}),e.watch?.debounceMs!==void 0&&e.watch.debounceMs<=0&&n.push({level:"error",path:"watch.debounceMs",message:"Must be greater than 0."}),e.watch?.cooldownMs!==void 0&&(!Number.isInteger(e.watch.cooldownMs)||e.watch.cooldownMs<0)&&n.push({level:"error",path:"watch.cooldownMs",message:"Must be a non-negative integer; 0 disables cooldown spacing."}),e.watch?.gitPollMs!==void 0&&e.watch.gitPollMs<=0&&n.push({level:"error",path:"watch.gitPollMs",message:"Must be greater than 0."}),e.watch?.idleTimeoutMs!==void 0&&(!Number.isInteger(e.watch.idleTimeoutMs)||e.watch.idleTimeoutMs<0)&&n.push({level:"error",path:"watch.idleTimeoutMs",message:"Must be a non-negative integer; 0 disables idle shutdown."}),e.watch?.autoRefresh!==void 0&&typeof e.watch.autoRefresh!="boolean"&&n.push({level:"error",path:"watch.autoRefresh",message:"Must be a boolean."}),e.hooks?.router!==void 0&&e.hooks.router!=="off"&&e.hooks.router!=="single"&&n.push({level:"error",path:"hooks.router",message:'Must be "off" or "single".'});let i=e.indexer?.typescript;if(i?.projectMode!==void 0&&i.projectMode!=="single"&&i.projectMode!=="workspace"&&n.push({level:"error",path:"indexer.typescript.projectMode",message:'Must be "single" or "workspace".'}),i?.projects!==void 0)if(!Array.isArray(i.projects))n.push({level:"error",path:"indexer.typescript.projects",message:"Must be an array."});else for(let[c,l]of i.projects.entries()){let u=`indexer.typescript.projects[${c}]`;if(typeof l!="string"||l.trim()==="")n.push({level:"error",path:u,message:"Project path must be a non-empty string."});else if(t.projectRoot){let d=Hy(t.projectRoot,l),m=$y(t.projectRoot,d);m.startsWith("..")||By(m)?n.push({level:"error",path:u,message:"Project path must stay inside the project root."}):en(d)||n.push({level:"warning",path:u,message:`TypeScript project path does not exist: ${l}`})}}i?.projectMode==="workspace"&&i.pnpmWorkspaces===!0&&n.push({level:"warning",path:"indexer.typescript.pnpmWorkspaces",message:'Ignored when projectMode is "workspace"; explicit TypeScript projects are indexed directly.'});let o=e.semantic?.rust;o?.rustAnalyzerPath!==void 0&&(typeof o.rustAnalyzerPath!="string"||o.rustAnalyzerPath.trim()==="")&&n.push({level:"error",path:"semantic.rust.rustAnalyzerPath",message:"Rust analyzer path must be a non-empty string."});let s=e.indexer?.clojure;if(s?.configPath!==void 0){let c="indexer.clojure.configPath";if(typeof s.configPath!="string"||s.configPath.trim()==="")n.push({level:"error",path:c,message:"Config path must be a non-empty string."});else if(t.projectRoot){let l=Hy(t.projectRoot,s.configPath),u=$y(t.projectRoot,l);u.startsWith("..")||By(u)?n.push({level:"error",path:c,message:"Config path must stay inside the project root."}):en(l)||n.push({level:"warning",path:c,message:`Clojure indexer config path does not exist: ${s.configPath}`})}}if(e.locality!==void 0)if(!et(e.locality))n.push({level:"error",path:"locality",message:"Must be an object."});else{let c=e.locality.architecturalBoundarySegments;if(c!==void 0)if(!Array.isArray(c))n.push({level:"error",path:"locality.architecturalBoundarySegments",message:"Must be an array."});else for(let[l,u]of c.entries()){let d=`locality.architecturalBoundarySegments[${l}]`;typeof u!="string"||u.trim()===""?n.push({level:"error",path:d,message:"Boundary segment must be a non-empty string."}):(u.includes("/")||u.includes("\\"))&&n.push({level:"error",path:d,message:"Boundary segment must be a single folder name, not a path."})}}if(wA(e,n),e.declaredCouplings!==void 0&&!Array.isArray(e.declaredCouplings))n.push({level:"error",path:"declaredCouplings",message:"Must be an array."});else for(let[c,l]of(e.declaredCouplings??[]).entries()){let u=`declaredCouplings[${c}]`;if((!l.name||l.name.trim()==="")&&n.push({level:"error",path:`${u}.name`,message:"Declared coupling name is required."}),!Array.isArray(l.files)||l.files.length<2)n.push({level:"error",path:`${u}.files`,message:"Declared coupling needs at least two files."});else for(let[d,m]of l.files.entries())!m||m.trim()===""?n.push({level:"error",path:`${u}.files[${d}]`,message:"Declared coupling file path is required."}):t.projectRoot&&!en(nr(t.projectRoot,m))&&n.push({level:"warning",path:`${u}.files[${d}]`,message:`Declared coupling file does not exist: ${m}`});l.reason!==void 0&&l.reason.trim()===""&&n.push({level:"error",path:`${u}.reason`,message:"Declared coupling reason cannot be blank."})}let a=t.now??new Date;e.suppressions!==void 0&&!Array.isArray(e.suppressions)&&n.push({level:"error",path:"suppressions",message:"Must be an array."});for(let[c,l]of(Array.isArray(e.suppressions)?e.suppressions:[]).entries()){let u=`suppressions[${c}]`;if(!et(l)){n.push({level:"error",path:u,message:"Suppression must be an object."});continue}if((!l.reason||l.reason.trim()==="")&&n.push({level:"error",path:`${u}.reason`,message:"Suppression reason is required."}),l.id!==void 0&&l.id.trim()===""&&n.push({level:"error",path:`${u}.id`,message:"Suppression id cannot be blank."}),l.check!==void 0&&l.check.trim()===""&&n.push({level:"error",path:`${u}.check`,message:"Suppression check cannot be blank."}),!l.id&&(!l.check||!l.file)?n.push({level:"error",path:u,message:"Suppression must include id or both check and file."}):!l.id&&l.check&&l.file&&n.push({level:"warning",path:u,message:"Check+file suppressions waive every matching finding in that file; prefer a stable id when available."}),l.file!==void 0&&(l.file.trim()===""?n.push({level:"error",path:`${u}.file`,message:"Suppression file path cannot be blank."}):t.projectRoot&&!en(nr(t.projectRoot,l.file))&&n.push({level:"warning",path:`${u}.file`,message:`Suppression file does not exist: ${l.file}`})),l.expiresAt){let d=Date.parse(l.expiresAt);Number.isNaN(d)?n.push({level:"error",path:`${u}.expiresAt`,message:"Must be an ISO date string."}):d<=a.getTime()&&n.push({level:"warning",path:`${u}.expiresAt`,message:"Suppression has expired."})}}return PA(e,n,t),DA(e,n),n}function wA(e,t){if(e.architecture===void 0)return;if(!et(e.architecture)){t.push({level:"error",path:"architecture",message:"Must be an object."});return}let n=e.architecture.boundaries;if(!Array.isArray(n)||n.length===0){t.push({level:"error",path:"architecture.boundaries",message:"Must be a non-empty array."});return}let r=new Set,i=new Set;for(let[a,c]of n.entries()){let l=`architecture.boundaries[${a}]`;if(!et(c)){t.push({level:"error",path:l,message:"Architecture boundary must be an object."});continue}let u=c.name;typeof u!="string"||u.trim()===""?t.push({level:"error",path:`${l}.name`,message:"Boundary name is required."}):r.has(u)?t.push({level:"error",path:`${l}.name`,message:`Duplicate boundary name: ${u}`}):r.add(u);let d=c.subUnits;d!==void 0&&d!=="directory"&&d!=="file"&&t.push({level:"error",path:`${l}.subUnits`,message:"Must be 'directory' or 'file'."});let m=c.maxFiles;m!==void 0&&(typeof m!="number"||!Number.isInteger(m)||m<0)&&t.push({level:"error",path:`${l}.maxFiles`,message:"Must be a non-negative integer."});let f=c.paths;if(!Array.isArray(f)||f.length===0){t.push({level:"error",path:`${l}.paths`,message:"Boundary paths must be a non-empty array."});continue}for(let[p,g]of f.entries()){let y=`${l}.paths[${p}]`;if(typeof g!="string"||g.trim()===""){t.push({level:"error",path:y,message:"Boundary path must be a non-empty string."});continue}EA(g)||t.push({level:"error",path:y,message:"Boundary path must be project-relative and may use only one trailing /* or /** glob."}),i.has(g)?t.push({level:"error",path:y,message:`Duplicate boundary path: ${g}`}):i.add(g)}}let o=e.architecture.allowedDependencies;if(o!==void 0&&!et(o))t.push({level:"error",path:"architecture.allowedDependencies",message:"Must be an object keyed by boundary name."});else if(et(o))for(let[a,c]of Object.entries(o)){let l=`architecture.allowedDependencies.${a}`;if(r.has(a)||t.push({level:"error",path:l,message:`Unknown source boundary: ${a}`}),!Array.isArray(c)){t.push({level:"error",path:l,message:"Dependency row must be an array."});continue}let u=new Set;for(let[d,m]of c.entries()){let f=`${l}[${d}]`;typeof m!="string"||m.trim()===""?t.push({level:"error",path:f,message:"Target boundary name is required."}):r.has(m)?u.has(m)?t.push({level:"error",path:f,message:`Duplicate target boundary: ${m}`}):u.add(m):t.push({level:"error",path:f,message:`Unknown target boundary: ${m}`})}}e.architecture.requireAcyclic!==void 0&&typeof e.architecture.requireAcyclic!="boolean"&&t.push({level:"error",path:"architecture.requireAcyclic",message:"Must be a boolean."});for(let a of["requireResolvedBoundaries","requireMinimalPolicy"])e.architecture[a]!==void 0&&typeof e.architecture[a]!="boolean"&&t.push({level:"error",path:`architecture.${a}`,message:"Must be a boolean."});for(let a of["maxBoundaryFanOut","maxBoundaryFiles"]){let c=e.architecture[a];c!==void 0&&(typeof c!="number"||!Number.isInteger(c)||c<0)&&t.push({level:"error",path:`architecture.${a}`,message:"Must be a non-negative integer."})}let s=e.architecture.testPaths;if(s!==void 0&&(!Array.isArray(s)||s.some(a=>typeof a!="string"))&&t.push({level:"error",path:"architecture.testPaths",message:"Must be an array of strings."}),e.architecture.requireCompletePolicy!==void 0&&typeof e.architecture.requireCompletePolicy!="boolean")t.push({level:"error",path:"architecture.requireCompletePolicy",message:"Must be a boolean."});else if(e.architecture.requireCompletePolicy===!0){let a=et(o)?o:{};for(let c of[...r].sort())Object.hasOwn(a,c)||t.push({level:"error",path:`architecture.allowedDependencies.${c}`,message:"A dependency row is required by architecture.requireCompletePolicy."})}}function EA(e){let t=e.replace(/\\/g,"/");if(t.startsWith("/")||t==="."||t===".."||t.split("/").includes(".."))return!1;let n=t.replace(/\/\*\*?$/,"");return n.length>0&&!/[*?[\]]/.test(n)}function DA(e,t){let n=e.docs?.snapshotPaths;if(n!==void 0){if(!Array.isArray(n)){t.push({level:"error",path:"docs.snapshotPaths",message:"Must be an array."});return}for(let[r,i]of n.entries())(typeof i!="string"||i.trim()==="")&&t.push({level:"error",path:`docs.snapshotPaths[${r}]`,message:"Snapshot path glob must be a non-empty string."})}}function PA(e,t,n){if(e.coverageContracts!==void 0){if(!Array.isArray(e.coverageContracts)){t.push({level:"error",path:"coverageContracts",message:"Must be an array."});return}for(let[r,i]of e.coverageContracts.entries()){let o=`coverageContracts[${r}]`;if(!et(i)){t.push({level:"error",path:o,message:"Coverage contract must be an object."});continue}(typeof i.name!="string"||i.name.trim()==="")&&t.push({level:"error",path:`${o}.name`,message:"Coverage contract name is required."}),typeof i.file!="string"||i.file.trim()===""?t.push({level:"error",path:`${o}.file`,message:"Coverage contract file is required."}):n.projectRoot&&!en(nr(n.projectRoot,i.file))&&t.push({level:"warning",path:`${o}.file`,message:`Coverage contract file does not exist: ${i.file}`}),Wy(t,i.keys,`${o}.keys`,vA,"Unknown coverage-contract key extractor type."),Wy(t,i.mustEqual,`${o}.mustEqual`,IA,"Unknown coverage-contract ground-truth source type."),i.allowExtra!==void 0&&typeof i.allowExtra!="boolean"&&t.push({level:"error",path:`${o}.allowExtra`,message:"Must be a boolean."})}}}function Wy(e,t,n,r,i){if(!et(t)){e.push({level:"error",path:n,message:'Must be an object with a "type" field.'});return}if(typeof t.type!="string"||!r.has(t.type)){e.push({level:"error",path:`${n}.type`,message:`${i} Got: ${String(t.type)}`});return}let o={"object-literal-keys":["identifier"],"string-array":["identifier"],"markdown-list":["marker"],"top-level-dirs":["path"],"file-glob":["pattern"],"registered-commands":[],"builtin-skills":[]};for(let s of o[t.type]??[])(typeof t[s]!="string"||t[s].length===0)&&e.push({level:"error",path:`${n}.${s}`,message:`"${t.type}" requires a non-empty string "${s}".`})}function Lee(e){return{...oA,...e.watch}}function Nee(e,t){let n=nr(e,Hr);return en(n)||ku(n,JSON.stringify({languages:t,watch:{enabled:!0,debounceMs:Gy,cooldownMs:zy,gitPollMs:2e3,idleTimeoutMs:Vy,autoRefresh:!0}},null,2)+`
|
|
368
|
-
`),n}function
|
|
369
|
-
`),{configPath:r,config:i,changed:o}}function
|
|
370
|
-
`),{configPath:r,config:i,changed:o}}function
|
|
371
|
-
`)){if(!r||r.split("/").some(o=>Zy.has(o)))continue;let i=Xy(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function
|
|
372
|
-
`)}finally{ub(a)}return{release:()=>hb(e,s)}}catch(a){if(a.code!=="EEXIST")return null;let c=gb(e);if(c&&(c.pid===void 0||!dt(c.pid))){
|
|
373
|
-
`)}finally{ub(i)}try{let o=gb(e);return!o||o.raw!==t.raw||o.pid!==void 0&&dt(o.pid)?!1:(fb(e),!0)}catch{return!1}finally{hb(n,r)}}function hb(e,t){try{let n=JSON.parse(mb(e,"utf8"));n.pid===process.pid&&n.token===t&&fb(e)}catch{}}function eM(e){let t=new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));Atomics.wait(t,0,0,e)}import{lstatSync as gM,readdirSync as hM}from"fs";import{join as yM,relative as bM,resolve as Uu,sep as SM}from"path";import{createHash as tM}from"crypto";import{existsSync as Au,mkdirSync as nM,readFileSync as pa,readdirSync as ste,renameSync as rM,rmSync as ate,writeFileSync as iM}from"fs";import{join as Wr}from"path";import{create as bb,fromBinary as Sb,toBinary as oM}from"@bufbuild/protobuf";import{deserializeSCIP as ga,DocumentSchema as Mu,IndexSchema as Cb,serializeSCIP as xb}from"@c4312/scip";var ha=1,Ji="typescript-scip-fragments";function mte(e){if(e.length===0)throw new Error("affected TypeScript mini index requires documents");let t=new Set,n=[];for(let o of e){let s=rr(o.relativePath);if(t.has(s))throw new Error(`duplicate TypeScript fragment replacement: ${s}`);if(t.add(s),o.bytes===null)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${s}`);let a=Sb(Mu,o.bytes);if(a.relativePath!==s)throw new Error(`TypeScript fragment path mismatch: expected ${s}, got ${a.relativePath}`);n.push(a)}let r=xb(bb(Cb,{documents:n,externalSymbols:[]})),i=ga(r);if(i.documents.length!==n.length||i.externalSymbols.length!==0)throw new Error("affected TypeScript SCIP index failed structural verification");return r}function ya(e){let t=Wr(e,Ji);return{rootDir:t,blobDir:Wr(t,"blobs"),generationDir:Wr(t,"generations")}}function sM(e){let t=ga(e.indexBytes);Tb(t.metadata,Fb(e)),kb(t.externalSymbols);let n=new Set,r=[];for(let o of t.documents){let s=rr(o.relativePath);if(n.has(s))throw new Error(`duplicate TypeScript SCIP document path: ${s}`);n.add(s);let a=oM(Mu,o),c=e.documentIdentities.get(s)??(e.allowUntrackedDocuments?ir(JSON.stringify({version:1,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,untrackedDocument:s,contentHash:ir(a)})):null);if(!c)throw new Error(`missing TypeScript document identity: ${s}`);r.push(wb(e.cacheDir,{relativePath:s,bytes:a,occurrences:o.occurrences.length,symbols:o.symbols.length,referenceFragments:[]},c))}let i=Eb(e,r);return Db(e.cacheDir,i),i}function fte(e){let t=ya(e.cacheDir);if(!Au(Ou(t,e.generationIdentity)))return sM(e);let n=Rb({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity});if(!e.allowUntrackedDocuments&&n.manifest.documents.length!==e.documentIdentities.size)throw new Error("TypeScript fragment generation document identities changed");for(let r of n.manifest.documents){let i=e.documentIdentities.get(r.relativePath);if(!(i===void 0&&e.allowUntrackedDocuments)&&i!==r.documentIdentity)throw new Error(`TypeScript fragment generation document identity changed: ${r.relativePath}`)}return n.manifest}function pte(e){let t=Rb({cacheDir:e.cacheDir,generationIdentity:e.previousGenerationIdentity,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity}).manifest,n=new Map(t.documents.map(o=>[o.relativePath,o])),r=new Set;for(let o of e.fragments){let s=rr(o.relativePath);if(r.has(s))throw new Error(`duplicate TypeScript fragment replacement: ${s}`);if(r.add(s),!n.has(s))throw new Error(`TypeScript fragment replacement has no prior document: ${s}`);let a=e.documentIdentities.get(s);if(!a)throw new Error(`missing TypeScript document identity: ${s}`);o.bytes===null?n.delete(s):n.set(s,wb(e.cacheDir,o,a))}if(r.size===0)throw new Error("TypeScript fragment generation requires at least one replacement");let i=Eb(e,[...n.values()]);return Db(e.cacheDir,i),i}function Rb(e){let t=ya(e.cacheDir),n=Ou(t,e.generationIdentity),r;try{r=Pb(pa(n,"utf8"))}catch(o){throw new Error(`TypeScript fragment generation is unavailable: ${o instanceof Error?o.message:String(o)}`,{cause:o})}if(r.generationIdentity!==e.generationIdentity)throw new Error("TypeScript fragment generation identity does not match its manifest path");if(e.producerIdentity&&r.producerIdentity!==e.producerIdentity)throw new Error("TypeScript fragment producer identity changed");if(e.projectIdentity&&r.projectIdentity!==e.projectIdentity)throw new Error("TypeScript fragment project identity changed");let i=new Map;for(let o of r.documents){let s=Wr(t.blobDir,`${o.blobHash}.scipdoc`),a=pa(s);if(a.byteLength!==o.byteLength||ir(a)!==o.blobHash)throw new Error(`TypeScript fragment blob is corrupt: ${o.relativePath}`);i.set(o.relativePath,a)}return{manifest:r,fragments:i}}function vb(e){let t=Ib(e);return Nu(t.baseIndex,t.completeDocuments,"assembled")}function gte(e){let t=Ib(e);return aM(t.deletedAffectedPaths),{completeIndexBytes:Nu(t.baseIndex,t.completeDocuments,"assembled"),affectedIndexBytes:Nu(t.baseIndex,t.affectedDocuments,"affected")}}function Ib(e){let t=ga(e.baseIndexBytes);Tb(t.metadata,Fb(e)),kb(t.externalSymbols);let n=new Map;for(let a of e.fragments){let c=rr(a.relativePath);if(n.has(c))throw new Error(`duplicate TypeScript fragment replacement: ${c}`);n.set(c,a)}if(n.size===0)throw new Error("TypeScript index assembly requires at least one replacement");let r=new Set,i=[],o=[],s=[];for(let a of t.documents){let c=rr(a.relativePath);if(r.has(c))throw new Error(`duplicate TypeScript SCIP document path: ${c}`);r.add(c);let l=n.get(c);if(!l){i.push(a);continue}if(n.delete(c),l.bytes===null){s.push(c);continue}let u=Sb(Mu,l.bytes);if(u.relativePath!==c)throw new Error(`TypeScript fragment path mismatch: expected ${c}, got ${u.relativePath}`);i.push(u),o.push(u)}if(n.size>0)throw new Error(`TypeScript fragment replacement has no prior document: ${[...n.keys()].sort()[0]}`);return{baseIndex:t,completeDocuments:i,affectedDocuments:o,deletedAffectedPaths:s}}function Nu(e,t,n){let r=xb(bb(Cb,{metadata:e.metadata,documents:t,externalSymbols:[]})),i=ga(r);if(i.documents.length!==t.length||i.externalSymbols.length!==0)throw new Error(`${n} TypeScript SCIP index failed structural verification`);return r}function aM(e){if(e.length>0)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${e[0]}`)}function wb(e,t,n){if(t.bytes===null)throw new Error(`cannot persist an empty TypeScript fragment: ${t.relativePath}`);let r=rr(t.relativePath),i=Buffer.from(t.bytes),o=ir(i),s=ya(e);nM(s.blobDir,{recursive:!0});let a=Wr(s.blobDir,`${o}.scipdoc`);if(Au(a)){let c=pa(a);if(c.byteLength!==i.byteLength||ir(c)!==o)throw new Error(`existing TypeScript fragment blob is corrupt: ${r}`)}else{let c=`${a}.${process.pid}.${Date.now()}.tmp`;iM(c,i),rM(c,a)}return{relativePath:r,blobHash:o,byteLength:i.byteLength,documentIdentity:n}}function Eb(e,t){if(!e.producerIdentity||!e.projectIdentity||!e.generationIdentity)throw new Error("TypeScript fragment generation identities must be non-empty");let n=[...t].sort((r,i)=>r.relativePath.localeCompare(i.relativePath));if(new Set(n.map(r=>r.relativePath)).size!==n.length)throw new Error("TypeScript fragment generation contains duplicate document paths");return{version:ha,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,createdAt:(e.now??(()=>new Date))().toISOString(),documents:n}}function Db(e,t){let n=ya(e),r=Ou(n,t.generationIdentity);if(Au(r)){let i=Pb(pa(r,"utf8"));if(yb(i)!==yb(t))throw new Error(`TypeScript fragment generation is immutable: ${t.generationIdentity}`);return}Fe(r,t,{spacing:2,trailingNewline:!0})}function yb(e){return ir(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,documents:e.documents}))}function Pb(e){let t=JSON.parse(e);if(t.version!==ha||typeof t.producerIdentity!="string"||typeof t.projectIdentity!="string"||typeof t.generationIdentity!="string"||typeof t.createdAt!="string"||!Number.isFinite(Date.parse(t.createdAt))||!Array.isArray(t.documents))throw new Error("invalid TypeScript fragment generation manifest");let n=new Set;for(let r of t.documents){if(!r||typeof r.relativePath!="string"||typeof r.blobHash!="string"||!/^[a-f0-9]{64}$/.test(r.blobHash)||typeof r.byteLength!="number"||!Number.isInteger(r.byteLength)||r.byteLength<0||typeof r.documentIdentity!="string"||!r.documentIdentity)throw new Error("invalid TypeScript fragment record");if(rr(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript fragment record");n.add(r.relativePath)}return t}function Ou(e,t){return Wr(e.generationDir,cM(t))}function cM(e){if(!e)throw new Error("TypeScript fragment generation identity must be non-empty");return`${ir(e)}.json`}function kb(e){if(e.length>0)throw new Error("scip-typescript emitted external symbols; incremental document assembly is unsupported")}function Tb(e,t){if(!e||typeof e!="object")throw new Error("TypeScript SCIP shard has no producer metadata");let n=e,r=n.toolInfo??n.tool_info;if(!r||typeof r!="object")throw new Error("TypeScript SCIP shard has no producer tool identity");let i=r;if(i.name!=="scip-typescript"||i.version!==t)throw new Error("TypeScript SCIP shard producer identity changed")}function Fb(e){let t=e.packageVersion??e.runtime?.packageVersion;if(!t)throw new Error("scip-typescript package version is unavailable");return t}function rr(e){if(!e||e.startsWith("/")||e.startsWith("\\")||e.includes("\\"))throw new Error(`invalid TypeScript SCIP document path: ${e}`);let t=e.split("/");if(t.includes("")||t.includes(".")||t.includes(".."))throw new Error(`invalid TypeScript SCIP document path: ${e}`);return e}function ir(e){return tM("sha256").update(e).digest("hex")}import{createHash as lM}from"crypto";import{existsSync as Yi,mkdirSync as uM,readFileSync as Qi,readdirSync as ju,renameSync as dM,rmSync as _b,writeFileSync as mM}from"fs";import{join as St}from"path";var ba=1,Rte=64*1024*1024,Zi="typescript-scip-overlays";function vte(e){let t=Nb(e.cacheDir,e.previousGenerationIdentity);if(!t&&!e.baseShardCurrent)throw new Error("deferred TypeScript SCIP base has no matching overlay generation");if(t&&(t.producerIdentity!==e.producerIdentity||t.projectIdentity!==e.projectIdentity))throw new Error("TypeScript overlay producer or project identity changed");let n=new Map((t?.overlays??[]).map(o=>[o.relativePath,o])),r=new Set;for(let o of e.fragments){let s=Hu(o.relativePath);if(r.has(s))throw new Error(`duplicate TypeScript overlay: ${s}`);r.add(s),n.set(s,fM(e.cacheDir,o))}if(r.size===0)throw new Error("TypeScript overlay generation requires affected documents");let i={version:ba,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,baseGenerationIdentity:t?.baseGenerationIdentity??e.previousGenerationIdentity,generationIdentity:e.nextGenerationIdentity,createdAt:(e.now??(()=>new Date))().toISOString(),overlays:[...n.values()].sort((o,s)=>o.relativePath.localeCompare(s.relativePath))};return pM(e.cacheDir,i),i}function Ite(e){let t=Nb(e.cacheDir,e.generationIdentity);if(!t)throw new Error("TypeScript overlay generation is unavailable");let n=t.overlays.map(r=>{if(r.blobHash===null)return{relativePath:r.relativePath,bytes:null,occurrences:0,symbols:0,referenceFragments:[]};let i=Qi(St(eo(e.cacheDir),"blobs",`${r.blobHash}.scipdoc`));if(i.byteLength!==r.byteLength||Xi(i)!==r.blobHash)throw new Error(`TypeScript overlay blob is corrupt: ${r.relativePath}`);return{relativePath:r.relativePath,bytes:i,occurrences:0,symbols:0,referenceFragments:[]}});return vb({packageVersion:e.packageVersion,baseIndexBytes:e.baseIndexBytes,fragments:n})}function wte(e,t){let n=eo(e),r=St(n,"generations");if(!Yi(r))return;let i=new Set(t.map($u)),o=new Set;for(let a of ju(r).filter(c=>i.has(c))){let c=Bu(Qi(St(r,a),"utf8"));for(let l of c.overlays)l.blobHash&&o.add(`${l.blobHash}.scipdoc`)}for(let a of ju(r))i.has(a)||_b(St(r,a),{force:!0});let s=St(n,"blobs");if(Yi(s))for(let a of ju(s))o.has(a)||_b(St(s,a),{force:!0})}function Nb(e,t){let n=St(eo(e),"generations",$u(t));if(!Yi(n))return null;let r=Bu(Qi(n,"utf8"));if(r.generationIdentity!==t)throw new Error("TypeScript overlay generation identity does not match its path");return r}function fM(e,t){let n=Hu(t.relativePath);if(t.bytes===null)return{relativePath:n,blobHash:null,byteLength:0};let r=Buffer.from(t.bytes),i=Xi(r),o=St(eo(e),"blobs");uM(o,{recursive:!0});let s=St(o,`${i}.scipdoc`);if(Yi(s)){let a=Qi(s);if(a.byteLength!==r.byteLength||Xi(a)!==i)throw new Error(`existing TypeScript overlay blob is corrupt: ${n}`)}else{let a=`${s}.${process.pid}.${Date.now()}.tmp`;mM(a,r),dM(a,s)}return{relativePath:n,blobHash:i,byteLength:r.byteLength}}function pM(e,t){let n=St(eo(e),"generations",$u(t.generationIdentity));if(Yi(n)){let r=Bu(Qi(n,"utf8"));if(Lb(r)!==Lb(t))throw new Error(`TypeScript overlay generation is immutable: ${t.generationIdentity}`);return}Fe(n,t,{spacing:2,trailingNewline:!0})}function Bu(e){let t=JSON.parse(e);if(t.version!==ba||typeof t.producerIdentity!="string"||!t.producerIdentity||typeof t.projectIdentity!="string"||!t.projectIdentity||typeof t.baseGenerationIdentity!="string"||!t.baseGenerationIdentity||typeof t.generationIdentity!="string"||!t.generationIdentity||typeof t.createdAt!="string"||!Number.isFinite(Date.parse(t.createdAt))||!Array.isArray(t.overlays))throw new Error("invalid TypeScript overlay manifest");let n=new Set;for(let r of t.overlays){if(!r||typeof r.relativePath!="string"||r.blobHash!==null&&(typeof r.blobHash!="string"||!/^[a-f0-9]{64}$/.test(r.blobHash))||!Number.isInteger(r.byteLength)||r.byteLength<0||r.blobHash===null&&r.byteLength!==0)throw new Error("invalid TypeScript overlay record");if(Hu(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript overlay record");n.add(r.relativePath)}return t}function eo(e){return St(e,Zi)}function $u(e){if(!e)throw new Error("TypeScript overlay generation identity must be non-empty");return`${Xi(e)}.json`}function Lb(e){return Xi(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,baseGenerationIdentity:e.baseGenerationIdentity,generationIdentity:e.generationIdentity,overlays:e.overlays}))}function Hu(e){if(!e||e.startsWith("/")||e.includes("\\")||e.split("/").some(t=>!t||t==="."))throw new Error(`invalid TypeScript overlay path: ${e}`);if(e.split("/").includes(".."))throw new Error(`invalid TypeScript overlay path: ${e}`);return e}function Xi(e){return lM("sha256").update(e).digest("hex")}var to=1,Wu="language-indexes",Ab=["index.db","index.scip","meta.json"],Mb=[Wu,Ji,Zi];function Sa(e){let t=[];for(let n of Ab)CM(e,n),t.push(n);for(let n of Mb)Ob(e,n,t);return{version:to,files:t.sort()}}function Ca(e){if(!e||e.includes("\0")||e.startsWith("/")||e.includes("\\"))throw new Error(`invalid index artifact path: ${e||"<empty>"}`);let t=e.split("/");if(t.some(r=>!r||r==="."||r===".."))throw new Error(`invalid index artifact path: ${e}`);let n=t[0];if(!Ab.includes(e)&&!Mb.includes(n))throw new Error(`index artifact path is not shareable: ${e}`);return e}function _t(e,t){let n=Ca(t),r=Uu(e),i=Uu(r,...n.split("/"));if(i!==r&&!i.startsWith(`${r}${SM}`))throw new Error(`index artifact escapes cache: ${t}`);return i}function Ob(e,t,n){let r=yM(e,t),i;try{i=hM(r,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let o of i){let s=`${t}/${o.name}`;if(o.isSymbolicLink())throw new Error(`index artifact cannot be a symlink: ${s}`);o.isDirectory()?Ob(e,s,n):o.isFile()&&n.push(Ca(s))}}function CM(e,t){let n=_t(e,t),r;try{r=gM(n)}catch{throw new Error(`required index artifact is missing: ${t}`)}if(!r.isFile()||r.isSymbolicLink())throw new Error(`required index artifact is not a regular file: ${t}`);if(bM(Uu(e),n).startsWith(".."))throw new Error(`index artifact escapes cache: ${t}`)}import{readFileSync as zu,writeFileSync as Vu}from"fs";import{create as no}from"@bufbuild/protobuf";import{deserializeSCIP as qu,serializeSCIP as Ku,DocumentSchema as PM,IndexSchema as Bb,MetadataSchema as kM,SymbolInformationSchema as TM}from"@c4312/scip";import{readFileSync as xM,writeFileSync as RM}from"fs";import{create as jb}from"@bufbuild/protobuf";import{deserializeSCIP as vM,DocumentSchema as IM,IndexSchema as wM,serializeSCIP as EM,SymbolRole as DM}from"@c4312/scip";function Ate(e){let t;try{t=vM(xM(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=Gu(t);return n.removedDefinitionOccurrences>0&&RM(e,Buffer.from(EM(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function Gu(e){let t=new Set;for(let o of e.documents)for(let s of o.symbols)s.symbol&&t.add(s.symbol);for(let o of e.externalSymbols)o.symbol&&t.add(o.symbol);let n=0,r=0,i=[];for(let o of e.documents){let s=o.occurrences.filter(a=>(a.symbolRoles&DM.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(jb(IM,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:jb(wM,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}function $b(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=_M(e),n=LM(e.flatMap(i=>i.documents??[])),r=Ub(e.flatMap(i=>i.externalSymbols??[]));return no(Bb,{metadata:t,documents:n,externalSymbols:r})}function Hte(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>qu(zu(i))),r=$b(n);return Vu(t,Buffer.from(Ku(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Ute(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>qu(zu(i))),r=Gu($b(n));return Vu(t,Buffer.from(Ku(r.index))),{documentCount:r.index.documents.length,externalSymbolCount:r.index.externalSymbols.length,inputCount:e.length,removedDefinitionOccurrences:r.removedDefinitionOccurrences,touchedDocuments:r.touchedDocuments}}function FM(e,t,n){let r=e.metadata;if(!r)throw new Error("Cannot rebase a SCIP index without metadata");if(r.projectRoot!==t)throw new Error(`Cannot rebase SCIP project root: expected ${t}, got ${r.projectRoot}`);return no(Bb,{metadata:no(kM,{...r,projectRoot:n}),documents:e.documents,externalSymbols:e.externalSymbols})}function Hb(e,t,n){let r=qu(zu(e)),i=FM(r,t,n);Vu(e,Buffer.from(Ku(i)))}function _M(e){let t=e[0]?.metadata;if(!t)return;let n=t.projectRoot;for(let r of e.slice(1)){let i=r.metadata?.projectRoot;if(n&&i&&i!==n)throw new Error(`Cannot merge SCIP indexes with different project roots: ${n} vs ${i}`)}return t}function LM(e){let t=new Map;for(let n of e){let r=t.get(n.relativePath);if(!r){t.set(n.relativePath,n);continue}t.set(n.relativePath,no(PM,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:NM([...r.occurrences,...n.occurrences]),symbols:Ub([...r.symbols,...n.symbols]),text:MM(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function NM(e){let t=new Set,n=[];for(let r of e){let i=JSON.stringify(r);t.has(i)||(t.add(i),n.push(r))}return n}function Ub(e){let t=new Map;for(let n of e){let r=t.get(n.symbol);if(!r){t.set(n.symbol,n);continue}t.set(n.symbol,no(TM,{symbol:r.symbol,documentation:OM([...r.documentation,...n.documentation]),relationships:AM([...r.relationships,...n.relationships]),kind:r.kind||n.kind,displayName:r.displayName||n.displayName,enclosingSymbol:r.enclosingSymbol||n.enclosingSymbol,signatureDocumentation:r.signatureDocumentation??n.signatureDocumentation}))}return[...t.values()]}function AM(e){let t=new Set,n=[];for(let r of e){let i=[r.symbol,r.isReference?"1":"0",r.isImplementation?"1":"0",r.isTypeDefinition?"1":"0",r.isDefinition?"1":"0"].join("|");t.has(i)||(t.add(i),n.push(r))}return n}function MM(e,t){return e?t?e.length>=t.length?e:t:e:t}function OM(e){return[...new Set(e)]}var ed=1,zb="SCIP_QUERY_SHARED_CACHE",Yu=JSON.stringify({cliVersion:er,artifactCatalogVersion:to,sqliteGenerationStoreVersion:Ur,typescriptFragmentStoreVersion:ha,typescriptOverlayStoreVersion:ba}),eS="manifest.json",tS="shared-cache.json",td=[Wu,Ji,Zi];function xa(e,t){if(!e.clean||!e.treeOid)return;let n=oo(JSON.stringify({version:ed,repositoryId:e.repositoryId,treeOid:e.treeOid,fingerprint:t,producerIdentity:Yu}));return{repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,fingerprint:t,producerIdentity:Yu,generationId:n,repositoryCacheDir:zi(e.repositoryId)}}function nS(e,t,n){if(process.env[zb]==="0")return`${zb}=0`;if(!Eu(n))return"explicit cache or database override";if(Ct(t)!==Ct(A(sa(e),"index.db")))return"index database is outside the managed worktree cache"}function rS(e,t,n){if(!Eu(t))return;let r=n??yr(e);return r?A(zi(r.repositoryId),"evidence.db"):void 0}function sr(e,t=!0){let n=id(e),r;try{r=zM(tt(A(n,eS),"utf8"))}catch{return null}if(r.generationId!==e.generationId||r.repositoryId!==e.repositoryId||r.treeOid!==e.treeOid||r.producerIdentity!==e.producerIdentity||JSON.stringify(r.fingerprint)!==JSON.stringify(e.fingerprint))return null;if(!t)return r;try{for(let i of r.artifacts){let o=_t(n,i.path),s=UM(o);if(!s.isFile()||s.size!==i.size||oo(tt(o))!==i.sha256)return null}}catch{return null}return r}function iS(e){let t=sr(e.snapshot);if(t)return t;if(!Gr(e.sourceCacheDir,e.sourceProjectRoot,e.snapshot.fingerprint))throw new Error("source index is incomplete, incompatible, or corrupt");let n=Vb(e.sourceCacheDir);if(!n)throw new Error("source index artifacts are incomplete");let r=Sa(e.sourceCacheDir),i=A(e.snapshot.repositoryCacheDir,"generations");tn(i,{recursive:!0});let o=Jb(A(i,`.tmp-${process.pid}-`));try{let s=[];for(let d of r.files){let m=_t(e.sourceCacheDir,d),f=_t(o,d);io(m,f);let p=tt(f);s.push({path:d,size:p.byteLength,sha256:oo(p)})}let a=Zb(tt(A(o,"index.scip"))).metadata?.projectRoot;if(!a)throw new Error("shared SCIP generation has no project root metadata");let c=od(e.sourceProjectRoot);if(a!==c)throw new Error("shared SCIP generation root does not match its source worktree");if(Vb(e.sourceCacheDir)!==n||e.sourceStillValid&&!e.sourceStillValid())throw new Error("source index changed while staging a shared generation");let l={version:ed,artifactCatalogVersion:to,generationId:e.snapshot.generationId,repositoryId:e.snapshot.repositoryId,treeOid:e.snapshot.treeOid,fingerprint:e.snapshot.fingerprint,producerIdentity:e.snapshot.producerIdentity,sourceProjectRoot:e.sourceProjectRoot,scipProjectRoot:a,createdAt:(e.now??(()=>new Date))().toISOString(),artifacts:s.sort((d,m)=>d.path.localeCompare(m.path))};Fe(A(o,eS),l,{spacing:2,trailingNewline:!0});let u=id(e.snapshot);try{if(kn(u)&&!sr(e.snapshot)){let d=`${u}.corrupt-${process.pid}-${Date.now()}`;or(u,d),Pn(d,{recursive:!0,force:!0})}or(o,u)}catch(d){let m=sr(e.snapshot);if(m)return m;throw d}return l}finally{Pn(o,{recursive:!0,force:!0})}}function Xu(e){let t=id(e.snapshot);tn(e.targetCacheDir,{recursive:!0});let n=Lu(A(e.targetCacheDir,"cache-lifecycle.lock"),{waitMs:3e4});if(!n)throw new Error("timed out waiting for another cache hydration");let r,i,o=!1;try{r=Jb(A(e.targetCacheDir,".shared-hydrate-")),QM(e.manifest,e.snapshot);for(let c of e.manifest.artifacts){let l=_t(t,c.path),u=_t(r,c.path);io(l,u);let d=tt(u);if(d.byteLength!==c.size||oo(d)!==c.sha256)throw new Error(`shared artifact is corrupt: ${c.path}`)}let s=od(e.targetProjectRoot);if(s!==e.manifest.scipProjectRoot)for(let c of e.manifest.artifacts)c.path.endsWith(".scip")&&Hb(_t(r,c.path),e.manifest.scipProjectRoot,s);if(!Gr(r,e.targetProjectRoot,e.snapshot.fingerprint,!1))throw new Error("staged shared generation failed completeness or integrity validation");i=JM(e.targetCacheDir,r),o=!0,YM(r,e.targetCacheDir,i),ob({tempOutputScip:A(r,"index.scip"),tempOutputDb:A(r,"index.db"),tempMetaPath:A(r,"meta.json"),outputScip:A(e.targetCacheDir,"index.scip"),outputDb:A(e.targetCacheDir,"index.db"),metaPath:A(e.targetCacheDir,"meta.json"),now:e.now});let a=Ki(A(e.targetCacheDir,"index.db"),A(e.targetCacheDir,"meta.json"));if(a.state==="invalid"||a.state==="drifted")throw new Error(`hydrated SQLite generation failed validation: ${a.reason}`);Qu(e.snapshot,e.targetCacheDir,e.action??"attached",e.now)}catch(s){throw o&&i&&XM(e.targetCacheDir,i),s}finally{r&&Pn(r,{recursive:!0,force:!0}),n.release()}}function oS(e,t,n,r){let i=nS(e,n.dbPath,t);if(i)return{kind:"bypassed",reason:i};try{let o=r??yr(e);if(!o)return{kind:"missed",reason:"Git worktree identity is unavailable"};if(!o.clean)return Ra(o,n.cacheDir,"missed",void 0,"worktree has uncommitted changes"),{kind:"missed",reason:"worktree has uncommitted changes"};let s=t.languages??Vi(e),a=Ti(e,s,aS(t)),c=xa(o,a);if(!c)return{kind:"missed",reason:"clean committed snapshot is unavailable"};let l=sr(c);if(l)return Xu({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e}),{kind:"attached",generationId:c.generationId};let u=VM(c,e);return u?(l=u.manifest,Xu({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e,action:"peer-imported"}),{kind:"peer-imported",generationId:c.generationId,sourceProjectRoot:u.sourceProjectRoot}):(Ra(o,n.cacheDir,"missed",void 0,"no exact shared or peer generation exists"),{kind:"missed",reason:"no exact shared or peer generation exists"})}catch(o){return{kind:"failed",reason:o instanceof Error?o.message:String(o)}}}function nd(e,t,n,r){let i=nS(e,n.dbPath,t);if(i)return{kind:"bypassed",reason:i};try{let o=r??yr(e);if(!o)return{kind:"missed",reason:"Git worktree identity is unavailable"};if(!o.clean)return Ra(o,n.cacheDir,"missed",void 0,"worktree is not a clean committed snapshot"),{kind:"missed",reason:"worktree is not a clean committed snapshot"};let s=t.languages??Vi(e),a=Ti(e,s,aS(t)),c=xa(o,a);if(!c)return Ra(o,n.cacheDir,"missed",void 0,"worktree is not a clean committed snapshot"),{kind:"missed",reason:"worktree is not a clean committed snapshot"};let l=sr(c);if(l)return Gr(n.cacheDir,e,a)?(Qu(c,n.cacheDir,"local-fresh"),{kind:"local-fresh"}):(Xu({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e}),{kind:"attached",generationId:c.generationId});let u=va(n.cacheDir);return u?.status!=="complete"||JSON.stringify(u.fingerprint)!==JSON.stringify(a)||JSON.stringify([...u.indexedLanguages??[]].sort())!==JSON.stringify([...s].sort())?{kind:"missed",reason:"local metadata does not match the clean worktree snapshot"}:Gr(n.cacheDir,e,a)?(iS({snapshot:c,sourceCacheDir:n.cacheDir,sourceProjectRoot:e,sourceStillValid:()=>{let d=yr(e);return(d?xa(d,a):void 0)?.generationId===c.generationId}}),Qu(c,n.cacheDir,"built"),{kind:"built",generationId:c.generationId}):{kind:"missed",reason:"local index artifacts are incomplete or incompatible"}}catch(o){return{kind:"failed",reason:o instanceof Error?o.message:String(o)}}}async function une(e,t={}){let n=t.timeoutMs??3e4,r=t.pollMs??100,i=t.now??Date.now,o=i()+n,s=A(e.repositoryCacheDir,"locks"),a=A(s,`${e.generationId}.lock`);for(tn(s,{recursive:!0});i()<=o;){if(sr(e))return{kind:"generation-ready"};let c=Zu();try{let l=Yb(a,"wx");try{Xb(l,`${JSON.stringify({version:1,pid:process.pid,token:c,generationId:e.generationId,startedAt:new Date(i()).toISOString()})}
|
|
374
|
-
`)}finally{Kb(l)}return{kind:"owner",release:()=>{try{let u=JSON.parse(tt(a,"utf8"));u.pid===process.pid&&u.token===c&&Ju(a)}catch{}}}}catch(l){if(l.code!=="EEXIST")return{kind:"timeout"};let u=cS(a);if(u&&(u.pid===void 0||!dt(u.pid))){
|
|
375
|
-
`)}finally{Kb(i)}try{let o=cS(e);return!o||o.raw!==t.raw||o.pid!==void 0&&dt(o.pid)?!1:(Ju(e),!0)}catch{return!1}finally{try{let o=JSON.parse(tt(n,"utf8"));o.pid===process.pid&&o.token===r&&Ju(n)}catch{}}}function lS(e,t,n){let r=_u(e,{waitMs:5e3});if(!r)throw new Error("repository cache cleanup is busy");try{if(n){let o=t.activeGenerationId;if(!o||!kn(A(e,"generations",o)))throw new Error("shared generation disappeared before its lease was attached")}let i=A(e,"worktrees");tn(i,{recursive:!0}),Fe(A(i,`${t.worktreeId}.json`),t,{spacing:2,trailingNewline:!0}),qM(t.localCacheDir,t.repositoryId,t.worktreeId)}finally{r.release()}}function JM(e,t){let n=A(t,".rollback"),r=new Map,i=new Map;tn(n,{recursive:!0});for(let a of["index.scip","index.db","meta.json"]){let c=A(e,a),l=kn(c);r.set(a,l),l&&io(c,A(n,"stable",a))}for(let a of td){let c=A(e,a),l=kn(c);if(l){let u=BM(c);if(!u.isDirectory()||u.isSymbolicLink())throw new Error(`managed artifact path is not a directory: ${a}`)}i.set(a,l)}let o=A(e,da),s=kn(o);return s&&uS(o,A(n,"sqlite-generations")),{root:n,stableFiles:r,managedDirectories:i,generationStoreExisted:s}}function YM(e,t,n){for(let r of td){let i=A(t,r);if(n.managedDirectories.get(r)){let s=A(n.root,"managed",r);tn(Qb(s),{recursive:!0}),or(i,s)}let o=A(e,r);kn(o)&&or(o,i)}}function XM(e,t){for(let i of td){let o=A(e,i),s=A(t.root,"managed",i);t.managedDirectories.get(i)?kn(s)&&(Pn(o,{recursive:!0,force:!0}),or(s,o)):Pn(o,{recursive:!0,force:!0})}for(let[i,o]of t.stableFiles){let s=A(e,i);if(!o){Pn(s,{force:!0});continue}let a=`${s}.shared-restore-${Zu()}`;io(A(t.root,"stable",i),a),Pn(s,{force:!0}),or(a,s)}let n=A(e,da);Pn(n,{recursive:!0,force:!0});let r=A(t.root,"sqlite-generations");t.generationStoreExisted&&kn(r)&&or(r,n)}function uS(e,t){tn(t,{recursive:!0});for(let n of $M(e,{withFileTypes:!0})){let r=A(e,n.name),i=A(t,n.name);if(n.isSymbolicLink())throw new Error(`managed cache backup cannot contain a symlink: ${r}`);n.isDirectory()?uS(r,i):n.isFile()&&io(r,i)}}function QM(e,t){if(e.generationId!==t.generationId||e.repositoryId!==t.repositoryId||e.treeOid!==t.treeOid||e.producerIdentity!==t.producerIdentity||JSON.stringify(e.fingerprint)!==JSON.stringify(t.fingerprint))throw new Error("shared generation manifest does not match the requested snapshot")}function Gr(e,t,n,r=!0,i=!0){try{let o=va(e);if(o?.status!=="complete"||JSON.stringify(o.fingerprint)!==JSON.stringify(n)||JSON.stringify([...o.indexedLanguages??[]].sort())!==JSON.stringify([...n.languages].sort()))return ro("source validation rejected metadata"),!1;let s=Sa(e),a=Ki(A(e,"index.db"),A(e,"meta.json"));if(r?a.state!=="current":a.state==="invalid"||a.state==="drifted")return ro(`source validation rejected SQLite generation state ${a.state}`),!1;let c=new GM(A(e,"index.db"),{readonly:!0,fileMustExist:!0});try{if(i){if(c.pragma("quick_check(1)",{simple:!0})!=="ok")return!1}else c.pragma("schema_version",{simple:!0})}finally{c.close()}let l=od(t),d=(i?s.files.filter(m=>m.endsWith(".scip")):["index.scip"]).every(m=>{let f=Zb(tt(_t(e,m))).metadata?.projectRoot;return f!==l&&ro(`source validation rejected SCIP root for ${m}: ${String(f)}`),f===l});return d||ro("source validation rejected SCIP project roots"),d}catch(o){return ro(`source validation failed: ${o instanceof Error?o.message:String(o)}`),!1}}function ro(e){process.env.SCIP_QUERY_DEBUG&&console.error(`shared-cache: ${e}`)}function od(e){try{return Gb(HM(e)).href}catch{return Gb(Ct(e)).href}}function ZM(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===2&&Array.isArray(t.languages)&&typeof t.pnpmWorkspaces=="boolean"&&(t.typescriptProjectMode==="single"||t.typescriptProjectMode==="workspace")&&Array.isArray(t.typescriptProjects)&&Array.isArray(t.files)&&t.files.every(n=>n!==null&&typeof n=="object"&&typeof n.path=="string"&&typeof n.size=="number"&&typeof n.hash=="string")}function oo(e){return qb("sha256").update(e).digest("hex")}function dS(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}var sd;function xne(e){sd=e}function mS(e=dS(),t=void 0){if(t===void 0&&sd?.projectRoot===e)return sd;let n=Ky(e),r=Ny(e,n),i=process.env.SCIP_QUERY_INDEX_DB;if(i)return{projectRoot:e,config:n,paths:r,dbPath:i,dbPathSource:"env",gitContext:t};if(ad(r.dbPath))return{projectRoot:e,config:n,paths:r,dbPath:r.dbPath,dbPathSource:"configured",gitContext:t};let o=t0(e,"index.db");return{projectRoot:e,config:n,paths:r,dbPath:o,dbPathSource:"root-fallback",rootFallbackWarning:o0(o,r.dbPath),gitContext:t}}function Rne(e){return mS(e).dbPath}function vne(e,t,n,r={}){return ad(n.dbPath)&&sS(e,n.cacheDir,void 0,r.gitContext)?{kind:"local-fresh"}:r.gitContext?.clean===!1&&r.watcherGeneration!==void 0&&Zs(n.dbPath)===r.watcherGeneration?nd(e,t,n,r.gitContext):cb(e,t,n).state==="fresh"?nd(e,t,n,r.gitContext):oS(e,t,n,r.gitContext)}function Ine(e){return!e.startsWith("__")&&!n0.has(e)}var n0=new Set(["bench","config-validate","hook-context","hook-stop","init","setup","setup-agent","setup-ci","setup-hooks","uninstall","work-audit"]);function r0(){try{return i0(dS(),{warnOnRootFallback:!0})}catch(e){console.error(`error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}function i0(e,t={}){let{config:n,paths:r,dbPath:i,dbPathSource:o,rootFallbackWarning:s,gitContext:a}=mS(e);if(!ad(i))throw new Error("No index.db found. Run: scip-query reindex");t.warnOnRootFallback&&o==="root-fallback"&&s&&console.error(s);let c={dbPath:i,indexPath:process.env.SCIP_QUERY_INDEX_SCIP??r.indexPath,projectRoot:e,sharedEvidenceDbPath:rS(e,n,a),entryRoots:n.entryRoots,semantic:n.semantic,suppressions:n.suppressions,declaredCouplings:n.declaredCouplings,locality:n.locality,architecture:n.architecture,coverageContracts:n.coverageContracts,docs:n.docs},l=Oy(e);return new aa(c,l)}function o0(e,t){let n="unknown time";try{n=e0(e).mtime.toISOString()}catch{}return`warning: using legacy project-root index.db (${e}, modified ${n}) because the configured index was not found at ${t}. This fallback may be stale; run 'scip-query reindex' to refresh the configured index.`}function nn(e){let t=r0();try{return e(t)}finally{t.close()}}function wne(e,t){return t.concat([e])}function fS(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(0)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function Ene(e){switch(e.state){case"idle":return"Watching (idle)";case"waiting":{let t=Math.round((e.reindexAt-Date.now())/1e3);return`${e.changedFiles} file(s) changed, reindexing in ${t}s...`}case"indexing":return`Reindexing... (${Math.round((Date.now()-e.startedAt)/1e3)}s)`;case"cooldown":return`Cooldown (${Math.round((e.until-Date.now())/1e3)}s)${e.dirty?" \u2014 changes pending":""}`;default:return s0(e)}}function s0(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}function pS(e){return e+1}function a0(e,t){return`${pS(e)}-${pS(t)}`}function Pne(e,t,n){return`${e}:${a0(t,n)}`}function kne(e,t=180){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-3)}...`:n}var Lt={empty(e){console.log(e)},list(e,t){for(let n of e)console.log(t(n))},groupedByFile(e,t,n=r=>r.relativePath){let r="";for(let i of e){let o=n(i);o!==r&&(r&&console.log(""),console.log(o),r=o),console.log(t(i))}},sectionedReport(e){let t=!0;for(let n of e)if(!(n.skipIfEmpty&&n.rows.length===0)){t||console.log(""),t=!1,n.title!==void 0&&console.log(`\u2550\u2550\u2550 ${n.title} \u2550\u2550\u2550`),n.explanation!==void 0&&console.log(n.explanation);for(let r of n.rows)console.log(r)}},table(e,t,n){console.log(` ${e.join(" ")}`);let r=n??e.map(i=>i.length);console.log(` ${r.map(i=>"\u2500".repeat(i)).join(" ")}`);for(let i of t)console.log(i)}};import{availableParallelism as rY}from"os";import{fileURLToPath as Wm}from"url";import{existsSync as Ia,readFileSync as c0,readdirSync as hS}from"fs";import{join as so}from"path";var l0={files:new Set,pathPrefixes:[]},cd=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,u0=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,yS=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],d0=new Set([".git",".next",".turbo","build","coverage","dist","node_modules","out"]),m0=4,f0=X("package-surface",{clearGroups:["whole-project"]});function p0(e){return f0.get(e,()=>g0(e.config.projectRoot))}function ar(e,t){let n=p0(e);return n.files.has(t)?!0:n.pathPrefixes.some(r=>t.startsWith(r))}function g0(e){let t=new Set,n=[];for(let{manifest:r,packageRoot:i}of h0(e))for(let o of y0(r))b0(e,i,o,t,n);return t.size===0&&n.length===0?l0:{files:t,pathPrefixes:n}}function h0(e){let t=[],n=SS(e,"");return n&&t.push({manifest:n,packageRoot:""}),bS(e,"",t,0),t}function bS(e,t,n,r){if(r>=m0)return;let i=so(e,t);if(Ia(i))for(let o of hS(i,{withFileTypes:!0})){if(!o.isDirectory()||d0.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name,a=SS(e,s);a&&n.push({manifest:a,packageRoot:s}),bS(e,s,n,r+1)}}function SS(e,t){try{let n=c0(so(e,t,"package.json"),"utf-8"),r=JSON.parse(n);return r&&typeof r=="object"?r:null}catch{return null}}function y0(e){let t=[];for(let r of["main","module","types","browser"])typeof e[r]=="string"&&t.push(e[r]);let n=e.bin;if(typeof n=="string")t.push(n);else if(n&&typeof n=="object")for(let r of Object.values(n))typeof r=="string"&&t.push(r);return CS(e.exports,t),t}function CS(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))CS(n,t)}function b0(e,t,n,r,i){let o=n.replace(/\\/g,"/").replace(/^\.\//,"");if(o===""||o.startsWith(".."))return;let s=o.indexOf("*");if(s>=0){let c=o.slice(0,s);for(let l of gS(c))l!==""&&i.push(rn(t,l));return}let a=o.replace(u0,"");for(let c of gS(a)){c===a&&c===o&&r.add(rn(t,o));for(let l of yS)S0(e,r,t,c+l)}r.add(rn(t,o))}function gS(e){let t=[e];return cd.test(e)&&(t.push(e.replace(cd,"src/")),t.push(e.replace(cd,""))),t}function S0(e,t,n,r){let i=rn(n,r);if(t.add(i),!r.startsWith("src/")||Ia(so(e,i)))return;let o=yS.find(u=>r.endsWith(u));if(!o)return;let s=r.slice(0,-o.length);C0(e,t,n,s,o);let a=s.lastIndexOf("/");if(a<=4)return;let c=s.slice(0,a),l=s.slice(a+1);for(let u of xS(e,n,c,`${l}${o}`))t.add(u)}function C0(e,t,n,r,i){let o=rn(n,`${r}/index${i}`);Ia(so(e,o))&&t.add(o)}function xS(e,t,n,r){let i=so(e,t,n);if(!Ia(i))return[];let o=[];for(let s of hS(i,{withFileTypes:!0})){let a=`${n}/${s.name}`;s.isDirectory()?o.push(...xS(e,t,a,r)):s.isFile()&&s.name===r&&o.push(rn(t,a))}return o}function rn(e,t){return e?`${e}/${t}`:t}import{existsSync as wa,readFileSync as x0,readdirSync as R0}from"fs";import{dirname as v0,join as Ea}from"path";var I0={rootFiles:new Set,sourcePrefixes:[]},w0=new Set([".git",".scipquery","node_modules","target"]),E0=6,D0=X("rust-library-surface",{clearGroups:["whole-project"]});function RS(e,t,n){if(!n.endsWith(".rs")||!T0(P0(e),n))return!1;let r=Y(e,n).find(i=>i.symbol===t);return r?F0(Ce(e,n)[r.startLine]??""):!1}function P0(e){return D0.get(e,()=>k0(e.config.projectRoot))}function k0(e){let t=new Set,n=new Set;for(let r of _0(e)){let i=Ea(e,r,"Cargo.toml"),o=x0(i,"utf8"),s=L0(o),a=rn(r,"src/lib.rs"),c=s?rn(r,s):!N0(o)&&wa(Ea(e,a))?a:null;if(!c)continue;t.add(c);let l=v0(c).replaceAll("\\","/");n.add(l==="."?"":`${l}/`)}return t.size===0?I0:{rootFiles:t,sourcePrefixes:[...n].sort()}}function T0(e,t){return t.endsWith(".rs")?e.rootFiles.has(t)?!0:A0(t)?!1:e.sourcePrefixes.some(n=>t.startsWith(n)):!1}function F0(e){return/^\s*pub\s+(?!\()/.test(e)}function _0(e){if(!wa(e))return[];let t=[];return vS(e,"",t,0),t}function vS(e,t,n,r){let i=Ea(e,t);if(wa(i)&&(wa(Ea(i,"Cargo.toml"))&&n.push(t),!(r>=E0)))for(let o of R0(i,{withFileTypes:!0})){if(!o.isDirectory()||w0.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name;vS(e,s,n,r+1)}}function L0(e){let t=!1;for(let n of e.split(`
|
|
376
|
-
`)){let r=n.replace(/\s+#.*$/,"").trim(),i=/^\[([^\]]+)\]$/.exec(r);if(i){t=i[1]==="lib";continue}if(!t)continue;let o=/^path\s*=\s*["']([^"']+)["']/.exec(r)?.[1];if(o)return o.replaceAll("\\","/").replace(/^\.\//,"")}return null}function
|
|
377
|
-
`)){let r=n.replace(/\s+#.*$/,"").trim(),i=/^\[([^\]]+)\]$/.exec(r);if(i){t=i[1]==="package";continue}if(t&&/^autolib\s*=\s*false\b/.test(r))return!0}return!1}function
|
|
367
|
+
`;function ku(e,t,n){let r=iA(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function iA(e,t){if(!t||t===".")return null;if(!My(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=My(t)?t:ZN(e,t),r=QN(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{readFileSync as oA,writeFileSync as Pu,existsSync as en}from"fs";import{isAbsolute as By,join as nr,relative as $y,resolve as Hy}from"path";var Hr=".scipquery.json",Gy=250,zy=0,Vy=10*6e4,sA={enabled:!1,debounceMs:Gy,cooldownMs:zy,gitPollMs:2e3,idleTimeoutMs:Vy,autoRefresh:!0,ignore:[]},qy=["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php","clojure"],aA=new Set(["languages","indexerConcurrency","watch","hooks","indexer","dbPath","entryRoots","semantic","suppressions","declaredCouplings","locality","architecture","coverageContracts","docs"]),cA=new Set(["enabled","debounceMs","cooldownMs","gitPollMs","idleTimeoutMs","autoRefresh","ignore"]),lA=new Set(["router"]),uA=new Set(["pathPrefixes","files","symbolPatterns","qualifiedVars"]),dA=new Set(["typescript","rust"]),mA=new Set(["tsconfigs"]),fA=new Set(["rustAnalyzerPath"]),Uy=new Set(qy),pA=new Set(["pnpmWorkspaces","projectMode","projects","configPath"]),gA=new Set(["architecturalBoundarySegments"]),hA=new Set(["boundaries","allowedDependencies","requireCompletePolicy","requireAcyclic","requireResolvedBoundaries","requireMinimalPolicy","maxBoundaryFanOut","maxBoundaryFiles","testPaths"]),yA=new Set(["name","paths","subUnits","maxFiles"]),bA=new Set(["snapshotPaths"]),SA=new Set(["name","files","reason"]),CA=new Set(["id","check","file","reason","expiresAt","createdAt"]),xA=new Set(["name","file","keys","mustEqual","allowExtra"]),vA=new Set(["type","identifier","marker"]),RA=new Set(["type","path","pattern"]),IA=new Set(["object-literal-keys","string-array","markdown-list"]),wA=new Set(["top-level-dirs","file-glob","registered-commands","builtin-skills"]);function Ky(e){let t=nr(e,Hr);if(!en(t))return{};try{let n=oA(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);throw n instanceof SyntaxError?new Error(`invalid ${Hr} at ${t}: ${r}`,{cause:n}):new Error(`unable to read ${Hr} at ${t}: ${r}`,{cause:n})}}function Mee(e,t={}){let n=[];TA(e,n);let r=new Set(qy);for(let[c,l]of(e.languages??[]).entries())r.has(l)||n.push({level:"error",path:`languages[${c}]`,message:`Unsupported language: ${l}`});e.indexerConcurrency!==void 0&&(!Number.isInteger(e.indexerConcurrency)||e.indexerConcurrency<=0)&&n.push({level:"error",path:"indexerConcurrency",message:"Must be a positive integer."}),e.watch?.debounceMs!==void 0&&e.watch.debounceMs<=0&&n.push({level:"error",path:"watch.debounceMs",message:"Must be greater than 0."}),e.watch?.cooldownMs!==void 0&&(!Number.isInteger(e.watch.cooldownMs)||e.watch.cooldownMs<0)&&n.push({level:"error",path:"watch.cooldownMs",message:"Must be a non-negative integer; 0 disables cooldown spacing."}),e.watch?.gitPollMs!==void 0&&e.watch.gitPollMs<=0&&n.push({level:"error",path:"watch.gitPollMs",message:"Must be greater than 0."}),e.watch?.idleTimeoutMs!==void 0&&(!Number.isInteger(e.watch.idleTimeoutMs)||e.watch.idleTimeoutMs<0)&&n.push({level:"error",path:"watch.idleTimeoutMs",message:"Must be a non-negative integer; 0 disables idle shutdown."}),e.watch?.autoRefresh!==void 0&&typeof e.watch.autoRefresh!="boolean"&&n.push({level:"error",path:"watch.autoRefresh",message:"Must be a boolean."}),e.hooks?.router!==void 0&&e.hooks.router!=="off"&&e.hooks.router!=="single"&&n.push({level:"error",path:"hooks.router",message:'Must be "off" or "single".'});let i=e.indexer?.typescript;if(i?.projectMode!==void 0&&i.projectMode!=="single"&&i.projectMode!=="workspace"&&n.push({level:"error",path:"indexer.typescript.projectMode",message:'Must be "single" or "workspace".'}),i?.projects!==void 0)if(!Array.isArray(i.projects))n.push({level:"error",path:"indexer.typescript.projects",message:"Must be an array."});else for(let[c,l]of i.projects.entries()){let u=`indexer.typescript.projects[${c}]`;if(typeof l!="string"||l.trim()==="")n.push({level:"error",path:u,message:"Project path must be a non-empty string."});else if(t.projectRoot){let d=Hy(t.projectRoot,l),m=$y(t.projectRoot,d);m.startsWith("..")||By(m)?n.push({level:"error",path:u,message:"Project path must stay inside the project root."}):en(d)||n.push({level:"warning",path:u,message:`TypeScript project path does not exist: ${l}`})}}i?.projectMode==="workspace"&&i.pnpmWorkspaces===!0&&n.push({level:"warning",path:"indexer.typescript.pnpmWorkspaces",message:'Ignored when projectMode is "workspace"; explicit TypeScript projects are indexed directly.'});let o=e.semantic?.rust;o?.rustAnalyzerPath!==void 0&&(typeof o.rustAnalyzerPath!="string"||o.rustAnalyzerPath.trim()==="")&&n.push({level:"error",path:"semantic.rust.rustAnalyzerPath",message:"Rust analyzer path must be a non-empty string."});let s=e.indexer?.clojure;if(s?.configPath!==void 0){let c="indexer.clojure.configPath";if(typeof s.configPath!="string"||s.configPath.trim()==="")n.push({level:"error",path:c,message:"Config path must be a non-empty string."});else if(t.projectRoot){let l=Hy(t.projectRoot,s.configPath),u=$y(t.projectRoot,l);u.startsWith("..")||By(u)?n.push({level:"error",path:c,message:"Config path must stay inside the project root."}):en(l)||n.push({level:"warning",path:c,message:`Clojure indexer config path does not exist: ${s.configPath}`})}}if(e.locality!==void 0)if(!et(e.locality))n.push({level:"error",path:"locality",message:"Must be an object."});else{let c=e.locality.architecturalBoundarySegments;if(c!==void 0)if(!Array.isArray(c))n.push({level:"error",path:"locality.architecturalBoundarySegments",message:"Must be an array."});else for(let[l,u]of c.entries()){let d=`locality.architecturalBoundarySegments[${l}]`;typeof u!="string"||u.trim()===""?n.push({level:"error",path:d,message:"Boundary segment must be a non-empty string."}):(u.includes("/")||u.includes("\\"))&&n.push({level:"error",path:d,message:"Boundary segment must be a single folder name, not a path."})}}if(EA(e,n),e.declaredCouplings!==void 0&&!Array.isArray(e.declaredCouplings))n.push({level:"error",path:"declaredCouplings",message:"Must be an array."});else for(let[c,l]of(e.declaredCouplings??[]).entries()){let u=`declaredCouplings[${c}]`;if((!l.name||l.name.trim()==="")&&n.push({level:"error",path:`${u}.name`,message:"Declared coupling name is required."}),!Array.isArray(l.files)||l.files.length<2)n.push({level:"error",path:`${u}.files`,message:"Declared coupling needs at least two files."});else for(let[d,m]of l.files.entries())!m||m.trim()===""?n.push({level:"error",path:`${u}.files[${d}]`,message:"Declared coupling file path is required."}):t.projectRoot&&!en(nr(t.projectRoot,m))&&n.push({level:"warning",path:`${u}.files[${d}]`,message:`Declared coupling file does not exist: ${m}`});l.reason!==void 0&&l.reason.trim()===""&&n.push({level:"error",path:`${u}.reason`,message:"Declared coupling reason cannot be blank."})}let a=t.now??new Date;e.suppressions!==void 0&&!Array.isArray(e.suppressions)&&n.push({level:"error",path:"suppressions",message:"Must be an array."});for(let[c,l]of(Array.isArray(e.suppressions)?e.suppressions:[]).entries()){let u=`suppressions[${c}]`;if(!et(l)){n.push({level:"error",path:u,message:"Suppression must be an object."});continue}if((!l.reason||l.reason.trim()==="")&&n.push({level:"error",path:`${u}.reason`,message:"Suppression reason is required."}),l.id!==void 0&&l.id.trim()===""&&n.push({level:"error",path:`${u}.id`,message:"Suppression id cannot be blank."}),l.check!==void 0&&l.check.trim()===""&&n.push({level:"error",path:`${u}.check`,message:"Suppression check cannot be blank."}),!l.id&&(!l.check||!l.file)?n.push({level:"error",path:u,message:"Suppression must include id or both check and file."}):!l.id&&l.check&&l.file&&n.push({level:"warning",path:u,message:"Check+file suppressions waive every matching finding in that file; prefer a stable id when available."}),l.file!==void 0&&(l.file.trim()===""?n.push({level:"error",path:`${u}.file`,message:"Suppression file path cannot be blank."}):t.projectRoot&&!en(nr(t.projectRoot,l.file))&&n.push({level:"warning",path:`${u}.file`,message:`Suppression file does not exist: ${l.file}`})),l.expiresAt){let d=Date.parse(l.expiresAt);Number.isNaN(d)?n.push({level:"error",path:`${u}.expiresAt`,message:"Must be an ISO date string."}):d<=a.getTime()&&n.push({level:"warning",path:`${u}.expiresAt`,message:"Suppression has expired."})}}return PA(e,n,t),kA(e,n),n}function EA(e,t){if(e.architecture===void 0)return;if(!et(e.architecture)){t.push({level:"error",path:"architecture",message:"Must be an object."});return}let n=e.architecture.boundaries;if(!Array.isArray(n)||n.length===0){t.push({level:"error",path:"architecture.boundaries",message:"Must be a non-empty array."});return}let r=new Set,i=new Set;for(let[a,c]of n.entries()){let l=`architecture.boundaries[${a}]`;if(!et(c)){t.push({level:"error",path:l,message:"Architecture boundary must be an object."});continue}let u=c.name;typeof u!="string"||u.trim()===""?t.push({level:"error",path:`${l}.name`,message:"Boundary name is required."}):r.has(u)?t.push({level:"error",path:`${l}.name`,message:`Duplicate boundary name: ${u}`}):r.add(u);let d=c.subUnits;d!==void 0&&d!=="directory"&&d!=="file"&&t.push({level:"error",path:`${l}.subUnits`,message:"Must be 'directory' or 'file'."});let m=c.maxFiles;m!==void 0&&(typeof m!="number"||!Number.isInteger(m)||m<0)&&t.push({level:"error",path:`${l}.maxFiles`,message:"Must be a non-negative integer."});let f=c.paths;if(!Array.isArray(f)||f.length===0){t.push({level:"error",path:`${l}.paths`,message:"Boundary paths must be a non-empty array."});continue}for(let[p,g]of f.entries()){let y=`${l}.paths[${p}]`;if(typeof g!="string"||g.trim()===""){t.push({level:"error",path:y,message:"Boundary path must be a non-empty string."});continue}DA(g)||t.push({level:"error",path:y,message:"Boundary path must be project-relative and may use only one trailing /* or /** glob."}),i.has(g)?t.push({level:"error",path:y,message:`Duplicate boundary path: ${g}`}):i.add(g)}}let o=e.architecture.allowedDependencies;if(o!==void 0&&!et(o))t.push({level:"error",path:"architecture.allowedDependencies",message:"Must be an object keyed by boundary name."});else if(et(o))for(let[a,c]of Object.entries(o)){let l=`architecture.allowedDependencies.${a}`;if(r.has(a)||t.push({level:"error",path:l,message:`Unknown source boundary: ${a}`}),!Array.isArray(c)){t.push({level:"error",path:l,message:"Dependency row must be an array."});continue}let u=new Set;for(let[d,m]of c.entries()){let f=`${l}[${d}]`;typeof m!="string"||m.trim()===""?t.push({level:"error",path:f,message:"Target boundary name is required."}):r.has(m)?u.has(m)?t.push({level:"error",path:f,message:`Duplicate target boundary: ${m}`}):u.add(m):t.push({level:"error",path:f,message:`Unknown target boundary: ${m}`})}}e.architecture.requireAcyclic!==void 0&&typeof e.architecture.requireAcyclic!="boolean"&&t.push({level:"error",path:"architecture.requireAcyclic",message:"Must be a boolean."});for(let a of["requireResolvedBoundaries","requireMinimalPolicy"])e.architecture[a]!==void 0&&typeof e.architecture[a]!="boolean"&&t.push({level:"error",path:`architecture.${a}`,message:"Must be a boolean."});for(let a of["maxBoundaryFanOut","maxBoundaryFiles"]){let c=e.architecture[a];c!==void 0&&(typeof c!="number"||!Number.isInteger(c)||c<0)&&t.push({level:"error",path:`architecture.${a}`,message:"Must be a non-negative integer."})}let s=e.architecture.testPaths;if(s!==void 0&&(!Array.isArray(s)||s.some(a=>typeof a!="string"))&&t.push({level:"error",path:"architecture.testPaths",message:"Must be an array of strings."}),e.architecture.requireCompletePolicy!==void 0&&typeof e.architecture.requireCompletePolicy!="boolean")t.push({level:"error",path:"architecture.requireCompletePolicy",message:"Must be a boolean."});else if(e.architecture.requireCompletePolicy===!0){let a=et(o)?o:{};for(let c of[...r].sort())Object.hasOwn(a,c)||t.push({level:"error",path:`architecture.allowedDependencies.${c}`,message:"A dependency row is required by architecture.requireCompletePolicy."})}}function DA(e){let t=e.replace(/\\/g,"/");if(t.startsWith("/")||t==="."||t===".."||t.split("/").includes(".."))return!1;let n=t.replace(/\/\*\*?$/,"");return n.length>0&&!/[*?[\]]/.test(n)}function kA(e,t){let n=e.docs?.snapshotPaths;if(n!==void 0){if(!Array.isArray(n)){t.push({level:"error",path:"docs.snapshotPaths",message:"Must be an array."});return}for(let[r,i]of n.entries())(typeof i!="string"||i.trim()==="")&&t.push({level:"error",path:`docs.snapshotPaths[${r}]`,message:"Snapshot path glob must be a non-empty string."})}}function PA(e,t,n){if(e.coverageContracts!==void 0){if(!Array.isArray(e.coverageContracts)){t.push({level:"error",path:"coverageContracts",message:"Must be an array."});return}for(let[r,i]of e.coverageContracts.entries()){let o=`coverageContracts[${r}]`;if(!et(i)){t.push({level:"error",path:o,message:"Coverage contract must be an object."});continue}(typeof i.name!="string"||i.name.trim()==="")&&t.push({level:"error",path:`${o}.name`,message:"Coverage contract name is required."}),typeof i.file!="string"||i.file.trim()===""?t.push({level:"error",path:`${o}.file`,message:"Coverage contract file is required."}):n.projectRoot&&!en(nr(n.projectRoot,i.file))&&t.push({level:"warning",path:`${o}.file`,message:`Coverage contract file does not exist: ${i.file}`}),Wy(t,i.keys,`${o}.keys`,IA,"Unknown coverage-contract key extractor type."),Wy(t,i.mustEqual,`${o}.mustEqual`,wA,"Unknown coverage-contract ground-truth source type."),i.allowExtra!==void 0&&typeof i.allowExtra!="boolean"&&t.push({level:"error",path:`${o}.allowExtra`,message:"Must be a boolean."})}}}function Wy(e,t,n,r,i){if(!et(t)){e.push({level:"error",path:n,message:'Must be an object with a "type" field.'});return}if(typeof t.type!="string"||!r.has(t.type)){e.push({level:"error",path:`${n}.type`,message:`${i} Got: ${String(t.type)}`});return}let o={"object-literal-keys":["identifier"],"string-array":["identifier"],"markdown-list":["marker"],"top-level-dirs":["path"],"file-glob":["pattern"],"registered-commands":[],"builtin-skills":[]};for(let s of o[t.type]??[])(typeof t[s]!="string"||t[s].length===0)&&e.push({level:"error",path:`${n}.${s}`,message:`"${t.type}" requires a non-empty string "${s}".`})}function Oee(e){return{...sA,...e.watch}}function jee(e,t){let n=nr(e,Hr);return en(n)||Pu(n,JSON.stringify({languages:t,watch:{enabled:!0,debounceMs:Gy,cooldownMs:zy,gitPollMs:2e3,idleTimeoutMs:Vy,autoRefresh:!0}},null,2)+`
|
|
368
|
+
`),n}function Bee(e,t,n){let r=nr(e,Hr),i={...t,languages:[...n]},o=!en(r)||JSON.stringify(i)!==JSON.stringify(t);return o&&Pu(r,JSON.stringify(i,null,2)+`
|
|
369
|
+
`),{configPath:r,config:i,changed:o}}function $ee(e,t,n){let r=nr(e,Hr),i={...t,watch:{...t.watch,enabled:n,...n&&t.watch?.autoRefresh===void 0?{autoRefresh:!0}:{}}},o=!en(r)||JSON.stringify(i)!==JSON.stringify(t);return o&&Pu(r,JSON.stringify(i,null,2)+`
|
|
370
|
+
`),{configPath:r,config:i,changed:o}}function TA(e,t){if(!et(e))return;let n=e;if(ve(t,n,"",aA),ve(t,n.watch,"watch",cA),ve(t,n.hooks,"hooks",lA),ve(t,n.entryRoots,"entryRoots",uA),ve(t,n.semantic,"semantic",dA),ve(t,n.semantic?.typescript,"semantic.typescript",mA),ve(t,n.semantic?.rust,"semantic.rust",fA),ve(t,n.locality,"locality",gA),ve(t,n.architecture,"architecture",hA),ve(t,n.docs,"docs",bA),Array.isArray(n.architecture?.boundaries))for(let[r,i]of n.architecture.boundaries.entries())ve(t,i,`architecture.boundaries[${r}]`,yA);if(et(n.indexer)){ve(t,n.indexer,"indexer",Uy);for(let[r,i]of Object.entries(n.indexer))Uy.has(r)&&ve(t,i,`indexer.${r}`,pA)}if(Array.isArray(n.declaredCouplings))for(let[r,i]of n.declaredCouplings.entries())ve(t,i,`declaredCouplings[${r}]`,SA);if(Array.isArray(n.suppressions))for(let[r,i]of n.suppressions.entries())ve(t,i,`suppressions[${r}]`,CA);if(Array.isArray(n.coverageContracts))for(let[r,i]of n.coverageContracts.entries()){let o=`coverageContracts[${r}]`;ve(t,i,o,xA),et(i)&&(ve(t,i.keys,`${o}.keys`,vA),ve(t,i.mustEqual,`${o}.mustEqual`,RA))}}function ve(e,t,n,r){if(et(t))for(let i of Object.keys(t))r.has(i)||e.push({level:"warning",path:n?`${n}.${i}`:i,message:"Unknown config key."})}function et(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import{existsSync as ab,readFileSync as JA}from"fs";import{execFileSync as FA}from"child_process";import{existsSync as _A,readdirSync as Yy}from"fs";import{extname as Xy,join as Qy}from"path";var Zy=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),LA=[{language:"typescript",files:["tsconfig.json","tsconfig.base.json"],extensions:[".ts",".tsx",".mts",".cts"]},{language:"rust",files:["Cargo.toml"],extensions:[".rs"]},{language:"go",files:["go.mod"],extensions:[".go"]},{language:"java",files:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java"]},{language:"kotlin",files:["build.gradle.kts"],extensions:[".kt",".kts"]},{language:"scala",files:["build.sbt"],extensions:[".scala"]},{language:"clojure",files:["deps.edn","project.clj","bb.edn","shadow-cljs.edn"],extensions:[".clj",".cljs",".cljc"]},{language:"python",files:["pyproject.toml","setup.py","setup.cfg","Pipfile"],extensions:[".py",".pyi"]},{language:"ruby",files:["Gemfile"],extensions:[".rb"]},{language:"cpp",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"]},{language:"c",files:["compile_commands.json","CMakeLists.txt","Makefile"],extensions:[".c",".h"]},{language:"csharp",globs:["*.csproj","*.sln"],extensions:[".cs"]},{language:"vb",globs:["*.vbproj"],extensions:[".vb"]},{language:"dart",files:["pubspec.yaml"],extensions:[".dart"]},{language:"php",files:["composer.json"],extensions:[".php"]},{language:"javascript",files:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]}];function Vi(e){let t=[],n=NA(e),r=jA(e);for(let i of LA){if(AA(e,i.files)){t.push(i.language);continue}if(MA(n,i.globs)){t.push(i.language);continue}$A(r,i.extensions)&&t.push(i.language)}return t.includes("typescript")&&Jy(t,"javascript"),t.includes("cpp")&&!r.has(".c")&&Jy(t,"c"),t}function NA(e){try{return Yy(e)}catch{return[]}}function AA(e,t){return t?.length?t.some(n=>_A(Qy(e,n))):!1}function MA(e,t){return t?.length?e.some(n=>t.some(r=>OA(n,r))):!1}function OA(e,t){if(t==="*")return!0;if(!t.includes("*"))return e===t;let[n,r]=t.split("*");return e.startsWith(n??"")&&e.endsWith(r??"")}function jA(e){let t=BA(e);if(t)return t;let n=new Set,r=[e];for(;r.length>0;){let i=r.pop();if(!i)continue;let o;try{o=Yy(i,{withFileTypes:!0})}catch{continue}for(let s of o){if(s.name.startsWith(".")&&!s.name.endsWith("proj")&&!s.name.endsWith("sln")&&s.isDirectory())continue;let a=Qy(i,s.name);if(s.isDirectory()){Zy.has(s.name)||r.push(a);continue}let c=Xy(s.name).toLowerCase();c&&n.add(c)}}return n}function BA(e){try{let t=FA("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}),n=new Set;for(let r of t.split(`
|
|
371
|
+
`)){if(!r||r.split("/").some(o=>Zy.has(o)))continue;let i=Xy(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function $A(e,t){return t?.length?t.some(n=>e.has(n)):!1}function Jy(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{createHash as HA}from"crypto";import{copyFileSync as eb,existsSync as Dn,linkSync as UA,mkdirSync as tb,readFileSync as ib,readdirSync as nb,renameSync as Fu,rmSync as da,statSync as WA}from"fs";import{basename as ua,dirname as qi,join as Ge,relative as rb}from"path";var Ur=1,ma=".scipquery-generations";function ob(e){let t=fa(e.outputDb),n=GA(e,t);e.onStage?.("after-recovery-retained"),e.preserveOutputScip||Tu(e.tempOutputScip,e.outputScip),e.onStage?.("after-scip-handoff"),Tu(e.tempOutputDb,e.outputDb),e.onStage?.("after-database-handoff"),Tu(e.tempMetaPath,e.metaPath),e.onStage?.("after-metadata-handoff");let r=pa(e.metaPath,e.outputDb),i={version:Ur,currentGeneration:r,...n?{previousGeneration:n}:{},...e.publication?{publication:e.publication}:{},publishedAt:(e.now??(()=>new Date))().toISOString()};return Fe(Ge(t,"state.json"),i,{spacing:2,trailingNewline:!0}),{currentGeneration:r,...n?{previousGeneration:n}:{}}}function sb(e){try{let t=JSON.parse(ib(Ge(fa(e),"state.json"),"utf8"));return t.version!==Ur||typeof t.currentGeneration!="string"||!t.currentGeneration||typeof t.publishedAt!="string"||!Number.isFinite(Date.parse(t.publishedAt))||!qA(t.previousGeneration)||!KA(t.publication)?null:t}catch{return null}}function Yee(e,t,n=()=>new Date){if(!Dn(e)||!Dn(t))throw new Error("metadata-only generation refresh requires stable database and metadata files");let r=sb(e),i={version:Ur,currentGeneration:pa(t,e),...r?.previousGeneration?{previousGeneration:r.previousGeneration}:{},...r?.publication?{publication:r.publication}:{},publishedAt:n().toISOString()};return Fe(Ge(fa(e),"state.json"),i,{spacing:2,trailingNewline:!0}),i}function Ki(e,t=Ge(qi(e),"meta.json")){let n=Ge(fa(e),"state.json");if(!Dn(n))return{state:"legacy",statePath:n};let r=sb(e);if(!r)return{state:"invalid",statePath:n,reason:"generation state is malformed"};try{let i=pa(t,e),o=r.currentGeneration===i,s=r.previousGeneration?Dn(Ge(qi(e),r.previousGeneration.databasePath)):!0;return!o||!s?{state:"drifted",statePath:n,currentMatches:o,recoveryExists:s,generation:r,reason:o?"retained recovery database is missing":"stable database or metadata no longer matches the published generation"}:{state:"current",statePath:n,currentMatches:o,recoveryExists:s,generation:r}}catch(i){return{state:"drifted",statePath:n,currentMatches:!1,recoveryExists:!1,generation:r,reason:i instanceof Error?i.message:String(i)}}}function fa(e){return Ge(qi(e),ma)}function GA(e,t){if(!Dn(e.outputDb))return;let n=pa(e.metaPath,e.outputDb),r=Ge(t,n),i=Ge(r,ua(e.outputDb)),o=Dn(e.metaPath)?Ge(r,ua(e.metaPath)):void 0;if(!Dn(i)){let s=`${r}.${process.pid}.${Date.now()}.tmp`;da(s,{recursive:!0,force:!0}),tb(s,{recursive:!0});let a=Ge(s,ua(e.outputDb));try{UA(e.outputDb,a)}catch{eb(e.outputDb,a)}o&&eb(e.metaPath,Ge(s,ua(e.metaPath))),tb(t,{recursive:!0}),Fu(s,r)}return zA(t,n),{generationIdentity:n,databasePath:rb(qi(e.outputDb),i),...o?{metadataPath:rb(qi(e.outputDb),o)}:{}}}function zA(e,t){for(let n of nb(e,{withFileTypes:!0}))!n.isDirectory()||n.name===t||n.name.endsWith(".tmp")||da(Ge(e,n.name),{recursive:!0,force:!0});for(let n of nb(e,{withFileTypes:!0}))n.isDirectory()&&n.name.endsWith(".tmp")&&da(Ge(e,n.name),{recursive:!0,force:!0})}function pa(e,t){let n=HA("sha256").update(`sqlite-generation-v${Ur}\0`);Dn(e)&&n.update(VA(ib(e,"utf8")));let r=WA(t);return n.update(`\0${r.size}`),n.digest("hex")}function VA(e){try{let t=JSON.parse(e);if((t.version===2||t.version===3)&&t.status==="complete"&&typeof t.updatedAt=="string"&&t.fingerprint!==void 0)return JSON.stringify({version:t.version,status:t.status,updatedAt:t.updatedAt,fingerprint:t.fingerprint,indexedLanguages:t.indexedLanguages,scipCompanion:t.scipCompanion})}catch{}return e}function Tu(e,t){da(`${t}.tmp-replace`,{force:!0}),Fu(e,`${t}.tmp-replace`),Fu(`${t}.tmp-replace`,t)}function qA(e){if(e===void 0)return!0;if(!e||typeof e!="object")return!1;let t=e;return typeof t.generationIdentity=="string"&&!!t.generationIdentity&&typeof t.databasePath=="string"&&!!t.databasePath&&(t.metadataPath===void 0||typeof t.metadataPath=="string"&&!!t.metadataPath)}function KA(e){if(e===void 0)return!0;if(!e||typeof e!="object")return!1;let t=e,n=[t.converterDurationMs,t.affectedDocumentCount,t.changedDocumentCount,t.producerDurationMs,t.materializationDurationMs,t.patchDurationMs].filter(r=>r!==void 0);return(t.mode==="incremental"||t.mode==="full")&&t.validation==="passed"&&t.converterDurationMs!==void 0&&n.every(r=>typeof r=="number"&&Number.isFinite(r)&&r>=0)&&(t.scipCompanion===void 0||t.scipCompanion==="current"||t.scipCompanion==="deferred")&&(t.typescriptOverlayGeneration===void 0||typeof t.typescriptOverlayGeneration=="string"&&!!t.typescriptOverlayGeneration)&&(t.scipCompanion!=="deferred"||!!t.typescriptOverlayGeneration)&&(t.fallbackReason===void 0||typeof t.fallbackReason=="string")}function cb(e,t,n){let r=new Date().toISOString();if(!ab(n.dbPath))return{state:"missing",checkedAt:r,metaPath:n.metaPath,reason:"No SQLite index database exists.",remedy:"Run: scip-query reindex"};if(!ab(n.metaPath))return{state:"unknown",checkedAt:r,metaPath:n.metaPath,reason:"No reindex metadata file exists next to the SQLite index.",remedy:"Run: scip-query reindex"};try{let i=JSON.parse(JA(n.metaPath,"utf-8")),o=t.languages??Vi(e),s=YA(e,o,t),a=Array.isArray(i.indexedLanguages)?[...i.indexedLanguages].sort():[],c=(i.version===2||i.version===3)&&i.status==="complete"&&JSON.stringify(i.fingerprint)===JSON.stringify(s)&&JSON.stringify(a)===JSON.stringify(s.languages),l=Ki(n.dbPath,n.metaPath),u=l.state==="invalid"||l.state==="drifted",d=c&&!u;return{state:d?"fresh":"stale",checkedAt:r,metaPath:n.metaPath,updatedAt:i.updatedAt,lastRefresh:i.lastRefresh,reason:u?`SQLite generation requires repair: ${l.reason}`:c?"Index metadata fingerprint matches current source files.":"Index metadata fingerprint differs from current source files.",remedy:d?void 0:"Run: scip-query reindex"}}catch(i){return{state:"unknown",checkedAt:r,metaPath:n.metaPath,reason:`Could not read reindex metadata: ${i instanceof Error?i.message:String(i)}`,remedy:"Run: scip-query reindex"}}}function YA(e,t,n){return Ti(e,t,{pnpmWorkspaces:n.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:n.indexer?.typescript?.projectMode,typescriptProjects:n.indexer?.typescript?.projects,clojureConfigPath:n.indexer?.clojure?.configPath})}import{createHash as qb,randomUUID as Zu}from"crypto";import{closeSync as Kb,constants as BM,copyFileSync as Wb,existsSync as Pn,lstatSync as $M,mkdirSync as tn,mkdtempSync as Jb,openSync as Yb,readdirSync as HM,readFileSync as tt,realpathSync as UM,renameSync as or,rmSync as kn,statSync as WM,unlinkSync as Ju,writeFileSync as Xb}from"fs";import{dirname as Qb,join as A,resolve as Ct}from"path";import{setTimeout as GM}from"timers/promises";import{pathToFileURL as Gb}from"url";import{deserializeSCIP as Zb}from"@c4312/scip";import zM from"better-sqlite3";import{randomUUID as lb}from"crypto";import{closeSync as ub,mkdirSync as XA,openSync as db,readFileSync as mb,unlinkSync as fb,writeFileSync as pb}from"fs";import{dirname as QA,join as ZA}from"path";function _u(e,t={}){return Lu(ZA(e,"gc.lock"),t)}function Lu(e,t={}){let n=t.waitMs??0,r=t.pollMs??10,i=t.now??Date.now,o=Date.now()+n;XA(QA(e),{recursive:!0});do{let s=lb();try{let a=db(e,"wx");try{let c={version:1,pid:process.pid,token:s,startedAt:new Date(i()).toISOString()};pb(a,`${JSON.stringify(c)}
|
|
372
|
+
`)}finally{ub(a)}return{release:()=>hb(e,s)}}catch(a){if(a.code!=="EEXIST")return null;let c=gb(e);if(c&&(c.pid===void 0||!dt(c.pid))){eM(e,c);continue}if(Date.now()>=o)return null;tM(Math.min(r,Math.max(1,o-Date.now())))}}while(Date.now()<=o);return null}function gb(e){try{let t=mb(e,"utf8"),n=JSON.parse(t),r=typeof n.pid=="number"&&Number.isSafeInteger(n.pid)&&n.pid>0?n.pid:void 0;return{raw:t,...r===void 0?{}:{pid:r}}}catch{return null}}function eM(e,t){let n=`${e}.reclaim`,r=lb(),i;try{i=db(n,"wx")}catch{return!1}try{pb(i,`${JSON.stringify({version:1,pid:process.pid,token:r,startedAt:new Date().toISOString()})}
|
|
373
|
+
`)}finally{ub(i)}try{let o=gb(e);return!o||o.raw!==t.raw||o.pid!==void 0&&dt(o.pid)?!1:(fb(e),!0)}catch{return!1}finally{hb(n,r)}}function hb(e,t){try{let n=JSON.parse(mb(e,"utf8"));n.pid===process.pid&&n.token===t&&fb(e)}catch{}}function tM(e){let t=new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));Atomics.wait(t,0,0,e)}import{lstatSync as hM,readdirSync as yM}from"fs";import{join as bM,relative as SM,resolve as Uu,sep as CM}from"path";import{createHash as nM}from"crypto";import{existsSync as Au,mkdirSync as rM,readFileSync as ga,readdirSync as ute,renameSync as iM,rmSync as dte,writeFileSync as oM}from"fs";import{join as Wr}from"path";import{create as bb,fromBinary as Sb,toBinary as sM}from"@bufbuild/protobuf";import{deserializeSCIP as ha,DocumentSchema as Mu,IndexSchema as Cb,serializeSCIP as xb}from"@c4312/scip";var ya=1,Ji="typescript-scip-fragments";function hte(e){if(e.length===0)throw new Error("affected TypeScript mini index requires documents");let t=new Set,n=[];for(let o of e){let s=rr(o.relativePath);if(t.has(s))throw new Error(`duplicate TypeScript fragment replacement: ${s}`);if(t.add(s),o.bytes===null)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${s}`);let a=Sb(Mu,o.bytes);if(a.relativePath!==s)throw new Error(`TypeScript fragment path mismatch: expected ${s}, got ${a.relativePath}`);n.push(a)}let r=xb(bb(Cb,{documents:n,externalSymbols:[]})),i=ha(r);if(i.documents.length!==n.length||i.externalSymbols.length!==0)throw new Error("affected TypeScript SCIP index failed structural verification");return r}function ba(e){let t=Wr(e,Ji);return{rootDir:t,blobDir:Wr(t,"blobs"),generationDir:Wr(t,"generations")}}function aM(e){let t=ha(e.indexBytes);Tb(t.metadata,Fb(e)),Pb(t.externalSymbols);let n=new Set,r=[];for(let o of t.documents){let s=rr(o.relativePath);if(n.has(s))throw new Error(`duplicate TypeScript SCIP document path: ${s}`);n.add(s);let a=sM(Mu,o),c=e.documentIdentities.get(s)??(e.allowUntrackedDocuments?ir(JSON.stringify({version:1,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,untrackedDocument:s,contentHash:ir(a)})):null);if(!c)throw new Error(`missing TypeScript document identity: ${s}`);r.push(wb(e.cacheDir,{relativePath:s,bytes:a,occurrences:o.occurrences.length,symbols:o.symbols.length,referenceFragments:[]},c))}let i=Eb(e,r);return Db(e.cacheDir,i),i}function yte(e){let t=ba(e.cacheDir);if(!Au(Ou(t,e.generationIdentity)))return aM(e);let n=vb({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity});if(!e.allowUntrackedDocuments&&n.manifest.documents.length!==e.documentIdentities.size)throw new Error("TypeScript fragment generation document identities changed");for(let r of n.manifest.documents){let i=e.documentIdentities.get(r.relativePath);if(!(i===void 0&&e.allowUntrackedDocuments)&&i!==r.documentIdentity)throw new Error(`TypeScript fragment generation document identity changed: ${r.relativePath}`)}return n.manifest}function bte(e){let t=vb({cacheDir:e.cacheDir,generationIdentity:e.previousGenerationIdentity,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity}).manifest,n=new Map(t.documents.map(o=>[o.relativePath,o])),r=new Set;for(let o of e.fragments){let s=rr(o.relativePath);if(r.has(s))throw new Error(`duplicate TypeScript fragment replacement: ${s}`);if(r.add(s),!n.has(s))throw new Error(`TypeScript fragment replacement has no prior document: ${s}`);let a=e.documentIdentities.get(s);if(!a)throw new Error(`missing TypeScript document identity: ${s}`);o.bytes===null?n.delete(s):n.set(s,wb(e.cacheDir,o,a))}if(r.size===0)throw new Error("TypeScript fragment generation requires at least one replacement");let i=Eb(e,[...n.values()]);return Db(e.cacheDir,i),i}function vb(e){let t=ba(e.cacheDir),n=Ou(t,e.generationIdentity),r;try{r=kb(ga(n,"utf8"))}catch(o){throw new Error(`TypeScript fragment generation is unavailable: ${o instanceof Error?o.message:String(o)}`,{cause:o})}if(r.generationIdentity!==e.generationIdentity)throw new Error("TypeScript fragment generation identity does not match its manifest path");if(e.producerIdentity&&r.producerIdentity!==e.producerIdentity)throw new Error("TypeScript fragment producer identity changed");if(e.projectIdentity&&r.projectIdentity!==e.projectIdentity)throw new Error("TypeScript fragment project identity changed");let i=new Map;for(let o of r.documents){let s=Wr(t.blobDir,`${o.blobHash}.scipdoc`),a=ga(s);if(a.byteLength!==o.byteLength||ir(a)!==o.blobHash)throw new Error(`TypeScript fragment blob is corrupt: ${o.relativePath}`);i.set(o.relativePath,a)}return{manifest:r,fragments:i}}function Rb(e){let t=Ib(e);return Nu(t.baseIndex,t.completeDocuments,"assembled")}function Ste(e){let t=Ib(e);return cM(t.deletedAffectedPaths),{completeIndexBytes:Nu(t.baseIndex,t.completeDocuments,"assembled"),affectedIndexBytes:Nu(t.baseIndex,t.affectedDocuments,"affected")}}function Ib(e){let t=ha(e.baseIndexBytes);Tb(t.metadata,Fb(e)),Pb(t.externalSymbols);let n=new Map;for(let a of e.fragments){let c=rr(a.relativePath);if(n.has(c))throw new Error(`duplicate TypeScript fragment replacement: ${c}`);n.set(c,a)}if(n.size===0)throw new Error("TypeScript index assembly requires at least one replacement");let r=new Set,i=[],o=[],s=[];for(let a of t.documents){let c=rr(a.relativePath);if(r.has(c))throw new Error(`duplicate TypeScript SCIP document path: ${c}`);r.add(c);let l=n.get(c);if(!l){i.push(a);continue}if(n.delete(c),l.bytes===null){s.push(c);continue}let u=Sb(Mu,l.bytes);if(u.relativePath!==c)throw new Error(`TypeScript fragment path mismatch: expected ${c}, got ${u.relativePath}`);i.push(u),o.push(u)}if(n.size>0)throw new Error(`TypeScript fragment replacement has no prior document: ${[...n.keys()].sort()[0]}`);return{baseIndex:t,completeDocuments:i,affectedDocuments:o,deletedAffectedPaths:s}}function Nu(e,t,n){let r=xb(bb(Cb,{metadata:e.metadata,documents:t,externalSymbols:[]})),i=ha(r);if(i.documents.length!==t.length||i.externalSymbols.length!==0)throw new Error(`${n} TypeScript SCIP index failed structural verification`);return r}function cM(e){if(e.length>0)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${e[0]}`)}function wb(e,t,n){if(t.bytes===null)throw new Error(`cannot persist an empty TypeScript fragment: ${t.relativePath}`);let r=rr(t.relativePath),i=Buffer.from(t.bytes),o=ir(i),s=ba(e);rM(s.blobDir,{recursive:!0});let a=Wr(s.blobDir,`${o}.scipdoc`);if(Au(a)){let c=ga(a);if(c.byteLength!==i.byteLength||ir(c)!==o)throw new Error(`existing TypeScript fragment blob is corrupt: ${r}`)}else{let c=`${a}.${process.pid}.${Date.now()}.tmp`;oM(c,i),iM(c,a)}return{relativePath:r,blobHash:o,byteLength:i.byteLength,documentIdentity:n}}function Eb(e,t){if(!e.producerIdentity||!e.projectIdentity||!e.generationIdentity)throw new Error("TypeScript fragment generation identities must be non-empty");let n=[...t].sort((r,i)=>r.relativePath.localeCompare(i.relativePath));if(new Set(n.map(r=>r.relativePath)).size!==n.length)throw new Error("TypeScript fragment generation contains duplicate document paths");return{version:ya,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,createdAt:(e.now??(()=>new Date))().toISOString(),documents:n}}function Db(e,t){let n=ba(e),r=Ou(n,t.generationIdentity);if(Au(r)){let i=kb(ga(r,"utf8"));if(yb(i)!==yb(t))throw new Error(`TypeScript fragment generation is immutable: ${t.generationIdentity}`);return}Fe(r,t,{spacing:2,trailingNewline:!0})}function yb(e){return ir(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,documents:e.documents}))}function kb(e){let t=JSON.parse(e);if(t.version!==ya||typeof t.producerIdentity!="string"||typeof t.projectIdentity!="string"||typeof t.generationIdentity!="string"||typeof t.createdAt!="string"||!Number.isFinite(Date.parse(t.createdAt))||!Array.isArray(t.documents))throw new Error("invalid TypeScript fragment generation manifest");let n=new Set;for(let r of t.documents){if(!r||typeof r.relativePath!="string"||typeof r.blobHash!="string"||!/^[a-f0-9]{64}$/.test(r.blobHash)||typeof r.byteLength!="number"||!Number.isInteger(r.byteLength)||r.byteLength<0||typeof r.documentIdentity!="string"||!r.documentIdentity)throw new Error("invalid TypeScript fragment record");if(rr(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript fragment record");n.add(r.relativePath)}return t}function Ou(e,t){return Wr(e.generationDir,lM(t))}function lM(e){if(!e)throw new Error("TypeScript fragment generation identity must be non-empty");return`${ir(e)}.json`}function Pb(e){if(e.length>0)throw new Error("scip-typescript emitted external symbols; incremental document assembly is unsupported")}function Tb(e,t){if(!e||typeof e!="object")throw new Error("TypeScript SCIP shard has no producer metadata");let n=e,r=n.toolInfo??n.tool_info;if(!r||typeof r!="object")throw new Error("TypeScript SCIP shard has no producer tool identity");let i=r;if(i.name!=="scip-typescript"||i.version!==t)throw new Error("TypeScript SCIP shard producer identity changed")}function Fb(e){let t=e.packageVersion??e.runtime?.packageVersion;if(!t)throw new Error("scip-typescript package version is unavailable");return t}function rr(e){if(!e||e.startsWith("/")||e.startsWith("\\")||e.includes("\\"))throw new Error(`invalid TypeScript SCIP document path: ${e}`);let t=e.split("/");if(t.includes("")||t.includes(".")||t.includes(".."))throw new Error(`invalid TypeScript SCIP document path: ${e}`);return e}function ir(e){return nM("sha256").update(e).digest("hex")}import{createHash as uM}from"crypto";import{existsSync as Yi,mkdirSync as dM,readFileSync as Qi,readdirSync as ju,renameSync as mM,rmSync as _b,writeFileSync as fM}from"fs";import{join as St}from"path";var Sa=1,Ete=64*1024*1024,Zi="typescript-scip-overlays";function Dte(e){let t=Nb(e.cacheDir,e.previousGenerationIdentity);if(!t&&!e.baseShardCurrent)throw new Error("deferred TypeScript SCIP base has no matching overlay generation");if(t&&(t.producerIdentity!==e.producerIdentity||t.projectIdentity!==e.projectIdentity))throw new Error("TypeScript overlay producer or project identity changed");let n=new Map((t?.overlays??[]).map(o=>[o.relativePath,o])),r=new Set;for(let o of e.fragments){let s=Hu(o.relativePath);if(r.has(s))throw new Error(`duplicate TypeScript overlay: ${s}`);r.add(s),n.set(s,pM(e.cacheDir,o))}if(r.size===0)throw new Error("TypeScript overlay generation requires affected documents");let i={version:Sa,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,baseGenerationIdentity:t?.baseGenerationIdentity??e.previousGenerationIdentity,generationIdentity:e.nextGenerationIdentity,createdAt:(e.now??(()=>new Date))().toISOString(),overlays:[...n.values()].sort((o,s)=>o.relativePath.localeCompare(s.relativePath))};return gM(e.cacheDir,i),i}function kte(e){let t=Nb(e.cacheDir,e.generationIdentity);if(!t)throw new Error("TypeScript overlay generation is unavailable");let n=t.overlays.map(r=>{if(r.blobHash===null)return{relativePath:r.relativePath,bytes:null,occurrences:0,symbols:0,referenceFragments:[]};let i=Qi(St(eo(e.cacheDir),"blobs",`${r.blobHash}.scipdoc`));if(i.byteLength!==r.byteLength||Xi(i)!==r.blobHash)throw new Error(`TypeScript overlay blob is corrupt: ${r.relativePath}`);return{relativePath:r.relativePath,bytes:i,occurrences:0,symbols:0,referenceFragments:[]}});return Rb({packageVersion:e.packageVersion,baseIndexBytes:e.baseIndexBytes,fragments:n})}function Pte(e,t){let n=eo(e),r=St(n,"generations");if(!Yi(r))return;let i=new Set(t.map($u)),o=new Set;for(let a of ju(r).filter(c=>i.has(c))){let c=Bu(Qi(St(r,a),"utf8"));for(let l of c.overlays)l.blobHash&&o.add(`${l.blobHash}.scipdoc`)}for(let a of ju(r))i.has(a)||_b(St(r,a),{force:!0});let s=St(n,"blobs");if(Yi(s))for(let a of ju(s))o.has(a)||_b(St(s,a),{force:!0})}function Nb(e,t){let n=St(eo(e),"generations",$u(t));if(!Yi(n))return null;let r=Bu(Qi(n,"utf8"));if(r.generationIdentity!==t)throw new Error("TypeScript overlay generation identity does not match its path");return r}function pM(e,t){let n=Hu(t.relativePath);if(t.bytes===null)return{relativePath:n,blobHash:null,byteLength:0};let r=Buffer.from(t.bytes),i=Xi(r),o=St(eo(e),"blobs");dM(o,{recursive:!0});let s=St(o,`${i}.scipdoc`);if(Yi(s)){let a=Qi(s);if(a.byteLength!==r.byteLength||Xi(a)!==i)throw new Error(`existing TypeScript overlay blob is corrupt: ${n}`)}else{let a=`${s}.${process.pid}.${Date.now()}.tmp`;fM(a,r),mM(a,s)}return{relativePath:n,blobHash:i,byteLength:r.byteLength}}function gM(e,t){let n=St(eo(e),"generations",$u(t.generationIdentity));if(Yi(n)){let r=Bu(Qi(n,"utf8"));if(Lb(r)!==Lb(t))throw new Error(`TypeScript overlay generation is immutable: ${t.generationIdentity}`);return}Fe(n,t,{spacing:2,trailingNewline:!0})}function Bu(e){let t=JSON.parse(e);if(t.version!==Sa||typeof t.producerIdentity!="string"||!t.producerIdentity||typeof t.projectIdentity!="string"||!t.projectIdentity||typeof t.baseGenerationIdentity!="string"||!t.baseGenerationIdentity||typeof t.generationIdentity!="string"||!t.generationIdentity||typeof t.createdAt!="string"||!Number.isFinite(Date.parse(t.createdAt))||!Array.isArray(t.overlays))throw new Error("invalid TypeScript overlay manifest");let n=new Set;for(let r of t.overlays){if(!r||typeof r.relativePath!="string"||r.blobHash!==null&&(typeof r.blobHash!="string"||!/^[a-f0-9]{64}$/.test(r.blobHash))||!Number.isInteger(r.byteLength)||r.byteLength<0||r.blobHash===null&&r.byteLength!==0)throw new Error("invalid TypeScript overlay record");if(Hu(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript overlay record");n.add(r.relativePath)}return t}function eo(e){return St(e,Zi)}function $u(e){if(!e)throw new Error("TypeScript overlay generation identity must be non-empty");return`${Xi(e)}.json`}function Lb(e){return Xi(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,baseGenerationIdentity:e.baseGenerationIdentity,generationIdentity:e.generationIdentity,overlays:e.overlays}))}function Hu(e){if(!e||e.startsWith("/")||e.includes("\\")||e.split("/").some(t=>!t||t==="."))throw new Error(`invalid TypeScript overlay path: ${e}`);if(e.split("/").includes(".."))throw new Error(`invalid TypeScript overlay path: ${e}`);return e}function Xi(e){return uM("sha256").update(e).digest("hex")}var to=1,Wu="language-indexes",Ab=["index.db","index.scip","meta.json"],Mb=[Wu,Ji,Zi];function Ca(e){let t=[];for(let n of Ab)xM(e,n),t.push(n);for(let n of Mb)Ob(e,n,t);return{version:to,files:t.sort()}}function xa(e){if(!e||e.includes("\0")||e.startsWith("/")||e.includes("\\"))throw new Error(`invalid index artifact path: ${e||"<empty>"}`);let t=e.split("/");if(t.some(r=>!r||r==="."||r===".."))throw new Error(`invalid index artifact path: ${e}`);let n=t[0];if(!Ab.includes(e)&&!Mb.includes(n))throw new Error(`index artifact path is not shareable: ${e}`);return e}function _t(e,t){let n=xa(t),r=Uu(e),i=Uu(r,...n.split("/"));if(i!==r&&!i.startsWith(`${r}${CM}`))throw new Error(`index artifact escapes cache: ${t}`);return i}function Ob(e,t,n){let r=bM(e,t),i;try{i=yM(r,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let o of i){let s=`${t}/${o.name}`;if(o.isSymbolicLink())throw new Error(`index artifact cannot be a symlink: ${s}`);o.isDirectory()?Ob(e,s,n):o.isFile()&&n.push(xa(s))}}function xM(e,t){let n=_t(e,t),r;try{r=hM(n)}catch{throw new Error(`required index artifact is missing: ${t}`)}if(!r.isFile()||r.isSymbolicLink())throw new Error(`required index artifact is not a regular file: ${t}`);if(SM(Uu(e),n).startsWith(".."))throw new Error(`index artifact escapes cache: ${t}`)}import{readFileSync as zu,writeFileSync as Vu}from"fs";import{create as no}from"@bufbuild/protobuf";import{deserializeSCIP as qu,serializeSCIP as Ku,DocumentSchema as PM,IndexSchema as Bb,MetadataSchema as TM,SymbolInformationSchema as FM}from"@c4312/scip";import{readFileSync as vM,writeFileSync as RM}from"fs";import{create as jb}from"@bufbuild/protobuf";import{deserializeSCIP as IM,DocumentSchema as wM,IndexSchema as EM,serializeSCIP as DM,SymbolRole as kM}from"@c4312/scip";function Bte(e){let t;try{t=IM(vM(e))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=Gu(t);return n.removedDefinitionOccurrences>0&&RM(e,Buffer.from(DM(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function Gu(e){let t=new Set;for(let o of e.documents)for(let s of o.symbols)s.symbol&&t.add(s.symbol);for(let o of e.externalSymbols)o.symbol&&t.add(o.symbol);let n=0,r=0,i=[];for(let o of e.documents){let s=o.occurrences.filter(a=>(a.symbolRoles&kM.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(jb(wM,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:jb(EM,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}function $b(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=LM(e),n=NM(e.flatMap(i=>i.documents??[])),r=Ub(e.flatMap(i=>i.externalSymbols??[]));return no(Bb,{metadata:t,documents:n,externalSymbols:r})}function zte(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>qu(zu(i))),r=$b(n);return Vu(t,Buffer.from(Ku(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Vte(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>qu(zu(i))),r=Gu($b(n));return Vu(t,Buffer.from(Ku(r.index))),{documentCount:r.index.documents.length,externalSymbolCount:r.index.externalSymbols.length,inputCount:e.length,removedDefinitionOccurrences:r.removedDefinitionOccurrences,touchedDocuments:r.touchedDocuments}}function _M(e,t,n){let r=e.metadata;if(!r)throw new Error("Cannot rebase a SCIP index without metadata");if(r.projectRoot!==t)throw new Error(`Cannot rebase SCIP project root: expected ${t}, got ${r.projectRoot}`);return no(Bb,{metadata:no(TM,{...r,projectRoot:n}),documents:e.documents,externalSymbols:e.externalSymbols})}function Hb(e,t,n){let r=qu(zu(e)),i=_M(r,t,n);Vu(e,Buffer.from(Ku(i)))}function LM(e){let t=e[0]?.metadata;if(!t)return;let n=t.projectRoot;for(let r of e.slice(1)){let i=r.metadata?.projectRoot;if(n&&i&&i!==n)throw new Error(`Cannot merge SCIP indexes with different project roots: ${n} vs ${i}`)}return t}function NM(e){let t=new Map;for(let n of e){let r=t.get(n.relativePath);if(!r){t.set(n.relativePath,n);continue}t.set(n.relativePath,no(PM,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:AM([...r.occurrences,...n.occurrences]),symbols:Ub([...r.symbols,...n.symbols]),text:OM(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function AM(e){let t=new Set,n=[];for(let r of e){let i=JSON.stringify(r);t.has(i)||(t.add(i),n.push(r))}return n}function Ub(e){let t=new Map;for(let n of e){let r=t.get(n.symbol);if(!r){t.set(n.symbol,n);continue}t.set(n.symbol,no(FM,{symbol:r.symbol,documentation:jM([...r.documentation,...n.documentation]),relationships:MM([...r.relationships,...n.relationships]),kind:r.kind||n.kind,displayName:r.displayName||n.displayName,enclosingSymbol:r.enclosingSymbol||n.enclosingSymbol,signatureDocumentation:r.signatureDocumentation??n.signatureDocumentation}))}return[...t.values()]}function MM(e){let t=new Set,n=[];for(let r of e){let i=[r.symbol,r.isReference?"1":"0",r.isImplementation?"1":"0",r.isTypeDefinition?"1":"0",r.isDefinition?"1":"0"].join("|");t.has(i)||(t.add(i),n.push(r))}return n}function OM(e,t){return e?t?e.length>=t.length?e:t:e:t}function jM(e){return[...new Set(e)]}var ed=1,zb="SCIP_QUERY_SHARED_CACHE",Yu=JSON.stringify({cliVersion:er,artifactCatalogVersion:to,sqliteGenerationStoreVersion:Ur,typescriptFragmentStoreVersion:ya,typescriptOverlayStoreVersion:Sa}),eS="manifest.json",tS="shared-cache.json",td=[Wu,Ji,Zi];function va(e,t){if(!e.clean||!e.treeOid)return;let n=oo(JSON.stringify({version:ed,repositoryId:e.repositoryId,treeOid:e.treeOid,fingerprint:t,producerIdentity:Yu}));return{repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,fingerprint:t,producerIdentity:Yu,generationId:n,repositoryCacheDir:zi(e.repositoryId)}}function nS(e,t,n){if(process.env[zb]==="0")return`${zb}=0`;if(!Eu(n))return"explicit cache or database override";if(Ct(t)!==Ct(A(aa(e),"index.db")))return"index database is outside the managed worktree cache"}function rS(e,t,n){if(!Eu(t))return;let r=n??yr(e);return r?A(zi(r.repositoryId),"evidence.db"):void 0}function sr(e,t=!0){let n=id(e),r;try{r=VM(tt(A(n,eS),"utf8"))}catch{return null}if(r.generationId!==e.generationId||r.repositoryId!==e.repositoryId||r.treeOid!==e.treeOid||r.producerIdentity!==e.producerIdentity||JSON.stringify(r.fingerprint)!==JSON.stringify(e.fingerprint))return null;if(!t)return r;try{for(let i of r.artifacts){let o=_t(n,i.path),s=WM(o);if(!s.isFile()||s.size!==i.size||oo(tt(o))!==i.sha256)return null}}catch{return null}return r}function iS(e){let t=sr(e.snapshot);if(t)return t;if(!Gr(e.sourceCacheDir,e.sourceProjectRoot,e.snapshot.fingerprint))throw new Error("source index is incomplete, incompatible, or corrupt");let n=Vb(e.sourceCacheDir);if(!n)throw new Error("source index artifacts are incomplete");let r=Ca(e.sourceCacheDir),i=A(e.snapshot.repositoryCacheDir,"generations");tn(i,{recursive:!0});let o=Jb(A(i,`.tmp-${process.pid}-`));try{let s=[];for(let d of r.files){let m=_t(e.sourceCacheDir,d),f=_t(o,d);io(m,f);let p=tt(f);s.push({path:d,size:p.byteLength,sha256:oo(p)})}let a=Zb(tt(A(o,"index.scip"))).metadata?.projectRoot;if(!a)throw new Error("shared SCIP generation has no project root metadata");let c=od(e.sourceProjectRoot);if(a!==c)throw new Error("shared SCIP generation root does not match its source worktree");if(Vb(e.sourceCacheDir)!==n||e.sourceStillValid&&!e.sourceStillValid())throw new Error("source index changed while staging a shared generation");let l={version:ed,artifactCatalogVersion:to,generationId:e.snapshot.generationId,repositoryId:e.snapshot.repositoryId,treeOid:e.snapshot.treeOid,fingerprint:e.snapshot.fingerprint,producerIdentity:e.snapshot.producerIdentity,sourceProjectRoot:e.sourceProjectRoot,scipProjectRoot:a,createdAt:(e.now??(()=>new Date))().toISOString(),artifacts:s.sort((d,m)=>d.path.localeCompare(m.path))};Fe(A(o,eS),l,{spacing:2,trailingNewline:!0});let u=id(e.snapshot);try{if(Pn(u)&&!sr(e.snapshot)){let d=`${u}.corrupt-${process.pid}-${Date.now()}`;or(u,d),kn(d,{recursive:!0,force:!0})}or(o,u)}catch(d){let m=sr(e.snapshot);if(m)return m;throw d}return l}finally{kn(o,{recursive:!0,force:!0})}}function Xu(e){let t=id(e.snapshot);tn(e.targetCacheDir,{recursive:!0});let n=Lu(A(e.targetCacheDir,"cache-lifecycle.lock"),{waitMs:3e4});if(!n)throw new Error("timed out waiting for another cache hydration");let r,i,o=!1;try{r=Jb(A(e.targetCacheDir,".shared-hydrate-")),ZM(e.manifest,e.snapshot);for(let c of e.manifest.artifacts){let l=_t(t,c.path),u=_t(r,c.path);io(l,u);let d=tt(u);if(d.byteLength!==c.size||oo(d)!==c.sha256)throw new Error(`shared artifact is corrupt: ${c.path}`)}let s=od(e.targetProjectRoot);if(s!==e.manifest.scipProjectRoot)for(let c of e.manifest.artifacts)c.path.endsWith(".scip")&&Hb(_t(r,c.path),e.manifest.scipProjectRoot,s);if(!Gr(r,e.targetProjectRoot,e.snapshot.fingerprint,!1))throw new Error("staged shared generation failed completeness or integrity validation");i=YM(e.targetCacheDir,r),o=!0,XM(r,e.targetCacheDir,i),ob({tempOutputScip:A(r,"index.scip"),tempOutputDb:A(r,"index.db"),tempMetaPath:A(r,"meta.json"),outputScip:A(e.targetCacheDir,"index.scip"),outputDb:A(e.targetCacheDir,"index.db"),metaPath:A(e.targetCacheDir,"meta.json"),now:e.now});let a=Ki(A(e.targetCacheDir,"index.db"),A(e.targetCacheDir,"meta.json"));if(a.state==="invalid"||a.state==="drifted")throw new Error(`hydrated SQLite generation failed validation: ${a.reason}`);Qu(e.snapshot,e.targetCacheDir,e.action??"attached",e.now)}catch(s){throw o&&i&&QM(e.targetCacheDir,i),s}finally{r&&kn(r,{recursive:!0,force:!0}),n.release()}}function oS(e,t,n,r){let i=nS(e,n.dbPath,t);if(i)return{kind:"bypassed",reason:i};try{let o=r??yr(e);if(!o)return{kind:"missed",reason:"Git worktree identity is unavailable"};if(!o.clean)return Ra(o,n.cacheDir,"missed",void 0,"worktree has uncommitted changes"),{kind:"missed",reason:"worktree has uncommitted changes"};let s=t.languages??Vi(e),a=Ti(e,s,aS(t)),c=va(o,a);if(!c)return{kind:"missed",reason:"clean committed snapshot is unavailable"};let l=sr(c);if(l)return Xu({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e}),{kind:"attached",generationId:c.generationId};let u=qM(c,e);return u?(l=u.manifest,Xu({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e,action:"peer-imported"}),{kind:"peer-imported",generationId:c.generationId,sourceProjectRoot:u.sourceProjectRoot}):(Ra(o,n.cacheDir,"missed",void 0,"no exact shared or peer generation exists"),{kind:"missed",reason:"no exact shared or peer generation exists"})}catch(o){return{kind:"failed",reason:o instanceof Error?o.message:String(o)}}}function nd(e,t,n,r){let i=nS(e,n.dbPath,t);if(i)return{kind:"bypassed",reason:i};try{let o=r??yr(e);if(!o)return{kind:"missed",reason:"Git worktree identity is unavailable"};if(!o.clean)return Ra(o,n.cacheDir,"missed",void 0,"worktree is not a clean committed snapshot"),{kind:"missed",reason:"worktree is not a clean committed snapshot"};let s=t.languages??Vi(e),a=Ti(e,s,aS(t)),c=va(o,a);if(!c)return Ra(o,n.cacheDir,"missed",void 0,"worktree is not a clean committed snapshot"),{kind:"missed",reason:"worktree is not a clean committed snapshot"};let l=sr(c);if(l)return Gr(n.cacheDir,e,a)?(Qu(c,n.cacheDir,"local-fresh"),{kind:"local-fresh"}):(Xu({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e}),{kind:"attached",generationId:c.generationId});let u=Ia(n.cacheDir);return u?.status!=="complete"||JSON.stringify(u.fingerprint)!==JSON.stringify(a)||JSON.stringify([...u.indexedLanguages??[]].sort())!==JSON.stringify([...s].sort())?{kind:"missed",reason:"local metadata does not match the clean worktree snapshot"}:Gr(n.cacheDir,e,a)?(iS({snapshot:c,sourceCacheDir:n.cacheDir,sourceProjectRoot:e,sourceStillValid:()=>{let d=yr(e);return(d?va(d,a):void 0)?.generationId===c.generationId}}),Qu(c,n.cacheDir,"built"),{kind:"built",generationId:c.generationId}):{kind:"missed",reason:"local index artifacts are incomplete or incompatible"}}catch(o){return{kind:"failed",reason:o instanceof Error?o.message:String(o)}}}async function pne(e,t={}){let n=t.timeoutMs??3e4,r=t.pollMs??100,i=t.now??Date.now,o=i()+n,s=A(e.repositoryCacheDir,"locks"),a=A(s,`${e.generationId}.lock`);for(tn(s,{recursive:!0});i()<=o;){if(sr(e))return{kind:"generation-ready"};let c=Zu();try{let l=Yb(a,"wx");try{Xb(l,`${JSON.stringify({version:1,pid:process.pid,token:c,generationId:e.generationId,startedAt:new Date(i()).toISOString()})}
|
|
374
|
+
`)}finally{Kb(l)}return{kind:"owner",release:()=>{try{let u=JSON.parse(tt(a,"utf8"));u.pid===process.pid&&u.token===c&&Ju(a)}catch{}}}}catch(l){if(l.code!=="EEXIST")return{kind:"timeout"};let u=cS(a);if(u&&(u.pid===void 0||!dt(u.pid))){JM(a,u);continue}await GM(r)}}return sr(e)?{kind:"generation-ready"}:{kind:"timeout"}}function Qu(e,t,n,r=void 0){let i={version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,localCacheDir:t,baseGenerationId:e.generationId,activeGenerationId:e.generationId,lastAction:n,lastSeenAt:(r??(()=>new Date))().toISOString()},o={...i,ownershipChecksum:rd(i)};return lS(e.repositoryCacheDir,o,!0),o}function Ra(e,t,n,r=void 0,i=void 0){let o={version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,localCacheDir:t,lastAction:n,...i?{lastReason:i}:{},lastSeenAt:(r??(()=>new Date))().toISOString()},s={...o,ownershipChecksum:rd(o)};return lS(zi(e.repositoryId),s,!1),s}function rd(e){return oo(JSON.stringify({version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:Ct(e.projectRoot),localCacheDir:Ct(e.localCacheDir)}))}function sS(e,t,n=void 0,r){try{let i=JSON.parse(tt(A(t,tS),"utf8"));if(i.version!==1||typeof i.repositoryId!="string"||!/^[a-f0-9]{24}$/.test(i.repositoryId)||typeof i.worktreeId!="string"||!/^[a-f0-9]{24}$/.test(i.worktreeId))return null;let o=A(zi(i.repositoryId),"worktrees",`${i.worktreeId}.json`),s=JSON.parse(tt(o,"utf8")),a=r??yr(e);if(!a?.clean||!a.treeOid||s.version!==1||s.repositoryId!==i.repositoryId||s.worktreeId!==i.worktreeId||s.repositoryId!==a.repositoryId||s.worktreeId!==a.worktreeId||Ct(s.projectRoot)!==Ct(a.projectRoot)||s.treeOid!==a.treeOid||Ct(s.localCacheDir)!==Ct(t)||s.ownershipChecksum!==rd(s))return null;let c=Ia(t);if(!e0(c?.fingerprint))return null;let l=va(a,c.fingerprint);if(!l||s.baseGenerationId!==l.generationId||s.activeGenerationId!==l.generationId||!Gr(t,e,l.fingerprint,!0,!1))return null;let u=(n??(()=>new Date))();if(Number.isFinite(Date.parse(s.lastSeenAt))&&u.getTime()-Date.parse(s.lastSeenAt)<6e4)return s;let d=_u(l.repositoryCacheDir,{waitMs:5e3});if(!d)return null;try{s.lastSeenAt=u.toISOString(),Fe(o,s,{spacing:2,trailingNewline:!0})}finally{d.release()}return s}catch{return null}}function VM(e){let t=JSON.parse(e);if(t.version!==ed||t.artifactCatalogVersion!==to||typeof t.generationId!="string"||!/^[a-f0-9]{64}$/.test(t.generationId)||typeof t.repositoryId!="string"||!/^[a-f0-9]{24}$/.test(t.repositoryId)||typeof t.treeOid!="string"||!t.treeOid||typeof t.producerIdentity!="string"||t.producerIdentity!==Yu||typeof t.sourceProjectRoot!="string"||typeof t.scipProjectRoot!="string"||typeof t.createdAt!="string"||!Number.isFinite(Date.parse(t.createdAt))||!t.fingerprint||!Array.isArray(t.artifacts))throw new Error("invalid shared generation manifest");let n=new Set;for(let r of t.artifacts){if(!r||typeof r.path!="string"||typeof r.size!="number"||r.size<0||typeof r.sha256!="string"||!/^[a-f0-9]{64}$/.test(r.sha256))throw new Error("invalid shared generation artifact");if(xa(r.path),n.has(r.path))throw new Error(`duplicate shared generation artifact: ${r.path}`);n.add(r.path)}for(let r of["index.db","index.scip","meta.json"])if(!n.has(r))throw new Error(`shared generation is missing ${r}`);return t}function io(e,t){tn(Qb(t),{recursive:!0});try{Wb(e,t,BM.COPYFILE_FICLONE)}catch{Wb(e,t)}}function qM(e,t){for(let n of vf(t)){if(Ct(n.path)===Ct(t))continue;let r=aa(n.path),i=Ia(r);if(!(i?.status!=="complete"||JSON.stringify(i.fingerprint)!==JSON.stringify(e.fingerprint)||JSON.stringify([...i.indexedLanguages??[]].sort())!==JSON.stringify([...e.fingerprint.languages].sort()))&&Gr(r,n.path,e.fingerprint))try{return{manifest:iS({snapshot:e,sourceCacheDir:r,sourceProjectRoot:n.path}),sourceProjectRoot:n.path}}catch{continue}}return null}function KM(e,t,n){tn(e,{recursive:!0}),Fe(A(e,tS),{version:1,repositoryId:t,worktreeId:n},{spacing:2,trailingNewline:!0})}function Vb(e){try{let t=Ca(e),n=qb("sha256");for(let r of t.files){let i=tt(_t(e,r));n.update(r).update("\0").update(String(i.byteLength)).update("\0").update(i).update("\0")}return n.digest("hex")}catch{return null}}function Ia(e){try{return JSON.parse(tt(A(e,"meta.json"),"utf8"))}catch{return}}function aS(e){return{pnpmWorkspaces:e.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:e.indexer?.typescript?.projectMode,typescriptProjects:e.indexer?.typescript?.projects,clojureConfigPath:e.indexer?.clojure?.configPath}}function id(e){return A(e.repositoryCacheDir,"generations",e.generationId)}function cS(e){try{let t=tt(e,"utf8"),n=JSON.parse(t),r=typeof n.pid=="number"&&Number.isSafeInteger(n.pid)&&n.pid>0?n.pid:void 0;return{raw:t,...r===void 0?{}:{pid:r}}}catch{return null}}function JM(e,t){let n=`${e}.reclaim`,r=Zu(),i;try{i=Yb(n,"wx")}catch{return!1}try{Xb(i,`${JSON.stringify({version:1,pid:process.pid,token:r,startedAt:new Date().toISOString()})}
|
|
375
|
+
`)}finally{Kb(i)}try{let o=cS(e);return!o||o.raw!==t.raw||o.pid!==void 0&&dt(o.pid)?!1:(Ju(e),!0)}catch{return!1}finally{try{let o=JSON.parse(tt(n,"utf8"));o.pid===process.pid&&o.token===r&&Ju(n)}catch{}}}function lS(e,t,n){let r=_u(e,{waitMs:5e3});if(!r)throw new Error("repository cache cleanup is busy");try{if(n){let o=t.activeGenerationId;if(!o||!Pn(A(e,"generations",o)))throw new Error("shared generation disappeared before its lease was attached")}let i=A(e,"worktrees");tn(i,{recursive:!0}),Fe(A(i,`${t.worktreeId}.json`),t,{spacing:2,trailingNewline:!0}),KM(t.localCacheDir,t.repositoryId,t.worktreeId)}finally{r.release()}}function YM(e,t){let n=A(t,".rollback"),r=new Map,i=new Map;tn(n,{recursive:!0});for(let a of["index.scip","index.db","meta.json"]){let c=A(e,a),l=Pn(c);r.set(a,l),l&&io(c,A(n,"stable",a))}for(let a of td){let c=A(e,a),l=Pn(c);if(l){let u=$M(c);if(!u.isDirectory()||u.isSymbolicLink())throw new Error(`managed artifact path is not a directory: ${a}`)}i.set(a,l)}let o=A(e,ma),s=Pn(o);return s&&uS(o,A(n,"sqlite-generations")),{root:n,stableFiles:r,managedDirectories:i,generationStoreExisted:s}}function XM(e,t,n){for(let r of td){let i=A(t,r);if(n.managedDirectories.get(r)){let s=A(n.root,"managed",r);tn(Qb(s),{recursive:!0}),or(i,s)}let o=A(e,r);Pn(o)&&or(o,i)}}function QM(e,t){for(let i of td){let o=A(e,i),s=A(t.root,"managed",i);t.managedDirectories.get(i)?Pn(s)&&(kn(o,{recursive:!0,force:!0}),or(s,o)):kn(o,{recursive:!0,force:!0})}for(let[i,o]of t.stableFiles){let s=A(e,i);if(!o){kn(s,{force:!0});continue}let a=`${s}.shared-restore-${Zu()}`;io(A(t.root,"stable",i),a),kn(s,{force:!0}),or(a,s)}let n=A(e,ma);kn(n,{recursive:!0,force:!0});let r=A(t.root,"sqlite-generations");t.generationStoreExisted&&Pn(r)&&or(r,n)}function uS(e,t){tn(t,{recursive:!0});for(let n of HM(e,{withFileTypes:!0})){let r=A(e,n.name),i=A(t,n.name);if(n.isSymbolicLink())throw new Error(`managed cache backup cannot contain a symlink: ${r}`);n.isDirectory()?uS(r,i):n.isFile()&&io(r,i)}}function ZM(e,t){if(e.generationId!==t.generationId||e.repositoryId!==t.repositoryId||e.treeOid!==t.treeOid||e.producerIdentity!==t.producerIdentity||JSON.stringify(e.fingerprint)!==JSON.stringify(t.fingerprint))throw new Error("shared generation manifest does not match the requested snapshot")}function Gr(e,t,n,r=!0,i=!0){try{let o=Ia(e);if(o?.status!=="complete"||JSON.stringify(o.fingerprint)!==JSON.stringify(n)||JSON.stringify([...o.indexedLanguages??[]].sort())!==JSON.stringify([...n.languages].sort()))return ro("source validation rejected metadata"),!1;let s=Ca(e),a=Ki(A(e,"index.db"),A(e,"meta.json"));if(r?a.state!=="current":a.state==="invalid"||a.state==="drifted")return ro(`source validation rejected SQLite generation state ${a.state}`),!1;let c=new zM(A(e,"index.db"),{readonly:!0,fileMustExist:!0});try{if(i){if(c.pragma("quick_check(1)",{simple:!0})!=="ok")return!1}else c.pragma("schema_version",{simple:!0})}finally{c.close()}let l=od(t),d=(i?s.files.filter(m=>m.endsWith(".scip")):["index.scip"]).every(m=>{let f=Zb(tt(_t(e,m))).metadata?.projectRoot;return f!==l&&ro(`source validation rejected SCIP root for ${m}: ${String(f)}`),f===l});return d||ro("source validation rejected SCIP project roots"),d}catch(o){return ro(`source validation failed: ${o instanceof Error?o.message:String(o)}`),!1}}function ro(e){process.env.SCIP_QUERY_DEBUG&&console.error(`shared-cache: ${e}`)}function od(e){try{return Gb(UM(e)).href}catch{return Gb(Ct(e)).href}}function e0(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===2&&Array.isArray(t.languages)&&typeof t.pnpmWorkspaces=="boolean"&&(t.typescriptProjectMode==="single"||t.typescriptProjectMode==="workspace")&&Array.isArray(t.typescriptProjects)&&Array.isArray(t.files)&&t.files.every(n=>n!==null&&typeof n=="object"&&typeof n.path=="string"&&typeof n.size=="number"&&typeof n.hash=="string")}function oo(e){return qb("sha256").update(e).digest("hex")}function dS(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}var sd;function wne(e){sd=e}function mS(e=dS(),t=void 0){if(t===void 0&&sd?.projectRoot===e)return sd;let n=Ky(e),r=Ny(e,n),i=process.env.SCIP_QUERY_INDEX_DB;if(i)return{projectRoot:e,config:n,paths:r,dbPath:i,dbPathSource:"env",gitContext:t};if(ad(r.dbPath))return{projectRoot:e,config:n,paths:r,dbPath:r.dbPath,dbPathSource:"configured",gitContext:t};let o=n0(e,"index.db");return{projectRoot:e,config:n,paths:r,dbPath:o,dbPathSource:"root-fallback",rootFallbackWarning:s0(o,r.dbPath),gitContext:t}}function Ene(e){return mS(e).dbPath}function Dne(e,t,n,r={}){return ad(n.dbPath)&&sS(e,n.cacheDir,void 0,r.gitContext)?{kind:"local-fresh"}:r.gitContext?.clean===!1&&r.watcherGeneration!==void 0&&ea(n.dbPath)===r.watcherGeneration?nd(e,t,n,r.gitContext):cb(e,t,n).state==="fresh"?nd(e,t,n,r.gitContext):oS(e,t,n,r.gitContext)}function kne(e){return!e.startsWith("__")&&!r0.has(e)}var r0=new Set(["bench","config-validate","hook-context","hook-stop","init","setup","setup-agent","setup-ci","setup-hooks","uninstall","work-audit"]);function i0(){try{return o0(dS(),{warnOnRootFallback:!0})}catch(e){console.error(`error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}function o0(e,t={}){let{config:n,paths:r,dbPath:i,dbPathSource:o,rootFallbackWarning:s,gitContext:a}=mS(e);if(!ad(i))throw new Error("No index.db found. Run: scip-query reindex");t.warnOnRootFallback&&o==="root-fallback"&&s&&console.error(s);let c={dbPath:i,indexPath:process.env.SCIP_QUERY_INDEX_SCIP??r.indexPath,projectRoot:e,sharedEvidenceDbPath:rS(e,n,a),entryRoots:n.entryRoots,semantic:n.semantic,suppressions:n.suppressions,declaredCouplings:n.declaredCouplings,locality:n.locality,architecture:n.architecture,coverageContracts:n.coverageContracts,docs:n.docs},l=Oy(e);return new ca(c,l)}function s0(e,t){let n="unknown time";try{n=t0(e).mtime.toISOString()}catch{}return`warning: using legacy project-root index.db (${e}, modified ${n}) because the configured index was not found at ${t}. This fallback may be stale; run 'scip-query reindex' to refresh the configured index.`}function nn(e){let t=i0();try{return e(t)}finally{t.close()}}function Pne(e,t){return t.concat([e])}function fS(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(0)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function Tne(e){switch(e.state){case"idle":return"Watching (idle)";case"waiting":{let t=Math.round((e.reindexAt-Date.now())/1e3);return`${e.changedFiles} file(s) changed, reindexing in ${t}s...`}case"indexing":return`Reindexing... (${Math.round((Date.now()-e.startedAt)/1e3)}s)`;case"cooldown":return`Cooldown (${Math.round((e.until-Date.now())/1e3)}s)${e.dirty?" \u2014 changes pending":""}`;default:return a0(e)}}function a0(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}function pS(e){return e+1}function c0(e,t){return`${pS(e)}-${pS(t)}`}function _ne(e,t,n){return`${e}:${c0(t,n)}`}function Lne(e,t=180){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-3)}...`:n}var Lt={empty(e){console.log(e)},list(e,t){for(let n of e)console.log(t(n))},groupedByFile(e,t,n=r=>r.relativePath){let r="";for(let i of e){let o=n(i);o!==r&&(r&&console.log(""),console.log(o),r=o),console.log(t(i))}},sectionedReport(e){let t=!0;for(let n of e)if(!(n.skipIfEmpty&&n.rows.length===0)){t||console.log(""),t=!1,n.title!==void 0&&console.log(`\u2550\u2550\u2550 ${n.title} \u2550\u2550\u2550`),n.explanation!==void 0&&console.log(n.explanation);for(let r of n.rows)console.log(r)}},table(e,t,n){console.log(` ${e.join(" ")}`);let r=n??e.map(i=>i.length);console.log(` ${r.map(i=>"\u2500".repeat(i)).join(" ")}`);for(let i of t)console.log(i)}};import{availableParallelism as iY}from"os";import{fileURLToPath as Wm}from"url";import{existsSync as wa,readFileSync as l0,readdirSync as hS}from"fs";import{join as so}from"path";var u0={files:new Set,pathPrefixes:[]},cd=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,d0=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,yS=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],m0=new Set([".git",".next",".turbo","build","coverage","dist","node_modules","out"]),f0=4,p0=X("package-surface",{clearGroups:["whole-project"]});function g0(e){return p0.get(e,()=>h0(e.config.projectRoot))}function ar(e,t){let n=g0(e);return n.files.has(t)?!0:n.pathPrefixes.some(r=>t.startsWith(r))}function h0(e){let t=new Set,n=[];for(let{manifest:r,packageRoot:i}of y0(e))for(let o of b0(r))S0(e,i,o,t,n);return t.size===0&&n.length===0?u0:{files:t,pathPrefixes:n}}function y0(e){let t=[],n=SS(e,"");return n&&t.push({manifest:n,packageRoot:""}),bS(e,"",t,0),t}function bS(e,t,n,r){if(r>=f0)return;let i=so(e,t);if(wa(i))for(let o of hS(i,{withFileTypes:!0})){if(!o.isDirectory()||m0.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name,a=SS(e,s);a&&n.push({manifest:a,packageRoot:s}),bS(e,s,n,r+1)}}function SS(e,t){try{let n=l0(so(e,t,"package.json"),"utf-8"),r=JSON.parse(n);return r&&typeof r=="object"?r:null}catch{return null}}function b0(e){let t=[];for(let r of["main","module","types","browser"])typeof e[r]=="string"&&t.push(e[r]);let n=e.bin;if(typeof n=="string")t.push(n);else if(n&&typeof n=="object")for(let r of Object.values(n))typeof r=="string"&&t.push(r);return CS(e.exports,t),t}function CS(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))CS(n,t)}function S0(e,t,n,r,i){let o=n.replace(/\\/g,"/").replace(/^\.\//,"");if(o===""||o.startsWith(".."))return;let s=o.indexOf("*");if(s>=0){let c=o.slice(0,s);for(let l of gS(c))l!==""&&i.push(rn(t,l));return}let a=o.replace(d0,"");for(let c of gS(a)){c===a&&c===o&&r.add(rn(t,o));for(let l of yS)C0(e,r,t,c+l)}r.add(rn(t,o))}function gS(e){let t=[e];return cd.test(e)&&(t.push(e.replace(cd,"src/")),t.push(e.replace(cd,""))),t}function C0(e,t,n,r){let i=rn(n,r);if(t.add(i),!r.startsWith("src/")||wa(so(e,i)))return;let o=yS.find(u=>r.endsWith(u));if(!o)return;let s=r.slice(0,-o.length);x0(e,t,n,s,o);let a=s.lastIndexOf("/");if(a<=4)return;let c=s.slice(0,a),l=s.slice(a+1);for(let u of xS(e,n,c,`${l}${o}`))t.add(u)}function x0(e,t,n,r,i){let o=rn(n,`${r}/index${i}`);wa(so(e,o))&&t.add(o)}function xS(e,t,n,r){let i=so(e,t,n);if(!wa(i))return[];let o=[];for(let s of hS(i,{withFileTypes:!0})){let a=`${n}/${s.name}`;s.isDirectory()?o.push(...xS(e,t,a,r)):s.isFile()&&s.name===r&&o.push(rn(t,a))}return o}function rn(e,t){return e?`${e}/${t}`:t}import{existsSync as Ea,readFileSync as v0,readdirSync as R0}from"fs";import{dirname as I0,join as Da}from"path";var w0={rootFiles:new Set,sourcePrefixes:[]},E0=new Set([".git",".scipquery","node_modules","target"]),D0=6,k0=X("rust-library-surface",{clearGroups:["whole-project"]});function vS(e,t,n){if(!n.endsWith(".rs")||!F0(P0(e),n))return!1;let r=Y(e,n).find(i=>i.symbol===t);return r?_0(Ce(e,n)[r.startLine]??""):!1}function P0(e){return k0.get(e,()=>T0(e.config.projectRoot))}function T0(e){let t=new Set,n=new Set;for(let r of L0(e)){let i=Da(e,r,"Cargo.toml"),o=v0(i,"utf8"),s=N0(o),a=rn(r,"src/lib.rs"),c=s?rn(r,s):!A0(o)&&Ea(Da(e,a))?a:null;if(!c)continue;t.add(c);let l=I0(c).replaceAll("\\","/");n.add(l==="."?"":`${l}/`)}return t.size===0?w0:{rootFiles:t,sourcePrefixes:[...n].sort()}}function F0(e,t){return t.endsWith(".rs")?e.rootFiles.has(t)?!0:M0(t)?!1:e.sourcePrefixes.some(n=>t.startsWith(n)):!1}function _0(e){return/^\s*pub\s+(?!\()/.test(e)}function L0(e){if(!Ea(e))return[];let t=[];return RS(e,"",t,0),t}function RS(e,t,n,r){let i=Da(e,t);if(Ea(i)&&(Ea(Da(i,"Cargo.toml"))&&n.push(t),!(r>=D0)))for(let o of R0(i,{withFileTypes:!0})){if(!o.isDirectory()||E0.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name;RS(e,s,n,r+1)}}function N0(e){let t=!1;for(let n of e.split(`
|
|
376
|
+
`)){let r=n.replace(/\s+#.*$/,"").trim(),i=/^\[([^\]]+)\]$/.exec(r);if(i){t=i[1]==="lib";continue}if(!t)continue;let o=/^path\s*=\s*["']([^"']+)["']/.exec(r)?.[1];if(o)return o.replaceAll("\\","/").replace(/^\.\//,"")}return null}function A0(e){let t=!1;for(let n of e.split(`
|
|
377
|
+
`)){let r=n.replace(/\s+#.*$/,"").trim(),i=/^\[([^\]]+)\]$/.exec(r);if(i){t=i[1]==="package";continue}if(t&&/^autolib\s*=\s*false\b/.test(r))return!0}return!1}function M0(e){return/(?:^|\/)src\/main\.rs$/.test(e)||/(?:^|\/)src\/bin\//.test(e)||/(?:^|\/)(?:examples|tests|benches)\//.test(e)}function G(e){let t=ne(e);return Z0(t)?"test":eO(t)?"worker":tO(t)?"entry":nO(t)?"barrel":"source"}function zr(e){return G(e)==="barrel"}function wS(e){return O0.get(e,()=>{let n=N(e,{includeIgnored:!1}).filter(s=>{let a=G(s);return a==="entry"||a==="worker"});if(n.length===0)return new Set;let r=ie(e),i=new Set,o=new Set;for(;n.length>0;){let s=n.shift();if(!i.has(s)){i.add(s),G(s)==="barrel"&&o.add(s);for(let a of r.get(s)??[])i.has(a)||n.push(a)}}return o})}var O0=X("live-barrels",{clearGroups:["whole-project"]});function ld(e,t){return wS(e).has(ne(t))}function ES(e){let t=wS(e);return N(e,{includeIgnored:!1}).filter(n=>zr(n)&&!t.has(n)&&!j0(e,n))}function j0(e,t){let n=ne(t),r=ut(e).forFile(n,{facts:!0}).facts?.callables;return r&&r.length>0?!0:(e.get(`SELECT COUNT(*) AS n
|
|
378
378
|
FROM defn_enclosing_ranges der
|
|
379
379
|
JOIN documents d ON d.id = der.document_id
|
|
380
380
|
WHERE d.relative_path = ?
|
|
381
|
-
AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function De(e,t){let n=ne(t),r=G(t);return r==="entry"||r==="worker"||
|
|
381
|
+
AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function De(e,t){let n=ne(t),r=G(t);return r==="entry"||r==="worker"||Y0(n)||ld(e,n)}function de(e,t,n){let r=ne(n);if(ar(e,r)||$0(e,t,r)||vS(e,t,r)||J0(t,r))return!0;let i=e.config.entryRoots;return i?!!(i.files?.some(o=>ne(o)===r)||i.pathPrefixes?.some(o=>r.startsWith(ne(o)))||i.qualifiedVars?.some(o=>rO(t,o))||i.symbolPatterns?.some(o=>{try{return new RegExp(o).test(t)}catch{return!1}})):!1}var B0=X("package-surface-reachability",{clearGroups:["whole-project"]});function $0(e,t,n){let r=H0(e).get(n);return r===void 0?!1:r===null||r.has(T(t))}function H0(e){return B0.get(e,()=>{let t=new Map,n=[];for(let r of N(e,{includeIgnored:!1}))ar(e,r)&&(t.set(r,null),n.push(r));for(;n.length>0;){let r=n.shift(),i=t.get(r);if(i!==void 0)for(let o of Jt(e,r)){if(!o.sourcePath||e.isIgnored(o.sourcePath))continue;let s=U0(i,o);s!==void 0&&W0(t,o.sourcePath,s)&&n.push(o.sourcePath)}}return t})}function U0(e,t){if(e===null)return t.kind==="named"?new Set(t.names):null;if(t.kind==="star")return new Set(e);if(t.kind==="star-as")return;let n=t.names.filter(r=>e.has(r));return n.length>0?new Set(n):void 0}function W0(e,t,n){if(!e.has(t))return e.set(t,n),!0;let r=e.get(t);if(r===void 0)return!1;if(r===null||n===null)return r===null?!1:(e.set(t,null),!0);let i=!1;for(let o of n)r.has(o)||(r.add(o),i=!0);return i}var DS=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),G0=new Set(["default","generateMetadata","generateStaticParams"]),z0=new Set(["default","getStaticProps","getServerSideProps","getStaticPaths","config"]),V0=new Set(["default","loader","action","clientLoader","clientAction","headers","links","meta","shouldRevalidate","ErrorBoundary","HydrateFallback"]),q0=new Set(["load","actions","entries",...DS]),K0=new Set(["default"]);function J0(e,t){let n=T(e);return n===""?!1:kS(t)?DS.has(n):PS(t)?G0.has(n):TS(t)?z0.has(n):FS(t)?V0.has(n):_S(t)?q0.has(n):Q0(t)?K0.has(n):!1}function Y0(e){return kS(e)||PS(e)||TS(e)||X0(e)||FS(e)||_S(e)}function kS(e){return/(?:^|\/)app(?:\/[^/]+)*\/route\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function PS(e){return/(?:^|\/)app(?:\/[^/]+)*\/(?:page|layout|template|loading|error|not-found|global-error|head|default)\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function TS(e){return/(?:^|\/)pages\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function X0(e){let t="(?:middleware|proxy|instrumentation)\\.(?:ts|js|mts|mjs)";return new RegExp(`^(?:src/)?${t}$`).test(e)||new RegExp(`(?:^|/)src/${t}$`).test(e)||new RegExp(`(?:^|/)(?:apps|services|packages)/[^/]+/(?:src/)?${t}$`).test(e)}function FS(e){return/(?:^|\/)app\/routes\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function _S(e){return/(?:^|\/)src\/routes\/(?:.*\/)?\+(?:page|page\.server|layout|layout\.server|server)\.(?:ts|js)$/.test(e)}function Q0(e){return/(?:^|\/)src\/(?:pages|views|routes)\/.+\.(?:ts|tsx|js|jsx|vue)$/.test(e)}function Z0(e){return!!(/\.(?:test|spec)\.[a-z0-9]+$/i.test(e)||/(?:^|\/)(?:_)?test_[^/]+$/i.test(e)||/(?:^|\/)spec_[^/]+$/i.test(e)||/(?:^|\/)[^/]+_test\.[a-z0-9]+$/i.test(e)||/(?:^|\/)[^/]+_tests\.rs$/i.test(e)||/(?:^|\/)tests\.rs$/i.test(e)||/(?:^|\/)[^/]+_spec\.[a-z0-9]+$/i.test(e)||/(?:^|\/)__tests__\//i.test(e)||/(?:^|\/)test\//i.test(e)||/(?:^|\/)tests\//i.test(e)||/(?:^|\/)__fixtures__\//i.test(e)||/(?:^|\/)__mocks__\//i.test(e)||/(?:^|\/)test-support\//i.test(e)||/(?:^|\/)test-utils\//i.test(e)||/(?:^|\/)testing\//i.test(e))}function eO(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function tO(e){let t=e.split("/"),n=t[t.length-1]??e;return n==="cli.ts"||n==="cli.js"||n==="postinstall.ts"||n==="postinstall.js"||n==="main.ts"||n==="main.js"||n==="main.rs"||n==="main.go"||n==="main.py"||n==="build.rs"||n==="lib.rs"||/\bsrc\/bin\/[^/]+\.rs$/.test(e)||/(?:^|\/)examples\/[^/]+\.rs$/.test(e)||/(?:^|\/)tests\/[^/]+\.rs$/.test(e)||/(?:^|\/)benches\/[^/]+\.rs$/.test(e)?!0:n==="index.ts"||n==="index.js"?/(?:^|\/)(?:apps|services)\/[^/]+\/src\/index\.(?:ts|js)$/.test(e)?!0:t.length<=2:!1}function nO(e){return e==="index.ts"||e==="index.js"||e.endsWith("/index.ts")||e.endsWith("/index.js")||e.endsWith("/mod.rs")||e.endsWith("/__init__.py")}function rO(e,t){let n=t.lastIndexOf("/");if(n<0)return!1;let r=t.slice(0,n),i=t.slice(n+1);return e.includes(IS(r)+"/")&&e.includes(IS(i)+".")}function IS(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}import{SymbolInformation_Kind as V}from"@c4312/scip";var ka=new Map(Object.entries(V).filter(([e,t])=>Number.isInteger(Number(e))&&typeof t=="string").map(([e,t])=>[Number(e),t])),LS=new Map([...ka.entries()].map(([e,t])=>[t.toLowerCase(),e]));function ao(e){return ka.get(e)??"Unknown"}function Nt(){return[V.Function,V.Method,V.Macro,V.Constructor,V.Getter,V.Setter,V.StaticMethod,V.SingletonMethod,V.AbstractMethod,V.ProtocolMethod,V.TraitMethod]}function NS(){return[V.Class,V.Interface,V.Struct,V.Trait,V.Type,V.TypeAlias,V.Enum,V.Union,V.Protocol]}function rre(){return[V.Constant,V.Variable,V.Value,V.Field,V.Property,V.StaticDataMember,V.StaticField,V.StaticProperty,V.StaticVariable,V.EnumMember]}function ft(e,t,n={}){let r=Pa(e,[t],{additive:n.additive,semantic:n.semantic,semanticEvidence:n.semanticEvidence}),i=n.callableOnly?(r.get(t.symbolId)??[]).filter(o=>le(o.symbol)||o.source==="ast-callsite"):r.get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}function xt(e,t,n){return dd(e,[t],n).get(t.symbolId)??[]}function dd(e,t,n){let r=sO(e)?cO(e,t,{semantic:n.semantic!==!1,semanticEvidence:n.semanticEvidence}):aO(e,n.semanticEvidence);return typeof n.limit!="number"?new Map(t.map(i=>[i.symbolId,r.get(i.symbolId)??[]])):new Map(t.map(i=>[i.symbolId,(r.get(i.symbolId)??[]).slice(0,n.limit)]))}var iO=X("caller-rows",{clearGroups:["whole-project"]}),oO=2e4;function sO(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>oO}function aO(e,t){return iO.get(e,()=>{let n=xe(e),r=Pa(e,n,{semanticEvidence:t}),i=new Map;for(let a of n)i.set(a.symbol,a.symbolId);let o=new Map,s=new Map;for(let a of n){let c=r.get(a.symbolId);if(!(!c||c.length===0))for(let l of c){let u=i.get(l.symbol);if(u===void 0||u===a.symbolId)continue;let d=o.get(u);d||(d=[],o.set(u,d),s.set(u,new Set));let m=`${a.symbol}|${a.relativePath}`;s.get(u).has(m)||(s.get(u).add(m),d.push({symbol:a.symbol,file:a.relativePath,source:"caller-map-inversion"}))}}return o})}function cO(e,t,n){let r=n.semantic&&n.semanticEvidence?t.flatMap(a=>{let c=lO(e,a);return c?[c]:[]}):[],i=new Map(r.map(a=>[a.symbolId,a])),o=n.semanticEvidence?.referenceMap(e,r)??new Map,s=new Map;for(let a of t){let c=[],l=new Set,u=m=>{if(m.symbol===a.symbol)return;let f=`${m.symbol}|${m.file}`;l.has(f)||(l.add(f),c.push(m))};for(let m of Pi(e,a))m.file!==a.relativePath&&u({symbol:m.enclosingSymbol??m.file,file:m.file,source:"resolved-reference"});let d=i.get(a.symbolId);if(d)for(let m of o.get(d.symbolId)??[]){if(m.file===a.relativePath||e.isIgnored(m.file))continue;let f=Dt(Y(e,m.file),m.line);u({symbol:f?.symbol??m.file,file:m.file,source:"semantic-reference"})}s.set(a.symbolId,c)}return s}function lO(e,t){let n=Nt().join(", "),r=NS().join(", ");return e.get(`SELECT
|
|
382
382
|
d.id AS documentId,
|
|
383
383
|
gs.id AS symbolId,
|
|
384
384
|
gs.symbol,
|
|
@@ -397,7 +397,7 @@ Thumbs.db
|
|
|
397
397
|
LEFT JOIN chunks c ON c.document_id = der.document_id
|
|
398
398
|
JOIN documents d ON d.id = COALESCE(der.document_id, c.document_id)
|
|
399
399
|
WHERE gs.id = ?
|
|
400
|
-
LIMIT 1`,t.symbolId)??null}function Pa(e,t,n={}){if(t.length===0)return new Map;let r=n.additive??!1,i=[],o=[];for(let u of t)M(u.relativePath)&&hn(e,u.relativePath)!==null?i.push(u):o.push(u);let s=new Map,a=new Map,c=u=>{for(let[d,m]of u){let f=s.get(d);f||(f=[],s.set(d,f));let p=a.get(d);p||(p=new Set,a.set(d,p));for(let g of m){let y=`${g.symbol}|${g.chunkId}`;p.has(y)||(p.add(y),f.push(g))}}};i.length>0&&c(
|
|
400
|
+
LIMIT 1`,t.symbolId)??null}function Pa(e,t,n={}){if(t.length===0)return new Map;let r=n.additive??!1,i=[],o=[];for(let u of t)M(u.relativePath)&&hn(e,u.relativePath)!==null?i.push(u):o.push(u);let s=new Map,a=new Map,c=u=>{for(let[d,m]of u){let f=s.get(d);f||(f=[],s.set(d,f));let p=a.get(d);p||(p=new Set,a.set(d,p));for(let g of m){let y=`${g.symbol}|${g.chunkId}`;p.has(y)||(p.add(y),f.push(g))}}};i.length>0&&c(uO(e,i)),n.semantic!==!1&&n.semanticEvidence&&c(hO(n.semanticEvidence.calleeMap(e,t)));let l=r?t:o;return l.length>0&&c(pO(e,l)),s}function uO(e,t){let n=new Map,r=dO(t,n),i=Zt(e);for(let[o,s]of r){let a=hn(e,o);if(!a)continue;let c=Dl(s);for(let l of a){let u=c.get(l.line);if(!u)continue;let d=mO(e,o,i,l);d&&d.symbol!==u.symbol&&n.get(u.symbolId).push({symbol:d.symbol,file:d.file,chunkId:l.line,source:"ast-callsite"})}}return n}function dO(e,t){let n=new Map;for(let r of e){let i=n.get(r.relativePath);i?i.push(r):n.set(r.relativePath,[r]),t.set(r.symbolId,[])}for(let r of n.values())r.sort((i,o)=>i.endLine-i.startLine-(o.endLine-o.startLine));return n}function mO(e,t,n,r){let i=ks(t,n.get(r.calleeLeaf)??[]);if(i.length===0)return null;let o=fO(e,t,i,r.calleeQualifier);return o||Ps(e,t,i,r.memberAccess)}function fO(e,t,n,r){if(!r||M(t)!=="clojure")return null;let o=Z(e,t).filter(s=>s.kind==="namespace"&&s.localName===r&&s.sourcePath).map(s=>s.sourcePath);for(let s of o){let a=n.find(c=>Ve(s,c.file));if(a)return a}return n.find(s=>/`([^`]+)`\//.exec(s.symbol)?.[1]===r)??null}function pO(e,t){if(t.length===0)return new Map;let r=ud(t.map(f=>f.documentId)).flatMap(f=>e.all(`SELECT c.document_id, c.id AS chunk_id, c.start_line, c.end_line, m.symbol_id
|
|
401
401
|
FROM mentions m
|
|
402
402
|
JOIN chunks c ON m.chunk_id = c.id
|
|
403
403
|
WHERE m.role != 1
|
|
@@ -414,9 +414,9 @@ Thumbs.db
|
|
|
414
414
|
GROUP BY m.symbol_id
|
|
415
415
|
) def_chunk ON def_chunk.symbol_id = gs.id
|
|
416
416
|
WHERE gs.id IN (${f.map(()=>"?").join(",")})`,...f,...f)),a=ud([...t.map(f=>f.documentId),...s.flatMap(f=>f.document_id===null?[]:[f.document_id])]),c=new Map(a.flatMap(f=>e.all(`SELECT id, relative_path FROM documents
|
|
417
|
-
WHERE id IN (${f.map(()=>"?").join(",")})`,...f).map(p=>[p.id,p.relative_path]))),l=new Map;for(let f of s)l.has(f.symbol_id)||l.set(f.symbol_id,{symbol:f.symbol,file:f.document_id!==null?c.get(f.document_id)??"":""});let u=new Map,d=c,m=pO(t);for(let[f,p]of m){let y=[...i.get(f)??[]].sort((C,S)=>C.start_line-S.start_line||C.end_line-S.end_line),h=[...p].sort((C,S)=>C.startLine-S.startLine||C.endLine-S.endLine),x=new Set,b=0;for(let C of h){for(;b<y.length&&y[b].start_line<=C.endLine;)x.add(y[b]),b+=1;for(let w of x)w.end_line<C.startLine&&x.delete(w);let S=new Set,v=[],R=null,D=()=>{if(R)return R;let w=d.get(C.documentId)??"",P=new Set;if(w){let L=cg(e,w),re=Math.max(0,C.startLine),Q=Math.min(L.length-1,C.endLine);for(let _=re;_<=Q;_+=1)for(let ae of L[_])P.add(ae)}return R=P,P};for(let w of x){if(w.symbol_id===C.symbolId)continue;let P=l.get(w.symbol_id);if(!P)continue;if(!(w.start_line>=C.startLine&&w.end_line<=C.endLine)){if(!(w.start_line<=C.endLine&&w.end_line>=C.startLine))continue;let _=T(P.symbol);if(!_||!D().has(_))continue}let re=`${P.symbol}|${w.chunk_id}`;S.has(re)||(S.add(re),v.push({...P,chunkId:w.chunk_id,source:"scip-chunk"}))}u.set(C.symbolId,v)}}return u}var AS=500;function ud(e){let t=[...new Set(e)],n=[];for(let r=0;r<t.length;r+=AS)n.push(t.slice(r,r+AS));return n}function pO(e){let t=new Map;for(let n of e){let r=t.get(n.documentId);r?r.push(n):t.set(n.documentId,[n])}return t}function gO(e){let t=new Map;for(let[n,r]of e){let i=[];for(let o of r)i.push({symbol:o.symbol,file:o.file,chunkId:-1,source:"semantic-callee"});t.set(n,i)}return t}function MS(e,t,n={}){let r=new Map;if(t&&t.length===0)return r;let i=N(e,{includeIgnored:!1}),o=Zt(e),s=t??xe(e),a=new Set(s.map(l=>l.symbolId)),c=RO(s);return hO(e,r,i,o,a,c),yO(e,r,s,a),xO(e,r,i,o,a,c),n.semantic!==!1&&n.semanticEvidence&&IO(r,n.semanticEvidence.callerMap(e,vO(s))),r}function hO(e,t,n,r,i,o){for(let s of n){if(!M(s))continue;let a=hn(e,s);if(a)for(let c of a){if(o&&!o.has(c.calleeLeaf))continue;let l=Ds(s,r.get(c.calleeLeaf)??[]);if(!l||l.length===0)continue;let u=Ps(e,s,l,c.memberAccess);u&&i.has(u.symbolId)&&u.file!==s&&md(t,u.symbolId,s)}}}function yO(e,t,n,r){let i=SO(n);for(let o of bO(e,r))e.isIgnored(o.relative_path)||CO(o,i.get(o.symbol_id))||md(t,o.symbol_id,o.relative_path)}function bO(e,t){return Lr(e,t?[...t]:void 0)}function SO(e){let t=new Map;for(let n of e)t.set(n.symbolId,{docId:n.documentId,startLine:n.startLine,endLine:n.endLine});return t}function CO(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function xO(e,t,n,r,i,o){for(let s of n){if(M(s)!=="rust")continue;let a=zn(e,s,{includeRustAttributeNames:!0});if(a.length!==0)for(let{name:c}of a){if(o&&!o.has(c))continue;let l=r.get(c);if(l)for(let u of l)i.has(u.symbolId)&&u.file!==s&&md(t,u.symbolId,s)}}}function md(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function RO(e){let t=new Set;for(let n of e){let r="leaf"in n&&typeof n.leaf=="string"?n.leaf:"symbol"in n&&typeof n.symbol=="string"?T(n.symbol):"";r&&t.add(r)}return t.size>0?t:null}function vO(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function IO(e,t){for(let[n,r]of t){let i=e.get(n);i||(i=new Set,e.set(n,i));for(let o of r)i.add(o)}}function fd(e,t,n={}){return MS(e,t,n)}function co(e,t,n={}){return bg(e,t,n)}function OS(e,t,n={}){let r=fd(e,t,{semantic:n.semantic,semanticEvidence:n.semanticEvidence});return n.sourceFallback===!1?r:on(r,co(e,t))}function on(e,t){let n=new Map;for(let[r,i]of e)n.set(r,new Set(i));for(let[r,i]of t){let o=n.get(r)??new Set;for(let s of i)o.add(s);n.set(r,o)}return n}function jS(e,t,n){let r=t.identifierResolution==="strict"?Nr:hg,i=t.candidateNames?Di(t.candidateNames):null,o=0,s=0,a=0,c=0,l="";for(let u of t.paths)if(o+=1,l=u,!(!M(u)&&!(t.includeVueSfc&&Ut(u)))&&!e.isIgnored(u)&&!t.skipPath?.(u))try{if(i&&!ks(k(e,u),i))continue;s+=1;let m=(p,g,y,h)=>{if(t.candidateNames&&!t.candidateNames.has(p))return;a+=1;let x=t.resolveTargets?t.resolveTargets({sourceFile:u,name:p,kind:g,defaultTargets:h}):h();for(let b of x)c+=1,n({sourceFile:u,name:p,target:b,occurrences:y,kind:g})},f=Qt(e,u);for(let[p,g]of f)m(p,"identifier",g.length,()=>r(e,u,p));for(let p of zn(e,u,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let g=p.kind==="cross-language-dispatch"?()=>Nr(e,u,p.name):()=>r(e,u,p.name);m(p.name,p.kind,p.occurrences,g)}}finally{t.afterPath?.(u),o%10===0&&E("source-reference-scan.progress",()=>{},()=>({scannedPaths:o,currentPath:l,candidateMatchedPaths:s,visitedNames:a,visitedHits:c}))}}function O(e){return e.endLine-e.startLine+1}function BS(e,t={}){let{scope:n,files:r,minLoc:i=1,maxLoc:o=Number.POSITIVE_INFINITY,excludeSymbol:s,excludeEntrySurfaces:a=!1,excludeTypesFiles:c=!1,excludeRootedSymbols:l=!1,requireFunctionLikeSymbol:u=!1,requireCallableSymbol:d=!1,excludeRustTraitImplMembers:m=!1,includeSuppressed:f=!1,sortByLocDesc:p=!1}=t,g=[],y=wO(e,{scope:n,files:r,requireFunctionLikeSymbol:u,requireCallableSymbol:d}),h=new Map,x=new Map,b=S=>{let v=h.get(S);if(v!==void 0)return v;let R=De(e,S);return h.set(S,R),R},C=S=>{let v=x.get(S);if(v!==void 0)return v;let R=G(S);return x.set(S,R),R};for(let S of y){let v=S.relativePath;if(e.isIgnored(v)||a&&b(v)||!EO(S,{requireFunctionLikeSymbol:u,requireCallableSymbol:d})||s!==void 0&&S.symbol===s)continue;let R=O(S);R<i||R>o||c&&DO(v)||l&&de(e,S.symbol,v)||m&&Ie(S.symbol)||C(v)!=="test"&&(br(S.symbol)||!f&&Wo(e,v,S.startLine)||g.push(S))}return p?g.sort((S,v)=>O(v)-O(S)):g}function wO(e,t){return t.files!==void 0?[...new Set(t.files.map(r=>r.replace(/\\/g,"/")))].sort().filter(r=>!t.scope||r.includes(t.scope)).flatMap(r=>Y(e,r)):t.requireCallableSymbol?vi(e,{scope:t.scope,symbolMatches:le,sqlPrefilter:"callable"}):t.requireFunctionLikeSymbol?vi(e,{scope:t.scope,symbolMatches:te,sqlPrefilter:"function-like"}):ng(e,t.scope)}function EO(e,t){return t.requireCallableSymbol?le(e.symbol):t.requireFunctionLikeSymbol?te(e.symbol):e.isFunctionLike}function DO(e){return(e.split("/").pop()??"").includes("types")}var F=class{constructor(t){this.db=t}db;scopedDefinitions(t){return El(this.db,t)}definitionsForFile(t){return Y(this.db,t)}productionCallableDefinitions(t={}){return BS(this.db,t)}calleeMap(t,n={}){return Pa(this.db,t,{...n,semanticEvidence:H})}crossFileCallerMap(t,n={}){return fd(this.db,t,{...n,semanticEvidence:H})}sourceFallbackCallerFiles(t,n={}){return co(this.db,t,n)}callerFileMap(t,n={}){return OS(this.db,t,{...n,semanticEvidence:H})}frameworkReferencedSymbolIds(t){let n=new Map;for(let i of t){if(!i.leaf)continue;let o=n.get(i.leaf)??[];o.push(i.symbolId),n.set(i.leaf,o)}let r=new Set;for(let i of N(this.db,{includeIgnored:!1}))if(M(i)==="rust")for(let{name:o}of zn(this.db,i,{includeRustAttributeNames:!0}))for(let s of n.get(o)??[])r.add(s);return r}symbolsWithNonSelfCallees(t,n={}){if(t.length===0)return new Set;let r=new Map(t.map(o=>[o.symbolId,o.symbol])),i=this.calleeMap(t,n);return new Set([...i.entries()].filter(([o,s])=>{let a=r.get(o);return s.some(c=>c.symbol!==a)}).map(([o])=>o))}fileDependencyGraph(t){return ie(this.db,t)}fileKind(t){return G(t)}hasSuppressionComment(t){return Wo(this.db,t.relativePath,t.startLine)}sourceFiles(){return $e(this.db)}scanSourceReferences(t,n){jS(this.db,t,n)}callableSignature(t){let n=ut(this.db).forFile(t.relativePath,{facts:!0}).facts?.callables.find(r=>r.startLine===t.startLine&&r.endLine===t.endLine);return n?{paramCount:n.paramCount}:null}};import{statSync as PO}from"fs";function cr(e){let t=e.get("SELECT COUNT(*) as c FROM documents").c,n=e.get("SELECT COUNT(*) as c FROM global_symbols").c,r=e.get("SELECT COUNT(*) as c FROM mentions WHERE role = 1").c,i=e.get("SELECT COUNT(*) as c FROM mentions WHERE role != 1").c;return{documents:t,symbols:n,definitions:r,references:i,...kO(e.config.dbPath)}}function kO(e){try{let t=PO(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function TO(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function FO(e,t){let n=TO(t);return N(e,{like:n,includeIgnored:!1}).filter(r=>_O(t,r)).map(r=>({relativePath:r}))}function _O(e,t){if(!/[*?]/.test(e))return t.includes(e);let n=e.includes("/")?e:`**/${e}`;return ka(n.split("/"),t.split("/"))}function ka(e,t){if(e.length===0)return t.length===0;let[n,...r]=e;return n==="**"?ka(r,t)||t.length>0&&ka(e,t.slice(1)):t.length===0||!LO(n??"",t[0]??"")?!1:ka(r,t.slice(1))}function LO(e,t){let n="^";for(let r of e)r==="*"?n+="[^/]*":r==="?"?n+="[^/]":n+=NO(r);return n+="$",new RegExp(n).test(t)}function NO(e){return/[\\^$.*+?()[\]{}|]/.test(e)?`\\${e}`:e}import{basename as AO}from"path";function MO(e,t){let n=B(e,t);if(!n)return[];let r=T(n.symbol),o=new F(e).definitionsForFile(n.relativePath).filter(l=>le(l.symbol)),s=o.filter(l=>l.parentTypeName===r||l.symbol.includes(r)),c=(s.length>0?s:OO(AO(n.relativePath))===r?o.filter(l=>l.symbol.includes("<invalid-global-code>")):[]).map(l=>({startLine:l.startLine,endLine:l.endLine,name:T(l.symbol)}));return M(n.relativePath)!=="clojure"?c:BO(c,jO(e,n))}function OO(e){return e.replace(/\.[^.]+$/,"")}function jO(e,t){let n=T(t.symbol);return n?(z(e,t.relativePath)?.clojureMembers??[]).filter(r=>r.ownerName===n).map(r=>({startLine:r.startLine,endLine:r.endLine,name:r.memberName})):[]}function BO(e,t){let n=new Map;for(let r of[...e,...t])n.set(`${r.name}:${r.startLine}:${r.endLine}`,r);return[...n.values()].sort((r,i)=>r.startLine-i.startLine||r.endLine-i.endLine)}function pd(e,t,n={}){let r=B(e,t);if(!r)return{definitions:[],referencedBy:[]};let i=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",r.symbolId),o=Xt(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:HO(o,i?.display_name??null,r.symbol),source:$O(e,r.relativePath,r.startLine,r.endLine)}],a=Pt(e,r,{semantic:n.semantic,semanticEvidence:H}).map(c=>({relativePath:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol,enclosingShort:c.enclosingSymbol?I(c.enclosingSymbol):"(top-level)"}));return{definitions:s,referencedBy:a}}function $O(e,t,n,r){let i=k(e,t);if(!i)return null;let s=i.split(`
|
|
417
|
+
WHERE id IN (${f.map(()=>"?").join(",")})`,...f).map(p=>[p.id,p.relative_path]))),l=new Map;for(let f of s)l.has(f.symbol_id)||l.set(f.symbol_id,{symbol:f.symbol,file:f.document_id!==null?c.get(f.document_id)??"":""});let u=new Map,d=c,m=gO(t);for(let[f,p]of m){let y=[...i.get(f)??[]].sort((C,S)=>C.start_line-S.start_line||C.end_line-S.end_line),h=[...p].sort((C,S)=>C.startLine-S.startLine||C.endLine-S.endLine),x=new Set,b=0;for(let C of h){for(;b<y.length&&y[b].start_line<=C.endLine;)x.add(y[b]),b+=1;for(let w of x)w.end_line<C.startLine&&x.delete(w);let S=new Set,R=[],v=null,D=()=>{if(v)return v;let w=d.get(C.documentId)??"",k=new Set;if(w){let L=cg(e,w),re=Math.max(0,C.startLine),Q=Math.min(L.length-1,C.endLine);for(let _=re;_<=Q;_+=1)for(let ae of L[_])k.add(ae)}return v=k,k};for(let w of x){if(w.symbol_id===C.symbolId)continue;let k=l.get(w.symbol_id);if(!k)continue;if(!(w.start_line>=C.startLine&&w.end_line<=C.endLine)){if(!(w.start_line<=C.endLine&&w.end_line>=C.startLine))continue;let _=T(k.symbol);if(!_||!D().has(_))continue}let re=`${k.symbol}|${w.chunk_id}`;S.has(re)||(S.add(re),R.push({...k,chunkId:w.chunk_id,source:"scip-chunk"}))}u.set(C.symbolId,R)}}return u}var AS=500;function ud(e){let t=[...new Set(e)],n=[];for(let r=0;r<t.length;r+=AS)n.push(t.slice(r,r+AS));return n}function gO(e){let t=new Map;for(let n of e){let r=t.get(n.documentId);r?r.push(n):t.set(n.documentId,[n])}return t}function hO(e){let t=new Map;for(let[n,r]of e){let i=[];for(let o of r)i.push({symbol:o.symbol,file:o.file,chunkId:-1,source:"semantic-callee"});t.set(n,i)}return t}function MS(e,t,n={}){let r=new Map;if(t&&t.length===0)return r;let i=N(e,{includeIgnored:!1}),o=Zt(e),s=t??xe(e),a=new Set(s.map(l=>l.symbolId)),c=RO(s);return yO(e,r,i,o,a,c),bO(e,r,s,a),vO(e,r,i,o,a,c),n.semantic!==!1&&n.semanticEvidence&&wO(r,n.semanticEvidence.callerMap(e,IO(s))),r}function yO(e,t,n,r,i,o){for(let s of n){if(!M(s))continue;let a=hn(e,s);if(a)for(let c of a){if(o&&!o.has(c.calleeLeaf))continue;let l=ks(s,r.get(c.calleeLeaf)??[]);if(!l||l.length===0)continue;let u=Ps(e,s,l,c.memberAccess);u&&i.has(u.symbolId)&&u.file!==s&&md(t,u.symbolId,s)}}}function bO(e,t,n,r){let i=CO(n);for(let o of SO(e,r))e.isIgnored(o.relative_path)||xO(o,i.get(o.symbol_id))||md(t,o.symbol_id,o.relative_path)}function SO(e,t){return Lr(e,t?[...t]:void 0)}function CO(e){let t=new Map;for(let n of e)t.set(n.symbolId,{docId:n.documentId,startLine:n.startLine,endLine:n.endLine});return t}function xO(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function vO(e,t,n,r,i,o){for(let s of n){if(M(s)!=="rust")continue;let a=zn(e,s,{includeRustAttributeNames:!0});if(a.length!==0)for(let{name:c}of a){if(o&&!o.has(c))continue;let l=r.get(c);if(l)for(let u of l)i.has(u.symbolId)&&u.file!==s&&md(t,u.symbolId,s)}}}function md(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function RO(e){let t=new Set;for(let n of e){let r="leaf"in n&&typeof n.leaf=="string"?n.leaf:"symbol"in n&&typeof n.symbol=="string"?T(n.symbol):"";r&&t.add(r)}return t.size>0?t:null}function IO(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function wO(e,t){for(let[n,r]of t){let i=e.get(n);i||(i=new Set,e.set(n,i));for(let o of r)i.add(o)}}function fd(e,t,n={}){return MS(e,t,n)}function co(e,t,n={}){return bg(e,t,n)}function OS(e,t,n={}){let r=fd(e,t,{semantic:n.semantic,semanticEvidence:n.semanticEvidence});return n.sourceFallback===!1?r:on(r,co(e,t))}function on(e,t){let n=new Map;for(let[r,i]of e)n.set(r,new Set(i));for(let[r,i]of t){let o=n.get(r)??new Set;for(let s of i)o.add(s);n.set(r,o)}return n}function jS(e,t,n){let r=t.identifierResolution==="strict"?Nr:hg,i=t.candidateNames?Di(t.candidateNames):null,o=0,s=0,a=0,c=0,l="";for(let u of t.paths)if(o+=1,l=u,!(!M(u)&&!(t.includeVueSfc&&Ut(u)))&&!e.isIgnored(u)&&!t.skipPath?.(u))try{if(i&&!Ts(P(e,u),i))continue;s+=1;let m=(p,g,y,h)=>{if(t.candidateNames&&!t.candidateNames.has(p))return;a+=1;let x=t.resolveTargets?t.resolveTargets({sourceFile:u,name:p,kind:g,defaultTargets:h}):h();for(let b of x)c+=1,n({sourceFile:u,name:p,target:b,occurrences:y,kind:g})},f=Qt(e,u);for(let[p,g]of f)m(p,"identifier",g.length,()=>r(e,u,p));for(let p of zn(e,u,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let g=p.kind==="cross-language-dispatch"?()=>Nr(e,u,p.name):()=>r(e,u,p.name);m(p.name,p.kind,p.occurrences,g)}}finally{t.afterPath?.(u),o%10===0&&E("source-reference-scan.progress",()=>{},()=>({scannedPaths:o,currentPath:l,candidateMatchedPaths:s,visitedNames:a,visitedHits:c}))}}function O(e){return e.endLine-e.startLine+1}function BS(e,t={}){let{scope:n,files:r,minLoc:i=1,maxLoc:o=Number.POSITIVE_INFINITY,excludeSymbol:s,excludeEntrySurfaces:a=!1,excludeTypesFiles:c=!1,excludeRootedSymbols:l=!1,requireFunctionLikeSymbol:u=!1,requireCallableSymbol:d=!1,excludeRustTraitImplMembers:m=!1,includeSuppressed:f=!1,sortByLocDesc:p=!1}=t,g=[],y=EO(e,{scope:n,files:r,requireFunctionLikeSymbol:u,requireCallableSymbol:d}),h=new Map,x=new Map,b=S=>{let R=h.get(S);if(R!==void 0)return R;let v=De(e,S);return h.set(S,v),v},C=S=>{let R=x.get(S);if(R!==void 0)return R;let v=G(S);return x.set(S,v),v};for(let S of y){let R=S.relativePath;if(e.isIgnored(R)||a&&b(R)||!DO(S,{requireFunctionLikeSymbol:u,requireCallableSymbol:d})||s!==void 0&&S.symbol===s)continue;let v=O(S);v<i||v>o||c&&kO(R)||l&&de(e,S.symbol,R)||m&&Ie(S.symbol)||C(R)!=="test"&&(br(S.symbol)||!f&&Go(e,R,S.startLine)||g.push(S))}return p?g.sort((S,R)=>O(R)-O(S)):g}function EO(e,t){return t.files!==void 0?[...new Set(t.files.map(r=>r.replace(/\\/g,"/")))].sort().filter(r=>!t.scope||r.includes(t.scope)).flatMap(r=>Y(e,r)):t.requireCallableSymbol?Ri(e,{scope:t.scope,symbolMatches:le,sqlPrefilter:"callable"}):t.requireFunctionLikeSymbol?Ri(e,{scope:t.scope,symbolMatches:te,sqlPrefilter:"function-like"}):ng(e,t.scope)}function DO(e,t){return t.requireCallableSymbol?le(e.symbol):t.requireFunctionLikeSymbol?te(e.symbol):e.isFunctionLike}function kO(e){return(e.split("/").pop()??"").includes("types")}var F=class{constructor(t){this.db=t}db;scopedDefinitions(t){return El(this.db,t)}definitionsForFile(t){return Y(this.db,t)}productionCallableDefinitions(t={}){return BS(this.db,t)}calleeMap(t,n={}){return Pa(this.db,t,{...n,semanticEvidence:H})}crossFileCallerMap(t,n={}){return fd(this.db,t,{...n,semanticEvidence:H})}sourceFallbackCallerFiles(t,n={}){return co(this.db,t,n)}callerFileMap(t,n={}){return OS(this.db,t,{...n,semanticEvidence:H})}frameworkReferencedSymbolIds(t){let n=new Map;for(let i of t){if(!i.leaf)continue;let o=n.get(i.leaf)??[];o.push(i.symbolId),n.set(i.leaf,o)}let r=new Set;for(let i of N(this.db,{includeIgnored:!1}))if(M(i)==="rust")for(let{name:o}of zn(this.db,i,{includeRustAttributeNames:!0}))for(let s of n.get(o)??[])r.add(s);return r}symbolsWithNonSelfCallees(t,n={}){if(t.length===0)return new Set;let r=new Map(t.map(o=>[o.symbolId,o.symbol])),i=this.calleeMap(t,n);return new Set([...i.entries()].filter(([o,s])=>{let a=r.get(o);return s.some(c=>c.symbol!==a)}).map(([o])=>o))}fileDependencyGraph(t){return ie(this.db,t)}fileKind(t){return G(t)}hasSuppressionComment(t){return Go(this.db,t.relativePath,t.startLine)}sourceFiles(){return $e(this.db)}scanSourceReferences(t,n){jS(this.db,t,n)}callableSignature(t){let n=ut(this.db).forFile(t.relativePath,{facts:!0}).facts?.callables.find(r=>r.startLine===t.startLine&&r.endLine===t.endLine);return n?{paramCount:n.paramCount}:null}};import{statSync as PO}from"fs";function cr(e){let t=e.get("SELECT COUNT(*) as c FROM documents").c,n=e.get("SELECT COUNT(*) as c FROM global_symbols").c,r=e.get("SELECT COUNT(*) as c FROM mentions WHERE role = 1").c,i=e.get("SELECT COUNT(*) as c FROM mentions WHERE role != 1").c;return{documents:t,symbols:n,definitions:r,references:i,...TO(e.config.dbPath)}}function TO(e){try{let t=PO(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function FO(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function _O(e,t){let n=FO(t);return N(e,{like:n,includeIgnored:!1}).filter(r=>LO(t,r)).map(r=>({relativePath:r}))}function LO(e,t){if(!/[*?]/.test(e))return t.includes(e);let n=e.includes("/")?e:`**/${e}`;return Ta(n.split("/"),t.split("/"))}function Ta(e,t){if(e.length===0)return t.length===0;let[n,...r]=e;return n==="**"?Ta(r,t)||t.length>0&&Ta(e,t.slice(1)):t.length===0||!NO(n??"",t[0]??"")?!1:Ta(r,t.slice(1))}function NO(e,t){let n="^";for(let r of e)r==="*"?n+="[^/]*":r==="?"?n+="[^/]":n+=AO(r);return n+="$",new RegExp(n).test(t)}function AO(e){return/[\\^$.*+?()[\]{}|]/.test(e)?`\\${e}`:e}import{basename as MO}from"path";function OO(e,t){let n=B(e,t);if(!n)return[];let r=T(n.symbol),o=new F(e).definitionsForFile(n.relativePath).filter(l=>le(l.symbol)),s=o.filter(l=>l.parentTypeName===r||l.symbol.includes(r)),c=(s.length>0?s:jO(MO(n.relativePath))===r?o.filter(l=>l.symbol.includes("<invalid-global-code>")):[]).map(l=>({startLine:l.startLine,endLine:l.endLine,name:T(l.symbol)}));return M(n.relativePath)!=="clojure"?c:$O(c,BO(e,n))}function jO(e){return e.replace(/\.[^.]+$/,"")}function BO(e,t){let n=T(t.symbol);return n?(z(e,t.relativePath)?.clojureMembers??[]).filter(r=>r.ownerName===n).map(r=>({startLine:r.startLine,endLine:r.endLine,name:r.memberName})):[]}function $O(e,t){let n=new Map;for(let r of[...e,...t])n.set(`${r.name}:${r.startLine}:${r.endLine}`,r);return[...n.values()].sort((r,i)=>r.startLine-i.startLine||r.endLine-i.endLine)}function pd(e,t,n={}){let r=B(e,t);if(!r)return{definitions:[],referencedBy:[]};let i=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",r.symbolId),o=Xt(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:UO(o,i?.display_name??null,r.symbol),source:HO(e,r.relativePath,r.startLine,r.endLine)}],a=kt(e,r,{semantic:n.semantic,semanticEvidence:H}).map(c=>({relativePath:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol,enclosingShort:c.enclosingSymbol?I(c.enclosingSymbol):"(top-level)"}));return{definitions:s,referencedBy:a}}function HO(e,t,n,r){let i=P(e,t);if(!i)return null;let s=i.split(`
|
|
418
418
|
`).slice(n,r+1).join(`
|
|
419
|
-
`).trimEnd();return s.length>0?s:null}function
|
|
419
|
+
`).trimEnd();return s.length>0?s:null}function UO(e,t,n){let r=Yt(e);if(r&&!WO(r))return r;let i=(t??"").trim();return i?te(n)&&!i.endsWith("()")?`${i}()`:i:I(n)}function WO(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function gd(e,t){let n=Oe(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
|
|
420
420
|
FROM mentions m
|
|
421
421
|
JOIN chunks c ON m.chunk_id = c.id
|
|
422
422
|
JOIN documents d1 ON c.document_id = d1.id
|
|
@@ -449,7 +449,7 @@ Thumbs.db
|
|
|
449
449
|
AND d1.relative_path != ?
|
|
450
450
|
ORDER BY d1.relative_path`,n,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function yd(e,t){let n=$r(e,t);if(n.length===0)return{files:[],symbols:[],dependsOn:[],dependedOnBy:[]};let r=n.map(()=>"?").join(", "),o=e.all(`SELECT relative_path FROM documents
|
|
451
451
|
WHERE relative_path IN (${r})
|
|
452
|
-
ORDER BY relative_path`,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d)),s=
|
|
452
|
+
ORDER BY relative_path`,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d)),s=Cs(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:d,...m})=>m),c=e.all(`SELECT DISTINCT d2.relative_path
|
|
453
453
|
FROM mentions m
|
|
454
454
|
JOIN chunks c ON m.chunk_id = c.id
|
|
455
455
|
JOIN documents d1 ON c.document_id = d1.id
|
|
@@ -480,7 +480,7 @@ Thumbs.db
|
|
|
480
480
|
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
481
481
|
WHERE d2.relative_path IN (${r})
|
|
482
482
|
AND d1.relative_path NOT IN (${r})
|
|
483
|
-
ORDER BY d1.relative_path`,...n,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d));return{files:o,symbols:s,dependsOn:c,dependedOnBy:u}}function bd(e,t){let n=$r(e,t);return n.length===0?[]:
|
|
483
|
+
ORDER BY d1.relative_path`,...n,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d));return{files:o,symbols:s,dependsOn:c,dependedOnBy:u}}function bd(e,t){let n=$r(e,t);return n.length===0?[]:VO([...GO(e,n),...zO(e,n)]).filter(r=>!e.isIgnored(r.relative_path)).map(qO)}function GO(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
|
|
484
484
|
FROM mentions m
|
|
485
485
|
JOIN chunks c ON m.chunk_id = c.id
|
|
486
486
|
JOIN documents d1 ON c.document_id = d1.id
|
|
@@ -507,8 +507,8 @@ Thumbs.db
|
|
|
507
507
|
AND m.role != 1
|
|
508
508
|
AND ${e.localSymbolPredicate}
|
|
509
509
|
${e.pathExclusionsFor("d1")}
|
|
510
|
-
ORDER BY d1.relative_path`,...t,...t,...t)}function GO(e,t){let n=new F(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>le(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function zO(e){let t=new Set;return e.filter(n=>{let r=`${n.relative_path}|${n.symbol}`;return t.has(r)?!1:(t.add(r),!0)})}function VO(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:I(e.symbol)}}var lo=new WeakMap,$S=oe({kind:"definition-exclusions",invalidation:J("definition-exclusions"),serialize:e=>JSON.stringify(e),deserialize:qO});function US(e,t){let n=M(t);if(!(n==="rust"||n==="typescript"||n==="tsx"||n==="javascript"))return[];let i=k(e,t);if(!i)return[];let o=ce(e,t,i),s=$S.read(e,t,o);if(s)return s;let a=n==="rust"?tj(e,t):XO(e,t);return $S.write(e,t,o,a),a}function qO(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=t.map(KO);return n.some(r=>r===null)?null:n}catch{return null}}function KO(e){if(!e||typeof e!="object")return null;let t=e;if(typeof t.startLine!="number"||!Number.isFinite(t.startLine)||typeof t.endLine!="number"||!Number.isFinite(t.endLine)||typeof t.reason!="string"||t.containerName!==void 0&&typeof t.containerName!="string")return null;let n=t.disposition===void 0?fj(t.reason):t.disposition;return n!=="exclude"&&n!=="implicit-usage"?null:{startLine:t.startLine,endLine:t.endLine,reason:t.reason,disposition:n,...t.containerName?{containerName:t.containerName}:{}}}var WS=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]),JO=/\b(?:describe|it|test|fdescribe|fit|xdescribe|xit|beforeEach|afterEach|beforeAll|afterAll|before|after|suite|bench|benchmark)\s*\(/,YO=/\b(?:export\s+)?(?:async\s+)?function\s+use[A-Z][A-Za-z0-9_$]*\b|\b(?:const|let|var)\s+use[A-Z][A-Za-z0-9_$]*\s*(?::[^=;]+)?=\s*(?:async\s*)?(?:function\b|(?:<[^=;{]+>\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)\s*=>)/;function XO(e,t){let n=k(e,t);if(!n||!QO(n))return[];let r=K(e,t);if(!r)return[];let i=lo.get(r);if(i)return i;let o=!1,s=r.rootNode;for(let c of s.namedChildren){if(c.type!=="expression_statement")continue;let l=c.namedChild(0);if(!l||l.type!=="call_expression")continue;let u=l.namedChild(0);if(!u)continue;let d=u.type==="member_expression"?u.namedChild(u.namedChildCount-1)?.text:u.text;if(d&&WS.has(d)){o=!0;break}}let a=[];o&&a.push({startLine:0,endLine:s.endPosition.row,reason:"TS/JS test file (describe/it/test at top level)",disposition:"exclude"});for(let c of s.namedChildren){let l=null,u=null;if(c.type==="function_declaration")l=c.namedChild(0)?.text??null,u=c;else if(c.type==="export_statement"){let d=c.namedChild(0);d?.type==="function_declaration"&&(l=d.namedChild(0)?.text??null,u=d)}else if(c.type==="lexical_declaration"){let d=c.namedChild(0);if(d?.type==="variable_declarator"){let m=d.namedChild(0)?.text,f=d.namedChild(1);m&&(f?.type==="arrow_function"||f?.type==="function_expression")&&(l=m,u=d)}}l&&/^use[A-Z]/.test(l)&&u&&a.push({startLine:u.startPosition.row,endLine:u.endPosition.row,reason:"React custom hook (use*)",disposition:"exclude"})}return a.push(...GS(r,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),lo.set(r,a),a}function QO(e){if(e.includes("scip-query"))return!0;let t=!1;for(let n of WS)if(e.includes(n)){t=!0;break}return t&&JO.test(e)?!0:e.includes("use")&&YO.test(e)}var ZO=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function ej(e){return ZO.test(e)}function GS(e,t,n){let r=[],i=o=>{if(t.has(o.type)&&o.parent){let a=o.parent.children,c=-1;for(let l=0;l<a.length;l+=1)if(a[l].startIndex===o.startIndex&&a[l].type===o.type){c=l;break}if(c>0)for(let l=c-1;l>=0;l-=1){let u=a[l];if(n.has(u.type)){if(ej(u.text)){r.push({startLine:o.startPosition.row,endLine:o.endPosition.row,reason:"scip-query suppression comment",disposition:"exclude"});break}continue}if(!(u.type==="attribute_item"||u.type==="inner_attribute_item"))break}}for(let s of o.namedChildren)i(s)};return i(e.rootNode),r}function tj(e,t){let n=K(e,t);if(!n)return[];let r=lo.get(n);if(r)return r;let i=[],o=nj(n);return o?(lo.set(n,o),o):(zS(n.rootNode,i,!1,!1),i.push(...GS(n,new Set(["function_item","function_signature_item","struct_item","enum_item","union_item","impl_item","mod_item","static_item","const_item"]),new Set(["line_comment","block_comment"]))),i.push(...dj(n.rootNode)),lo.set(n,i),i)}function nj(e){return pj(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)",disposition:"exclude"}]:null}function zS(e,t,n,r){let i=n,o=r;e.type==="trait_item"&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait declaration body (dynamic dispatch)",disposition:"implicit-usage"}),e.type==="impl_item"&&e.childForFieldName("trait")&&(o=!0,t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl block (dynamic dispatch)",disposition:"implicit-usage"})),e.type==="function_item"||e.type==="function_signature_item"?rj(e,t,n,r):r&&uj(e)?t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl associated item (dynamic dispatch)",disposition:"implicit-usage"}):e.type==="struct_item"||e.type==="enum_item"||e.type==="union_item"?ij(e,t,n):e.type==="mod_item"&&Sd(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)zS(s,t,i,o)}function rj(e,t,n,r){let i=Sd(e),o=null;r?o={reason:"trait impl method (dynamic dispatch)",disposition:"implicit-usage"}:n&&(o={reason:"inside #[cfg(test)] mod",disposition:"exclude"});for(let s of i){if(VS(s)){o={reason:"#[allow(dead_code)]",disposition:"exclude"};break}let a=cj(s);if(a){o=a;break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o.reason,disposition:o.disposition})}function ij(e,t,n){let r=Sd(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(lj)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(...)] - generated impl may access fields",disposition:"implicit-usage",containerName:i}),r.some(VS)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[allow(dead_code)]",disposition:"exclude",containerName:i}),n&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"inside #[cfg(test)] mod",disposition:"exclude",containerName:i})}function Sd(e){let t=e.parent;if(!t)return[];let n=t.children,r=-1;for(let o=0;o<n.length;o+=1)if(n[o].startIndex===e.startIndex&&n[o].type===e.type){r=o;break}if(r<=0)return[];let i=[];for(let o=r-1;o>=0;o-=1){let s=n[o];if(s.type==="attribute_item"||s.type==="inner_attribute_item")i.push(s.text);else{if(s.type==="line_comment"||s.type==="block_comment")continue;break}}return i}var oj=new Set(["test","bench","tokio::test","async_std::test"]),sj=new Set(["no_mangle","export_name","link_name","used","macro_export","proc_macro","proc_macro_derive","proc_macro_attribute"]),aj=new Set(["allow","warn","deny","forbid","cfg","cfg_attr","doc","inline","cold","must_use","deprecated","repr","derive","automatically_derived","non_exhaustive","path","link","link_section","global_allocator","panic_handler"]);function cj(e){if(/#\[\s*cfg\s*\(\s*test\s*\)/.test(e))return{reason:"#[cfg(test)]",disposition:"exclude"};let t=mj(e);return t?oj.has(t)?{reason:`#[${t}]`,disposition:"exclude"}:sj.has(t)?{reason:`Rust ABI/export attribute #[${t}]`,disposition:"implicit-usage"}:aj.has(t)?null:{reason:`Rust attribute macro #[${t}]`,disposition:"implicit-usage"}:null}function lj(e){return/#\[\s*derive\s*\(/.test(e)}function VS(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function uj(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function dj(e){let t=gj(e);if(t.size===0)return[];let n=[];for(let r of e.descendantsOfType("mod_item")){let i=r.childForFieldName("name")?.text;i&&t.has(i)&&n.push({startLine:r.startPosition.row,endLine:r.endPosition.row,reason:'attribute `with = "..."` module - body may be invoked via reflection',disposition:"implicit-usage",containerName:i})}return n}function mj(e){let t=/^#!?\[\s*([A-Za-z_][A-Za-z0-9_]*(?:\s*::\s*[A-Za-z_][A-Za-z0-9_]*)*)/.exec(e);return t?t[1].replace(/\s+/g,""):null}function fj(e){return e==="#[tauri::command]"||e==="#[command]"||e==="#[wasm_bindgen]"||e==="#[no_mangle]"||e==="#[napi]"||e==="#[pyfunction]"||e==="#[pymethod]"||e==="#[pyo3]"||e==="#[doc(hidden)]"||e.startsWith("trait ")||e.startsWith("#[derive(<reflective>)]")||e.startsWith("#[derive(...)]")||e.startsWith('serde `with = "')||e.startsWith('attribute `with = "')||e.startsWith("Rust attribute macro #[")||e.startsWith("Rust ABI/export attribute #[")?"implicit-usage":"exclude"}function pj(e){for(let t=0;t<Math.min(e.namedChildCount,12);t+=1){let n=e.namedChild(t);if(!n||n.type!=="line_comment"&&n.type!=="block_comment")break;if(/@generated\b/.test(n.text)||/This file is .*generated\b/i.test(n.text)||/Code generated by/i.test(n.text)||/Generated by:\s*https?:\/\/openapi-generator/i.test(n.text)||/openapi-generator/i.test(n.text)&&/Generated by/i.test(n.text))return!0}return!1}var HS=/\bwith\s*=\s*"([^"]+)"/g;function gj(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){HS.lastIndex=0;let r;for(;(r=HS.exec(n.text))!==null;){let i=r[1],o=i.split("::").pop()??i;o&&t.add(o)}}return t}function qS(e){let t=Cd(e);return(n,r,i,o)=>t(n,r,i,o)?.disposition==="exclude"}function Cd(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=US(e,r),s=new Map;for(let a of o){if(!a.containerName)continue;let c=s.get(a.containerName)??[];c.push(a),s.set(a.containerName,c)}return i={ranges:o,containers:s},t.set(r,i),i};return(r,i,o,s)=>{let a=n(r),c=[];for(let u of a.ranges)i>=u.startLine&&i<=u.endLine&&c.push(u);let l=new Set;s&&l.add(s);for(let u of Rs(o))l.add(u);for(let u of l){let d=a.containers.get(u);d&&c.push(...d)}return hj(c)}}function hj(e){if(e.length===0)return null;let n=e.find(r=>r.disposition==="exclude")??e[0];return{disposition:n.disposition,reason:n.reason}}function xd(e,t={}){wc(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function KS(e,t,n={}){wc(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function JS(e,t){if(t.isIgnoredPath(e.relativePath))return je("ignored-file");if(gn(e.symbol))return je("module-like-symbol");if(!Ta(e.symbol))return je("non-value-symbol");if(!e.isFunctionLike&&e.enclosingSymbol&&Ta(e.enclosingSymbol))return je("nested-non-callable-value");if(!t.includeTests&&!yj(e.relativePath))return je("test-file");if(!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName))return je("excluded-file-region");let n=T(e.symbol);if(n==="<constructor>")return je("implicit-constructor");if(e.symbol.startsWith("scip-python ")){if(n==="__all__")return je("python-runtime-metadata");if(/^__[^_].*__$/.test(n))return je("python-protocol-member")}return t.isDeclarationOnlyCallable()?je("declaration-only-callable"):t.isFrameworkContractCallable()?je("framework-contract-member"):Ie(e.symbol)?je("rust-trait-impl-member"):br(e.symbol)?je("rust-test-module"):!t.includeMembers&&!bj(e)?je("member"):e.endLine-e.startLine+1<t.minLoc?je("below-min-loc"):{accepted:!0}}function yj(e){return G(e)!=="test"}function je(e){return{accepted:!1,rejectionReason:e}}function Ta(e){return te(e)||e.endsWith("().")||e.endsWith(".")}function bj(e){return le(e.symbol)||Rs(e.symbol).length===0}function Fa(e,t){return O(e)-O(t)||e.relativePath.localeCompare(t.relativePath)}function se(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function Vr(e){let t=new Set,n=[];for(let r of e){let i=`${r.symbol}|${r.file}`;t.has(i)||(t.add(i),n.push(r))}return n}function YS(){return new Map}function XS(e,t,n){let r=new Map;for(let i of lg(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||La(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function QS(e,t,n,r={}){let i=new Set;if(r.conservative||n.size===0){for(let o of dg(e,t))i.add(o.symbol_id);return i}for(let o of ug(e,t))e.isIgnored(o.relative_path)||n.has(o.relative_path)||i.add(o.symbol_id);return i}function Rd(e,t){let n=e.get(t);if(!n)return!1;for(let r of n.values())if(r.occurrences>0)return!0;return!1}function _a(e,t,n){let r=e.get(t);if(!r)return!1;for(let[i,o]of r)if(i!==n&&o.occurrences>0)return!0;return!1}function ZS(e){return e?.occurrences??0}function La(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=tC(e,t,n);o.occurrences+=r,o.sources.add(i)}function eC(e,t,n,r,i){if(r<=0)return;let o=tC(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function tC(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let i=r.get(n);return i||(i={occurrences:0,sources:new Set},r.set(n,i)),i}var Sj=new Set(["componentDidCatch","componentDidMount","componentDidUpdate","componentWillUnmount","getDerivedStateFromError","getDerivedStateFromProps","getSnapshotBeforeUpdate","render","shouldComponentUpdate","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate"]);function qr(e,t){if(!t.parentTypeName||!/\.[cm]?[jt]sx?$/.test(t.relativePath))return!1;let n=K(e,t.relativePath);if(!n)return!1;let r=n.rootNode.descendantsOfType("method_definition").find(s=>s.startPosition.row<=t.startLine&&s.endPosition.row>=t.endLine);if(!r)return!1;if(/\boverride\b/.test(r.text.slice(0,Math.max(0,r.text.indexOf("{")))))return!0;let i=r.parent;for(;i&&i.type!=="class_declaration"&&i.type!=="class";)i=i.parent;if(!i)return!1;let o=i.text.slice(0,Math.max(0,i.text.indexOf("{")));return/\bimplements\b/.test(o)||/\bextends\b/.test(o)?!0:Sj.has(t.leaf)&&/\bextends\s+(?:React\.)?(?:Component|PureComponent)\b/.test(o)}var Cj=1e3,xj=300;function lr(e,t={}){let{scope:n,minLoc:r=1,includeTests:i=!1,skipBarrels:o=!1,includeMembers:s=!1,deadCodeOnly:a=!1,scanLimit:c,semantic:l=!0}=t,u=0,d=E("dead.candidates",()=>{let S=se(Rj(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),c);return u=S.length,S},()=>({definitions:u})),m=0,f=o?E("dead.inactive-barrels",()=>{let S=new Set(ES(e));return m=S.size,S},()=>({paths:m})):new Set,p=0,g=a?YS():E("dead.mention-reference-counts",()=>{let S=XS(e,f,d.map(v=>v.symbolId));return p=S.size,S},()=>({definitions:d.length,symbolsWithReferences:p})),y=0,h=a?E("dead.mentioned-symbol-ids",()=>{let S=QS(e,d.map(v=>v.symbolId),f,{conservative:f.size===0});return y=S.size,S},()=>({definitions:d.length,referencedSymbols:y})):new Set,x=a?d.filter(S=>!h.has(S.symbolId)):d.filter(S=>!_a(g,S.symbolId,S.relativePath));a?E("dead.source-fallback.dead-code-only",()=>kj(e,x,g,{inactiveBarrelPaths:f}),()=>({definitions:x.length,testReferencesIncluded:!0})):E("dead.source-fallback.ast",()=>Pj(e,x,g,{inactiveBarrelPaths:f}),()=>({definitions:x.length,testReferencesIncluded:!0}));let b=a?x.filter(S=>!Rd(g,S.symbolId)):x.filter(S=>!_a(g,S.symbolId,S.relativePath));E("dead.caller-map-supplement",()=>Nj(e,b,g,{inactiveBarrelPaths:f,includeSemantic:!a&&l}),()=>({definitions:b.length,semantic:!a&&l}));let C=a?x.filter(S=>!Rd(g,S.symbolId)):d;return Dj(e,wj(C,g))}function Rj(e,t){let n=qS(e),r=[];for(let i of vi(e,{scope:t.scope,symbolMatches:Ta,sqlPrefilter:"function-like"}))JS(i,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:s=>e.isIgnored(s),isExcludedRegion:n,isDeclarationOnlyCallable:()=>Ij(e,i),isFrameworkContractCallable:()=>qr(e,i)}).accepted&&r.push(i);return r}var vj=["method_signature","abstract_method_signature","call_signature","construct_signature"];function Ij(e,t){if(!t.parentTypeName||!/\.[cm]?[jt]sx?$/.test(t.relativePath))return!1;let n=K(e,t.relativePath);if(n)return n.rootNode.descendantsOfType([...vj]).some(i=>i.startPosition.row<=t.startLine&&i.endPosition.row>=t.endLine);let r=Ce(e,t.relativePath).slice(t.startLine,t.endLine+1).join(`
|
|
511
|
-
`).trim();return r.endsWith(";")&&!r.includes("=>")&&!r.includes("{")}function
|
|
510
|
+
ORDER BY d1.relative_path`,...t,...t,...t)}function zO(e,t){let n=new F(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>le(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function VO(e){let t=new Set;return e.filter(n=>{let r=`${n.relative_path}|${n.symbol}`;return t.has(r)?!1:(t.add(r),!0)})}function qO(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:I(e.symbol)}}var lo=new WeakMap,$S=oe({kind:"definition-exclusions",invalidation:J("definition-exclusions"),serialize:e=>JSON.stringify(e),deserialize:KO});function US(e,t){let n=M(t);if(!(n==="rust"||n==="typescript"||n==="tsx"||n==="javascript"))return[];let i=P(e,t);if(!i)return[];let o=ce(e,t,i),s=$S.read(e,t,o);if(s)return s;let a=n==="rust"?nj(e,t):QO(e,t);return $S.write(e,t,o,a),a}function KO(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=t.map(JO);return n.some(r=>r===null)?null:n}catch{return null}}function JO(e){if(!e||typeof e!="object")return null;let t=e;if(typeof t.startLine!="number"||!Number.isFinite(t.startLine)||typeof t.endLine!="number"||!Number.isFinite(t.endLine)||typeof t.reason!="string"||t.containerName!==void 0&&typeof t.containerName!="string")return null;let n=t.disposition===void 0?pj(t.reason):t.disposition;return n!=="exclude"&&n!=="implicit-usage"?null:{startLine:t.startLine,endLine:t.endLine,reason:t.reason,disposition:n,...t.containerName?{containerName:t.containerName}:{}}}var WS=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]),YO=/\b(?:describe|it|test|fdescribe|fit|xdescribe|xit|beforeEach|afterEach|beforeAll|afterAll|before|after|suite|bench|benchmark)\s*\(/,XO=/\b(?:export\s+)?(?:async\s+)?function\s+use[A-Z][A-Za-z0-9_$]*\b|\b(?:const|let|var)\s+use[A-Z][A-Za-z0-9_$]*\s*(?::[^=;]+)?=\s*(?:async\s*)?(?:function\b|(?:<[^=;{]+>\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)\s*=>)/;function QO(e,t){let n=P(e,t);if(!n||!ZO(n))return[];let r=K(e,t);if(!r)return[];let i=lo.get(r);if(i)return i;let o=!1,s=r.rootNode;for(let c of s.namedChildren){if(c.type!=="expression_statement")continue;let l=c.namedChild(0);if(!l||l.type!=="call_expression")continue;let u=l.namedChild(0);if(!u)continue;let d=u.type==="member_expression"?u.namedChild(u.namedChildCount-1)?.text:u.text;if(d&&WS.has(d)){o=!0;break}}let a=[];o&&a.push({startLine:0,endLine:s.endPosition.row,reason:"TS/JS test file (describe/it/test at top level)",disposition:"exclude"});for(let c of s.namedChildren){let l=null,u=null;if(c.type==="function_declaration")l=c.namedChild(0)?.text??null,u=c;else if(c.type==="export_statement"){let d=c.namedChild(0);d?.type==="function_declaration"&&(l=d.namedChild(0)?.text??null,u=d)}else if(c.type==="lexical_declaration"){let d=c.namedChild(0);if(d?.type==="variable_declarator"){let m=d.namedChild(0)?.text,f=d.namedChild(1);m&&(f?.type==="arrow_function"||f?.type==="function_expression")&&(l=m,u=d)}}l&&/^use[A-Z]/.test(l)&&u&&a.push({startLine:u.startPosition.row,endLine:u.endPosition.row,reason:"React custom hook (use*)",disposition:"exclude"})}return a.push(...GS(r,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),lo.set(r,a),a}function ZO(e){if(e.includes("scip-query"))return!0;let t=!1;for(let n of WS)if(e.includes(n)){t=!0;break}return t&&YO.test(e)?!0:e.includes("use")&&XO.test(e)}var ej=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function tj(e){return ej.test(e)}function GS(e,t,n){let r=[],i=o=>{if(t.has(o.type)&&o.parent){let a=o.parent.children,c=-1;for(let l=0;l<a.length;l+=1)if(a[l].startIndex===o.startIndex&&a[l].type===o.type){c=l;break}if(c>0)for(let l=c-1;l>=0;l-=1){let u=a[l];if(n.has(u.type)){if(tj(u.text)){r.push({startLine:o.startPosition.row,endLine:o.endPosition.row,reason:"scip-query suppression comment",disposition:"exclude"});break}continue}if(!(u.type==="attribute_item"||u.type==="inner_attribute_item"))break}}for(let s of o.namedChildren)i(s)};return i(e.rootNode),r}function nj(e,t){let n=K(e,t);if(!n)return[];let r=lo.get(n);if(r)return r;let i=[],o=rj(n);return o?(lo.set(n,o),o):(zS(n.rootNode,i,!1,!1),i.push(...GS(n,new Set(["function_item","function_signature_item","struct_item","enum_item","union_item","impl_item","mod_item","static_item","const_item"]),new Set(["line_comment","block_comment"]))),i.push(...mj(n.rootNode)),lo.set(n,i),i)}function rj(e){return gj(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)",disposition:"exclude"}]:null}function zS(e,t,n,r){let i=n,o=r;e.type==="trait_item"&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait declaration body (dynamic dispatch)",disposition:"implicit-usage"}),e.type==="impl_item"&&e.childForFieldName("trait")&&(o=!0,t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl block (dynamic dispatch)",disposition:"implicit-usage"})),e.type==="function_item"||e.type==="function_signature_item"?ij(e,t,n,r):r&&dj(e)?t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"trait impl associated item (dynamic dispatch)",disposition:"implicit-usage"}):e.type==="struct_item"||e.type==="enum_item"||e.type==="union_item"?oj(e,t,n):e.type==="mod_item"&&Sd(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)zS(s,t,i,o)}function ij(e,t,n,r){let i=Sd(e),o=null;r?o={reason:"trait impl method (dynamic dispatch)",disposition:"implicit-usage"}:n&&(o={reason:"inside #[cfg(test)] mod",disposition:"exclude"});for(let s of i){if(VS(s)){o={reason:"#[allow(dead_code)]",disposition:"exclude"};break}let a=lj(s);if(a){o=a;break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o.reason,disposition:o.disposition})}function oj(e,t,n){let r=Sd(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(uj)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(...)] - generated impl may access fields",disposition:"implicit-usage",containerName:i}),r.some(VS)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[allow(dead_code)]",disposition:"exclude",containerName:i}),n&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"inside #[cfg(test)] mod",disposition:"exclude",containerName:i})}function Sd(e){let t=e.parent;if(!t)return[];let n=t.children,r=-1;for(let o=0;o<n.length;o+=1)if(n[o].startIndex===e.startIndex&&n[o].type===e.type){r=o;break}if(r<=0)return[];let i=[];for(let o=r-1;o>=0;o-=1){let s=n[o];if(s.type==="attribute_item"||s.type==="inner_attribute_item")i.push(s.text);else{if(s.type==="line_comment"||s.type==="block_comment")continue;break}}return i}var sj=new Set(["test","bench","tokio::test","async_std::test"]),aj=new Set(["no_mangle","export_name","link_name","used","macro_export","proc_macro","proc_macro_derive","proc_macro_attribute"]),cj=new Set(["allow","warn","deny","forbid","cfg","cfg_attr","doc","inline","cold","must_use","deprecated","repr","derive","automatically_derived","non_exhaustive","path","link","link_section","global_allocator","panic_handler"]);function lj(e){if(/#\[\s*cfg\s*\(\s*test\s*\)/.test(e))return{reason:"#[cfg(test)]",disposition:"exclude"};let t=fj(e);return t?sj.has(t)?{reason:`#[${t}]`,disposition:"exclude"}:aj.has(t)?{reason:`Rust ABI/export attribute #[${t}]`,disposition:"implicit-usage"}:cj.has(t)?null:{reason:`Rust attribute macro #[${t}]`,disposition:"implicit-usage"}:null}function uj(e){return/#\[\s*derive\s*\(/.test(e)}function VS(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function dj(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function mj(e){let t=hj(e);if(t.size===0)return[];let n=[];for(let r of e.descendantsOfType("mod_item")){let i=r.childForFieldName("name")?.text;i&&t.has(i)&&n.push({startLine:r.startPosition.row,endLine:r.endPosition.row,reason:'attribute `with = "..."` module - body may be invoked via reflection',disposition:"implicit-usage",containerName:i})}return n}function fj(e){let t=/^#!?\[\s*([A-Za-z_][A-Za-z0-9_]*(?:\s*::\s*[A-Za-z_][A-Za-z0-9_]*)*)/.exec(e);return t?t[1].replace(/\s+/g,""):null}function pj(e){return e==="#[tauri::command]"||e==="#[command]"||e==="#[wasm_bindgen]"||e==="#[no_mangle]"||e==="#[napi]"||e==="#[pyfunction]"||e==="#[pymethod]"||e==="#[pyo3]"||e==="#[doc(hidden)]"||e.startsWith("trait ")||e.startsWith("#[derive(<reflective>)]")||e.startsWith("#[derive(...)]")||e.startsWith('serde `with = "')||e.startsWith('attribute `with = "')||e.startsWith("Rust attribute macro #[")||e.startsWith("Rust ABI/export attribute #[")?"implicit-usage":"exclude"}function gj(e){for(let t=0;t<Math.min(e.namedChildCount,12);t+=1){let n=e.namedChild(t);if(!n||n.type!=="line_comment"&&n.type!=="block_comment")break;if(/@generated\b/.test(n.text)||/This file is .*generated\b/i.test(n.text)||/Code generated by/i.test(n.text)||/Generated by:\s*https?:\/\/openapi-generator/i.test(n.text)||/openapi-generator/i.test(n.text)&&/Generated by/i.test(n.text))return!0}return!1}var HS=/\bwith\s*=\s*"([^"]+)"/g;function hj(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){HS.lastIndex=0;let r;for(;(r=HS.exec(n.text))!==null;){let i=r[1],o=i.split("::").pop()??i;o&&t.add(o)}}return t}function qS(e){let t=Cd(e);return(n,r,i,o)=>t(n,r,i,o)?.disposition==="exclude"}function Cd(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=US(e,r),s=new Map;for(let a of o){if(!a.containerName)continue;let c=s.get(a.containerName)??[];c.push(a),s.set(a.containerName,c)}return i={ranges:o,containers:s},t.set(r,i),i};return(r,i,o,s)=>{let a=n(r),c=[];for(let u of a.ranges)i>=u.startLine&&i<=u.endLine&&c.push(u);let l=new Set;s&&l.add(s);for(let u of Rs(o))l.add(u);for(let u of l){let d=a.containers.get(u);d&&c.push(...d)}return yj(c)}}function yj(e){if(e.length===0)return null;let n=e.find(r=>r.disposition==="exclude")??e[0];return{disposition:n.disposition,reason:n.reason}}function xd(e,t={}){wc(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function KS(e,t,n={}){wc(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function JS(e,t){if(t.isIgnoredPath(e.relativePath))return je("ignored-file");if(gn(e.symbol))return je("module-like-symbol");if(!Fa(e.symbol))return je("non-value-symbol");if(!e.isFunctionLike&&e.enclosingSymbol&&Fa(e.enclosingSymbol))return je("nested-non-callable-value");if(!t.includeTests&&!bj(e.relativePath))return je("test-file");if(!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName))return je("excluded-file-region");let n=T(e.symbol);if(n==="<constructor>")return je("implicit-constructor");if(e.symbol.startsWith("scip-python ")){if(n==="__all__")return je("python-runtime-metadata");if(/^__[^_].*__$/.test(n))return je("python-protocol-member")}return t.isDeclarationOnlyCallable()?je("declaration-only-callable"):t.isFrameworkContractCallable()?je("framework-contract-member"):Ie(e.symbol)?je("rust-trait-impl-member"):br(e.symbol)?je("rust-test-module"):!t.includeMembers&&!Sj(e)?je("member"):e.endLine-e.startLine+1<t.minLoc?je("below-min-loc"):{accepted:!0}}function bj(e){return G(e)!=="test"}function je(e){return{accepted:!1,rejectionReason:e}}function Fa(e){return te(e)||e.endsWith("().")||e.endsWith(".")}function Sj(e){return le(e.symbol)||Rs(e.symbol).length===0}function _a(e,t){return O(e)-O(t)||e.relativePath.localeCompare(t.relativePath)}function se(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function Vr(e){let t=new Set,n=[];for(let r of e){let i=`${r.symbol}|${r.file}`;t.has(i)||(t.add(i),n.push(r))}return n}function YS(){return new Map}function XS(e,t,n){let r=new Map;for(let i of lg(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||Na(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function QS(e,t,n,r={}){let i=new Set;if(r.conservative||n.size===0){for(let o of dg(e,t))i.add(o.symbol_id);return i}for(let o of ug(e,t))e.isIgnored(o.relative_path)||n.has(o.relative_path)||i.add(o.symbol_id);return i}function vd(e,t){let n=e.get(t);if(!n)return!1;for(let r of n.values())if(r.occurrences>0)return!0;return!1}function La(e,t,n){let r=e.get(t);if(!r)return!1;for(let[i,o]of r)if(i!==n&&o.occurrences>0)return!0;return!1}function ZS(e){return e?.occurrences??0}function Na(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=tC(e,t,n);o.occurrences+=r,o.sources.add(i)}function eC(e,t,n,r,i){if(r<=0)return;let o=tC(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function tC(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let i=r.get(n);return i||(i={occurrences:0,sources:new Set},r.set(n,i)),i}var Cj=new Set(["componentDidCatch","componentDidMount","componentDidUpdate","componentWillUnmount","getDerivedStateFromError","getDerivedStateFromProps","getSnapshotBeforeUpdate","render","shouldComponentUpdate","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate"]);function qr(e,t){if(!t.parentTypeName||!/\.[cm]?[jt]sx?$/.test(t.relativePath))return!1;let n=K(e,t.relativePath);if(!n)return!1;let r=n.rootNode.descendantsOfType("method_definition").find(s=>s.startPosition.row<=t.startLine&&s.endPosition.row>=t.endLine);if(!r)return!1;if(/\boverride\b/.test(r.text.slice(0,Math.max(0,r.text.indexOf("{")))))return!0;let i=r.parent;for(;i&&i.type!=="class_declaration"&&i.type!=="class";)i=i.parent;if(!i)return!1;let o=i.text.slice(0,Math.max(0,i.text.indexOf("{")));return/\bimplements\b/.test(o)||/\bextends\b/.test(o)?!0:Cj.has(t.leaf)&&/\bextends\s+(?:React\.)?(?:Component|PureComponent)\b/.test(o)}var xj=1e3,vj=300;function lr(e,t={}){let{scope:n,minLoc:r=1,includeTests:i=!1,skipBarrels:o=!1,includeMembers:s=!1,deadCodeOnly:a=!1,scanLimit:c,semantic:l=!0}=t,u=0,d=E("dead.candidates",()=>{let S=se(Rj(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),c);return u=S.length,S},()=>({definitions:u})),m=0,f=o?E("dead.inactive-barrels",()=>{let S=new Set(ES(e));return m=S.size,S},()=>({paths:m})):new Set,p=0,g=a?YS():E("dead.mention-reference-counts",()=>{let S=XS(e,f,d.map(R=>R.symbolId));return p=S.size,S},()=>({definitions:d.length,symbolsWithReferences:p})),y=0,h=a?E("dead.mentioned-symbol-ids",()=>{let S=QS(e,d.map(R=>R.symbolId),f,{conservative:f.size===0});return y=S.size,S},()=>({definitions:d.length,referencedSymbols:y})):new Set,x=a?d.filter(S=>!h.has(S.symbolId)):d.filter(S=>!La(g,S.symbolId,S.relativePath));a?E("dead.source-fallback.dead-code-only",()=>Tj(e,x,g,{inactiveBarrelPaths:f}),()=>({definitions:x.length,testReferencesIncluded:!0})):E("dead.source-fallback.ast",()=>Pj(e,x,g,{inactiveBarrelPaths:f}),()=>({definitions:x.length,testReferencesIncluded:!0}));let b=a?x.filter(S=>!vd(g,S.symbolId)):x.filter(S=>!La(g,S.symbolId,S.relativePath));E("dead.caller-map-supplement",()=>Aj(e,b,g,{inactiveBarrelPaths:f,includeSemantic:!a&&l}),()=>({definitions:b.length,semantic:!a&&l}));let C=a?x.filter(S=>!vd(g,S.symbolId)):d;return kj(e,Ej(C,g))}function Rj(e,t){let n=qS(e),r=[];for(let i of Ri(e,{scope:t.scope,symbolMatches:Fa,sqlPrefilter:"function-like"}))JS(i,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:s=>e.isIgnored(s),isExcludedRegion:n,isDeclarationOnlyCallable:()=>wj(e,i),isFrameworkContractCallable:()=>qr(e,i)}).accepted&&r.push(i);return r}var Ij=["method_signature","abstract_method_signature","call_signature","construct_signature"];function wj(e,t){if(!t.parentTypeName||!/\.[cm]?[jt]sx?$/.test(t.relativePath))return!1;let n=K(e,t.relativePath);if(n)return n.rootNode.descendantsOfType([...Ij]).some(i=>i.startPosition.row<=t.startLine&&i.endPosition.row>=t.endLine);let r=Ce(e,t.relativePath).slice(t.startLine,t.endLine+1).join(`
|
|
511
|
+
`).trim();return r.endsWith(";")&&!r.includes("=>")&&!r.includes("{")}function Ej(e,t){return e.map(n=>Dj(n,t)).filter(n=>n.cross_file_refs===0).sort((n,r)=>r.loc-n.loc||n.relative_path.localeCompare(r.relative_path)||n.start_line-r.start_line)}function Dj(e,t){let n=t.get(e.symbolId)??new Map,r=ZS(n.get(e.relativePath)),i=0;for(let[o,s]of n)o!==e.relativePath&&(i+=s.occurrences);return{relative_path:e.relativePath,start_line:e.startLine,end_line:e.endLine,loc:e.endLine-e.startLine+1,symbol:e.symbol,parent_type_name:e.parentTypeName,same_file_refs:r,cross_file_refs:i}}function kj(e,t){let n=Cd(e),r=[],i=0,o=0,s=0,a=0,c=0,l=0;for(let u of t){if(e.isIgnored(u.relative_path))continue;if(De(e,u.relative_path)){a++;continue}if(de(e,u.symbol,u.relative_path)){c++;continue}let d=n(u.relative_path,u.start_line,u.symbol,u.parent_type_name),m=d?.disposition==="implicit-usage"?d.reason:void 0,f=m?"implicit-usage":u.same_file_refs===0?"dead-code":"file-internal";f==="dead-code"?i++:f==="file-internal"?o++:s++,l+=u.loc,r.push({relativePath:u.relative_path,startLine:u.start_line,endLine:u.end_line,loc:u.loc,symbol:u.symbol,shortName:I(u.symbol),sameFileRefs:u.same_file_refs,kind:f,...m?{implicitUsageReason:m}:{}})}return{symbols:r,counts:{total:r.length,deadCode:i,fileInternal:o,implicitUsage:s,loc:l},applicability:{entrySurfaceExcluded:a,externalRootExcluded:c,implicitUsageSignals:s},totalCount:r.length,deadCodeCount:i,fileInternalCount:o,implicitUsageCount:s,totalLoc:l}}function Pj(e,t,n,r){if(t.length===0)return;let i=new F(e),o=new Set(t.map(c=>c.symbolId)),s=new Set(t.map(c=>c.leaf).filter(Boolean)),a=new Set(i.sourceFiles());for(let c of N(e))a.add(c);i.scanSourceReferences({paths:a,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:s,skipPath:c=>r.inactiveBarrelPaths.has(c)},c=>{o.has(c.target.symbolId)&&(Lj(e,c)||Na(n,c.target.symbolId,c.sourceFile,Nj(c),"source-fallback"))})}function Tj(e,t,n,r){if(t.length===0)return;let i=new F(e),o=Fj(t),s=new Set(i.sourceFiles());for(let u of N(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let d=c.get(u);return d||(d=Fs(e,u),c.set(u,d)),d};i.scanSourceReferences({paths:s,includeVueSfc:!0,includeCrossLanguageDispatchNames:!0,includeRustAttributeNames:!0,identifierResolution:"permissive",candidateNames:a,skipPath:u=>r.inactiveBarrelPaths.has(u),resolveTargets:({sourceFile:u,name:d,kind:m})=>{let f=o.get(d);return f?_j(u,d,f,()=>l(u),{permissive:m!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),KS(e,u)}},u=>{let d=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&nC(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:d})||Na(n,u.target.symbolId,u.sourceFile,d,"source-fallback")})}function Fj(e){let t=new Map;for(let n of e){if(!n.leaf)continue;let r=t.get(n.leaf)??[];r.push(n),t.set(n.leaf,r)}return t}function _j(e,t,n,r,i){let o=n.filter(l=>l.relativePath===e);if(o.length>0)return o;if(!i.permissive&&n.length===1)return[...n];let s=r(),a=s.get(t);if(a)for(let l of a){let u=n.filter(d=>Ve(l,d.relativePath));if(u.length>0)return u}let c=new Set;for(let l of s.values())for(let u of l)c.add(u);for(let l of c){let u=n.filter(d=>Ve(l,d.relativePath));if(u.length>0&&u.length===n.length)return u}return i.permissive?[...n]:[]}function Lj(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&nC(e,t)}function Nj(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function nC(e,t){return t.occurrences>1?!1:Z(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function Aj(e,t,n,r){let i=r.includeSemantic!==!1,o=i&&t.length>=xj&&N(e).length>=vj,s=(u,d)=>{d===u.relativePath||e.isIgnored(d)||r.inactiveBarrelPaths.has(d)||eC(n,u.symbolId,d,1,"caller-map")};if(o?E("dead.caller-map.per-symbol-non-semantic",()=>{for(let u of t){let d=xt(e,u,{semantic:!1,semanticEvidence:H});for(let m of d)s(u,m.file)}},()=>({definitions:t.length,semantic:!1})):E("dead.caller-map.per-symbol",()=>{for(let u of t){let d=xt(e,u,{semantic:i,semanticEvidence:H});if(d.length!==0)for(let m of d)s(u,m.file)}},()=>({definitions:t.length,semantic:i})),!o)return;let a=0,c=E("dead.caller-map.semantic-candidates",()=>{let u=t.filter(d=>!La(n,d.symbolId,d.relativePath));return a=u.length,u},()=>({definitions:t.length,semanticCandidates:a}));if(c.length===0)return;let l=Sy(e,c);for(let u of c){let d=l.get(u.symbolId);if(d)for(let m of d)s(u,m)}}function Mj(e,t={}){let{limit:n=30,scope:r}=t,i=r?"AND def_d.relative_path LIKE ?":"",o=r?[`%${r}%`]:[],a=e.all(`SELECT
|
|
512
512
|
gs.symbol,
|
|
513
513
|
COUNT(*) AS ref_count,
|
|
514
514
|
COUNT(DISTINCT ref_d.id) AS file_count,
|
|
@@ -532,14 +532,14 @@ Thumbs.db
|
|
|
532
532
|
${i}
|
|
533
533
|
GROUP BY gs.id
|
|
534
534
|
ORDER BY ref_count DESC
|
|
535
|
-
LIMIT ?`,...o,n).filter(c=>!e.isIgnored(c.defined_in)).map(c=>({symbol:c.symbol,shortName:I(c.symbol),refCount:c.ref_count,fileCount:c.file_count,definedIn:c.defined_in}));return a.length>0?a:
|
|
535
|
+
LIMIT ?`,...o,n).filter(c=>!e.isIgnored(c.defined_in)).map(c=>({symbol:c.symbol,shortName:I(c.symbol),refCount:c.ref_count,fileCount:c.file_count,definedIn:c.defined_in}));return a.length>0?a:Oj(e,r,n)}function Oj(e,t,n){return xe(e,{scope:t}).filter(r=>!e.isIgnored(r.relativePath)).map(r=>jj(e,r)).filter(r=>r.refCount>0).sort((r,i)=>i.refCount-r.refCount||i.fileCount-r.fileCount).slice(0,n)}function jj(e,t){let r=xt(e,t,{limit:500,semanticEvidence:H}).filter(i=>i.file!==t.relativePath);return{symbol:t.symbol,shortName:I(t.symbol),refCount:r.length,fileCount:new Set(r.map(i=>i.file)).size,definedIn:t.relativePath}}function Bj(e,t,n={}){return Jj(e,t,n)?.map(r=>({symbol:r.symbol,shortName:r.shortName,fromFile:r.fromFile}))??[]}function $j(e,t){let n=B(e,t),r=Wj(e,t);if(r.length>0&&!zj(n))return r;let i=Gj(e,t,n);return Rd(t)&&i.length>0?i:Vj([...r,...i])}function Hj(e,t,n={}){let r=Oe(e,t);if(!r)return[];let i=iC(e,r),o=n.semantic===!1?null:rC(e,r);return(o?Uj(o,i):i).filter(a=>!a.used).map(a=>({symbol:a.symbol,shortName:a.shortName,importedIn:a.importer}))}function Uj(e,t){let n=new Map;for(let i of t){let o=n.get(i.shortName);o?o.push(i):n.set(i.shortName,[i])}let r=e.map(i=>{let o=n.get(i.shortName),s=o?.shift();return o?.length===0&&n.delete(i.shortName),s?{...i,used:i.used||s.used}:i});return r.push(...[...n.values()].flat()),r}function Wj(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
|
|
536
536
|
FROM mentions m
|
|
537
537
|
JOIN chunks c ON m.chunk_id = c.id
|
|
538
538
|
JOIN documents d ON c.document_id = d.id
|
|
539
539
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
540
540
|
WHERE gs.symbol LIKE ?
|
|
541
541
|
AND m.role = 2
|
|
542
|
-
ORDER BY d.relative_path`,`%${t}%`).filter(r=>!e.isIgnored(r.importer)).map(r=>({symbol:r.symbol,shortName:I(r.symbol),fromFile:r.importer}))}function
|
|
542
|
+
ORDER BY d.relative_path`,`%${t}%`).filter(r=>!e.isIgnored(r.importer)).map(r=>({symbol:r.symbol,shortName:I(r.symbol),fromFile:r.importer}))}function Gj(e,t,n=B(e,t)){let r=n?.relativePath??null,i=n?T(n.symbol):t.replace(/\(\)$/,""),o=n?gn(n.symbol):!1,s=new Set;for(let c of N(e,{includeIgnored:!1}))for(let l of Z(e,c))qj(l,c,{targetFile:r,targetLeaf:i,targetIsModule:o,targetPattern:t})&&s.add(c);let a=Rd(t)?t.trim():null;return[...s].sort().map(c=>({symbol:a??n?.symbol??i,shortName:a??(n?I(n.symbol):i),fromFile:c}))}function zj(e){return!!(e&&(e.symbol.startsWith("scip-clojure ")||M(e.relativePath)==="clojure"))}function Vj(e){let t=new Set,n=[];for(let r of e){let i=`${r.symbol}|${r.fromFile}`;t.has(i)||(t.add(i),n.push(r))}return n.sort((r,i)=>r.fromFile.localeCompare(i.fromFile)||r.shortName.localeCompare(i.shortName))}function qj(e,t,n){return!e.sourcePath||n.targetFile&&ne(e.sourcePath)!==ne(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&Zj(t)||e.kind==="namespace"&&Kj(e,n.targetPattern)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function Kj(e,t){let n=t.trim().replace(/\(\)$/,"");return Rd(n)?e.importedName===n||e.localName===n:!1}function Rd(e){let t=e.trim().replace(/\(\)$/,"");return t.includes(".")&&!t.includes("/")&&!t.includes(":")}function Jj(e,t,n={}){let r=Oe(e,t);return r?Yj(e,r,n)??(n.semantic===!1?null:rC(e,r))??iC(e,r):null}function Yj(e,t,n){let i=e.all(`SELECT DISTINCT
|
|
543
543
|
gs.symbol,
|
|
544
544
|
def_d.relative_path AS from_file,
|
|
545
545
|
imp_d.relative_path AS importer,
|
|
@@ -565,7 +565,7 @@ Thumbs.db
|
|
|
565
565
|
LEFT JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
566
566
|
WHERE imp_d.relative_path = ?
|
|
567
567
|
AND m.role = 2
|
|
568
|
-
ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(i.length>0){let o=n.semantic===!1?[]:Gi(e,t);return i.map(s=>({symbol:s.symbol,shortName:I(s.symbol),fromFile:s.from_file??"(external)",importer:s.importer,used:s.used!==0||o.some(a=>a.isUsed&&a.sourcePath===s.from_file)}))}return null}function rC(e,t){let n=Gi(e,t);return n.length>0?n.map(r=>{let i=oC(r.importedName,r.localName,r.kind);return{symbol:i,shortName:i,fromFile:r.sourcePath??"(external)",importer:t,used:r.kind==="side-effect"?!0:r.isUsed}}):null}function iC(e,t){let n=
|
|
568
|
+
ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(i.length>0){let o=n.semantic===!1?[]:Gi(e,t);return i.map(s=>({symbol:s.symbol,shortName:I(s.symbol),fromFile:s.from_file??"(external)",importer:s.importer,used:s.used!==0||o.some(a=>a.isUsed&&a.sourcePath===s.from_file)}))}return null}function rC(e,t){let n=Gi(e,t);return n.length>0?n.map(r=>{let i=oC(r.importedName,r.localName,r.kind);return{symbol:i,shortName:i,fromFile:r.sourcePath??"(external)",importer:t,used:r.kind==="side-effect"?!0:r.isUsed}}):null}function iC(e,t){let n=Xj(t,P(e,t));return Z(e,t).map(r=>{let i=oC(r.importedName,r.localName,r.kind),o=r.kind==="side-effect"||Qj(t,r)||n.has(r.localName??r.importedName)?!0:r.used;return{symbol:i,shortName:i,fromFile:r.sourcePath??"(external)",importer:t,used:o}})}function Xj(e,t){let n=new Set;if(M(e)!=="python")return n;let r=/(?:^|\n)\s*__all__\s*(?:\+?=)\s*[[(]([\s\S]*?)[\])]/g;for(let i of t.matchAll(r)){let o=i[1]??"";for(let s of o.matchAll(/(['"])([A-Za-z_]\w*)\1/g))n.add(s[2])}return n}function Qj(e,t){if(M(e)!=="rust"||t.used||t.kind==="side-effect")return!1;let n=t.localName??t.importedName;return n==="_"||/^[A-Z]/.test(n)}function oC(e,t,n){return n==="namespace"&&e==="*"&&t?`* as ${t}`:n==="default"&&t?`default as ${t}`:n==="side-effect"?"(side effect import)":t&&t!==e?`${e} as ${t}`:e}function Zj(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function eB(e,t){let n=B(e,t);if(!n)return[];let i=new F(e).definitionsForFile(n.relativePath).filter(o=>o.symbol!==n.symbol).filter(o=>If(n.symbol,o.symbol)).sort((o,s)=>o.startLine-s.startLine||o.endLine-s.endLine).map(o=>({symbol:o.symbol,shortName:I(o.symbol),startLine:o.startLine,endLine:o.endLine,kind:ue(o.symbol)??"unknown"}));return M(n.relativePath)!=="clojure"?i:nB(i,tB(e,n))}function tB(e,t){let n=T(t.symbol);if(!n)return[];let r=I(t.symbol);return(z(e,t.relativePath)?.clojureMembers??[]).filter(i=>i.ownerName===n).map(i=>({symbol:`${t.symbol}${i.memberName}().`,shortName:`${r}:${i.memberName}()`,startLine:i.startLine,endLine:i.endLine,kind:i.memberKind}))}function nB(e,t){let n=new Map;for(let r of[...e,...t])n.set(`${r.shortName}:${r.startLine}:${r.endLine}`,r);return[...n.values()].sort((r,i)=>r.startLine-i.startLine||r.endLine-i.endLine)}function rB(e,t){let n=B(e,t);if(!n)return[];let r=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
|
|
569
569
|
FROM mentions m
|
|
570
570
|
JOIN chunks c ON m.chunk_id = c.id
|
|
571
571
|
JOIN (
|
|
@@ -577,7 +577,7 @@ Thumbs.db
|
|
|
577
577
|
) sym_def ON sym_def.symbol_id = m.symbol_id
|
|
578
578
|
WHERE m.symbol_id = ?
|
|
579
579
|
AND m.role != 1
|
|
580
|
-
AND sym_def.document_id != c.document_id`,n.symbolId);return[{name:I(n.symbol),count:r?.file_count??0,symbol:n.symbol,definedIn:n.relativePath}]}function
|
|
580
|
+
AND sym_def.document_id != c.document_id`,n.symbolId);return[{name:I(n.symbol),count:r?.file_count??0,symbol:n.symbol,definedIn:n.relativePath}]}function iB(e,t){let n=Oe(e,t);if(!n)return[];let i=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
|
|
581
581
|
FROM mentions m
|
|
582
582
|
JOIN chunks c ON m.chunk_id = c.id
|
|
583
583
|
JOIN documents d ON c.document_id = d.id
|
|
@@ -594,7 +594,7 @@ Thumbs.db
|
|
|
594
594
|
AND m.role != 1
|
|
595
595
|
AND def_d.id != d.id
|
|
596
596
|
GROUP BY d.id
|
|
597
|
-
ORDER BY symbol_count DESC`,n).filter(a=>!e.isIgnored(a.relative_path)).map(a=>({name:a.relative_path,count:a.symbol_count}));if(i.length>0)return i;let s=ie(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function
|
|
597
|
+
ORDER BY symbol_count DESC`,n).filter(a=>!e.isIgnored(a.relative_path)).map(a=>({name:a.relative_path,count:a.symbol_count}));if(i.length>0)return i;let s=ie(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function oB(e,t={}){return sB(e,t).map(n=>({name:I(n.symbol),count:n.file_count,symbol:n.symbol,definedIn:n.defined_in}))}function sB(e,t){let{limit:n=30,scope:r}=t,i=r?"AND def_d.relative_path LIKE ?":"",o=r?[`%${r}%`]:[];return e.all(`SELECT gs.symbol,
|
|
598
598
|
COUNT(DISTINCT c.document_id) AS file_count,
|
|
599
599
|
def_d.relative_path AS defined_in
|
|
600
600
|
FROM mentions m
|
|
@@ -616,7 +616,7 @@ Thumbs.db
|
|
|
616
616
|
GROUP BY gs.id
|
|
617
617
|
HAVING file_count > 1
|
|
618
618
|
ORDER BY file_count DESC
|
|
619
|
-
LIMIT ?`,...o,n)}function
|
|
619
|
+
LIMIT ?`,...o,n)}function aB(e,t={}){let{limit:n=30,scope:r}=t,i=r?"AND d.relative_path LIKE ?":"",o=r?[`%${r}%`]:[];return e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
|
|
620
620
|
FROM mentions m
|
|
621
621
|
JOIN chunks c ON m.chunk_id = c.id
|
|
622
622
|
JOIN documents d ON c.document_id = d.id
|
|
@@ -636,7 +636,7 @@ Thumbs.db
|
|
|
636
636
|
${i}
|
|
637
637
|
GROUP BY d.id
|
|
638
638
|
ORDER BY symbol_count DESC
|
|
639
|
-
LIMIT ?`,...o,n).filter(a=>!e.isIgnored(a.relative_path)).map(a=>({name:a.relative_path,count:a.symbol_count}))}function
|
|
639
|
+
LIMIT ?`,...o,n).filter(a=>!e.isIgnored(a.relative_path)).map(a=>({name:a.relative_path,count:a.symbol_count}))}function cB(e,t,n){let r=Oe(e,t)??t,i=Oe(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
|
|
640
640
|
FROM global_symbols gs
|
|
641
641
|
WHERE (
|
|
642
642
|
-- Defined in file1, referenced in file2
|
|
@@ -668,7 +668,7 @@ Thumbs.db
|
|
|
668
668
|
JOIN documents d ON c.document_id = d.id
|
|
669
669
|
WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
|
|
670
670
|
)
|
|
671
|
-
)`,r,i,i,r);return{...sC(r,i,o?.shared??0)}}function
|
|
671
|
+
)`,r,i,i,r);return{...sC(r,i,o?.shared??0)}}function lB(e,t={}){let{limit:n=20,scope:r}=t,i=r?"AND def_d.relative_path LIKE ? AND ref_d.relative_path LIKE ?":"",o=r?[`%${r}%`,`%${r}%`]:[];return e.all(`SELECT
|
|
672
672
|
def_d.relative_path AS file1,
|
|
673
673
|
ref_d.relative_path AS file2,
|
|
674
674
|
COUNT(DISTINCT gs.id) AS shared
|
|
@@ -690,7 +690,7 @@ Thumbs.db
|
|
|
690
690
|
${i}
|
|
691
691
|
GROUP BY def_d.id, ref_d.id
|
|
692
692
|
ORDER BY shared DESC
|
|
693
|
-
LIMIT ?`,...o,n).filter(a=>!e.isIgnored(a.file1)&&!e.isIgnored(a.file2)).map(a=>sC(a.file1,a.file2,a.shared))}function sC(e,t,n){return{file1:e,file2:t,sharedSymbols:n,actionTier:"signal",couplingKind:"shared-symbol-coupling",evidenceReasons:[`${n} symbol(s) are defined in one file and referenced by the other`],recommendation:"Review whether the shared symbol surface is an intentional boundary or hidden coordination pressure before moving code."}}function uo(e,t={}){return lC(e,t).cycles}function lC(e,t={}){let{scope:n,maxDepth:r=10}=t,i=ie(e,n,{scipEdges:"imports-only"}),o=[],s=new Set,a=new Set,c=[],l=!1;function u(m,f){if(f>r){l=!0;return}if(a.has(m)){let g=c.indexOf(m);if(g!==-1){let y=c.slice(g).concat(m),h=y.indexOf(y.reduce((C,S)=>C<S?C:S)),x=[...y.slice(h,-1),...y.slice(0,h),y[h]],b=x.join(" -> ");d.has(b)||(d.add(b),o.push({path:x,kind:lB(x)}))}return}if(s.has(m))return;s.add(m),a.add(m),c.push(m);let p=i.get(m);if(p)for(let g of p)u(g,f+1);c.pop(),a.delete(m)}let d=new Set;for(let m of i.keys())s.has(m)||u(m,0);return o.sort((m,f)=>m.kind!==f.kind?m.kind==="real"?-1:1:m.path.length-f.path.length),{cycles:o,truncated:l,maxDepth:r}}function lB(e){for(let r of e){let i=G(r);if(i==="test"||i==="barrel"||i==="entry")return"module-hierarchy"}if(e.length!==3)return"real";let[t,n]=e;return!t||!n?"real":zr(t)||zr(n)||aC(t,n)||aC(n,t)||cC(t,n)||cC(n,t)||G(t)==="entry"||G(n)==="entry"?"module-hierarchy":"real"}function aC(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=t.replace(/\.rs$/,"/");return e.startsWith(n)?!e.slice(n.length).includes("/"):!1}function cC(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=e.replace(/\.rs$/,""),r=t.replace(/\.rs$/,"");if(n===r+"_tests"||n===r+"/tests")return!0;let i=e.split("/"),o=t.split("/");if(i.length===o.length&&i.includes("tests")&&o.includes("src")){let s=i[i.length-1],a=o[o.length-1];if(s&&s===a)return!0}return!1}import{readdirSync as uB}from"fs";import{join as uC}from"path";function Tn(e,t){let n=Na(e),r=Na(t);if(n.endsWith("/**")){let i=n.slice(0,-3);return r===i||r.startsWith(`${i}/`)}if(n.endsWith("/*")){let i=n.slice(0,-2);if(!r.startsWith(`${i}/`))return!1;let o=r.slice(i.length+1);return o.length>0&&!o.includes("/")}return n==="**"?!0:n==="*"?r.length>0&&!r.includes("/"):n===r}function dB(e){return Na(e).replace(/\/\*\*?$/,"")}function Aa(e,t){let n=Na(t),r=dB(n),i=n.endsWith("/**"),o=[],s=(a,c)=>{let l;try{l=uB(a,{withFileTypes:!0})}catch{return}for(let u of l){if(u.name.startsWith("."))continue;let d=c?`${c}/${u.name}`:u.name;Tn(n,d)&&o.push(d),i&&u.isDirectory()&&s(uC(a,u.name),d)}};return s(uC(e,r),r),o.sort()}function Na(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function mo(e){let t=new Map,n=[],r=new Map,i=new Map,o=new Set,s=[],a=0,c=l=>(e.get(l)??[]).values();for(let l of e.keys()){if(r.has(l))continue;let u=[];for(r.set(l,a),i.set(l,a),a+=1,s.push(l),o.add(l),u.push({node:l,iter:c(l),pendingChild:null});u.length>0;){let d=u[u.length-1];if(d.pendingChild!==null){let p=d.pendingChild;d.pendingChild=null,i.set(d.node,Math.min(i.get(d.node),i.get(p)))}let m=d.iter.next();if(m.done){if(i.get(d.node)===r.get(d.node)){let p=[];for(;;){let g=s.pop();if(o.delete(g),p.push(g),t.set(g,n.length),g===d.node)break}n.push(p)}u.pop();continue}let f=m.value;r.has(f)?o.has(f)&&i.set(d.node,Math.min(i.get(d.node),r.get(f))):(r.set(f,a),i.set(f,a),a+=1,s.push(f),o.add(f),d.pendingChild=f,u.push({node:f,iter:c(f),pendingChild:null}))}}return{components:n,componentOf:t}}var mB=/\.(test|spec)\.(ts|tsx|js|jsx|mts|cts)$/,dC=new Map;function mC(e,t,n,r){if(!t?.testPaths?.length)return[];let i=fB(t),o=[];for(let s of pB(e,t.testPaths)){let a=gB(e,s,r),c=a?n(a):null;if(c)for(let l of Z(e,s)){let u=l.sourcePath;if(!u)continue;let d=n(u);d&&d!==c&&(i.get(c)?.has(d)||o.push({testFile:s,ownerBoundary:c,importedFile:u,importedBoundary:d,reason:"outside-owner-policy"}))}}return hB(o)}function fB(e){let t=e.allowedDependencies??{},n=e.boundaries.map(s=>s.name),r=new Map,i=(s,a)=>{for(let c of t[s]??[])a.has(c)||(a.add(c),i(c,a))};for(let s of n){let a=new Set;i(s,a),r.set(s,a)}let o=new Map;for(let s of n){let a=new Set(r.get(s));for(let c of n)c!==s&&r.get(c)?.has(s)&&a.add(c);o.set(s,a)}return o}function pB(e,t){let n=`${e.config.projectRoot}\0${t.join("\0")}`,r=dC.get(n);if(r)return r;let i=new Set;for(let s of t)for(let a of Aa(e.config.projectRoot,s))mB.test(a)&&i.add(a);let o=[...i].sort();return dC.set(n,o),o}function gB(e,t,n){let r=t.replace(/^tests\//,"src/").replace(/\.(test|spec)\.(\w+)$/,".$2");if(r!==t&&n(r))return r;let i=t.split("/").pop().replace(/\.(test|spec)\.(\w+)$/,".$2"),o=Z(e,t).map(s=>s.sourcePath).filter(s=>!!s&&n(s)&&s.split("/").pop()===i);return o.length===1?o[0]:null}function hB(e){let t=new Map;for(let n of e){let r=`${n.testFile}\0${n.importedBoundary}`;t.has(r)||t.set(r,n)}return[...t.values()].sort((n,r)=>n.testFile.localeCompare(r.testFile)||n.importedBoundary.localeCompare(r.importedBoundary))}var Rt="architecture:";function fC(e,t,n,r={}){let i=SB(e,t);if(!n||n.boundaries.length===0)return{configured:!1,boundaries:[],edges:[],forbiddenEdges:[],reciprocalPairs:[],cycles:[],coarseBoundaries:[],staleAllowances:[],boundaryLimits:[],fragileEdges:[],testBoundaryViolations:[],coverage:{totalFiles:i.length,mappedFiles:0,unmappedFiles:[],ambiguousFiles:[]},policyCoverage:{declaredRows:0,totalBoundaries:0,missingRows:[],requiresCompletePolicy:!1,requiresMinimalPolicy:!1}};let o=new Map,s=new Map(n.boundaries.map(b=>[b.name,new Set])),a=[],c=[];for(let b of i){let C=n.boundaries.filter(S=>S.paths.some(v=>Tn(v,b))).map(S=>S.name).sort();if(C.length===0)a.push(b);else if(C.length>1)c.push({file:b,boundaries:C});else{let S=C[0];o.set(b,S),s.get(S).add(b)}}let l=new Map;for(let[b,C]of e){let S=o.get(b);if(S)for(let v of C){let R=o.get(v);if(!R||S===R)continue;let D=Kr(S,R),w=l.get(D);w||(w={from:S,to:R,fileEdges:[],importers:new Set,importedFiles:new Set},l.set(D,w)),w.fileEdges.push({fromFile:b,toFile:v}),w.importers.add(b),w.importedFiles.add(v)}}let u=[...l.values()].map(b=>CB(b,n)).sort(PB),d=u,m=new Map(d.map(b=>[Kr(b.from,b.to),b])),f=new Map(n.boundaries.map(b=>[b.name,new Set]));for(let b of d)f.get(b.from).add(b.to);let p=[];for(let b of d){if(b.from>=b.to)continue;let C=m.get(Kr(b.to,b.from));C&&p.push({boundaries:[b.from,b.to],forward:b,reverse:C})}let{components:g}=mo(f),y=g.filter(b=>b.length>1).map(b=>RB(b,d,n.requireAcyclic===!0)).sort((b,C)=>C.boundaries.length-b.boundaries.length||b.boundaries.join("/").localeCompare(C.boundaries.join("/"))),h=n.allowedDependencies??{},x=n.boundaries.map(b=>b.name).filter(b=>!Object.hasOwn(h,b)).sort();return{configured:!0,boundaries:n.boundaries.map(b=>({name:b.name,paths:[...b.paths],fileCount:s.get(b.name).size,dependencyPolicyDeclared:Object.hasOwn(h,b.name)})).sort((b,C)=>b.name.localeCompare(C.name)),edges:u,forbiddenEdges:d.filter(b=>b.policyStatus==="forbidden"),reciprocalPairs:p,cycles:y,staleAllowances:IB(n,d),boundaryLimits:wB(n,d,s),fragileEdges:d.filter(b=>b.fragile),testBoundaryViolations:r.testBoundaryViolations??[],coarseBoundaries:vB(e,s,r.isModuleHierarchyFile,n.requireResolvedBoundaries===!0,b=>n.boundaries.find(C=>C.name===b)?.subUnits??"directory"),coverage:{totalFiles:i.length,mappedFiles:o.size,unmappedFiles:a,ambiguousFiles:c},policyCoverage:{declaredRows:n.boundaries.length-x.length,totalBoundaries:n.boundaries.length,missingRows:x,requiresCompletePolicy:n.requireCompletePolicy===!0,requiresMinimalPolicy:n.requireMinimalPolicy===!0}}}function ur(e,t={}){let n=ie(e,t.scope,{scipEdges:"imports-only",sourceEdges:"imports-and-reexports"}),r=N(e,{includeIgnored:!1}).filter(o=>!t.scope||o.includes(t.scope)),i=new Set(r);return fC(n,r,e.config.architecture,{isModuleHierarchyFile:o=>bB(e,o),testBoundaryViolations:mC(e,e.config.architecture,o=>yB(e.config.architecture,o),o=>i.has(o))})}function yB(e,t){let n=(e?.boundaries??[]).filter(r=>r.paths.some(i=>Tn(i,t)));return n.length===1?n[0].name:null}function bB(e,t){let n=G(t);return n==="test"||n==="entry"?!0:n!=="barrel"?!1:Y(e,t).length===0}function Ma(e){let t=e.forbiddenEdges.map(r=>`${Rt}forbidden-edge:${encodeURIComponent(r.from)}:${encodeURIComponent(r.to)}`);if(e.policyCoverage.requiresCompletePolicy)for(let r of e.policyCoverage.missingRows)t.push(`${Rt}missing-policy-row:${encodeURIComponent(r)}`);if(e.policyCoverage.requiresMinimalPolicy)for(let r of e.staleAllowances)t.push(`${Rt}stale-allowance:${encodeURIComponent(r.from)}:${encodeURIComponent(r.to)}`);for(let r of e.testBoundaryViolations)t.push(`${Rt}test-boundary:${encodeURIComponent(r.testFile)}:${encodeURIComponent(r.importedBoundary)}`);for(let r of e.boundaryLimits)t.push(`${Rt}boundary-limit:${r.kind}:${encodeURIComponent(r.boundary)}`);let n=new Map;for(let r of e.coarseBoundaries)r.violatesPolicy&&n.set(r.boundary,(n.get(r.boundary)??0)+1);for(let[r,i]of n){let o=`${Rt}coarse-boundary:${encodeURIComponent(r)}`;t.push(o);for(let s=2;s<=i;s+=1)t.push(`${o}:component:${s}`)}for(let r of e.cycles)r.violatesPolicy&&t.push(`${Rt}cycle:${r.boundaries.map(i=>encodeURIComponent(i)).sort().join("|")}`);return[...new Set(t)].sort()}function pC(e){return!!e&&(Object.keys(e.allowedDependencies??{}).length>0||e.requireCompletePolicy===!0||e.requireAcyclic===!0||e.requireResolvedBoundaries===!0||e.requireMinimalPolicy===!0||e.maxBoundaryFanOut!==void 0||e.maxBoundaryFiles!==void 0||e.boundaries.some(t=>t.maxFiles!==void 0)||(e.testPaths?.length??0)>0)}function SB(e,t){let n=new Set(t);for(let[r,i]of e){n.add(r);for(let o of i)n.add(o)}return[...n].sort()}function CB(e,t){let n=[...e.fileEdges].sort((r,i)=>r.fromFile.localeCompare(i.fromFile)||r.toFile.localeCompare(i.toFile));return{from:e.from,to:e.to,policyStatus:xB(t,e.from,e.to),fileEdgeCount:n.length,importerCount:e.importers.size,importedFileCount:e.importedFiles.size,examples:n.slice(0,5),fragile:n.length===1}}function xB(e,t,n){return!e.allowedDependencies||!Object.hasOwn(e.allowedDependencies,t)?"undeclared":e.allowedDependencies[t].includes(n)?"allowed":"forbidden"}function RB(e,t,n){let r=[...e].sort(),i=new Set(r),o=t.filter(a=>i.has(a.from)&&i.has(a.to)),s=Math.min(...o.map(a=>a.fileEdgeCount));return{boundaries:r,internalEdges:o,narrowestEdges:o.filter(a=>a.fileEdgeCount===s),violatesPolicy:n}}function vB(e,t,n=EB,r=!1,i=()=>"directory"){let o=[];for(let[s,a]of t){let c=i(s)==="file"?p=>p:DB,l=[...a].filter(p=>!n(p));if(l.length<2)continue;let u=new Set(l),d=new Map,m=new Map;for(let p of l)m.set(c(p),new Set);for(let p of l)for(let g of e.get(p)??[]){if(!u.has(g))continue;let y=c(p),h=c(g);if(y===h)continue;let x=Kr(y,h),b=d.get(x);b||(b={from:y,to:h,fileEdges:[]},d.set(x,b)),b.fileEdges.push({fromFile:p,toFile:g}),m.get(y).add(h)}let{components:f}=mo(m);for(let p of f){if(p.length<2)continue;let g=new Set(p),y=[...d.values()].filter(x=>g.has(x.from)&&g.has(x.to)).map(x=>({from:x.from,to:x.to,fileEdgeCount:x.fileEdges.length,examples:x.fileEdges.slice(0,5)})).sort((x,b)=>x.from.localeCompare(b.from)||x.to.localeCompare(b.to)),h=Math.min(...y.map(x=>x.fileEdgeCount));o.push({boundary:s,violatesPolicy:r,subUnits:[...p].sort(),internalEdges:y,narrowestEdges:y.filter(x=>x.fileEdgeCount===h)})}}return o.sort((s,a)=>a.subUnits.length-s.subUnits.length||s.boundary.localeCompare(a.boundary))}function IB(e,t){let n=new Set(t.map(s=>Kr(s.from,s.to))),r=e.allowedDependencies??{},i=new Set(e.boundaries.map(s=>s.name)),o=[];for(let[s,a]of Object.entries(r))if(i.has(s))for(let c of a)!i.has(c)||n.has(Kr(s,c))||o.push({from:s,to:c});return o.sort((s,a)=>s.from.localeCompare(a.from)||s.to.localeCompare(a.to))}function wB(e,t,n){let r=[],i=new Map;for(let o of t)i.set(o.from,(i.get(o.from)??0)+1);for(let o of e.boundaries){if(e.maxBoundaryFanOut!==void 0){let a=i.get(o.name)??0;a>e.maxBoundaryFanOut&&r.push({boundary:o.name,kind:"fan-out",observed:a,limit:e.maxBoundaryFanOut})}let s=o.maxFiles??e.maxBoundaryFiles;if(s!==void 0){let a=n.get(o.name)?.size??0;a>s&&r.push({boundary:o.name,kind:"files",observed:a,limit:s})}}return r.sort((o,s)=>o.boundary.localeCompare(s.boundary)||o.kind.localeCompare(s.kind))}function EB(e){let t=G(e);return t==="test"||t==="entry"}function DB(e){let t=e.lastIndexOf("/");return t===-1?".":e.slice(0,t)}function Kr(e,t){return`${e}\0${t}`}function PB(e,t){return e.from.localeCompare(t.from)||e.to.localeCompare(t.to)}function kB(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new F(e);return se(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>TB(e,u,t.semantic!==!1)).filter(u=>u.fanIn>=i&&u.fanOut>=o).sort((u,d)=>d.score-u.score||d.fanIn-u.fanIn).slice(0,n)}function TB(e,t,n){let r=[...new Set(xt(e,t,{limit:500,semantic:n,semanticEvidence:H}).map(l=>l.file))].sort(),i=new Map;for(let l of ft(e,t,{limit:500,semantic:n,semanticEvidence:H})){if(l.file===t.relativePath)continue;let u=`${l.symbol}|${l.file}`;i.has(u)||i.set(u,{symbol:l.symbol,shortName:I(l.symbol),file:l.file})}let o=[...i.values()].sort((l,u)=>l.file.localeCompare(u.file)||l.symbol.localeCompare(u.symbol)),s=r.length,a=o.length,c=s*a;return{symbol:t.symbol,shortName:I(t.symbol),fanIn:s,fanOut:a,callerFiles:r,externalCallees:o,score:c,definedIn:t.relativePath,actionTier:"signal",riskKind:"coordination-hotspot",evidenceReasons:[`${s} incoming file(s) reference this symbol`,`${a} distinct cross-file callee symbol(s) are reached from it`,`centrality score is ${c} (fan-in * fan-out)`],recommendation:"Review ownership, API stability, and caller groups before changing this central symbol; do not refactor solely from graph centrality."}}function fo(e,t={}){let{scope:n,minLoc:r=3,scanLimit:i}=t,o=new F(e),s=t.semantic!==!1,a=0,c=E("isolated.candidates",()=>{let v=se(o.productionCallableDefinitions({scope:n,minLoc:r,excludeEntrySurfaces:!0,excludeRootedSymbols:!0,excludeRustTraitImplMembers:!0,includeSuppressed:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:typeof i=="number"&&i>0}),i).filter(R=>!qr(e,R));return a=v.length,v},()=>({definitions:a})),l=0,u=E("isolated.strict-callees",()=>{let S=o.symbolsWithNonSelfCallees(c,{additive:!1,semantic:!1});return l=S.size,S},()=>({definitions:c.length,symbols:l})),d=c.filter(S=>!u.has(S.symbolId)),m=0,f=E("isolated.scip-callers",()=>{let S=o.crossFileCallerMap(d,{semantic:!1});return m=S.size,S},()=>({definitions:d.length,symbols:m})),p=new Set(f.keys());for(let S of o.frameworkReferencedSymbolIds(d))p.add(S);let g=d.filter(S=>!p.has(S.symbolId));if(s&&g.length>0){for(let S of En(e,g).keys())p.add(S);for(let S of o.symbolsWithNonSelfCallees(g,{additive:!1,semantic:!0}))u.add(S);g=g.filter(S=>!p.has(S.symbolId)).filter(S=>!u.has(S.symbolId))}let y=0,h=E("isolated.source-fallback-callers",()=>{let S=o.sourceFallbackCallerFiles(g,{skipPath:v=>G(v)==="test"});return y=S.size,S},()=>({definitions:g.length,symbols:y}));for(let S of h.keys())p.add(S);let x=g.filter(S=>!p.has(S.symbolId)),b=0,C=E("isolated.additive-callees",()=>{let S=o.symbolsWithNonSelfCallees(x,{additive:!0,semantic:s});return b=S.size,S},()=>({definitions:x.length,symbols:b}));for(let S of C)u.add(S);return x.filter(S=>!u.has(S.symbolId)).sort((S,v)=>O(v)-O(S)||S.relativePath.localeCompare(v.relativePath)||S.startLine-v.startLine).map(S=>({symbol:S.symbol,shortName:I(S.symbol),relativePath:S.relativePath,startLine:S.startLine,endLine:S.endLine,loc:O(S)}))}import{SymbolInformation_Kind as Pe}from"@c4312/scip";var gC=500;function FB(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=LS.get(n);if(r!==void 0)return r;for(let[i,o]of Da)if(o.toLowerCase().includes(n))return i;return null}function _B(e,t,n={}){let{scope:r,limit:i=100}=n,o=FB(t);return o===null?[]:NB(e,r).map(a=>({row:a,resolvedKind:yC(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:I(a.symbol),kind:c,kindName:ao(c),relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function LB(e,t={}){let n=AB(e,t.scope);for(let r of MB(e,t.scope)){let i=yC(r);i===null||i===0||n.set(i,(n.get(i)??0)+1)}return[...n.entries()].sort((r,i)=>i[1]-r[1]||r[0]-i[0]).map(([r,i])=>({kind:r,kindName:ao(r),count:i}))}function NB(e,t){return xe(e,{scope:t}).map(OB)}function AB(e,t){let n=new Map;for(let r of hC(N(e,{scope:t,includeIgnored:!1}))){let i=r.map(()=>"?").join(", "),o=e.all(`SELECT gs.kind AS kind, COUNT(*) AS count
|
|
693
|
+
LIMIT ?`,...o,n).filter(a=>!e.isIgnored(a.file1)&&!e.isIgnored(a.file2)).map(a=>sC(a.file1,a.file2,a.shared))}function sC(e,t,n){return{file1:e,file2:t,sharedSymbols:n,actionTier:"signal",couplingKind:"shared-symbol-coupling",evidenceReasons:[`${n} symbol(s) are defined in one file and referenced by the other`],recommendation:"Review whether the shared symbol surface is an intentional boundary or hidden coordination pressure before moving code."}}function uo(e,t={}){return lC(e,t).cycles}function lC(e,t={}){let{scope:n,maxDepth:r=10}=t,i=ie(e,n,{scipEdges:"imports-only"}),o=[],s=new Set,a=new Set,c=[],l=!1;function u(m,f){if(f>r){l=!0;return}if(a.has(m)){let g=c.indexOf(m);if(g!==-1){let y=c.slice(g).concat(m),h=y.indexOf(y.reduce((C,S)=>C<S?C:S)),x=[...y.slice(h,-1),...y.slice(0,h),y[h]],b=x.join(" -> ");d.has(b)||(d.add(b),o.push({path:x,kind:uB(x)}))}return}if(s.has(m))return;s.add(m),a.add(m),c.push(m);let p=i.get(m);if(p)for(let g of p)u(g,f+1);c.pop(),a.delete(m)}let d=new Set;for(let m of i.keys())s.has(m)||u(m,0);return o.sort((m,f)=>m.kind!==f.kind?m.kind==="real"?-1:1:m.path.length-f.path.length),{cycles:o,truncated:l,maxDepth:r}}function uB(e){for(let r of e){let i=G(r);if(i==="test"||i==="barrel"||i==="entry")return"module-hierarchy"}if(e.length!==3)return"real";let[t,n]=e;return!t||!n?"real":zr(t)||zr(n)||aC(t,n)||aC(n,t)||cC(t,n)||cC(n,t)||G(t)==="entry"||G(n)==="entry"?"module-hierarchy":"real"}function aC(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=t.replace(/\.rs$/,"/");return e.startsWith(n)?!e.slice(n.length).includes("/"):!1}function cC(e,t){if(!/\.rs$/.test(e)||!/\.rs$/.test(t))return!1;let n=e.replace(/\.rs$/,""),r=t.replace(/\.rs$/,"");if(n===r+"_tests"||n===r+"/tests")return!0;let i=e.split("/"),o=t.split("/");if(i.length===o.length&&i.includes("tests")&&o.includes("src")){let s=i[i.length-1],a=o[o.length-1];if(s&&s===a)return!0}return!1}import{readdirSync as dB}from"fs";import{join as uC}from"path";function Tn(e,t){let n=Aa(e),r=Aa(t);if(n.endsWith("/**")){let i=n.slice(0,-3);return r===i||r.startsWith(`${i}/`)}if(n.endsWith("/*")){let i=n.slice(0,-2);if(!r.startsWith(`${i}/`))return!1;let o=r.slice(i.length+1);return o.length>0&&!o.includes("/")}return n==="**"?!0:n==="*"?r.length>0&&!r.includes("/"):n===r}function mB(e){return Aa(e).replace(/\/\*\*?$/,"")}function Ma(e,t){let n=Aa(t),r=mB(n),i=n.endsWith("/**"),o=[],s=(a,c)=>{let l;try{l=dB(a,{withFileTypes:!0})}catch{return}for(let u of l){if(u.name.startsWith("."))continue;let d=c?`${c}/${u.name}`:u.name;Tn(n,d)&&o.push(d),i&&u.isDirectory()&&s(uC(a,u.name),d)}};return s(uC(e,r),r),o.sort()}function Aa(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function mo(e){let t=new Map,n=[],r=new Map,i=new Map,o=new Set,s=[],a=0,c=l=>(e.get(l)??[]).values();for(let l of e.keys()){if(r.has(l))continue;let u=[];for(r.set(l,a),i.set(l,a),a+=1,s.push(l),o.add(l),u.push({node:l,iter:c(l),pendingChild:null});u.length>0;){let d=u[u.length-1];if(d.pendingChild!==null){let p=d.pendingChild;d.pendingChild=null,i.set(d.node,Math.min(i.get(d.node),i.get(p)))}let m=d.iter.next();if(m.done){if(i.get(d.node)===r.get(d.node)){let p=[];for(;;){let g=s.pop();if(o.delete(g),p.push(g),t.set(g,n.length),g===d.node)break}n.push(p)}u.pop();continue}let f=m.value;r.has(f)?o.has(f)&&i.set(d.node,Math.min(i.get(d.node),r.get(f))):(r.set(f,a),i.set(f,a),a+=1,s.push(f),o.add(f),d.pendingChild=f,u.push({node:f,iter:c(f),pendingChild:null}))}}return{components:n,componentOf:t}}var fB=/\.(test|spec)\.(ts|tsx|js|jsx|mts|cts)$/,dC=new Map;function mC(e,t,n,r){if(!t?.testPaths?.length)return[];let i=pB(t),o=[];for(let s of gB(e,t.testPaths)){let a=hB(e,s,r),c=a?n(a):null;if(c)for(let l of Z(e,s)){let u=l.sourcePath;if(!u)continue;let d=n(u);d&&d!==c&&(i.get(c)?.has(d)||o.push({testFile:s,ownerBoundary:c,importedFile:u,importedBoundary:d,reason:"outside-owner-policy"}))}}return yB(o)}function pB(e){let t=e.allowedDependencies??{},n=e.boundaries.map(s=>s.name),r=new Map,i=(s,a)=>{for(let c of t[s]??[])a.has(c)||(a.add(c),i(c,a))};for(let s of n){let a=new Set;i(s,a),r.set(s,a)}let o=new Map;for(let s of n){let a=new Set(r.get(s));for(let c of n)c!==s&&r.get(c)?.has(s)&&a.add(c);o.set(s,a)}return o}function gB(e,t){let n=`${e.config.projectRoot}\0${t.join("\0")}`,r=dC.get(n);if(r)return r;let i=new Set;for(let s of t)for(let a of Ma(e.config.projectRoot,s))fB.test(a)&&i.add(a);let o=[...i].sort();return dC.set(n,o),o}function hB(e,t,n){let r=t.replace(/^tests\//,"src/").replace(/\.(test|spec)\.(\w+)$/,".$2");if(r!==t&&n(r))return r;let i=t.split("/").pop().replace(/\.(test|spec)\.(\w+)$/,".$2"),o=Z(e,t).map(s=>s.sourcePath).filter(s=>!!s&&n(s)&&s.split("/").pop()===i);return o.length===1?o[0]:null}function yB(e){let t=new Map;for(let n of e){let r=`${n.testFile}\0${n.importedBoundary}`;t.has(r)||t.set(r,n)}return[...t.values()].sort((n,r)=>n.testFile.localeCompare(r.testFile)||n.importedBoundary.localeCompare(r.importedBoundary))}var vt="architecture:";function fC(e,t,n,r={}){let i=CB(e,t);if(!n||n.boundaries.length===0)return{configured:!1,boundaries:[],edges:[],forbiddenEdges:[],reciprocalPairs:[],cycles:[],coarseBoundaries:[],staleAllowances:[],boundaryLimits:[],fragileEdges:[],testBoundaryViolations:[],coverage:{totalFiles:i.length,mappedFiles:0,unmappedFiles:[],ambiguousFiles:[]},policyCoverage:{declaredRows:0,totalBoundaries:0,missingRows:[],requiresCompletePolicy:!1,requiresMinimalPolicy:!1}};let o=new Map,s=new Map(n.boundaries.map(b=>[b.name,new Set])),a=[],c=[];for(let b of i){let C=n.boundaries.filter(S=>S.paths.some(R=>Tn(R,b))).map(S=>S.name).sort();if(C.length===0)a.push(b);else if(C.length>1)c.push({file:b,boundaries:C});else{let S=C[0];o.set(b,S),s.get(S).add(b)}}let l=new Map;for(let[b,C]of e){let S=o.get(b);if(S)for(let R of C){let v=o.get(R);if(!v||S===v)continue;let D=Kr(S,v),w=l.get(D);w||(w={from:S,to:v,fileEdges:[],importers:new Set,importedFiles:new Set},l.set(D,w)),w.fileEdges.push({fromFile:b,toFile:R}),w.importers.add(b),w.importedFiles.add(R)}}let u=[...l.values()].map(b=>xB(b,n)).sort(PB),d=u,m=new Map(d.map(b=>[Kr(b.from,b.to),b])),f=new Map(n.boundaries.map(b=>[b.name,new Set]));for(let b of d)f.get(b.from).add(b.to);let p=[];for(let b of d){if(b.from>=b.to)continue;let C=m.get(Kr(b.to,b.from));C&&p.push({boundaries:[b.from,b.to],forward:b,reverse:C})}let{components:g}=mo(f),y=g.filter(b=>b.length>1).map(b=>RB(b,d,n.requireAcyclic===!0)).sort((b,C)=>C.boundaries.length-b.boundaries.length||b.boundaries.join("/").localeCompare(C.boundaries.join("/"))),h=n.allowedDependencies??{},x=n.boundaries.map(b=>b.name).filter(b=>!Object.hasOwn(h,b)).sort();return{configured:!0,boundaries:n.boundaries.map(b=>({name:b.name,paths:[...b.paths],fileCount:s.get(b.name).size,dependencyPolicyDeclared:Object.hasOwn(h,b.name)})).sort((b,C)=>b.name.localeCompare(C.name)),edges:u,forbiddenEdges:d.filter(b=>b.policyStatus==="forbidden"),reciprocalPairs:p,cycles:y,staleAllowances:wB(n,d),boundaryLimits:EB(n,d,s),fragileEdges:d.filter(b=>b.fragile),testBoundaryViolations:r.testBoundaryViolations??[],coarseBoundaries:IB(e,s,r.isModuleHierarchyFile,n.requireResolvedBoundaries===!0,b=>n.boundaries.find(C=>C.name===b)?.subUnits??"directory"),coverage:{totalFiles:i.length,mappedFiles:o.size,unmappedFiles:a,ambiguousFiles:c},policyCoverage:{declaredRows:n.boundaries.length-x.length,totalBoundaries:n.boundaries.length,missingRows:x,requiresCompletePolicy:n.requireCompletePolicy===!0,requiresMinimalPolicy:n.requireMinimalPolicy===!0}}}function ur(e,t={}){let n=ie(e,t.scope,{scipEdges:"imports-only",sourceEdges:"imports-and-reexports"}),r=N(e,{includeIgnored:!1}).filter(o=>!t.scope||o.includes(t.scope)),i=new Set(r);return fC(n,r,e.config.architecture,{isModuleHierarchyFile:o=>SB(e,o),testBoundaryViolations:mC(e,e.config.architecture,o=>bB(e.config.architecture,o),o=>i.has(o))})}function bB(e,t){let n=(e?.boundaries??[]).filter(r=>r.paths.some(i=>Tn(i,t)));return n.length===1?n[0].name:null}function SB(e,t){let n=G(t);return n==="test"||n==="entry"?!0:n!=="barrel"?!1:Y(e,t).length===0}function Oa(e){let t=e.forbiddenEdges.map(r=>`${vt}forbidden-edge:${encodeURIComponent(r.from)}:${encodeURIComponent(r.to)}`);if(e.policyCoverage.requiresCompletePolicy)for(let r of e.policyCoverage.missingRows)t.push(`${vt}missing-policy-row:${encodeURIComponent(r)}`);if(e.policyCoverage.requiresMinimalPolicy)for(let r of e.staleAllowances)t.push(`${vt}stale-allowance:${encodeURIComponent(r.from)}:${encodeURIComponent(r.to)}`);for(let r of e.testBoundaryViolations)t.push(`${vt}test-boundary:${encodeURIComponent(r.testFile)}:${encodeURIComponent(r.importedBoundary)}`);for(let r of e.boundaryLimits)t.push(`${vt}boundary-limit:${r.kind}:${encodeURIComponent(r.boundary)}`);let n=new Map;for(let r of e.coarseBoundaries)r.violatesPolicy&&n.set(r.boundary,(n.get(r.boundary)??0)+1);for(let[r,i]of n){let o=`${vt}coarse-boundary:${encodeURIComponent(r)}`;t.push(o);for(let s=2;s<=i;s+=1)t.push(`${o}:component:${s}`)}for(let r of e.cycles)r.violatesPolicy&&t.push(`${vt}cycle:${r.boundaries.map(i=>encodeURIComponent(i)).sort().join("|")}`);return[...new Set(t)].sort()}function pC(e){return!!e&&(Object.keys(e.allowedDependencies??{}).length>0||e.requireCompletePolicy===!0||e.requireAcyclic===!0||e.requireResolvedBoundaries===!0||e.requireMinimalPolicy===!0||e.maxBoundaryFanOut!==void 0||e.maxBoundaryFiles!==void 0||e.boundaries.some(t=>t.maxFiles!==void 0)||(e.testPaths?.length??0)>0)}function CB(e,t){let n=new Set(t);for(let[r,i]of e){n.add(r);for(let o of i)n.add(o)}return[...n].sort()}function xB(e,t){let n=[...e.fileEdges].sort((r,i)=>r.fromFile.localeCompare(i.fromFile)||r.toFile.localeCompare(i.toFile));return{from:e.from,to:e.to,policyStatus:vB(t,e.from,e.to),fileEdgeCount:n.length,importerCount:e.importers.size,importedFileCount:e.importedFiles.size,examples:n.slice(0,5),fragile:n.length===1}}function vB(e,t,n){return!e.allowedDependencies||!Object.hasOwn(e.allowedDependencies,t)?"undeclared":e.allowedDependencies[t].includes(n)?"allowed":"forbidden"}function RB(e,t,n){let r=[...e].sort(),i=new Set(r),o=t.filter(a=>i.has(a.from)&&i.has(a.to)),s=Math.min(...o.map(a=>a.fileEdgeCount));return{boundaries:r,internalEdges:o,narrowestEdges:o.filter(a=>a.fileEdgeCount===s),violatesPolicy:n}}function IB(e,t,n=DB,r=!1,i=()=>"directory"){let o=[];for(let[s,a]of t){let c=i(s)==="file"?p=>p:kB,l=[...a].filter(p=>!n(p));if(l.length<2)continue;let u=new Set(l),d=new Map,m=new Map;for(let p of l)m.set(c(p),new Set);for(let p of l)for(let g of e.get(p)??[]){if(!u.has(g))continue;let y=c(p),h=c(g);if(y===h)continue;let x=Kr(y,h),b=d.get(x);b||(b={from:y,to:h,fileEdges:[]},d.set(x,b)),b.fileEdges.push({fromFile:p,toFile:g}),m.get(y).add(h)}let{components:f}=mo(m);for(let p of f){if(p.length<2)continue;let g=new Set(p),y=[...d.values()].filter(x=>g.has(x.from)&&g.has(x.to)).map(x=>({from:x.from,to:x.to,fileEdgeCount:x.fileEdges.length,examples:x.fileEdges.slice(0,5)})).sort((x,b)=>x.from.localeCompare(b.from)||x.to.localeCompare(b.to)),h=Math.min(...y.map(x=>x.fileEdgeCount));o.push({boundary:s,violatesPolicy:r,subUnits:[...p].sort(),internalEdges:y,narrowestEdges:y.filter(x=>x.fileEdgeCount===h)})}}return o.sort((s,a)=>a.subUnits.length-s.subUnits.length||s.boundary.localeCompare(a.boundary))}function wB(e,t){let n=new Set(t.map(s=>Kr(s.from,s.to))),r=e.allowedDependencies??{},i=new Set(e.boundaries.map(s=>s.name)),o=[];for(let[s,a]of Object.entries(r))if(i.has(s))for(let c of a)!i.has(c)||n.has(Kr(s,c))||o.push({from:s,to:c});return o.sort((s,a)=>s.from.localeCompare(a.from)||s.to.localeCompare(a.to))}function EB(e,t,n){let r=[],i=new Map;for(let o of t)i.set(o.from,(i.get(o.from)??0)+1);for(let o of e.boundaries){if(e.maxBoundaryFanOut!==void 0){let a=i.get(o.name)??0;a>e.maxBoundaryFanOut&&r.push({boundary:o.name,kind:"fan-out",observed:a,limit:e.maxBoundaryFanOut})}let s=o.maxFiles??e.maxBoundaryFiles;if(s!==void 0){let a=n.get(o.name)?.size??0;a>s&&r.push({boundary:o.name,kind:"files",observed:a,limit:s})}}return r.sort((o,s)=>o.boundary.localeCompare(s.boundary)||o.kind.localeCompare(s.kind))}function DB(e){let t=G(e);return t==="test"||t==="entry"}function kB(e){let t=e.lastIndexOf("/");return t===-1?".":e.slice(0,t)}function Kr(e,t){return`${e}\0${t}`}function PB(e,t){return e.from.localeCompare(t.from)||e.to.localeCompare(t.to)}function TB(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new F(e);return se(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>FB(e,u,t.semantic!==!1)).filter(u=>u.fanIn>=i&&u.fanOut>=o).sort((u,d)=>d.score-u.score||d.fanIn-u.fanIn).slice(0,n)}function FB(e,t,n){let r=[...new Set(xt(e,t,{limit:500,semantic:n,semanticEvidence:H}).map(l=>l.file))].sort(),i=new Map;for(let l of ft(e,t,{limit:500,semantic:n,semanticEvidence:H})){if(l.file===t.relativePath)continue;let u=`${l.symbol}|${l.file}`;i.has(u)||i.set(u,{symbol:l.symbol,shortName:I(l.symbol),file:l.file})}let o=[...i.values()].sort((l,u)=>l.file.localeCompare(u.file)||l.symbol.localeCompare(u.symbol)),s=r.length,a=o.length,c=s*a;return{symbol:t.symbol,shortName:I(t.symbol),fanIn:s,fanOut:a,callerFiles:r,externalCallees:o,score:c,definedIn:t.relativePath,actionTier:"signal",riskKind:"coordination-hotspot",evidenceReasons:[`${s} incoming file(s) reference this symbol`,`${a} distinct cross-file callee symbol(s) are reached from it`,`centrality score is ${c} (fan-in * fan-out)`],recommendation:"Review ownership, API stability, and caller groups before changing this central symbol; do not refactor solely from graph centrality."}}function fo(e,t={}){let{scope:n,minLoc:r=3,scanLimit:i}=t,o=new F(e),s=t.semantic!==!1,a=0,c=E("isolated.candidates",()=>{let R=se(o.productionCallableDefinitions({scope:n,minLoc:r,excludeEntrySurfaces:!0,excludeRootedSymbols:!0,excludeRustTraitImplMembers:!0,includeSuppressed:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:typeof i=="number"&&i>0}),i).filter(v=>!qr(e,v));return a=R.length,R},()=>({definitions:a})),l=0,u=E("isolated.strict-callees",()=>{let S=o.symbolsWithNonSelfCallees(c,{additive:!1,semantic:!1});return l=S.size,S},()=>({definitions:c.length,symbols:l})),d=c.filter(S=>!u.has(S.symbolId)),m=0,f=E("isolated.scip-callers",()=>{let S=o.crossFileCallerMap(d,{semantic:!1});return m=S.size,S},()=>({definitions:d.length,symbols:m})),p=new Set(f.keys());for(let S of o.frameworkReferencedSymbolIds(d))p.add(S);let g=d.filter(S=>!p.has(S.symbolId));if(s&&g.length>0){for(let S of En(e,g).keys())p.add(S);for(let S of o.symbolsWithNonSelfCallees(g,{additive:!1,semantic:!0}))u.add(S);g=g.filter(S=>!p.has(S.symbolId)).filter(S=>!u.has(S.symbolId))}let y=0,h=E("isolated.source-fallback-callers",()=>{let S=o.sourceFallbackCallerFiles(g,{skipPath:R=>G(R)==="test"});return y=S.size,S},()=>({definitions:g.length,symbols:y}));for(let S of h.keys())p.add(S);let x=g.filter(S=>!p.has(S.symbolId)),b=0,C=E("isolated.additive-callees",()=>{let S=o.symbolsWithNonSelfCallees(x,{additive:!0,semantic:s});return b=S.size,S},()=>({definitions:x.length,symbols:b}));for(let S of C)u.add(S);return x.filter(S=>!u.has(S.symbolId)).sort((S,R)=>O(R)-O(S)||S.relativePath.localeCompare(R.relativePath)||S.startLine-R.startLine).map(S=>({symbol:S.symbol,shortName:I(S.symbol),relativePath:S.relativePath,startLine:S.startLine,endLine:S.endLine,loc:O(S)}))}import{SymbolInformation_Kind as ke}from"@c4312/scip";var gC=500;function _B(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=LS.get(n);if(r!==void 0)return r;for(let[i,o]of ka)if(o.toLowerCase().includes(n))return i;return null}function LB(e,t,n={}){let{scope:r,limit:i=100}=n,o=_B(t);return o===null?[]:AB(e,r).map(a=>({row:a,resolvedKind:yC(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:I(a.symbol),kind:c,kindName:ao(c),relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function NB(e,t={}){let n=MB(e,t.scope);for(let r of OB(e,t.scope)){let i=yC(r);i===null||i===0||n.set(i,(n.get(i)??0)+1)}return[...n.entries()].sort((r,i)=>i[1]-r[1]||r[0]-i[0]).map(([r,i])=>({kind:r,kindName:ao(r),count:i}))}function AB(e,t){return xe(e,{scope:t}).map(jB)}function MB(e,t){let n=new Map;for(let r of hC(N(e,{scope:t,includeIgnored:!1}))){let i=r.map(()=>"?").join(", "),o=e.all(`SELECT gs.kind AS kind, COUNT(*) AS count
|
|
694
694
|
FROM defn_enclosing_ranges der
|
|
695
695
|
JOIN global_symbols gs ON der.symbol_id = gs.id
|
|
696
696
|
JOIN documents d ON der.document_id = d.id
|
|
@@ -698,7 +698,7 @@ Thumbs.db
|
|
|
698
698
|
AND gs.kind != 0
|
|
699
699
|
AND gs.symbol NOT LIKE '%#'
|
|
700
700
|
AND d.relative_path IN (${i})
|
|
701
|
-
GROUP BY gs.kind`,...r);for(let s of o)n.set(s.kind,(n.get(s.kind)??0)+s.count)}return n}function
|
|
701
|
+
GROUP BY gs.kind`,...r);for(let s of o)n.set(s.kind,(n.get(s.kind)??0)+s.count)}return n}function OB(e,t){let n=[];for(let r of hC(N(e,{scope:t,includeIgnored:!1}))){let i=r.map(()=>"?").join(", ");n.push(...e.all(`SELECT gs.symbol,
|
|
702
702
|
gs.kind,
|
|
703
703
|
gs.documentation,
|
|
704
704
|
gs.enclosing_symbol,
|
|
@@ -711,11 +711,11 @@ Thumbs.db
|
|
|
711
711
|
WHERE (gs.kind IS NULL OR gs.kind = 0 OR gs.symbol LIKE '%#')
|
|
712
712
|
${e.symbolNoiseFor("gs")}
|
|
713
713
|
AND d.relative_path IN (${i})
|
|
714
|
-
ORDER BY d.relative_path, der.start_line, der.end_line, gs.symbol`,...r))}return n}function hC(e){let t=[];for(let n=0;n<e.length;n+=gC)t.push(e.slice(n,n+gC));return t}function
|
|
715
|
-
WHERE id = ? LIMIT 1`,n.symbolId);if(!r)return[];let i=[{symbol:r.symbol,shortName:I(r.symbol),depth:0}],o=r.enclosing_symbol,s=1,a=new Set([r.symbol]);for(;o&&!a.has(o)&&s<20;){a.add(o);let d=e.get("SELECT symbol, enclosing_symbol FROM global_symbols WHERE symbol = ?",o);if(!d)break;i.push({symbol:d.symbol,shortName:I(d.symbol),depth:s}),o=d.enclosing_symbol,s++}if(i.length>1)return i;let c=ye(r.symbol);if("kind"in c)return i;let l=c.descriptors;if(l.length<=1)return i;let u=[i[0]];for(let d=l.length-2,m=1;d>=0;d--,m++){let p=l.slice(0,d+1).map(g=>g.suffix==="method"?`${g.name}()`:g.name.replace(/\.(ts|tsx|js|jsx|mjs|cjs|py|pyi|rs|java|scala|kt|kts|rb|go|cs|vb|dart|php|c|cc|cpp|cxx|h|hpp)$/,"")).join(":");u.push({symbol:p,shortName:p,depth:m})}return u}function Id(e,t,n={}){let r=B(e,t);if(!r)return null;let i=n.semantic!==!1,o=xt(e,r,{semantic:i,semanticEvidence:H}).filter(a=>te(a.symbol)).slice(0,50),s=Vr(ft(e,r,{limit:50,additive:!0,callableOnly:!0,semantic:i,semanticEvidence:H}));return{symbol:r.symbol,shortName:I(r.symbol),callers:o.map(a=>({symbol:a.symbol,shortName:I(a.symbol),file:a.file})),callees:s.map(a=>({symbol:a.symbol,shortName:I(a.symbol),file:a.file}))}}function pt(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function ke(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function Fn(e,t){if(e.size===0&&t.size===0)return 0;let n=0;for(let i of e)t.has(i)&&(n+=1);let r=e.size+t.size-n;return r===0?0:n/r}function bC(e,t){if(e.size===0)return 0;let n=0;for(let r of e)t.has(r)&&(n+=1);return n/e.size}function wd(e,t){if(t<=0)return new Map;let n=new Map;for(let[r,i]of e)i>0&&n.set(r,Math.log(t/i));return n}function Jr(e){let t=[...e.values()].sort((r,i)=>r-i);if(t.length===0)return 0;let n=Math.floor(t.length/2);return t.length%2===0?(t[n-1]+t[n])/2:t[n]}function Yr(e,t){let n=0;for(let r of e){let i=t.get(r)??0;n+=i*i}return Math.sqrt(n)}function SC(e,t,n,r={}){let i=0,o=0,s=0,a=r.medianIdf??Jr(n),c=[],l=[];for(let m of e){let f=n.get(m)??0;o+=f*f,t.has(m)&&(i+=f*f,f>=a?c.push(m):l.push(m))}if(c.length===0&&l.length===0)return{similarity:0,significantShared:[],trivialShared:[]};for(let m of t){let f=n.get(m)??0;s+=f*f}let u=Math.sqrt(o)*Math.sqrt(s),d=u>0?i/u:0;return c.sort((m,f)=>(n.get(f)??0)-(n.get(m)??0)),{similarity:d,significantShared:c,trivialShared:l}}function CC(e,t,n,r){let i=0,o=r.medianIdf??Jr(n),s=[],a=[];for(let u of e){if(!t.has(u))continue;let d=n.get(u)??0;i+=d*d,d>=o?s.push(u):a.push(u)}if(s.length===0&&a.length===0)return{similarity:0,significantShared:[],trivialShared:[]};let c=r.magnitudeA*r.magnitudeB,l=c>0?i/c:0;return s.sort((u,d)=>(n.get(d)??0)-(n.get(u)??0)),{similarity:l,significantShared:s,trivialShared:a}}function Oa(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=ZB(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!te(o.symbol))return[];if(o.callees.size===0)return xC(e,t,{minSimilarity:r,limit:i,scanLimit:n.scanLimit,candidateMode:n.sourceCandidateMode??"full"});let s=VB(e,o,r,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,i):xC(e,t,{minSimilarity:r,limit:i,scanLimit:n.scanLimit,candidateMode:n.sourceCandidateMode??"full"})}function kd(e,t,n,r={}){let i=B(e,t),o=B(e,n);if(!i||!o)return null;let s=Oa(e,i.symbol,{minSimilarity:0,limit:Number.POSITIVE_INFINITY,semantic:r.semantic,scanLimit:r.scanLimit}).find(l=>l.symbolB===o.symbol||l.symbolA===o.symbol);if(!s)return null;let a=i.endLine-i.startLine+1,c=o.endLine-o.startLine+1;return{symbolA:{symbol:i.symbol,shortName:I(i.symbol),file:i.relativePath,loc:a},symbolB:{symbol:o.symbol,shortName:I(o.symbol),file:o.relativePath,loc:c},similarity:s.similarity,similarityBasis:s.similarityBasis??"callees",sharedEvidence:s.sharedCallees,uniqueToA:s.uniqueToA,uniqueToB:s.uniqueToB,evidenceClass:s.evidenceClass,actionTier:s.actionTier,recommendation:s.recommendation,consolidationStrategy:zB(s)}}function zB(e){let t=e.similarityBasis==="source-tokens"?"source-token":"tracked callee";return e.sharedCallees.length===0?`No shared ${t} evidence survived similar's weighting. Inspect the source before attempting consolidation.`:e.uniqueToA.length===0&&e.uniqueToB.length===0?`The functions have identical ${t} evidence under similar's weighting. Verify signatures, guards, and return values before consolidating.`:e.uniqueToA.length===0?`A's ${t} evidence is a subset of B's. B may subsume part of A's structure, but verify signatures, guards, and non-call logic first.`:e.uniqueToB.length===0?`B's ${t} evidence is a subset of A's. A may subsume part of B's structure, but verify signatures, guards, and non-call logic first.`:e.uniqueToA.length<=2&&e.uniqueToB.length<=2?`Create a shared helper around the ${e.sharedCallees.length} shared ${t}(s). Pass the ${e.uniqueToA.length+e.uniqueToB.length} divergent point(s) as parameters or callbacks.`:`Extract the ${e.sharedCallees.length} shared ${t}(s) into a common helper. Keep each function's unique logic outside that helper (${e.uniqueToA.length} item(s) in A, ${e.uniqueToB.length} in B).`}function VB(e,t,n,r){let i=Xr(e).calleeIndex({minCallees:3,scanLimit:r.scanLimit,semantic:r.semantic}),o=a$(t,i.corpus),s=i$(o,i),a=qB(o,i),c=Jr(a),l=Yr(o.callees,a),u=[];for(let d of s){if(d.callees.size<3)continue;let m=Yr(d.callees,a),f=wC(o,d,a,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0,medianIdf:c,magnitudeA:l,magnitudeB:m});f&&u.push(f)}return u.sort((d,m)=>m.similarity-d.similarity),u}function qB(e,t){let n=new Map(t.docFreq);for(let r of e.callees)n.set(r,(n.get(r)??0)+1);return wd(n,t.corpus.length+1)}function wC(e,t,n,r){let i=JB(e,t,n,r);if(!YB(i,r))return null;let{similarity:o,significantShared:s,trivialShared:a}=i,c=s.length>0?s:a,l=TC(c,"callees");return{symbolA:e.symbol,shortNameA:I(e.symbol),fileA:e.file,symbolB:t.symbol,shortNameB:I(t.symbol),fileB:t.file,similarity:o,similarityBasis:"callees",sharedCallees:c.map(I),uniqueToA:[...ke(e.callees,t.callees)].map(I),uniqueToB:[...ke(t.callees,e.callees)].map(I),...l}}function KB(e,t,n,r){let i=r.magnitudeA??Yr(e.callees,n),o=r.magnitudeB??Yr(t.callees,n),s=0,a=0,c=0,l=r.medianIdf??Jr(n);for(let m of e.callees){if(!t.callees.has(m))continue;let f=n.get(m)??0;s+=f*f,c+=1,f>=l&&(a+=1)}if(c===0)return!1;let u=i*o;return(u>0?s/u:0)<r.minSimilarity?!1:a>=r.requireSignificantShared||c>=r.requireSharedCount}function JB(e,t,n,r){return r.magnitudeA===void 0||r.magnitudeB===void 0?SC(e.callees,t.callees,n,{medianIdf:r.medianIdf}):CC(e.callees,t.callees,n,{medianIdf:r.medianIdf,magnitudeA:r.magnitudeA,magnitudeB:r.magnitudeB})}function YB(e,t){if(e.similarity<t.minSimilarity)return!1;let n=e.significantShared.length+e.trivialShared.length;return e.significantShared.length>=t.requireSignificantShared||n>=t.requireSharedCount}function po(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,minCallees:o=4,crossFileOnly:s=!1,scanLimit:a}=t,c=t.semantic!==!1,l=U(),u=0,d=0,m=0,f=0,p=0,g=0,y=0;return E("similar.all",()=>{let x=Xr(e).calleeIndex({minCallees:o,scope:i,scanLimit:a,semantic:c}),b=x.corpus;u=b.length;let C=t.focusFiles,S=[],v=0;return E("similar.all.pair-scan",()=>{for(let R=0;R<b.length;R+=1){let D=b[R],w=C?.has(D.file)??!1,P=x.weightedMagnitudes[R],L=new Set;for(let re of D.callees){let Q=x.candidateIndexesByCallee.get(re);if(Q)for(let _ of Q)_<=R||C&&!w&&!C.has(b[_].file)||L.add(_)}l&&(m+=L.size,L.size>0&&(d+=1));for(let re of L){let Q=b[re];if(s&&D.file===Q.file){l&&(p+=1);continue}if(EC(D,Q)){l&&(g+=1);continue}l&&(f+=1);let _=wC(D,Q,x.idfWeights,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4,medianIdf:x.medianIdf,magnitudeA:P,magnitudeB:x.weightedMagnitudes[re]});_&&(XB(S,_,r,v),l&&(y+=1),v+=1)}}},()=>({corpusSize:u,candidateSets:d,candidatePairs:m,comparedPairs:f,crossFileSkips:p,signatureSkips:g,insertedResults:y,topResults:S.length})),E("similar.all.sort-project",()=>(S.sort((R,D)=>D.result.similarity-R.result.similarity||R.order-D.order),S.map(R=>R.result)),()=>({topResults:S.length}))},()=>({minSimilarity:n,limit:r,scope:i,minCallees:o,crossFileOnly:s,scanLimit:a,semantic:c,corpusSize:u,candidateSets:d,candidatePairs:m,comparedPairs:f,crossFileSkips:p,signatureSkips:g,insertedResults:y}))}function Td(e,t={}){let{minSimilarity:n=.5,scope:r,minCallees:i=4,crossFileOnly:o=!1,scanLimit:s}=t,a=t.semantic!==!1,c=U(),l=0,u=0,d=0,m=0,f=0,p=0,g=0;return E("similar.all-count",()=>{let h=Xr(e).calleeIndex({minCallees:i,scope:r,scanLimit:s,semantic:a}),x=h.corpus;l=x.length;let b=t.focusFiles;return E("similar.all-count.pair-scan",()=>{for(let C=0;C<x.length;C+=1){let S=x[C],v=b?.has(S.file)??!1,R=h.weightedMagnitudes[C],D=new Set;for(let w of S.callees){let P=h.candidateIndexesByCallee.get(w);if(P)for(let L of P)L<=C||b&&!v&&!b.has(x[L].file)||D.add(L)}c&&(d+=D.size,D.size>0&&(u+=1));for(let w of D){let P=x[w];if(o&&S.file===P.file){c&&(f+=1);continue}if(EC(S,P)){c&&(p+=1);continue}c&&(m+=1),KB(S,P,h.idfWeights,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4,medianIdf:h.medianIdf,magnitudeA:R,magnitudeB:h.weightedMagnitudes[w]})&&(g+=1)}}},()=>({corpusSize:l,candidateSets:u,candidatePairs:d,comparedPairs:m,crossFileSkips:f,signatureSkips:p,insertedResults:g})),g},()=>({minSimilarity:n,scope:r,minCallees:i,crossFileOnly:o,scanLimit:s,semantic:a,corpusSize:l,candidateSets:u,candidatePairs:d,comparedPairs:m,crossFileSkips:f,signatureSkips:p,insertedResults:g}))}function EC(e,t){if(e.paramCount<0||t.paramCount<0)return!1;let n=Math.abs(e.paramCount-t.paramCount),r=Math.max(2,Math.ceil(Math.max(e.paramCount,t.paramCount)*.5));return n>r}var DC=oe({kind:"source-fingerprints",invalidation:J("source-fingerprints"),serialize:D$,deserialize:E$});function XB(e,t,n,r){if(n<=0)return;if(e.length<n){e.push({result:t,order:r});return}let i=0;for(let s=1;s<e.length;s+=1){let a=e[s],c=e[i];(a.result.similarity<c.result.similarity||a.result.similarity===c.result.similarity&&a.order>c.order)&&(i=s)}let o=e[i];t.similarity<=o.result.similarity||(e[i]={result:t,order:r})}var QB=["ScipDatabase#all","ScipDatabase#get","ScipDatabase#prepare","ScipDatabase#pathExclusionsFor","ScipDatabase#isIgnored","ScipDatabase#symbolNoiseFor","PerDbValue#get","PerDbValue#has",":storage:db:ScipDatabase:all",":storage:db:ScipDatabase:get",":storage:db:ScipDatabase:prepare",":storage:db:ScipDatabase:pathExclusionsFor",":storage:db:ScipDatabase:isIgnored",":storage:db:ScipDatabase:symbolNoiseFor",":storage:per-db-cache:PerDbValue:get",":storage:per-db-cache:PerDbValue:has"];function ZB(e,t,n){let r=B(e,t);if(!r||!te(r.symbol))return null;let i=new F(e),o=ft(e,r,{semantic:n.semantic,semanticEvidence:H});return{symbol:r.symbol,file:r.relativePath,callees:ja(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}var e$=X("callee-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),t$=X("callee-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function PC(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=t.semantic!==!1,a=e$.get(e,()=>new Map),c=`${n}|${r??""}|${o??""}|${s}`,l=!0,u=0,d=0;return E("similar.callee-fingerprints.resolve",()=>{let m=a.get(c);if(l=m!==void 0,m||(m=o$(e,{minCallees:n,scope:r,scanLimit:o,semantic:s}),a.set(c,m)),u=m.length,i===void 0)return m;let f=m.filter(p=>p.symbol!==i);return d=m.length-f.length,f},()=>({minCallees:n,scope:r,scanLimit:o,semantic:s,cacheHit:l,corpusSize:u,excludeSymbol:i!==void 0,excludedSymbols:d}))}function n$(e,t){let{minCallees:n,scope:r,scanLimit:i}=t,o=t.semantic!==!1,s=t$.get(e,()=>new Map),a=`${n}|${r??""}|${i??""}|${o}`,c=!0,l=0,u=0,d=0;return E("similar.callee-index.resolve",()=>{let m=s.get(a);return c=m!==void 0,m||(m=r$(PC(e,{minCallees:n,scope:r,scanLimit:i,semantic:o})),s.set(a,m)),l=m.corpus.length,u=m.docFreq.size,d=m.candidateIndexesByCallee.size,m},()=>({minCallees:n,scope:r,scanLimit:i,semantic:o,cacheHit:c,corpusSize:l,indexedCallees:u,candidateBuckets:d}))}function Xr(e){return{calleeCorpus:t=>PC(e,t),calleeIndex:t=>n$(e,t),sourceCorpus:(t={})=>AC(e,t),sourceIndex:(t={})=>IC(e,t),sourceCandidates:(t,n)=>(n.candidateMode??"full")==="target-pruned"?b$(e,t,{minSimilarity:n.minSimilarity,scanLimit:n.scanLimit}):y$(t,IC(e,{scanLimit:n.scanLimit}))}}function r$(e){let t=U(),n=0,r=E("similar.callee-index.doc-frequency",()=>{let m=new Map;for(let f of e)for(let p of f.callees)m.set(p,(m.get(p)??0)+1);return n=m.size,m},()=>({corpusSize:e.length,uniqueCallees:n})),i=Math.max(8,Math.ceil(Math.sqrt(e.length))),o=E("similar.callee-index.idf-weights",()=>wd(r,e.length),()=>({corpusSize:e.length,uniqueCallees:r.size})),s=E("similar.callee-index.weighted-magnitudes",()=>e.map(m=>Yr(m.callees,o)),()=>({corpusSize:e.length})),a=0,c=0,l=0,u=E("similar.callee-index.candidate-buckets",()=>{let m=new Map;for(let f=0;f<e.length;f+=1){let p=e[f];for(let g of p.callees){if((r.get(g)??0)>i){t&&(c+=1);continue}let y=m.get(g);y||(y=[],m.set(g,y)),y.push(f),t&&(a+=1)}}return t&&(l=m.size),m},()=>({corpusSize:e.length,buckets:l,candidateRefs:a,ubiquitousSkips:c,ubiquityThreshold:i})),d=E("similar.callee-index.median-idf",()=>Jr(o),()=>({uniqueCallees:o.size}));return{corpus:e,candidateIndexesByCallee:u,docFreq:r,idfWeights:o,weightedMagnitudes:s,medianIdf:d,ubiquityThreshold:i}}function i$(e,t){let n=new Map;for(let r of e.callees)for(let i of t.candidateIndexesByCallee.get(r)??[]){let o=t.corpus[i];o.symbol!==e.symbol&&n.set(o.symbol,o)}return n.size>0?[...n.values()]:t.corpus.filter(r=>r.symbol!==e.symbol)}function o$(e,t){let{minCallees:n,scope:r,scanLimit:i,semantic:o}=t,s=U(),a=new F(e),c=0,l=E("similar.callee-fingerprints.candidates",()=>{let g=se(a.productionCallableDefinitions({scope:r,minLoc:5,sortByLocDesc:typeof i=="number"&&i>0}),i);return c=g.length,g},()=>({scope:r,scanLimit:i,candidateCount:c})),u=0,d=E("similar.callee-fingerprints.callee-map",()=>{let g=a.calleeMap(l,{semantic:o});if(s)for(let y of g.values())u+=y.length;return g},()=>({candidateCount:c,semantic:o,calleeEdges:u})),m=0,f=0,p=0;return E("similar.callee-fingerprints.shape",()=>{let g=l.map(x=>({symbol:x.symbol,file:x.relativePath,callees:ja((d.get(x.symbolId)??[]).map(b=>b.symbol)),paramCount:a.callableSignature(x)?.paramCount??-1})),y=s$(g);s&&(p=y.filter((x,b)=>x.callees.size!==g[b].callees.size).length);let h=y.filter(x=>x.callees.size>=n);return m=h.length,s&&(f=h.reduce((x,b)=>x+b.callees.size,0)),h},()=>({candidateCount:c,fingerprintCount:m,retainedCalleeCount:f,minCallees:n,siblingSaturatedFingerprints:p}))}var kC=5;function s$(e){let t=new Map;for(let n of e){let r=t.get(n.file);r||(r=new Map,t.set(n.file,r));for(let i of n.callees)r.set(i,(r.get(i)??0)+1)}return e.map(n=>{let r=t.get(n.file);if(!r)return n;let i=[...n.callees].filter(s=>(r.get(s)??0)>=kC);if(i.length===0)return n;let o=new Set(n.callees);for(let s of i)o.delete(s);return{...n,callees:o}})}function a$(e,t){let n=new Map;for(let o of t)if(!(o.file!==e.file||o.symbol===e.symbol))for(let s of o.callees)n.set(s,(n.get(s)??0)+1);let r=[...e.callees].filter(o=>(n.get(o)??0)+1>=kC);if(r.length===0)return e;let i=new Set(e.callees);for(let o of r)i.delete(o);return{...e,callees:i}}function ja(e){return new Set([...e].filter(t=>!c$(t)))}function c$(e){return QB.some(t=>e.includes(t))}function xC(e,t,n){let r=m$(e,t);if(!r||r.tokens.size<3)return[];let i=n.minSimilarity>=.5?n.minSimilarity:.3,o=[],s=n.candidateMode??"full",a=0,c=0,l=0,u=0;return E("similar.source-shape",()=>{let m=Xr(e).sourceCandidates(r,{minSimilarity:i,scanLimit:n.scanLimit,candidateMode:s});a=m.length;for(let f of m){if(f.symbol===r.symbol||f.tokens.size<3)continue;c+=1;let p=pt(r.tokens,f.tokens);if(p.size<2){l+=1;continue}let g=new Set([...r.tokens,...f.tokens]),y=g.size>0?p.size/g.size:0;if(y<i){u+=1;continue}o.push({symbolA:r.symbol,shortNameA:I(r.symbol),fileA:r.file,symbolB:f.symbol,shortNameB:I(f.symbol),fileB:f.file,similarity:y,similarityBasis:"source-tokens",sharedCallees:[...p].sort(),uniqueToA:[...ke(r.tokens,f.tokens)].sort(),uniqueToB:[...ke(f.tokens,r.tokens)].sort(),...TC([...p],"source-tokens")})}return o.sort((f,p)=>p.similarity-f.similarity||f.shortNameB.localeCompare(p.shortNameB)),o.slice(0,n.limit)},()=>({symbol:r.symbol,file:r.file,targetTokens:r.tokens.size,candidateMode:s,candidates:a,comparedPairs:c,sharedSkips:l,similaritySkips:u,results:o.length}))}function TC(e,t){let n=e.flatMap(Dd),r=e.flatMap(y=>RC(y,t)),i=Ed(n,FC),o=Ed(n,_C),s=Ed(r,Pd),a=[...new Set(r.filter(vC))],c=e.filter(y=>{let h=RC(y,t);return h.some(x=>Pd.has(x))&&h.some(vC)}).length,l=[];i.length>0&&l.push(`access/query scaffolding: ${i.slice(0,5).join(", ")}`),o.length>0&&l.push(`framework/generic scaffolding: ${o.slice(0,5).join(", ")}`),s.length>0&&l.push(`domain behavior verbs: ${s.slice(0,5).join(", ")}`),s.length>0&&a.length>0&&l.push(`domain-specific terms: ${a.slice(0,5).join(", ")}`);let u=t==="source-tokens"&&n.length>0&&n.every(y=>LC.has(y));u&&l.push("shared source tokens are generic scaffolding");let d=s.length>0&&a.length>0,m=i.length+o.length>0,f=t==="callees"&&d&&e.length>=4&&a.length>=4&&c>=2,p=f?"domain-behavior":d?m?"mixed":"domain-behavior":i.length>0?"access-query-scaffolding":o.length>0||u?"framework-scaffolding":"structural-overlap";p==="structural-overlap"&&e.length>0&&l.push(`shared ${t} overlap has no recognized domain or scaffolding category`);let g=p==="domain-behavior"&&(e.length>=3||f)?"direct":"signal";return{evidenceClass:p,actionTier:g,evidenceClassReasons:l,recommendation:l$(p,g)}}function l$(e,t){return t==="direct"?"Shared domain behavior looks concrete; review for an extract/reuse opportunity.":e==="mixed"?"Shared evidence mixes domain behavior with scaffolding; review semantics before extracting anything.":e==="access-query-scaffolding"?"Shared evidence is mostly access/query scaffolding; compare product semantics before reusing code.":e==="structural-overlap"?"Shared structure has no domain or scaffolding classification; inspect names and behavior before reusing code.":"Shared evidence is mostly framework or generic scaffolding; treat as a contextual signal."}function Ed(e,t){return[...new Set(e.filter(n=>t.has(n)))]}function Dd(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1)}function RC(e,t){if(t==="source-tokens")return Dd(e);let n=T(e);return Dd(n.length>0?n:u$(e))}function u$(e){return e.replace(/[()`]/g," ").replace(/\.[a-z][a-z0-9]+(?=\s|$)/gi," ").split(/[:/\\\s]+/).map(r=>r.trim()).filter(r=>/[A-Za-z]/.test(r)).at(-1)?.replace(/\.$/,"")??e}function vC(e){return e.length>3&&!Pd.has(e)&&!FC.has(e)&&!_C.has(e)&&!LC.has(e)&&!d$.has(e)}var Pd=new Set(["archive","assign","book","cancel","create","delete","ensure","export","import","notify","persist","publish","restore","schedule","send","set","submit","sync","update","upload","validate","write"]),FC=new Set(["access","auth","authorize","cache","context","db","find","get","guard","list","permission","permissions","prisma","query","request","response","role","route","session","sql","where"]),_C=new Set(["bytes","computed","crypto","describe","effect","expect","fetch","filter","hex","hook","json","map","mounted","on","promise","random","react","reduce","ref","render","state","test","token","trim","uuid","vue","watch"]),LC=new Set(["bytes","crypto","data","false","get","hex","id","key","map","name","num","random","result","secret","set","string","to","token","true","type","value"]),d$=new Set(["best","backend","conflict","database","effect","effects","error","errors","frontend","found","helpers","javascript","module","modules","scip","shared","source","typescript","utils","with","workflow","workflows"]);function m$(e,t){let n=B(e,t);if(!n||!te(n.symbol))return null;let r=f$(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function f$(e,t){let n=T(t.symbol),r=v$(e,t.relativePath,t.startLine,t.endLine,n),i=jC(r,n);return i.size>0?i:null}var p$=X("source-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),g$=X("source-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function NC(e){return`${e.scanLimit??""}`}function AC(e,t={}){let n=p$.get(e,()=>new Map),r=NC(t),i=n.get(r);return i||(i=R$(e,t),n.set(r,i)),i}function IC(e,t={}){let n=g$.get(e,()=>new Map),r=NC(t),i=n.get(r);return i||(i=h$(AC(e,t)),n.set(r,i)),i}function h$(e){let t=new Map;for(let i of e)for(let o of i.tokens)t.set(o,(t.get(o)??0)+1);let n=Math.max(8,Math.ceil(Math.sqrt(e.length))),r=new Map;for(let i of e)for(let o of i.tokens){if((t.get(o)??0)>n)continue;let s=r.get(o);s||(s=[],r.set(o,s)),s.push(i)}return{corpus:e,candidateByToken:r,docFreq:t,ubiquityThreshold:n}}function y$(e,t){let n=new Map;for(let r of e.tokens)for(let i of t.candidateByToken.get(r)??[])i.symbol!==e.symbol&&n.set(i.symbol,i);return n.size>0?[...n.values()]:t.corpus.filter(r=>r.symbol!==e.symbol)}function b$(e,t,n){let r=U(),i=new F(e),o=S$(t.tokens.size,n.minSimilarity),s=0,a=0,c=0,l=E("similar.source-shape.target-files",()=>{let p=[...t.tokens],g=[];for(let y of N(e,{includeIgnored:!1})){s+=1;let h=k(e,y);h&&(a+=1,C$(h,p,o)&&g.push(y))}return c=g.length,g},()=>({symbol:t.symbol,targetTokens:t.tokens.size,requiredSharedTokens:o,scannedFiles:s,readableFiles:a,candidateFiles:c})),u=0,d=E("similar.source-shape.target-definitions",()=>{let p=se(i.productionCallableDefinitions({files:l,sortByLocDesc:typeof n.scanLimit=="number"&&n.scanLimit>0}),n.scanLimit);return u=p.length,p},()=>({symbol:t.symbol,candidateFiles:c,scanLimit:n.scanLimit,definitionCount:u})),m=0;return E("similar.source-shape.target-fingerprints",()=>{let p=MC(e,d);return r&&(m=p.length),p},()=>({symbol:t.symbol,definitionCount:u,fingerprintCount:m})).filter(p=>p.symbol!==t.symbol)}function S$(e,t){return Math.max(2,Math.ceil(e*t))}function C$(e,t,n){if(t.length<n)return!1;let r=e.toLowerCase(),i=0;for(let o of t)if(x$(r,o)&&(i+=1,i>=n))return!0;return!1}function x$(e,t){return t==="num"?/\b\d+\b/.test(e):e.includes(t)}function R$(e,t={}){let n=new F(e),{scanLimit:r}=t,i=se(n.productionCallableDefinitions({sortByLocDesc:typeof r=="number"&&r>0}),r);return MC(e,i)}function MC(e,t){let n=new Map;for(let i of t){let o=n.get(i.relativePath)??[];o.push(i),n.set(i.relativePath,o)}let r=new Map;for(let[i,o]of n){let s=k(e,i);if(!s)continue;let a=ce(e,i,s),c=w$(e,i,a),l=!1,u=null;for(let d of o){let m=I$(d),f=c.get(m),p=f?new Set(f.tokens):null;p||(u??=Ce(e,i),p=jC(OC(u,d.startLine,d.endLine,d.leaf),d.leaf),c.set(m,{key:m,symbol:d.symbol,startLine:d.startLine,endLine:d.endLine,leaf:d.leaf,tokens:[...p].sort()}),l=!0),p.size>0&&r.set(d.symbol,{symbol:d.symbol,file:d.relativePath,tokens:p})}l&&P$(e,i,a,c)}return t.map(i=>r.get(i.symbol)).filter(i=>!!i)}function v$(e,t,n,r,i){let o=Ce(e,t);return o.length===0?"":OC(o,n,r,i)}function OC(e,t,n,r){if(n>=t&&n-t<=12)return e.slice(t,n+1).join(`
|
|
716
|
-
`);let i=[new RegExp(`\\bdef\\s+${$(r)}\\b`),new RegExp(`\\bfun\\s+${$(r)}\\b`),new RegExp(`\\bfn\\s+${$(r)}\\b`),new RegExp(`\\bfunction\\s+${$(r)}\\b`),new RegExp(`\\b${$(r)}\\s*\\(`)],o=e.findIndex(s=>i.some(a=>a.test(s)));if(o>=0){let s=o;for(let a=o+1;a<e.length&&a<=o+8;a++){let c=e[a]??"";if(a>o&&
|
|
714
|
+
ORDER BY d.relative_path, der.start_line, der.end_line, gs.symbol`,...r))}return n}function hC(e){let t=[];for(let n=0;n<e.length;n+=gC)t.push(e.slice(n,n+gC));return t}function jB(e){return{symbol:e.symbol,kind:e.kind,documentation:e.documentation,enclosing_symbol:e.enclosingSymbol,relative_path:e.relativePath,start_line:e.startLine,end_line:e.endLine}}function yC(e){return e.kind!==null&&e.kind!==0?BB(e.kind,e.symbol,e.documentation):$B(e.symbol,e.documentation,e.enclosing_symbol)}function BB(e,t,n){let r=(n??"").toLowerCase();if(ue(t)==="type"){if(r.includes("type "))return ke.TypeAlias;if(r.includes("interface "))return ke.Interface;if(r.includes("struct "))return ke.Struct;if(r.includes("trait "))return ke.Trait;if(r.includes("class "))return ke.Class}return e}function $B(e,t,n){let r=ye(e);if("kind"in r)return null;let i=r.descriptors,o=i[i.length-2]??null,s=ue(e),a=(t??"").toLowerCase();return s==="type"?a.includes("type ")?ke.TypeAlias:a.includes("interface ")?ke.Interface:a.includes("struct ")?ke.Struct:a.includes("trait ")?ke.Trait:a.includes("class ")?ke.Class:ke.Class:s==="method"?o?.suffix==="type"?ke.Method:ke.Function:s==="namespace"?ke.Module:s!=="term"?null:a.includes("async def ")||a.includes("def ")?ke.Function:(n?ue(n):o?.suffix??null)==="type"?ke.Field:ke.Variable}function HB(e,t={}){let{limit:n=10,scope:r,minDepth:i=3}=t,o=ie(e,r),{components:s,componentOf:a}=mo(o),c=new Map;for(let g=0;g<s.length;g++)c.set(g,new Set);for(let[g,y]of o){let h=a.get(g);for(let x of y){let b=a.get(x);b!==h&&c.get(h).add(b)}}let l=new Array(s.length),u=new Array(s.length);for(let g=0;g<s.length;g++){let y=[],h=0;for(let x of c.get(g)){let b=u[x];b>h&&(h=b,y=l[x])}l[g]=[g,...y],u[g]=1+h}function d(g){return l[g]}let m=s.map(g=>[...g].sort()),f=new Set,p=[];for(let g=0;g<s.length;g++){let h=d(g).map(C=>m[C]),x=h.map(C=>C[0]);if(h.length<i)continue;let b=x.join(" ");f.has(b)||(f.add(b),p.push(UB(x,h)))}return p.sort((g,y)=>y.depth-g.depth),WB(p).slice(0,n)}function UB(e,t){let n=t.reduce((i,o)=>i+o.length,0),r=t.filter(i=>i.length>1).length;return{chain:e,components:t,depth:t.length,fileCount:n,actionTier:"signal",chainKind:"transitive-dependency-depth",evidenceReasons:[`${t.length} condensed dependency component(s) form the representative transitive path`,`${n} file(s) are represented; ${r} component(s) contain a dependency cycle`,"cycles count once toward depth and retain their full membership separately"],recommendation:"Review whether the chain crosses ownership or layer boundaries; shorten it only when the dependency direction is accidental."}}function WB(e){let t=[];for(let n of e)t.some(r=>GB(n.chain,r.chain))||t.push(n);return t}function GB(e,t){if(e.length>=t.length)return!1;let n=t.length-e.length;for(let r=0;r<e.length;r++)if(e[r]!==t[n+r])return!1;return!0}function zB(e,t){let n=B(e,t);if(!n)return[];let r=e.get(`SELECT symbol, enclosing_symbol FROM global_symbols
|
|
715
|
+
WHERE id = ? LIMIT 1`,n.symbolId);if(!r)return[];let i=[{symbol:r.symbol,shortName:I(r.symbol),depth:0}],o=r.enclosing_symbol,s=1,a=new Set([r.symbol]);for(;o&&!a.has(o)&&s<20;){a.add(o);let d=e.get("SELECT symbol, enclosing_symbol FROM global_symbols WHERE symbol = ?",o);if(!d)break;i.push({symbol:d.symbol,shortName:I(d.symbol),depth:s}),o=d.enclosing_symbol,s++}if(i.length>1)return i;let c=ye(r.symbol);if("kind"in c)return i;let l=c.descriptors;if(l.length<=1)return i;let u=[i[0]];for(let d=l.length-2,m=1;d>=0;d--,m++){let p=l.slice(0,d+1).map(g=>g.suffix==="method"?`${g.name}()`:g.name.replace(/\.(ts|tsx|js|jsx|mjs|cjs|py|pyi|rs|java|scala|kt|kts|rb|go|cs|vb|dart|php|c|cc|cpp|cxx|h|hpp)$/,"")).join(":");u.push({symbol:p,shortName:p,depth:m})}return u}function Id(e,t,n={}){let r=B(e,t);if(!r)return null;let i=n.semantic!==!1,o=xt(e,r,{semantic:i,semanticEvidence:H}).filter(a=>te(a.symbol)).slice(0,50),s=Vr(ft(e,r,{limit:50,additive:!0,callableOnly:!0,semantic:i,semanticEvidence:H}));return{symbol:r.symbol,shortName:I(r.symbol),callers:o.map(a=>({symbol:a.symbol,shortName:I(a.symbol),file:a.file})),callees:s.map(a=>({symbol:a.symbol,shortName:I(a.symbol),file:a.file}))}}function pt(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function Pe(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function Fn(e,t){if(e.size===0&&t.size===0)return 0;let n=0;for(let i of e)t.has(i)&&(n+=1);let r=e.size+t.size-n;return r===0?0:n/r}function bC(e,t){if(e.size===0)return 0;let n=0;for(let r of e)t.has(r)&&(n+=1);return n/e.size}function wd(e,t){if(t<=0)return new Map;let n=new Map;for(let[r,i]of e)i>0&&n.set(r,Math.log(t/i));return n}function Jr(e){let t=[...e.values()].sort((r,i)=>r-i);if(t.length===0)return 0;let n=Math.floor(t.length/2);return t.length%2===0?(t[n-1]+t[n])/2:t[n]}function Yr(e,t){let n=0;for(let r of e){let i=t.get(r)??0;n+=i*i}return Math.sqrt(n)}function SC(e,t,n,r={}){let i=0,o=0,s=0,a=r.medianIdf??Jr(n),c=[],l=[];for(let m of e){let f=n.get(m)??0;o+=f*f,t.has(m)&&(i+=f*f,f>=a?c.push(m):l.push(m))}if(c.length===0&&l.length===0)return{similarity:0,significantShared:[],trivialShared:[]};for(let m of t){let f=n.get(m)??0;s+=f*f}let u=Math.sqrt(o)*Math.sqrt(s),d=u>0?i/u:0;return c.sort((m,f)=>(n.get(f)??0)-(n.get(m)??0)),{similarity:d,significantShared:c,trivialShared:l}}function CC(e,t,n,r){let i=0,o=r.medianIdf??Jr(n),s=[],a=[];for(let u of e){if(!t.has(u))continue;let d=n.get(u)??0;i+=d*d,d>=o?s.push(u):a.push(u)}if(s.length===0&&a.length===0)return{similarity:0,significantShared:[],trivialShared:[]};let c=r.magnitudeA*r.magnitudeB,l=c>0?i/c:0;return s.sort((u,d)=>(n.get(d)??0)-(n.get(u)??0)),{similarity:l,significantShared:s,trivialShared:a}}function ja(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=e$(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!te(o.symbol))return[];if(o.callees.size===0)return xC(e,t,{minSimilarity:r,limit:i,scanLimit:n.scanLimit,candidateMode:n.sourceCandidateMode??"full"});let s=qB(e,o,r,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,i):xC(e,t,{minSimilarity:r,limit:i,scanLimit:n.scanLimit,candidateMode:n.sourceCandidateMode??"full"})}function Pd(e,t,n,r={}){let i=B(e,t),o=B(e,n);if(!i||!o)return null;let s=ja(e,i.symbol,{minSimilarity:0,limit:Number.POSITIVE_INFINITY,semantic:r.semantic,scanLimit:r.scanLimit}).find(l=>l.symbolB===o.symbol||l.symbolA===o.symbol);if(!s)return null;let a=i.endLine-i.startLine+1,c=o.endLine-o.startLine+1;return{symbolA:{symbol:i.symbol,shortName:I(i.symbol),file:i.relativePath,loc:a},symbolB:{symbol:o.symbol,shortName:I(o.symbol),file:o.relativePath,loc:c},similarity:s.similarity,similarityBasis:s.similarityBasis??"callees",sharedEvidence:s.sharedCallees,uniqueToA:s.uniqueToA,uniqueToB:s.uniqueToB,evidenceClass:s.evidenceClass,actionTier:s.actionTier,recommendation:s.recommendation,consolidationStrategy:VB(s)}}function VB(e){let t=e.similarityBasis==="source-tokens"?"source-token":"tracked callee";return e.sharedCallees.length===0?`No shared ${t} evidence survived similar's weighting. Inspect the source before attempting consolidation.`:e.uniqueToA.length===0&&e.uniqueToB.length===0?`The functions have identical ${t} evidence under similar's weighting. Verify signatures, guards, and return values before consolidating.`:e.uniqueToA.length===0?`A's ${t} evidence is a subset of B's. B may subsume part of A's structure, but verify signatures, guards, and non-call logic first.`:e.uniqueToB.length===0?`B's ${t} evidence is a subset of A's. A may subsume part of B's structure, but verify signatures, guards, and non-call logic first.`:e.uniqueToA.length<=2&&e.uniqueToB.length<=2?`Create a shared helper around the ${e.sharedCallees.length} shared ${t}(s). Pass the ${e.uniqueToA.length+e.uniqueToB.length} divergent point(s) as parameters or callbacks.`:`Extract the ${e.sharedCallees.length} shared ${t}(s) into a common helper. Keep each function's unique logic outside that helper (${e.uniqueToA.length} item(s) in A, ${e.uniqueToB.length} in B).`}function qB(e,t,n,r){let i=Xr(e).calleeIndex({minCallees:3,scanLimit:r.scanLimit,semantic:r.semantic}),o=c$(t,i.corpus),s=o$(o,i),a=KB(o,i),c=Jr(a),l=Yr(o.callees,a),u=[];for(let d of s){if(d.callees.size<3)continue;let m=Yr(d.callees,a),f=wC(o,d,a,{minSimilarity:n,requireSignificantShared:1,requireSharedCount:0,medianIdf:c,magnitudeA:l,magnitudeB:m});f&&u.push(f)}return u.sort((d,m)=>m.similarity-d.similarity),u}function KB(e,t){let n=new Map(t.docFreq);for(let r of e.callees)n.set(r,(n.get(r)??0)+1);return wd(n,t.corpus.length+1)}function wC(e,t,n,r){let i=YB(e,t,n,r);if(!XB(i,r))return null;let{similarity:o,significantShared:s,trivialShared:a}=i,c=s.length>0?s:a,l=TC(c,"callees");return{symbolA:e.symbol,shortNameA:I(e.symbol),fileA:e.file,symbolB:t.symbol,shortNameB:I(t.symbol),fileB:t.file,similarity:o,similarityBasis:"callees",sharedCallees:c.map(I),uniqueToA:[...Pe(e.callees,t.callees)].map(I),uniqueToB:[...Pe(t.callees,e.callees)].map(I),...l}}function JB(e,t,n,r){let i=r.magnitudeA??Yr(e.callees,n),o=r.magnitudeB??Yr(t.callees,n),s=0,a=0,c=0,l=r.medianIdf??Jr(n);for(let m of e.callees){if(!t.callees.has(m))continue;let f=n.get(m)??0;s+=f*f,c+=1,f>=l&&(a+=1)}if(c===0)return!1;let u=i*o;return(u>0?s/u:0)<r.minSimilarity?!1:a>=r.requireSignificantShared||c>=r.requireSharedCount}function YB(e,t,n,r){return r.magnitudeA===void 0||r.magnitudeB===void 0?SC(e.callees,t.callees,n,{medianIdf:r.medianIdf}):CC(e.callees,t.callees,n,{medianIdf:r.medianIdf,magnitudeA:r.magnitudeA,magnitudeB:r.magnitudeB})}function XB(e,t){if(e.similarity<t.minSimilarity)return!1;let n=e.significantShared.length+e.trivialShared.length;return e.significantShared.length>=t.requireSignificantShared||n>=t.requireSharedCount}function po(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,minCallees:o=4,crossFileOnly:s=!1,scanLimit:a}=t,c=t.semantic!==!1,l=U(),u=0,d=0,m=0,f=0,p=0,g=0,y=0;return E("similar.all",()=>{let x=Xr(e).calleeIndex({minCallees:o,scope:i,scanLimit:a,semantic:c}),b=x.corpus;u=b.length;let C=t.focusFiles,S=[],R=0;return E("similar.all.pair-scan",()=>{for(let v=0;v<b.length;v+=1){let D=b[v],w=C?.has(D.file)??!1,k=x.weightedMagnitudes[v],L=new Set;for(let re of D.callees){let Q=x.candidateIndexesByCallee.get(re);if(Q)for(let _ of Q)_<=v||C&&!w&&!C.has(b[_].file)||L.add(_)}l&&(m+=L.size,L.size>0&&(d+=1));for(let re of L){let Q=b[re];if(s&&D.file===Q.file){l&&(p+=1);continue}if(EC(D,Q)){l&&(g+=1);continue}l&&(f+=1);let _=wC(D,Q,x.idfWeights,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4,medianIdf:x.medianIdf,magnitudeA:k,magnitudeB:x.weightedMagnitudes[re]});_&&(QB(S,_,r,R),l&&(y+=1),R+=1)}}},()=>({corpusSize:u,candidateSets:d,candidatePairs:m,comparedPairs:f,crossFileSkips:p,signatureSkips:g,insertedResults:y,topResults:S.length})),E("similar.all.sort-project",()=>(S.sort((v,D)=>D.result.similarity-v.result.similarity||v.order-D.order),S.map(v=>v.result)),()=>({topResults:S.length}))},()=>({minSimilarity:n,limit:r,scope:i,minCallees:o,crossFileOnly:s,scanLimit:a,semantic:c,corpusSize:u,candidateSets:d,candidatePairs:m,comparedPairs:f,crossFileSkips:p,signatureSkips:g,insertedResults:y}))}function Td(e,t={}){let{minSimilarity:n=.5,scope:r,minCallees:i=4,crossFileOnly:o=!1,scanLimit:s}=t,a=t.semantic!==!1,c=U(),l=0,u=0,d=0,m=0,f=0,p=0,g=0;return E("similar.all-count",()=>{let h=Xr(e).calleeIndex({minCallees:i,scope:r,scanLimit:s,semantic:a}),x=h.corpus;l=x.length;let b=t.focusFiles;return E("similar.all-count.pair-scan",()=>{for(let C=0;C<x.length;C+=1){let S=x[C],R=b?.has(S.file)??!1,v=h.weightedMagnitudes[C],D=new Set;for(let w of S.callees){let k=h.candidateIndexesByCallee.get(w);if(k)for(let L of k)L<=C||b&&!R&&!b.has(x[L].file)||D.add(L)}c&&(d+=D.size,D.size>0&&(u+=1));for(let w of D){let k=x[w];if(o&&S.file===k.file){c&&(f+=1);continue}if(EC(S,k)){c&&(p+=1);continue}c&&(m+=1),JB(S,k,h.idfWeights,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4,medianIdf:h.medianIdf,magnitudeA:v,magnitudeB:h.weightedMagnitudes[w]})&&(g+=1)}}},()=>({corpusSize:l,candidateSets:u,candidatePairs:d,comparedPairs:m,crossFileSkips:f,signatureSkips:p,insertedResults:g})),g},()=>({minSimilarity:n,scope:r,minCallees:i,crossFileOnly:o,scanLimit:s,semantic:a,corpusSize:l,candidateSets:u,candidatePairs:d,comparedPairs:m,crossFileSkips:f,signatureSkips:p,insertedResults:g}))}function EC(e,t){if(e.paramCount<0||t.paramCount<0)return!1;let n=Math.abs(e.paramCount-t.paramCount),r=Math.max(2,Math.ceil(Math.max(e.paramCount,t.paramCount)*.5));return n>r}var DC=oe({kind:"source-fingerprints",invalidation:J("source-fingerprints"),serialize:k$,deserialize:D$});function QB(e,t,n,r){if(n<=0)return;if(e.length<n){e.push({result:t,order:r});return}let i=0;for(let s=1;s<e.length;s+=1){let a=e[s],c=e[i];(a.result.similarity<c.result.similarity||a.result.similarity===c.result.similarity&&a.order>c.order)&&(i=s)}let o=e[i];t.similarity<=o.result.similarity||(e[i]={result:t,order:r})}var ZB=["ScipDatabase#all","ScipDatabase#get","ScipDatabase#prepare","ScipDatabase#pathExclusionsFor","ScipDatabase#isIgnored","ScipDatabase#symbolNoiseFor","PerDbValue#get","PerDbValue#has",":storage:db:ScipDatabase:all",":storage:db:ScipDatabase:get",":storage:db:ScipDatabase:prepare",":storage:db:ScipDatabase:pathExclusionsFor",":storage:db:ScipDatabase:isIgnored",":storage:db:ScipDatabase:symbolNoiseFor",":storage:per-db-cache:PerDbValue:get",":storage:per-db-cache:PerDbValue:has"];function e$(e,t,n){let r=B(e,t);if(!r||!te(r.symbol))return null;let i=new F(e),o=ft(e,r,{semantic:n.semantic,semanticEvidence:H});return{symbol:r.symbol,file:r.relativePath,callees:Ba(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}var t$=X("callee-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),n$=X("callee-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function kC(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=t.semantic!==!1,a=t$.get(e,()=>new Map),c=`${n}|${r??""}|${o??""}|${s}`,l=!0,u=0,d=0;return E("similar.callee-fingerprints.resolve",()=>{let m=a.get(c);if(l=m!==void 0,m||(m=s$(e,{minCallees:n,scope:r,scanLimit:o,semantic:s}),a.set(c,m)),u=m.length,i===void 0)return m;let f=m.filter(p=>p.symbol!==i);return d=m.length-f.length,f},()=>({minCallees:n,scope:r,scanLimit:o,semantic:s,cacheHit:l,corpusSize:u,excludeSymbol:i!==void 0,excludedSymbols:d}))}function r$(e,t){let{minCallees:n,scope:r,scanLimit:i}=t,o=t.semantic!==!1,s=n$.get(e,()=>new Map),a=`${n}|${r??""}|${i??""}|${o}`,c=!0,l=0,u=0,d=0;return E("similar.callee-index.resolve",()=>{let m=s.get(a);return c=m!==void 0,m||(m=i$(kC(e,{minCallees:n,scope:r,scanLimit:i,semantic:o})),s.set(a,m)),l=m.corpus.length,u=m.docFreq.size,d=m.candidateIndexesByCallee.size,m},()=>({minCallees:n,scope:r,scanLimit:i,semantic:o,cacheHit:c,corpusSize:l,indexedCallees:u,candidateBuckets:d}))}function Xr(e){return{calleeCorpus:t=>kC(e,t),calleeIndex:t=>r$(e,t),sourceCorpus:(t={})=>AC(e,t),sourceIndex:(t={})=>IC(e,t),sourceCandidates:(t,n)=>(n.candidateMode??"full")==="target-pruned"?S$(e,t,{minSimilarity:n.minSimilarity,scanLimit:n.scanLimit}):b$(t,IC(e,{scanLimit:n.scanLimit}))}}function i$(e){let t=U(),n=0,r=E("similar.callee-index.doc-frequency",()=>{let m=new Map;for(let f of e)for(let p of f.callees)m.set(p,(m.get(p)??0)+1);return n=m.size,m},()=>({corpusSize:e.length,uniqueCallees:n})),i=Math.max(8,Math.ceil(Math.sqrt(e.length))),o=E("similar.callee-index.idf-weights",()=>wd(r,e.length),()=>({corpusSize:e.length,uniqueCallees:r.size})),s=E("similar.callee-index.weighted-magnitudes",()=>e.map(m=>Yr(m.callees,o)),()=>({corpusSize:e.length})),a=0,c=0,l=0,u=E("similar.callee-index.candidate-buckets",()=>{let m=new Map;for(let f=0;f<e.length;f+=1){let p=e[f];for(let g of p.callees){if((r.get(g)??0)>i){t&&(c+=1);continue}let y=m.get(g);y||(y=[],m.set(g,y)),y.push(f),t&&(a+=1)}}return t&&(l=m.size),m},()=>({corpusSize:e.length,buckets:l,candidateRefs:a,ubiquitousSkips:c,ubiquityThreshold:i})),d=E("similar.callee-index.median-idf",()=>Jr(o),()=>({uniqueCallees:o.size}));return{corpus:e,candidateIndexesByCallee:u,docFreq:r,idfWeights:o,weightedMagnitudes:s,medianIdf:d,ubiquityThreshold:i}}function o$(e,t){let n=new Map;for(let r of e.callees)for(let i of t.candidateIndexesByCallee.get(r)??[]){let o=t.corpus[i];o.symbol!==e.symbol&&n.set(o.symbol,o)}return n.size>0?[...n.values()]:t.corpus.filter(r=>r.symbol!==e.symbol)}function s$(e,t){let{minCallees:n,scope:r,scanLimit:i,semantic:o}=t,s=U(),a=new F(e),c=0,l=E("similar.callee-fingerprints.candidates",()=>{let g=se(a.productionCallableDefinitions({scope:r,minLoc:5,sortByLocDesc:typeof i=="number"&&i>0}),i);return c=g.length,g},()=>({scope:r,scanLimit:i,candidateCount:c})),u=0,d=E("similar.callee-fingerprints.callee-map",()=>{let g=a.calleeMap(l,{semantic:o});if(s)for(let y of g.values())u+=y.length;return g},()=>({candidateCount:c,semantic:o,calleeEdges:u})),m=0,f=0,p=0;return E("similar.callee-fingerprints.shape",()=>{let g=l.map(x=>({symbol:x.symbol,file:x.relativePath,callees:Ba((d.get(x.symbolId)??[]).map(b=>b.symbol)),paramCount:a.callableSignature(x)?.paramCount??-1})),y=a$(g);s&&(p=y.filter((x,b)=>x.callees.size!==g[b].callees.size).length);let h=y.filter(x=>x.callees.size>=n);return m=h.length,s&&(f=h.reduce((x,b)=>x+b.callees.size,0)),h},()=>({candidateCount:c,fingerprintCount:m,retainedCalleeCount:f,minCallees:n,siblingSaturatedFingerprints:p}))}var PC=5;function a$(e){let t=new Map;for(let n of e){let r=t.get(n.file);r||(r=new Map,t.set(n.file,r));for(let i of n.callees)r.set(i,(r.get(i)??0)+1)}return e.map(n=>{let r=t.get(n.file);if(!r)return n;let i=[...n.callees].filter(s=>(r.get(s)??0)>=PC);if(i.length===0)return n;let o=new Set(n.callees);for(let s of i)o.delete(s);return{...n,callees:o}})}function c$(e,t){let n=new Map;for(let o of t)if(!(o.file!==e.file||o.symbol===e.symbol))for(let s of o.callees)n.set(s,(n.get(s)??0)+1);let r=[...e.callees].filter(o=>(n.get(o)??0)+1>=PC);if(r.length===0)return e;let i=new Set(e.callees);for(let o of r)i.delete(o);return{...e,callees:i}}function Ba(e){return new Set([...e].filter(t=>!l$(t)))}function l$(e){return ZB.some(t=>e.includes(t))}function xC(e,t,n){let r=f$(e,t);if(!r||r.tokens.size<3)return[];let i=n.minSimilarity>=.5?n.minSimilarity:.3,o=[],s=n.candidateMode??"full",a=0,c=0,l=0,u=0;return E("similar.source-shape",()=>{let m=Xr(e).sourceCandidates(r,{minSimilarity:i,scanLimit:n.scanLimit,candidateMode:s});a=m.length;for(let f of m){if(f.symbol===r.symbol||f.tokens.size<3)continue;c+=1;let p=pt(r.tokens,f.tokens);if(p.size<2){l+=1;continue}let g=new Set([...r.tokens,...f.tokens]),y=g.size>0?p.size/g.size:0;if(y<i){u+=1;continue}o.push({symbolA:r.symbol,shortNameA:I(r.symbol),fileA:r.file,symbolB:f.symbol,shortNameB:I(f.symbol),fileB:f.file,similarity:y,similarityBasis:"source-tokens",sharedCallees:[...p].sort(),uniqueToA:[...Pe(r.tokens,f.tokens)].sort(),uniqueToB:[...Pe(f.tokens,r.tokens)].sort(),...TC([...p],"source-tokens")})}return o.sort((f,p)=>p.similarity-f.similarity||f.shortNameB.localeCompare(p.shortNameB)),o.slice(0,n.limit)},()=>({symbol:r.symbol,file:r.file,targetTokens:r.tokens.size,candidateMode:s,candidates:a,comparedPairs:c,sharedSkips:l,similaritySkips:u,results:o.length}))}function TC(e,t){let n=e.flatMap(Dd),r=e.flatMap(y=>vC(y,t)),i=Ed(n,FC),o=Ed(n,_C),s=Ed(r,kd),a=[...new Set(r.filter(RC))],c=e.filter(y=>{let h=vC(y,t);return h.some(x=>kd.has(x))&&h.some(RC)}).length,l=[];i.length>0&&l.push(`access/query scaffolding: ${i.slice(0,5).join(", ")}`),o.length>0&&l.push(`framework/generic scaffolding: ${o.slice(0,5).join(", ")}`),s.length>0&&l.push(`domain behavior verbs: ${s.slice(0,5).join(", ")}`),s.length>0&&a.length>0&&l.push(`domain-specific terms: ${a.slice(0,5).join(", ")}`);let u=t==="source-tokens"&&n.length>0&&n.every(y=>LC.has(y));u&&l.push("shared source tokens are generic scaffolding");let d=s.length>0&&a.length>0,m=i.length+o.length>0,f=t==="callees"&&d&&e.length>=4&&a.length>=4&&c>=2,p=f?"domain-behavior":d?m?"mixed":"domain-behavior":i.length>0?"access-query-scaffolding":o.length>0||u?"framework-scaffolding":"structural-overlap";p==="structural-overlap"&&e.length>0&&l.push(`shared ${t} overlap has no recognized domain or scaffolding category`);let g=p==="domain-behavior"&&(e.length>=3||f)?"direct":"signal";return{evidenceClass:p,actionTier:g,evidenceClassReasons:l,recommendation:u$(p,g)}}function u$(e,t){return t==="direct"?"Shared domain behavior looks concrete; review for an extract/reuse opportunity.":e==="mixed"?"Shared evidence mixes domain behavior with scaffolding; review semantics before extracting anything.":e==="access-query-scaffolding"?"Shared evidence is mostly access/query scaffolding; compare product semantics before reusing code.":e==="structural-overlap"?"Shared structure has no domain or scaffolding classification; inspect names and behavior before reusing code.":"Shared evidence is mostly framework or generic scaffolding; treat as a contextual signal."}function Ed(e,t){return[...new Set(e.filter(n=>t.has(n)))]}function Dd(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1)}function vC(e,t){if(t==="source-tokens")return Dd(e);let n=T(e);return Dd(n.length>0?n:d$(e))}function d$(e){return e.replace(/[()`]/g," ").replace(/\.[a-z][a-z0-9]+(?=\s|$)/gi," ").split(/[:/\\\s]+/).map(r=>r.trim()).filter(r=>/[A-Za-z]/.test(r)).at(-1)?.replace(/\.$/,"")??e}function RC(e){return e.length>3&&!kd.has(e)&&!FC.has(e)&&!_C.has(e)&&!LC.has(e)&&!m$.has(e)}var kd=new Set(["archive","assign","book","cancel","create","delete","ensure","export","import","notify","persist","publish","restore","schedule","send","set","submit","sync","update","upload","validate","write"]),FC=new Set(["access","auth","authorize","cache","context","db","find","get","guard","list","permission","permissions","prisma","query","request","response","role","route","session","sql","where"]),_C=new Set(["bytes","computed","crypto","describe","effect","expect","fetch","filter","hex","hook","json","map","mounted","on","promise","random","react","reduce","ref","render","state","test","token","trim","uuid","vue","watch"]),LC=new Set(["bytes","crypto","data","false","get","hex","id","key","map","name","num","random","result","secret","set","string","to","token","true","type","value"]),m$=new Set(["best","backend","conflict","database","effect","effects","error","errors","frontend","found","helpers","javascript","module","modules","scip","shared","source","typescript","utils","with","workflow","workflows"]);function f$(e,t){let n=B(e,t);if(!n||!te(n.symbol))return null;let r=p$(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function p$(e,t){let n=T(t.symbol),r=I$(e,t.relativePath,t.startLine,t.endLine,n),i=jC(r,n);return i.size>0?i:null}var g$=X("source-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),h$=X("source-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function NC(e){return`${e.scanLimit??""}`}function AC(e,t={}){let n=g$.get(e,()=>new Map),r=NC(t),i=n.get(r);return i||(i=R$(e,t),n.set(r,i)),i}function IC(e,t={}){let n=h$.get(e,()=>new Map),r=NC(t),i=n.get(r);return i||(i=y$(AC(e,t)),n.set(r,i)),i}function y$(e){let t=new Map;for(let i of e)for(let o of i.tokens)t.set(o,(t.get(o)??0)+1);let n=Math.max(8,Math.ceil(Math.sqrt(e.length))),r=new Map;for(let i of e)for(let o of i.tokens){if((t.get(o)??0)>n)continue;let s=r.get(o);s||(s=[],r.set(o,s)),s.push(i)}return{corpus:e,candidateByToken:r,docFreq:t,ubiquityThreshold:n}}function b$(e,t){let n=new Map;for(let r of e.tokens)for(let i of t.candidateByToken.get(r)??[])i.symbol!==e.symbol&&n.set(i.symbol,i);return n.size>0?[...n.values()]:t.corpus.filter(r=>r.symbol!==e.symbol)}function S$(e,t,n){let r=U(),i=new F(e),o=C$(t.tokens.size,n.minSimilarity),s=0,a=0,c=0,l=E("similar.source-shape.target-files",()=>{let p=[...t.tokens],g=[];for(let y of N(e,{includeIgnored:!1})){s+=1;let h=P(e,y);h&&(a+=1,x$(h,p,o)&&g.push(y))}return c=g.length,g},()=>({symbol:t.symbol,targetTokens:t.tokens.size,requiredSharedTokens:o,scannedFiles:s,readableFiles:a,candidateFiles:c})),u=0,d=E("similar.source-shape.target-definitions",()=>{let p=se(i.productionCallableDefinitions({files:l,sortByLocDesc:typeof n.scanLimit=="number"&&n.scanLimit>0}),n.scanLimit);return u=p.length,p},()=>({symbol:t.symbol,candidateFiles:c,scanLimit:n.scanLimit,definitionCount:u})),m=0;return E("similar.source-shape.target-fingerprints",()=>{let p=MC(e,d);return r&&(m=p.length),p},()=>({symbol:t.symbol,definitionCount:u,fingerprintCount:m})).filter(p=>p.symbol!==t.symbol)}function C$(e,t){return Math.max(2,Math.ceil(e*t))}function x$(e,t,n){if(t.length<n)return!1;let r=e.toLowerCase(),i=0;for(let o of t)if(v$(r,o)&&(i+=1,i>=n))return!0;return!1}function v$(e,t){return t==="num"?/\b\d+\b/.test(e):e.includes(t)}function R$(e,t={}){let n=new F(e),{scanLimit:r}=t,i=se(n.productionCallableDefinitions({sortByLocDesc:typeof r=="number"&&r>0}),r);return MC(e,i)}function MC(e,t){let n=new Map;for(let i of t){let o=n.get(i.relativePath)??[];o.push(i),n.set(i.relativePath,o)}let r=new Map;for(let[i,o]of n){let s=P(e,i);if(!s)continue;let a=ce(e,i,s),c=E$(e,i,a),l=!1,u=null;for(let d of o){let m=w$(d),f=c.get(m),p=f?new Set(f.tokens):null;p||(u??=Ce(e,i),p=jC(OC(u,d.startLine,d.endLine,d.leaf),d.leaf),c.set(m,{key:m,symbol:d.symbol,startLine:d.startLine,endLine:d.endLine,leaf:d.leaf,tokens:[...p].sort()}),l=!0),p.size>0&&r.set(d.symbol,{symbol:d.symbol,file:d.relativePath,tokens:p})}l&&P$(e,i,a,c)}return t.map(i=>r.get(i.symbol)).filter(i=>!!i)}function I$(e,t,n,r,i){let o=Ce(e,t);return o.length===0?"":OC(o,n,r,i)}function OC(e,t,n,r){if(n>=t&&n-t<=12)return e.slice(t,n+1).join(`
|
|
716
|
+
`);let i=[new RegExp(`\\bdef\\s+${$(r)}\\b`),new RegExp(`\\bfun\\s+${$(r)}\\b`),new RegExp(`\\bfn\\s+${$(r)}\\b`),new RegExp(`\\bfunction\\s+${$(r)}\\b`),new RegExp(`\\b${$(r)}\\s*\\(`)],o=e.findIndex(s=>i.some(a=>a.test(s)));if(o>=0){let s=o;for(let a=o+1;a<e.length&&a<=o+8;a++){let c=e[a]??"";if(a>o&&F$(c)||(s=a,c.trim()===""&&a>o+1))break}return e.slice(o,s+1).join(`
|
|
717
717
|
`)}return e.slice(t,Math.min(e.length,t+8)).join(`
|
|
718
|
-
`)}function I$(e){return`${e.symbol}\0${e.startLine}\0${e.endLine}\0${e.leaf}`}function w$(e,t,n){return DC.read(e,t,n)??new Map}function E$(e){try{let t=JSON.parse(e);if(!Array.isArray(t.entries))return null;let n=new Map;for(let r of t.entries){if(!r||typeof r.key!="string"||typeof r.symbol!="string"||typeof r.startLine!="number"||typeof r.endLine!="number"||typeof r.leaf!="string"||!Array.isArray(r.tokens)||!r.tokens.every(i=>typeof i=="string"))return null;n.set(r.key,r)}return n}catch{return null}}function D$(e){let t={entries:[...e.values()].sort((n,r)=>n.key.localeCompare(r.key))};return JSON.stringify(t)}function P$(e,t,n,r){DC.write(e,t,n,new Map(r))}function jC(e,t){if(!e)return new Set;let n=new Set(["public","private","protected","final","static","class","def","fun","fn","function","return","string","bool","boolean","void","unit","self","this","new","const","let","var","end","pub"]),r=k$(t),o=e.replace(/["'`]/g," ").replace(/\b\d+\b/g," NUM ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[^A-Za-z0-9_]+/g," ").replace(/_/g," ").toLowerCase().split(/\s+/).map(s=>s.trim()).filter(s=>s.length>1).filter(s=>!n.has(s)).filter(s=>!r.has(s));return new Set(o)}function k$(e){return new Set(e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9_]+|_/).map(t=>t.toLowerCase()).filter(t=>t.length>1))}function T$(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function At(e,t){let n=new Map;return e.forEach((r,i)=>{let o=new Set;for(let s of t(r)){if(o.has(s))continue;o.add(s);let a=n.get(s);a?a.push(i):n.set(s,[i])}}),{candidatesFor:(r,i)=>{let o=new Set;for(let s of t(r)){let a=n.get(s);if(a)for(let c of a)c!==i&&o.add(c)}return[...o].sort((s,a)=>s-a)}}}function Mt(e){let t=BC(e.profile?.name),n=()=>{let r=[];t=BC(e.profile?.name,e);let i=(s,a)=>{let c=e.profiles[s],l=e.profiles[a];t.candidatePairs+=1,t.comparedPairs+=1;let u=e.compare(c,l);u&&r.push(u)};if(e.filePattern){let s=e.profiles.findIndex(a=>a.file.includes(e.filePattern));if(s>=0){let a=e.profiles[s];for(let c of F$(e,s)){let l=e.profiles[c];e.focusFiles&&!e.focusFiles.has(a.file)&&!e.focusFiles.has(l.file)||i(s,c)}}}else if(e.focusFiles?.size!==0){let s=typeof e.overrunFactor=="number"&&Number.isFinite(e.limit)?e.limit*e.overrunFactor:Number.POSITIVE_INFINITY;for(let a=0;a<e.profiles.length;a+=1){let c=e.profiles[a],l=e.focusFiles?.has(c.file)??!1;for(let u of _$(e,a))e.focusFiles&&!l&&!e.focusFiles.has(e.profiles[u].file)||i(a,u);if(r.length>s){t.overrunApplied=!0;break}}}r.sort(e.sort??((s,a)=>a.similarity-s.similarity)),t.matchedResults=r.length;let o=r.slice(0,e.limit);return t.emittedResults=o.length,e.onProfile?.({...t}),o};return e.profile?E(`pairwise-profile:${e.profile.name}`,n,()=>({...L$(e.profile?.metadata),...t})):n()}function F$(e,t){if(e.candidateIndex)return $C(e,t,-1);let n=[];for(let r=0;r<e.profiles.length;r+=1)r!==t&&n.push(r);return n}function _$(e,t){if(e.candidateIndex)return $C(e,t,t);let n=[];for(let r=t+1;r<e.profiles.length;r+=1)n.push(r);return n}function $C(e,t,n){let r=e.profiles[t],i=new Set;for(let o of e.candidateIndex?.candidatesFor(r,t,e.profiles)??[])o<=n||o!==t&&(o<0||o>=e.profiles.length||i.add(o));return[...i].sort((o,s)=>o-s)}function BC(e,t){return{pipeline:e,profileCount:t?.profiles.length??0,focusedProfileCount:t?.focusFiles?t.profiles.filter(n=>t.focusFiles.has(n.file)).length:0,candidatePairs:0,comparedPairs:0,matchedResults:0,emittedResults:0,candidateIndexApplied:t?.candidateIndex!==void 0,focusApplied:t?.focusFiles!==void 0,filePatternApplied:t?.filePattern!==void 0,overrunApplied:!1}}function L$(e){return typeof e=="function"?e():e??{}}function N$(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=A$(e,{scope:i,minDeps:s}),l=At(a,u=>u.deps);return Mt({profiles:a,limit:r,filePattern:o,overrunFactor:5,candidateIndex:l,profile:{name:"similar-files"},compare:(u,d)=>O$(u,d,n,c)})}function A$(e,t){let{scope:n,minDeps:r}=t,i=ie(e,n),{universalDeps:o,distinctiveDeps:s}=M$(i),a=[];for(let[c,l]of i)l.size>=r&&a.push({file:c,deps:new Set([...l].filter(u=>!o.has(u)))});return{profiles:a,distinctiveDeps:s}}function M$(e){let t=new Set,n=new Set,r=e.size;if(r===0)return{universalDeps:t,distinctiveDeps:n};let i=new Map;for(let s of e.values())for(let a of s)i.set(a,(i.get(a)??0)+1);let o=Math.max(3,Math.ceil(r*.03));for(let[s,a]of i)a>=5&&a/r>.3?t.add(s):a<=o&&n.add(s);return{universalDeps:t,distinctiveDeps:n}}function O$(e,t,n,r){let i=new Set;for(let l of e.deps)t.deps.has(l)&&i.add(l);if(i.size<3||e.deps.size<4||t.deps.size<4)return null;let o=0;for(let l of i)r.has(l)&&o++;if(o<2)return null;let s=Fn(e.deps,t.deps);if(s<n)return null;let a=[];for(let l of e.deps)t.deps.has(l)||a.push(l);let c=[];for(let l of t.deps)e.deps.has(l)||c.push(l);return{fileA:e.file,fileB:t.file,similarity:s,sharedDeps:[...i],uniqueToA:a,uniqueToB:c}}function _n(e){let t=[],n=[],r=[];for(let l of e.primitiveGroups)l.values.length!==0&&HC(l.bucket,n,r).push(`${l.reasonPrefix}: ${l.values.join(", ")}`);for(let l of e.nameGroups)j$(l.names,l.label,e.genericWords,e.stripPrefixes??[],t,HC(l.fallbackBucket,n,r));let i=t.length>0,o=n.length>0,s=r.length>0,a=i?o||s?"mixed":"domain-behavior":s?"shared-abstraction":"generic-workflow-scaffolding";return{actionTier:a==="domain-behavior"||a==="mixed"?"signal":"support",evidenceClass:a,reasons:[...t,...r,...n].slice(0,6),recommendation:e.recommendation(a)}}function Ba(e,t){if(e.size===0||t.size===0)return 0;let i=pt(e,t).size/Math.min(e.size,t.size)*Math.min(1,Math.min(e.size,t.size)/(.35*Math.max(e.size,t.size)));return Math.max(Fn(e,t),i)}function Ln(e,t){let n=Object.fromEntries(e.map(r=>[r.name,r.count]));for(let r of t)if(Object.entries(r.min).every(([o,s])=>(n[o]??0)>=s))return{pass:!0,reason:r.reason,counts:n};return{pass:!1,reason:"shared tokens did not meet calibrated overlap thresholds",counts:n}}function $a(e,t,n){let r=t.map(c=>{let l=c.value(e),u=c.weightedValue?c.weightedValue(e,l):l;return{axis:c,value:l,weighted:u,qualifies:c.qualifies?c.qualifies(e,l):l>0}}),i=r.filter(c=>c.qualifies&&c.axis.reason).map(c=>c.axis.reason(e,c.value)),o=r.filter(c=>c.qualifies&&c.axis.dominantEligible!==!1).sort((c,l)=>l.weighted-c.weighted)[0],s=o&&o.weighted>0?o.axis.axis:n,a=[...new Set(r.filter(c=>c.qualifies).map(c=>c.axis.axis).concat(i.length>0?[]:[s]))];return{dominantPressure:s,pressureKinds:a,reasons:i}}function q(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function Le(e){return[...e].sort()}function j$(e,t,n,r,i,o){let s=[],a=[];for(let c of e)B$(c,r).filter(u=>!n.has(u)).length>0?s.push(c):a.push(c);s.length&&i.push(`${t} has domain term(s): ${s.slice(0,6).join(", ")}`),a.length&&o.push(`${t} is generic workflow: ${a.slice(0,6).join(", ")}`)}function B$(e,t){let n=e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2");for(let r of t)n=n.replace(r,"");return n.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function HC(e,t,n){return e==="generic"?t:n}function go(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=ot(e).reactProfiles({scope:o,minJsxTokens:r,scanLimit:s}).filter(d=>d.kind==="component").map(d=>({file:d.file,component:d.name,tokens:d.jsxTokens,profile:d})),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"react-component-duplicates"},compare:(d,m)=>$$(d,m,n),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.componentA.localeCompare(m.componentA)||d.fileB.localeCompare(m.fileB)||d.componentB.localeCompare(m.componentB)})}function $$(e,t,n){let r=pt(e.tokens,t.tokens);if(r.size<6||!H$(r))return null;let i=Fn(e.tokens,t.tokens);if(i<n)return null;let o=q(r,"component:"),s=q(r,"native:"),a=q(r,"prop:"),c=q(r,"event:"),l=q(r,"binding:"),u=U$({sharedComponents:o,sharedNativeTags:s,sharedProps:a,sharedEvents:c,sharedBindings:l});return{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:i,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(r),sharedComponents:o,sharedNativeTags:s,sharedProps:a,sharedEvents:c,sharedBindings:l,evidenceClass:u.evidenceClass,actionTier:u.actionTier,evidenceClassReasons:u.reasons,recommendation:u.recommendation,uniqueToA:Le(ke(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(ke(t.tokens,e.tokens)).slice(0,25),locA:e.profile.loc,locB:t.profile.loc}}function H$(e){let t=0,n=0;for(let r of e)r.startsWith("component:")&&(t+=1),(r.startsWith("prop:")||r.startsWith("event:")||r.startsWith("native:")||r.startsWith("jsx:"))&&(n+=1);return Ln([{name:"component",count:t},{name:"shape",count:n}],[{min:{component:1},reason:"shared custom component"},{min:{shape:4},reason:"shared JSX structure"}]).pass}function U$(e){return _n({genericWords:G$,primitiveGroups:[{values:e.sharedNativeTags,reasonPrefix:"shared native tags",bucket:"generic"},{values:e.sharedProps,reasonPrefix:"shared props",bucket:"generic"},{values:e.sharedEvents,reasonPrefix:"shared events",bucket:"generic"}],nameGroups:[{names:e.sharedComponents,label:"shared component",fallbackBucket:"generic"},{names:e.sharedBindings,label:"shared binding",fallbackBucket:"generic"}],recommendation:W$})}function W$(e){switch(e){case"domain-behavior":case"mixed":return"Review for a shared component or feature-specific UI primitive around the named domain structure.";case"shared-abstraction":return"Review the existing shared component usage first; extract only if duplicated structure remains outside it.";case"generic-workflow-scaffolding":return"Generic structural overlap \u2014 verify intent before consolidating."}}var G$=new Set(["actions","app","button","card","children","content","container","dialog","field","form","header","input","item","label","layout","list","modal","page","panel","row","section","shell","table","text","toolbar","ui","value","view","wrapper"]);function ho(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=ot(e).reactProfiles({scope:o,minBehaviorTokens:Math.max(3,r),scanLimit:s}).map(d=>({file:d.file,component:d.name,tokens:d.behaviorTokens,profile:d})),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"react-hook-candidates"},compare:(d,m)=>z$(d,m,n,r),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.componentA.localeCompare(m.componentA)||d.fileB.localeCompare(m.fileB)||d.componentB.localeCompare(m.componentB)})}function z$(e,t,n,r){let i=pt(e.tokens,t.tokens);if(i.size<r||!K$(i))return null;let o=Ba(e.tokens,t.tokens);if(o<n)return null;let s=q(i,"hook:"),a=q(i,"react-hook:"),c=q(i,"effect:"),l=q(i,"state:"),u=q(i,"request:"),d=q(i,"handler:"),m=q(i,"handler-verb:"),f=V$({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m});return{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:o,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(i),sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m,evidenceClass:f.evidenceClass,actionTier:f.actionTier,evidenceClassReasons:f.reasons,recommendation:f.recommendation,uniqueToA:Le(ke(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(ke(t.tokens,e.tokens)).slice(0,25),reason:J$({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m}),locA:e.profile.loc,locB:t.profile.loc}}function V$(e){return _n({genericWords:Y$,stripPrefixes:X$,primitiveGroups:[{values:e.sharedReactHooks,reasonPrefix:"shared React primitives",bucket:"generic"},{values:e.sharedEffects,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedHooks,label:"shared hook",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedState,label:"shared state",fallbackBucket:"generic"},{names:e.sharedHandlers,label:"shared handler",fallbackBucket:"generic"},{names:e.sharedHandlerVerbs,label:"shared action verb",fallbackBucket:"generic"}],recommendation:q$})}function q$(e){switch(e){case"domain-behavior":return"Review for a shared hook, controller, or feature module around the named domain behavior.";case"mixed":return"Separate generic React mechanics from domain-specific behavior before extracting a shared hook.";case"shared-abstraction":return"Review the existing shared hook usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct hook-extraction evidence."}}function K$(e){let t=0,n=0,r=0,i=0,o=0,s=0,a=0;for(let u of e)u.startsWith("hook:")?t+=1:u.startsWith("react-hook:")?n+=1:u.startsWith("effect:")?r+=1:u.startsWith("request:")?i+=1:u.startsWith("handler:")||u.startsWith("handler-verb:")?o+=1:u.startsWith("state:")?s+=1:u.startsWith("state-hook:")&&(a+=1);let c=s+a,l=t+n+r+i+o+c;return Ln([{name:"requests",count:i},{name:"customHooks",count:t},{name:"namedStates",count:s},{name:"handlers",count:o},{name:"effects",count:r},{name:"reactHooks",count:n},{name:"namedBehavior",count:l}],[{min:{requests:1,namedBehavior:4},reason:"shared request workflow"},{min:{customHooks:1,requests:1,namedBehavior:5},reason:"shared custom hook and request workflow"},{min:{customHooks:1,namedStates:1,namedBehavior:5},reason:"shared custom hook and state"},{min:{customHooks:1,handlers:2,namedBehavior:5},reason:"shared custom hook and handlers"},{min:{namedStates:1,handlers:2,effects:1,namedBehavior:5},reason:"shared stateful effects"},{min:{namedStates:1,handlers:2,reactHooks:2,namedBehavior:5},reason:"shared stateful React primitives"}]).pass}function J$(e){let t=[];return e.sharedHooks.length&&t.push(`shared hooks: ${e.sharedHooks.join(", ")}`),e.sharedReactHooks.length&&t.push(`shared React hooks: ${e.sharedReactHooks.join(", ")}`),e.sharedEffects.length&&t.push(`shared effects: ${e.sharedEffects.join(", ")}`),e.sharedState.length&&t.push(`shared state: ${e.sharedState.join(", ")}`),e.sharedRequests.length&&t.push(`shared requests: ${e.sharedRequests.join(", ")}`),e.sharedHandlers.length&&t.push(`shared handlers: ${e.sharedHandlers.slice(0,6).join(", ")}`),e.sharedHandlerVerbs.length&&t.push(`shared action verbs: ${e.sharedHandlerVerbs.slice(0,6).join(", ")}`),t.join("; ")||"shared React behavior profile"}var Y$=new Set(["add","apply","async","callback","cancel","change","clear","close","create","data","delete","draft","edit","effect","error","fetch","filter","form","handle","has","is","item","items","load","loader","loading","memo","name","open","reducer","refresh","ref","remove","request","reset","resource","row","rows","save","saving","search","select","selected","state","store","submit","toggle","update","use","value"]),X$=[/^use(?=[A-Z])/,/^handle(?=[A-Z])/,/^is(?=[A-Z])/,/^has(?=[A-Z])/];function Fd(e,t={}){let{minComponentLines:n=300,minFileLines:r=800,minJsxTokens:i=80,minBehaviorTokens:o=40,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return ot(e).reactProfiles({scope:a,scanLimit:c}).filter(d=>d.kind==="component").filter(d=>!l||d.file.includes(l)||d.name.includes(l)).map(d=>Q$(d,{minComponentLines:n,minFileLines:r,minJsxTokens:i,minBehaviorTokens:o})).filter(d=>d!==null).sort((d,m)=>m.componentLines-d.componentLines||m.fileLines-d.fileLines||d.file.localeCompare(m.file)).slice(0,s)}function Q$(e,t){let n=Math.max(80,Math.floor(t.minComponentLines/2)),r=$a(e,Z$({minComponentLines:t.minComponentLines,minFileLines:t.minFileLines,minJsxTokens:t.minJsxTokens,minBehaviorTokens:t.minBehaviorTokens,substantialComponentLines:n}),"component"),{reasons:i}=r;if(i.length===0)return null;let o=r.dominantPressure,s=r.pressureKinds,a=e1(e),c=t1(o,s,a);return{file:e.file,component:e.name,componentLines:e.loc,fileLines:e.fileLines,jsxTokens:e.jsxTokens.size,behaviorTokens:e.behaviorTokens.size,dominantPressure:o,pressureKinds:s,contextKind:a,recommendationKind:c,recommendation:n1(c,a),reasons:i,loc:e.loc}}function Z$(e){return[{axis:"component",value:t=>t.loc,qualifies:(t,n)=>n>=e.minComponentLines,reason:(t,n)=>`${n} component line(s)`},{axis:"file",value:t=>t.fileLines,qualifies:(t,n)=>n>=e.minFileLines&&t.loc>=e.substantialComponentLines,reason:(t,n)=>`${n} file line(s)`},{axis:"jsx-structure",value:t=>t.jsxTokens.size,weightedValue:(t,n)=>n*3,qualifies:(t,n)=>n>=e.minJsxTokens,reason:(t,n)=>`${n} JSX structure token(s)`},{axis:"hook-behavior",value:t=>t.behaviorTokens.size,weightedValue:(t,n)=>n*4,qualifies:(t,n)=>n>=e.minBehaviorTokens,reason:(t,n)=>`${n} behavior token(s)`}]}function e1(e){let t=e.file.split(/[\\/]+/).filter(Boolean),n=t.slice(0,-1).map(m=>m.toLowerCase()),r=(t.at(-1)??e.name).replace(/\.[^.]+$/,""),o=n.findIndex(m=>i1.has(m))>=0,s=n.some(m=>r1.has(m));if(UC(r)||UC(e.name))return"component";let c=o1.has(r.toLowerCase()),l=/(?:Page|Route|Screen)$/.test(e.name),u=o&&/View$/.test(e.name),d=!s&&r.replace(/[^A-Za-z0-9]+/g,"").toLowerCase()===e.name.replace(/[^A-Za-z0-9]+/g,"").toLowerCase()&&/(?:Page|Route|Screen|View)$/.test(r);return c||l||u||d?"route-page":"component"}function UC(e){let t=e.split(/[^A-Za-z0-9]+/).filter(Boolean).map(n=>n.toLowerCase());return t.at(-1)&&WC.has(t.at(-1))?!0:[...WC].some(n=>e.endsWith(s1(n)))}function t1(e,t,n){return e==="hook-behavior"?"behavior-extraction":n==="route-page"?"route-page-decomposition":t.includes("hook-behavior")?"behavior-extraction":t.includes("jsx-structure")?"jsx-decomposition":t.includes("file")?"file-decomposition":e==="jsx-structure"?"jsx-decomposition":e==="file"&&!t.includes("component")?"file-decomposition":"component-decomposition"}function n1(e,t){switch(e){case"behavior-extraction":return"Extract independent state, effects, requests, or handlers into hooks, controllers, or feature modules.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"jsx-decomposition":return t==="route-page"?"Split page JSX into named layout sections before extracting behavior.":"Split repeated JSX sections into named presentational components.";case"file-decomposition":return"Review file-level decomposition; split colocated panels or helpers before changing behavior.";case"component-decomposition":return"Review component boundaries around props, state ownership, and independently changing UI sections."}}var r1=new Set(["component","components","panel","panels","partial","partials"]),WC=new Set(["banner","button","card","dialog","drawer","filter","form","grid","header","item","list","menu","modal","nav","panel","picker","rail","row","section","selector","shell","sidebar","table","toolbar"]),i1=new Set(["landing","page","pages","route","routes","screen","screens","view","views"]),o1=new Set(["page","route","screen"]);function s1(e){return e.charAt(0).toUpperCase()+e.slice(1)}function yo(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=a1(e,{scope:o,minTokens:r,scanLimit:s}),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"vue-component-duplicates"},compare:(d,m)=>l1(d,m,n),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.fileB.localeCompare(m.fileB)})}function a1(e,t){return ot(e).vueProfiles({scope:t.scope,minTemplateTokens:t.minTokens,scanLimit:t.scanLimit}).map(n=>({file:n.file,tokens:n.templateTokens,loc:c1(n)}))}function c1(e){return e.totalLines}function l1(e,t,n){let r=pt(e.tokens,t.tokens);if(r.size<6||!u1(r))return null;let i=Fn(e.tokens,t.tokens);if(i<n)return null;let o=q(r,"component:"),s=q(r,"prop:"),a=q(r,"event:"),c=q(r,"directive:"),l=q(r,"slot:"),u=q(r,"id:"),d=d1({sharedComponents:o,sharedProps:s,sharedEvents:a,sharedDirectives:c,sharedSlots:l,sharedIdentifiers:u});return{fileA:e.file,fileB:t.file,similarity:i,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(r),sharedComponents:o,sharedProps:s,sharedEvents:a,sharedDirectives:c,sharedSlots:l,sharedIdentifiers:u,evidenceClass:d.evidenceClass,actionTier:d.actionTier,evidenceClassReasons:d.reasons,recommendation:d.recommendation,uniqueToA:Le(ke(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(ke(t.tokens,e.tokens)).slice(0,25),locA:e.loc,locB:t.loc}}function u1(e){let t=0,n=0;for(let r of e)r.startsWith("component:")&&(t+=1),(r.startsWith("prop:")||r.startsWith("event:")||r.startsWith("directive:")||r.startsWith("slot:"))&&(n+=1);return Ln([{name:"component",count:t},{name:"behavior",count:n}],[{min:{component:1},reason:"shared custom component"},{min:{behavior:3},reason:"shared Vue template structure"}]).pass}function d1(e){return _n({genericWords:f1,primitiveGroups:[{values:e.sharedProps,reasonPrefix:"shared props",bucket:"generic"},{values:e.sharedEvents,reasonPrefix:"shared events",bucket:"generic"},{values:e.sharedDirectives,reasonPrefix:"shared directives",bucket:"generic"},{values:e.sharedSlots,reasonPrefix:"shared slots",bucket:"generic"}],nameGroups:[{names:e.sharedComponents,label:"shared component",fallbackBucket:"generic"},{names:e.sharedIdentifiers,label:"shared identifier",fallbackBucket:"generic"}],recommendation:m1})}function m1(e){switch(e){case"domain-behavior":case"mixed":return"Review for a shared component or feature-specific Vue primitive around the named domain structure.";case"shared-abstraction":return"Review the existing shared component usage first; extract only if duplicated structure remains outside it.";case"generic-workflow-scaffolding":return"Generic structural overlap \u2014 verify intent before consolidating."}}var f1=new Set(["actions","app","button","card","content","container","dialog","field","form","header","input","item","label","layout","list","modal","page","panel","row","section","shell","table","text","toolbar","ui","value","view","wrapper"]);function bo(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=ot(e).vueProfiles({scope:o,minBehaviorTokens:Math.max(3,r),scanLimit:s}).map(d=>({file:d.file,tokens:d.behaviorTokens,profile:d})),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"vue-composable-candidates"},compare:(d,m)=>p1(d,m,n,r),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.fileB.localeCompare(m.fileB)})}function p1(e,t,n,r){let i=pt(e.tokens,t.tokens);if(i.size<r||!y1(i))return null;let o=Ba(e.tokens,t.tokens);if(o<n)return null;let s=q(i,"composable:"),a=q(i,"store:"),c=q(i,"reactivity:"),l=q(i,"lifecycle:"),u=q(i,"request:"),d=q(i,"function:"),m=q(i,"function-verb:"),f=q(i,"template-binding:"),p=q(i,"template-event:"),g=g1({sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f,sharedTemplateEvents:p});return{fileA:e.file,fileB:t.file,similarity:o,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(i),sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f,sharedTemplateEvents:p,evidenceClass:g.evidenceClass,actionTier:g.actionTier,evidenceClassReasons:g.reasons,recommendation:g.recommendation,uniqueToA:Le(ke(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(ke(t.tokens,e.tokens)).slice(0,25),reason:b1({sharedComposables:s,sharedStores:a,sharedRequests:u,sharedLifecycle:l,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f}),locA:e.profile.totalLines,locB:t.profile.totalLines}}function g1(e){return _n({genericWords:S1,primitiveGroups:[{values:e.sharedReactivity,reasonPrefix:"shared reactivity primitive",bucket:"generic"},{values:e.sharedLifecycle,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedComposables,label:"shared composable",fallbackBucket:"shared-abstraction"},{names:e.sharedStores,label:"shared store",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedFunctions,label:"shared function",fallbackBucket:"generic"},{names:e.sharedFunctionVerbs,label:"shared action verb",fallbackBucket:"generic"},{names:e.sharedBindings,label:"shared binding",fallbackBucket:"generic"},{names:e.sharedTemplateEvents,label:"shared template event",fallbackBucket:"generic"}],recommendation:h1})}function h1(e){switch(e){case"domain-behavior":return"Review for a shared composable, store, or feature module around the named domain behavior.";case"mixed":return"Separate generic Vue mechanics from domain-specific behavior before extracting a composable.";case"shared-abstraction":return"Review the existing composable/store usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct composable-extraction evidence."}}function y1(e){let t=0,n=0,r=0,i=0,o=0,s=0,a=0;for(let u of e)u.startsWith("composable:")?t+=1:u.startsWith("store:")?n+=1:u.startsWith("request:")?r+=1:u.startsWith("lifecycle:")?i+=1:u.startsWith("function:")?o+=1:u.startsWith("reactivity:")?s+=1:(u.startsWith("function-verb:")||u.startsWith("template-binding:")||u.startsWith("template-event:"))&&(a+=1);let c=t+n,l=c+r+i+o+a;return Ln([{name:"requests",count:r},{name:"lifecycle",count:i},{name:"functions",count:o},{name:"reusableHooks",count:c},{name:"reactivity",count:s},{name:"namedBehavior",count:l}],[{min:{requests:1,namedBehavior:4},reason:"shared request workflow"},{min:{lifecycle:1,functions:2,namedBehavior:4},reason:"shared lifecycle workflow"},{min:{reusableHooks:2,requests:1,namedBehavior:5},reason:"shared reusable Vue hooks and requests"},{min:{reusableHooks:2,functions:2,namedBehavior:5},reason:"shared reusable Vue hooks and functions"},{min:{functions:2,reactivity:1,namedBehavior:4},reason:"shared reactive functions"}]).pass}function b1(e){let t=[];return e.sharedComposables.length&&t.push(`shared composables: ${e.sharedComposables.join(", ")}`),e.sharedStores.length&&t.push(`shared stores: ${e.sharedStores.join(", ")}`),e.sharedRequests.length&&t.push(`shared request helpers: ${e.sharedRequests.join(", ")}`),e.sharedLifecycle.length&&t.push(`shared lifecycle: ${e.sharedLifecycle.join(", ")}`),e.sharedFunctions.length&&t.push(`shared functions: ${e.sharedFunctions.slice(0,6).join(", ")}`),e.sharedFunctionVerbs.length&&t.push(`shared action verbs: ${e.sharedFunctionVerbs.slice(0,6).join(", ")}`),e.sharedBindings.length&&t.push(`shared template bindings: ${e.sharedBindings.slice(0,6).join(", ")}`),t.join("; ")||"shared Vue behavior profile"}var S1=new Set(["add","apply","cancel","change","clear","close","composable","create","data","delete","draft","edit","error","fetch","filter","form","item","items","load","loading","name","open","reactive","ref","refresh","remove","request","reset","resource","row","rows","save","saving","search","select","selected","store","submit","toggle","update","use","value","watch"]);function _d(e,t={}){let{minTotalLines:n=800,minTemplateLines:r=300,minScriptLines:i=300,minStyleLines:o=500,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return ot(e).vueProfiles({scope:a,scanLimit:c}).filter(d=>!l||d.file.includes(l)).map(d=>C1(d,{minTotalLines:n,minTemplateLines:r,minScriptLines:i,minStyleLines:o})).filter(d=>d!==null).sort((d,m)=>m.totalLines-d.totalLines||d.file.localeCompare(m.file)).slice(0,s)}function C1(e,t){let n=$a(e,x1(t),"total"),{reasons:r}=n;if(r.length===0)return null;let i=n.dominantPressure,o=n.pressureKinds.includes("total")?[...new Set([...n.pressureKinds,i])]:n.pressureKinds,s=R1(e.file),a=v1(i,s),c=e.totalLines+e.delegatedComposableLines;return{file:e.file,totalLines:c,sfcLines:e.sfcLines,templateLines:e.templateLines,scriptLines:e.scriptLines,styleLines:e.styleLines,externalScriptLines:e.externalScriptLines,externalScriptPaths:e.externalScriptPaths,customBlockLines:e.customBlockLines,delegatedComposableLines:e.delegatedComposableLines,delegatedComposablePaths:e.delegatedComposablePaths,dominantPressure:i,pressureKinds:o,contextKind:s,recommendationKind:a,recommendation:I1(a,s),reasons:r,loc:c}}function x1(e){return[{axis:"total",value:t=>t.totalLines+t.delegatedComposableLines,qualifies:(t,n)=>n>=e.minTotalLines,reason:(t,n)=>t.delegatedComposableLines>0?`${n} total line(s) (${t.totalLines} component + ${t.delegatedComposableLines} delegated composable line(s) across ${t.delegatedComposablePaths.length} file(s))`:`${n} total component line(s)`,dominantEligible:!1},{axis:"template",value:t=>t.templateLines,qualifies:(t,n)=>n>=e.minTemplateLines,reason:(t,n)=>`${n} template line(s)`},{axis:"script",value:t=>t.scriptLines-t.externalScriptLines,qualifies:t=>t.scriptLines>=e.minScriptLines,reason:t=>`${t.scriptLines} script line(s)`},{axis:"style",value:t=>t.styleLines,qualifies:(t,n)=>n>=e.minStyleLines,reason:(t,n)=>`${n} style line(s)`},{axis:"external-script",value:t=>t.externalScriptLines,qualifies:(t,n)=>n>=e.minScriptLines},{axis:"custom-block",value:t=>t.customBlockLines,qualifies:()=>!1}]}function R1(e){return e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).some(r=>w1.has(r))||/(?:view|page|route)\.vue$/i.test(e)||/(?:^|\/)(views|pages|routes)\//i.test(e)?"route-page":"component"}function v1(e,t){return e==="style"?"style-decomposition":e==="template"?"template-decomposition":e==="external-script"?"external-script-boundary":e==="custom-block"?"custom-block-review":t==="route-page"?"route-page-decomposition":e==="script"?"script-behavior-extraction":"total-size-review"}function I1(e,t){switch(e){case"template-decomposition":return t==="route-page"?"Split route template sections into named panels before extracting script behavior.":"Split repeated template sections into named presentational components.";case"script-behavior-extraction":return"Extract independent script behavior into composables, controllers, or feature modules.";case"style-decomposition":return"Review UI/style decomposition; move repeated styling to component or style primitives, not composables.";case"external-script-boundary":return"Review the external script boundary and split controller/composable modules by workflow.";case"custom-block-review":return"Review custom block ownership before splitting template or script code.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"total-size-review":return"Review the largest block first, then split by the dominant reason to change."}}var w1=new Set(["landing","page","pages","route","routes","view","views"]);function E1(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=ie(e,i),c=N1(a,o,s);if(c.length===0)return[];let l=D1(c);return l.length<2?[]:L1(T1(l,n,r),r)}function D1(e){let t=P1(e),n=[];for(let r of e){let i=r.filter(o=>!t.has(o));i.length>=2&&n.push({original:r,filtered:i})}return n}function P1(e){let{nodeFreq:t,tailFreq:n}=k1(e),r=e.length*.9,i=e.length*.8,o=new Set;for(let[a,c]of t)c>r&&o.add(a);for(let[a,c]of n)c>i&&o.add(a);let s=["index.ts","index.js","cli.ts","main.ts","health.ts","health.js"];for(let a of t.keys()){let c=a.split("/").pop()??"";s.includes(c)&&o.add(a)}return o}function k1(e){let t=new Map,n=new Map;for(let r of e){let i=new Set;for(let o of r)i.has(o)||(t.set(o,(t.get(o)??0)+1),i.add(o));for(let o=Math.max(0,r.length-2);o<r.length;o++)n.set(r[o],(n.get(r[o])??0)+1)}return{nodeFreq:t,tailFreq:n}}function T1(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=F1(e[i],e[o],t);s&&r.push(s)}if(r.length>n*10)break}return r.sort((i,o)=>Math.abs(o.similarity-i.similarity)>.01?o.similarity-i.similarity:i.divergencePoints.length-o.divergencePoints.length),r}function F1(e,t,n){if(!_1(e.filtered,t.filtered))return null;let{distance:r,ops:i}=A1(e.filtered,t.filtered),o=Math.max(e.filtered.length,t.filtered.length);if(o===0)return null;let s=1-r/o;if(s<n||r===0)return null;let a=i.filter(l=>l.type==="substitute").map(l=>({index:l.indexA,nodeA:e.filtered[l.indexA],nodeB:t.filtered[l.indexB]}));return a.length===0||i.filter(l=>l.type==="match").length<2?null:{chainA:e.original,chainB:t.original,similarity:s,editDistance:r,divergencePoints:a,commonPrefix:M1(e.original,t.original),commonSuffix:O1(e.original,t.original)}}function _1(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function L1(e,t){let n=[];for(let r of e)if(n.some(o=>GC(r.chainA,o.chainA)&&GC(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function N1(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;zC(e,o,[o],new Set([o]),t,n,r,500)}return r}function zC(e,t,n,r,i,o,s,a){if(s.length>=a)return;if(n.length>=o){n.length>=i&&s.push([...n]);return}let c=e.get(t);if(!c||c.size===0){n.length>=i&&s.push([...n]);return}let l=!1;for(let u of c)if(!r.has(u)&&(r.add(u),n.push(u),zC(e,u,n,r,i,o,s,a),n.pop(),r.delete(u),l=!0,s.length>=a))return;!l&&n.length>=i&&s.push([...n])}function A1(e,t){let n=e.length,r=t.length,i=Array.from({length:n+1},()=>Array(r+1).fill(0));for(let c=0;c<=n;c++)i[c][0]=c;for(let c=0;c<=r;c++)i[0][c]=c;for(let c=1;c<=n;c++)for(let l=1;l<=r;l++)e[c-1]===t[l-1]?i[c][l]=i[c-1][l-1]:i[c][l]=1+Math.min(i[c-1][l],i[c][l-1],i[c-1][l-1]);let o=[],s=n,a=r;for(;s>0||a>0;)s>0&&a>0&&e[s-1]===t[a-1]?(o.unshift({type:"match",indexA:s-1,indexB:a-1}),s--,a--):s>0&&a>0&&i[s][a]===i[s-1][a-1]+1?(o.unshift({type:"substitute",indexA:s-1,indexB:a-1}),s--,a--):a>0&&i[s][a]===i[s][a-1]+1?(o.unshift({type:"insert",indexA:s,indexB:a-1}),a--):(o.unshift({type:"delete",indexA:s-1,indexB:a}),s--);return{distance:i[n][r],ops:o}}function M1(e,t){let n=[];for(let r=0;r<Math.min(e.length,t.length)&&e[r]===t[r];r++)n.push(e[r]);return n}function O1(e,t){let n=[],r=e.length-1,i=t.length-1;for(;r>=0&&i>=0&&e[r]===t[i];)n.unshift(e[r]),r--,i--;return n}function GC(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),r=e.join("\u2192");return n.includes(r)}function gt(e){let t=j1(e.profile?.name),n=()=>{let r=e.candidates(),i=e.filterCandidate?r.filter(e.filterCandidate):r,o=e.orderCandidates?[...i].sort(e.orderCandidates):i,s=se(o,e.scanLimit);t={pipeline:e.profile?.name,loadedCandidates:r.length,filteredCandidates:i.length,scannedCandidates:s.length,evaluatedCandidates:0,matchedResults:0,emittedResults:0,scanLimitApplied:s.length<i.length,resultLimitApplied:!1};let a=e.prepare?.(s)??void 0,c=[];for(let u of s){t.evaluatedCandidates+=1;let d=e.evaluate(u,a);d&&c.push(d)}t.matchedResults=c.length,e.orderResults&&c.sort(e.orderResults);let l=typeof e.limit=="number"?c.slice(0,e.limit):c;return t.emittedResults=l.length,t.resultLimitApplied=l.length<c.length,e.onProfile?.({...t}),l};return e.profile?E(`candidate-pipeline:${e.profile.name}`,n,()=>({...B1(e.profile?.metadata),...t})):n()}function j1(e){return{pipeline:e,loadedCandidates:0,filteredCandidates:0,scannedCandidates:0,evaluatedCandidates:0,matchedResults:0,emittedResults:0,scanLimitApplied:!1,resultLimitApplied:!1}}function B1(e){return typeof e=="function"?e():e??{}}function So(e,t={}){let{scope:n,minLoc:r=10,minCallees:i=6,limit:o=20,scanLimit:s}=t,a=new F(e);return gt({candidates:()=>a.productionCallableDefinitions({scope:n,minLoc:r,excludeTypesFiles:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:!0}),scanLimit:s,profile:{name:"extract-candidates"},prepare:c=>a.calleeMap(c,{semantic:t.semantic!==!1}),evaluate:(c,l)=>$1(c,l.get(c.symbolId)??[],i),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function $1(e,t,n){let r=new Set(t.map(l=>l.symbol));if(r.size<n)return null;let i=z1(r,t),o=V1(r,i);if(o.length<2)return null;let s=q1(o,i);if(s.length===0)return null;let a=I(e.symbol),c=H1(a,r.size,o.length,s);return{symbol:e.symbol,shortName:a,relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:O(e),totalCallees:r.size,extractionKind:c.extractionKind,actionTier:"signal",evidenceReasons:c.evidenceReasons,recommendation:c.recommendation,clusters:s}}function H1(e,t,n,r){let i=Math.max(...r.map(c=>c.callees.length)),o=Math.max(...r.map(c=>c.isolation)),s=[`${t} distinct callees across ${n} co-occurrence cluster(s)`,`${r.length} extractable cluster(s) passed size and isolation thresholds`,`largest extractable cluster has ${i} callees at ${Math.round(o*100)}% isolation`],a=U1(e,t,n);return a!==null?{extractionKind:"workflow-orchestration",evidenceReasons:[...s,a],recommendation:"Review the isolated helper group as a possible private or feature-local helper, but keep the orchestration sequence together when it preserves the workflow."}:i>=6?{extractionKind:"broad-helper-cluster",evidenceReasons:[...s,"one isolated helper group is broad enough to deserve a named review"],recommendation:"Review whether the broad helper cluster has a stable concept name before extracting it; avoid creating a bag-of-helpers abstraction."}:{extractionKind:"cohesive-helper-cluster",evidenceReasons:s,recommendation:"Review the isolated callee group as a possible same-file or feature-local helper; extract only if the new name preserves the current behavior."}}function U1(e,t,n){if(t>=10)return`callee breadth suggests orchestration: ${t} callees`;if(n>=4)return`multiple disconnected callee groups suggest orchestration: ${n} groups`;let r=W1(e);return G1.has(r)?`caller verb suggests orchestration: ${r}`:null}function W1(e){return e.split(":").pop()?.replace(/\(\)$/,"").replace(/[^A-Za-z0-9_]/g,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\s-]+/).filter(Boolean)[0]?.toLowerCase()??""}var G1=new Set(["apply","build","check","collect","create","diff","execute","find","handle","load","prepare","process","render","resolve","run","select","sync","update","validate","verify","write"]);function z1(e,t){let n=new Map;for(let i of e)n.set(i,new Set);let r=new Map;for(let i of t){let o=r.get(i.chunkId);o||(o=new Set,r.set(i.chunkId,o)),o.add(i.symbol)}for(let i of r.values()){let o=[...i];for(let s=0;s<o.length;s++)for(let a=s+1;a<o.length;a++)n.get(o[s]).add(o[a]),n.get(o[a]).add(o[s])}return n}function V1(e,t){let n=new Set,r=[];for(let i of e){if(n.has(i))continue;let o=new Set,s=[i];for(;s.length>0;){let a=s.pop();if(!n.has(a)){n.add(a),o.add(a);for(let c of t.get(a)??[])n.has(c)||s.push(c)}}r.push(o)}return r}function q1(e,t){return e.filter(n=>n.size>=3).map(n=>K1(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function K1(e,t,n){let r=new Set;for(let a of t)if(a!==e)for(let c of a)r.add(c);let i=0;for(let a of e)for(let c of n.get(a)??[])r.has(c)&&i++;let o=e.size*r.size,s=o>0?1-i/o:1;return{callees:[...e].map(I),isolation:s}}import{posix as Qr}from"path";import{spawnSync as J1}from"child_process";import{createHash as Y1}from"crypto";import{existsSync as X1}from"fs";import{dirname as VC,join as Q1}from"path";import{fileURLToPath as Z1}from"url";var JC=j("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]}),qC=oe({kind:"consumer-file-usage",invalidation:J("consumer-file-usage"),serialize:lH,deserialize:uH});function sn(e,t){return{forDefinitions(n,r){return eH(e,t,n,r)}}}function an(e){let t=new Map;for(let[n,r]of e)t.set(n,new Set(r.files.map(i=>i.file)));return t}function Ua(e,t,n){return XC(e,t,n).partition}function eH(e,t,n,r){let i=YC(n.length),o=U()?Te(e):null,s=o?tH(n,r,o):void 0,a=s?{workIdentity:s,workOutcome:"computed"}:{};return E("consumer-evidence.product",()=>{let c=E("consumer-evidence.provenance",()=>nH(e,t,n,r),()=>({...a,definitions:n.length,semantic:r.semantic,sourceFallback:r.sourceFallback!==!1})),l=new Map;i={...i,...c.counters};let u=rH(n,c.sources);return E("consumer-evidence.classify",()=>{let d=iH(e,n,c.sources,u);for(let m of n){let f=d.get(m.symbolId)??sH();i.realFiles+=f.partition.realConsumers.length,i.reexportOnlyFiles+=f.partition.barrelConsumers,i.importOnlyFiles+=f.partition.importOnlyConsumers,l.set(m.symbolId,{definition:m,files:f.files,...f.partition})}},()=>({...a,...u,realFiles:i.realFiles,reexportOnlyFiles:i.reexportOnlyFiles,importOnlyFiles:i.importOnlyFiles})),l},()=>({...a,...i}))}function tH(e,t,n){let r=Y1("sha256").update("consumer-evidence-v1\0").update(n).update("\0").update(t.semantic?"semantic\0":"indexed\0").update(t.sourceFallback===!1?"no-source-fallback":"source-fallback");for(let i of e.map(o=>o.symbol).sort())r.update("\0").update(i);return r.digest("hex").slice(0,24)}function YC(e){return{definitions:e,indexedFiles:0,semanticFiles:0,fallbackFiles:0,totalFiles:0,realFiles:0,reexportOnlyFiles:0,importOnlyFiles:0}}function nH(e,t,n,r){let i=YC(n.length),o=new Map;return Ld(o,i,"indexed",t.crossFileCallerMap(n,{semantic:!1})),r.semantic&&Ld(o,i,"semantic",En(e,n)),r.sourceFallback!==!1&&Ld(o,i,"source-fallback",t.sourceFallbackCallerFiles(n)),i.totalFiles=[...o.values()].reduce((s,a)=>s+a.size,0),{sources:o,counters:i}}function rH(e,t){return{definitions:e.length,consumerFiles:[...t.values()].reduce((n,r)=>n+r.size,0),nativeAttempted:!1,nativeUsed:!1,nativeReason:"not-attempted"}}function Ld(e,t,n,r){let i=0;for(let[o,s]of r){let a=e.get(o);a||(a=new Map,e.set(o,a));for(let c of s){i++;let l=a.get(c)??new Set;l.add(n),a.set(c,l)}}n==="indexed"?t.indexedFiles+=i:n==="semantic"?t.semanticFiles+=i:t.fallbackFiles+=i}function iH(e,t,n,r){let i=yH(e,t,n,r);return i||oH(e,t,n)}function oH(e,t,n){let r=new Map;for(let i of t){let o=n.get(i.symbolId)??new Map;r.set(i.symbolId,XC(e,i,[...o.keys()],o))}return r}function XC(e,t,n,r=new Map){let i=[],o=0,s=0,a=T(t.symbol),c=[];for(let l of n){let u;dH(e,l,t.relativePath,a)?(o++,u="reexport-only"):Nd(e,l,a)?(s++,u="import-only"):(i.push(l),u="real"),c.push({file:l,sources:[...r.get(l)??[]],classification:u})}return{partition:{realConsumers:i,barrelConsumers:o,importOnlyConsumers:s},files:c}}function sH(){return{partition:{realConsumers:[],barrelConsumers:0,importOnlyConsumers:0},files:[]}}function Nd(e,t,n){if(!n)return!1;let r=M(t);if(!r)return!1;let i=JC.get(e,t,()=>QC(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function QC(e,t,n){let r=ut(e).forFile(t,{text:!0,ast:!0}),i=r.text;if(!i)return cH();let o=ce(e,t,i),s=qC.read(e,t,o);if(s)return s;let a=aH(r.ast,n);return qC.write(e,t,o,a),a}function aH(e,t){let n=new Set,r=new Set;if(!e)return{importedLeaves:n,usedLeaves:r};let i=t==="rust"?new Set(["use_declaration"]):t==="python"?new Set(["import_statement","import_from_statement"]):new Set(["import_statement"]),o=(s,a)=>{let c=a||i.has(s.type);(s.type==="identifier"||s.type==="type_identifier"||s.type==="property_identifier"||s.type==="field_identifier")&&(c?n.add(s.text):r.add(s.text));for(let l of s.children)o(l,c)};return o(e.rootNode,!1),{importedLeaves:n,usedLeaves:r}}function cH(){return{importedLeaves:new Set,usedLeaves:new Set}}function lH(e){return JSON.stringify({importedLeaves:[...e.importedLeaves],usedLeaves:[...e.usedLeaves]})}function uH(e){try{let t=JSON.parse(e);return!Array.isArray(t.importedLeaves)||!Array.isArray(t.usedLeaves)?null:{importedLeaves:new Set(t.importedLeaves.filter(n=>typeof n=="string")),usedLeaves:new Set(t.usedLeaves.filter(n=>typeof n=="string"))}}catch{return null}}function dH(e,t,n,r){if(!r)return!1;let i=ut(e).forFile(t,{lines:!0,reexports:!0}),o=i.lines??[];if(o.length===0)return!1;let s=i.reexports??[];return ZC(o,s,r)}function ZC(e,t,n){if(e.length===0||t.length===0)return!1;let r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\b${r}\\b`),o=0;for(let s=0;s<e.length;s++){if(!i.test(e[s]??""))continue;if(o++,!t.find(c=>c.startLine<=s&&s<=c.endLine))return!1}return o>0}var mH="SCIP_QUERY_NATIVE_CONSUMER_CLASSIFY",fH="SCIP_QUERY_NATIVE_KERNELS_BIN",pH="SCIP_QUERY_NATIVE_CONSUMER_CLASSIFY_MIN_FILES",KC=1e3,gH=5e3,hH=64*1024*1024,Ha;function yH(e,t,n,r){let i=process.env[mH]?.toLowerCase();if(i!=="1"&&i!=="true")return r.nativeReason=i==="0"||i==="false"?"disabled":"opt-in-required",null;if(r.consumerFiles<IH())return r.nativeReason="below-threshold",null;let o=wH();if(!o)return r.nativeReason="binary-missing",null;r.nativeAttempted=!0;let s=bH(e,t,n),a=J1(o,["consumer-classify"],{input:JSON.stringify(s),encoding:"utf8",timeout:gH,maxBuffer:hH});if(a.status!==0||a.error)return r.nativeReason=a.error?`spawn-error:${a.error.message}`:`exit-${a.status??"null"}`,null;try{let c=JSON.parse(a.stdout),l=CH(c,t);return l?(r.nativeUsed=!0,r.nativeReason="used",l):(r.nativeReason="invalid-response",null)}catch{return r.nativeReason="invalid-json",null}}function bH(e,t,n){let r=new Map,i=[];for(let a of t){let c=T(a.symbol),u=[...(n.get(a.symbolId)??new Map).entries()].map(([d,m])=>{let f=r.get(d)??new Set;return c&&f.add(c),r.set(d,f),{file:d,sources:[...m]}});i.push({symbol_id:a.symbolId,leaf:c,consumer_files:u})}let o={},s={};for(let[a,c]of r){let l=M(a);if(l){let d=JC.get(e,a,()=>QC(e,a,l));o[a]={imported_leaves:[...d.importedLeaves],used_leaves:[...d.usedLeaves]}}let u=SH(e,a,c);u.length>0&&(s[a]=u)}return{definitions:i,file_usages:o,reexport_only_leaves:s}}function SH(e,t,n){if(n.size===0)return[];let r=ut(e).forFile(t,{lines:!0,reexports:!0}),i=r.lines??[],o=r.reexports??[];return i.length===0||o.length===0?[]:[...n].filter(s=>ZC(i,o,s))}function CH(e,t){if(!Array.isArray(e.entries)||e.entries.length!==t.length)return null;let n=new Set(t.map(i=>i.symbolId)),r=new Map;for(let i of e.entries){let o=xH(i);if(!o||!n.has(o.symbol_id))return null;r.set(o.symbol_id,{partition:{realConsumers:o.real_consumers,barrelConsumers:o.barrel_consumers,importOnlyConsumers:o.import_only_consumers},files:o.files})}for(let i of n)if(!r.has(i))return null;return r}function xH(e){if(!e||typeof e!="object")return null;let t=e;if(typeof t.symbol_id!="number"||!Array.isArray(t.real_consumers)||typeof t.barrel_consumers!="number"||typeof t.import_only_consumers!="number"||!Array.isArray(t.files)||!t.real_consumers.every(r=>typeof r=="string"))return null;let n=[];for(let r of t.files){if(!r||typeof r!="object")return null;let i=r;if(typeof i.file!="string"||!Array.isArray(i.sources)||!i.sources.every(RH)||!vH(i.classification))return null;n.push({file:i.file,sources:i.sources,classification:i.classification})}return{symbol_id:t.symbol_id,real_consumers:t.real_consumers,barrel_consumers:t.barrel_consumers,import_only_consumers:t.import_only_consumers,files:n}}function RH(e){return e==="indexed"||e==="semantic"||e==="source-fallback"}function vH(e){return e==="real"||e==="reexport-only"||e==="import-only"}function IH(){let e=process.env[pH];if(!e)return KC;let t=Number(e);return Number.isFinite(t)&&t>=0?t:KC}function wH(){if(Ha!==void 0)return Ha;let e=process.env[fH],t=process.platform==="win32"?"scip-query-kernels.exe":"scip-query-kernels";return Ha=[...e?[e]:[],...EH().map(r=>Q1(r,"target","release",t))].find(r=>X1(r))??null,Ha}function EH(){let e=new Set,t=VC(Z1(import.meta.url));for(let n=0;n<5;n++)e.add(t),t=VC(t);return[...e]}var DH=20,PH=1,kH=new Map([["app","app"],["apps","app"],["component","component"],["components","component"],["composable","composable"],["composables","composable"],["contract","contract"],["contracts","contract"],["domain","domain"],["domains","domain"],["feature","feature"],["features","feature"],["hook","hook"],["hooks","hook"],["lib","library"],["module","module"],["modules","module"],["package","package"],["packages","package"],["page","page"],["pages","page"],["route","route"],["routes","route"],["screen","screen"],["screens","screen"],["service","service"],["services","service"],["shared","shared"],["src","source-root"],["store","state"],["stores","state"],["test","test"],["tests","test"],["util","utility"],["utils","utility"],["view","view"],["views","view"]]),TH=new Set(["components","contracts","hooks","lib","services","shared","stores","utils"]),FH=new Set(["access","api","auth","config","db","effect","errors","hooks","lib","middleware","permissions","routes","schemas","servicetasks","services","startup","store","stores","test-utils","repository","repositories","tests","types","ui","utils","workflow","workflows"]);function _H(e,t={}){let n=Od(t.limit,DH),r=Od(t.minConsumers,PH),i=new F(e),o=i.fileDependencyGraph(t.scope),s=QH(N(e,{includeIgnored:!1})),a=tU(e.config.locality?.architecturalBoundarySegments,t.architecturalBoundarySegments);return(t.target?LH(e,i,t.target):NH(e,t.scope,t.scanLimit)).map(u=>AH(e,i,o,u,t,s,a)).filter(u=>u.consumerFiles.length>=r||t.target).sort(XH).slice(0,n)}function LH(e,t,n){let r=jH(e,n);if(r)return[ix(r)];let i=B(e,n);if(!i)return[];let o=t.definitionsForFile(i.relativePath).find(s=>s.symbolId===i.symbolId);return o?[BH(o)]:[{unit:{kind:"symbol",file:i.relativePath,shortName:I(i.symbol),symbol:i.symbol,startLine:i.startLine,endLine:i.endLine}}]}function NH(e,t,n){let r=N(e,{scope:t,includeIgnored:!1}),i=Od(n,r.length);return r.slice(0,i).map(o=>ix(o))}function AH(e,t,n,r,i,o,s){let a=r.definition?MH(e,t,r.definition,i.semantic):OH(n,r.unit.file),c=r.definition?a.length>0?"exact":"none":a.length>0?"file-level":"none",l=r.unit.file,u=vt(Qr.dirname(l)),d=HH(a),m=$H(u),f=Bd([...ex(u),...d?ex(d):[]]),p=UH(r.unit,u,d,a),g=WH(p,r.unit,u,d,a,o,s),y=KH(r.unit,c,d,a,u,g.whyNoSuggestedHome),h=JH(r.unit,u,d,a,g.suggestedHome,g.whyNoSuggestedHome);return{actionTier:"signal",sourceUnit:r.unit,candidatePath:l,currentDirectory:u,directoryAncestry:m,consumerFiles:a,consumerCoverage:c,nearestCommonOwner:d,boundaryMarkers:f,recommendedTier:p,suggestedHome:g.suggestedHome,destinationConfidence:g.confidence,whyNoSuggestedHome:g.whyNoSuggestedHome,counterevidence:y,reasons:h,recommendation:YH(p,g.suggestedHome,c)}}function MH(e,t,n,r){let i=an(sn(e,t).forDefinitions([n],{semantic:r!==!1,sourceFallback:!0}));return lx(i.get(n.symbolId)??[])}function OH(e,t){let n=[];for(let[r,i]of e.entries())r!==t&&i.has(t)&&n.push(r);return lx(n)}function jH(e,t){let n=yn(t),r=N(e,{includeIgnored:!1}),i=r.find(s=>s===n);if(i)return i;let o=r.find(s=>s.endsWith(`/${n}`));return o||(r.find(s=>s.includes(n))??null)}function BH(e){return{definition:e,unit:{kind:"symbol",file:e.relativePath,shortName:I(e.symbol),symbol:e.symbol,startLine:e.startLine,endLine:e.endLine}}}function ix(e){return{unit:{kind:"file",file:e,shortName:Qr.basename(e)}}}function $H(e){if(e===".")return[{path:".",depth:0,markers:[]}];let t=[],n=e.split("/").filter(Boolean);for(let r=0;r<n.length;r+=1){let i=n.slice(0,r+1).join("/");t.push({path:i,depth:r,markers:jd(i)})}return t}function ex(e){return e==="."?[]:ox(e).map(({marker:t,prefix:n})=>`${t}: ${n}`)}function jd(e){return Bd(ox(e).map(({marker:t})=>t))}function ox(e){let t=e.split("/").filter(Boolean),n=[];for(let r=0;r<t.length;r+=1){let i=kH.get(t[r]);i&&n.push({marker:i,prefix:t.slice(0,r+1).join("/")})}return n}function HH(e){if(e.length===0)return null;let t=e.map(r=>vt(Qr.dirname(r))),n=t[0].split("/").filter(Boolean);for(let r of t.slice(1)){let i=r.split("/").filter(Boolean),o=[],s=Math.min(n.length,i.length);for(let a=0;a<s&&n[a]===i[a];a+=1)o.push(n[a]);n=o}return n.length===0?".":n.join("/")}function UH(e,t,n,r){return n?e.kind==="symbol"&&r.length===1?r[0]===e.file?"same-file":"sibling-folder":n==="."||n==="src"?"repository-level-review":nx(n,"package")?"package-level-shared":nx(n,"app")?"app-level-shared":rx(n,["feature","domain","module"])||rx(t,["feature","domain","module"])?"feature-local-shared":"sibling-folder":"no-exact-consumers"}function WH(e,t,n,r,i,o,s){let a=GH(e,r);if(a)return Nn(a);let c=ZH(t.file),l=zH(e,n,c,i,s);if(l)return l;let u=r;if(vt(n)===vt(u))return Nn(`${n} is already the nearest common owner for its consumers.`);let d=VH(u,n,c,s);return d||qH(u,n,c,o,s)}function GH(e,t){return t?e==="no-exact-consumers"||e==="repository-level-review"?"The inferred owner is too broad or unsupported for an exact destination.":null:"No consumer owner could be inferred from the current index."}function zH(e,t,n,r,i){if(e==="same-file"){let o=r[0]??null;return o?Ad(o):Nn("No same-file consumer path was available.")}if(e==="sibling-folder"&&r.length===1){let o=vt(Qr.dirname(r[0])),s=cx(t,n,o,i);return s?Nn(s):Ad(o)}return null}function VH(e,t,n,r){return rU(e)?sx(e,t,n,r,`Nearest shared owner ${e} is outside source root ${n}.`):null}function qH(e,t,n,r,i){if(e===".")return Nn("The nearest common owner is the repository root.");let o=`${e}/shared`,s=sx(o,t,n,i,`Proposed home ${o} is outside source root ${n}.`);return s.confidence==="withheld"||r.has(o)?s:Nn(`${o} does not exist in the indexed project.`)}function sx(e,t,n,r,i){if(!ax(e,n))return Nn(i);let o=cx(t,n,e,r);return o?Nn(o):Ad(e)}function Ad(e){return{suggestedHome:e,confidence:"exact",whyNoSuggestedHome:null}}function Nn(e){return{suggestedHome:null,confidence:"withheld",whyNoSuggestedHome:e}}function KH(e,t,n,r,i,o){let s=["Report-only signal; review ownership before moving files."];return t==="none"&&s.push("No consumers were found in the current index."),t==="file-level"&&s.push("File-level import evidence can hide which exported unit is actually used."),(n==="."||n==="src")&&s.push("Nearest common owner is broad, so this is not enough evidence for automatic placement."),r.length===1&&s.push("Only one consumer was found; inlining or same-folder placement may be better than shared extraction."),e.kind==="file"&&s.push("File targets describe module locality, not symbol-level usage."),n&&i.startsWith(`${n}/`)&&s.push("Candidate already lives under the nearest common owner."),o&&s.push(`No exact suggested home: ${o}`),s}function JH(e,t,n,r,i,o){let s=[];return s.push(`${e.shortName} currently lives in ${t}.`),n?s.push(`${r.length} consumer file(s) share ${n} as their nearest common owner.`):s.push("No consumer owner could be inferred from the current index."),i?s.push(`Suggested home is ${i}.`):o&&s.push(`No exact suggested home: ${o}`),s}function YH(e,t,n){return e==="no-exact-consumers"?"Review references before moving; no consumers were found.":e==="repository-level-review"?"Keep this as a broad locality signal; the inferred owner is too general for automatic relocation.":t?`Review whether ${n==="exact"?"symbol usage":"module import"} supports moving or extracting toward ${t}.`:"Review ownership manually before changing structure."}function XH(e,t){return tx(t)-tx(e)||e.candidatePath.localeCompare(t.candidatePath)}function tx(e){let t=e.consumerFiles.length*10;return e.consumerCoverage==="exact"&&(t+=5),e.suggestedHome&&(t+=3),e.recommendedTier==="repository-level-review"&&(t*=.1),e.recommendedTier==="no-exact-consumers"&&(t*=.05),t}function QH(e){let t=new Set(["."]);for(let n of e){let r=vt(Qr.dirname(n));for(;!t.has(r)&&(t.add(r),r!==".");)r=vt(Qr.dirname(r))}return t}function ZH(e){let t=Md(e),n=t.indexOf("src");return n>=0?t.slice(0,n+1).join("/"):t.length<=1?".":t[0]}function ax(e,t){let n=vt(e),r=vt(t);return r==="."||n===r||n.startsWith(`${r}/`)}function eU(e,t,n){let r=Md(e),i=Md(t);return(ax(e,t)?r.slice(i.length):r).some(s=>n.has(s.toLowerCase()))}function cx(e,t,n,r){return vt(e)===vt(n)||!eU(e,t,r)?null:`${e} is a named architectural boundary; an exact move to ${n} needs human design.`}function tU(...e){let t=new Set(FH);for(let n of e)for(let r of n??[]){let i=nU(r);i&&t.add(i)}return t}function nU(e){let t=e.trim().toLowerCase();return t===""?null:t}function nx(e,t){return jd(e).includes(t)}function rx(e,t){let n=jd(e);return t.some(r=>n.includes(r))}function rU(e){let t=e.split("/").filter(Boolean),n=t[t.length-1];return n?TH.has(n):!1}function vt(e){let t=yn(e);return t===""?".":t}function Md(e){let t=yn(e);return t==="."?[]:t.split("/").filter(Boolean)}function Od(e,t){return!Number.isFinite(e)||e===void 0||e<1?t:Math.floor(e)}function lx(e){return Bd([...e]).sort((t,n)=>t.localeCompare(n))}function Bd(e){return[...new Set(e)]}function $d(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=B(e,t);if(!o)return[];let s=[],a=new Set([o.symbolId]),c=new Set,l=[o];for(let u=1;u<=r&&l.length!==0;u++){let d=[],m=dd(e,l,{limit:500,semanticEvidence:H});for(let f of l)for(let p of iU(e,f,i,m.get(f.symbolId)??[])){let g=`${p.file}|${p.shortName}`;if(p.symbolId!==null){if(a.has(p.symbolId))continue;a.add(p.symbolId)}else if(c.has(g))continue;c.add(g),s.push({symbol:p.symbol,shortName:p.shortName,file:p.file,depth:u}),p.symbolId!==null&&p.symbolMatch&&d.push(p.symbolMatch)}l=d}return s.sort((u,d)=>u.depth-d.depth||u.file.localeCompare(d.file)),s}function iU(e,t,n,r){let i=r.filter(u=>!e.isIgnored(u.file)).filter(u=>!n||u.file.includes(n)),o=new Set(i.map(u=>u.file)),s=[];for(let u of oU(e,t,n)){if(o.has(u))continue;let d=Y(e,u),m=d.length>0?Dt(d,d[0].startLine):null;s.push({symbol:m?.symbol??u,file:u})}let a=[...i,...s],c=[],l=new Set;for(let u of a){let d=Ei(e,u.symbol);if(!d){let f=`${u.file}|${u.symbol}`;if(l.has(f))continue;l.add(f),c.push({symbolId:null,symbol:u.symbol,shortName:I(u.symbol),file:u.file,symbolMatch:null});continue}if(d.symbolId===t.symbolId||e.isIgnored(d.relativePath)||!sU(d))continue;let m=`${d.symbolId}|${d.relativePath}`;l.has(m)||(l.add(m),c.push({symbolId:d.symbolId,symbol:d.symbol,shortName:I(d.symbol),file:d.relativePath,symbolMatch:d}))}return c}function oU(e,t,n){let r=n?"AND consumer_d.relative_path LIKE ?":"",i=[t.symbolId,t.documentId];return n&&i.push(`%${n}%`),new Set(e.all(`SELECT DISTINCT consumer_d.relative_path
|
|
718
|
+
`)}function w$(e){return`${e.symbol}\0${e.startLine}\0${e.endLine}\0${e.leaf}`}function E$(e,t,n){return DC.read(e,t,n)??new Map}function D$(e){try{let t=JSON.parse(e);if(!Array.isArray(t.entries))return null;let n=new Map;for(let r of t.entries){if(!r||typeof r.key!="string"||typeof r.symbol!="string"||typeof r.startLine!="number"||typeof r.endLine!="number"||typeof r.leaf!="string"||!Array.isArray(r.tokens)||!r.tokens.every(i=>typeof i=="string"))return null;n.set(r.key,r)}return n}catch{return null}}function k$(e){let t={entries:[...e.values()].sort((n,r)=>n.key.localeCompare(r.key))};return JSON.stringify(t)}function P$(e,t,n,r){DC.write(e,t,n,new Map(r))}function jC(e,t){if(!e)return new Set;let n=new Set(["public","private","protected","final","static","class","def","fun","fn","function","return","string","bool","boolean","void","unit","self","this","new","const","let","var","end","pub"]),r=T$(t),o=e.replace(/["'`]/g," ").replace(/\b\d+\b/g," NUM ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[^A-Za-z0-9_]+/g," ").replace(/_/g," ").toLowerCase().split(/\s+/).map(s=>s.trim()).filter(s=>s.length>1).filter(s=>!n.has(s)).filter(s=>!r.has(s));return new Set(o)}function T$(e){return new Set(e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9_]+|_/).map(t=>t.toLowerCase()).filter(t=>t.length>1))}function F$(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function At(e,t){let n=new Map;return e.forEach((r,i)=>{let o=new Set;for(let s of t(r)){if(o.has(s))continue;o.add(s);let a=n.get(s);a?a.push(i):n.set(s,[i])}}),{candidatesFor:(r,i)=>{let o=new Set;for(let s of t(r)){let a=n.get(s);if(a)for(let c of a)c!==i&&o.add(c)}return[...o].sort((s,a)=>s-a)}}}function Mt(e){let t=BC(e.profile?.name),n=()=>{let r=[];t=BC(e.profile?.name,e);let i=(s,a)=>{let c=e.profiles[s],l=e.profiles[a];t.candidatePairs+=1,t.comparedPairs+=1;let u=e.compare(c,l);u&&r.push(u)};if(e.filePattern){let s=e.profiles.findIndex(a=>a.file.includes(e.filePattern));if(s>=0){let a=e.profiles[s];for(let c of _$(e,s)){let l=e.profiles[c];e.focusFiles&&!e.focusFiles.has(a.file)&&!e.focusFiles.has(l.file)||i(s,c)}}}else if(e.focusFiles?.size!==0){let s=typeof e.overrunFactor=="number"&&Number.isFinite(e.limit)?e.limit*e.overrunFactor:Number.POSITIVE_INFINITY;for(let a=0;a<e.profiles.length;a+=1){let c=e.profiles[a],l=e.focusFiles?.has(c.file)??!1;for(let u of L$(e,a))e.focusFiles&&!l&&!e.focusFiles.has(e.profiles[u].file)||i(a,u);if(r.length>s){t.overrunApplied=!0;break}}}r.sort(e.sort??((s,a)=>a.similarity-s.similarity)),t.matchedResults=r.length;let o=r.slice(0,e.limit);return t.emittedResults=o.length,e.onProfile?.({...t}),o};return e.profile?E(`pairwise-profile:${e.profile.name}`,n,()=>({...N$(e.profile?.metadata),...t})):n()}function _$(e,t){if(e.candidateIndex)return $C(e,t,-1);let n=[];for(let r=0;r<e.profiles.length;r+=1)r!==t&&n.push(r);return n}function L$(e,t){if(e.candidateIndex)return $C(e,t,t);let n=[];for(let r=t+1;r<e.profiles.length;r+=1)n.push(r);return n}function $C(e,t,n){let r=e.profiles[t],i=new Set;for(let o of e.candidateIndex?.candidatesFor(r,t,e.profiles)??[])o<=n||o!==t&&(o<0||o>=e.profiles.length||i.add(o));return[...i].sort((o,s)=>o-s)}function BC(e,t){return{pipeline:e,profileCount:t?.profiles.length??0,focusedProfileCount:t?.focusFiles?t.profiles.filter(n=>t.focusFiles.has(n.file)).length:0,candidatePairs:0,comparedPairs:0,matchedResults:0,emittedResults:0,candidateIndexApplied:t?.candidateIndex!==void 0,focusApplied:t?.focusFiles!==void 0,filePatternApplied:t?.filePattern!==void 0,overrunApplied:!1}}function N$(e){return typeof e=="function"?e():e??{}}function A$(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=M$(e,{scope:i,minDeps:s}),l=At(a,u=>u.deps);return Mt({profiles:a,limit:r,filePattern:o,overrunFactor:5,candidateIndex:l,profile:{name:"similar-files"},compare:(u,d)=>j$(u,d,n,c)})}function M$(e,t){let{scope:n,minDeps:r}=t,i=ie(e,n),{universalDeps:o,distinctiveDeps:s}=O$(i),a=[];for(let[c,l]of i)l.size>=r&&a.push({file:c,deps:new Set([...l].filter(u=>!o.has(u)))});return{profiles:a,distinctiveDeps:s}}function O$(e){let t=new Set,n=new Set,r=e.size;if(r===0)return{universalDeps:t,distinctiveDeps:n};let i=new Map;for(let s of e.values())for(let a of s)i.set(a,(i.get(a)??0)+1);let o=Math.max(3,Math.ceil(r*.03));for(let[s,a]of i)a>=5&&a/r>.3?t.add(s):a<=o&&n.add(s);return{universalDeps:t,distinctiveDeps:n}}function j$(e,t,n,r){let i=new Set;for(let l of e.deps)t.deps.has(l)&&i.add(l);if(i.size<3||e.deps.size<4||t.deps.size<4)return null;let o=0;for(let l of i)r.has(l)&&o++;if(o<2)return null;let s=Fn(e.deps,t.deps);if(s<n)return null;let a=[];for(let l of e.deps)t.deps.has(l)||a.push(l);let c=[];for(let l of t.deps)e.deps.has(l)||c.push(l);return{fileA:e.file,fileB:t.file,similarity:s,sharedDeps:[...i],uniqueToA:a,uniqueToB:c}}function _n(e){let t=[],n=[],r=[];for(let l of e.primitiveGroups)l.values.length!==0&&HC(l.bucket,n,r).push(`${l.reasonPrefix}: ${l.values.join(", ")}`);for(let l of e.nameGroups)B$(l.names,l.label,e.genericWords,e.stripPrefixes??[],t,HC(l.fallbackBucket,n,r));let i=t.length>0,o=n.length>0,s=r.length>0,a=i?o||s?"mixed":"domain-behavior":s?"shared-abstraction":"generic-workflow-scaffolding";return{actionTier:a==="domain-behavior"||a==="mixed"?"signal":"support",evidenceClass:a,reasons:[...t,...r,...n].slice(0,6),recommendation:e.recommendation(a)}}function $a(e,t){if(e.size===0||t.size===0)return 0;let i=pt(e,t).size/Math.min(e.size,t.size)*Math.min(1,Math.min(e.size,t.size)/(.35*Math.max(e.size,t.size)));return Math.max(Fn(e,t),i)}function Ln(e,t){let n=Object.fromEntries(e.map(r=>[r.name,r.count]));for(let r of t)if(Object.entries(r.min).every(([o,s])=>(n[o]??0)>=s))return{pass:!0,reason:r.reason,counts:n};return{pass:!1,reason:"shared tokens did not meet calibrated overlap thresholds",counts:n}}function Ha(e,t,n){let r=t.map(c=>{let l=c.value(e),u=c.weightedValue?c.weightedValue(e,l):l;return{axis:c,value:l,weighted:u,qualifies:c.qualifies?c.qualifies(e,l):l>0}}),i=r.filter(c=>c.qualifies&&c.axis.reason).map(c=>c.axis.reason(e,c.value)),o=r.filter(c=>c.qualifies&&c.axis.dominantEligible!==!1).sort((c,l)=>l.weighted-c.weighted)[0],s=o&&o.weighted>0?o.axis.axis:n,a=[...new Set(r.filter(c=>c.qualifies).map(c=>c.axis.axis).concat(i.length>0?[]:[s]))];return{dominantPressure:s,pressureKinds:a,reasons:i}}function q(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function Le(e){return[...e].sort()}function B$(e,t,n,r,i,o){let s=[],a=[];for(let c of e)$$(c,r).filter(u=>!n.has(u)).length>0?s.push(c):a.push(c);s.length&&i.push(`${t} has domain term(s): ${s.slice(0,6).join(", ")}`),a.length&&o.push(`${t} is generic workflow: ${a.slice(0,6).join(", ")}`)}function $$(e,t){let n=e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2");for(let r of t)n=n.replace(r,"");return n.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function HC(e,t,n){return e==="generic"?t:n}function go(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=ot(e).reactProfiles({scope:o,minJsxTokens:r,scanLimit:s}).filter(d=>d.kind==="component").map(d=>({file:d.file,component:d.name,tokens:d.jsxTokens,profile:d})),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"react-component-duplicates"},compare:(d,m)=>H$(d,m,n),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.componentA.localeCompare(m.componentA)||d.fileB.localeCompare(m.fileB)||d.componentB.localeCompare(m.componentB)})}function H$(e,t,n){let r=pt(e.tokens,t.tokens);if(r.size<6||!U$(r))return null;let i=Fn(e.tokens,t.tokens);if(i<n)return null;let o=q(r,"component:"),s=q(r,"native:"),a=q(r,"prop:"),c=q(r,"event:"),l=q(r,"binding:"),u=W$({sharedComponents:o,sharedNativeTags:s,sharedProps:a,sharedEvents:c,sharedBindings:l});return{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:i,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(r),sharedComponents:o,sharedNativeTags:s,sharedProps:a,sharedEvents:c,sharedBindings:l,evidenceClass:u.evidenceClass,actionTier:u.actionTier,evidenceClassReasons:u.reasons,recommendation:u.recommendation,uniqueToA:Le(Pe(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(Pe(t.tokens,e.tokens)).slice(0,25),locA:e.profile.loc,locB:t.profile.loc}}function U$(e){let t=0,n=0;for(let r of e)r.startsWith("component:")&&(t+=1),(r.startsWith("prop:")||r.startsWith("event:")||r.startsWith("native:")||r.startsWith("jsx:"))&&(n+=1);return Ln([{name:"component",count:t},{name:"shape",count:n}],[{min:{component:1},reason:"shared custom component"},{min:{shape:4},reason:"shared JSX structure"}]).pass}function W$(e){return _n({genericWords:z$,primitiveGroups:[{values:e.sharedNativeTags,reasonPrefix:"shared native tags",bucket:"generic"},{values:e.sharedProps,reasonPrefix:"shared props",bucket:"generic"},{values:e.sharedEvents,reasonPrefix:"shared events",bucket:"generic"}],nameGroups:[{names:e.sharedComponents,label:"shared component",fallbackBucket:"generic"},{names:e.sharedBindings,label:"shared binding",fallbackBucket:"generic"}],recommendation:G$})}function G$(e){switch(e){case"domain-behavior":case"mixed":return"Review for a shared component or feature-specific UI primitive around the named domain structure.";case"shared-abstraction":return"Review the existing shared component usage first; extract only if duplicated structure remains outside it.";case"generic-workflow-scaffolding":return"Generic structural overlap \u2014 verify intent before consolidating."}}var z$=new Set(["actions","app","button","card","children","content","container","dialog","field","form","header","input","item","label","layout","list","modal","page","panel","row","section","shell","table","text","toolbar","ui","value","view","wrapper"]);function ho(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=ot(e).reactProfiles({scope:o,minBehaviorTokens:Math.max(3,r),scanLimit:s}).map(d=>({file:d.file,component:d.name,tokens:d.behaviorTokens,profile:d})),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"react-hook-candidates"},compare:(d,m)=>V$(d,m,n,r),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.componentA.localeCompare(m.componentA)||d.fileB.localeCompare(m.fileB)||d.componentB.localeCompare(m.componentB)})}function V$(e,t,n,r){let i=pt(e.tokens,t.tokens);if(i.size<r||!J$(i))return null;let o=$a(e.tokens,t.tokens);if(o<n)return null;let s=q(i,"hook:"),a=q(i,"react-hook:"),c=q(i,"effect:"),l=q(i,"state:"),u=q(i,"request:"),d=q(i,"handler:"),m=q(i,"handler-verb:"),f=q$({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m});return{fileA:e.file,componentA:e.component,fileB:t.file,componentB:t.component,similarity:o,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(i),sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m,evidenceClass:f.evidenceClass,actionTier:f.actionTier,evidenceClassReasons:f.reasons,recommendation:f.recommendation,uniqueToA:Le(Pe(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(Pe(t.tokens,e.tokens)).slice(0,25),reason:Y$({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m}),locA:e.profile.loc,locB:t.profile.loc}}function q$(e){return _n({genericWords:X$,stripPrefixes:Q$,primitiveGroups:[{values:e.sharedReactHooks,reasonPrefix:"shared React primitives",bucket:"generic"},{values:e.sharedEffects,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedHooks,label:"shared hook",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedState,label:"shared state",fallbackBucket:"generic"},{names:e.sharedHandlers,label:"shared handler",fallbackBucket:"generic"},{names:e.sharedHandlerVerbs,label:"shared action verb",fallbackBucket:"generic"}],recommendation:K$})}function K$(e){switch(e){case"domain-behavior":return"Review for a shared hook, controller, or feature module around the named domain behavior.";case"mixed":return"Separate generic React mechanics from domain-specific behavior before extracting a shared hook.";case"shared-abstraction":return"Review the existing shared hook usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct hook-extraction evidence."}}function J$(e){let t=0,n=0,r=0,i=0,o=0,s=0,a=0;for(let u of e)u.startsWith("hook:")?t+=1:u.startsWith("react-hook:")?n+=1:u.startsWith("effect:")?r+=1:u.startsWith("request:")?i+=1:u.startsWith("handler:")||u.startsWith("handler-verb:")?o+=1:u.startsWith("state:")?s+=1:u.startsWith("state-hook:")&&(a+=1);let c=s+a,l=t+n+r+i+o+c;return Ln([{name:"requests",count:i},{name:"customHooks",count:t},{name:"namedStates",count:s},{name:"handlers",count:o},{name:"effects",count:r},{name:"reactHooks",count:n},{name:"namedBehavior",count:l}],[{min:{requests:1,namedBehavior:4},reason:"shared request workflow"},{min:{customHooks:1,requests:1,namedBehavior:5},reason:"shared custom hook and request workflow"},{min:{customHooks:1,namedStates:1,namedBehavior:5},reason:"shared custom hook and state"},{min:{customHooks:1,handlers:2,namedBehavior:5},reason:"shared custom hook and handlers"},{min:{namedStates:1,handlers:2,effects:1,namedBehavior:5},reason:"shared stateful effects"},{min:{namedStates:1,handlers:2,reactHooks:2,namedBehavior:5},reason:"shared stateful React primitives"}]).pass}function Y$(e){let t=[];return e.sharedHooks.length&&t.push(`shared hooks: ${e.sharedHooks.join(", ")}`),e.sharedReactHooks.length&&t.push(`shared React hooks: ${e.sharedReactHooks.join(", ")}`),e.sharedEffects.length&&t.push(`shared effects: ${e.sharedEffects.join(", ")}`),e.sharedState.length&&t.push(`shared state: ${e.sharedState.join(", ")}`),e.sharedRequests.length&&t.push(`shared requests: ${e.sharedRequests.join(", ")}`),e.sharedHandlers.length&&t.push(`shared handlers: ${e.sharedHandlers.slice(0,6).join(", ")}`),e.sharedHandlerVerbs.length&&t.push(`shared action verbs: ${e.sharedHandlerVerbs.slice(0,6).join(", ")}`),t.join("; ")||"shared React behavior profile"}var X$=new Set(["add","apply","async","callback","cancel","change","clear","close","create","data","delete","draft","edit","effect","error","fetch","filter","form","handle","has","is","item","items","load","loader","loading","memo","name","open","reducer","refresh","ref","remove","request","reset","resource","row","rows","save","saving","search","select","selected","state","store","submit","toggle","update","use","value"]),Q$=[/^use(?=[A-Z])/,/^handle(?=[A-Z])/,/^is(?=[A-Z])/,/^has(?=[A-Z])/];function Fd(e,t={}){let{minComponentLines:n=300,minFileLines:r=800,minJsxTokens:i=80,minBehaviorTokens:o=40,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return ot(e).reactProfiles({scope:a,scanLimit:c}).filter(d=>d.kind==="component").filter(d=>!l||d.file.includes(l)||d.name.includes(l)).map(d=>Z$(d,{minComponentLines:n,minFileLines:r,minJsxTokens:i,minBehaviorTokens:o})).filter(d=>d!==null).sort((d,m)=>m.componentLines-d.componentLines||m.fileLines-d.fileLines||d.file.localeCompare(m.file)).slice(0,s)}function Z$(e,t){let n=Math.max(80,Math.floor(t.minComponentLines/2)),r=Ha(e,e1({minComponentLines:t.minComponentLines,minFileLines:t.minFileLines,minJsxTokens:t.minJsxTokens,minBehaviorTokens:t.minBehaviorTokens,substantialComponentLines:n}),"component"),{reasons:i}=r;if(i.length===0)return null;let o=r.dominantPressure,s=r.pressureKinds,a=t1(e),c=n1(o,s,a);return{file:e.file,component:e.name,componentLines:e.loc,fileLines:e.fileLines,jsxTokens:e.jsxTokens.size,behaviorTokens:e.behaviorTokens.size,dominantPressure:o,pressureKinds:s,contextKind:a,recommendationKind:c,recommendation:r1(c,a),reasons:i,loc:e.loc}}function e1(e){return[{axis:"component",value:t=>t.loc,qualifies:(t,n)=>n>=e.minComponentLines,reason:(t,n)=>`${n} component line(s)`},{axis:"file",value:t=>t.fileLines,qualifies:(t,n)=>n>=e.minFileLines&&t.loc>=e.substantialComponentLines,reason:(t,n)=>`${n} file line(s)`},{axis:"jsx-structure",value:t=>t.jsxTokens.size,weightedValue:(t,n)=>n*3,qualifies:(t,n)=>n>=e.minJsxTokens,reason:(t,n)=>`${n} JSX structure token(s)`},{axis:"hook-behavior",value:t=>t.behaviorTokens.size,weightedValue:(t,n)=>n*4,qualifies:(t,n)=>n>=e.minBehaviorTokens,reason:(t,n)=>`${n} behavior token(s)`}]}function t1(e){let t=e.file.split(/[\\/]+/).filter(Boolean),n=t.slice(0,-1).map(m=>m.toLowerCase()),r=(t.at(-1)??e.name).replace(/\.[^.]+$/,""),o=n.findIndex(m=>o1.has(m))>=0,s=n.some(m=>i1.has(m));if(UC(r)||UC(e.name))return"component";let c=s1.has(r.toLowerCase()),l=/(?:Page|Route|Screen)$/.test(e.name),u=o&&/View$/.test(e.name),d=!s&&r.replace(/[^A-Za-z0-9]+/g,"").toLowerCase()===e.name.replace(/[^A-Za-z0-9]+/g,"").toLowerCase()&&/(?:Page|Route|Screen|View)$/.test(r);return c||l||u||d?"route-page":"component"}function UC(e){let t=e.split(/[^A-Za-z0-9]+/).filter(Boolean).map(n=>n.toLowerCase());return t.at(-1)&&WC.has(t.at(-1))?!0:[...WC].some(n=>e.endsWith(a1(n)))}function n1(e,t,n){return e==="hook-behavior"?"behavior-extraction":n==="route-page"?"route-page-decomposition":t.includes("hook-behavior")?"behavior-extraction":t.includes("jsx-structure")?"jsx-decomposition":t.includes("file")?"file-decomposition":e==="jsx-structure"?"jsx-decomposition":e==="file"&&!t.includes("component")?"file-decomposition":"component-decomposition"}function r1(e,t){switch(e){case"behavior-extraction":return"Extract independent state, effects, requests, or handlers into hooks, controllers, or feature modules.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"jsx-decomposition":return t==="route-page"?"Split page JSX into named layout sections before extracting behavior.":"Split repeated JSX sections into named presentational components.";case"file-decomposition":return"Review file-level decomposition; split colocated panels or helpers before changing behavior.";case"component-decomposition":return"Review component boundaries around props, state ownership, and independently changing UI sections."}}var i1=new Set(["component","components","panel","panels","partial","partials"]),WC=new Set(["banner","button","card","dialog","drawer","filter","form","grid","header","item","list","menu","modal","nav","panel","picker","rail","row","section","selector","shell","sidebar","table","toolbar"]),o1=new Set(["landing","page","pages","route","routes","screen","screens","view","views"]),s1=new Set(["page","route","screen"]);function a1(e){return e.charAt(0).toUpperCase()+e.slice(1)}function yo(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=c1(e,{scope:o,minTokens:r,scanLimit:s}),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"vue-component-duplicates"},compare:(d,m)=>u1(d,m,n),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.fileB.localeCompare(m.fileB)})}function c1(e,t){return ot(e).vueProfiles({scope:t.scope,minTemplateTokens:t.minTokens,scanLimit:t.scanLimit}).map(n=>({file:n.file,tokens:n.templateTokens,loc:l1(n)}))}function l1(e){return e.totalLines}function u1(e,t,n){let r=pt(e.tokens,t.tokens);if(r.size<6||!d1(r))return null;let i=Fn(e.tokens,t.tokens);if(i<n)return null;let o=q(r,"component:"),s=q(r,"prop:"),a=q(r,"event:"),c=q(r,"directive:"),l=q(r,"slot:"),u=q(r,"id:"),d=m1({sharedComponents:o,sharedProps:s,sharedEvents:a,sharedDirectives:c,sharedSlots:l,sharedIdentifiers:u});return{fileA:e.file,fileB:t.file,similarity:i,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(r),sharedComponents:o,sharedProps:s,sharedEvents:a,sharedDirectives:c,sharedSlots:l,sharedIdentifiers:u,evidenceClass:d.evidenceClass,actionTier:d.actionTier,evidenceClassReasons:d.reasons,recommendation:d.recommendation,uniqueToA:Le(Pe(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(Pe(t.tokens,e.tokens)).slice(0,25),locA:e.loc,locB:t.loc}}function d1(e){let t=0,n=0;for(let r of e)r.startsWith("component:")&&(t+=1),(r.startsWith("prop:")||r.startsWith("event:")||r.startsWith("directive:")||r.startsWith("slot:"))&&(n+=1);return Ln([{name:"component",count:t},{name:"behavior",count:n}],[{min:{component:1},reason:"shared custom component"},{min:{behavior:3},reason:"shared Vue template structure"}]).pass}function m1(e){return _n({genericWords:p1,primitiveGroups:[{values:e.sharedProps,reasonPrefix:"shared props",bucket:"generic"},{values:e.sharedEvents,reasonPrefix:"shared events",bucket:"generic"},{values:e.sharedDirectives,reasonPrefix:"shared directives",bucket:"generic"},{values:e.sharedSlots,reasonPrefix:"shared slots",bucket:"generic"}],nameGroups:[{names:e.sharedComponents,label:"shared component",fallbackBucket:"generic"},{names:e.sharedIdentifiers,label:"shared identifier",fallbackBucket:"generic"}],recommendation:f1})}function f1(e){switch(e){case"domain-behavior":case"mixed":return"Review for a shared component or feature-specific Vue primitive around the named domain structure.";case"shared-abstraction":return"Review the existing shared component usage first; extract only if duplicated structure remains outside it.";case"generic-workflow-scaffolding":return"Generic structural overlap \u2014 verify intent before consolidating."}}var p1=new Set(["actions","app","button","card","content","container","dialog","field","form","header","input","item","label","layout","list","modal","page","panel","row","section","shell","table","text","toolbar","ui","value","view","wrapper"]);function bo(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=ot(e).vueProfiles({scope:o,minBehaviorTokens:Math.max(3,r),scanLimit:s}).map(d=>({file:d.file,tokens:d.behaviorTokens,profile:d})),u=At(l,d=>d.tokens);return Mt({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"vue-composable-candidates"},compare:(d,m)=>g1(d,m,n,r),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.fileB.localeCompare(m.fileB)})}function g1(e,t,n,r){let i=pt(e.tokens,t.tokens);if(i.size<r||!b1(i))return null;let o=$a(e.tokens,t.tokens);if(o<n)return null;let s=q(i,"composable:"),a=q(i,"store:"),c=q(i,"reactivity:"),l=q(i,"lifecycle:"),u=q(i,"request:"),d=q(i,"function:"),m=q(i,"function-verb:"),f=q(i,"template-binding:"),p=q(i,"template-event:"),g=h1({sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f,sharedTemplateEvents:p});return{fileA:e.file,fileB:t.file,similarity:o,tokenCountA:e.tokens.size,tokenCountB:t.tokens.size,sharedTokens:Le(i),sharedComposables:s,sharedStores:a,sharedReactivity:c,sharedLifecycle:l,sharedRequests:u,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f,sharedTemplateEvents:p,evidenceClass:g.evidenceClass,actionTier:g.actionTier,evidenceClassReasons:g.reasons,recommendation:g.recommendation,uniqueToA:Le(Pe(e.tokens,t.tokens)).slice(0,25),uniqueToB:Le(Pe(t.tokens,e.tokens)).slice(0,25),reason:S1({sharedComposables:s,sharedStores:a,sharedRequests:u,sharedLifecycle:l,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f}),locA:e.profile.totalLines,locB:t.profile.totalLines}}function h1(e){return _n({genericWords:C1,primitiveGroups:[{values:e.sharedReactivity,reasonPrefix:"shared reactivity primitive",bucket:"generic"},{values:e.sharedLifecycle,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedComposables,label:"shared composable",fallbackBucket:"shared-abstraction"},{names:e.sharedStores,label:"shared store",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedFunctions,label:"shared function",fallbackBucket:"generic"},{names:e.sharedFunctionVerbs,label:"shared action verb",fallbackBucket:"generic"},{names:e.sharedBindings,label:"shared binding",fallbackBucket:"generic"},{names:e.sharedTemplateEvents,label:"shared template event",fallbackBucket:"generic"}],recommendation:y1})}function y1(e){switch(e){case"domain-behavior":return"Review for a shared composable, store, or feature module around the named domain behavior.";case"mixed":return"Separate generic Vue mechanics from domain-specific behavior before extracting a composable.";case"shared-abstraction":return"Review the existing composable/store usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct composable-extraction evidence."}}function b1(e){let t=0,n=0,r=0,i=0,o=0,s=0,a=0;for(let u of e)u.startsWith("composable:")?t+=1:u.startsWith("store:")?n+=1:u.startsWith("request:")?r+=1:u.startsWith("lifecycle:")?i+=1:u.startsWith("function:")?o+=1:u.startsWith("reactivity:")?s+=1:(u.startsWith("function-verb:")||u.startsWith("template-binding:")||u.startsWith("template-event:"))&&(a+=1);let c=t+n,l=c+r+i+o+a;return Ln([{name:"requests",count:r},{name:"lifecycle",count:i},{name:"functions",count:o},{name:"reusableHooks",count:c},{name:"reactivity",count:s},{name:"namedBehavior",count:l}],[{min:{requests:1,namedBehavior:4},reason:"shared request workflow"},{min:{lifecycle:1,functions:2,namedBehavior:4},reason:"shared lifecycle workflow"},{min:{reusableHooks:2,requests:1,namedBehavior:5},reason:"shared reusable Vue hooks and requests"},{min:{reusableHooks:2,functions:2,namedBehavior:5},reason:"shared reusable Vue hooks and functions"},{min:{functions:2,reactivity:1,namedBehavior:4},reason:"shared reactive functions"}]).pass}function S1(e){let t=[];return e.sharedComposables.length&&t.push(`shared composables: ${e.sharedComposables.join(", ")}`),e.sharedStores.length&&t.push(`shared stores: ${e.sharedStores.join(", ")}`),e.sharedRequests.length&&t.push(`shared request helpers: ${e.sharedRequests.join(", ")}`),e.sharedLifecycle.length&&t.push(`shared lifecycle: ${e.sharedLifecycle.join(", ")}`),e.sharedFunctions.length&&t.push(`shared functions: ${e.sharedFunctions.slice(0,6).join(", ")}`),e.sharedFunctionVerbs.length&&t.push(`shared action verbs: ${e.sharedFunctionVerbs.slice(0,6).join(", ")}`),e.sharedBindings.length&&t.push(`shared template bindings: ${e.sharedBindings.slice(0,6).join(", ")}`),t.join("; ")||"shared Vue behavior profile"}var C1=new Set(["add","apply","cancel","change","clear","close","composable","create","data","delete","draft","edit","error","fetch","filter","form","item","items","load","loading","name","open","reactive","ref","refresh","remove","request","reset","resource","row","rows","save","saving","search","select","selected","store","submit","toggle","update","use","value","watch"]);function _d(e,t={}){let{minTotalLines:n=800,minTemplateLines:r=300,minScriptLines:i=300,minStyleLines:o=500,limit:s=20,scope:a,scanLimit:c,filePattern:l}=t;return ot(e).vueProfiles({scope:a,scanLimit:c}).filter(d=>!l||d.file.includes(l)).map(d=>x1(d,{minTotalLines:n,minTemplateLines:r,minScriptLines:i,minStyleLines:o})).filter(d=>d!==null).sort((d,m)=>m.totalLines-d.totalLines||d.file.localeCompare(m.file)).slice(0,s)}function x1(e,t){let n=Ha(e,v1(t),"total"),{reasons:r}=n;if(r.length===0)return null;let i=n.dominantPressure,o=n.pressureKinds.includes("total")?[...new Set([...n.pressureKinds,i])]:n.pressureKinds,s=R1(e.file),a=I1(i,s),c=e.totalLines+e.delegatedComposableLines;return{file:e.file,totalLines:c,sfcLines:e.sfcLines,templateLines:e.templateLines,scriptLines:e.scriptLines,styleLines:e.styleLines,externalScriptLines:e.externalScriptLines,externalScriptPaths:e.externalScriptPaths,customBlockLines:e.customBlockLines,delegatedComposableLines:e.delegatedComposableLines,delegatedComposablePaths:e.delegatedComposablePaths,dominantPressure:i,pressureKinds:o,contextKind:s,recommendationKind:a,recommendation:w1(a,s),reasons:r,loc:c}}function v1(e){return[{axis:"total",value:t=>t.totalLines+t.delegatedComposableLines,qualifies:(t,n)=>n>=e.minTotalLines,reason:(t,n)=>t.delegatedComposableLines>0?`${n} total line(s) (${t.totalLines} component + ${t.delegatedComposableLines} delegated composable line(s) across ${t.delegatedComposablePaths.length} file(s))`:`${n} total component line(s)`,dominantEligible:!1},{axis:"template",value:t=>t.templateLines,qualifies:(t,n)=>n>=e.minTemplateLines,reason:(t,n)=>`${n} template line(s)`},{axis:"script",value:t=>t.scriptLines-t.externalScriptLines,qualifies:t=>t.scriptLines>=e.minScriptLines,reason:t=>`${t.scriptLines} script line(s)`},{axis:"style",value:t=>t.styleLines,qualifies:(t,n)=>n>=e.minStyleLines,reason:(t,n)=>`${n} style line(s)`},{axis:"external-script",value:t=>t.externalScriptLines,qualifies:(t,n)=>n>=e.minScriptLines},{axis:"custom-block",value:t=>t.customBlockLines,qualifies:()=>!1}]}function R1(e){return e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).some(r=>E1.has(r))||/(?:view|page|route)\.vue$/i.test(e)||/(?:^|\/)(views|pages|routes)\//i.test(e)?"route-page":"component"}function I1(e,t){return e==="style"?"style-decomposition":e==="template"?"template-decomposition":e==="external-script"?"external-script-boundary":e==="custom-block"?"custom-block-review":t==="route-page"?"route-page-decomposition":e==="script"?"script-behavior-extraction":"total-size-review"}function w1(e,t){switch(e){case"template-decomposition":return t==="route-page"?"Split route template sections into named panels before extracting script behavior.":"Split repeated template sections into named presentational components.";case"script-behavior-extraction":return"Extract independent script behavior into composables, controllers, or feature modules.";case"style-decomposition":return"Review UI/style decomposition; move repeated styling to component or style primitives, not composables.";case"external-script-boundary":return"Review the external script boundary and split controller/composable modules by workflow.";case"custom-block-review":return"Review custom block ownership before splitting template or script code.";case"route-page-decomposition":return"Split route/page orchestration from reusable panels and feature controllers.";case"total-size-review":return"Review the largest block first, then split by the dominant reason to change."}}var E1=new Set(["landing","page","pages","route","routes","view","views"]);function D1(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=ie(e,i),c=A1(a,o,s);if(c.length===0)return[];let l=k1(c);return l.length<2?[]:N1(F1(l,n,r),r)}function k1(e){let t=P1(e),n=[];for(let r of e){let i=r.filter(o=>!t.has(o));i.length>=2&&n.push({original:r,filtered:i})}return n}function P1(e){let{nodeFreq:t,tailFreq:n}=T1(e),r=e.length*.9,i=e.length*.8,o=new Set;for(let[a,c]of t)c>r&&o.add(a);for(let[a,c]of n)c>i&&o.add(a);let s=["index.ts","index.js","cli.ts","main.ts","health.ts","health.js"];for(let a of t.keys()){let c=a.split("/").pop()??"";s.includes(c)&&o.add(a)}return o}function T1(e){let t=new Map,n=new Map;for(let r of e){let i=new Set;for(let o of r)i.has(o)||(t.set(o,(t.get(o)??0)+1),i.add(o));for(let o=Math.max(0,r.length-2);o<r.length;o++)n.set(r[o],(n.get(r[o])??0)+1)}return{nodeFreq:t,tailFreq:n}}function F1(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=_1(e[i],e[o],t);s&&r.push(s)}if(r.length>n*10)break}return r.sort((i,o)=>Math.abs(o.similarity-i.similarity)>.01?o.similarity-i.similarity:i.divergencePoints.length-o.divergencePoints.length),r}function _1(e,t,n){if(!L1(e.filtered,t.filtered))return null;let{distance:r,ops:i}=M1(e.filtered,t.filtered),o=Math.max(e.filtered.length,t.filtered.length);if(o===0)return null;let s=1-r/o;if(s<n||r===0)return null;let a=i.filter(l=>l.type==="substitute").map(l=>({index:l.indexA,nodeA:e.filtered[l.indexA],nodeB:t.filtered[l.indexB]}));return a.length===0||i.filter(l=>l.type==="match").length<2?null:{chainA:e.original,chainB:t.original,similarity:s,editDistance:r,divergencePoints:a,commonPrefix:O1(e.original,t.original),commonSuffix:j1(e.original,t.original)}}function L1(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function N1(e,t){let n=[];for(let r of e)if(n.some(o=>GC(r.chainA,o.chainA)&&GC(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function A1(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;zC(e,o,[o],new Set([o]),t,n,r,500)}return r}function zC(e,t,n,r,i,o,s,a){if(s.length>=a)return;if(n.length>=o){n.length>=i&&s.push([...n]);return}let c=e.get(t);if(!c||c.size===0){n.length>=i&&s.push([...n]);return}let l=!1;for(let u of c)if(!r.has(u)&&(r.add(u),n.push(u),zC(e,u,n,r,i,o,s,a),n.pop(),r.delete(u),l=!0,s.length>=a))return;!l&&n.length>=i&&s.push([...n])}function M1(e,t){let n=e.length,r=t.length,i=Array.from({length:n+1},()=>Array(r+1).fill(0));for(let c=0;c<=n;c++)i[c][0]=c;for(let c=0;c<=r;c++)i[0][c]=c;for(let c=1;c<=n;c++)for(let l=1;l<=r;l++)e[c-1]===t[l-1]?i[c][l]=i[c-1][l-1]:i[c][l]=1+Math.min(i[c-1][l],i[c][l-1],i[c-1][l-1]);let o=[],s=n,a=r;for(;s>0||a>0;)s>0&&a>0&&e[s-1]===t[a-1]?(o.unshift({type:"match",indexA:s-1,indexB:a-1}),s--,a--):s>0&&a>0&&i[s][a]===i[s-1][a-1]+1?(o.unshift({type:"substitute",indexA:s-1,indexB:a-1}),s--,a--):a>0&&i[s][a]===i[s][a-1]+1?(o.unshift({type:"insert",indexA:s,indexB:a-1}),a--):(o.unshift({type:"delete",indexA:s-1,indexB:a}),s--);return{distance:i[n][r],ops:o}}function O1(e,t){let n=[];for(let r=0;r<Math.min(e.length,t.length)&&e[r]===t[r];r++)n.push(e[r]);return n}function j1(e,t){let n=[],r=e.length-1,i=t.length-1;for(;r>=0&&i>=0&&e[r]===t[i];)n.unshift(e[r]),r--,i--;return n}function GC(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),r=e.join("\u2192");return n.includes(r)}function gt(e){let t=B1(e.profile?.name),n=()=>{let r=e.candidates(),i=e.filterCandidate?r.filter(e.filterCandidate):r,o=e.orderCandidates?[...i].sort(e.orderCandidates):i,s=se(o,e.scanLimit);t={pipeline:e.profile?.name,loadedCandidates:r.length,filteredCandidates:i.length,scannedCandidates:s.length,evaluatedCandidates:0,matchedResults:0,emittedResults:0,scanLimitApplied:s.length<i.length,resultLimitApplied:!1};let a=e.prepare?.(s)??void 0,c=[];for(let u of s){t.evaluatedCandidates+=1;let d=e.evaluate(u,a);d&&c.push(d)}t.matchedResults=c.length,e.orderResults&&c.sort(e.orderResults);let l=typeof e.limit=="number"?c.slice(0,e.limit):c;return t.emittedResults=l.length,t.resultLimitApplied=l.length<c.length,e.onProfile?.({...t}),l};return e.profile?E(`candidate-pipeline:${e.profile.name}`,n,()=>({...$1(e.profile?.metadata),...t})):n()}function B1(e){return{pipeline:e,loadedCandidates:0,filteredCandidates:0,scannedCandidates:0,evaluatedCandidates:0,matchedResults:0,emittedResults:0,scanLimitApplied:!1,resultLimitApplied:!1}}function $1(e){return typeof e=="function"?e():e??{}}function So(e,t={}){let{scope:n,minLoc:r=10,minCallees:i=6,limit:o=20,scanLimit:s}=t,a=new F(e);return gt({candidates:()=>a.productionCallableDefinitions({scope:n,minLoc:r,excludeTypesFiles:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:!0}),scanLimit:s,profile:{name:"extract-candidates"},prepare:c=>a.calleeMap(c,{semantic:t.semantic!==!1}),evaluate:(c,l)=>H1(c,l.get(c.symbolId)??[],i),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function H1(e,t,n){let r=new Set(t.map(l=>l.symbol));if(r.size<n)return null;let i=V1(r,t),o=q1(r,i);if(o.length<2)return null;let s=K1(o,i);if(s.length===0)return null;let a=I(e.symbol),c=U1(a,r.size,o.length,s);return{symbol:e.symbol,shortName:a,relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:O(e),totalCallees:r.size,extractionKind:c.extractionKind,actionTier:"signal",evidenceReasons:c.evidenceReasons,recommendation:c.recommendation,clusters:s}}function U1(e,t,n,r){let i=Math.max(...r.map(c=>c.callees.length)),o=Math.max(...r.map(c=>c.isolation)),s=[`${t} distinct callees across ${n} co-occurrence cluster(s)`,`${r.length} extractable cluster(s) passed size and isolation thresholds`,`largest extractable cluster has ${i} callees at ${Math.round(o*100)}% isolation`],a=W1(e,t,n);return a!==null?{extractionKind:"workflow-orchestration",evidenceReasons:[...s,a],recommendation:"Review the isolated helper group as a possible private or feature-local helper, but keep the orchestration sequence together when it preserves the workflow."}:i>=6?{extractionKind:"broad-helper-cluster",evidenceReasons:[...s,"one isolated helper group is broad enough to deserve a named review"],recommendation:"Review whether the broad helper cluster has a stable concept name before extracting it; avoid creating a bag-of-helpers abstraction."}:{extractionKind:"cohesive-helper-cluster",evidenceReasons:s,recommendation:"Review the isolated callee group as a possible same-file or feature-local helper; extract only if the new name preserves the current behavior."}}function W1(e,t,n){if(t>=10)return`callee breadth suggests orchestration: ${t} callees`;if(n>=4)return`multiple disconnected callee groups suggest orchestration: ${n} groups`;let r=G1(e);return z1.has(r)?`caller verb suggests orchestration: ${r}`:null}function G1(e){return e.split(":").pop()?.replace(/\(\)$/,"").replace(/[^A-Za-z0-9_]/g,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\s-]+/).filter(Boolean)[0]?.toLowerCase()??""}var z1=new Set(["apply","build","check","collect","create","diff","execute","find","handle","load","prepare","process","render","resolve","run","select","sync","update","validate","verify","write"]);function V1(e,t){let n=new Map;for(let i of e)n.set(i,new Set);let r=new Map;for(let i of t){let o=r.get(i.chunkId);o||(o=new Set,r.set(i.chunkId,o)),o.add(i.symbol)}for(let i of r.values()){let o=[...i];for(let s=0;s<o.length;s++)for(let a=s+1;a<o.length;a++)n.get(o[s]).add(o[a]),n.get(o[a]).add(o[s])}return n}function q1(e,t){let n=new Set,r=[];for(let i of e){if(n.has(i))continue;let o=new Set,s=[i];for(;s.length>0;){let a=s.pop();if(!n.has(a)){n.add(a),o.add(a);for(let c of t.get(a)??[])n.has(c)||s.push(c)}}r.push(o)}return r}function K1(e,t){return e.filter(n=>n.size>=3).map(n=>J1(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function J1(e,t,n){let r=new Set;for(let a of t)if(a!==e)for(let c of a)r.add(c);let i=0;for(let a of e)for(let c of n.get(a)??[])r.has(c)&&i++;let o=e.size*r.size,s=o>0?1-i/o:1;return{callees:[...e].map(I),isolation:s}}import{posix as Qr}from"path";import{spawnSync as Y1}from"child_process";import{createHash as X1}from"crypto";import{existsSync as Q1}from"fs";import{dirname as VC,join as Z1}from"path";import{fileURLToPath as eH}from"url";var JC=j("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]}),qC=oe({kind:"consumer-file-usage",invalidation:J("consumer-file-usage"),serialize:uH,deserialize:dH});function sn(e,t){return{forDefinitions(n,r){return tH(e,t,n,r)}}}function an(e){let t=new Map;for(let[n,r]of e)t.set(n,new Set(r.files.map(i=>i.file)));return t}function Wa(e,t,n){return XC(e,t,n).partition}function tH(e,t,n,r){let i=YC(n.length),o=U()?Te(e):null,s=o?nH(n,r,o):void 0,a=s?{workIdentity:s,workOutcome:"computed"}:{};return E("consumer-evidence.product",()=>{let c=E("consumer-evidence.provenance",()=>rH(e,t,n,r),()=>({...a,definitions:n.length,semantic:r.semantic,sourceFallback:r.sourceFallback!==!1})),l=new Map;i={...i,...c.counters};let u=iH(n,c.sources);return E("consumer-evidence.classify",()=>{let d=oH(e,n,c.sources,u);for(let m of n){let f=d.get(m.symbolId)??aH();i.realFiles+=f.partition.realConsumers.length,i.reexportOnlyFiles+=f.partition.barrelConsumers,i.importOnlyFiles+=f.partition.importOnlyConsumers,l.set(m.symbolId,{definition:m,files:f.files,...f.partition})}},()=>({...a,...u,realFiles:i.realFiles,reexportOnlyFiles:i.reexportOnlyFiles,importOnlyFiles:i.importOnlyFiles})),l},()=>({...a,...i}))}function nH(e,t,n){let r=X1("sha256").update("consumer-evidence-v1\0").update(n).update("\0").update(t.semantic?"semantic\0":"indexed\0").update(t.sourceFallback===!1?"no-source-fallback":"source-fallback");for(let i of e.map(o=>o.symbol).sort())r.update("\0").update(i);return r.digest("hex").slice(0,24)}function YC(e){return{definitions:e,indexedFiles:0,semanticFiles:0,fallbackFiles:0,totalFiles:0,realFiles:0,reexportOnlyFiles:0,importOnlyFiles:0}}function rH(e,t,n,r){let i=YC(n.length),o=new Map;return Ld(o,i,"indexed",t.crossFileCallerMap(n,{semantic:!1})),r.semantic&&Ld(o,i,"semantic",En(e,n)),r.sourceFallback!==!1&&Ld(o,i,"source-fallback",t.sourceFallbackCallerFiles(n)),i.totalFiles=[...o.values()].reduce((s,a)=>s+a.size,0),{sources:o,counters:i}}function iH(e,t){return{definitions:e.length,consumerFiles:[...t.values()].reduce((n,r)=>n+r.size,0),nativeAttempted:!1,nativeUsed:!1,nativeReason:"not-attempted"}}function Ld(e,t,n,r){let i=0;for(let[o,s]of r){let a=e.get(o);a||(a=new Map,e.set(o,a));for(let c of s){i++;let l=a.get(c)??new Set;l.add(n),a.set(c,l)}}n==="indexed"?t.indexedFiles+=i:n==="semantic"?t.semanticFiles+=i:t.fallbackFiles+=i}function oH(e,t,n,r){let i=bH(e,t,n,r);return i||sH(e,t,n)}function sH(e,t,n){let r=new Map;for(let i of t){let o=n.get(i.symbolId)??new Map;r.set(i.symbolId,XC(e,i,[...o.keys()],o))}return r}function XC(e,t,n,r=new Map){let i=[],o=0,s=0,a=T(t.symbol),c=[];for(let l of n){let u;mH(e,l,t.relativePath,a)?(o++,u="reexport-only"):Nd(e,l,a)?(s++,u="import-only"):(i.push(l),u="real"),c.push({file:l,sources:[...r.get(l)??[]],classification:u})}return{partition:{realConsumers:i,barrelConsumers:o,importOnlyConsumers:s},files:c}}function aH(){return{partition:{realConsumers:[],barrelConsumers:0,importOnlyConsumers:0},files:[]}}function Nd(e,t,n){if(!n)return!1;let r=M(t);if(!r)return!1;let i=JC.get(e,t,()=>QC(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function QC(e,t,n){let r=ut(e).forFile(t,{text:!0,ast:!0}),i=r.text;if(!i)return lH();let o=ce(e,t,i),s=qC.read(e,t,o);if(s)return s;let a=cH(r.ast,n);return qC.write(e,t,o,a),a}function cH(e,t){let n=new Set,r=new Set;if(!e)return{importedLeaves:n,usedLeaves:r};let i=t==="rust"?new Set(["use_declaration"]):t==="python"?new Set(["import_statement","import_from_statement"]):new Set(["import_statement"]),o=(s,a)=>{let c=a||i.has(s.type);(s.type==="identifier"||s.type==="type_identifier"||s.type==="property_identifier"||s.type==="field_identifier")&&(c?n.add(s.text):r.add(s.text));for(let l of s.children)o(l,c)};return o(e.rootNode,!1),{importedLeaves:n,usedLeaves:r}}function lH(){return{importedLeaves:new Set,usedLeaves:new Set}}function uH(e){return JSON.stringify({importedLeaves:[...e.importedLeaves],usedLeaves:[...e.usedLeaves]})}function dH(e){try{let t=JSON.parse(e);return!Array.isArray(t.importedLeaves)||!Array.isArray(t.usedLeaves)?null:{importedLeaves:new Set(t.importedLeaves.filter(n=>typeof n=="string")),usedLeaves:new Set(t.usedLeaves.filter(n=>typeof n=="string"))}}catch{return null}}function mH(e,t,n,r){if(!r)return!1;let i=ut(e).forFile(t,{lines:!0,reexports:!0}),o=i.lines??[];if(o.length===0)return!1;let s=i.reexports??[];return ZC(o,s,r)}function ZC(e,t,n){if(e.length===0||t.length===0)return!1;let r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\b${r}\\b`),o=0;for(let s=0;s<e.length;s++){if(!i.test(e[s]??""))continue;if(o++,!t.find(c=>c.startLine<=s&&s<=c.endLine))return!1}return o>0}var fH="SCIP_QUERY_NATIVE_CONSUMER_CLASSIFY",pH="SCIP_QUERY_NATIVE_KERNELS_BIN",gH="SCIP_QUERY_NATIVE_CONSUMER_CLASSIFY_MIN_FILES",KC=1e3,hH=5e3,yH=64*1024*1024,Ua;function bH(e,t,n,r){let i=process.env[fH]?.toLowerCase();if(i!=="1"&&i!=="true")return r.nativeReason=i==="0"||i==="false"?"disabled":"opt-in-required",null;if(r.consumerFiles<wH())return r.nativeReason="below-threshold",null;let o=EH();if(!o)return r.nativeReason="binary-missing",null;r.nativeAttempted=!0;let s=SH(e,t,n),a=Y1(o,["consumer-classify"],{input:JSON.stringify(s),encoding:"utf8",timeout:hH,maxBuffer:yH});if(a.status!==0||a.error)return r.nativeReason=a.error?`spawn-error:${a.error.message}`:`exit-${a.status??"null"}`,null;try{let c=JSON.parse(a.stdout),l=xH(c,t);return l?(r.nativeUsed=!0,r.nativeReason="used",l):(r.nativeReason="invalid-response",null)}catch{return r.nativeReason="invalid-json",null}}function SH(e,t,n){let r=new Map,i=[];for(let a of t){let c=T(a.symbol),u=[...(n.get(a.symbolId)??new Map).entries()].map(([d,m])=>{let f=r.get(d)??new Set;return c&&f.add(c),r.set(d,f),{file:d,sources:[...m]}});i.push({symbol_id:a.symbolId,leaf:c,consumer_files:u})}let o={},s={};for(let[a,c]of r){let l=M(a);if(l){let d=JC.get(e,a,()=>QC(e,a,l));o[a]={imported_leaves:[...d.importedLeaves],used_leaves:[...d.usedLeaves]}}let u=CH(e,a,c);u.length>0&&(s[a]=u)}return{definitions:i,file_usages:o,reexport_only_leaves:s}}function CH(e,t,n){if(n.size===0)return[];let r=ut(e).forFile(t,{lines:!0,reexports:!0}),i=r.lines??[],o=r.reexports??[];return i.length===0||o.length===0?[]:[...n].filter(s=>ZC(i,o,s))}function xH(e,t){if(!Array.isArray(e.entries)||e.entries.length!==t.length)return null;let n=new Set(t.map(i=>i.symbolId)),r=new Map;for(let i of e.entries){let o=vH(i);if(!o||!n.has(o.symbol_id))return null;r.set(o.symbol_id,{partition:{realConsumers:o.real_consumers,barrelConsumers:o.barrel_consumers,importOnlyConsumers:o.import_only_consumers},files:o.files})}for(let i of n)if(!r.has(i))return null;return r}function vH(e){if(!e||typeof e!="object")return null;let t=e;if(typeof t.symbol_id!="number"||!Array.isArray(t.real_consumers)||typeof t.barrel_consumers!="number"||typeof t.import_only_consumers!="number"||!Array.isArray(t.files)||!t.real_consumers.every(r=>typeof r=="string"))return null;let n=[];for(let r of t.files){if(!r||typeof r!="object")return null;let i=r;if(typeof i.file!="string"||!Array.isArray(i.sources)||!i.sources.every(RH)||!IH(i.classification))return null;n.push({file:i.file,sources:i.sources,classification:i.classification})}return{symbol_id:t.symbol_id,real_consumers:t.real_consumers,barrel_consumers:t.barrel_consumers,import_only_consumers:t.import_only_consumers,files:n}}function RH(e){return e==="indexed"||e==="semantic"||e==="source-fallback"}function IH(e){return e==="real"||e==="reexport-only"||e==="import-only"}function wH(){let e=process.env[gH];if(!e)return KC;let t=Number(e);return Number.isFinite(t)&&t>=0?t:KC}function EH(){if(Ua!==void 0)return Ua;let e=process.env[pH],t=process.platform==="win32"?"scip-query-kernels.exe":"scip-query-kernels";return Ua=[...e?[e]:[],...DH().map(r=>Z1(r,"target","release",t))].find(r=>Q1(r))??null,Ua}function DH(){let e=new Set,t=VC(eH(import.meta.url));for(let n=0;n<5;n++)e.add(t),t=VC(t);return[...e]}var kH=20,PH=1,TH=new Map([["app","app"],["apps","app"],["component","component"],["components","component"],["composable","composable"],["composables","composable"],["contract","contract"],["contracts","contract"],["domain","domain"],["domains","domain"],["feature","feature"],["features","feature"],["hook","hook"],["hooks","hook"],["lib","library"],["module","module"],["modules","module"],["package","package"],["packages","package"],["page","page"],["pages","page"],["route","route"],["routes","route"],["screen","screen"],["screens","screen"],["service","service"],["services","service"],["shared","shared"],["src","source-root"],["store","state"],["stores","state"],["test","test"],["tests","test"],["util","utility"],["utils","utility"],["view","view"],["views","view"]]),FH=new Set(["components","contracts","hooks","lib","services","shared","stores","utils"]),_H=new Set(["access","api","auth","config","db","effect","errors","hooks","lib","middleware","permissions","routes","schemas","servicetasks","services","startup","store","stores","test-utils","repository","repositories","tests","types","ui","utils","workflow","workflows"]);function LH(e,t={}){let n=Od(t.limit,kH),r=Od(t.minConsumers,PH),i=new F(e),o=i.fileDependencyGraph(t.scope),s=ZH(N(e,{includeIgnored:!1})),a=nU(e.config.locality?.architecturalBoundarySegments,t.architecturalBoundarySegments);return(t.target?NH(e,i,t.target):AH(e,t.scope,t.scanLimit)).map(u=>MH(e,i,o,u,t,s,a)).filter(u=>u.consumerFiles.length>=r||t.target).sort(QH).slice(0,n)}function NH(e,t,n){let r=BH(e,n);if(r)return[ix(r)];let i=B(e,n);if(!i)return[];let o=t.definitionsForFile(i.relativePath).find(s=>s.symbolId===i.symbolId);return o?[$H(o)]:[{unit:{kind:"symbol",file:i.relativePath,shortName:I(i.symbol),symbol:i.symbol,startLine:i.startLine,endLine:i.endLine}}]}function AH(e,t,n){let r=N(e,{scope:t,includeIgnored:!1}),i=Od(n,r.length);return r.slice(0,i).map(o=>ix(o))}function MH(e,t,n,r,i,o,s){let a=r.definition?OH(e,t,r.definition,i.semantic):jH(n,r.unit.file),c=r.definition?a.length>0?"exact":"none":a.length>0?"file-level":"none",l=r.unit.file,u=Rt(Qr.dirname(l)),d=UH(a),m=HH(u),f=Bd([...ex(u),...d?ex(d):[]]),p=WH(r.unit,u,d,a),g=GH(p,r.unit,u,d,a,o,s),y=JH(r.unit,c,d,a,u,g.whyNoSuggestedHome),h=YH(r.unit,u,d,a,g.suggestedHome,g.whyNoSuggestedHome);return{actionTier:"signal",sourceUnit:r.unit,candidatePath:l,currentDirectory:u,directoryAncestry:m,consumerFiles:a,consumerCoverage:c,nearestCommonOwner:d,boundaryMarkers:f,recommendedTier:p,suggestedHome:g.suggestedHome,destinationConfidence:g.confidence,whyNoSuggestedHome:g.whyNoSuggestedHome,counterevidence:y,reasons:h,recommendation:XH(p,g.suggestedHome,c)}}function OH(e,t,n,r){let i=an(sn(e,t).forDefinitions([n],{semantic:r!==!1,sourceFallback:!0}));return lx(i.get(n.symbolId)??[])}function jH(e,t){let n=[];for(let[r,i]of e.entries())r!==t&&i.has(t)&&n.push(r);return lx(n)}function BH(e,t){let n=yn(t),r=N(e,{includeIgnored:!1}),i=r.find(s=>s===n);if(i)return i;let o=r.find(s=>s.endsWith(`/${n}`));return o||(r.find(s=>s.includes(n))??null)}function $H(e){return{definition:e,unit:{kind:"symbol",file:e.relativePath,shortName:I(e.symbol),symbol:e.symbol,startLine:e.startLine,endLine:e.endLine}}}function ix(e){return{unit:{kind:"file",file:e,shortName:Qr.basename(e)}}}function HH(e){if(e===".")return[{path:".",depth:0,markers:[]}];let t=[],n=e.split("/").filter(Boolean);for(let r=0;r<n.length;r+=1){let i=n.slice(0,r+1).join("/");t.push({path:i,depth:r,markers:jd(i)})}return t}function ex(e){return e==="."?[]:ox(e).map(({marker:t,prefix:n})=>`${t}: ${n}`)}function jd(e){return Bd(ox(e).map(({marker:t})=>t))}function ox(e){let t=e.split("/").filter(Boolean),n=[];for(let r=0;r<t.length;r+=1){let i=TH.get(t[r]);i&&n.push({marker:i,prefix:t.slice(0,r+1).join("/")})}return n}function UH(e){if(e.length===0)return null;let t=e.map(r=>Rt(Qr.dirname(r))),n=t[0].split("/").filter(Boolean);for(let r of t.slice(1)){let i=r.split("/").filter(Boolean),o=[],s=Math.min(n.length,i.length);for(let a=0;a<s&&n[a]===i[a];a+=1)o.push(n[a]);n=o}return n.length===0?".":n.join("/")}function WH(e,t,n,r){return n?e.kind==="symbol"&&r.length===1?r[0]===e.file?"same-file":"sibling-folder":n==="."||n==="src"?"repository-level-review":nx(n,"package")?"package-level-shared":nx(n,"app")?"app-level-shared":rx(n,["feature","domain","module"])||rx(t,["feature","domain","module"])?"feature-local-shared":"sibling-folder":"no-exact-consumers"}function GH(e,t,n,r,i,o,s){let a=zH(e,r);if(a)return Nn(a);let c=eU(t.file),l=VH(e,n,c,i,s);if(l)return l;let u=r;if(Rt(n)===Rt(u))return Nn(`${n} is already the nearest common owner for its consumers.`);let d=qH(u,n,c,s);return d||KH(u,n,c,o,s)}function zH(e,t){return t?e==="no-exact-consumers"||e==="repository-level-review"?"The inferred owner is too broad or unsupported for an exact destination.":null:"No consumer owner could be inferred from the current index."}function VH(e,t,n,r,i){if(e==="same-file"){let o=r[0]??null;return o?Ad(o):Nn("No same-file consumer path was available.")}if(e==="sibling-folder"&&r.length===1){let o=Rt(Qr.dirname(r[0])),s=cx(t,n,o,i);return s?Nn(s):Ad(o)}return null}function qH(e,t,n,r){return iU(e)?sx(e,t,n,r,`Nearest shared owner ${e} is outside source root ${n}.`):null}function KH(e,t,n,r,i){if(e===".")return Nn("The nearest common owner is the repository root.");let o=`${e}/shared`,s=sx(o,t,n,i,`Proposed home ${o} is outside source root ${n}.`);return s.confidence==="withheld"||r.has(o)?s:Nn(`${o} does not exist in the indexed project.`)}function sx(e,t,n,r,i){if(!ax(e,n))return Nn(i);let o=cx(t,n,e,r);return o?Nn(o):Ad(e)}function Ad(e){return{suggestedHome:e,confidence:"exact",whyNoSuggestedHome:null}}function Nn(e){return{suggestedHome:null,confidence:"withheld",whyNoSuggestedHome:e}}function JH(e,t,n,r,i,o){let s=["Report-only signal; review ownership before moving files."];return t==="none"&&s.push("No consumers were found in the current index."),t==="file-level"&&s.push("File-level import evidence can hide which exported unit is actually used."),(n==="."||n==="src")&&s.push("Nearest common owner is broad, so this is not enough evidence for automatic placement."),r.length===1&&s.push("Only one consumer was found; inlining or same-folder placement may be better than shared extraction."),e.kind==="file"&&s.push("File targets describe module locality, not symbol-level usage."),n&&i.startsWith(`${n}/`)&&s.push("Candidate already lives under the nearest common owner."),o&&s.push(`No exact suggested home: ${o}`),s}function YH(e,t,n,r,i,o){let s=[];return s.push(`${e.shortName} currently lives in ${t}.`),n?s.push(`${r.length} consumer file(s) share ${n} as their nearest common owner.`):s.push("No consumer owner could be inferred from the current index."),i?s.push(`Suggested home is ${i}.`):o&&s.push(`No exact suggested home: ${o}`),s}function XH(e,t,n){return e==="no-exact-consumers"?"Review references before moving; no consumers were found.":e==="repository-level-review"?"Keep this as a broad locality signal; the inferred owner is too general for automatic relocation.":t?`Review whether ${n==="exact"?"symbol usage":"module import"} supports moving or extracting toward ${t}.`:"Review ownership manually before changing structure."}function QH(e,t){return tx(t)-tx(e)||e.candidatePath.localeCompare(t.candidatePath)}function tx(e){let t=e.consumerFiles.length*10;return e.consumerCoverage==="exact"&&(t+=5),e.suggestedHome&&(t+=3),e.recommendedTier==="repository-level-review"&&(t*=.1),e.recommendedTier==="no-exact-consumers"&&(t*=.05),t}function ZH(e){let t=new Set(["."]);for(let n of e){let r=Rt(Qr.dirname(n));for(;!t.has(r)&&(t.add(r),r!==".");)r=Rt(Qr.dirname(r))}return t}function eU(e){let t=Md(e),n=t.indexOf("src");return n>=0?t.slice(0,n+1).join("/"):t.length<=1?".":t[0]}function ax(e,t){let n=Rt(e),r=Rt(t);return r==="."||n===r||n.startsWith(`${r}/`)}function tU(e,t,n){let r=Md(e),i=Md(t);return(ax(e,t)?r.slice(i.length):r).some(s=>n.has(s.toLowerCase()))}function cx(e,t,n,r){return Rt(e)===Rt(n)||!tU(e,t,r)?null:`${e} is a named architectural boundary; an exact move to ${n} needs human design.`}function nU(...e){let t=new Set(_H);for(let n of e)for(let r of n??[]){let i=rU(r);i&&t.add(i)}return t}function rU(e){let t=e.trim().toLowerCase();return t===""?null:t}function nx(e,t){return jd(e).includes(t)}function rx(e,t){let n=jd(e);return t.some(r=>n.includes(r))}function iU(e){let t=e.split("/").filter(Boolean),n=t[t.length-1];return n?FH.has(n):!1}function Rt(e){let t=yn(e);return t===""?".":t}function Md(e){let t=yn(e);return t==="."?[]:t.split("/").filter(Boolean)}function Od(e,t){return!Number.isFinite(e)||e===void 0||e<1?t:Math.floor(e)}function lx(e){return Bd([...e]).sort((t,n)=>t.localeCompare(n))}function Bd(e){return[...new Set(e)]}function $d(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=B(e,t);if(!o)return[];let s=[],a=new Set([o.symbolId]),c=new Set,l=[o];for(let u=1;u<=r&&l.length!==0;u++){let d=[],m=dd(e,l,{limit:500,semanticEvidence:H});for(let f of l)for(let p of oU(e,f,i,m.get(f.symbolId)??[])){let g=`${p.file}|${p.shortName}`;if(p.symbolId!==null){if(a.has(p.symbolId))continue;a.add(p.symbolId)}else if(c.has(g))continue;c.add(g),s.push({symbol:p.symbol,shortName:p.shortName,file:p.file,depth:u}),p.symbolId!==null&&p.symbolMatch&&d.push(p.symbolMatch)}l=d}return s.sort((u,d)=>u.depth-d.depth||u.file.localeCompare(d.file)),s}function oU(e,t,n,r){let i=r.filter(u=>!e.isIgnored(u.file)).filter(u=>!n||u.file.includes(n)),o=new Set(i.map(u=>u.file)),s=[];for(let u of sU(e,t,n)){if(o.has(u))continue;let d=Y(e,u),m=d.length>0?Dt(d,d[0].startLine):null;s.push({symbol:m?.symbol??u,file:u})}let a=[...i,...s],c=[],l=new Set;for(let u of a){let d=Ei(e,u.symbol);if(!d){let f=`${u.file}|${u.symbol}`;if(l.has(f))continue;l.add(f),c.push({symbolId:null,symbol:u.symbol,shortName:I(u.symbol),file:u.file,symbolMatch:null});continue}if(d.symbolId===t.symbolId||e.isIgnored(d.relativePath)||!aU(d))continue;let m=`${d.symbolId}|${d.relativePath}`;l.has(m)||(l.add(m),c.push({symbolId:d.symbolId,symbol:d.symbol,shortName:I(d.symbol),file:d.relativePath,symbolMatch:d}))}return c}function sU(e,t,n){let r=n?"AND consumer_d.relative_path LIKE ?":"",i=[t.symbolId,t.documentId];return n&&i.push(`%${n}%`),new Set(e.all(`SELECT DISTINCT consumer_d.relative_path
|
|
719
719
|
FROM mentions m
|
|
720
720
|
JOIN chunks c ON m.chunk_id = c.id
|
|
721
721
|
JOIN documents consumer_d ON consumer_d.id = c.document_id
|
|
@@ -723,48 +723,48 @@ Thumbs.db
|
|
|
723
723
|
AND m.role != 1
|
|
724
724
|
AND c.document_id != ?
|
|
725
725
|
${e.pathExclusionsFor("consumer_d")}
|
|
726
|
-
${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function
|
|
726
|
+
${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function aU(e){if(e.symbol.startsWith("scip-clojure ")||M(e.relativePath)==="clojure")return!0;let t=ue(e.symbol);return t==="method"||t==="type"||e.symbol.endsWith("().")}function Hd(e,t,n={}){let r=Oe(e,t);if(!r)return null;let i=cU(e,r);if(!i||e.isIgnored(i.relative_path))return null;let o=[],s=0,a=lU(e,i.relative_path),c=n.semantic===!1?new Map:En(e,a);for(let l of a){let u=uU(e,i,l,c.get(l.symbolId)??new Set);s+=u,o.push({symbol:l.symbol,shortName:I(l.symbol),startLine:l.startLine,endLine:l.endLine,externalConsumers:u,riskLevel:dU(u)})}return{file:i.relative_path,symbols:o,totalExternalConsumers:s}}function cU(e,t){return e.get(`SELECT id, relative_path FROM documents
|
|
727
727
|
WHERE relative_path = ?
|
|
728
728
|
${e.pathExclusionsFor("documents")}
|
|
729
|
-
LIMIT 1`,t)??null}function
|
|
729
|
+
LIMIT 1`,t)??null}function lU(e,t){return new F(e).definitionsForFile(t).sort((n,r)=>n.startLine-r.startLine||n.endLine-r.endLine)}function uU(e,t,n,r){let i=e.all(`SELECT DISTINCT consumer_d.relative_path
|
|
730
730
|
FROM mentions m
|
|
731
731
|
JOIN chunks c ON m.chunk_id = c.id
|
|
732
732
|
JOIN documents consumer_d ON consumer_d.id = c.document_id
|
|
733
733
|
WHERE m.symbol_id = ?
|
|
734
734
|
AND m.role != 1
|
|
735
|
-
AND c.document_id != ?`,n.symbolId,t.id);return new Set([...i.map(o=>o.relative_path),...[...r].filter(o=>o!==t.relative_path)]).size}function
|
|
735
|
+
AND c.document_id != ?`,n.symbolId,t.id);return new Set([...i.map(o=>o.relative_path),...[...r].filter(o=>o!==t.relative_path)]).size}function dU(e){return e>10?"high":e>0?"medium":"low"}function mU(e,t={}){let{scope:n,minLoc:r=1,maxDepth:i=5,scanLimit:o}=t,s=new F(e),a=fU(e,n,r,o),c=new Ud;for(let g of a)c.add(g);let l=[],u=[];a.length>0&&l.push(ux(e,0,a,c));let d=a.map(g=>g.definition).filter(g=>g!==null),m=new Set(a.map(g=>g.symbol));for(let g=1;g<=i&&d.length>0;g++){let y=s.calleeMap(d,{semantic:!1}),h=new Set;for(let b of d)for(let C of y.get(b.symbolId)??[])m.has(C.symbol)||h.add(C.symbol);let x=[];for(let b of h){m.add(b);let C=dx(e,b);if(!C||e.isIgnored(C.relativePath)||De(e,C.relativePath)||de(e,C.symbol,C.relativePath)||s.fileKind(C.relativePath)==="test"||s.hasSuppressionComment(C))continue;let S=gU(e,C,c);S.removable?x.push(pU(C,"cascade")):S.blockingFiles.length>0&&u.push({shortName:I(C.symbol),file:C.relativePath,blockingFiles:S.blockingFiles.slice(0,3)})}if(x.length===0)break;for(let b of x)c.add(b);l.push(ux(e,g,x,c)),d=x.map(b=>b.definition).filter(b=>b!==null)}let f=l.reduce((g,y)=>g+y.loc,0),p=l.reduce((g,y)=>g+y.entries.length,0);return{batches:l,totalSymbols:p,totalLoc:f,blocked:u}}function fU(e,t,n,r){let i=lr(e,{scope:t,minLoc:n,skipBarrels:!0,deadCodeOnly:!0,scanLimit:r,semantic:!1}),o=[];for(let s of i.symbols)s.kind==="dead-code"&&(De(e,s.relativePath)||de(e,s.symbol,s.relativePath)||o.push({symbol:s.symbol,shortName:s.shortName,file:s.relativePath,startLine:s.startLine,endLine:s.endLine,loc:s.loc,evidence:"graph-fact",definition:dx(e,s.symbol)}));return o}function pU(e,t){return{symbol:e.symbol,shortName:I(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:e.endLine-e.startLine+1,evidence:t,definition:e}}function dx(e,t){let n=e.get(`SELECT d.relative_path
|
|
736
736
|
FROM global_symbols gs
|
|
737
737
|
JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
738
738
|
JOIN documents d ON d.id = der.document_id
|
|
739
739
|
WHERE gs.symbol = ?
|
|
740
|
-
LIMIT 1`,t);return n?Y(e,n.relative_path).find(r=>r.symbol===t)??null:null}function
|
|
741
|
-
`).map(i=>i.trim()).filter(i=>i!==""))}catch{return null}},t)}var
|
|
740
|
+
LIMIT 1`,t);return n?Y(e,n.relative_path).find(r=>r.symbol===t)??null:null}function gU(e,t,n){let r=Pi(e,t);if(r.length===0)return{removable:!1,blockingFiles:[]};let i=new Set;for(let o of r)o.file===t.relativePath&&o.line>=t.startLine&&o.line<=t.endLine||n.contains(o.file,o.line)||i.add(o.file);return{removable:i.size===0,blockingFiles:[...i]}}function ux(e,t,n,r){let i=[...n].sort((a,c)=>a.file.localeCompare(c.file)||a.startLine-c.startLine),o=new Set(i.map(a=>a.file)),s=[];for(let a of o){let c=Y(e,a);c.length>0&&c.every(l=>r.contains(a,l.startLine))&&s.push(a)}return{depth:t,entries:i.map(({definition:a,...c})=>c),loc:i.reduce((a,c)=>a+c.loc,0),filesEmptied:s.sort()}}var Ud=class{ranges=new Map;add(t){let n=this.ranges.get(t.file)??[];n.push({start:t.startLine,end:t.endLine}),this.ranges.set(t.file,n)}contains(t,n){let r=this.ranges.get(t);return r?r.some(i=>n>=i.start&&n<=i.end):!1}};import{createHash as YV}from"crypto";import{existsSync as cc}from"fs";import{execFileSync as hU}from"child_process";var hx=2e3,Ga=50,yU=64,bU=8,SU=3,CU=2160*60*60,xU=/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i,vU=3,RU=/#\d+|\b[A-Z][A-Z0-9]+-\d+\b/g,IU=/^([a-z][a-z0-9-]+)(?:\([^)]+\))?!?:/i;function wU(e){let t=X(e,{clearGroups:["whole-project"]});return(n,r,i)=>{let o=i??Wd(n.config.projectRoot);if(!o)return null;let s=t.has(n)?t.get(n,()=>({head:"",value:null})):null;return s&&s.head===o?s.value:(t.invalidate(n),t.get(n,()=>({head:o,value:r(n.config.projectRoot,o)})).value)}}function za(e){let t=X(e,{clearGroups:["whole-project"]});return(n,r,i,o)=>{let s=o??Wd(n.config.projectRoot);if(!s)return null;let a=t.has(n)?t.get(n,()=>({head:"",values:new Map})):null;(!a||a.head!==s)&&t.invalidate(n);let c=t.get(n,()=>({head:s,values:new Map}));if(c.values.has(r))return c.values.get(r)??null;let l=i(n.config.projectRoot,s);return c.values.set(r,l),l}}var EU=za("git-commit-history");function ze(e,t={}){let n=t.historyMode??"bounded",r=t.head;return{capability:i=>DU(e,i,r),commitHistory:()=>Co(e,n,r),fileChurn:()=>TU(e,n,r),changeAmplification:()=>FU(e,n,r),trackedFiles:()=>LU(e,r),fileAddRecords:()=>AU(e,n,r),coChangePairs:(i={})=>UU(e,i,n,r),coChangePairsForFiles:(i,o={})=>bx(e,i,o,n,r),directionalCoChangePairsForFiles:(i,o={})=>WU(e,i,o,n,r)}}function Co(e,t="bounded",n){return EU(e,Zr(t),(r,i)=>kU(r,i,t),n)}function DU(e,t,n){let r=n??Wd(e.config.projectRoot);return r?{slot:t,available:!0,head:r}:{slot:t,available:!1,head:null,reason:"git history is unavailable for this project"}}function Wd(e){try{return Ot(e,["rev-parse","HEAD"]).trim()||null}catch{return null}}function Ot(e,t){return hU("git",["-C",e,...t],{encoding:"utf-8",maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"]})}function kU(e,t,n){let r;try{r=Ot(e,["log","--no-merges","--name-only",...Va(n),"--pretty=format:%x01%H%x00%ct%x00%s"])}catch{return null}return{head:t,...qd(r,Ga)}}function PU(e){return xU.test(e.subject)}function TU(e,t,n){let r=Co(e,t,n);if(!r)return null;let i=new Map;for(let o of r.commits){let s=PU(o);for(let a of o.files){let c=i.get(a)??{changes:0,fixChanges:0,lastChangedAt:0};c.changes+=1,s&&(c.fixChanges+=1),o.timestamp>c.lastChangedAt&&(c.lastChangedAt=o.timestamp),i.set(a,c)}}return i}function FU(e,t,n){let r=Co(e,t,n);if(!r||r.commits.length===0)return null;let i=r.commits.map(o=>o.files.length).filter(o=>o>0).sort((o,s)=>o-s);return i.length===0?null:{medianFilesPerCommit:mx(i,.5),p90FilesPerCommit:mx(i,.9),commitsAnalyzed:i.length}}function mx(e,t){let n=Math.min(e.length-1,Math.floor(e.length*t));return e[n]}var _U=wU("git-tracked-files");function LU(e,t){return _U(e,n=>{try{let r=Ot(n,["ls-files"]);return new Set(r.split(`
|
|
741
|
+
`).map(i=>i.trim()).filter(i=>i!==""))}catch{return null}},t)}var NU=za("git-file-adds"),fx="__git__/file-adds",px=oe({kind:"git-file-adds",invalidation:J("git-file-adds"),serialize:OU,deserialize:jU});function Gd(e){return ze(e).fileAddRecords()}function AU(e,t,n){let r=Zr(t);return NU(e,r,(i,o)=>MU(e,i,o,t),n)}function MU(e,t,n,r){let i=px.read(e,gx(r),n);if(i)return i;let o=BU(t,r);return o&&px.write(e,gx(r),n,o),o}function OU(e){return JSON.stringify([...e.entries()])}function jU(e){if(!e)return null;try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=new Map;for(let r of t){if(!Array.isArray(r)||r.length!==2||typeof r[0]!="string")return null;let i=r[1];if(!i||typeof i.commitsAgo!="number"||!Number.isFinite(i.commitsAgo)||typeof i.addedAt!="number"||!Number.isFinite(i.addedAt))return null;n.set(r[0],{commitsAgo:i.commitsAgo,addedAt:i.addedAt})}return n}catch{return null}}function BU(e,t){let n;try{n=Ot(e,["log","--no-merges","--find-renames","--name-status",...Va(t),"--pretty=format:%x01%H%x00%ct%x00%s"])}catch{return null}let r=new Map,i=new Map,o=-1;for(let s of n.split("")){if(s.trim()==="")continue;o+=1;let a=s.indexOf(`
|
|
742
742
|
`),c=a>=0?s.slice(0,a):s,[,l]=c.split("\0"),u=Number(l)||0;if(!(a<0))for(let d of s.slice(a+1).split(`
|
|
743
|
-
`)){let m
|
|
744
|
-
`).map(m=>m.trim()).filter(m=>m!==""&&a.has(m)),l=
|
|
745
|
-
`).map(r=>r.trim()).filter(r=>r!=="").map(r=>{let[i,o]=r.split("\0");return{hash:i??"",timestamp:Number(o)||0}}).filter(r=>r.hash!=="")}function
|
|
743
|
+
`)){let m=$U(d);if(!m)continue;if(m.status==="R"&&m.from&&m.to){let p=i.get(m.to)??new Set([m.to]);i.set(m.from,p);continue}if(m.status!=="A"||!m.to)continue;let f={commitsAgo:o,addedAt:u};r.set(m.to,f);for(let p of i.get(m.to)??[])r.set(p,f)}}return r}function $U(e){let t=e.trim().split(" "),n=t[0]??"";if(!n)return null;let r=n[0]??"";if(r==="R"){let o=t[1],s=t[2];return o&&s?{status:r,from:o,to:s}:null}let i=t[1];return i?{status:r,to:i}:null}var yx=za("git-co-change-pairs"),HU=za("git-directional-co-change-pairs");function UU(e,t,n,r){let i=`all\0${Zr(n)}\0${zd(t)}`,o=yx(e,i,()=>{let s=Co(e,n,r);return s?Vd(s,t):null},r);return o&&[...o]}function bx(e,t,n,r,i){if(t.size===0)return[];let o=`files\0${Zr(r)}\0${Sx(t)}\0${zd(n)}`,s=yx(e,o,()=>{let a=Co(e,r,i);return a?Vd(a,n,t):null},i);return s&&[...s]}function WU(e,t,n,r,i){if(t.size===0)return[];let o=n.maxFilesPerCommit??Ga;if(t.size>yU)return bx(e,t,n,r,i);let s=`directional\0${Zr(r)}\0${Sx(t)}\0${zd({...n,maxFilesPerCommit:o})}`,a=HU(e,s,(c,l)=>{let u=GU(c,l,t,o,r);return u?Vd(u,n,t):null},i);return a&&[...a]}function zd(e){let t=e.minTogether??4,n=e.minConfidence??.6,r=e.maxFilesPerCommit??Ga;return`${t}\0${n}\0${r}`}function Sx(e){return[...e].sort().join("\0")}function Vd(e,t,n){let{minTogether:r=4,minConfidence:i=.6,maxFilesPerCommit:o=Ga}=t,s=new Map,a=new Map,c=e.newestAnalyzedAt??0;for(let d of e.commits){let m=[...new Set(d.files)].sort();if(m.length>o)continue;e.newestAnalyzedAt===void 0&&d.timestamp>c&&(c=d.timestamp);let f=qU(m),p=n===void 0||m.some(g=>n.has(g));for(let g of m)s.set(g,(s.get(g)??0)+1);if(p)for(let g=0;g<m.length;g++)for(let y=g+1;y<m.length;y++){if(n&&!n.has(m[g])&&!n.has(m[y]))continue;let h=`${m[g]}\0${m[y]}`,x=a.get(h)??{together:0,focusedTogether:0,broadTogether:0,lastTogetherAt:0,timestamps:[],subjects:[]};x.together+=1,f?x.broadTogether+=1:x.focusedTogether+=1,d.timestamp>x.lastTogetherAt&&(x.lastTogetherAt=d.timestamp),x.timestamps.push(d.timestamp),x.subjects.push(d.subject),a.set(h,x)}}let l=[],u=c-CU;for(let[d,m]of a){let f=m.together;if(f<r)continue;let[p,g]=d.split("\0"),y=s.get(p)??f,h=s.get(g)??f,x=Math.max(f/y,f/h);if(x<i)continue;let b=m.broadTogether/f,C=m.timestamps.filter(S=>S>=u).length;l.push({fileA:p,fileB:g,together:f,confidence:x,changesA:y,changesB:h,focusedTogether:m.focusedTogether,broadTogether:m.broadTogether,broadCommitRatio:b,lastTogetherAt:m.lastTogetherAt,recentTogether:C,commitScope:JU(m.broadTogether,f),recency:C>0?"recent":"stale",subjectContext:YU(m.subjects)})}return l.sort((d,m)=>m.together-d.together||m.confidence-d.confidence||d.fileA.localeCompare(m.fileA)),l}function GU(e,t,n,r,i){let o;try{o=zU(e,i)}catch{return null}if(o.length===0)return{head:t,commits:[],skippedBulkCommits:0,newestAnalyzedAt:0};let s;try{s=Ot(e,["log","--no-merges","--format=%H",...Va(i),"--",...[...n].sort()])}catch{return null}let a=new Set(o.map(m=>m.hash)),c=s.split(`
|
|
744
|
+
`).map(m=>m.trim()).filter(m=>m!==""&&a.has(m)),l=VU(e,o,r);if(c.length===0)return{head:t,commits:[],skippedBulkCommits:0,newestAnalyzedAt:l};let u;try{u=Ot(e,["show","--no-walk=unsorted","--name-only","--pretty=format:%x01%H%x00%ct%x00%s",...c])}catch{return null}let d=qd(u,r);return{head:t,...d,newestAnalyzedAt:l}}function zU(e,t){return Ot(e,["log","--no-merges","--format=%H%x00%ct",...Va(t)]).split(`
|
|
745
|
+
`).map(r=>r.trim()).filter(r=>r!=="").map(r=>{let[i,o]=r.split("\0");return{hash:i??"",timestamp:Number(o)||0}}).filter(r=>r.hash!=="")}function Va(e){return e==="full"?[]:["-n",String(Cx())]}function Cx(){return Rn(process.env.SCIP_QUERY_GIT_HISTORY_MAX_COMMITS)??hx}function Zr(e){return e==="full"?"full":`bounded:${Cx()}`}function gx(e){let t=Zr(e);return t===`bounded:${hx}`?fx:`${fx}:${t}`}function VU(e,t,n){for(let i=0;i<t.length;i+=20){let o=t.slice(i,i+20),s;try{s=Ot(e,["show","--no-walk=unsorted","--name-only","--pretty=format:%x01%H%x00%ct%x00%s",...o.map(c=>c.hash)])}catch{return t[0]?.timestamp??0}let a=qd(s,n);if(a.commits.length>0)return a.commits[0].timestamp}return 0}function qd(e,t){let n=[],r=0;for(let i of e.split("")){if(i.trim()==="")continue;let o=i.indexOf(`
|
|
746
746
|
`),s=o>=0?i.slice(0,o):i,[a,c,l]=s.split("\0");if(!a||!c)continue;let u=o>=0?i.slice(o+1).split(`
|
|
747
|
-
`).map(d=>d.trim()).filter(d=>d!==""):[];if(u.length>t){r+=1;continue}n.push({hash:a,timestamp:Number(c)||0,subject:l??"",files:u})}return{commits:n,skippedBulkCommits:r}}function VU(e){return e.length>=yU?!0:qU(e).size>=bU}function qU(e){let t=new Set;for(let n of e){let r=n.indexOf("/");t.add(r>=0?n.slice(0,r):".")}return t}function KU(e,t){return e===0?"focused":e/t>=.5?"broad-sweep":"mixed"}function JU(e){let t=new Set,n=[],r=[];for(let i of e){!r.includes(i)&&r.length<xU&&r.push(i);for(let o of YU(i))t.add(o);for(let o of i.match(RU)??[])n.includes(o)||n.push(o)}return{subjectLabels:[...t].sort(),issueRefs:n,sampleSubjects:r,externalIssueLabelStatus:"unavailable"}}function YU(e){let t=new Set,n=vU.exec(e)?.[1]?.toLowerCase();return n&&t.add(XU(n)),/\b(?:feat|feature)\b/i.test(e)&&t.add("feature"),/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i.test(e)&&t.add("fix"),/\b(?:docs?|documentation|guide|readme)\b/i.test(e)&&t.add("docs"),/\brefactor(?:ing|ed)?\b/i.test(e)&&t.add("refactor"),/\btests?\b/i.test(e)&&t.add("test"),/\b(?:release|version|v\d+\.\d+)\b/i.test(e)&&t.add("release"),/\bchore\b/i.test(e)&&t.add("chore"),/\bbuild\b/i.test(e)&&t.add("build"),/\bci\b/i.test(e)&&t.add("ci"),/\bperf(?:ormance)?\b/i.test(e)&&t.add("perf"),[...t]}function XU(e){return e==="feat"?"feature":e}import{existsSync as QU}from"fs";import{join as ZU}from"path";function Jd(e){return Kd.test(e)}var Kd=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|uv\.lock|poetry\.lock|Pipfile\.lock|bun\.lockb?|\.SRCINFO|CHANGELOG(?:\.[a-z]+)?|.*\.(?:map|tsbuildinfo))$|(?:^|\/)(?:dist|build|out|node_modules|docs\/plans)\//i;function xo(e,t,n={}){let{minTogether:r=4,minConfidence:i=.6,limit:o=30,maxFilesPerCommit:s=20}=n,a=ze(e,{historyMode:n.historyMode,...n.head?{head:n.head}:{}}),c=a.commitHistory(),l=t!==void 0,u=a.coChangePairs({minTogether:l?Math.min(r,2):r,minConfidence:l?0:i,maxFilesPerCommit:s});if(!c||!u)return{available:!1,commitsAnalyzed:0,findings:[]};let d=typeof n.scanLimit=="number"?u.slice(0,n.scanLimit):u,m=ie(e),f=wx(e),p=Qd(e,m,f),g=n.includeLinked===!0||l,y=[];for(let h of d){if(Kd.test(h.fileA)||Kd.test(h.fileB)||!xx(e,h.fileA)||!xx(e,h.fileB)||l&&!h.fileA.includes(t)&&!h.fileB.includes(t)||!l&&(G(h.fileA)==="test"||G(h.fileB)==="test"||rW(h.fileA,h.fileB)||tW(h.fileA,h.fileB)))continue;let x=p(h.fileA,h.fileB);if(!g&&x)continue;let b=Yd(h.fileA,h.fileB),C=Xd(h,b,x);if(y.push({...h,structurallyLinked:x,partnerClass:b.partnerClass,partnerClassReasons:b.reasons,...C?{declaredCouplingSuggestion:C}:{}}),y.length>=o)break}return{available:!0,commitsAnalyzed:c.commits.length,findings:y}}function xx(e,t){return QU(ZU(e.config.projectRoot,t))}function Yd(e,t){let n=vx(e),r=vx(t),i=[],o=c=>{i.includes(c)||i.push(c)},s=(c,l)=>n.tags.has(c)&&r.tags.has(l)||n.tags.has(l)&&r.tags.has(c);if(s("doc","code"))return o("one side is documentation and the other is executable source"),{partnerClass:"doc-code",reasons:i};if(n.tags.has("test")||r.tags.has("test"))return o("one side is classified as a test file"),{partnerClass:"test-code",reasons:i};if(s("schema","script"))return o("schema or contract file changes with a script or generated-code path"),{partnerClass:"schema-script",reasons:i};if(s("model","view"))return o("model or state path changes with a view or component path"),{partnerClass:"model-view",reasons:i};if(s("config","code"))return o("configuration file changes with executable source"),{partnerClass:"config-code",reasons:i};let a=pW(n.tokens,r.tokens).filter(c=>!mW.has(c));return Ix(e,t)||a.length>=2?(o(Ix(e,t)?"both files live in the same directory":`files share feature tokens: ${a.slice(0,4).join(", ")}`),{partnerClass:"same-feature",reasons:i}):(o("no specific relationship pattern matched"),{partnerClass:"unknown",reasons:i})}function Xd(e,t,n){if(n||e.together<4||e.confidence<.75||e.commitScope==="broad-sweep"||e.recency==="stale"||!dW.has(t.partnerClass))return;let r=[e.fileA,e.fileB].sort();return{name:`co-change ${t.partnerClass}: ${gW(r)}`,files:r,reason:`${t.partnerClass} pair changed together ${e.together}x with ${Math.round(e.confidence*100)}% confidence; declare it if future edits should require both sides.`}}function Qd(e,t=ie(e),n=wx(e)){return(r,i)=>iW(t,n,r,i)}var eW=/(?:^|\/)(?:locales|i18n)\//i;function Rx(e){return eW.test(e)}function tW(e,t){return Rx(e)&&Rx(t)?!0:nW(e,t)}function nW(e,t){if(!e.endsWith(".json")||!t.endsWith(".json"))return!1;let n=e.lastIndexOf("/"),r=t.lastIndexOf("/");if(n<0||r<0)return!1;let i=e.slice(0,n),o=t.slice(0,r);if(i===o)return!1;let s=e.slice(n+1),a=t.slice(r+1);if(s!==a)return!1;let c=i.lastIndexOf("/"),l=o.lastIndexOf("/"),u=c>=0?i.slice(0,c):"",d=l>=0?o.slice(0,l):"";return u===d}function rW(e,t){let n=e.lastIndexOf("/"),r=t.lastIndexOf("/");if(e.slice(0,n)!==t.slice(0,r))return!1;let i=e.slice(n+1).split(".")[0],o=t.slice(r+1).split(".")[0];return i!==""&&i===o}function wx(e){return(e.config.declaredCouplings??[]).filter(t=>Array.isArray(t.files)&&t.files.length>=2).map(t=>new Set(t.files))}function iW(e,t,n,r){return e.get(n)?.has(r)===!0||e.get(r)?.has(n)===!0?!0:t.some(i=>i.has(n)&&i.has(r))}var oW=/(?:^|\/)(?:readme|docs?|guides?|adr|architecture|design)(?:\/|$)|\.(?:md|mdx|rst|adoc|txt)$/i,sW=/(?:^|\/)(?:\.[a-z0-9-]+rc|config|configs|settings|\.github)(?:\/|$)|(?:^|\/)(?:package\.json|tsconfig(?:\.[^.]+)?\.json|vite\.config\.[cm]?[jt]s|rollup\.config\.[cm]?[jt]s|eslint\.config\.[cm]?[jt]s)$|\.(?:json|ya?ml|toml|ini|env)$/i,aW=/(?:^|\/)(?:schemas?|contracts?|migrations?|models?|types?)(?:\/|$)|(?:^|\/)[^/]*(?:schema|contract|migration|model|types?)[^/]*|(?:\.schema)?\.(?:graphql|gql|proto|prisma)$/i,cW=/(?:^|\/)(?:scripts?|bin|tools?|tasks?|generators?|codegen|migrations?|seeds?)(?:\/|$)|(?:^|\/)[^/]*(?:generate|codegen|migrate|seed|script)[^/]*\.[cm]?[jt]s$/i,lW=/(?:^|\/)(?:models?|entities|domain|state|stores?|reducers?)(?:\/|$)|(?:^|\/)[^/]*(?:model|entity|state|store|reducer|viewmodel)[^/]*\.[^.]+$/i,uW=/(?:^|\/)(?:views?|pages?|components?|screens?|routes?|templates?)(?:\/|$)|(?:^|\/)[^/]*(?:view|page|component|screen|template)[^/]*\.[^.]+$|\.(?:vue|svelte|tsx|jsx)$/i,dW=new Set(["doc-code","config-code","schema-script","model-view","test-code"]),mW=new Set(["src","lib","app","apps","packages","frontend","backend","examples","python","typescript","javascript","test","tests","spec","index","main","utils","util","types","type","config","docs","doc","package","requirements","ts","tsx","js","jsx","mjs","cjs","vue","py","md","mdx","json","yaml","yml","toml","txt"]);function vx(e){let t=e.replace(/\\/g,"/"),n=new Set;return oW.test(t)&&n.add("doc"),sW.test(t)&&n.add("config"),aW.test(t)&&n.add("schema"),cW.test(t)&&n.add("script"),lW.test(t)&&n.add("model"),uW.test(t)&&n.add("view"),G(t)==="test"&&n.add("test"),!n.has("doc")&&!n.has("config")&&n.add("code"),{tags:n,tokens:fW(t)}}function Ix(e,t){let n=e.lastIndexOf("/"),r=t.lastIndexOf("/"),i=n>=0?e.slice(0,n):"",o=r>=0?t.slice(0,r):"";return i!==""&&i===o}function fW(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}function pW(e,t){let n=new Set(t);return[...new Set(e.filter(r=>n.has(r)))].sort()}function gW(e){return e.map(t=>t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).join(" + ")}import{execFileSync as dr}from"child_process";import{existsSync as hW,readFileSync as yW}from"fs";import{basename as Ex}from"path";function Va(e){let t=new Map;for(let n of e){let r=t.get(n.file);r||(r=[],t.set(n.file,r)),r.push(n)}return t}var Ro="Unable to compute git diff.";function ei(e,t={}){let n=t.plan??An(e,t);return n.note?bW(n.note,n.changedFileLines):n.changedFiles.length===0?SW(n.changedFileLines):qa(n.changedFiles,[Tx(e,n.changedFiles,n.changedFiles,n.changedRanges)])}function An(e,t={}){let{base:n="HEAD"}=t;try{let r=CW(e.config.projectRoot,n),i=r.changedFileLines,o=EW(e,i),s=DW(e,r.changedRanges);return{changedFileLines:i,changedFiles:o,changedRanges:s,renamedFiles:vW(e.config.projectRoot,n,o,r),note:i.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],changedRanges:[],renamedFiles:[],note:Ro}}}function Tx(e,t,n,r=[]){let i=new F(e),o=new Set(n),s=Va(r),a=[],c=new Map,l=t.flatMap(C=>i.definitionsForFile(C)).filter(HW),u=l.filter(C=>kW(C,s)),d=FW(e,l,u,s),m=NW([...u,...d.definitions]).sort((C,S)=>C.relativePath.localeCompare(S.relativePath)||C.startLine-S.startLine),f=m.map(C=>C.symbolId),p=jW(e,f),g=BW(e,f,n),y=m.filter(C=>(p.get(C.symbolId)??0)===0),h=kx(()=>En(e,y)),x=y.filter(C=>(h.get(C.symbolId)?.size??0)===0),b=kx(()=>co(e,x));for(let C of m)OW(e,C,o,a,c,h.get(C.symbolId)??new Set,b.get(C.symbolId)??new Set,p.get(C.symbolId)??0,g.get(C.symbolId)??new Set);return{changedSymbols:a,consumerEntries:[...c.entries()].map(([C,S])=>({file:C,symbols:[...S].sort()})),attributionNotes:d.notes}}function qa(e,t){let n=new Map,r=t.flatMap(s=>s.changedSymbols),i=t.flatMap(s=>s.attributionNotes??[]);for(let s of t)for(let a of s.consumerEntries){let c=n.get(a.file);c||(c=new Set,n.set(a.file,c));for(let l of a.symbols)c.add(l)}let o=$W(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:o,attributionNotes:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:o.length}}}function bW(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],attributionNotes:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function SW(e){return{changedFiles:e,changedSymbols:[],affectedConsumers:[],attributionNotes:[],summary:{totalChangedFiles:e.length,totalChangedSymbols:0,totalAffectedFiles:0,note:"Changed files are not present in the current SCIP index."}}}function CW(e,t){let n=dr("git",["diff","--name-status","--find-renames",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:67108864}),r=dr("git",["diff","--name-status","--find-renames","--cached",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),i=dr("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),o=dr("git",["diff","--unified=0",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),s=dr("git",["diff","--unified=0","--cached",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),a=IW([n,r]);return{changedFileLines:[...new Set([...a.changedFiles,...Fx(i)])],changedRanges:Lx([...Px(o),...Px(s)]),renamedFiles:a.renamedFiles,deletedFiles:a.deletedFiles}}function tm(e,t,n){try{return dr("git",["show",`${t}:./${n}`],{encoding:"utf-8",cwd:e,timeout:1e4,stdio:["ignore","pipe","ignore"]})}catch{return null}}function vo(e,t,n=[]){let r=xW(e,t,n);return i=>(r.has(i)||r.set(i,tm(e,t,i)),r.get(i)??null)}function Io(e,t=e.changedFiles){let n=new Map(e.renamedFiles.map(r=>[r.to,r.from]));return[...new Set(t.map(r=>n.get(r)??r))]}function xW(e,t,n){let r=[...new Set(n)],i=new Map;if(r.length===0)return i;try{let o=r.map(a=>`${t}:./${a}
|
|
748
|
-
`).join(""),s=dr("git",["cat-file","--batch"],{cwd:e,input:o,maxBuffer:256*1024*1024,timeout:1e4,stdio:["pipe","pipe","ignore"]});return RW(s,r)}catch{for(let o of r)i.set(o,tm(e,t,o));return i}}function RW(e,t){let n=new Map,r=0;for(let i of t){let o=e.indexOf(10,r);if(o<0)throw new Error("git cat-file batch output ended before object header");let s=e.subarray(r,o).toString("utf-8");if(r=o+1,s.endsWith(" missing")){n.set(i,null);continue}let a=/^[0-9a-f]+ ([^ ]+) (\d+)$/.exec(s);if(!a)throw new Error(`unexpected git cat-file batch header: ${s}`);let[,c,l]=a,u=Number(l);if(!Number.isFinite(u)||u<0)throw new Error(`unexpected git cat-file batch size: ${s}`);if(r+u>e.length)throw new Error("git cat-file batch output ended before blob payload");let d=e.subarray(r,r+u);n.set(i,c==="blob"?d.toString("utf-8"):null),r+=u,e[r]===10&&(r+=1)}return n}function
|
|
749
|
-
`).map(t=>t.trim()).filter(t=>t.length>0)}function
|
|
750
|
-
ORDER BY id`).map(r=>r.relative_path),n=new Map(t.map(r=>[r,r]));return r=>{let i=r.replace(/\\/g,"/"),o=n.get(i);return o||(t.find(s=>s.endsWith(i))??null)}}function
|
|
751
|
-
`)){if(r.startsWith("+++ ")){n=PW(r.slice(4).trim());continue}if(!n||!r.startsWith("@@ "))continue;let i=/@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/.exec(r);if(!i)continue;let o=Math.max(0,Number(i[1])-1),s=i[2]===void 0?1:Number(i[2]);t.push({file:n,startLine:o,endLine:Math.max(o,o+Math.max(s,1)-1)})}return t}function PW(e){return e==="/dev/null"?null:e.startsWith("a/")||e.startsWith("b/")?e.slice(2):e}function Lx(e){let t=new Set,n=[];for(let r of e){let i=`${r.file}:${r.startLine}:${r.endLine}`;t.has(i)||(t.add(i),n.push(r))}return n}function
|
|
747
|
+
`).map(d=>d.trim()).filter(d=>d!==""):[];if(u.length>t){r+=1;continue}n.push({hash:a,timestamp:Number(c)||0,subject:l??"",files:u})}return{commits:n,skippedBulkCommits:r}}function qU(e){return e.length>=bU?!0:KU(e).size>=SU}function KU(e){let t=new Set;for(let n of e){let r=n.indexOf("/");t.add(r>=0?n.slice(0,r):".")}return t}function JU(e,t){return e===0?"focused":e/t>=.5?"broad-sweep":"mixed"}function YU(e){let t=new Set,n=[],r=[];for(let i of e){!r.includes(i)&&r.length<vU&&r.push(i);for(let o of XU(i))t.add(o);for(let o of i.match(RU)??[])n.includes(o)||n.push(o)}return{subjectLabels:[...t].sort(),issueRefs:n,sampleSubjects:r,externalIssueLabelStatus:"unavailable"}}function XU(e){let t=new Set,n=IU.exec(e)?.[1]?.toLowerCase();return n&&t.add(QU(n)),/\b(?:feat|feature)\b/i.test(e)&&t.add("feature"),/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i.test(e)&&t.add("fix"),/\b(?:docs?|documentation|guide|readme)\b/i.test(e)&&t.add("docs"),/\brefactor(?:ing|ed)?\b/i.test(e)&&t.add("refactor"),/\btests?\b/i.test(e)&&t.add("test"),/\b(?:release|version|v\d+\.\d+)\b/i.test(e)&&t.add("release"),/\bchore\b/i.test(e)&&t.add("chore"),/\bbuild\b/i.test(e)&&t.add("build"),/\bci\b/i.test(e)&&t.add("ci"),/\bperf(?:ormance)?\b/i.test(e)&&t.add("perf"),[...t]}function QU(e){return e==="feat"?"feature":e}import{existsSync as ZU}from"fs";import{join as eW}from"path";function Jd(e){return Kd.test(e)}var Kd=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|uv\.lock|poetry\.lock|Pipfile\.lock|bun\.lockb?|\.SRCINFO|CHANGELOG(?:\.[a-z]+)?|.*\.(?:map|tsbuildinfo))$|(?:^|\/)(?:dist|build|out|node_modules|docs\/plans)\//i;function xo(e,t,n={}){let{minTogether:r=4,minConfidence:i=.6,limit:o=30,maxFilesPerCommit:s=20}=n,a=ze(e,{historyMode:n.historyMode,...n.head?{head:n.head}:{}}),c=a.commitHistory(),l=t!==void 0,u=a.coChangePairs({minTogether:l?Math.min(r,2):r,minConfidence:l?0:i,maxFilesPerCommit:s});if(!c||!u)return{available:!1,commitsAnalyzed:0,findings:[]};let d=typeof n.scanLimit=="number"?u.slice(0,n.scanLimit):u,m=ie(e),f=wx(e),p=Qd(e,m,f),g=n.includeLinked===!0||l,y=[];for(let h of d){if(Kd.test(h.fileA)||Kd.test(h.fileB)||!xx(e,h.fileA)||!xx(e,h.fileB)||l&&!h.fileA.includes(t)&&!h.fileB.includes(t)||!l&&(G(h.fileA)==="test"||G(h.fileB)==="test"||iW(h.fileA,h.fileB)||nW(h.fileA,h.fileB)))continue;let x=p(h.fileA,h.fileB);if(!g&&x)continue;let b=Yd(h.fileA,h.fileB),C=Xd(h,b,x);if(y.push({...h,structurallyLinked:x,partnerClass:b.partnerClass,partnerClassReasons:b.reasons,...C?{declaredCouplingSuggestion:C}:{}}),y.length>=o)break}return{available:!0,commitsAnalyzed:c.commits.length,findings:y}}function xx(e,t){return ZU(eW(e.config.projectRoot,t))}function Yd(e,t){let n=Rx(e),r=Rx(t),i=[],o=c=>{i.includes(c)||i.push(c)},s=(c,l)=>n.tags.has(c)&&r.tags.has(l)||n.tags.has(l)&&r.tags.has(c);if(s("doc","code"))return o("one side is documentation and the other is executable source"),{partnerClass:"doc-code",reasons:i};if(n.tags.has("test")||r.tags.has("test"))return o("one side is classified as a test file"),{partnerClass:"test-code",reasons:i};if(s("schema","script"))return o("schema or contract file changes with a script or generated-code path"),{partnerClass:"schema-script",reasons:i};if(s("model","view"))return o("model or state path changes with a view or component path"),{partnerClass:"model-view",reasons:i};if(s("config","code"))return o("configuration file changes with executable source"),{partnerClass:"config-code",reasons:i};let a=gW(n.tokens,r.tokens).filter(c=>!fW.has(c));return Ix(e,t)||a.length>=2?(o(Ix(e,t)?"both files live in the same directory":`files share feature tokens: ${a.slice(0,4).join(", ")}`),{partnerClass:"same-feature",reasons:i}):(o("no specific relationship pattern matched"),{partnerClass:"unknown",reasons:i})}function Xd(e,t,n){if(n||e.together<4||e.confidence<.75||e.commitScope==="broad-sweep"||e.recency==="stale"||!mW.has(t.partnerClass))return;let r=[e.fileA,e.fileB].sort();return{name:`co-change ${t.partnerClass}: ${hW(r)}`,files:r,reason:`${t.partnerClass} pair changed together ${e.together}x with ${Math.round(e.confidence*100)}% confidence; declare it if future edits should require both sides.`}}function Qd(e,t=ie(e),n=wx(e)){return(r,i)=>oW(t,n,r,i)}var tW=/(?:^|\/)(?:locales|i18n)\//i;function vx(e){return tW.test(e)}function nW(e,t){return vx(e)&&vx(t)?!0:rW(e,t)}function rW(e,t){if(!e.endsWith(".json")||!t.endsWith(".json"))return!1;let n=e.lastIndexOf("/"),r=t.lastIndexOf("/");if(n<0||r<0)return!1;let i=e.slice(0,n),o=t.slice(0,r);if(i===o)return!1;let s=e.slice(n+1),a=t.slice(r+1);if(s!==a)return!1;let c=i.lastIndexOf("/"),l=o.lastIndexOf("/"),u=c>=0?i.slice(0,c):"",d=l>=0?o.slice(0,l):"";return u===d}function iW(e,t){let n=e.lastIndexOf("/"),r=t.lastIndexOf("/");if(e.slice(0,n)!==t.slice(0,r))return!1;let i=e.slice(n+1).split(".")[0],o=t.slice(r+1).split(".")[0];return i!==""&&i===o}function wx(e){return(e.config.declaredCouplings??[]).filter(t=>Array.isArray(t.files)&&t.files.length>=2).map(t=>new Set(t.files))}function oW(e,t,n,r){return e.get(n)?.has(r)===!0||e.get(r)?.has(n)===!0?!0:t.some(i=>i.has(n)&&i.has(r))}var sW=/(?:^|\/)(?:readme|docs?|guides?|adr|architecture|design)(?:\/|$)|\.(?:md|mdx|rst|adoc|txt)$/i,aW=/(?:^|\/)(?:\.[a-z0-9-]+rc|config|configs|settings|\.github)(?:\/|$)|(?:^|\/)(?:package\.json|tsconfig(?:\.[^.]+)?\.json|vite\.config\.[cm]?[jt]s|rollup\.config\.[cm]?[jt]s|eslint\.config\.[cm]?[jt]s)$|\.(?:json|ya?ml|toml|ini|env)$/i,cW=/(?:^|\/)(?:schemas?|contracts?|migrations?|models?|types?)(?:\/|$)|(?:^|\/)[^/]*(?:schema|contract|migration|model|types?)[^/]*|(?:\.schema)?\.(?:graphql|gql|proto|prisma)$/i,lW=/(?:^|\/)(?:scripts?|bin|tools?|tasks?|generators?|codegen|migrations?|seeds?)(?:\/|$)|(?:^|\/)[^/]*(?:generate|codegen|migrate|seed|script)[^/]*\.[cm]?[jt]s$/i,uW=/(?:^|\/)(?:models?|entities|domain|state|stores?|reducers?)(?:\/|$)|(?:^|\/)[^/]*(?:model|entity|state|store|reducer|viewmodel)[^/]*\.[^.]+$/i,dW=/(?:^|\/)(?:views?|pages?|components?|screens?|routes?|templates?)(?:\/|$)|(?:^|\/)[^/]*(?:view|page|component|screen|template)[^/]*\.[^.]+$|\.(?:vue|svelte|tsx|jsx)$/i,mW=new Set(["doc-code","config-code","schema-script","model-view","test-code"]),fW=new Set(["src","lib","app","apps","packages","frontend","backend","examples","python","typescript","javascript","test","tests","spec","index","main","utils","util","types","type","config","docs","doc","package","requirements","ts","tsx","js","jsx","mjs","cjs","vue","py","md","mdx","json","yaml","yml","toml","txt"]);function Rx(e){let t=e.replace(/\\/g,"/"),n=new Set;return sW.test(t)&&n.add("doc"),aW.test(t)&&n.add("config"),cW.test(t)&&n.add("schema"),lW.test(t)&&n.add("script"),uW.test(t)&&n.add("model"),dW.test(t)&&n.add("view"),G(t)==="test"&&n.add("test"),!n.has("doc")&&!n.has("config")&&n.add("code"),{tags:n,tokens:pW(t)}}function Ix(e,t){let n=e.lastIndexOf("/"),r=t.lastIndexOf("/"),i=n>=0?e.slice(0,n):"",o=r>=0?t.slice(0,r):"";return i!==""&&i===o}function pW(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}function gW(e,t){let n=new Set(t);return[...new Set(e.filter(r=>n.has(r)))].sort()}function hW(e){return e.map(t=>t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).join(" + ")}import{execFileSync as dr}from"child_process";import{existsSync as yW,readFileSync as bW}from"fs";import{basename as Ex}from"path";function qa(e){let t=new Map;for(let n of e){let r=t.get(n.file);r||(r=[],t.set(n.file,r)),r.push(n)}return t}var vo="Unable to compute git diff.";function ei(e,t={}){let n=t.plan??An(e,t);return n.note?SW(n.note,n.changedFileLines):n.changedFiles.length===0?CW(n.changedFileLines):Ka(n.changedFiles,[Tx(e,n.changedFiles,n.changedFiles,n.changedRanges)])}function An(e,t={}){let{base:n="HEAD"}=t;try{let r=xW(e.config.projectRoot,n),i=r.changedFileLines,o=DW(e,i),s=kW(e,r.changedRanges);return{changedFileLines:i,changedFiles:o,changedRanges:s,renamedFiles:IW(e.config.projectRoot,n,o,r),note:i.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],changedRanges:[],renamedFiles:[],note:vo}}}function Tx(e,t,n,r=[]){let i=new F(e),o=new Set(n),s=qa(r),a=[],c=new Map,l=t.flatMap(C=>i.definitionsForFile(C)).filter(UW),u=l.filter(C=>TW(C,s)),d=_W(e,l,u,s),m=AW([...u,...d.definitions]).sort((C,S)=>C.relativePath.localeCompare(S.relativePath)||C.startLine-S.startLine),f=m.map(C=>C.symbolId),p=BW(e,f),g=$W(e,f,n),y=m.filter(C=>(p.get(C.symbolId)??0)===0),h=Px(()=>En(e,y)),x=y.filter(C=>(h.get(C.symbolId)?.size??0)===0),b=Px(()=>co(e,x));for(let C of m)jW(e,C,o,a,c,h.get(C.symbolId)??new Set,b.get(C.symbolId)??new Set,p.get(C.symbolId)??0,g.get(C.symbolId)??new Set);return{changedSymbols:a,consumerEntries:[...c.entries()].map(([C,S])=>({file:C,symbols:[...S].sort()})),attributionNotes:d.notes}}function Ka(e,t){let n=new Map,r=t.flatMap(s=>s.changedSymbols),i=t.flatMap(s=>s.attributionNotes??[]);for(let s of t)for(let a of s.consumerEntries){let c=n.get(a.file);c||(c=new Set,n.set(a.file,c));for(let l of a.symbols)c.add(l)}let o=HW(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:o,attributionNotes:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:o.length}}}function SW(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],attributionNotes:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function CW(e){return{changedFiles:e,changedSymbols:[],affectedConsumers:[],attributionNotes:[],summary:{totalChangedFiles:e.length,totalChangedSymbols:0,totalAffectedFiles:0,note:"Changed files are not present in the current SCIP index."}}}function xW(e,t){let n=dr("git",["diff","--name-status","--find-renames",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:67108864}),r=dr("git",["diff","--name-status","--find-renames","--cached",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),i=dr("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),o=dr("git",["diff","--unified=0",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),s=dr("git",["diff","--unified=0","--cached",t],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),a=wW([n,r]);return{changedFileLines:[...new Set([...a.changedFiles,...Fx(i)])],changedRanges:Lx([...kx(o),...kx(s)]),renamedFiles:a.renamedFiles,deletedFiles:a.deletedFiles}}function tm(e,t,n){try{return dr("git",["show",`${t}:./${n}`],{encoding:"utf-8",cwd:e,timeout:1e4,stdio:["ignore","pipe","ignore"]})}catch{return null}}function Ro(e,t,n=[]){let r=vW(e,t,n);return i=>(r.has(i)||r.set(i,tm(e,t,i)),r.get(i)??null)}function Io(e,t=e.changedFiles){let n=new Map(e.renamedFiles.map(r=>[r.to,r.from]));return[...new Set(t.map(r=>n.get(r)??r))]}function vW(e,t,n){let r=[...new Set(n)],i=new Map;if(r.length===0)return i;try{let o=r.map(a=>`${t}:./${a}
|
|
748
|
+
`).join(""),s=dr("git",["cat-file","--batch"],{cwd:e,input:o,maxBuffer:256*1024*1024,timeout:1e4,stdio:["pipe","pipe","ignore"]});return RW(s,r)}catch{for(let o of r)i.set(o,tm(e,t,o));return i}}function RW(e,t){let n=new Map,r=0;for(let i of t){let o=e.indexOf(10,r);if(o<0)throw new Error("git cat-file batch output ended before object header");let s=e.subarray(r,o).toString("utf-8");if(r=o+1,s.endsWith(" missing")){n.set(i,null);continue}let a=/^[0-9a-f]+ ([^ ]+) (\d+)$/.exec(s);if(!a)throw new Error(`unexpected git cat-file batch header: ${s}`);let[,c,l]=a,u=Number(l);if(!Number.isFinite(u)||u<0)throw new Error(`unexpected git cat-file batch size: ${s}`);if(r+u>e.length)throw new Error("git cat-file batch output ended before blob payload");let d=e.subarray(r,r+u);n.set(i,c==="blob"?d.toString("utf-8"):null),r+=u,e[r]===10&&(r+=1)}return n}function IW(e,t,n,r){if(n.length===0)return[];let i=new Map,o=new Set;for(let a of r.renamedFiles)n.includes(a.to)&&(i.set(a.to,a),o.add(a.from));let s=r.deletedFiles;if(s.length===0)return[...i.values()].sort((a,c)=>a.to.localeCompare(c.to));for(let a of n){if(i.has(a)||!yW(`${e}/${a}`))continue;let c=s.filter(d=>!o.has(d)).filter(d=>Ex(d)===Ex(a));if(c.length===0)continue;let l=bW(`${e}/${a}`,"utf-8"),u=c.map(d=>({from:d,to:a,similarity:EW(tm(e,t,d)??"",l)})).sort((d,m)=>m.similarity-d.similarity)[0];u&&u.similarity>=.45&&(i.set(a,u),o.add(u.from))}return[...i.values()].sort((a,c)=>a.to.localeCompare(c.to))}function wW(e){let t=new Set,n=new Map,r=new Set;for(let i of e.flatMap(o=>Fx(o))){let[o,s,a]=i.split(" ");if(!(!o||!s)){if(o.startsWith("R")&&a){t.add(a),n.set(a,{from:s,to:a,similarity:Number(o.slice(1))/100});continue}t.add(s),o.startsWith("D")&&r.add(s)}}return{changedFiles:[...t],renamedFiles:[...n.values()],deletedFiles:[...r]}}function EW(e,t){let n=new Set(Dx(e)),r=new Set(Dx(t));if(n.size===0&&r.size===0)return 1;if(n.size===0||r.size===0)return 0;let i=0;for(let o of n)r.has(o)&&(i+=1);return 2*i/(n.size+r.size)}function Dx(e){return e.match(/[A-Za-z_$][\w$]*|[{}()[\].,]/g)??[]}function Fx(e){return e.split(`
|
|
749
|
+
`).map(t=>t.trim()).filter(t=>t.length>0)}function DW(e,t){let n=_x(e),r=[];for(let i of t){let o=n(i);o&&!e.isIgnored(o)&&r.push(o)}return r}function kW(e,t){let n=_x(e),r=[];for(let i of t){let o=n(i.file);o&&!e.isIgnored(o)&&r.push({...i,file:o})}return Lx(r)}function _x(e){let t=e.all(`SELECT relative_path FROM documents
|
|
750
|
+
ORDER BY id`).map(r=>r.relative_path),n=new Map(t.map(r=>[r,r]));return r=>{let i=r.replace(/\\/g,"/"),o=n.get(i);return o||(t.find(s=>s.endsWith(i))??null)}}function kx(e){let t=[],n=null;for(let r of e.split(`
|
|
751
|
+
`)){if(r.startsWith("+++ ")){n=PW(r.slice(4).trim());continue}if(!n||!r.startsWith("@@ "))continue;let i=/@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/.exec(r);if(!i)continue;let o=Math.max(0,Number(i[1])-1),s=i[2]===void 0?1:Number(i[2]);t.push({file:n,startLine:o,endLine:Math.max(o,o+Math.max(s,1)-1)})}return t}function PW(e){return e==="/dev/null"?null:e.startsWith("a/")||e.startsWith("b/")?e.slice(2):e}function Lx(e){let t=new Set,n=[];for(let r of e){let i=`${r.file}:${r.startLine}:${r.endLine}`;t.has(i)||(t.add(i),n.push(r))}return n}function TW(e,t){let n=t.get(e.relativePath);return!n||n.length===0?!0:n.some(r=>nm(e.startLine,e.endLine,r.startLine,r.endLine))}function FW(e,t,n){let r=new Map,i=[],o=Nx(e),s=MW(n);for(let a of t){let c=o.get(a.file)??[];if(c.some(d=>nm(d.startLine,d.endLine,a.startLine,a.endLine)))continue;let l=s.get(a.file)??[],u=OW(l,a);if(u){let d=c.find(m=>m.startLine>=u.startLine&&m.startLine<=u.endLine);if(d){r.set(d.symbolId,d),i.push(Zd(a,"ast-widened"));continue}}if(l.length===0){let d=[...c].filter(m=>m.startLine<=a.startLine).sort((m,f)=>f.startLine-m.startLine||m.endLine-f.endLine)[0];if(d){r.set(d.symbolId,d),i.push(Zd(a,"nearest-preceding"));continue}}i.push(Zd(a,"unattributed"))}return{definitions:[...r.values()],notes:i}}function _W(e,t,n,r){let i=Nx(n),o=[],s=[],a=[...new Set(t.map(c=>c.relativePath))];for(let c of a){let l=r.get(c)??[];if(l.length===0)continue;let u=i.get(c)??[];for(let d of l)u.some(m=>nm(m.startLine,m.endLine,d.startLine,d.endLine))||o.push(d);o.some(d=>d.file===c)&&s.push(...LW(e,c))}return FW(t,o,s)}function LW(e,t){let n=K(e,t);return n?n.rootNode.namedChildren.filter(NW).map(r=>({file:t,startLine:r.startPosition.row,endLine:r.endPosition.row})).filter(r=>r.endLine>=r.startLine):[]}function NW(e){return e.endPosition.row<e.startPosition.row?!1:!new Set(["import_statement","comment"]).has(e.type)}function AW(e){let t=new Map;for(let n of e)t.set(n.symbolId,n);return[...t.values()]}function Nx(e){let t=new Map;for(let n of e){let r=t.get(n.relativePath)??[];r.push(n),t.set(n.relativePath,r)}return t}function MW(e){let t=new Map;for(let n of e){let r=t.get(n.file)??[];r.push(n),t.set(n.file,r)}return t}function OW(e,t){return e.filter(n=>n.startLine<=t.startLine&&n.endLine>=t.endLine).sort((n,r)=>n.endLine-n.startLine-(r.endLine-r.startLine))[0]}function Zd(e,t){return{file:e.file,startLine:e.startLine,endLine:e.endLine,method:t}}function nm(e,t,n,r){return e<=r&&n<=t}function jW(e,t,n,r,i,o,s,a,c){let l=Math.max(a,o.size,s.size);if(!WW(t,l))return;let u=I(t.symbol);r.push({symbol:t.symbol,shortName:u,file:t.relativePath,startLine:t.startLine,endLine:t.endLine,fanIn:l});for(let d of c)em(e,n,i,d,u);for(let d of o)em(e,n,i,d,u);for(let d of s)em(e,n,i,d,u)}function Px(e){try{return e()}catch(t){return console.error(`warning: diff-impact enrichment scan failed, continuing without it: ${t instanceof Error?t.message:t}`),new Map}}function BW(e,t){if(t.length===0)return new Map;let n=e.all(`SELECT m.symbol_id, COUNT(DISTINCT c.document_id) AS fan_in
|
|
752
752
|
FROM mentions m
|
|
753
753
|
JOIN chunks c ON m.chunk_id = c.id
|
|
754
754
|
WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
|
|
755
755
|
AND m.role != 1
|
|
756
|
-
GROUP BY m.symbol_id`,...t);return new Map(n.map(r=>[r.symbol_id,r.fan_in]))}function
|
|
756
|
+
GROUP BY m.symbol_id`,...t);return new Map(n.map(r=>[r.symbol_id,r.fan_in]))}function $W(e,t,n){if(t.length===0||n.length===0)return new Map;let r=e.all(`SELECT DISTINCT m.symbol_id, ref_d.relative_path
|
|
757
757
|
FROM mentions m
|
|
758
758
|
JOIN chunks c ON m.chunk_id = c.id
|
|
759
759
|
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
760
760
|
WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
|
|
761
761
|
AND m.role != 1
|
|
762
762
|
AND ref_d.relative_path NOT IN (${n.map(()=>"?").join(",")})
|
|
763
|
-
${e.pathExclusionsFor("ref_d")}`,...t,...n),i=new Map;for(let o of r){let s=i.get(o.symbol_id);s||(s=new Set,i.set(o.symbol_id,s)),s.add(o.relative_path)}return i}function em(e,t,n,r,i){if(e.isIgnored(r)||t.has(r))return;let o=n.get(r);o||(o=new Set,n.set(r,o)),o.add(i)}function
|
|
764
|
-
`).trim();return o.length<=2e3?o:`${o.slice(0,2e3).trimEnd()}...`}function mr(e,t){return t.filter(n=>e.includes(n))}var
|
|
765
|
-
`).toLowerCase(),n=[],r=mr(t,[".scipquery","declaredcouplings","suppression","suppressions","config","configuration","json"]);if(r.length>0)return n.push(`configuration/example terms near citation: ${r.join(", ")}`),{citationKind:"configuration-example",actionTier:"support",reasons:n};let i=mr(t,["accepted","intentional","intentionally","retained","historical"]);if(i.length>0)return n.push(`intentional-record terms near citation: ${i.join(", ")}`),{citationKind:"intentional-record",actionTier:"support",reasons:n};let o=mr(t,["command","cli","usage","example","run","workflow"]);return o.length>0?(n.push(`guide/reference terms near citation: ${o.join(", ")}`),{citationKind:"guide-reference",actionTier:"signal",reasons:n}):(n.push(e.length>0?"citation appears in prose without config or guide markers":"citation context unavailable"),{citationKind:"behavioral-claim",actionTier:"direct",reasons:n})}function
|
|
766
|
-
${n}`.toLowerCase(),i=mr(r,["historical note","historical record","history note","retrospective","postmortem","post-mortem","archived","archive","previously","legacy","recorded","record of","snapshot","as of","migration note","decision record"]);if(i.length>0)return{docIntent:"historical-note",reasons:[`historical-note terms: ${i.join(", ")}`]};let o=mr(r,["current","standard","standards","must","should","policy","guide","guidance","workflow","contract","invariant","source of truth"]);return o.length>0?{docIntent:"current-guidance",reasons:[`current-guidance terms: ${o.join(", ")}`]}:{docIntent:"unknown",reasons:["no current-guidance or historical-note markers found"]}}function sm(e,t,n=[]){let r=e==="co-change"||n.length===0?null:cn.classifyCitation(n);return{actionTier:
|
|
767
|
-
`)}function jt(e){let t=e.indexOf("{"),n=e.lastIndexOf("}");if(t>=0&&n>t)return e.slice(t+1,n);let r=e.indexOf("=>");return r>=0?e.slice(r+2).replace(/;+\s*$/,""):e}function TG(e){return jt(e).split(/\r?\n/).map(n=>n.trim()).filter(n=>n.length>0).length}function FG(e){return kG("sha256").update(e).digest("hex").slice(0,16)}function Yx(e,t){let n=e.ageCommits??-1;return(t.ageCommits??-1)-n||e.file.localeCompare(t.file)||e.startLine-t.startLine}function Gx(e){return e.functions.reduce((t,n)=>t+n.loc,0)}var _G=new Set(Nt());function LG(e,t={}){let{includeHomonyms:n=!1,limit:r}=t,i=ri(e,t).filter(o=>o.relationship==="divergent"||n&&o.relationship==="homonym");return r?i.slice(0,r):i}function ri(e,t={}){let{scope:n,minSimilarity:r=.3,scanLimit:i}=t,o=MG(e,{scope:n,scanLimit:i});return Zx(o,{minSimilarity:r,isDelegatePair:iz(e)}).filter(s=>!s.members.some(a=>Go(e,a.file,a.startLine,"twin")))}function Zx(e,t={}){let n=t.minSimilarity??.3,r=t.isDelegatePair,i=e.filter(l=>!sR(l.leaf)&&!qG(l.leaf)&&G(l.file)!=="test"&&!Ie(l.symbol)&&!tR(l.symbol)&&!nR(l.symbol,l.leaf)),{recordsByLeaf:o,recordOrder:s}=E("twin-drift.group-by-leaf",()=>NG(i),()=>({records:i.length})),a=E("twin-drift.cluster-leaf-names",()=>eR([...o.keys()]),()=>({leaves:o.size}));return E("twin-drift.compare-clusters",()=>{let l=[];for(let u of a){let d=AG(u,o,s);if(d.length<2||new Set(d.map(x=>x.file)).size<2)continue;let m=null,f=!1,p=!1,g=new Set;for(let x=0;x<d.length;x+=1)for(let b=x+1;b<d.length;b+=1){let C=d[x],S=d[b];if(C.file===S.file||!XG(C,S)||r?.(C,S,d)||r?.(S,C,d))continue;if(f=!0,g.add(C.symbol),g.add(S.symbol),C.normalizedBody===S.normalizedBody){p=!0;continue}let v=WG(C.tokens,S.tokens);(!m||v>m.similarity)&&(m={a:C,b:S,similarity:v})}if(!f)continue;let y=d.filter(x=>g.has(x.symbol)).sort((x,b)=>x.file.localeCompare(b.file)||x.startLine-b.startLine).map(UG);if(!m){l.push({leaf:Qx(u),relationship:p?"identical":"homonym",maxDivergence:0,members:y});continue}let h=m.similarity>=n?"divergent":"homonym";l.push({leaf:Qx(u),relationship:h,maxDivergence:Math.round((1-m.similarity)*1e3)/1e3,members:y,...h==="divergent"?{firstDivergentTokens:GG(m.a.tokens,m.b.tokens)}:{}})}return l},()=>({clusters:a.length,records:i.length})).sort((l,u)=>u.members.length-l.members.length||u.maxDivergence-l.maxDivergence||l.leaf.localeCompare(u.leaf))}function NG(e){let t=new Map,n=new Map;for(let[r,i]of e.entries()){let o=t.get(i.leaf)??[];o.push(i),t.set(i.leaf,o),n.set(i,r)}return{recordsByLeaf:t,recordOrder:n}}function AG(e,t,n){let r=[...e].flatMap(i=>t.get(i)??[]);return e.size>1&&r.sort((i,o)=>(n.get(i)??0)-(n.get(o)??0)),r}function MG(e,t){let n=E("twin-drift.load-definitions",()=>xe(e,{scope:t.scope}).filter(o=>OG(o)&&!e.isIgnored(o.relativePath)).filter(o=>!zr(o.relativePath)));E("twin-drift.sort-definitions",()=>n.sort((o,s)=>o.relativePath.localeCompare(s.relativePath)||o.startLine-s.startLine),()=>({definitions:n.length}));let r=se(n,t.scanLimit),i=E("twin-drift.select-candidates",()=>jG(r),()=>({scanned:r.length}));return E("twin-drift.build-records",()=>{let o=[];for(let s of i){let a=BG(e,s);a&&o.push(a)}return o},()=>({candidates:i.length,scanned:r.length}))}function OG(e){return e.isFunctionLike?e.symbol.startsWith("rust-analyzer ")?typeof e.kind=="number"&&_G.has(e.kind):!0:!1}function jG(e){let t=e.filter(o=>o.leaf&&!sR(o.leaf)&&!Ie(o.symbol)&&!tR(o.symbol)&&!nR(o.symbol,o.leaf)),n=new Map;for(let o of t){let s=n.get(o.leaf)??[];s.push(o),n.set(o.leaf,s)}let r=eR([...n.keys()]),i=new Set;for(let o of r){let s=[...o].flatMap(a=>n.get(a)??[]);if(!(s.length<2)&&!(new Set(s.map(a=>a.relativePath)).size<2)&&!s.every(a=>G(a.relativePath)==="test"))for(let a of s)i.add(a)}return e.filter(o=>i.has(o))}function BG(e,t){if(!t.leaf)return null;let n=ln(e,t);if(!n||!le(t.symbol)&&!$G(n,t.leaf))return null;let r=st(jt(n)),i=r.replace(/\s+/g,"");if(!i||i.length<8)return null;let o=r.match(HG)??[];return o.length===0?null:{leaf:t.leaf,symbol:t.symbol,shortName:I(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:O(t),normalizedBody:i,tokens:o,isThinForwarder:iR(r)}}function $G(e,t){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`\\b(?:const|let|var)\\s+${n}(?:\\s*:[^=]+)?\\s*=\\s*(?:async\\s*)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>`,"s").test(e)}var HG=/[A-Za-z_$][A-Za-z0-9_$]*|\d+(?:\.\d+)?|[^\sA-Za-z0-9_$]/g;function UG(e){return{symbol:e.symbol,shortName:e.shortName,file:e.file,startLine:e.startLine,endLine:e.endLine,loc:e.loc}}function WG(e,t){let n=new Set(e),r=new Set(t);if(n.size===0&&r.size===0)return 1;if(n.size===0||r.size===0)return 0;let i=0;for(let s of n)r.has(s)&&(i+=1);let o=n.size+r.size-i;return o===0?0:i/o}function GG(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;let i=e.slice(r,r+6).join(" "),o=t.slice(r,r+6).join(" ");return!i&&!o?"(bodies differ only in trailing length)":`A: ${i||"(end)"} | B: ${o||"(end)"}`}function eR(e){let t=new Map;for(let s of e)t.set(s,s);let n=s=>{let a=s;for(;t.get(a)!==a;)a=t.get(a);let c=s;for(;t.get(c)!==a;){let l=t.get(c);t.set(c,a),c=l}return a},r=(s,a)=>{let c=n(s),l=n(a);c!==l&&t.set(c,l)},i=new Map;for(let s of e){let a=s.slice(0,2).toLowerCase(),c=i.get(a)??[];c.push(s),i.set(a,c)}for(let s of i.values())for(let a=0;a<s.length;a+=1)for(let c=a+1;c<s.length;c+=1)zG(s[a],s[c])&&r(s[a],s[c]);let o=new Map;for(let s of e){let a=n(s),c=o.get(a)??new Set;c.add(s),o.set(a,c)}return[...o.values()]}function zG(e,t){return e===t||e.toLowerCase()===t.toLowerCase()?!0:e.length<8||t.length<8||Math.abs(e.length-t.length)>2||VG(e.toLowerCase(),t.toLowerCase())/Math.max(e.length,t.length)<.8?!1:QG(e.toLowerCase(),t.toLowerCase(),2)}function VG(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;return r}function qG(e){return/^[A-Z][A-Z0-9_]*$/.test(e)||/^__[^_].*__$/.test(e)||KG.has(e.toLowerCase())}var KG=new Set(["main","row"]),JG=new Set(["app","component","components","feature","features","impl","index","lib","route","routes","shared","src","tsx","typescript","ui"]);function tR(e){return e.startsWith("rust-analyzer ")&&/\/(?:tests?|benches?)\//.test(e)}var YG=new Set(["default","new","reset"]);function nR(e,t){return e.startsWith("rust-analyzer ")&&YG.has(t.toLowerCase())}function XG(e,t){if(e.leaf.toLowerCase()!==t.leaf.toLowerCase()||e.leaf.length>4)return!0;let n=Xx(e);return[...Xx(t)].some(r=>n.has(r))}function Xx(e){let t=e.leaf.toLowerCase();return new Set(`${e.file}/${e.shortName}`.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(n=>n.length>2&&n!==t&&!JG.has(n)))}function QG(e,t,n){if(Math.abs(e.length-t.length)>n)return!1;let r=Array.from({length:t.length+1},(i,o)=>o);for(let i=1;i<=e.length;i+=1){let o=[i],s=o[0];for(let a=1;a<=t.length;a+=1){let c=e[i-1]===t[a-1]?0:1,l=Math.min(r[a]+1,o[a-1]+1,r[a-1]+c);o.push(l),s=Math.min(s,l)}if(s>n)return!1;r=o}return r[t.length]<=n}function rR(e){return iR(st(jt(e)))}function iR(e){let t=e.trim();if(!t||ZG.test(t))return!1;let n=nz(t);return n.length===0||n.length>2?!1:tz(n[n.length-1])}var ZG=/\b(?:if|else|for|while|switch|try|catch|do)\b/,ez=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[[^[\]]*\])*\((?:[^()]|\([^()]*\))*\)$/;function tz(e){let t=e.trim().replace(/^return\s+/,"").replace(/^await\s+/,"").replace(/;\s*$/,"").trim();return ez.test(t)}function nz(e){let t=[],n=0,r="";for(let i of e){if(i==="("||i==="["||i==="{"?n+=1:(i===")"||i==="]"||i==="}")&&(n=Math.max(0,n-1)),i===";"&&n===0){t.push(r),r="";continue}r+=i}return r.trim()&&t.push(r),t.map(i=>i.trim()).filter(i=>i.length>0)}var rz=3;function iz(e){let t=new Map;return(n,r,i)=>{if(!n.isThinForwarder)return!1;let o=`${n.symbol}\0${r.symbol}`,s=t.get(o);if(s!==void 0)return s;let a=oR(e,n,r,i,rz,new Set);return t.set(o,a),a}}function oR(e,t,n,r,i,o){if(i<=0||o.has(t.symbol)||(o.add(t.symbol),(hn(e,t.file)??[]).filter(c=>c.line>=t.startLine&&c.line<=t.endLine&&c.calleeLeaf===n.leaf).length===0))return!1;let a=new Set(Z(e,t.file).filter(c=>c.sourcePath&&(c.kind!=="namespace"||c.usedMembers.includes(n.leaf))).map(c=>c.sourcePath));if([...a].some(c=>Ve(c,n.file)))return!0;for(let c of r)if(!(c.symbol===t.symbol||c.symbol===n.symbol||!c.isThinForwarder)&&[...a].some(l=>Ve(l,c.file))&&oR(e,c,n,r,i-1,o))return!0;return!1}function sR(e){return e.startsWith("<")&&e.endsWith(">")}function Qx(e){return[...e].sort()[0]}import{readFileSync as oz,readdirSync as sz}from"fs";import{basename as az,join as um}from"path";function cz(e,t,n={}){let r=new Set(e),i=new Set(t),o=[...i].filter(a=>!r.has(a)).sort(),s=n.allowExtra?[]:[...r].filter(a=>!i.has(a)).sort();return{missing:o,extra:s}}function dm(e,t){let n=lz(e,t.file,t.keys);if(!n.ok)return{name:t.name,file:t.file,status:"unavailable",missing:[],extra:[],unavailableReason:n.reason};let r=gz(e.config.projectRoot,t.mustEqual),i=cz(n.keys,r,{allowExtra:t.allowExtra??!1}),o=i.missing.length>0||i.extra.length>0?"violated":"ok";return{name:t.name,file:t.file,status:o,missing:i.missing,extra:i.extra}}function cR(e,t){return t.map(n=>dm(e,n))}function lR(e,t){if(t.has(e.file))return!0;let n=e.mustEqual;switch(n.type){case"top-level-dirs":return[...t].some(r=>r===n.path||r.startsWith(`${n.path}/`));case"file-glob":return[...t].some(r=>Tn(n.pattern,r));case"registered-commands":return t.has("docs/COMMAND_REFERENCE.md");case"builtin-skills":return[...t].some(r=>r.startsWith("skills/"))}}function uR(e){if(e.status==="unavailable")return`[coverage-contract] ${e.name}: DISCLOSED \u2014 could not evaluate (${e.unavailableReason})`;let t=[];return e.missing.length>0&&t.push(`missing ${e.missing.join(", ")}`),e.extra.length>0&&t.push(`extra ${e.extra.join(", ")}`),`[coverage-contract] ${e.name}: ${t.join("; ")}`}function lz(e,t,n){return n.type==="markdown-list"?pz(e,t,n.marker):uz(e,t,n)}function uz(e,t,n){if(!k(e,t))return{ok:!1,reason:`file not found: ${t}`};let i=M(t);if(!i)return{ok:!1,reason:`unsupported file type for ${n.type} extraction: ${t}`};let o=K(e,t);if(!o)return{ok:!1,reason:`tree-sitter parser unavailable for ${i} (${t}) \u2014 contract skipped, not silently passed`,disclosedUnavailable:{language:i,reason:"parser-unavailable"}};let s=n.type==="object-literal-keys"?dz(o,n.identifier):fz(o,n.identifier);return s===null?{ok:!1,reason:`no ${n.type==="object-literal-keys"?"object literal":"string array"} named "${n.identifier}" found in ${t}`}:{ok:!0,keys:s}}function dR(e){let t=e.childForFieldName("value");return t?t.type==="as_expression"||t.type==="satisfies_expression"?t.namedChild(0):t:null}function dz(e,t){for(let n of e.rootNode.descendantsOfType("variable_declarator")){if(n.childForFieldName("name")?.text!==t)continue;let i=dR(n);if(i?.type==="object")return mz(i)}return null}function mz(e){let t=new Set;for(let n of e.namedChildren)if(n.type==="pair"){let r=n.childForFieldName("key");r&&t.add(mR(r.text))}else n.type==="shorthand_property_identifier"&&t.add(n.text);return[...t].sort()}function fz(e,t){for(let n of e.rootNode.descendantsOfType("variable_declarator")){if(n.childForFieldName("name")?.text!==t)continue;let i=dR(n);if(i?.type!=="array")continue;let o=new Set;for(let s of i.namedChildren)s.type==="string"&&o.add(mR(s.text));return[...o].sort()}return null}function mR(e){return e.length>=2&&(e[0]==="'"&&e.endsWith("'")||e[0]==='"'&&e.endsWith('"'))?e.slice(1,-1):e}function pz(e,t,n){let r=k(e,t);if(!r)return{ok:!1,reason:`file not found: ${t}`};let i=fR(r,n);return i===null?{ok:!1,reason:`no <!-- BEGIN GENERATED ${n} --> ... <!-- END GENERATED ${n} --> block in ${t}`}:{ok:!0,keys:pR(i)}}function fR(e,t){let n=$(t),i=new RegExp(`<!--\\s*BEGIN GENERATED ${n}\\s*-->([\\s\\S]*?)<!--\\s*END GENERATED ${n}\\s*-->`).exec(e);return i?i[1]:null}function pR(e){let t=new Set;for(let n of e.matchAll(/`([a-z][a-z0-9-]*)`/g))t.add(n[1]);for(let n of e.matchAll(/\[([a-z][a-z0-9-]*)\]\([^)]*\)/g))t.add(n[1]);return[...t].sort()}function gz(e,t){switch(t.type){case"top-level-dirs":return aR(um(e,t.path));case"file-glob":return[...new Set(Aa(e,t.pattern).map(n=>az(n)))].sort();case"registered-commands":return hz(e);case"builtin-skills":return aR(um(e,"skills"))}}function aR(e){let t;try{t=sz(e,{withFileTypes:!0})}catch{return[]}return t.filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(n=>n.name).sort()}function hz(e){let t;try{t=oz(um(e,"docs/COMMAND_REFERENCE.md"),"utf-8")}catch{return[]}let n=fR(t,"COMMAND REFERENCE");return n?pR(n):[]}import{writeFileSync as wV}from"fs";var me={dead:{minLoc:3,skipBarrels:!0,deadCodeOnly:!0},isolated:{minLoc:3},similar:{minSimilarity:.6,limit:50,minCallees:4},duplicateBodies:{maxLoc:15,limit:50},extract:{minLoc:15,minCallees:5,limit:50},wrappers:{maxLoc:15,limit:50},passthroughs:{maxLoc:15,limit:50},stale:{minLoc:3,limit:50},drift:{},twinDrift:{minSimilarity:.3}};import{existsSync as yz,readFileSync as bz}from"fs";import{isAbsolute as Sz,join as Cz}from"path";var xz=".scipquery-baseline.json";function mm(e){if(e.startsWith("similar:")){let t=e.slice(8).split("|");return t.length!==2?e:`similar:${t.map(I).sort().join("|")}`}if(e.startsWith("duplicate-bodies:")){let t=e.slice(17),n=t.indexOf(":");if(n<0)return e;let r=t.slice(0,n),i=t.slice(n+1).split("|");return i.length<2?e:`duplicate-bodies:${r}:${i.map(I).sort().join("|")}`}return e}function ii(e,t){return t&&Sz(t)?t:Cz(e.config.projectRoot,t??xz)}function tc(e,t,n={}){let r=ii(e,n.path);if(!yz(r))throw new Error(`No baseline found at ${r}. Create one with: scip-query health --write-baseline`);let o=(JSON.parse(bz(r,"utf-8")).findings??[]).map(mm),s=new Set(n.accept?o.filter(n.accept):o),a=new Set(t);return{baselinePath:r,baselineCount:s.size,current:[...t],newFindings:t.filter(c=>!s.has(c)),fixedFindings:[...s].filter(c=>!a.has(c))}}import Do from"path";function ko(e,t){let{scope:n,minDeviation:r=5,limit:i=50}=t??{},o=t?.semantic!==!1,s=t?.includePatternDeviations===!0,c=new F(e).fileDependencyGraph(n),l=ur(e,{scope:n}),u=Ez([...Rz(e,c,{scope:n,semantic:o}),...Iz(l.forbiddenEdges),...s?wz(c,r):[]]);return t?.includeArchitecture===!0&&(u.architecture=l),i<=0||u.results.length<=i?u:{...u,results:u.results.slice(0,i),totalResults:u.results.length}}function Rz(e,t,n){let r=kz(e,n.scope),i=[],o=new Set;for(let[a,c]of t){if(Po(a))continue;let l=r.get(a)??new Set;for(let u of c)Po(u)||l.has(u)||vz(e,a,u,n)||(i.push({file:a,dep:u}),o.add(a))}o.size>0&&_z(e,r,{paths:[...o]});let s=[];for(let{file:a,dep:c}of i)(r.get(a)??new Set).has(c)||s.push({file:a,kind:"unused-import",description:`Depends on ${c} but references none of its symbols`,dep:c,actionTier:"direct",evidenceReasons:[`dependency edge exists from ${a} to ${c}`,"no semantic, source, type-only, side-effect, or Vue-template usage survived the conservative skip gates"],recommendation:"Remove the unused import or dependency edge after running the project checks."});return s}function vz(e,t,n,r){return Az(e,t,n)||Mz(e,t,n)||Lz(n)||jz(e,t,n)||Oz(n)?!0:r.semantic&&Nz(e,t,n)}function Iz(e){return e.flatMap(t=>{let n=t.examples[0];return n?[{file:n.fromFile,kind:"architecture-violation",description:`${t.from} depends on forbidden boundary ${t.to} through ${t.fileEdgeCount} file edge(s)`,dep:n.toFile,detail:`${t.from} may not depend on ${t.to}`,actionTier:"direct",policyBasis:"explicit",architecture:{fromBoundary:t.from,toBoundary:t.to,fileEdgeCount:t.fileEdgeCount,importerCount:t.importerCount,importedFileCount:t.importedFileCount,examples:t.examples},evidenceReasons:[`configured dependency row for ${t.from} does not allow ${t.to}`,`${t.fileEdgeCount} file edge(s) connect ${t.importerCount} importer(s) to ${t.importedFileCount} imported file(s)`,...t.examples.map(r=>`${r.fromFile} imports ${r.toFile}`)],recommendation:"Move the dependency behind an allowed boundary, reverse the dependency through an owned interface, or deliberately update the project architecture rule."}]:[]})}function wz(e,t){let n=[];for(let[r,i]of Dz(e)){let o=i.filter(a=>!Po(a));if(o.length<t)continue;let s=Pz(e,o);for(let a of o)for(let c of e.get(a)??[])Po(c)||(s.get(c)??0)===1&&Do.dirname(c)!==r&&Do.dirname(c)!==Do.dirname(r)&&n.push({file:a,kind:"pattern-deviation",description:`Only file in ${r}/ that depends on ${c}`,dep:c,actionTier:"signal",evidenceReasons:[`${o.length} sibling file(s) in ${r}/ were compared`,`${a} is the only non-skipped sibling depending on ${c}`],recommendation:"Review sibling ownership before changing this import; unique dependency shape can be intentional specialization."})}return n}function Ez(e){let t=e.filter(n=>n.kind==="architecture-violation").length;return{results:e,unusedImports:e.filter(n=>n.kind==="unused-import").length,architectureViolations:t,layerViolations:t,patternDeviations:e.filter(n=>n.kind==="pattern-deviation").length}}function Dz(e){let t=new Map;for(let n of e.keys()){let r=Do.dirname(n),i=t.get(r);i||(i=[],t.set(r,i)),i.push(n)}return t}function Pz(e,t){let n=new Map;for(let r of t)for(let i of e.get(r)??[])Po(i)||n.set(i,(n.get(i)??0)+1);return n}function kz(e,t){let n=new Map;return Tz(e,n,t),n}function Tz(e,t,n){for(let r of Fz(e,n))gR(e,t,r.from_file,r.to_file)}function Fz(e,t){let n=t?"AND d1.relative_path LIKE ?":"",r=t?[`%${t}%`]:[];return e.all(`SELECT DISTINCT d1.relative_path AS from_file, d2.relative_path AS to_file
|
|
763
|
+
${e.pathExclusionsFor("ref_d")}`,...t,...n),i=new Map;for(let o of r){let s=i.get(o.symbol_id);s||(s=new Set,i.set(o.symbol_id,s)),s.add(o.relative_path)}return i}function em(e,t,n,r,i){if(e.isIgnored(r)||t.has(r))return;let o=n.get(r);o||(o=new Set,n.set(r,o)),o.add(i)}function HW(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function UW(e){return!(gn(e.symbol)||e.parentTypeName!==null&&!le(e.symbol))}function WW(e,t){return le(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}function rm(e){let[t,n]=ti(e,":"),r=t||"unknown",i=(o={})=>{let s=o.actionTier??GW(r);return{sourceAnalyzer:r,actionTier:s,rootCauseKey:o.rootCauseKey??(n||e),label:o.label??`${r} finding`,relatedFiles:o.relatedFiles??[],why:o.why??[],remediation:o.remediation??zW(s,r),file:o.file}};if(!n)return i({rootCauseKey:e,why:["Baseline identity did not include analyzer payload."]});if(["dead","isolated","extract","wrapper","passthrough","stale"].includes(r)){let[o,s]=ti(n,":");return i({file:o,relatedFiles:o?[o]:[],rootCauseKey:s?`${o}:${s}`:n,label:`${r} finding`,why:s?[`Baseline subject: ${s}.`]:[]})}if(r==="cycle"){let o=n.split(">").filter(Boolean);return i({relatedFiles:o,rootCauseKey:n,label:"cycle finding",why:o.length>0?[`Cycle path: ${o.join(" > ")}.`]:[]})}if(r==="similar"){let o=n.split("|").filter(Boolean);return i({relatedFiles:[],rootCauseKey:n,label:"similarity finding",why:o.length>0?[`Similar symbols: ${o.join(" | ")}.`]:[]})}if(r==="architecture"){let[o,s]=ti(n,":");if(o==="forbidden-edge"){let[a,c]=ti(s,":"),l=Ja(a),u=Ja(c);return i({actionTier:"direct",rootCauseKey:n,label:"architecture boundary violation",why:[`Declared boundary rule rejects ${l} -> ${u}.`],remediation:`Move the dependency behind an allowed boundary, or deliberately update the ${l} dependency rule and baseline.`})}if(o==="cycle"){let a=s.split("|").filter(Boolean).map(Ja);return i({actionTier:"direct",rootCauseKey:n,label:"forbidden architecture cycle",why:[`requireAcyclic rejects the connected boundary group: ${a.join(", ")}.`],remediation:"Break the boundary cycle, or deliberately revise the acyclicity rule and baseline."})}if(o==="missing-policy-row"){let a=Ja(s);return i({actionTier:"direct",rootCauseKey:n,label:"incomplete architecture policy",why:[`requireCompletePolicy rejects the missing outgoing dependency row for ${a}.`],remediation:`Declare the allowed outgoing dependencies for ${a}, including an empty row when it must depend on nothing.`})}}if(r==="drift"){let[o,s]=ti(n,":"),[a,c]=ti(s,":");return i({actionTier:o==="unused-import"?"direct":"signal",file:a,relatedFiles:[...new Set([a,c].filter(Boolean))],rootCauseKey:n,label:`${o||"drift"} finding`,why:[...o?[`Drift kind: ${o}.`]:[],...c?[`Related dependency: ${c}.`]:[]]})}return i({why:["Baseline analyzer prefix is not recognized by this diff-gate version."]})}function GW(e){switch(e){case"dead":case"isolated":case"cycle":case"passthrough":case"architecture":return"direct";case"similar":case"extract":case"wrapper":case"stale":return"signal";default:return"signal"}}function zW(e,t){return e==="direct"?`Fix the new ${t} baseline finding, or knowingly accept it via health --write-baseline.`:`Review the new ${t} baseline signal; fix it if it reflects real debt, or knowingly accept it via health --write-baseline.`}function ti(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+t.length)]}function Ja(e){try{return decodeURIComponent(e)}catch{return e}}import{existsSync as XW,readFileSync as Ox}from"fs";function Qa(e,t){let n=VW(e,t)??qW(e,t)??KW(e,t)??JW(e,t);return YW(e,n,t)}function VW(e,t){let n=-1,r=null;for(let i=0;i<=t;i+=1){let o=im(e[i]??"");o&&(r===null?(r=o,n=i):o===r&&(r=null,n=-1))}if(r===null||n<0)return null;for(let i=t+1;i<e.length;i+=1)if(im(e[i]??"")===r)return{start:n,end:i+1};return{start:n,end:e.length}}function im(e){let t=e.match(/^\s*(```+|~~~+)/);return t?t[1].startsWith("`")?"`":"~":null}function qW(e,t){if(!Ya(e[t]??""))return null;let n=t;for(;n>0&&Ya(e[n-1]??"");)n-=1;let r=t+1;for(;r<e.length&&Ya(e[r]??"");)r+=1;return{start:n,end:r}}function Ya(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.includes("|")}function KW(e,t){let n=t;for(;n>=0;){let o=e[n]??"";if(Xa(o)!==null)break;if(om(o)!==null)return null;n-=1}if(n<0)return null;let r=Xa(e[n]??"");if(r===null)return null;let i=n+1;for(;i<e.length;){let o=e[i]??"",s=Xa(o);if(s!==null){if(s<=r)break;i+=1;continue}if(om(o)!==null)break;i+=1}return{start:n,end:i}}function Xa(e){let t=e.match(/^(\s*)(?:[-*+]\s+|\d+[.)]\s+)/);return t?t[1].length:null}function JW(e,t){let n=e[t]??"";if(Mx(n)||n.trim().length===0)return{start:t,end:t+1};let r=t;for(;r>0&&Ax(e[r-1]??"");)r-=1;let i=t+1;for(;i<e.length&&Ax(e[i]??"");)i+=1;return{start:r,end:i}}function Ax(e){return om(e)===null}function om(e){return e.trim().length===0?"blank":Mx(e)?"heading":im(e)?"fence":Ya(e)?"table":Xa(e)!==null?"list":null}function Mx(e){return/^#{1,6}\s+/.test(e.trim())}function YW(e,t,n){let{start:r,end:i}=t;if(i-r>40){let s=Math.floor(20);r=Math.max(r,n-s),i=Math.min(i,r+40),r=Math.max(t.start,i-40)}let o=e.slice(r,i).join(`
|
|
764
|
+
`).trim();return o.length<=2e3?o:`${o.slice(0,2e3).trimEnd()}...`}function mr(e,t){return t.filter(n=>e.includes(n))}var QW=/<!--\s*scip-query:\s*snapshot\s*-->/i;function Za(e,t){if((e.config.docs?.snapshotPaths??[]).some(i=>Tn(i,t)))return!0;let r=P(e,t);return r.length>0&&QW.test(r)}var cn={classifyCitation:eG,citationContexts:tG,citationKindLabel:rG,citationRemediation:iG,referenceTargets:oG,hasLineAnchoredCitation:ZW};function ZW(e){return e.some(t=>(t.lineReferences?.length??0)>0)}function eG(e){let t=e.join(`
|
|
765
|
+
`).toLowerCase(),n=[],r=mr(t,[".scipquery","declaredcouplings","suppression","suppressions","config","configuration","json"]);if(r.length>0)return n.push(`configuration/example terms near citation: ${r.join(", ")}`),{citationKind:"configuration-example",actionTier:"support",reasons:n};let i=mr(t,["accepted","intentional","intentionally","retained","historical"]);if(i.length>0)return n.push(`intentional-record terms near citation: ${i.join(", ")}`),{citationKind:"intentional-record",actionTier:"support",reasons:n};let o=mr(t,["command","cli","usage","example","run","workflow"]);return o.length>0?(n.push(`guide/reference terms near citation: ${o.join(", ")}`),{citationKind:"guide-reference",actionTier:"signal",reasons:n}):(n.push(e.length>0?"citation appears in prose without config or guide markers":"citation context unavailable"),{citationKind:"behavioral-claim",actionTier:"direct",reasons:n})}function tG(e,t,n){let r;try{r=Ox(`${e.config.projectRoot}/${t}`,"utf-8").split(/\r?\n/)}catch{return[]}let i=n.flatMap(nG),o=[];for(let s=0;s<r.length;s+=1){let a=r[s]??"";i.some(c=>a.includes(c))&&o.push(Qa(r,s))}return o}function nG(e){let t=e.split("/");return[e,`./${e}`,t.slice(-3).join("/"),t.slice(-2).join("/")].filter((n,r,i)=>n.length>0&&i.indexOf(n)===r)}function rG(e){switch(e){case"behavioral-claim":return"a behavioral doc claim";case"configuration-example":return"a configuration example";case"guide-reference":return"a guide reference";case"intentional-record":return"an intentional record"}}function iG(e,t){switch(e){case"behavioral-claim":return`Re-read ${t} and update the behavioral claim or citation.`;case"configuration-example":return`Verify the configuration example in ${t} still points at the intended file; update only if the example target changed.`;case"guide-reference":return`Verify the guide reference in ${t} still sends readers to the right implementation or command surface.`;case"intentional-record":return`Verify the intentional citation in ${t} is still meant to name this file.`}}function oG(e,t,n){let r=qa(n),i=new Set;for(let o of t)sG(e,o,r.get(o)??[])&&i.add(o);return i}function sG(e,t,n){if(!aG.test(t))return!0;let r=`${e.config.projectRoot}/${t}`;if(!XW(r))return!0;if(n.length===0)return!1;let i=Ox(r,"utf-8").split(/\r?\n/),o=cG(i);for(let s of n)for(let a=s.startLine;a<=s.endLine;a+=1)if((i[a]??"").trim()!==""&&!o.has(a))return!0;return!1}var aG=/\.(?:[cm]?[jt]sx?)$/i;function cG(e){let t=new Set,n=!1;for(let r=0;r<e.length;r+=1){let i=e[r].trim();!n&&lG(i)&&(n=!0),n&&(t.add(r),i.endsWith(";")&&(n=!1))}return t}function lG(e){return/^import(?:\s|$)/.test(e)||/^export(?:\s+type)?\s+(?:\*|\{)/.test(e)}import{existsSync as Bx,readFileSync as am,statSync as uG}from"fs";import{join as ni}from"path";var jx=oe({kind:"doc-path-evidence",invalidation:J("doc-path-evidence"),serialize:wG,deserialize:EG}),wo=/\.(?:md|mdx|rst|txt)$/i;function dG(e){return/(?:^|\/)(?:docs\/plans|plans|adrs?|rfcs?|decisions|changelogs?|archive|reports?)\//i.test(e)||/(?:^|\/)CHANGELOG\.(?:md|mdx|rst|txt)$/i.test(e)}var mG=3,fG=/([A-Za-z0-9_@-]+(?:\/[A-Za-z0-9_.@-]+)+\.[A-Za-z0-9]{1,6})(?::([1-9][0-9]*))?\b/g;function pG(e,t={}){let{doc:n,limit:r=20,minCoupling:i=mG,includeSnapshotExcluded:o=!1}=t,s=bG(e,t.historyMode??"bounded");if(!s)return{available:!1,commitsAnalyzed:0,docsScanned:0,findings:[]};let a=[];for(let c of s.docFiles){if(n!==void 0&&!c.includes(n)||n===void 0&&!Hx(e,c)||n!==void 0&&!Bx(ni(e.config.projectRoot,c)))continue;let l=Za(e,c);if(l&&!o)continue;let{value:u,estimated:d}=gG(e,c,s.changeTimes.get(c)),m=hG(e,c),f=new Map,{resolved:p,broken:g,citations:y}=xG(e,c,s.tracked,s.trackedBySuffix,s.everSeenInHistory),h=new Map(y.map(b=>[b.file,b]));for(let b of p){if(b===c||wo.test(b))continue;let C=(s.changeTimes.get(b)??[]).filter(R=>R>u).length;if(C===0)continue;let S=h.get(b);f.set(b,{file:b,evidence:"reference",coChanges:0,changesSinceDocUpdate:C,...sm("reference",m,S?.contexts),citationContexts:S?.contexts,citedLines:S?.lineReferences})}for(let[b,C]of s.coupling.get(c)??[]){if(C<i||!s.tracked.has(b))continue;let S=(s.changeTimes.get(b)??[]).filter(v=>v>u).length;if(S===0)continue;let R=f.get(b);R?(R.evidence="both",R.coChanges=C,Object.assign(R,sm("both",m,R.citationContexts))):f.set(b,{file:b,evidence:"co-change",coChanges:C,changesSinceDocUpdate:S,...sm("co-change",m)})}if(f.size===0&&g.length===0)continue;let x=[...f.values()].sort((b,C)=>C.changesSinceDocUpdate-b.changesSinceDocUpdate);a.push({doc:c,docLastChangedAt:u,staleness:x.reduce((b,C)=>b+C.changesSinceDocUpdate,0)+g.length*10,subjects:x.slice(0,8),brokenReferences:g,...l?{snapshotExcluded:!0}:{},...d?{docLastChangedAtEstimated:!0}:{}})}return a.sort((c,l)=>l.staleness-c.staleness),{available:!0,commitsAnalyzed:s.historyCommitCount,docsScanned:s.docFiles.length,findings:a.slice(0,r)}}function gG(e,t,n){if(n&&n.length>0)return{value:Math.max(...n),estimated:!1};try{return{value:Math.floor(uG(ni(e.config.projectRoot,t)).mtimeMs/1e3),estimated:!0}}catch{return{value:0,estimated:!1}}}function hG(e,t){let n;try{n=am(ni(e.config.projectRoot,t),"utf8").slice(0,6e3)}catch{return{docIntent:"unknown",reasons:["doc text unavailable"]}}let r=`${t}
|
|
766
|
+
${n}`.toLowerCase(),i=mr(r,["historical note","historical record","history note","retrospective","postmortem","post-mortem","archived","archive","previously","legacy","recorded","record of","snapshot","as of","migration note","decision record"]);if(i.length>0)return{docIntent:"historical-note",reasons:[`historical-note terms: ${i.join(", ")}`]};let o=mr(r,["current","standard","standards","must","should","policy","guide","guidance","workflow","contract","invariant","source of truth"]);return o.length>0?{docIntent:"current-guidance",reasons:[`current-guidance terms: ${o.join(", ")}`]}:{docIntent:"unknown",reasons:["no current-guidance or historical-note markers found"]}}function sm(e,t,n=[]){let r=e==="co-change"||n.length===0?null:cn.classifyCitation(n);return{actionTier:yG(e,t.docIntent,r?.actionTier),docIntent:t.docIntent,docIntentReasons:t.reasons,...r?{citationKind:r.citationKind,citationKindReasons:r.reasons}:{}}}function yG(e,t,n){return t==="historical-note"?"support":n||(e==="co-change"?"signal":"direct")}function bG(e,t){let n=ze(e,{historyMode:t}),r=n.commitHistory();if(!r)return null;let i=n.trackedFiles()??new Set,o=new Map,s=new Map,a=new Set;for(let c of r.commits){let l=[...new Set(c.files)],u=l.filter(m=>wo.test(m)),d=l.filter(m=>!wo.test(m));for(let m of l){a.add(m);let f=o.get(m)??[];f.push(c.timestamp),o.set(m,f)}for(let m of u){let f=s.get(m);f||(f=new Map,s.set(m,f));for(let p of d)f.set(p,(f.get(p)??0)+1)}}return{changeTimes:o,coupling:s,docFiles:[...i].filter(c=>wo.test(c)),everSeenInHistory:a,historyCommitCount:r.commits.length,tracked:i,trackedBySuffix:Ux(i)}}function $x(e,t){if(t.size===0)return[];let n=U(),r=0,i=0,o=0,s=0,a=0,c=0;return E("doc-reference.docs-citing-files",()=>{let l=ze(e).trackedFiles()??new Set;r=l.size;let u=Ux(l),d=SG(t,u),m=[];for(let f of l){if(!Hx(e,f))continue;n&&(i+=1);let p;try{p=am(ni(e.config.projectRoot,f),"utf-8")}catch{n&&(o+=1);continue}if(!RG(p,d)){n&&(s+=1);continue}let g=Wx(e,f,p);if(!g)continue;n&&(a+=1);let y=CG(g.candidates,t,d,l,u);if(y.size===0)continue;let h=[...new Set([...y.values()].flatMap(S=>[...S]))],x=vG(g.contextsByCandidate,h),b=[...y].map(([S,R])=>({file:S,contexts:ec([...R].flatMap(v=>x.get(v)??[])).slice(0,3),lineReferences:tc([...R].flatMap(v=>g.lineReferencesByCandidate.get(v)??[]))})).filter(S=>S.contexts.length>0),C=[...y.keys()];if(C.length>0){n&&(c+=1);let S=C.sort();m.push({doc:f,cited:S,citations:b,citedClaims:ec(b.flatMap(R=>R.contexts)).slice(0,3)})}}return m},()=>({targets:t.size,trackedFiles:r,livingDocs:i,unreadableDocs:o,candidateMisses:s,evidenceDocs:a,citedDocs:c}))}function Hx(e,t){return wo.test(t)&&!dG(t)&&Bx(ni(e.config.projectRoot,t))}function Ux(e){let t=new Map;for(let n of e){let r=n.split("/");for(let i of[2,3]){if(r.length<i)continue;let o=r.slice(-i).join("/"),s=t.get(o)??[];s.push(n),t.set(o,s)}}return t}function SG(e,t){let n=new Set(e);for(let r of e){let i=r.split("/");for(let o of[2,3]){if(i.length<o)continue;let s=i.slice(-o).join("/"),a=t.get(s);a?.length===1&&a[0]===r&&n.add(s)}}return n}function CG(e,t,n,r,i){let o=new Map;for(let s of e){if(!n.has(s))continue;let a;if(t.has(s))a=s;else if(r.has(s))a=s;else{let l=i.get(s);l?.length===1&&(a=l[0])}if(!a||!t.has(a))continue;let c=o.get(a)??new Set;c.add(s),o.set(a,c)}return o}function xG(e,t,n,r,i){let o=new Set,s=new Set,a=Wx(e,t);if(!a)return{resolved:o,broken:[],citations:[]};let c=a.candidates,l=a.contextsByCandidate,u=a.lineReferencesByCandidate,d=new Map,m=new Map,f=(p,g)=>{let y=l.get(g);if(y&&y.length>0){let x=d.get(p)??[];x.push(...y),d.set(p,ec(x).slice(0,3))}let h=u.get(g);h&&h.length>0&&m.set(p,tc([...m.get(p)??[],...h]))};for(let p of c){if(n.has(p)){o.add(p),f(p,p);continue}let g=r.get(p);if(g&&g.length===1){o.add(g[0]),f(g[0],p);continue}g&&g.length>1||i.has(p)&&s.add(p)}return{resolved:o,broken:[...s],citations:[...d].map(([p,g])=>({file:p,contexts:g,lineReferences:m.get(p)}))}}function vG(e,t){let n=new Map;for(let r of t){let i=e.get(r);i&&i.length>0&&n.set(r,[...i])}return n}function Wx(e,t,n){let r=n;if(r===void 0)try{r=am(ni(e.config.projectRoot,t),"utf-8")}catch{return null}let i=ce(e,t,r),o=jx.read(e,t,i);if(o)return o;let s=IG(r);return jx.write(e,t,i,s),s}function RG(e,t){for(let n of t)if(e.includes(n))return!0;return!1}function IG(e){let t=e.split(/\r?\n/),n=new Set,r=new Map,i=new Map;for(let o=0;o<t.length;o+=1){let s=t[o]??"";for(let a of s.matchAll(fG)){let c=(a[1]??"").replace(/^\.?\//,"");if(c.length===0)continue;n.add(c);let l=a[2]?Number(a[2]):null;l!==null&&Number.isSafeInteger(l)&&i.set(c,tc([...i.get(c)??[],l]));let u=Qa(t,o);if(u.length===0)continue;let d=r.get(c)??[];d.push(u),r.set(c,ec(d).slice(0,3))}}return{candidates:[...n],contextsByCandidate:r,lineReferencesByCandidate:i}}function wG(e){let t={candidates:e.candidates,contextsByCandidate:[...e.contextsByCandidate.entries()],lineReferencesByCandidate:[...e.lineReferencesByCandidate.entries()]};return JSON.stringify(t)}function EG(e){try{let t=JSON.parse(e);if(!Et(t))return null;let n=Me(t.candidates),r=kG(t.contextsByCandidate),i=DG(t.lineReferencesByCandidate);return!n||!r?null:{candidates:n,contextsByCandidate:new Map(r),lineReferencesByCandidate:new Map(i??[])}}catch{return null}}function DG(e){if(e===void 0)return[];if(!Array.isArray(e))return null;let t=[];for(let n of e){if(!Array.isArray(n)||n.length!==2||typeof n[0]!="string"||!Array.isArray(n[1]))return null;let r=[];for(let i of n[1]){if(typeof i!="number"||!Number.isSafeInteger(i))return null;r.push(i)}t.push([n[0],tc(r)])}return t}function kG(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(!Array.isArray(n)||n.length!==2||typeof n[0]!="string")return null;let r=Me(n[1]);if(!r)return null;t.push([n[0],r])}return t}function ec(e){let t=[];for(let n of new Set(e))t.some(r=>PG(r,n))||t.push(n);return t}function tc(e){return[...new Set(e)].sort((t,n)=>t-n)}function PG(e,t){if(e===t)return!0;let n=e.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),r=t.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0),i=Math.min(n.length,r.length);if(i===0)return!1;if(i<3)return e.includes(t)||t.includes(e);let o=new Set(r),s=n.filter(a=>o.has(a)).length;return s>=3&&s/i>=.6}import{createHash as TG}from"crypto";var zx=3;function Eo(e,t={}){let{scope:n,maxLoc:r=15,minLoc:i=zx,limit:o,scanLimit:s}=t,a=Gd(e),c=Kx(e,{scope:n,maxLoc:r,scanLimit:s}).map(u=>Jx(e,u,a,i)).filter(u=>u!==null),l=qx(c);return o?l.slice(0,o):l}function cm(e,t,n={}){let{scope:r,maxLoc:i=15,minLoc:o=zx,scanLimit:s}=n,a=Gd(e),c=Kx(e,{scope:r,maxLoc:i,scanLimit:s}).map(u=>Jx(e,u,a,o)).filter(u=>u!==null),l=c.find(u=>u.symbol===t);return l?c.filter(u=>u.symbol!==l.symbol&&u.normalizedBody===l.normalizedBody&&u.file!==l.file).sort(Yx).map(({normalizedBody:u,...d})=>d):[]}function Vx(e){let t=jt(e);return st(t).replace(/\s+/g,"")}function qx(e){let t=new Map;for(let r of e){if(r.normalizedBody.length<8)continue;let i=_G(r.normalizedBody),o=t.get(i)??[];o.push(r),t.set(i,o)}let n=[];for(let[r,i]of t){let o=new Set(i.map(a=>a.file));if(i.length<2||o.size<2)continue;let s=[...i].sort(Yx).map(({normalizedBody:a,...c})=>c);n.push({hash:r,canonical:s[0],functions:s})}return n.sort((r,i)=>{let o=i.functions.length-r.functions.length;if(o!==0)return o;let s=Gx(i)-Gx(r);return s!==0?s:r.canonical.file.localeCompare(i.canonical.file)}),n}function Kx(e,t){let n=xe(e,{scope:t.scope}).filter(r=>r.isFunctionLike&&!e.isIgnored(r.relativePath)).filter(r=>!zo(e,r.relativePath,r.startLine,"similar")).filter(r=>O(r)<=t.maxLoc);return n.sort((r,i)=>O(i)-O(r)||r.relativePath.localeCompare(i.relativePath)),se(n,t.scanLimit)}function Jx(e,t,n,r){let i=ln(e,t);if(!i||FG(i)<r)return null;let o=lm(e,t);return o?{symbol:t.symbol,shortName:I(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:O(t),ageCommits:n?.get(t.relativePath)?.commitsAgo??null,normalizedBody:o}:null}function lm(e,t){let n=ln(e,t);return n&&Vx(n)||null}function ln(e,t){let n=Ce(e,t.relativePath);return n.length===0?null:n.slice(t.startLine,t.endLine+1).join(`
|
|
767
|
+
`)}function jt(e){let t=e.indexOf("{"),n=e.lastIndexOf("}");if(t>=0&&n>t)return e.slice(t+1,n);let r=e.indexOf("=>");return r>=0?e.slice(r+2).replace(/;+\s*$/,""):e}function FG(e){return jt(e).split(/\r?\n/).map(n=>n.trim()).filter(n=>n.length>0).length}function _G(e){return TG("sha256").update(e).digest("hex").slice(0,16)}function Yx(e,t){let n=e.ageCommits??-1;return(t.ageCommits??-1)-n||e.file.localeCompare(t.file)||e.startLine-t.startLine}function Gx(e){return e.functions.reduce((t,n)=>t+n.loc,0)}var LG=new Set(Nt());function NG(e,t={}){let{includeHomonyms:n=!1,limit:r}=t,i=ri(e,t).filter(o=>o.relationship==="divergent"||n&&o.relationship==="homonym");return r?i.slice(0,r):i}function ri(e,t={}){let{scope:n,minSimilarity:r=.3,scanLimit:i}=t,o=OG(e,{scope:n,scanLimit:i});return Zx(o,{minSimilarity:r,isDelegatePair:oz(e)}).filter(s=>!s.members.some(a=>zo(e,a.file,a.startLine,"twin")))}function Zx(e,t={}){let n=t.minSimilarity??.3,r=t.isDelegatePair,i=e.filter(l=>!sv(l.leaf)&&!KG(l.leaf)&&G(l.file)!=="test"&&!Ie(l.symbol)&&!tv(l.symbol)&&!nv(l.symbol,l.leaf)),{recordsByLeaf:o,recordOrder:s}=E("twin-drift.group-by-leaf",()=>AG(i),()=>({records:i.length})),a=E("twin-drift.cluster-leaf-names",()=>ev([...o.keys()]),()=>({leaves:o.size}));return E("twin-drift.compare-clusters",()=>{let l=[];for(let u of a){let d=MG(u,o,s);if(d.length<2||new Set(d.map(x=>x.file)).size<2)continue;let m=null,f=!1,p=!1,g=new Set;for(let x=0;x<d.length;x+=1)for(let b=x+1;b<d.length;b+=1){let C=d[x],S=d[b];if(C.file===S.file||!QG(C,S)||r?.(C,S,d)||r?.(S,C,d))continue;if(f=!0,g.add(C.symbol),g.add(S.symbol),C.normalizedBody===S.normalizedBody){p=!0;continue}let R=GG(C.tokens,S.tokens);(!m||R>m.similarity)&&(m={a:C,b:S,similarity:R})}if(!f)continue;let y=d.filter(x=>g.has(x.symbol)).sort((x,b)=>x.file.localeCompare(b.file)||x.startLine-b.startLine).map(WG);if(!m){l.push({leaf:Qx(u),relationship:p?"identical":"homonym",maxDivergence:0,members:y});continue}let h=m.similarity>=n?"divergent":"homonym";l.push({leaf:Qx(u),relationship:h,maxDivergence:Math.round((1-m.similarity)*1e3)/1e3,members:y,...h==="divergent"?{firstDivergentTokens:zG(m.a.tokens,m.b.tokens)}:{}})}return l},()=>({clusters:a.length,records:i.length})).sort((l,u)=>u.members.length-l.members.length||u.maxDivergence-l.maxDivergence||l.leaf.localeCompare(u.leaf))}function AG(e){let t=new Map,n=new Map;for(let[r,i]of e.entries()){let o=t.get(i.leaf)??[];o.push(i),t.set(i.leaf,o),n.set(i,r)}return{recordsByLeaf:t,recordOrder:n}}function MG(e,t,n){let r=[...e].flatMap(i=>t.get(i)??[]);return e.size>1&&r.sort((i,o)=>(n.get(i)??0)-(n.get(o)??0)),r}function OG(e,t){let n=E("twin-drift.load-definitions",()=>xe(e,{scope:t.scope}).filter(o=>jG(o)&&!e.isIgnored(o.relativePath)).filter(o=>!zr(o.relativePath)));E("twin-drift.sort-definitions",()=>n.sort((o,s)=>o.relativePath.localeCompare(s.relativePath)||o.startLine-s.startLine),()=>({definitions:n.length}));let r=se(n,t.scanLimit),i=E("twin-drift.select-candidates",()=>BG(r),()=>({scanned:r.length}));return E("twin-drift.build-records",()=>{let o=[];for(let s of i){let a=$G(e,s);a&&o.push(a)}return o},()=>({candidates:i.length,scanned:r.length}))}function jG(e){return e.isFunctionLike?e.symbol.startsWith("rust-analyzer ")?typeof e.kind=="number"&&LG.has(e.kind):!0:!1}function BG(e){let t=e.filter(o=>o.leaf&&!sv(o.leaf)&&!Ie(o.symbol)&&!tv(o.symbol)&&!nv(o.symbol,o.leaf)),n=new Map;for(let o of t){let s=n.get(o.leaf)??[];s.push(o),n.set(o.leaf,s)}let r=ev([...n.keys()]),i=new Set;for(let o of r){let s=[...o].flatMap(a=>n.get(a)??[]);if(!(s.length<2)&&!(new Set(s.map(a=>a.relativePath)).size<2)&&!s.every(a=>G(a.relativePath)==="test"))for(let a of s)i.add(a)}return e.filter(o=>i.has(o))}function $G(e,t){if(!t.leaf)return null;let n=ln(e,t);if(!n||!le(t.symbol)&&!HG(n,t.leaf))return null;let r=st(jt(n)),i=r.replace(/\s+/g,"");if(!i||i.length<8)return null;let o=r.match(UG)??[];return o.length===0?null:{leaf:t.leaf,symbol:t.symbol,shortName:I(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:O(t),normalizedBody:i,tokens:o,isThinForwarder:iv(r)}}function HG(e,t){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`\\b(?:const|let|var)\\s+${n}(?:\\s*:[^=]+)?\\s*=\\s*(?:async\\s*)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>`,"s").test(e)}var UG=/[A-Za-z_$][A-Za-z0-9_$]*|\d+(?:\.\d+)?|[^\sA-Za-z0-9_$]/g;function WG(e){return{symbol:e.symbol,shortName:e.shortName,file:e.file,startLine:e.startLine,endLine:e.endLine,loc:e.loc}}function GG(e,t){let n=new Set(e),r=new Set(t);if(n.size===0&&r.size===0)return 1;if(n.size===0||r.size===0)return 0;let i=0;for(let s of n)r.has(s)&&(i+=1);let o=n.size+r.size-i;return o===0?0:i/o}function zG(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;let i=e.slice(r,r+6).join(" "),o=t.slice(r,r+6).join(" ");return!i&&!o?"(bodies differ only in trailing length)":`A: ${i||"(end)"} | B: ${o||"(end)"}`}function ev(e){let t=new Map;for(let s of e)t.set(s,s);let n=s=>{let a=s;for(;t.get(a)!==a;)a=t.get(a);let c=s;for(;t.get(c)!==a;){let l=t.get(c);t.set(c,a),c=l}return a},r=(s,a)=>{let c=n(s),l=n(a);c!==l&&t.set(c,l)},i=new Map;for(let s of e){let a=s.slice(0,2).toLowerCase(),c=i.get(a)??[];c.push(s),i.set(a,c)}for(let s of i.values())for(let a=0;a<s.length;a+=1)for(let c=a+1;c<s.length;c+=1)VG(s[a],s[c])&&r(s[a],s[c]);let o=new Map;for(let s of e){let a=n(s),c=o.get(a)??new Set;c.add(s),o.set(a,c)}return[...o.values()]}function VG(e,t){return e===t||e.toLowerCase()===t.toLowerCase()?!0:e.length<8||t.length<8||Math.abs(e.length-t.length)>2||qG(e.toLowerCase(),t.toLowerCase())/Math.max(e.length,t.length)<.8?!1:ZG(e.toLowerCase(),t.toLowerCase(),2)}function qG(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;return r}function KG(e){return/^[A-Z][A-Z0-9_]*$/.test(e)||/^__[^_].*__$/.test(e)||JG.has(e.toLowerCase())}var JG=new Set(["main","row"]),YG=new Set(["app","component","components","feature","features","impl","index","lib","route","routes","shared","src","tsx","typescript","ui"]);function tv(e){return e.startsWith("rust-analyzer ")&&/\/(?:tests?|benches?)\//.test(e)}var XG=new Set(["default","new","reset"]);function nv(e,t){return e.startsWith("rust-analyzer ")&&XG.has(t.toLowerCase())}function QG(e,t){if(e.leaf.toLowerCase()!==t.leaf.toLowerCase()||e.leaf.length>4)return!0;let n=Xx(e);return[...Xx(t)].some(r=>n.has(r))}function Xx(e){let t=e.leaf.toLowerCase();return new Set(`${e.file}/${e.shortName}`.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(n=>n.length>2&&n!==t&&!YG.has(n)))}function ZG(e,t,n){if(Math.abs(e.length-t.length)>n)return!1;let r=Array.from({length:t.length+1},(i,o)=>o);for(let i=1;i<=e.length;i+=1){let o=[i],s=o[0];for(let a=1;a<=t.length;a+=1){let c=e[i-1]===t[a-1]?0:1,l=Math.min(r[a]+1,o[a-1]+1,r[a-1]+c);o.push(l),s=Math.min(s,l)}if(s>n)return!1;r=o}return r[t.length]<=n}function rv(e){return iv(st(jt(e)))}function iv(e){let t=e.trim();if(!t||ez.test(t))return!1;let n=rz(t);return n.length===0||n.length>2?!1:nz(n[n.length-1])}var ez=/\b(?:if|else|for|while|switch|try|catch|do)\b/,tz=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[[^[\]]*\])*\((?:[^()]|\([^()]*\))*\)$/;function nz(e){let t=e.trim().replace(/^return\s+/,"").replace(/^await\s+/,"").replace(/;\s*$/,"").trim();return tz.test(t)}function rz(e){let t=[],n=0,r="";for(let i of e){if(i==="("||i==="["||i==="{"?n+=1:(i===")"||i==="]"||i==="}")&&(n=Math.max(0,n-1)),i===";"&&n===0){t.push(r),r="";continue}r+=i}return r.trim()&&t.push(r),t.map(i=>i.trim()).filter(i=>i.length>0)}var iz=3;function oz(e){let t=new Map;return(n,r,i)=>{if(!n.isThinForwarder)return!1;let o=`${n.symbol}\0${r.symbol}`,s=t.get(o);if(s!==void 0)return s;let a=ov(e,n,r,i,iz,new Set);return t.set(o,a),a}}function ov(e,t,n,r,i,o){if(i<=0||o.has(t.symbol)||(o.add(t.symbol),(hn(e,t.file)??[]).filter(c=>c.line>=t.startLine&&c.line<=t.endLine&&c.calleeLeaf===n.leaf).length===0))return!1;let a=new Set(Z(e,t.file).filter(c=>c.sourcePath&&(c.kind!=="namespace"||c.usedMembers.includes(n.leaf))).map(c=>c.sourcePath));if([...a].some(c=>Ve(c,n.file)))return!0;for(let c of r)if(!(c.symbol===t.symbol||c.symbol===n.symbol||!c.isThinForwarder)&&[...a].some(l=>Ve(l,c.file))&&ov(e,c,n,r,i-1,o))return!0;return!1}function sv(e){return e.startsWith("<")&&e.endsWith(">")}function Qx(e){return[...e].sort()[0]}import{readFileSync as sz,readdirSync as az}from"fs";import{basename as cz,join as um}from"path";function lz(e,t,n={}){let r=new Set(e),i=new Set(t),o=[...i].filter(a=>!r.has(a)).sort(),s=n.allowExtra?[]:[...r].filter(a=>!i.has(a)).sort();return{missing:o,extra:s}}function dm(e,t){let n=uz(e,t.file,t.keys);if(!n.ok)return{name:t.name,file:t.file,status:"unavailable",missing:[],extra:[],unavailableReason:n.reason};let r=hz(e.config.projectRoot,t.mustEqual),i=lz(n.keys,r,{allowExtra:t.allowExtra??!1}),o=i.missing.length>0||i.extra.length>0?"violated":"ok";return{name:t.name,file:t.file,status:o,missing:i.missing,extra:i.extra}}function cv(e,t){return t.map(n=>dm(e,n))}function lv(e,t){if(t.has(e.file))return!0;let n=e.mustEqual;switch(n.type){case"top-level-dirs":return[...t].some(r=>r===n.path||r.startsWith(`${n.path}/`));case"file-glob":return[...t].some(r=>Tn(n.pattern,r));case"registered-commands":return t.has("docs/COMMAND_REFERENCE.md");case"builtin-skills":return[...t].some(r=>r.startsWith("skills/"))}}function uv(e){if(e.status==="unavailable")return`[coverage-contract] ${e.name}: DISCLOSED \u2014 could not evaluate (${e.unavailableReason})`;let t=[];return e.missing.length>0&&t.push(`missing ${e.missing.join(", ")}`),e.extra.length>0&&t.push(`extra ${e.extra.join(", ")}`),`[coverage-contract] ${e.name}: ${t.join("; ")}`}function uz(e,t,n){return n.type==="markdown-list"?gz(e,t,n.marker):dz(e,t,n)}function dz(e,t,n){if(!P(e,t))return{ok:!1,reason:`file not found: ${t}`};let i=M(t);if(!i)return{ok:!1,reason:`unsupported file type for ${n.type} extraction: ${t}`};let o=K(e,t);if(!o)return{ok:!1,reason:`tree-sitter parser unavailable for ${i} (${t}) \u2014 contract skipped, not silently passed`,disclosedUnavailable:{language:i,reason:"parser-unavailable"}};let s=n.type==="object-literal-keys"?mz(o,n.identifier):pz(o,n.identifier);return s===null?{ok:!1,reason:`no ${n.type==="object-literal-keys"?"object literal":"string array"} named "${n.identifier}" found in ${t}`}:{ok:!0,keys:s}}function dv(e){let t=e.childForFieldName("value");return t?t.type==="as_expression"||t.type==="satisfies_expression"?t.namedChild(0):t:null}function mz(e,t){for(let n of e.rootNode.descendantsOfType("variable_declarator")){if(n.childForFieldName("name")?.text!==t)continue;let i=dv(n);if(i?.type==="object")return fz(i)}return null}function fz(e){let t=new Set;for(let n of e.namedChildren)if(n.type==="pair"){let r=n.childForFieldName("key");r&&t.add(mv(r.text))}else n.type==="shorthand_property_identifier"&&t.add(n.text);return[...t].sort()}function pz(e,t){for(let n of e.rootNode.descendantsOfType("variable_declarator")){if(n.childForFieldName("name")?.text!==t)continue;let i=dv(n);if(i?.type!=="array")continue;let o=new Set;for(let s of i.namedChildren)s.type==="string"&&o.add(mv(s.text));return[...o].sort()}return null}function mv(e){return e.length>=2&&(e[0]==="'"&&e.endsWith("'")||e[0]==='"'&&e.endsWith('"'))?e.slice(1,-1):e}function gz(e,t,n){let r=P(e,t);if(!r)return{ok:!1,reason:`file not found: ${t}`};let i=fv(r,n);return i===null?{ok:!1,reason:`no <!-- BEGIN GENERATED ${n} --> ... <!-- END GENERATED ${n} --> block in ${t}`}:{ok:!0,keys:pv(i)}}function fv(e,t){let n=$(t),i=new RegExp(`<!--\\s*BEGIN GENERATED ${n}\\s*-->([\\s\\S]*?)<!--\\s*END GENERATED ${n}\\s*-->`).exec(e);return i?i[1]:null}function pv(e){let t=new Set;for(let n of e.matchAll(/`([a-z][a-z0-9-]*)`/g))t.add(n[1]);for(let n of e.matchAll(/\[([a-z][a-z0-9-]*)\]\([^)]*\)/g))t.add(n[1]);return[...t].sort()}function hz(e,t){switch(t.type){case"top-level-dirs":return av(um(e,t.path));case"file-glob":return[...new Set(Ma(e,t.pattern).map(n=>cz(n)))].sort();case"registered-commands":return yz(e);case"builtin-skills":return av(um(e,"skills"))}}function av(e){let t;try{t=az(e,{withFileTypes:!0})}catch{return[]}return t.filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(n=>n.name).sort()}function yz(e){let t;try{t=sz(um(e,"docs/COMMAND_REFERENCE.md"),"utf-8")}catch{return[]}let n=fv(t,"COMMAND REFERENCE");return n?pv(n):[]}import{writeFileSync as EV}from"fs";var me={dead:{minLoc:3,skipBarrels:!0,deadCodeOnly:!0},isolated:{minLoc:3},similar:{minSimilarity:.6,limit:50,minCallees:4},duplicateBodies:{maxLoc:15,limit:50},extract:{minLoc:15,minCallees:5,limit:50},wrappers:{maxLoc:15,limit:50},passthroughs:{maxLoc:15,limit:50},stale:{minLoc:3,limit:50},drift:{},twinDrift:{minSimilarity:.3}};import{existsSync as bz,readFileSync as Sz}from"fs";import{isAbsolute as Cz,join as xz}from"path";var vz=".scipquery-baseline.json";function mm(e){if(e.startsWith("similar:")){let t=e.slice(8).split("|");return t.length!==2?e:`similar:${t.map(I).sort().join("|")}`}if(e.startsWith("duplicate-bodies:")){let t=e.slice(17),n=t.indexOf(":");if(n<0)return e;let r=t.slice(0,n),i=t.slice(n+1).split("|");return i.length<2?e:`duplicate-bodies:${r}:${i.map(I).sort().join("|")}`}return e}function ii(e,t){return t&&Cz(t)?t:xz(e.config.projectRoot,t??vz)}function nc(e,t,n={}){let r=ii(e,n.path);if(!bz(r))throw new Error(`No baseline found at ${r}. Create one with: scip-query health --write-baseline`);let o=(JSON.parse(Sz(r,"utf-8")).findings??[]).map(mm),s=new Set(n.accept?o.filter(n.accept):o),a=new Set(t);return{baselinePath:r,baselineCount:s.size,current:[...t],newFindings:t.filter(c=>!s.has(c)),fixedFindings:[...s].filter(c=>!a.has(c))}}import Do from"path";function Po(e,t){let{scope:n,minDeviation:r=5,limit:i=50}=t??{},o=t?.semantic!==!1,s=t?.includePatternDeviations===!0,c=new F(e).fileDependencyGraph(n),l=ur(e,{scope:n}),u=Dz([...Rz(e,c,{scope:n,semantic:o}),...wz(l.forbiddenEdges),...s?Ez(c,r):[]]);return t?.includeArchitecture===!0&&(u.architecture=l),i<=0||u.results.length<=i?u:{...u,results:u.results.slice(0,i),totalResults:u.results.length}}function Rz(e,t,n){let r=Tz(e,n.scope),i=[],o=new Set;for(let[a,c]of t){if(ko(a))continue;let l=r.get(a)??new Set;for(let u of c)ko(u)||l.has(u)||Iz(e,a,u,n)||(i.push({file:a,dep:u}),o.add(a))}o.size>0&&Lz(e,r,{paths:[...o]});let s=[];for(let{file:a,dep:c}of i)(r.get(a)??new Set).has(c)||s.push({file:a,kind:"unused-import",description:`Depends on ${c} but references none of its symbols`,dep:c,actionTier:"direct",evidenceReasons:[`dependency edge exists from ${a} to ${c}`,"no semantic, source, type-only, side-effect, or Vue-template usage survived the conservative skip gates"],recommendation:"Remove the unused import or dependency edge after running the project checks."});return s}function Iz(e,t,n,r){return Mz(e,t,n)||Oz(e,t,n)||Nz(n)||Bz(e,t,n)||jz(n)?!0:r.semantic&&Az(e,t,n)}function wz(e){return e.flatMap(t=>{let n=t.examples[0];return n?[{file:n.fromFile,kind:"architecture-violation",description:`${t.from} depends on forbidden boundary ${t.to} through ${t.fileEdgeCount} file edge(s)`,dep:n.toFile,detail:`${t.from} may not depend on ${t.to}`,actionTier:"direct",policyBasis:"explicit",architecture:{fromBoundary:t.from,toBoundary:t.to,fileEdgeCount:t.fileEdgeCount,importerCount:t.importerCount,importedFileCount:t.importedFileCount,examples:t.examples},evidenceReasons:[`configured dependency row for ${t.from} does not allow ${t.to}`,`${t.fileEdgeCount} file edge(s) connect ${t.importerCount} importer(s) to ${t.importedFileCount} imported file(s)`,...t.examples.map(r=>`${r.fromFile} imports ${r.toFile}`)],recommendation:"Move the dependency behind an allowed boundary, reverse the dependency through an owned interface, or deliberately update the project architecture rule."}]:[]})}function Ez(e,t){let n=[];for(let[r,i]of kz(e)){let o=i.filter(a=>!ko(a));if(o.length<t)continue;let s=Pz(e,o);for(let a of o)for(let c of e.get(a)??[])ko(c)||(s.get(c)??0)===1&&Do.dirname(c)!==r&&Do.dirname(c)!==Do.dirname(r)&&n.push({file:a,kind:"pattern-deviation",description:`Only file in ${r}/ that depends on ${c}`,dep:c,actionTier:"signal",evidenceReasons:[`${o.length} sibling file(s) in ${r}/ were compared`,`${a} is the only non-skipped sibling depending on ${c}`],recommendation:"Review sibling ownership before changing this import; unique dependency shape can be intentional specialization."})}return n}function Dz(e){let t=e.filter(n=>n.kind==="architecture-violation").length;return{results:e,unusedImports:e.filter(n=>n.kind==="unused-import").length,architectureViolations:t,layerViolations:t,patternDeviations:e.filter(n=>n.kind==="pattern-deviation").length}}function kz(e){let t=new Map;for(let n of e.keys()){let r=Do.dirname(n),i=t.get(r);i||(i=[],t.set(r,i)),i.push(n)}return t}function Pz(e,t){let n=new Map;for(let r of t)for(let i of e.get(r)??[])ko(i)||n.set(i,(n.get(i)??0)+1);return n}function Tz(e,t){let n=new Map;return Fz(e,n,t),n}function Fz(e,t,n){for(let r of _z(e,n))gv(e,t,r.from_file,r.to_file)}function _z(e,t){let n=t?"AND d1.relative_path LIKE ?":"",r=t?[`%${t}%`]:[];return e.all(`SELECT DISTINCT d1.relative_path AS from_file, d2.relative_path AS to_file
|
|
768
768
|
FROM mentions m
|
|
769
769
|
JOIN chunks c ON m.chunk_id = c.id
|
|
770
770
|
JOIN documents d1 ON c.document_id = d1.id
|
|
@@ -780,23 +780,23 @@ ${n}`.toLowerCase(),i=mr(r,["historical note","historical record","history note"
|
|
|
780
780
|
WHERE d1.id != d2.id
|
|
781
781
|
AND m.role != 1
|
|
782
782
|
${e.pathExclusionsFor("d1","d2")}
|
|
783
|
-
${n}`,...r)}function
|
|
784
|
-
`),o=$(r);return new RegExp(`^\\s*export\\s+(?:default\\s+)?(?:(?:async\\s+)?function\\s+${o}\\b|(?:const|let|var)\\s+${o}\\b)`,"m").test(i)?!0:
|
|
785
|
-
`),o=Math.max(0,n-2),s=Math.min(i.length-1,n+2);for(let a=o;a<=s;a++){let l=(i[a]??"").replace(/^\s*\/\/.*$/g,"");if(/\b(?:export\s+)?(?:abstract\s+)?class\s+\w/.test(l))return"class";if(/\b(?:export\s+)?interface\s+\w/.test(l))return"interface";if(/\b(?:export\s+)?type\s+\w/.test(l))return"type";if(/\b(?:export\s+)?(?:const\s+)?enum\s+\w/.test(l))return"enum"}return"other"}function
|
|
786
|
-
`);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function
|
|
783
|
+
${n}`,...r)}function Lz(e,t,n={}){new F(e).scanSourceReferences({paths:n.paths??N(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},i=>{i.target.relativePath!==i.sourceFile&&(e.isIgnored(i.target.relativePath)||gv(e,t,i.sourceFile,i.target.relativePath))})}function gv(e,t,n,r){if(e.isIgnored(n)||e.isIgnored(r))return;let i=t.get(n);i||(i=new Set,t.set(n,i)),i.add(r)}function Nz(e){return e.includes("types")||e.endsWith(".d.ts")}function Az(e,t,n){let r=Gi(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.isUsed)}function Mz(e,t,n){let r=Z(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.used)}function Oz(e,t,n){let r=Z(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.every(i=>i.isTypeOnly===!0)}function jz(e){return e.endsWith(".vue")}function Bz(e,t,n){let r=Z(e,t).filter(i=>i.sourcePath===n);return r.length===0?!1:r.every(i=>i.kind==="side-effect"||i.kind==="namespace"&&i.usedMembers.length===0&&!i.used)}function ko(e){let t=G(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||$z(Do.basename(e)))}function $z(e){return!!(e==="index.ts"||e==="index.js"||e==="cli.ts"||e==="main.ts"||e==="main.rs"||e.includes("worker.")||e.includes("postinstall.")||e==="health.ts"||e==="health.js")}import{basename as hv,extname as yv}from"path";function rc(e,t,n,r,i,o){let s=new Set;Uz(e,t,n,r)&&s.add(i);for(let a of o)a.value&&Hz(s,a.label,a.value);return[...s].slice(0,6)}function Hz(e,t,n){let r=Wz(n);t.endsWith("name")&&Gz(r)&&e.add(`${t} has type-guard boundary shape`);for(let i of r){let o=zz.get(i);o&&e.add(`${t} has ${o} term: ${i}`)}}function Uz(e,t,n,r){if(n<=0)return!1;let i=Ce(e,t);if(i.length===0)return!1;for(let o=n-1;o>=0&&o>=n-5;o-=1){let s=(i[o]??"").trim();if(s!==""){if(mi(s)===r)return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function Wz(e){return e.replace(/([A-Z])([A-Z][a-z])/g,"$1 $2").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function Gz(e){return e.some(t=>Vz.has(t))&&e.some(t=>qz.has(t))}var zz=new Map([["access","access policy"],["accessible","access policy"],["adapter","adapter"],["adapters","adapter"],["allow","access policy"],["allowed","access policy"],["animation","animation calculation"],["api","api surface"],["apply","settings/application"],["audit","side-effect boundary"],["auth","authorization"],["authorize","authorization"],["audio","audio side-effect"],["can","access policy"],["capabilities","capability boundary"],["capability","capability boundary"],["boundary","boundary"],["begin","lifecycle"],["bridge","bridge"],["bridges","bridge"],["cache","state cache"],["chase","gameplay action"],["command","command boundary"],["context","context policy"],["cooldown","temporal state"],["cooldowns","temporal state"],["controller","controller"],["controllers","controller"],["diagnostic","diagnostics"],["diagnostics","diagnostics"],["effect","side-effect boundary"],["effects","side-effect boundary"],["energy","gameplay calculation"],["expired","temporal state"],["facade","facade"],["facades","facade"],["fire","gameplay action"],["gateway","gateway"],["gateways","gateway"],["guard","guard"],["guards","guard"],["haptic","haptic side-effect"],["haptics","haptic side-effect"],["head","sequence boundary"],["history","state history"],["input","input boundary"],["jump","gameplay action"],["keyboard","input boundary"],["log","side-effect boundary"],["logger","side-effect boundary"],["lock","coordination boundary"],["middleware","middleware"],["multiplier","gameplay calculation"],["mute","audio side-effect"],["normalize","normalization"],["normalise","normalization"],["normalizer","normalization"],["oscillate","animation calculation"],["oscillation","animation calculation"],["overlap","collision predicate"],["performance","diagnostics"],["permission","access policy"],["permissions","access policy"],["policy","policy"],["pool","state pool"],["pooled","state pool"],["pools","state pool"],["predict","prediction"],["presenter","presenter"],["presenters","presenter"],["projectile","gameplay entity"],["provider","provider boundary"],["providers","provider boundary"],["public","public surface"],["quality","settings/application"],["rate","calculation"],["register","registry"],["registry","registry"],["relay","relay"],["relays","relay"],["reseed","state lifecycle"],["reset","state lifecycle"],["respond","response boundary"],["response","response boundary"],["resolve","resolution"],["resolver","resolution"],["route","route boundary"],["routes","route boundary"],["run","lifecycle"],["sample","diagnostics"],["score","gameplay calculation"],["scope","scope policy"],["scroll","position state"],["scrolled","position state"],["seed","state lifecycle"],["seeded","state lifecycle"],["segment","segment boundary"],["segments","segment boundary"],["setting","settings/application"],["settings","settings/application"],["spawn","gameplay lifecycle"],["spawning","gameplay lifecycle"],["speed","gameplay calculation"],["surface","public surface"],["tail","sequence boundary"],["tick","temporal state"],["transaction","transaction"],["transactional","transaction"],["transform","transformation"],["transformer","transformation"],["translate","translation"],["translator","translation"],["try","fallible action"],["validate","validation"],["validation","validation"],["validator","validation"],["visual","diagnostics"],["window","settings/application"],["socket","transport boundary"],["websocket","transport boundary"]]),Vz=new Set(["can","has","is","should"]),qz=new Set(["access","api","auth","collision","expired","input","keyboard","overlap","permission","permissions","policy","projectile","response","route","routes","scope"]);function To(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new F(e);return gt({candidates:()=>tV(e,s,n,r),orderCandidates:_a,scanLimit:o,profile:{name:"passthrough-candidates"},prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>Kz(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:i})}function Kz(e,t,n){let r=eV(n);if(r.size!==1||!qc(e,t.relativePath,t.startLine,t.endLine))return null;let[,i]=[...r.entries()][0],o=Jz(e,t,i),s=Xz(e,t),a=o.length>0||s.length>0?"signal":"direct";return{symbol:t.symbol,shortName:I(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:O(t),forwardsTo:i.symbol,forwardsToShort:I(i.symbol),forwardsToFile:i.file,actionTier:a,boundaryEvidence:o,publicFacadeEvidence:s,recommendation:Yz(a,o,s)}}function Jz(e,t,n){return rc(e,t.relativePath,t.startLine,"passthrough","explicit ignore-passthrough comment",[{label:"passthrough name",value:I(t.symbol)},{label:"callee name",value:I(n.symbol)},{label:"passthrough module",value:hv(t.relativePath,yv(t.relativePath))},{label:"callee module",value:hv(n.file,yv(n.file))}])}function Yz(e,t,n){if(e==="signal"){if(n.length>0)return`Review the public API before inlining; public-facade evidence: ${n.slice(0,2).join("; ")}.`;let r=t.filter(Zz);return r.length>0?`Review the public API before inlining; public-surface evidence: ${r.slice(0,2).join("; ")}.`:`Review the boundary before inlining; boundary evidence: ${t.slice(0,2).join("; ")}.`}return"Inline or remove this passthrough unless an external API or runtime registration depends on the forwarding name."}function Xz(e,t){return Fo(e,t)?ar(e,t.relativePath)?["exported passthrough is declared on the package public surface"]:de(e,t.symbol,t.relativePath)?["exported passthrough matches configured or framework public entry surface"]:[]:[]}function Fo(e,t){let n=Ce(e,t.relativePath);if(n.length===0)return!1;let r=T(t.symbol);if(!r)return!1;let i=n.slice(Math.max(0,t.startLine-2),t.startLine+1).join(`
|
|
784
|
+
`),o=$(r);return new RegExp(`^\\s*export\\s+(?:default\\s+)?(?:(?:async\\s+)?function\\s+${o}\\b|(?:const|let|var)\\s+${o}\\b)`,"m").test(i)?!0:Qz(n,r)}function Qz(e,t){if(!t)return!1;let n=new RegExp(`^\\s*export\\s*\\{[^}\\n]*\\b${$(t)}\\b`);return e.some(r=>n.test(r))}function Zz(e){return e.includes("public surface")}function eV(e){let t=e.some(r=>te(r.symbol))?e.filter(r=>te(r.symbol)):e,n=new Map;for(let r of t)n.has(r.symbol)||n.set(r.symbol,r);return n}function tV(e,t,n,r){return t.productionCallableDefinitions({scope:n,minLoc:3,maxLoc:r,requireFunctionLikeSymbol:!0,excludeRustTraitImplMembers:!0}).filter(i=>!hi(e,i))}function _o(e,t){let{scope:n,minLoc:r=3,maxLoc:i=80,limit:o=30,includeLowConfidence:s=!1,scanLimit:a}=t??{},c=t?.semantic!==!1,l=new F(e),u=l.scopedDefinitions(n),d=fV(l,n),m={high:0,medium:1,low:2};return gt({candidates:()=>nV(e,l,u,{minLoc:r,maxLoc:i}),orderCandidates:(f,p)=>O(p)-O(f)||f.relativePath.localeCompare(p.relativePath),scanLimit:a,profile:{name:"stale-abstractions"},prepare:f=>{let p=iV(f),g=rV(e,l,f,p,{semantic:c}),y=f.filter(h=>{let x=ic(e,h,g,p);return x.realConsumers.length<=1&&!x.transitivelyReachable&&bv(h,x.realConsumers.length,d)});return{consumerFileMap:g,singletonBackedClassIds:aV(e,l,u,y,{semantic:c}),candidateIndex:p}},evaluate:(f,p)=>{if(p.singletonBackedClassIds.has(f.symbolId))return null;let g=ic(e,f,p.consumerFileMap,p.candidateIndex);if(g.transitivelyReachable||g.realConsumers.length>1||g.realConsumers.length===0&&g.barrelConsumers>0||!bv(g.definition,g.realConsumers.length,d))return null;let y=oV(e,g);return!s&&y.confidence==="low"?null:y},orderResults:(f,p)=>m[f.confidence]-m[p.confidence]||p.loc-f.loc||f.file.localeCompare(p.file)||f.startLine-p.startLine,limit:o})}function nV(e,t,n,r){return n.filter(i=>i.isTypeLike&&O(i)>=r.minLoc).filter(i=>O(i)<=r.maxLoc).filter(i=>!e.isIgnored(i.relativePath)).filter(i=>!i.relativePath.endsWith(".d.ts")).filter(i=>G(i.relativePath)!=="test").filter(i=>!de(e,i.symbol,i.relativePath)).filter(i=>!pV(i.symbol)).filter(i=>!t.hasSuppressionComment(i))}function fm(e,t,n,r){return an(sn(e,t).forDefinitions(n,{semantic:r.semantic,sourceFallback:r.sourceFallback}))}function rV(e,t,n,r,i){let o=fm(e,t,n,{semantic:!1,sourceFallback:!1}),s=n.filter(l=>{let u=ic(e,l,o,r);return u.realConsumers.length<=1&&!(u.realConsumers.length>0&&pm(l.relativePath))}),a=i.semantic&&s.length>0?on(o,fm(e,t,s,{semantic:!0,sourceFallback:!1})):o,c=s.filter(l=>ic(e,l,a,r).realConsumers.length<=1);return on(a,fm(e,t,c,{semantic:!1,sourceFallback:!0}))}function iV(e){let t=new Map;for(let n of e){let r=t.get(n.relativePath);r||(r=new Map,t.set(n.relativePath,r));let i=T(n.symbol);i&&r.set(i,n)}return t}function ic(e,t,n,r){let o=[...n.get(t.symbolId)??new Set].filter(u=>u!==t.relativePath&&!e.isIgnored(u)),{realConsumers:s,barrelConsumers:a,importOnlyConsumers:c}=Wa(e,t,o),l=gV(e,t,n,r);return{definition:t,realConsumers:s,barrelConsumers:a+c,transitivelyReachable:l}}function oV(e,t){let n=Cv(e,t.definition.relativePath,t.definition.startLine),r=pm(t.definition.relativePath)?!0:hV(e,t.definition),{confidence:i,reason:o}=yV(t.realConsumers.length,n,r),s=sV(t.realConsumers.length,n,r);return{symbol:t.definition.symbol,shortName:I(t.definition.symbol),file:t.definition.relativePath,startLine:t.definition.startLine,endLine:t.definition.endLine,loc:O(t.definition),consumers:t.realConsumers.length,barrelConsumers:t.barrelConsumers,kind:n,definerUsesType:r,confidence:i,reason:o,actionTier:s.actionTier,stalenessKind:s.stalenessKind,recommendation:s.recommendation}}function sV(e,t,n){return e===0?{actionTier:"direct",stalenessKind:"unused-abstraction",recommendation:"Delete the abstraction or wire the missing consumer after checking public/package surfaces."}:t==="class"?{actionTier:"signal",stalenessKind:"one-to-one-class-encapsulation",recommendation:"Treat as weak signal: a one-consumer class may be intentional encapsulation, so inline only after reviewing ownership and state boundaries."}:n?{actionTier:"signal",stalenessKind:"single-consumer-abstraction",recommendation:"Review whether this single-consumer abstraction earns its name or should be folded into the owning feature."}:{actionTier:"signal",stalenessKind:"misplaced-single-consumer-type",recommendation:"Review moving or co-locating the type with its only real consumer; keep it here only if this file owns the public contract."}}function aV(e,t,n,r,i){let o=lV(e,cV(n),r),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=an(sn(e,t).forDefinitions(s,{semantic:i.semantic,sourceFallback:!0})),c=new Set;for(let{singleton:l,classId:u}of o)dV(e,l,a)&&c.add(u);return c}function cV(e){let t=new Map;for(let n of e){let r=T(n.symbol);r&&t.set(Sv(n.relativePath,r),n)}return t}function lV(e,t,n){let r=[];for(let i of n){let o=uV(e,t,i);o&&r.push({singleton:o,classId:i.symbolId})}return r}function uV(e,t,n){if(Cv(e,n.relativePath,n.startLine)!=="class")return null;let r=T(n.symbol);if(!r)return null;let i=mV(e,n.relativePath,r);return i?t.get(Sv(n.relativePath,i))??null:null}function dV(e,t,n){let r=T(t.symbol),i=n.get(t.symbolId);return!r||!i?!1:[...i].some(o=>o!==t.relativePath&&!e.isIgnored(o)&&!Nd(e,o,r))}function Sv(e,t){return`${e}\0${t}`}function mV(e,t,n){let r=P(e,t);if(!r)return null;let i=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\bexport\\s+const\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*new\\s+${i}\\s*\\(`);return r.match(o)?.[1]??null}function fV(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function pV(e){let t=ye(e);if("kind"in t)return!1;let n=t.descriptors;if(n.length<2)return!1;let r=n[n.length-1],i=n[n.length-2];return r?.suffix==="type"&&i?.suffix==="type"}function pm(e){let n=(e.split("/").pop()??"").replace(/\.[^.]+$/,"");return!!(n==="types"||n.endsWith("-types")||n==="models"||n==="schema"||n==="common"||n==="protocol"||n==="proto"||n==="dto"||n==="mod"||n==="contracts"||/(^|\/)types(\/|\.)/.test(e)||/(^|\/)models?(\/|\.)/.test(e)||/(^|\/)proto(?:col)?(\/|\.)/.test(e)||/(^|\/)schema(\/|\.)/.test(e)||/(^|\/)contracts?(\/|\.)/.test(e))}function bv(e,t,n){return!(pm(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function gV(e,t,n,r){let i=Jc(e,t.relativePath),o=T(t.symbol);if(!o)return!1;let s=r.get(t.relativePath);if(!s)return!1;let a=[...i.get(o)??[]],c=new Set;for(;a.length>0;){let l=a.pop();if(c.has(l))continue;c.add(l);let u=s.get(l);if(!u)continue;let d=n.get(u.symbolId);if(d){for(let m of d)if(m!==t.relativePath&&!e.isIgnored(m))return!0}for(let m of i.get(l)??[])a.push(m)}return!1}function Cv(e,t,n){let r=P(e,t);if(!r)return"other";let i=r.split(`
|
|
785
|
+
`),o=Math.max(0,n-2),s=Math.min(i.length-1,n+2);for(let a=o;a<=s;a++){let l=(i[a]??"").replace(/^\s*\/\/.*$/g,"");if(/\b(?:export\s+)?(?:abstract\s+)?class\s+\w/.test(l))return"class";if(/\b(?:export\s+)?interface\s+\w/.test(l))return"interface";if(/\b(?:export\s+)?type\s+\w/.test(l))return"type";if(/\b(?:export\s+)?(?:const\s+)?enum\s+\w/.test(l))return"enum"}return"other"}function hV(e,t){let n=P(e,t.relativePath);if(!n)return!1;let r=T(t.symbol);if(!r)return!1;let i=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`\\b${i}\\b`),s=n.split(`
|
|
786
|
+
`);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function yV(e,t,n){return e===0?{confidence:"high",reason:"unused \u2014 no consumers and defining file has no real usage"}:e===1&&t==="class"?{confidence:"low",reason:"1 consumer + class kind \u2014 likely 1:1 encapsulation, not over-abstraction"}:e===1&&!n?{confidence:"high",reason:"1 consumer + defining file never uses it \u2014 type belongs with its consumer"}:{confidence:"medium",reason:"1 consumer \u2014 single-use abstraction"}}import{basename as oi,extname as oc}from"path";function Lo(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new F(e),a=RV(s.fileDependencyGraph(n));return gt({candidates:()=>CV(e,s,n,r),orderCandidates:_a,scanLimit:o,profile:{name:"wrapper-candidates"},prepare:c=>({callerFileMap:bV(e,s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>SV(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:i})}function bV(e,t,n,r){let i=sn(e,t),o=an(i.forDefinitions(n,{semantic:!1,sourceFallback:!1})),s=[];r.semantic&&E("wrapper.semantic-candidates",()=>{s=n.filter(m=>gm(e,t,m,o).length<=1)},()=>({symbols:n.length,semanticCandidates:s.length}));let a=s.length===0?new Map:an(i.forDefinitions(s,{semantic:!0,sourceFallback:!1})),c=a.size===0?o:on(o,a),l=new Map(n.map(m=>[m.symbolId,m])),u=new Map;for(let m of n){let f=gm(e,t,m,c);if(f.length>1||(u.set(m.symbolId,m),f.length!==1))continue;let p=f[0],g=xv(e,m.symbolId,p);if(!g)continue;let y=vv(t,e,p,m.symbol,g);y?.isFunctionLike&&l.has(y.symbolId)&&u.set(y.symbolId,l.get(y.symbolId))}let d=[...u.values()];return d.length===0?c:on(c,an(i.forDefinitions(d,{semantic:!1,sourceFallback:!0})))}function SV(e,t,n,r){let i=gm(e,t,n,r.callerFileMap);if(i.length!==1)return null;let o=i[0],s=xv(e,n.symbolId,o);if(!s)return null;let a=vv(t,e,o,n.symbol,s);if(a&&br(a.symbol))return null;let{fanIn:c,source:l}=xV(r.callerFileMap,r.reverseFanIn,o,a);if(l==="function"?c<=3:c<=5)return null;let u=wV(e,n,o,a);return{symbol:n.symbol,shortName:I(n.symbol),file:n.relativePath,startLine:n.startLine,endLine:n.endLine,loc:O(n),singleCaller:a?.symbol??"",singleCallerShort:a?.isFunctionLike?I(a.symbol):oi(o),callerFanIn:c,actionTier:u.length>0?"signal":"direct",boundaryEvidence:u}}function CV(e,t,n,r){return t.productionCallableDefinitions({scope:n,minLoc:2,maxLoc:r,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0,excludeRustTraitImplMembers:!0}).filter(i=>!hi(e,i))}function gm(e,t,n,r){let i=oi(n.relativePath,oc(n.relativePath)),o=[...r.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>oi(s,oc(s))!==i).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return Wa(e,n,o).realConsumers}function xv(e,t,n){return e.get(`SELECT c.start_line, c.end_line
|
|
787
787
|
FROM mentions m
|
|
788
788
|
JOIN chunks c ON m.chunk_id = c.id
|
|
789
789
|
JOIN documents d ON c.document_id = d.id
|
|
790
790
|
WHERE m.symbol_id = ? AND m.role != 1 AND d.relative_path = ?
|
|
791
|
-
LIMIT 1`,t,n)}function
|
|
792
|
-
`),{path:r,findingCount:n.length}}function ym(e,t={}){return
|
|
791
|
+
LIMIT 1`,t,n)}function vv(e,t,n,r,i){let o=e.definitionsForFile(n),s=vV(t,n,r,i.start_line,i.end_line);return Dt(o,s)}function xV(e,t,n,r){if(r?.isFunctionLike){let i=[...e.get(r.symbolId)??[]].filter(o=>o!==r.relativePath);if(i.length>0)return{fanIn:i.length,source:"function"}}return{fanIn:IV(t,n),source:"file"}}function vV(e,t,n,r,i){let o=T(n);if(!o)return r;let s=Qt(e,t).get(o);if(!s||s.length===0)return r;for(let a of s)if(a>=r&&a<=i)return a;return r}function RV(e){let t=new Map;for(let[n,r]of e){t.has(n)||t.set(n,t.get(n)??0);for(let i of r)t.set(i,(t.get(i)??0)+1)}return t}function IV(e,t){let n=e.get(t)??0;if(n>0)return n;let r=oi(t,oc(t)),i=0;for(let[o,s]of e)o!==t&&oi(o,oc(o))===r&&s>i&&(i=s);return i}function wV(e,t,n,r){return rc(e,t.relativePath,t.startLine,"wrapper","explicit ignore-wrapper comment",[{label:"wrapper name",value:I(t.symbol)},{label:"caller name",value:r?.symbol?I(r.symbol):oi(n)},{label:"wrapper path",value:t.relativePath},{label:"caller path",value:n}])}var DV=25e3,kV=2500,PV=2500;function TV(e){let t=cr(e);return t.symbols>=DV||t.documents>=kV?PV:void 0}function hm(e,t={}){let{scope:n}=t,r=TV(e),i=[],o=lr(e,{scope:n,...me.dead,scanLimit:r});for(let s of o.symbols)De(e,s.relativePath)||de(e,s.symbol,s.relativePath)||s.kind==="dead-code"&&i.push(`dead:${s.relativePath}:${s.shortName}`);for(let s of fo(e,{scope:n,...me.isolated,scanLimit:r}))De(e,s.relativePath)||de(e,s.symbol,s.relativePath)||i.push(`isolated:${s.relativePath}:${s.shortName}`);for(let s of uo(e,{scope:n}))s.kind==="real"&&i.push(`cycle:${FV(s.path)}`);for(let s of po(e,{scope:n,...me.similar,scanLimit:r}))i.push(`similar:${[s.symbolA,s.symbolB].sort().join("|")}`);for(let s of Eo(e,{scope:n,...me.duplicateBodies,scanLimit:r}))i.push(`duplicate-bodies:${s.hash}:${s.functions.map(a=>a.symbol).sort().join("|")}`);for(let s of So(e,{scope:n,...me.extract,scanLimit:r}))i.push(`extract:${s.relativePath}:${s.shortName}`);for(let s of Lo(e,{scope:n,...me.wrappers,scanLimit:r}))i.push(`wrapper:${s.file}:${s.shortName}`);for(let s of To(e,{scope:n,...me.passthroughs,scanLimit:r}))i.push(`passthrough:${s.file}:${s.shortName}`);for(let s of _o(e,{scope:n,...me.stale,scanLimit:r}))i.push(`stale:${s.file}:${s.shortName}`);for(let s of Po(e,{scope:n,...me.drift,includePatternDeviations:!1,limit:Number.POSITIVE_INFINITY}).results)s.kind!=="architecture-violation"&&i.push(`drift:${s.kind}:${s.file}:${s.dep}`);return i.push(...Oa(ur(e,{scope:n}))),[...new Set(i.map(mm))].sort()}function FV(e){if(e.length===0)return"";let t=0;for(let n=1;n<e.length;n++)e[n]<e[t]&&(t=n);return[...e.slice(t),...e.slice(0,t)].join(">")}function _V(e,t={}){let n=hm(e,{scope:t.scope}),r=ii(e,t.path);return EV(r,JSON.stringify({version:1,findings:n},null,2)+`
|
|
792
|
+
`),{path:r,findingCount:n.length}}function ym(e,t={}){return nc(e,hm(e,{scope:t.scope}),{path:t.path})}function Rv(e,t={}){let n=Oa(ur(e,{scope:t.scope}));return nc(e,n,{path:t.path,accept:r=>r.startsWith(vt)})}var LV=5;function Sm(e,t={}){let{base:n="HEAD",minContainment:r=.7,minCallees:i=3,minSiteCoverage:o=.4,maxHelpers:s=Number.POSITIVE_INFINITY,limit:a=20,scanLimit:c}=t,l=t.semantic!==!1,u=t.diffPlan??An(e,{base:n}),d={available:u.note!==vo,base:n,changedFiles:u.changedFiles,helpersChecked:0,skipped:[],findings:[]};if(!d.available||u.changedFiles.length===0)return d;let m=new F(e),f=new Set(u.changedFiles),p=new Map(u.renamedFiles.map(v=>[v.to,v.from])),g=t.baseContentAt??Ro(e.config.projectRoot,n,Io(u)),y=BV(m,f,p,g);if(y.length===0)return d;let h=y.slice(0,s);y.length>s&&(d.note=`helper scoring capped at ${s} of ${y.length} new symbols`);let x=m.calleeMap(h,{semantic:l}),b=h.map(v=>({def:v,callees:Ba((x.get(v.symbolId)??[]).map(D=>D.symbol))})),C=Xr(e),S,R=()=>(S??=C.calleeIndex({minCallees:Math.min(3,i),scanLimit:c,semantic:l}),S);for(let{def:v,callees:D}of b){let w=I(v.symbol);if(D.size<i){d.skipped.push({helperShortName:w,helperFile:v.relativePath,reason:`fewer than ${i} meaningful callees \u2014 too small to score`});continue}let k=R(),L=jV(D,k);if(L===0){d.skipped.push({helperShortName:w,helperFile:v.relativePath,reason:"helper callee pattern is all project-wide infrastructure \u2014 too generic to score"});continue}let re=$V(e,v.symbolId);if(re.length===0){d.skipped.push({helperShortName:w,helperFile:v.relativePath,reason:"no references yet \u2014 covered by the new-dead check"});continue}d.helpersChecked+=1;let Q=NV({candidateIndex:k,changed:f,helperCallees:D,helperFile:v.relativePath,helperSymbol:v.symbol,minContainment:r,minSiteCoverage:o,migratedFiles:re});Q.length!==0&&(Q.sort((_,ae)=>Iv(ae.migrationScope)-Iv(_.migrationScope)||ae.containment-_.containment||ae.siteCoverage-_.siteCoverage||_.file.localeCompare(ae.file)),d.findings.push({helperSymbol:v.symbol,helperShortName:w,helperFile:v.relativePath,helperShape:"specific-callee-cluster",helperCalleeCount:D.size,specificHelperCalleeCount:L,migratedFiles:re.sort(),leftovers:Q.slice(0,LV)}))}return d.findings.sort((v,D)=>(D.leftovers[0]?.containment??0)-(v.leftovers[0]?.containment??0)||v.helperFile.localeCompare(D.helperFile)),d.findings=d.findings.slice(0,a),d}function NV(e){let t=[],n=AV(e.helperSymbol,e.helperFile,e.migratedFiles),r=new Set;for(let i of e.helperCallees)for(let o of e.candidateIndex.candidateIndexesByCallee.get(i)??[])r.add(o);for(let i of r){let o=e.candidateIndex.corpus[i];if(o.symbol===e.helperSymbol||e.changed.has(o.file)||o.callees.has(e.helperSymbol))continue;let s=bC(e.helperCallees,o.callees);if(s<e.minContainment)continue;let a=[...e.helperCallees].filter(u=>o.callees.has(u)),c=o.callees.size===0?0:a.length/o.callees.size;if(c<e.minSiteCoverage||!a.some(u=>(e.candidateIndex.docFreq.get(u)??0)<=e.candidateIndex.ubiquityThreshold))continue;let l=MV(n,o.symbol,o.file);t.push({symbol:o.symbol,shortName:I(o.symbol),file:o.file,...l,containment:s,siteCoverage:c,uniqueSiteCalleeCount:Math.max(0,o.callees.size-a.length),sharedCallees:a.map(I).sort()})}return t}function Iv(e){return e==="same-scope"?2:e==="unknown"?1:0}function AV(e,t,n){let r=new Set([...bm(t),...Cm(T(e))]);for(let i of n)for(let o of bm(i))r.add(o);return r}function MV(e,t,n){let r=new Set([...bm(n),...Cm(T(t))]);if(e.size===0||r.size===0)return{migrationScope:"unknown",migrationScopeReasons:["insufficient path/name tokens to infer migration scope"]};let i=[...r].filter(o=>e.has(o)).sort();return i.length>0?{migrationScope:"same-scope",migrationScopeReasons:[`shares migration-scope token(s): ${i.slice(0,5).join(", ")}`]}:{migrationScope:"possible-subtype",migrationScopeReasons:["no path/name tokens shared with the helper or already migrated files"]}}var OV=new Set(["app","apps","common","component","components","helper","helpers","index","lib","package","packages","page","pages","route","routes","service","services","shared","spec","src","test","tests","util","utils"]);function bm(e){return Cm(e.replace(/\.[^.]+$/,""))}function Cm(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1&&!OV.has(t))}function jV(e,t){let n=0;for(let r of e)(t.docFreq.get(r)??0)<=t.ubiquityThreshold&&(n+=1);return n}function BV(e,t,n,r){return e.productionCallableDefinitions({files:[...t],requireFunctionLikeSymbol:!0}).filter(i=>{if(!t.has(i.relativePath))return!1;let o=n.get(i.relativePath)??i.relativePath,s=r(o);return s===null||!new RegExp(`\\b${$(i.leaf)}\\b`).test(s)})}function $V(e,t){return e.all(`SELECT DISTINCT ref_d.relative_path
|
|
793
793
|
FROM mentions m
|
|
794
794
|
JOIN chunks c ON m.chunk_id = c.id
|
|
795
795
|
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
796
796
|
WHERE m.symbol_id = ?
|
|
797
797
|
AND m.role != 1
|
|
798
|
-
${e.pathExclusionsFor("ref_d")}`,t).map(r=>r.relative_path)}function xm(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=new F(e);return gt({candidates:()=>o.productionCallableDefinitions({scope:n,files:t.files,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}),filterCandidate:s
|
|
799
|
-
`),{path:i}}function ER(e){let t=wR(e);if(!UV(t))return{suppressions:[],warnings:[]};let n=[],r=[];for(let i of GV(t).sort()){if(!i.endsWith(".json"))continue;let o=oc(t,i),s;try{s=JSON.parse(zV(o,"utf-8"))}catch{r.push(`${No}/${i}: malformed JSON \u2014 ignored`);continue}if(typeof s!="object"||s===null||Array.isArray(s)){r.push(`${No}/${i}: not a suppression object \u2014 ignored`);continue}let a=s;if(typeof a.reason!="string"||a.reason.trim()===""){r.push(`${No}/${i}: missing reason \u2014 ignored`);continue}if(!a.id&&!a.check){r.push(`${No}/${i}: needs an id or a check \u2014 ignored`);continue}n.push(a)}return{suppressions:n,warnings:r}}var YV=["echo","incomplete-migration","co-change-partner","twin-partner","coverage-contract","architecture","doc-reference","unused-params","new-dead","baseline"];function XV(e,t={}){let n=t.base??"HEAD",{minTogether:r=6,minConfidence:i=.6,maxEchoChecks:o=Number.POSITIVE_INFINITY,maxHelpers:s=Number.POSITIVE_INFINITY,minSimilarity:a=.8,includeBaseline:c=!1,scanLimit:l}=t,u=t.semantic!==!1,d=t.historyMode??"bounded",m=new Set(t.skip??[]),f=An(e,{base:n}),p=ei(e,{base:n,plan:f}),g=p.changedFiles,y=new Set(g),h=new Set(f.changedFileLines),x=new Set([...y,...h]),b=vo(e.config.projectRoot,n,Io(f,g)),C=Eq(e.config.projectRoot,n,f,b),S={base:n,changedFiles:g,changedSymbols:p.changedSymbols.length,checksRun:[],skipped:[],suppressed:[],findings:[],attributionNotes:p.attributionNotes,rootCauseGroups:[],note:p.summary.note};if(g.length===0)return S;let v=(R,D)=>{if(m.has(R)){S.skipped.push({check:R,reason:"skipped via --skip"});return}let w=S.findings.length,P=S.skipped.length,L=S.checksRun.length;E(`diff-gate.check.${R}`,D,()=>({check:R,changedFiles:g.length,changedSymbols:p.changedSymbols.length,findingsAdded:S.findings.length-w,skippedAdded:S.skipped.length-P,checksRunAdded:S.checksRun.length-L}))};return v("echo",()=>rq(e,p.changedSymbols,y,C,o,a,l,u,S)),v("incomplete-migration",()=>lq(e,n,f,s,l,u,b,S)),v("co-change-partner",()=>uq(e,x,r,i,d,S)),v("twin-partner",()=>dq(e,p.changedSymbols,y,l,S)),v("coverage-contract",()=>mq(e,x,S)),v("architecture",()=>kq(e,S)),v("doc-reference",()=>yq(e,y,h,f.changedRanges,f.renamedFiles,S)),v("unused-params",()=>xq(e,g,S)),v("new-dead",()=>Rq(e,p.changedSymbols,C,S)),c&&v("baseline",()=>Pq(e,S)),tq(S,[...e.config.suppressions??[],...ER(e.config.projectRoot).suppressions]),S.rootCauseGroups=eq(S.findings),S}function QV(e){return e.checksRun.length===0&&e.note===Ro}function ZV(e){return e.filter(t=>!t.advisory)}function eq(e){let t=new Map;for(let n of e){let r=n.groupKey??`${n.check}:${n.id}`,i=t.get(r);i||(i={groupKey:r,check:n.check,severity:n.severity,actionTier:n.actionTier,sourceAnalyzer:n.sourceAnalyzer,rootCauseKey:n.rootCauseKey,count:0,findingIds:[],files:new Set,relatedFiles:new Set,message:n.message,remediation:n.remediation},t.set(r,i)),i.count+=1,i.findingIds.push(n.id),i.severity=_R(i.severity,n.severity),i.actionTier=LR(i.actionTier,n.actionTier),n.file&&i.files.add(n.file);for(let o of n.relatedFiles??[])i.relatedFiles.add(o)}return[...t.values()].map(n=>({...n,files:[...n.files].sort(),relatedFiles:[...n.relatedFiles].sort()})).sort((n,r)=>r.count-n.count||sc(r.severity)-sc(n.severity)||n.groupKey.localeCompare(r.groupKey))}function _R(e,t){return sc(t)>sc(e)?t:e}function sc(e){return e==="error"?2:e==="warning"?1:0}function LR(e,t){return e?t&&DR(t)>DR(e)?t:e:t}function DR(e){return e==="direct"?2:e==="signal"?1:0}function tq(e,t){if(t.length===0||e.findings.length===0)return;let n=[];for(let r of e.findings){let i=t.find(o=>nq(o,r));i?e.suppressed.push({finding:r,suppression:i}):n.push(r)}e.findings=n}function nq(e,t){return!e.reason||e.reason.trim()===""||e.expiresAt&&Date.parse(e.expiresAt)<=Date.now()||e.id&&e.id!==t.id&&!t.legacySuppressionIds?.includes(e.id)||e.check&&e.check!==t.check||e.file&&e.file!==t.file?!1:!!(e.id||e.check)}function Bt(e,t){e.findings.push({...t,suppressionHint:`scip-query: ignore ${t.check} ${t.id} -- <reason>`})}function rq(e,t,n,r,i,o,s,a,c){c.checksRun.push("echo");for(let l of t.slice(0,i)){if(!le(l.symbol)||r(l))continue;let u=cm(e,l.symbol,{maxLoc:15,scanLimit:s}).filter(h=>!n.has(h.file)).slice(0,5).map(h=>({otherFile:h.file,otherShort:h.shortName,otherSymbol:h.symbol,similarity:1,similarityBasis:"exact-body",sharedEvidence:[`exact normalized body (${h.loc} LOC)`]}));if(u.length>0){let h=ve("echo",l.symbol,l.file),x=ve("echo",l.symbol,l.file,...u.map(C=>`${C.otherSymbol}|${C.otherFile}`).sort()),b=u[0];Bt(c,{id:h,legacySuppressionIds:x===h?void 0:[x],groupKey:h,actionTier:"direct",check:"echo",severity:"warning",evidence:"heuristic",confidence:1,file:l.file,symbol:l.symbol,relatedFiles:[...new Set(u.map(C=>C.otherFile))].sort(),sourceAnalyzer:"duplicate-bodies",rootCauseKey:`${l.symbol}:${b.otherSymbol}`,message:kR(l,u),why:TR(l,u),remediation:FR("direct",l.shortName,b.otherShort)});continue}let d=Oa(e,l.symbol,{minSimilarity:o,limit:5,scanLimit:s,semantic:a,sourceCandidateMode:"target-pruned"}),m=[];for(let h of d){let x=h.fileA===l.file?h.fileB:h.fileA,b=h.fileA===l.file?h.shortNameB:h.shortNameA,C=h.fileA===l.file?h.symbolB:h.symbolA;n.has(x)||m.push({otherFile:x,otherShort:b,otherSymbol:C,similarity:h.similarity,similarityBasis:h.similarityBasis??"callees",sharedEvidence:h.sharedCallees})}if(m.length===0)continue;let f=m[0],p=ve("echo",l.symbol,l.file,...m.map(h=>`${h.otherSymbol}|${h.otherFile}`).sort()),g=ve("echo",l.symbol,l.file),y=iq(l,m);Bt(c,{id:g,legacySuppressionIds:p===g?void 0:[p],groupKey:g,actionTier:y,check:"echo",severity:"warning",evidence:"heuristic",confidence:f.similarity,file:l.file,symbol:l.symbol,relatedFiles:[...new Set(m.map(h=>h.otherFile))].sort(),message:kR(l,m),why:TR(l,m),remediation:FR(y,l.shortName,f.otherShort)})}t.length>i&&c.skipped.push({check:"echo",reason:`echo check capped at ${i} of ${t.length} changed symbols`})}function iq(e,t){return t.some(r=>oq(e.symbol,r))?"direct":"signal"}function oq(e,t){if(t.similarityBasis==="exact-body")return!0;if(t.similarityBasis!=="source-tokens"||t.similarity<.98||t.sharedEvidence.length>8)return!1;let n=T(e),r=T(t.otherSymbol);return!n||!r?!1:n===r?!0:cq(t.sharedEvidence)?!1:sq(n,r)}function sq(e,t){let n=PR(e),r=PR(t);if(n.length===0||r.length===0)return!1;let i=new Set(r),o=n.filter(s=>i.has(s)).length;return o>=2&&o/Math.min(n.length,r.length)>=.5}function PR(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}var aq=new Set(["bytes","crypto","hex","num","random","secret","to","token"]);function cq(e){return e.length>=3&&e.every(t=>aq.has(t.toLowerCase()))}function kR(e,t){let n=t[0],r=Math.round(n.similarity*100);return t.length===1?`${e.shortName} (${e.file}) is ${r}% similar to established ${n.otherShort} (${n.otherFile})`:`${e.shortName} (${e.file}) resembles ${t.length} established symbol(s); strongest is ${r}% similar to ${n.otherShort} (${n.otherFile})`}function TR(e,t){let n=[`${e.shortName} was changed in this diff.`];for(let r of t.slice(0,3))n.push(`${r.otherShort} is outside this diff and scored ${Math.round(r.similarity*100)}% similar by ${r.similarityBasis} evidence.`),n.push(`Shared evidence: ${r.sharedEvidence.slice(0,5).join(", ")||"(none listed)"}.`);return t.length>3&&n.push(`${t.length-3} additional similar match(es) grouped into this finding.`),n}function FR(e,t,n){return e==="direct"?`Extract or reuse the shared behavior with ${n}, or keep the duplicate with a suppression reason.`:`Review whether ${t} is intentionally parallel to the established implementation(s); extract shared behavior only if the product semantics match.`}function lq(e,t,n,r,i,o,s,a){let c=Sm(e,{base:t,maxHelpers:r,diffPlan:n,scanLimit:i,semantic:o,baseContentAt:s});if(!c.available){a.skipped.push({check:"incomplete-migration",reason:"no git history"});return}a.checksRun.push("incomplete-migration"),c.note&&a.skipped.push({check:"incomplete-migration",reason:c.note});for(let l of c.findings){let u=l.leftovers.map(h=>`${h.shortName} (${h.file}, ${Math.round(h.containment*100)}% helper / ${Math.round(h.siteCoverage*100)}% site, ${h.migrationScope})`).join(", "),d=l.leftovers.map(h=>`${h.shortName}: ${h.migrationScope} (${h.migrationScopeReasons[0]})`).join("; "),m=[...l.migratedFiles,...l.leftovers.map(h=>h.file)],f=l.leftovers.length===0?void 0:Math.max(...l.leftovers.map(h=>Math.min(h.containment,h.siteCoverage))),p=l.leftovers.some(h=>h.migrationScope==="possible-subtype"),g=ve("incomplete-migration",l.helperSymbol,l.helperFile,m.join("|")),y=ve("incomplete-migration",l.helperSymbol,l.helperFile);Bt(a,{id:y,legacySuppressionIds:g===y?void 0:[g],check:"incomplete-migration",severity:"warning",evidence:"heuristic",confidence:f,file:l.helperFile,symbol:l.helperSymbol,relatedFiles:m,message:`new helper ${l.helperShortName} (${l.helperFile}) is wired into ${l.migratedFiles.length} file(s), but ${l.leftovers.length} similar un-migrated site(s) remain: ${u}`,why:[`${l.helperShortName} is new in this diff and already referenced by ${l.migratedFiles.join(", ")}.`,`Helper shape: ${l.helperShape}; ${l.specificHelperCalleeCount}/${l.helperCalleeCount} helper callees are specific enough to score.`,`Unchanged site(s) still contain the helper's callee pattern: ${u}.`,`Migration scope hints: ${d}.`],remediation:p?`Migrate same-scope sites to ${l.helperShortName}; review possible subtype/variant sites before applying the helper.`:`Migrate the remaining sites to ${l.helperShortName}, or confirm they are intentionally different.`})}}function uq(e,t,n,r,i,o){let s=ze(e,{historyMode:i}).directionalCoChangePairsForFiles(t,{minTogether:n,minConfidence:0,maxFilesPerCommit:20});if(!s){o.skipped.push({check:"co-change-partner",reason:"no git history"});return}o.checksRun.push("co-change-partner");let a=new Set,c;for(let l of s){let u=t.has(l.fileA),d=t.has(l.fileB);if(u===d)continue;let m=u?l.fileA:l.fileB,f=u?l.fileB:l.fileA,p=u?l.changesA:l.changesB,g=p>0?l.together/p:0;if(g<r||Jd(f)||Jd(m)||!ac(`${e.config.projectRoot}/${f}`))continue;let y=`${m}|${f}`;if(a.has(y))continue;a.add(y);let h=ve("co-change-partner",m,f,String(l.together)),x=ve("co-change-partner",m,f),b=Yd(m,f),C=Xd({fileA:m,fileB:f,together:l.together,confidence:g,commitScope:l.commitScope,recency:l.recency,subjectContext:l.subjectContext},b,(c??=Qd(e))(m,f)),S=[m,f].sort().join("|");o.findings.push({id:x,legacySuppressionIds:h===x?void 0:[h],check:"co-change-partner",severity:"warning",evidence:"change-graph",actionTier:"signal",groupKey:`co-change-partner:${S}`,confidence:g,file:m,relatedFiles:[f],sourceAnalyzer:"co-change",rootCauseKey:S,partnerClass:b.partnerClass,partnerClassReasons:b.reasons,commitScope:l.commitScope,recency:l.recency,focusedTogether:l.focusedTogether,broadTogether:l.broadTogether,broadCommitRatio:l.broadCommitRatio,lastTogetherAt:l.lastTogetherAt,recentTogether:l.recentTogether,subjectContext:l.subjectContext,...C?{declaredCouplingSuggestion:C}:{},message:`${m} changed, but ${f} did not \u2014 they change together ${l.together}x (${Math.round(g*100)}% of the time)`,why:[`${m} is in this diff and ${f} is not.`,`Git history shows ${l.together} co-change(s), which is ${Math.round(g*100)}% of changes to the edited side.`,`History context: ${fq(l)}.`,`Subject context: ${pq(l.subjectContext)}.`,...gq(l),`Partner class: ${b.partnerClass} (${b.reasons.join("; ")}).`],remediation:C?`Update ${f} alongside this change, declare the coupling "${C.name}", or confirm the coupling no longer holds.`:`Update ${f} alongside this change, or confirm the coupling no longer holds.`})}}function dq(e,t,n,r,i){i.checksRun.push("twin-partner");let o=ri(e,{scanLimit:r}).filter(c=>c.relationship==="divergent"||c.relationship==="identical");if(o.length===0)return;let s=new Map;for(let c of o)for(let l of c.members)s.set(l.symbol,c);let a=new Set;for(let c of t){if(!le(c.symbol))continue;let l=s.get(c.symbol);if(!l)continue;let u=l.members.filter(p=>p.symbol!==c.symbol&&!n.has(p.file));if(u.length===0)continue;let d=[c.symbol,...u.map(p=>p.symbol)].sort().join("|");if(a.has(d))continue;a.add(d);let m=u[0],f=ve("twin-partner",c.symbol,c.file,m.symbol);Bt(i,{id:f,groupKey:`twin-partner:${d}`,check:"twin-partner",severity:"warning",evidence:"heuristic",actionTier:"signal",advisory:!0,confidence:l.relationship==="identical"?1:Math.max(0,1-l.maxDivergence),file:c.file,symbol:c.symbol,relatedFiles:u.map(p=>p.file).sort(),sourceAnalyzer:"twin-drift",rootCauseKey:d,message:`${c.shortName} (${c.file}) changed but its same-name twin ${m.shortName} (${m.file}) did not \u2014 verify the change shouldn't apply to both, or consolidate them.`,why:[`${c.symbol} is in this diff.`,`${m.symbol} shares its (near-)name and is classified '${l.relationship}' with it, but ${m.file} is not in this diff.`,l.relationship==="divergent"?`The two bodies already diverge (~${Math.round(l.maxDivergence*100)}% token difference) \u2014 this diff may widen or narrow that drift.`:"The two bodies were byte-identical before this diff.","Advisory: twin-partner never fails the gate by itself \u2014 see the twin-partner entry in the diff-gate checks table."],remediation:`Update ${m.file} alongside this change, consolidate ${c.shortName}/${m.shortName} into one helper, or confirm the twin should diverge on purpose.`})}}function mq(e,t,n){n.checksRun.push("coverage-contract");let r=e.config.coverageContracts??[];for(let i of r){if(!lR(i,t))continue;let o=dm(e,i);if(o.status==="ok")continue;let s=ve("coverage-contract",i.name,i.file);Bt(n,{id:s,groupKey:`coverage-contract:${i.name}`,check:"coverage-contract",severity:o.status==="unavailable"?"warning":"error",evidence:"graph-fact",actionTier:"direct",file:i.file,sourceAnalyzer:"coverage-contracts",rootCauseKey:i.name,message:uR(o),why:[`Contract "${i.name}" declares that ${i.file} (${i.keys.type}) must track ${i.mustEqual.type}.`,o.status==="unavailable"?`The declared side could not be evaluated: ${o.unavailableReason}.`:`Missing: ${o.missing.join(", ")||"none"}. Extra: ${o.extra.join(", ")||"none"}.`,"Either side of this contract changed in this diff."],remediation:o.status==="unavailable"?"Investigate why the declared key set could not be parsed (see the reason above) \u2014 do not treat this as a pass.":`Update ${i.file} so its ${i.keys.type==="object-literal-keys"||i.keys.type==="string-array"?i.keys.identifier:i.keys.marker} matches ${i.mustEqual.type}, or fix the ground-truth source if the declared set is right.`})}}function fq(e){return`${e.commitScope}/${e.recency}; ${e.focusedTogether} focused, ${e.broadTogether} broad-sweep (${Math.round(e.broadCommitRatio*100)}% broad), ${e.recentTogether} recent, last ${hq(e.lastTogetherAt)}`}function pq(e){let t=e.subjectLabels.length>0?e.subjectLabels.slice(0,5).join(", "):"none inferred",n=e.issueRefs.length>0?e.issueRefs.slice(0,5).join(", "):"none",r=e.sampleSubjects.length>0?e.sampleSubjects.slice(0,3).map(i=>`"${i}"`).join("; "):"none";return`labels ${t}; refs ${n}; samples ${r}; external issue/PR labels ${e.externalIssueLabelStatus}`}function gq(e){let t=[];return e.commitScope==="broad-sweep"&&t.push("Broad-sweep history is weaker than focused co-edits; confirm this is a real coordination contract."),e.recency==="stale"&&t.push("The pair has no co-change in the recent history window; confirm the coupling still holds."),t}function hq(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}var Rm=3;function yq(e,t,n,r,i,o){o.checksRun.push("doc-reference");let s=cn.referenceTargets(e,t,r);if(s.size===0)return;let a=new Set(i.map(l=>l.from)),c=[];for(let l of $x(e,s))n.has(l.doc)||Qa(e,l.doc)||c.push(bq(e,l,a));for(let l of Sq(c))Bt(o,l)}function bq(e,t,n){let r=t.citedClaims.length>0?t.citedClaims:cn.citationContexts(e,t.doc,t.cited),i=cn.classifyCitation(r),o=cn.hasLineAnchoredCitation(t.citations),s=t.cited.some(d=>n.has(d)||!ac(`${e.config.projectRoot}/${d}`)),a=!(o||s),c=t.cited[0]??"",l=ve("doc-reference",t.doc,t.cited.join("|")),u=ve("doc-reference",t.doc,c);return{id:u,legacySuppressionIds:l===u?void 0:[l],check:"doc-reference",severity:"warning",evidence:"change-graph",actionTier:i.actionTier,groupKey:`doc-reference:${c}`,rootCauseKey:c,confidence:1,file:t.doc,relatedFiles:t.cited,citationKind:i.citationKind,citationKindReasons:i.reasons,citedClaims:r,...a?{advisory:!0}:{},message:`${t.doc} cites ${t.cited.join(", ")} as ${cn.citationKindLabel(i.citationKind)} \u2014 changed in this diff, doc untouched`,why:[`${t.cited.join(", ")} changed in this diff.`,`${t.doc} cites the changed file(s) but was not updated in the same diff.`,...i.reasons.map(d=>`Citation kind evidence: ${d}`),a?"Advisory: bare file-mention citation (no line anchor, cited file still present under the same path) \u2014 21.2 calibration found this citation shape low-precision; verify at your leisure.":o?"Blocking: citation includes a line anchor that may now point at the wrong lines.":"Blocking: the cited file was deleted or renamed in this diff \u2014 the citation almost certainly needs an update."],remediation:cn.citationRemediation(i.citationKind,t.doc)}}function Sq(e){let t=new Map;for(let r of e){let i=r.rootCauseKey??"",o=t.get(i);o?o.push(r):t.set(i,[r])}let n=[];for(let[r,i]of t)i.length<=Rm?n.push(...i):n.push(Cq(r,i));return n}function Cq(e,t){let n=[...t].sort((u,d)=>(u.file??"").localeCompare(d.file??"")),r=n.slice(0,Rm).map(u=>({doc:u.file??"",citedClaims:u.citedClaims??[]})),i=n.length-r.length,o=n.every(u=>u.advisory===!0),s=n.reduce((u,d)=>_R(u,d.severity),"info"),a=n.reduce((u,d)=>LR(u,d.actionTier),void 0),c=n.map(u=>u.file??"").filter(u=>u.length>0),l=[...new Set(n.flatMap(u=>[u.id,...u.legacySuppressionIds??[]]))];return{id:ve("doc-reference","hub-cluster",e),memberFindingIds:l,check:"doc-reference",severity:s,evidence:"change-graph",actionTier:a,groupKey:`doc-reference:${e}`,rootCauseKey:e,confidence:1,file:r[0]?.doc,relatedFiles:[e],citationCount:n.length,citationExemplars:r,suppressedCount:i,...o?{advisory:!0}:{},message:`${e} is cited by ${n.length} doc(s) changed in this diff, doc(s) untouched \u2014 showing ${r.length} example(s), ${i} more damped`,why:[`${e} changed in this diff.`,`${n.length} doc(s) cite it but were not updated in the same diff: ${c.join(", ")}.`,...r.map(u=>`Example \u2014 ${u.doc}: ${u.citedClaims[0]??"(no captured citation text)"}`),`${i} additional doc(s) also cite this file, past the per-hub-file cascade cap (${Rm}) \u2014 not silently dropped: counted in citationCount/suppressedCount and individually addressable via memberFindingIds.`,o?"Advisory: every citation in this cluster is a bare file-mention (no line anchor, cited file still present).":"Blocking: at least one citation in this cluster is line-anchored or cites a deleted/renamed file."],remediation:`Review the ${r.length} example doc(s) above; ${n.length} total doc(s) cite ${e} the same way \u2014 see citationExemplars and memberFindingIds in --json for the complete list.`}}function xq(e,t,n){n.checksRun.push("unused-params");for(let r of xm(e,{files:t,limit:50})){let i=ve("unused-params",r.symbol,r.file,r.unusedTrailing.join("|")),o=ve("unused-params",r.symbol,r.file);Bt(n,{id:o,legacySuppressionIds:i===o?void 0:[i],check:"unused-params",severity:"warning",evidence:"heuristic",confidence:.85,file:r.file,startLine:r.startLine,endLine:r.endLine,symbol:r.symbol,message:`${r.shortName} (${r.file}) has trailing unused parameter(s): ${r.unusedTrailing.join(", ")}`,why:[`${r.shortName} is in a changed file.`,`The trailing parameter(s) ${r.unusedTrailing.join(", ")} are not referenced in the function body.`],remediation:"Drop the unused trailing parameters and their call-site arguments."})}}function Rq(e,t,n,r){r.checksRun.push("new-dead");let i=new F(e),o=Ir(e.config.projectRoot),s=o.length>1;for(let a of t){if(n(a)||a.fanIn>0||i.fileKind(a.file)==="test"||De(e,a.file)||de(e,a.symbol,a.file)||wq(a.symbol))continue;let c=ve("new-dead",a.symbol,a.file),l=s&&vq(o,a.file)&&Iq(e,a.symbol);Bt(r,{id:c,check:"new-dead",severity:"warning",evidence:l?"heuristic":"graph-fact",confidence:l?.4:.9,file:a.file,symbol:a.symbol,message:l?`${a.shortName} (${a.file}) unconfirmed (cross-package ambiguous-name resolution gap): zero indexed consumers found, but this name is ambiguous project-wide and lives in a workspace package \u2014 verify manually before treating as dead`:`${a.shortName} (${a.file}) was changed but has zero indexed consumers`,why:l?[`${a.shortName} is a changed production symbol in a workspace package.`,"The index, semantic, and source-fallback layers all report zero consumers for this symbol.","Its leaf name is ambiguous project-wide (a same-named definition exists elsewhere), and cross-package consumers reached only through a re-exporting barrel are a known unresolvable shape for this tool \u2014 see docs/plans/2026-07-02-followups.md item 2."]:[`${a.shortName} is a changed production symbol.`,"The index reports zero consumers for this symbol.","The symbol is not in a detected entry surface or configured live root."],remediation:l?"Verify with a direct code search before deleting; this tool cannot confidently resolve this symbol.":"Wire it up, or remove it before it becomes permanent dead code."})}}function vq(e,t){return e.some(n=>t===n.relativeDir||t.startsWith(`${n.relativeDir}/`))}function Iq(e,t){let n=T(t);return n?(Zt(e).get(n)?.length??0)>1:!1}function wq(e){if(ue(e)!=="type")return!1;let t=T(e);return t.startsWith("_Assert")||t.startsWith("Assert")}function Eq(e,t,n,r){let i=new Map(n.renamedFiles.map(s=>[s.to,s.from])),o=r??vo(e,t,Io(n));return s=>{let a=i.get(s.file)??s.file,c=T(s.symbol);if(!c)return!1;let l=o(a);return l!==null&&Dq(l,c)}}function Dq(e,t){return new RegExp(`\\b${$(t)}\\b`).test(e)}function Pq(e,t){if(!ac(ii(e))){t.skipped.push({check:"baseline",reason:"no .scipquery-baseline.json \u2014 run health --write-baseline to enable"});return}t.checksRun.push("baseline");let n=ym(e);for(let r of n.newFindings.filter(i=>!i.startsWith(Rt))){let i=rm(r),o=ve("baseline",r);Bt(t,{id:o,groupKey:`baseline:${i.sourceAnalyzer}:${i.rootCauseKey}`,check:"baseline",severity:"error",evidence:"baseline",actionTier:i.actionTier,confidence:1,file:i.file,relatedFiles:i.relatedFiles.length>0?i.relatedFiles:void 0,sourceAnalyzer:i.sourceAnalyzer,rootCauseKey:i.rootCauseKey,message:`new ${i.label} vs committed baseline: ${r}`,why:["A committed health baseline exists.","The current health result contains a finding not present in that baseline.",`Underlying analyzer: ${i.sourceAnalyzer}.`,`Inherited action tier: ${i.actionTier}.`,`Root cause key: ${i.rootCauseKey}.`,...i.why],remediation:i.remediation})}}function kq(e,t){if(!pC(e.config.architecture)){t.skipped.push({check:"architecture",reason:"no closed architecture dependency rows, requireCompletePolicy rule, or requireAcyclic rule configured"});return}if(!ac(ii(e))){t.skipped.push({check:"architecture",reason:"no .scipquery-baseline.json \u2014 run health --write-baseline to enable"});return}t.checksRun.push("architecture");let n=vR(e);for(let r of n.newFindings){let i=rm(r),o=ve("architecture",r);Bt(t,{id:o,groupKey:`architecture:${i.rootCauseKey}`,check:"architecture",severity:"error",evidence:"baseline",actionTier:"direct",confidence:1,sourceAnalyzer:"architecture",rootCauseKey:i.rootCauseKey,message:`new ${i.label} vs committed baseline: ${r}`,why:["The project declares an enforceable architecture rule.","The current boundary graph contains a violation not present in the committed baseline.",...i.why],remediation:i.remediation})}}function ve(e,...t){return`SQ${JV("sha256").update([e,...t].join("\0")).digest("hex").slice(0,12).toUpperCase()}`}import{dirname as Tq,relative as Fq,resolve as _q}from"path";var Lq=new Set(Nt());function Nq(e,t){return`tests/generated/twin-ab/${NR(e)}-vs-${NR(t)}.test.ts`}function NR(e){return(e.split(/[/#]/).pop()||e).replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"symbol"}function Aq(e,t,n,r){let i=AR(e,t);if(!i.ok)return i;let o=AR(e,n);if(!o.ok)return o;let s=i.symbol.paramCount===null||o.symbol.paramCount===null?null:i.symbol.paramCount===o.symbol.paramCount,a=Oq(i.symbol,o.symbol,e.config.projectRoot,r,s);return{ok:!0,a:i.symbol,b:o.symbol,signatureCompatible:s,testSource:a}}function AR(e,t){let r=wi(e,t).match;if(!r)return{ok:!1,reason:`${t} does not resolve to an indexed symbol.`};let o=e.get("SELECT kind FROM global_symbols WHERE id = ?",r.symbolId)?.kind??null;if(!(o!==null?Lq.has(o):te(r.symbol)))return{ok:!1,reason:`${t} resolves to ${I(r.symbol)}${o!==null?` with SCIP kind ${ao(o)}`:""} \u2014 twin-ab compares call outputs, so both referents must be functions or methods.`};if(!Fo(e,r))return{ok:!1,reason:`${t} (${I(r.symbol)} at ${r.relativePath}:${r.startLine+1}) is not exported \u2014 twin-ab needs an importable named binding for both twins.`};let a=e.get("SELECT documentation FROM global_symbols WHERE id = ?",r.symbolId),c=Yt(Xt(a?.documentation??null));return{ok:!0,symbol:{ref:t,symbol:r.symbol,shortName:T(r.symbol)||I(r.symbol),file:r.relativePath,startLine:r.startLine,signature:c,paramCount:c?Mq(c):null}}}function Mq(e){let t=e.indexOf("(");if(t===-1)return null;let n=0,r=-1;for(let a=t;a<e.length;a+=1){let c=e[a];if(c==="(")n+=1;else if(c===")"&&(n-=1,n===0)){r=a;break}}if(r===-1)return null;let i=e.slice(t+1,r).trim();if(!i)return 0;let o=1,s=0;for(let a of i)a==="("||a==="["||a==="{"?s+=1:a===")"||a==="]"||a==="}"?s=Math.max(0,s-1):a===","&&s===0&&(o+=1);return o}function MR(e,t,n){let r=Tq(t),i=_q(e,n),s=Fq(r,i).replace(/\\/g,"/").replace(/\.tsx?$/,".js");return s.startsWith(".")?s:`./${s}`}function Oq(e,t,n,r,i){let o=MR(n,r,e.file),s=MR(n,r,t.file),a=i===null?"Signature comparison: unknown (one or both signatures unavailable in the index) \u2014 check by hand.":i?"Signature comparison: param counts match.":"Signature comparison: param counts DIFFER \u2014 twins may not be directly comparable; check by hand.";return`/**
|
|
798
|
+
${e.pathExclusionsFor("ref_d")}`,t).map(r=>r.relative_path)}function xm(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=new F(e);return gt({candidates:()=>o.productionCallableDefinitions({scope:n,files:t.files,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}),filterCandidate:s=>HV(s.relativePath),scanLimit:i,profile:{name:"unused-params"},evaluate:s=>{let a=z(e,s.relativePath)?.callables.find(u=>u.startLine===s.startLine&&u.endLine===s.endLine);if(!a||a.params.length===0||a.params.some(u=>!u.simple)||a.paramsEndLine>=a.endLine)return null;let c=Qt(e,s.relativePath),l=[];for(let u=a.params.length-1;u>=0;u--){let d=a.params[u];if(d.name===""||d.name.startsWith("_")||UV(c.get(d.name),a.paramsEndLine,a.endLine))break;l.unshift(d.name)}return l.length===0?null:{symbol:s.symbol,shortName:I(s.symbol),file:s.relativePath,startLine:s.startLine,endLine:s.endLine,paramCount:a.paramCount,unusedTrailing:l}},orderResults:(s,a)=>a.unusedTrailing.length-s.unusedTrailing.length||s.file.localeCompare(a.file)||s.startLine-a.startLine,limit:r})}function HV(e){let t=M(e);return t==="typescript"||t==="tsx"||t==="javascript"}function UV(e,t,n){return e?e.some(r=>r>t&&r<=n):!1}import{existsSync as WV,mkdirSync as GV,readdirSync as zV,readFileSync as VV,writeFileSync as qV}from"fs";import{createHash as KV}from"crypto";import{join as sc}from"path";var No=sc(".scipquery","suppressions");function wv(e){return sc(e,No)}function JV(e){if(e.id&&e.id.trim()!=="")return`${e.id.trim()}.json`;let t=`${e.check??""}\0${e.file??""}`;return`CHECK-${KV("sha256").update(t).digest("hex").slice(0,12).toUpperCase()}.json`}function Dde(e,t,n=new Date){if(!t.reason||t.reason.trim()==="")throw new Error("suppression requires a non-empty reason");if(!t.id&&!t.check)throw new Error("suppression requires an id or a check");let r=wv(e);GV(r,{recursive:!0});let i=sc(r,JV(t)),o={...t,createdAt:t.createdAt??n.toISOString()};return qV(i,JSON.stringify(o,null,2)+`
|
|
799
|
+
`),{path:i}}function Ev(e){let t=wv(e);if(!WV(t))return{suppressions:[],warnings:[]};let n=[],r=[];for(let i of zV(t).sort()){if(!i.endsWith(".json"))continue;let o=sc(t,i),s;try{s=JSON.parse(VV(o,"utf-8"))}catch{r.push(`${No}/${i}: malformed JSON \u2014 ignored`);continue}if(typeof s!="object"||s===null||Array.isArray(s)){r.push(`${No}/${i}: not a suppression object \u2014 ignored`);continue}let a=s;if(typeof a.reason!="string"||a.reason.trim()===""){r.push(`${No}/${i}: missing reason \u2014 ignored`);continue}if(!a.id&&!a.check){r.push(`${No}/${i}: needs an id or a check \u2014 ignored`);continue}n.push(a)}return{suppressions:n,warnings:r}}var XV=["echo","incomplete-migration","co-change-partner","twin-partner","coverage-contract","architecture","doc-reference","unused-params","new-dead","baseline"];function QV(e,t={}){let n=t.base??"HEAD",{minTogether:r=6,minConfidence:i=.6,maxEchoChecks:o=Number.POSITIVE_INFINITY,maxHelpers:s=Number.POSITIVE_INFINITY,minSimilarity:a=.8,includeBaseline:c=!1,scanLimit:l}=t,u=t.semantic!==!1,d=t.historyMode??"bounded",m=new Set(t.skip??[]),f=An(e,{base:n}),p=ei(e,{base:n,plan:f}),g=p.changedFiles,y=new Set(g),h=new Set(f.changedFileLines),x=new Set([...y,...h]),b=Ro(e.config.projectRoot,n,Io(f,g)),C=Dq(e.config.projectRoot,n,f,b),S={base:n,changedFiles:g,changedSymbols:p.changedSymbols.length,checksRun:[],skipped:[],suppressed:[],findings:[],attributionNotes:p.attributionNotes,rootCauseGroups:[],note:p.summary.note};if(g.length===0)return S;let R=(v,D)=>{if(m.has(v)){S.skipped.push({check:v,reason:"skipped via --skip"});return}let w=S.findings.length,k=S.skipped.length,L=S.checksRun.length;E(`diff-gate.check.${v}`,D,()=>({check:v,changedFiles:g.length,changedSymbols:p.changedSymbols.length,findingsAdded:S.findings.length-w,skippedAdded:S.skipped.length-k,checksRunAdded:S.checksRun.length-L}))};return R("echo",()=>iq(e,p.changedSymbols,y,C,o,a,l,u,S)),R("incomplete-migration",()=>uq(e,n,f,s,l,u,b,S)),R("co-change-partner",()=>dq(e,x,r,i,d,S)),R("twin-partner",()=>mq(e,p.changedSymbols,y,l,S)),R("coverage-contract",()=>fq(e,x,S)),R("architecture",()=>Tq(e,S)),R("doc-reference",()=>bq(e,y,h,f.changedRanges,f.renamedFiles,S)),R("unused-params",()=>vq(e,g,S)),R("new-dead",()=>Rq(e,p.changedSymbols,C,S)),c&&R("baseline",()=>Pq(e,S)),nq(S,[...e.config.suppressions??[],...Ev(e.config.projectRoot).suppressions]),S.rootCauseGroups=tq(S.findings),S}function ZV(e){return e.checksRun.length===0&&e.note===vo}function eq(e){return e.filter(t=>!t.advisory)}function tq(e){let t=new Map;for(let n of e){let r=n.groupKey??`${n.check}:${n.id}`,i=t.get(r);i||(i={groupKey:r,check:n.check,severity:n.severity,actionTier:n.actionTier,sourceAnalyzer:n.sourceAnalyzer,rootCauseKey:n.rootCauseKey,count:0,findingIds:[],files:new Set,relatedFiles:new Set,message:n.message,remediation:n.remediation},t.set(r,i)),i.count+=1,i.findingIds.push(n.id),i.severity=_v(i.severity,n.severity),i.actionTier=Lv(i.actionTier,n.actionTier),n.file&&i.files.add(n.file);for(let o of n.relatedFiles??[])i.relatedFiles.add(o)}return[...t.values()].map(n=>({...n,files:[...n.files].sort(),relatedFiles:[...n.relatedFiles].sort()})).sort((n,r)=>r.count-n.count||ac(r.severity)-ac(n.severity)||n.groupKey.localeCompare(r.groupKey))}function _v(e,t){return ac(t)>ac(e)?t:e}function ac(e){return e==="error"?2:e==="warning"?1:0}function Lv(e,t){return e?t&&Dv(t)>Dv(e)?t:e:t}function Dv(e){return e==="direct"?2:e==="signal"?1:0}function nq(e,t){if(t.length===0||e.findings.length===0)return;let n=[];for(let r of e.findings){let i=t.find(o=>rq(o,r));i?e.suppressed.push({finding:r,suppression:i}):n.push(r)}e.findings=n}function rq(e,t){return!e.reason||e.reason.trim()===""||e.expiresAt&&Date.parse(e.expiresAt)<=Date.now()||e.id&&e.id!==t.id&&!t.legacySuppressionIds?.includes(e.id)||e.check&&e.check!==t.check||e.file&&e.file!==t.file?!1:!!(e.id||e.check)}function Bt(e,t){e.findings.push({...t,suppressionHint:`scip-query: ignore ${t.check} ${t.id} -- <reason>`})}function iq(e,t,n,r,i,o,s,a,c){c.checksRun.push("echo");for(let l of t.slice(0,i)){if(!le(l.symbol)||r(l))continue;let u=cm(e,l.symbol,{maxLoc:15,scanLimit:s}).filter(h=>!n.has(h.file)).slice(0,5).map(h=>({otherFile:h.file,otherShort:h.shortName,otherSymbol:h.symbol,similarity:1,similarityBasis:"exact-body",sharedEvidence:[`exact normalized body (${h.loc} LOC)`]}));if(u.length>0){let h=Re("echo",l.symbol,l.file),x=Re("echo",l.symbol,l.file,...u.map(C=>`${C.otherSymbol}|${C.otherFile}`).sort()),b=u[0];Bt(c,{id:h,legacySuppressionIds:x===h?void 0:[x],groupKey:h,actionTier:"direct",check:"echo",severity:"warning",evidence:"heuristic",confidence:1,file:l.file,symbol:l.symbol,relatedFiles:[...new Set(u.map(C=>C.otherFile))].sort(),sourceAnalyzer:"duplicate-bodies",rootCauseKey:`${l.symbol}:${b.otherSymbol}`,message:Pv(l,u),why:Tv(l,u),remediation:Fv("direct",l.shortName,b.otherShort)});continue}let d=ja(e,l.symbol,{minSimilarity:o,limit:5,scanLimit:s,semantic:a,sourceCandidateMode:"target-pruned"}),m=[];for(let h of d){let x=h.fileA===l.file?h.fileB:h.fileA,b=h.fileA===l.file?h.shortNameB:h.shortNameA,C=h.fileA===l.file?h.symbolB:h.symbolA;n.has(x)||m.push({otherFile:x,otherShort:b,otherSymbol:C,similarity:h.similarity,similarityBasis:h.similarityBasis??"callees",sharedEvidence:h.sharedCallees})}if(m.length===0)continue;let f=m[0],p=Re("echo",l.symbol,l.file,...m.map(h=>`${h.otherSymbol}|${h.otherFile}`).sort()),g=Re("echo",l.symbol,l.file),y=oq(l,m);Bt(c,{id:g,legacySuppressionIds:p===g?void 0:[p],groupKey:g,actionTier:y,check:"echo",severity:"warning",evidence:"heuristic",confidence:f.similarity,file:l.file,symbol:l.symbol,relatedFiles:[...new Set(m.map(h=>h.otherFile))].sort(),message:Pv(l,m),why:Tv(l,m),remediation:Fv(y,l.shortName,f.otherShort)})}t.length>i&&c.skipped.push({check:"echo",reason:`echo check capped at ${i} of ${t.length} changed symbols`})}function oq(e,t){return t.some(r=>sq(e.symbol,r))?"direct":"signal"}function sq(e,t){if(t.similarityBasis==="exact-body")return!0;if(t.similarityBasis!=="source-tokens"||t.similarity<.98||t.sharedEvidence.length>8)return!1;let n=T(e),r=T(t.otherSymbol);return!n||!r?!1:n===r?!0:lq(t.sharedEvidence)?!1:aq(n,r)}function aq(e,t){let n=kv(e),r=kv(t);if(n.length===0||r.length===0)return!1;let i=new Set(r),o=n.filter(s=>i.has(s)).length;return o>=2&&o/Math.min(n.length,r.length)>=.5}function kv(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}var cq=new Set(["bytes","crypto","hex","num","random","secret","to","token"]);function lq(e){return e.length>=3&&e.every(t=>cq.has(t.toLowerCase()))}function Pv(e,t){let n=t[0],r=Math.round(n.similarity*100);return t.length===1?`${e.shortName} (${e.file}) is ${r}% similar to established ${n.otherShort} (${n.otherFile})`:`${e.shortName} (${e.file}) resembles ${t.length} established symbol(s); strongest is ${r}% similar to ${n.otherShort} (${n.otherFile})`}function Tv(e,t){let n=[`${e.shortName} was changed in this diff.`];for(let r of t.slice(0,3))n.push(`${r.otherShort} is outside this diff and scored ${Math.round(r.similarity*100)}% similar by ${r.similarityBasis} evidence.`),n.push(`Shared evidence: ${r.sharedEvidence.slice(0,5).join(", ")||"(none listed)"}.`);return t.length>3&&n.push(`${t.length-3} additional similar match(es) grouped into this finding.`),n}function Fv(e,t,n){return e==="direct"?`Extract or reuse the shared behavior with ${n}, or keep the duplicate with a suppression reason.`:`Review whether ${t} is intentionally parallel to the established implementation(s); extract shared behavior only if the product semantics match.`}function uq(e,t,n,r,i,o,s,a){let c=Sm(e,{base:t,maxHelpers:r,diffPlan:n,scanLimit:i,semantic:o,baseContentAt:s});if(!c.available){a.skipped.push({check:"incomplete-migration",reason:"no git history"});return}a.checksRun.push("incomplete-migration"),c.note&&a.skipped.push({check:"incomplete-migration",reason:c.note});for(let l of c.findings){let u=l.leftovers.map(h=>`${h.shortName} (${h.file}, ${Math.round(h.containment*100)}% helper / ${Math.round(h.siteCoverage*100)}% site, ${h.migrationScope})`).join(", "),d=l.leftovers.map(h=>`${h.shortName}: ${h.migrationScope} (${h.migrationScopeReasons[0]})`).join("; "),m=[...l.migratedFiles,...l.leftovers.map(h=>h.file)],f=l.leftovers.length===0?void 0:Math.max(...l.leftovers.map(h=>Math.min(h.containment,h.siteCoverage))),p=l.leftovers.some(h=>h.migrationScope==="possible-subtype"),g=Re("incomplete-migration",l.helperSymbol,l.helperFile,m.join("|")),y=Re("incomplete-migration",l.helperSymbol,l.helperFile);Bt(a,{id:y,legacySuppressionIds:g===y?void 0:[g],check:"incomplete-migration",severity:"warning",evidence:"heuristic",confidence:f,file:l.helperFile,symbol:l.helperSymbol,relatedFiles:m,message:`new helper ${l.helperShortName} (${l.helperFile}) is wired into ${l.migratedFiles.length} file(s), but ${l.leftovers.length} similar un-migrated site(s) remain: ${u}`,why:[`${l.helperShortName} is new in this diff and already referenced by ${l.migratedFiles.join(", ")}.`,`Helper shape: ${l.helperShape}; ${l.specificHelperCalleeCount}/${l.helperCalleeCount} helper callees are specific enough to score.`,`Unchanged site(s) still contain the helper's callee pattern: ${u}.`,`Migration scope hints: ${d}.`],remediation:p?`Migrate same-scope sites to ${l.helperShortName}; review possible subtype/variant sites before applying the helper.`:`Migrate the remaining sites to ${l.helperShortName}, or confirm they are intentionally different.`})}}function dq(e,t,n,r,i,o){let s=ze(e,{historyMode:i}).directionalCoChangePairsForFiles(t,{minTogether:n,minConfidence:0,maxFilesPerCommit:20});if(!s){o.skipped.push({check:"co-change-partner",reason:"no git history"});return}o.checksRun.push("co-change-partner");let a=new Set,c;for(let l of s){let u=t.has(l.fileA),d=t.has(l.fileB);if(u===d)continue;let m=u?l.fileA:l.fileB,f=u?l.fileB:l.fileA,p=u?l.changesA:l.changesB,g=p>0?l.together/p:0;if(g<r||Jd(f)||Jd(m)||!cc(`${e.config.projectRoot}/${f}`))continue;let y=`${m}|${f}`;if(a.has(y))continue;a.add(y);let h=Re("co-change-partner",m,f,String(l.together)),x=Re("co-change-partner",m,f),b=Yd(m,f),C=Xd({fileA:m,fileB:f,together:l.together,confidence:g,commitScope:l.commitScope,recency:l.recency,subjectContext:l.subjectContext},b,(c??=Qd(e))(m,f)),S=[m,f].sort().join("|");o.findings.push({id:x,legacySuppressionIds:h===x?void 0:[h],check:"co-change-partner",severity:"warning",evidence:"change-graph",actionTier:"signal",groupKey:`co-change-partner:${S}`,confidence:g,file:m,relatedFiles:[f],sourceAnalyzer:"co-change",rootCauseKey:S,partnerClass:b.partnerClass,partnerClassReasons:b.reasons,commitScope:l.commitScope,recency:l.recency,focusedTogether:l.focusedTogether,broadTogether:l.broadTogether,broadCommitRatio:l.broadCommitRatio,lastTogetherAt:l.lastTogetherAt,recentTogether:l.recentTogether,subjectContext:l.subjectContext,...C?{declaredCouplingSuggestion:C}:{},message:`${m} changed, but ${f} did not \u2014 they change together ${l.together}x (${Math.round(g*100)}% of the time)`,why:[`${m} is in this diff and ${f} is not.`,`Git history shows ${l.together} co-change(s), which is ${Math.round(g*100)}% of changes to the edited side.`,`History context: ${pq(l)}.`,`Subject context: ${gq(l.subjectContext)}.`,...hq(l),`Partner class: ${b.partnerClass} (${b.reasons.join("; ")}).`],remediation:C?`Update ${f} alongside this change, declare the coupling "${C.name}", or confirm the coupling no longer holds.`:`Update ${f} alongside this change, or confirm the coupling no longer holds.`})}}function mq(e,t,n,r,i){i.checksRun.push("twin-partner");let o=ri(e,{scanLimit:r}).filter(c=>c.relationship==="divergent"||c.relationship==="identical");if(o.length===0)return;let s=new Map;for(let c of o)for(let l of c.members)s.set(l.symbol,c);let a=new Set;for(let c of t){if(!le(c.symbol))continue;let l=s.get(c.symbol);if(!l)continue;let u=l.members.filter(p=>p.symbol!==c.symbol&&!n.has(p.file));if(u.length===0)continue;let d=[c.symbol,...u.map(p=>p.symbol)].sort().join("|");if(a.has(d))continue;a.add(d);let m=u[0],f=Re("twin-partner",c.symbol,c.file,m.symbol);Bt(i,{id:f,groupKey:`twin-partner:${d}`,check:"twin-partner",severity:"warning",evidence:"heuristic",actionTier:"signal",advisory:!0,confidence:l.relationship==="identical"?1:Math.max(0,1-l.maxDivergence),file:c.file,symbol:c.symbol,relatedFiles:u.map(p=>p.file).sort(),sourceAnalyzer:"twin-drift",rootCauseKey:d,message:`${c.shortName} (${c.file}) changed but its same-name twin ${m.shortName} (${m.file}) did not \u2014 verify the change shouldn't apply to both, or consolidate them.`,why:[`${c.symbol} is in this diff.`,`${m.symbol} shares its (near-)name and is classified '${l.relationship}' with it, but ${m.file} is not in this diff.`,l.relationship==="divergent"?`The two bodies already diverge (~${Math.round(l.maxDivergence*100)}% token difference) \u2014 this diff may widen or narrow that drift.`:"The two bodies were byte-identical before this diff.","Advisory: twin-partner never fails the gate by itself \u2014 see the twin-partner entry in the diff-gate checks table."],remediation:`Update ${m.file} alongside this change, consolidate ${c.shortName}/${m.shortName} into one helper, or confirm the twin should diverge on purpose.`})}}function fq(e,t,n){n.checksRun.push("coverage-contract");let r=e.config.coverageContracts??[];for(let i of r){if(!lv(i,t))continue;let o=dm(e,i);if(o.status==="ok")continue;let s=Re("coverage-contract",i.name,i.file);Bt(n,{id:s,groupKey:`coverage-contract:${i.name}`,check:"coverage-contract",severity:o.status==="unavailable"?"warning":"error",evidence:"graph-fact",actionTier:"direct",file:i.file,sourceAnalyzer:"coverage-contracts",rootCauseKey:i.name,message:uv(o),why:[`Contract "${i.name}" declares that ${i.file} (${i.keys.type}) must track ${i.mustEqual.type}.`,o.status==="unavailable"?`The declared side could not be evaluated: ${o.unavailableReason}.`:`Missing: ${o.missing.join(", ")||"none"}. Extra: ${o.extra.join(", ")||"none"}.`,"Either side of this contract changed in this diff."],remediation:o.status==="unavailable"?"Investigate why the declared key set could not be parsed (see the reason above) \u2014 do not treat this as a pass.":`Update ${i.file} so its ${i.keys.type==="object-literal-keys"||i.keys.type==="string-array"?i.keys.identifier:i.keys.marker} matches ${i.mustEqual.type}, or fix the ground-truth source if the declared set is right.`})}}function pq(e){return`${e.commitScope}/${e.recency}; ${e.focusedTogether} focused, ${e.broadTogether} broad-sweep (${Math.round(e.broadCommitRatio*100)}% broad), ${e.recentTogether} recent, last ${yq(e.lastTogetherAt)}`}function gq(e){let t=e.subjectLabels.length>0?e.subjectLabels.slice(0,5).join(", "):"none inferred",n=e.issueRefs.length>0?e.issueRefs.slice(0,5).join(", "):"none",r=e.sampleSubjects.length>0?e.sampleSubjects.slice(0,3).map(i=>`"${i}"`).join("; "):"none";return`labels ${t}; refs ${n}; samples ${r}; external issue/PR labels ${e.externalIssueLabelStatus}`}function hq(e){let t=[];return e.commitScope==="broad-sweep"&&t.push("Broad-sweep history is weaker than focused co-edits; confirm this is a real coordination contract."),e.recency==="stale"&&t.push("The pair has no co-change in the recent history window; confirm the coupling still holds."),t}function yq(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}var vm=3;function bq(e,t,n,r,i,o){o.checksRun.push("doc-reference");let s=cn.referenceTargets(e,t,r);if(s.size===0)return;let a=new Set(i.map(l=>l.from)),c=[];for(let l of $x(e,s))n.has(l.doc)||Za(e,l.doc)||c.push(Sq(e,l,a));for(let l of Cq(c))Bt(o,l)}function Sq(e,t,n){let r=t.citedClaims.length>0?t.citedClaims:cn.citationContexts(e,t.doc,t.cited),i=cn.classifyCitation(r),o=cn.hasLineAnchoredCitation(t.citations),s=t.cited.some(d=>n.has(d)||!cc(`${e.config.projectRoot}/${d}`)),a=!(o||s),c=t.cited[0]??"",l=Re("doc-reference",t.doc,t.cited.join("|")),u=Re("doc-reference",t.doc,c);return{id:u,legacySuppressionIds:l===u?void 0:[l],check:"doc-reference",severity:"warning",evidence:"change-graph",actionTier:i.actionTier,groupKey:`doc-reference:${c}`,rootCauseKey:c,confidence:1,file:t.doc,relatedFiles:t.cited,citationKind:i.citationKind,citationKindReasons:i.reasons,citedClaims:r,...a?{advisory:!0}:{},message:`${t.doc} cites ${t.cited.join(", ")} as ${cn.citationKindLabel(i.citationKind)} \u2014 changed in this diff, doc untouched`,why:[`${t.cited.join(", ")} changed in this diff.`,`${t.doc} cites the changed file(s) but was not updated in the same diff.`,...i.reasons.map(d=>`Citation kind evidence: ${d}`),a?"Advisory: bare file-mention citation (no line anchor, cited file still present under the same path) \u2014 21.2 calibration found this citation shape low-precision; verify at your leisure.":o?"Blocking: citation includes a line anchor that may now point at the wrong lines.":"Blocking: the cited file was deleted or renamed in this diff \u2014 the citation almost certainly needs an update."],remediation:cn.citationRemediation(i.citationKind,t.doc)}}function Cq(e){let t=new Map;for(let r of e){let i=r.rootCauseKey??"",o=t.get(i);o?o.push(r):t.set(i,[r])}let n=[];for(let[r,i]of t)i.length<=vm?n.push(...i):n.push(xq(r,i));return n}function xq(e,t){let n=[...t].sort((u,d)=>(u.file??"").localeCompare(d.file??"")),r=n.slice(0,vm).map(u=>({doc:u.file??"",citedClaims:u.citedClaims??[]})),i=n.length-r.length,o=n.every(u=>u.advisory===!0),s=n.reduce((u,d)=>_v(u,d.severity),"info"),a=n.reduce((u,d)=>Lv(u,d.actionTier),void 0),c=n.map(u=>u.file??"").filter(u=>u.length>0),l=[...new Set(n.flatMap(u=>[u.id,...u.legacySuppressionIds??[]]))];return{id:Re("doc-reference","hub-cluster",e),memberFindingIds:l,check:"doc-reference",severity:s,evidence:"change-graph",actionTier:a,groupKey:`doc-reference:${e}`,rootCauseKey:e,confidence:1,file:r[0]?.doc,relatedFiles:[e],citationCount:n.length,citationExemplars:r,suppressedCount:i,...o?{advisory:!0}:{},message:`${e} is cited by ${n.length} doc(s) changed in this diff, doc(s) untouched \u2014 showing ${r.length} example(s), ${i} more damped`,why:[`${e} changed in this diff.`,`${n.length} doc(s) cite it but were not updated in the same diff: ${c.join(", ")}.`,...r.map(u=>`Example \u2014 ${u.doc}: ${u.citedClaims[0]??"(no captured citation text)"}`),`${i} additional doc(s) also cite this file, past the per-hub-file cascade cap (${vm}) \u2014 not silently dropped: counted in citationCount/suppressedCount and individually addressable via memberFindingIds.`,o?"Advisory: every citation in this cluster is a bare file-mention (no line anchor, cited file still present).":"Blocking: at least one citation in this cluster is line-anchored or cites a deleted/renamed file."],remediation:`Review the ${r.length} example doc(s) above; ${n.length} total doc(s) cite ${e} the same way \u2014 see citationExemplars and memberFindingIds in --json for the complete list.`}}function vq(e,t,n){n.checksRun.push("unused-params");for(let r of xm(e,{files:t,limit:50})){let i=Re("unused-params",r.symbol,r.file,r.unusedTrailing.join("|")),o=Re("unused-params",r.symbol,r.file);Bt(n,{id:o,legacySuppressionIds:i===o?void 0:[i],check:"unused-params",severity:"warning",evidence:"heuristic",confidence:.85,file:r.file,startLine:r.startLine,endLine:r.endLine,symbol:r.symbol,message:`${r.shortName} (${r.file}) has trailing unused parameter(s): ${r.unusedTrailing.join(", ")}`,why:[`${r.shortName} is in a changed file.`,`The trailing parameter(s) ${r.unusedTrailing.join(", ")} are not referenced in the function body.`],remediation:"Drop the unused trailing parameters and their call-site arguments."})}}function Rq(e,t,n,r){r.checksRun.push("new-dead");let i=new F(e),o=Ir(e.config.projectRoot),s=o.length>1;for(let a of t){if(n(a)||a.fanIn>0||i.fileKind(a.file)==="test"||De(e,a.file)||de(e,a.symbol,a.file)||Eq(a.symbol))continue;let c=Re("new-dead",a.symbol,a.file),l=s&&Iq(o,a.file)&&wq(e,a.symbol);Bt(r,{id:c,check:"new-dead",severity:"warning",evidence:l?"heuristic":"graph-fact",confidence:l?.4:.9,file:a.file,symbol:a.symbol,message:l?`${a.shortName} (${a.file}) unconfirmed (cross-package ambiguous-name resolution gap): zero indexed consumers found, but this name is ambiguous project-wide and lives in a workspace package \u2014 verify manually before treating as dead`:`${a.shortName} (${a.file}) was changed but has zero indexed consumers`,why:l?[`${a.shortName} is a changed production symbol in a workspace package.`,"The index, semantic, and source-fallback layers all report zero consumers for this symbol.","Its leaf name is ambiguous project-wide (a same-named definition exists elsewhere), and cross-package consumers reached only through a re-exporting barrel are a known unresolvable shape for this tool \u2014 see docs/plans/2026-07-02-followups.md item 2."]:[`${a.shortName} is a changed production symbol.`,"The index reports zero consumers for this symbol.","The symbol is not in a detected entry surface or configured live root."],remediation:l?"Verify with a direct code search before deleting; this tool cannot confidently resolve this symbol.":"Wire it up, or remove it before it becomes permanent dead code."})}}function Iq(e,t){return e.some(n=>t===n.relativeDir||t.startsWith(`${n.relativeDir}/`))}function wq(e,t){let n=T(t);return n?(Zt(e).get(n)?.length??0)>1:!1}function Eq(e){if(ue(e)!=="type")return!1;let t=T(e);return t.startsWith("_Assert")||t.startsWith("Assert")}function Dq(e,t,n,r){let i=new Map(n.renamedFiles.map(s=>[s.to,s.from])),o=r??Ro(e,t,Io(n));return s=>{let a=i.get(s.file)??s.file,c=T(s.symbol);if(!c)return!1;let l=o(a);return l!==null&&kq(l,c)}}function kq(e,t){return new RegExp(`\\b${$(t)}\\b`).test(e)}function Pq(e,t){if(!cc(ii(e))){t.skipped.push({check:"baseline",reason:"no .scipquery-baseline.json \u2014 run health --write-baseline to enable"});return}t.checksRun.push("baseline");let n=ym(e);for(let r of n.newFindings.filter(i=>!i.startsWith(vt))){let i=rm(r),o=Re("baseline",r);Bt(t,{id:o,groupKey:`baseline:${i.sourceAnalyzer}:${i.rootCauseKey}`,check:"baseline",severity:"error",evidence:"baseline",actionTier:i.actionTier,confidence:1,file:i.file,relatedFiles:i.relatedFiles.length>0?i.relatedFiles:void 0,sourceAnalyzer:i.sourceAnalyzer,rootCauseKey:i.rootCauseKey,message:`new ${i.label} vs committed baseline: ${r}`,why:["A committed health baseline exists.","The current health result contains a finding not present in that baseline.",`Underlying analyzer: ${i.sourceAnalyzer}.`,`Inherited action tier: ${i.actionTier}.`,`Root cause key: ${i.rootCauseKey}.`,...i.why],remediation:i.remediation})}}function Tq(e,t){if(!pC(e.config.architecture)){t.skipped.push({check:"architecture",reason:"no closed architecture dependency rows, requireCompletePolicy rule, or requireAcyclic rule configured"});return}if(!cc(ii(e))){t.skipped.push({check:"architecture",reason:"no .scipquery-baseline.json \u2014 run health --write-baseline to enable"});return}t.checksRun.push("architecture");let n=Rv(e);for(let r of n.newFindings){let i=rm(r),o=Re("architecture",r);Bt(t,{id:o,groupKey:`architecture:${i.rootCauseKey}`,check:"architecture",severity:"error",evidence:"baseline",actionTier:"direct",confidence:1,sourceAnalyzer:"architecture",rootCauseKey:i.rootCauseKey,message:`new ${i.label} vs committed baseline: ${r}`,why:["The project declares an enforceable architecture rule.","The current boundary graph contains a violation not present in the committed baseline.",...i.why],remediation:i.remediation})}}function Re(e,...t){return`SQ${YV("sha256").update([e,...t].join("\0")).digest("hex").slice(0,12).toUpperCase()}`}import{dirname as Fq,relative as _q,resolve as Lq}from"path";var Nq=new Set(Nt());function Aq(e,t){return`tests/generated/twin-ab/${Nv(e)}-vs-${Nv(t)}.test.ts`}function Nv(e){return(e.split(/[/#]/).pop()||e).replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"symbol"}function Mq(e,t,n,r){let i=Av(e,t);if(!i.ok)return i;let o=Av(e,n);if(!o.ok)return o;let s=i.symbol.paramCount===null||o.symbol.paramCount===null?null:i.symbol.paramCount===o.symbol.paramCount,a=jq(i.symbol,o.symbol,e.config.projectRoot,r,s);return{ok:!0,a:i.symbol,b:o.symbol,signatureCompatible:s,testSource:a}}function Av(e,t){let r=wi(e,t).match;if(!r)return{ok:!1,reason:`${t} does not resolve to an indexed symbol.`};let o=e.get("SELECT kind FROM global_symbols WHERE id = ?",r.symbolId)?.kind??null;if(!(o!==null?Nq.has(o):te(r.symbol)))return{ok:!1,reason:`${t} resolves to ${I(r.symbol)}${o!==null?` with SCIP kind ${ao(o)}`:""} \u2014 twin-ab compares call outputs, so both referents must be functions or methods.`};if(!Fo(e,r))return{ok:!1,reason:`${t} (${I(r.symbol)} at ${r.relativePath}:${r.startLine+1}) is not exported \u2014 twin-ab needs an importable named binding for both twins.`};let a=e.get("SELECT documentation FROM global_symbols WHERE id = ?",r.symbolId),c=Yt(Xt(a?.documentation??null));return{ok:!0,symbol:{ref:t,symbol:r.symbol,shortName:T(r.symbol)||I(r.symbol),file:r.relativePath,startLine:r.startLine,signature:c,paramCount:c?Oq(c):null}}}function Oq(e){let t=e.indexOf("(");if(t===-1)return null;let n=0,r=-1;for(let a=t;a<e.length;a+=1){let c=e[a];if(c==="(")n+=1;else if(c===")"&&(n-=1,n===0)){r=a;break}}if(r===-1)return null;let i=e.slice(t+1,r).trim();if(!i)return 0;let o=1,s=0;for(let a of i)a==="("||a==="["||a==="{"?s+=1:a===")"||a==="]"||a==="}"?s=Math.max(0,s-1):a===","&&s===0&&(o+=1);return o}function Mv(e,t,n){let r=Fq(t),i=Lq(e,n),s=_q(r,i).replace(/\\/g,"/").replace(/\.tsx?$/,".js");return s.startsWith(".")?s:`./${s}`}function jq(e,t,n,r,i){let o=Mv(n,r,e.file),s=Mv(n,r,t.file),a=i===null?"Signature comparison: unknown (one or both signatures unavailable in the index) \u2014 check by hand.":i?"Signature comparison: param counts match.":"Signature comparison: param counts DIFFER \u2014 twins may not be directly comparable; check by hand.";return`/**
|
|
800
800
|
* Generated by 'scip-query twin-ab'. scip-integrity-audit drill 5
|
|
801
801
|
* ("cross-examine same-concept twins"): where one concept is computed in
|
|
802
802
|
* more than one place, feed both the same input and require the same
|
|
@@ -834,10 +834,10 @@ describe.skipIf(inputs.length === 0)('twin-ab: ${e.shortName} vs ${t.shortName}'
|
|
|
834
834
|
expect(callA(...args)).toEqual(callB(...args));
|
|
835
835
|
});
|
|
836
836
|
});
|
|
837
|
-
`}var
|
|
838
|
-
`&&(n+=1);return n}function UR(e,t){let n=e.slice(t,t+400),r=/^\s*(['"`])((?:\\.|(?!\1)[\s\S])*)\1/.exec(n);return r?r[2]:"(anonymous)"}var mK=new Set(["vitest","chai","jest","@jest/globals","assert","node:assert","node:assert/strict","assert/strict","uvu/assert","expect","chai-as-promised"]),HR=/import\s+(?:\*\s+as\s+(\w+)|\{([^}]*)\}|(\w+))\s+from\s+['"]([^'"]+)['"]/g;function fK(e){let t=new Set(["expect","assert"]);HR.lastIndex=0;let n;for(;n=HR.exec(e);){let[,r,i,o,s]=n;if(!(!s||!mK.has(s))&&(r&&t.add(r),o&&t.add(o),i))for(let a of i.split(",")){let c=a.trim().replace(/^type\s+/,"");if(!c)continue;let l=/^(\w+)\s+as\s+(\w+)$/.exec(c);t.add(l?l[2]:c)}}return t}function WR(e,t){if(/\.should\b/.test(e)||/\bawait\s+(?:[\w$.]+\.)?findBy[A-Z]\w*\s*\(/.test(e)||/\bawait\s+\w*waitFor(?:Text|Value|Condition|Result|Event)\s*\(/.test(e)||/\bthrow\b/.test(e))return!0;for(let n of t){let r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(new RegExp(`\\b${r}\\s*(?:<[^<>]*>)?\\s*[.(]`).test(e))return!0}return!1}var pK=/\bfunction\s+(\w+)\s*\(/g,gK=/\b(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?\(/g,hK=60;function yK(e,t){let n=new Set;for(let r of[pK,gK]){r.lastIndex=0;let i;for(;i=r.exec(e);){let o=i[1],s=i.index+i[0].length-1,a=Mo(e,s),c=e.indexOf("{",a+1);if(c===-1||c-a>hK)continue;let l=bK(e,c),u=e.slice(c+1,l);WR(u,t)&&n.add(o)}}return n}function bK(e,t){let n=0;for(let r=t;r<e.length;r+=1){let i=e[r];if(i==="{")n+=1;else if(i==="}"&&(n-=1,n===0))return r}return e.length-1}var SK=/\bmock(?:ReturnValue|ResolvedValue)(?:Once)?\s*\(/g,wm=/\bexpect\s*\(/g,CK=/^\s*\.\s*(?:toBe|toEqual|toStrictEqual)\s*\(/,GR=/^(?:-?\d+(?:\.\d+)?|(['"`]).+\1)$/;function xK(e,t){let n=RK(e,t,SK);if(n.length===0)return null;let r=vK(e,t);for(let i of r)if(n.includes(i))return i;return null}function RK(e,t,n){let r=[];n.lastIndex=0;let i;for(;i=n.exec(e);){let o=i.index+i[0].length-1,s=Mo(e,o),a=t.slice(o+1,s).trim();GR.test(a)&&r.push(a),n.lastIndex=s+1}return r}function vK(e,t){let n=[];wm.lastIndex=0;let r;for(;r=wm.exec(e);){let i=r.index+r[0].length-1,o=Mo(e,i),s=e.slice(o+1),a=CK.exec(s);if(wm.lastIndex=o+1,!a)continue;let c=o+1+a[0].length-1,l=Mo(e,c),u=t.slice(c+1,l).trim();GR.test(u)&&n.push(u)}return n}function IK(e,t,n,r){let i=k(e,t),o=UR(i,n.argsStart),s=Ao(i,n.callStart),a=wK(e.config.projectRoot,t,s),c=a===null?"unknown":a>=r?"rot":"workflow";return{file:t,startLine:s,title:o,skipKind:n.skipKind,blockKind:n.kind,ageDays:a,rot:c}}function wK(e,t,n){let r=n+1;try{let i=Ot(e,["blame","-L",`${r},${r}`,"--porcelain","--",t]),o=/^author-time (\d+)$/m.exec(i);if(!o)return null;let s=Number(o[1]);return Number.isFinite(s)?Math.max(0,Math.round((Date.now()/1e3-s)/86400)):null}catch{return null}}var EK=.7,zR=.62,VR=.45;function DK(e,t={}){let{windowCommits:n=100,limit:r=30,scope:i,scanLimit:o}=t,s=ze(e,{historyMode:t.historyMode}).fileAddRecords();if(!s)return{available:!1,windowCommits:n,findings:[]};if(r<=0)return{available:!0,windowCommits:n,findings:[]};let a=MK(s,n);if(a.size===0)return{available:!0,windowCommits:n,findings:[]};let l=PK(e,{limit:r,minSimilarity:t.minSimilarity,scanLimit:o,scope:i,semantic:t.semantic,focusFiles:Number.isFinite(r)?void 0:a}).map(d=>OK(d,s,n)).filter(d=>d!==null);l.sort((d,m)=>(d.kind===m.kind?0:d.kind==="echo"?-1:1)||m.similarity-d.similarity||d.echoFile.localeCompare(m.echoFile)||d.echoSymbol.localeCompare(m.echoSymbol)||d.domain.localeCompare(m.domain));let u=l.slice(0,r).map(jK);return{available:!0,windowCommits:n,findings:u,rootCauseGroups:BK(u)}}function PK(e,t){let n=HK(t.limit),r=[...kK(e,{scope:t.scope,minSimilarity:t.minSimilarity??EK,limit:n,scanLimit:t.scanLimit,semantic:t.semantic,focusFiles:t.focusFiles})],i=ls(e,{scope:t.scope});return i.react&&r.push(...TK(e,{scope:t.scope,minSimilarity:t.minSimilarity??zR,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles}),...FK(e,{scope:t.scope,minSimilarity:t.minSimilarity??VR,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles})),i.vue&&r.push(...NK(e,{scope:t.scope,minSimilarity:t.minSimilarity??zR,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles}),...AK(e,{scope:t.scope,minSimilarity:t.minSimilarity??VR,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles})),r}function kK(e,t){return po(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,crossFileOnly:!0,scanLimit:t.scanLimit,semantic:t.semantic,focusFiles:t.focusFiles}).filter(n=>!Ie(n.symbolA)&&!Ie(n.symbolB)).map(n=>({domain:"callable",basis:n.similarityBasis??"callees",symbolA:n.shortNameA,fileA:n.fileA,symbolB:n.shortNameB,fileB:n.fileB,similarity:n.similarity,sharedEvidence:n.sharedCallees,sharedCallees:n.sharedCallees}))}function TK(e,t){return lc(e,t,{query:go,domain:"react-component",basis:"jsx-structure",symbolA:n=>n.componentA,symbolB:n=>n.componentB,evidenceBuckets:n=>[["component",n.sharedComponents],["tag",n.sharedNativeTags],["prop",n.sharedProps],["event",n.sharedEvents],["binding",n.sharedBindings]]})}function lc(e,t,n){return n.query(e,t).filter(r=>r.fileA!==r.fileB).filter(r=>n.acceptPair?.(r)??!0).map(r=>({domain:n.domain,basis:n.basis,symbolA:n.symbolA(r),fileA:r.fileA,symbolB:n.symbolB(r),fileB:r.fileB,similarity:r.similarity,sharedEvidence:UK(...n.evidenceBuckets(r)),sharedCallees:[]}))}function FK(e,t){return lc(e,t,{query:ho,domain:"react-hook",basis:"react-behavior",symbolA:n=>n.componentA,symbolB:n=>n.componentB,acceptPair:LK,evidenceBuckets:n=>[["hook",n.sharedHooks],["react-hook",n.sharedReactHooks],["effect",n.sharedEffects],["state",n.sharedState],["request",n.sharedRequests],["handler",n.sharedHandlers],["action",n.sharedHandlerVerbs]]})}var _K=new Set(["useCallback","useEffect","useLayoutEffect","useMemo","useMutation","useQueries","useQuery","useQueryClient","useReducer","useRef","useState"]);function LK(e){return e.sharedHooks.some(t=>!_K.has(t))||e.sharedState.length>0||e.sharedHandlers.length>0||e.sharedHandlerVerbs.length>=2}function NK(e,t){return lc(e,t,{query:yo,domain:"vue-component",basis:"vue-template",symbolA:n=>cc(n.fileA),symbolB:n=>cc(n.fileB),evidenceBuckets:n=>[["component",n.sharedComponents],["prop",n.sharedProps],["event",n.sharedEvents],["directive",n.sharedDirectives],["slot",n.sharedSlots],["identifier",n.sharedIdentifiers]]})}function AK(e,t){return lc(e,t,{query:bo,domain:"vue-composable",basis:"vue-behavior",symbolA:n=>cc(n.fileA),symbolB:n=>cc(n.fileB),evidenceBuckets:n=>[["composable",n.sharedComposables],["store",n.sharedStores],["reactivity",n.sharedReactivity],["lifecycle",n.sharedLifecycle],["request",n.sharedRequests],["function",n.sharedFunctions],["action",n.sharedFunctionVerbs],["binding",n.sharedBindings],["template-event",n.sharedTemplateEvents]]})}function MK(e,t){let n=new Set;for(let[r,i]of e)i.commitsAgo<=t&&n.add(r);return n}function OK(e,t,n){let r=t.get(e.fileA)?.commitsAgo??null,i=t.get(e.fileB)?.commitsAgo??null,o=r!==null&&r<=n,s=i!==null&&i<=n;if(!o&&!s)return null;if(o&&s){let a=(r??0)<=(i??0);return{kind:"twin",domain:e.domain,basis:e.basis,echoSymbol:a?e.symbolA:e.symbolB,echoFile:a?e.fileA:e.fileB,echoAgeCommits:(a?r:i)??0,establishedSymbol:a?e.symbolB:e.symbolA,establishedFile:a?e.fileB:e.fileA,establishedAgeCommits:a?i:r,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}return{kind:"echo",domain:e.domain,basis:e.basis,echoSymbol:o?e.symbolA:e.symbolB,echoFile:o?e.fileA:e.fileB,echoAgeCommits:(o?r:i)??0,establishedSymbol:o?e.symbolB:e.symbolA,establishedFile:o?e.fileB:e.fileA,establishedAgeCommits:o?i:r,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}function jK(e){let t=qR(e);return{...e,rootCauseKey:t,groupKey:`recent-duplicate:${t}`}}function qR(e){if(e.kind==="echo")return["echo",e.domain,e.basis,e.establishedSymbol].join(":");let t=e.sharedEvidence.slice().sort().join("|"),n=[e.echoSymbol,e.establishedSymbol].sort().join("|");return["twin",e.domain,e.basis,t||n].join(":")}function BK(e){let t=new Map;for(let[n,r]of e.entries()){let i=r.rootCauseKey??qR(r),o=r.groupKey??`recent-duplicate:${i}`,s=t.get(o);s||(s={groupKey:o,rootCauseKey:i,kind:r.kind,domain:r.domain,basis:r.basis,count:0,maxSimilarity:r.similarity,findingIndexes:[],echoFiles:new Set,establishedFile:r.kind==="echo"?r.establishedFile:void 0,establishedSymbol:r.kind==="echo"?r.establishedSymbol:void 0,relatedFiles:new Set,sharedEvidence:new Set,recommendation:$K(r)},t.set(o,s)),s.count+=1,s.maxSimilarity=Math.max(s.maxSimilarity,r.similarity),s.findingIndexes.push(n),s.echoFiles.add(r.echoFile),s.relatedFiles.add(r.echoFile),s.relatedFiles.add(r.establishedFile);for(let a of r.sharedEvidence)s.sharedEvidence.add(a)}return[...t.values()].map(n=>({...n,echoFiles:[...n.echoFiles].sort(),relatedFiles:[...n.relatedFiles].sort(),sharedEvidence:[...n.sharedEvidence].sort().slice(0,16)})).sort((n,r)=>r.count-n.count||r.maxSimilarity-n.maxSimilarity||n.groupKey.localeCompare(r.groupKey))}function $K(e){return e.kind==="echo"?"Review the established side once, then migrate or delete every echo in this group.":"Pick one owner for the new twins and consolidate the group before the copies diverge."}function HK(e){return Number.isFinite(e)?e*5:Number.POSITIVE_INFINITY}function UK(...e){let t=[],n=new Set;for(let[r,i]of e)for(let o of i){let s=`${r}:${o}`;n.has(s)||(n.add(s),t.push(s))}return t}function cc(e){return(e.split("/").pop()??e).replace(/\.[^.]+$/,"")}var WK=X("suppression-inventory",{clearGroups:["whole-project"]});function uc(e){return WK.get(e,()=>GK(e))}function GK(e){let t={dead:0,stale:0,wrapper:0,passthrough:0,drift:0,extract:0,similar:0,twin:0,uncategorized:0},n=new Map,r=0;for(let i of $e(e)){let o=k(e,i);if(!(!o||!o.includes("scip-query")))for(let s of o.split(/\r?\n/)){let a=mi(s);if(a===null)continue;r+=1,n.set(i,(n.get(i)??0)+1);let c=zK(a);t[c]+=1}}return{total:r,byCategory:t,byFile:n}}function zK(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}import{readFileSync as VK}from"fs";import{join as qK}from"path";function Em(e,t,n={}){let r=B(e,t);if(!r)return null;let i=new F(e),o=KK(e,r),s=r.endLine-r.startLine+1,c=i.calleeMap([r],{additive:!0,semantic:n.semantic}).get(r.symbolId)??[],l=new Set(c.map(u=>u.symbol));return{symbol:r.symbol,shortName:I(r.symbol),relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,loc:s,branches:o.branches,estimateBasis:o.estimateBasis,cyclomaticEstimate:o.branches+1,calleeCount:l.size,fanIn:YK(e,r.symbolId),fanOut:XK(c,r.relativePath)}}function KK(e,t){let n=K(e,t.relativePath);if(n){let r=XR(n.rootNode,t.startLine,t.endLine);if(r)return{branches:QK(r),estimateBasis:"ast"}}return{branches:ZR(YR(e,t.relativePath,t.startLine,t.endLine),JR(e,t.relativePath)),estimateBasis:"regex-fallback"}}function KR(e,t){let n=new Map,r=new Map;for(let i of t){let o=r.get(i.relativePath)??[];o.push(i),r.set(i.relativePath,o)}for(let[i,o]of r){let s=K(e,i),a=s===null?[]:o.filter(l=>s.rootNode.startPosition.row<=l.startLine&&s.rootNode.endPosition.row>=l.endLine),c=new Set(a.map(l=>l.symbolId));if(s&&a.length>0){for(let l of a)n.set(l.symbolId,{branches:0,estimateBasis:"ast"});ZK(s.rootNode,a,n)}for(let l of o)c.has(l.symbolId)||n.set(l.symbolId,JK(e,l))}return n}function JK(e,t){return{branches:ZR(YR(e,t.relativePath,t.startLine,t.endLine),JR(e,t.relativePath)),estimateBasis:"regex-fallback"}}function JR(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function YR(e,t,n,r){try{return VK(qK(e.config.projectRoot,t),"utf-8").split(`
|
|
837
|
+
`}var Ov={caller:3,"entry-surface":2,rooted:1},Bq=/not\s*yet\s*implement|not\s*implement|unimplement|\bnyi\b|\btodo\b|\bstub\b|not\s*supported|coming\s*soon/i,$q=/^throw\s+new\s+[\w.]*Error\s*\(([\s\S]*)\)\s*;?$/,Hq=/^return(\s+(null|undefined|false|0|''|""|``|\[\]|\{\}))?\s*;?$/,Uq=/\/\/\s*TODO\b|\/\*\s*TODO\b/i,Wq=/(?:=>|\))\s*(?::\s*[^{;=]+)?\s*\{\s*\}\s*;?\s*$/;function Gq(e,t={}){let{scope:n,limit:r=30,scanLimit:i,semantic:o=!0}=t,s=new F(e),a=se(s.productionCallableDefinitions({scope:n,minLoc:1,requireFunctionLikeSymbol:!0,excludeTypesFiles:!0}),i),c=[];for(let f of a){let p=Vq(e,f);p&&c.push(p)}if(c.length===0)return[];let l=Yq(e,c,a),u=c.filter(f=>!l.has(f.def.symbol));if(u.length===0)return[];let d=sn(e,s).forDefinitions(u.map(f=>f.def),{semantic:o}),m=[];for(let f of u){let g=d.get(f.def.symbolId)?.realConsumers.length??0,y=zq(e,f.def,g);y&&m.push({symbol:f.def.symbol,shortName:I(f.def.symbol),file:f.def.relativePath,startLine:f.def.startLine,endLine:f.def.endLine,loc:O(f.def),stubKind:f.stubKind,reachability:y,callerFanIn:g,stubText:f.stubText})}return m.sort((f,p)=>Ov[p.reachability]-Ov[f.reachability]||p.callerFanIn-f.callerFanIn||f.file.localeCompare(p.file)||f.startLine-p.startLine),r?m.slice(0,r):m}function zq(e,t,n){return n>0?"caller":de(e,t.symbol,t.relativePath)?"rooted":De(e,t.relativePath)?"entry-surface":null}function Vq(e,t){let n=ln(e,t);if(!n)return null;let r=jt(n),i=r.trim();if(i==="")return!Jq(n)||!Fo(e,t)?null:{def:t,stubKind:"empty-body",stubText:"(empty body)"};let o=Ci(r),s=st(r),a=qq(o,s);if(a.length!==1)return null;let c=a[0];return Kq(c)?{def:t,stubKind:"throw-stub",stubText:c.trim()}:Uq.test(r)&&Hq.test(c.trim())?{def:t,stubKind:"todo-return-default",stubText:i}:null}function qq(e,t){let n=[],r=0,i="";for(let o=0;o<t.length;o+=1){let s=t[o];if(s==="("||s==="["||s==="{"?r+=1:(s===")"||s==="]"||s==="}")&&(r=Math.max(0,r-1)),s===";"&&r===0){n.push(i),i="";continue}i+=e[o]??""}return i.trim()&&n.push(i),n.map(o=>o.trim()).filter(o=>o.length>0)}function Kq(e){let t=$q.exec(e.trim());return t?Bq.test(t[1]??""):!1}function Jq(e){return Wq.test(e.trimEnd())}function Yq(e,t,n){let r=new Set,i=new Set(t.map(a=>a.def.parentTypeName).filter(a=>a!==null));if(i.size===0)return r;let o=Qq(e,i),s=new Map;for(let a of n){if(!a.parentTypeName)continue;let c=s.get(a.leaf)??new Set;c.add(a.parentTypeName),s.set(a.leaf,c)}for(let a of t){let c=a.def.parentTypeName;if(!c)continue;let l=o.get(c);if(!l||l.size===0)continue;let u=s.get(a.def.leaf)??new Set;[...l].every(m=>u.has(m))&&r.add(a.def.symbol)}return r}var Xq=/\bclass\s+([A-Za-z_$][\w$]*)\s+extends\s+([A-Za-z_$][\w$]*)/g;function Qq(e,t){let n=new Map;for(let r of N(e,{includeIgnored:!1})){let i=P(e,r);if(i)for(let o of i.matchAll(Xq)){let s=o[1],a=o[2];if(!s||!a||!t.has(a))continue;let c=n.get(a)??new Set;c.add(s),n.set(a,c)}}return n}var Zq=/^(?:validate|verify|check|assert)(?:[A-Z].*)?$/,eK=/^(?:is|has)(?:[A-Z].*)?$/,tK=/[{,]\s*(?:ok|success|valid|isValid)\s*:\s*false\b/,Rm=/\breturn\b/g,nK=/\bfunction\b|=>|\)\s*(?::\s*[^{;=]+)?\s*\{/,rK=/\.(?:addIssue|push)\s*\(/;function iK(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=new F(e),s=se(o.productionCallableDefinitions({scope:n,minLoc:1,requireFunctionLikeSymbol:!0,excludeTypesFiles:!0}),i),a=[];for(let c of s){let l=sK(e,c);l&&a.push({symbol:c.symbol,shortName:I(c.symbol),file:c.relativePath,startLine:c.startLine,endLine:c.endLine,loc:O(c),...l})}return a.sort((c,l)=>c.file.localeCompare(l.file)||c.startLine-l.startLine||c.loc-l.loc),r?a.slice(0,r):a}function oK(e){return Zq.test(e)?"imperative":eK.test(e)?"predicate":null}function sK(e,t){let n=oK(t.leaf);if(!n||qr(e,t))return null;let r=ln(e,t);if(!r||!nK.test(r))return null;let i=z(e,t.relativePath)?.callables.find(s=>s.startLine===t.startLine&&s.endLine===t.endLine);if(n==="predicate"&&i?.paramCount===0)return null;if(rv(r)){let s=lK(e,t);return!s||$v(s.body,Bv(s.snippet))||jv(s.body)?null:{nameKind:n,resolvedVia:"one-hop-delegate",delegateTarget:s.shortName}}let o=jt(r);return $v(o,Bv(r))||jv(o)?null:{nameKind:n,resolvedVia:"direct"}}var aK=new Set(["if","for","while","switch","catch","function"]);function jv(e){let t=Ci(e);for(let n of t.matchAll(/\b([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\s*\(/g))if(!aK.has(n[1]))return!0;return!1}function Bv(e){let t=e.indexOf("=>");return t===-1?!1:!/^\s*\{/.test(e.slice(t+2))}function $v(e,t){let n=Ci(e);if(/\bthrow\b/.test(n)||/\.reject\s*\(/.test(n)||tK.test(n)||rK.test(n))return!0;let r=cK(n);if(t&&r.length===0){let i=n.trim();return i!==""&&i!=="true"}for(let i of r)if(i!==""&&i!=="true")return!0;return!1}function cK(e){let t=[];Rm.lastIndex=0;let n;for(;n=Rm.exec(e);){let r=n.index+n[0].length,i=0,o=e.length;for(let s=r;s<e.length;s+=1){let a=e[s];if(a==="("||a==="["||a==="{")i+=1;else if(a===")"||a==="]"||a==="}"){if(i===0){o=s;break}i-=1}else if(a===";"&&i===0){o=s;break}}t.push(e.slice(r,o).trim()),Rm.lastIndex=o}return t}function lK(e,t){let n=ft(e,t,{callableOnly:!0,limit:3,semanticEvidence:H}),r=[...new Set(n.map(c=>c.symbol))].filter(c=>c!==t.symbol);if(r.length!==1)return null;let o=wi(e,r[0]).match;if(!o)return null;let s=Y(e,o.relativePath).find(c=>c.symbolId===o.symbolId);if(!s)return null;let a=ln(e,s);return a?{body:jt(a),snippet:a,shortName:I(s.symbol)}:null}var uK=60;function dK(e,t={}){let{scope:n,limit:r=30,scanLimit:i,rotDays:o=uK}=t,s=se($e(e,{extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs"]}).filter(u=>G(u)==="test").filter(u=>!n||u.includes(n)).filter(u=>!e.isIgnored(u)).sort(),i),a=[],c=[],l=[];for(let u of s){let d=P(e,u);if(!d)continue;let m=vp(d),f=pK(d);for(let g of bK(m,f))f.add(g);let p=mK(m);for(let g of p){if(g.skip){c.push(wK(e,u,g,o));continue}if(g.kind==="describe")continue;let y=Uv(d,g.argsStart),h=m.slice(g.argsStart,g.callEnd),x=d.slice(g.argsStart,g.callEnd);Wv(h,f)||a.push({file:u,startLine:Ao(d,g.callStart),endLine:Ao(d,g.callEnd),title:y,severity:/\bawait\b/.test(h)?"low":"high"});let b=vK(h,x);b&&l.push({file:u,startLine:Ao(d,g.callStart),endLine:Ao(d,g.callEnd),title:y,echoedValue:b})}}return{assertionFree:r?a.slice(0,r):a,skipped:r?c.slice(0,r):c,mockEcho:r?l.slice(0,r):l}}var Im=/(?<!\.)\b(?:x(it|test|describe)|(it|test|describe)(?:\.\s*(skip|only|todo|each\s*\([^)]*\)))?)\s*\(/g;function mK(e){let t=[];Im.lastIndex=0;let n;for(;n=Im.exec(e);){let r=n[1],i=r??n[2];if(!i)continue;let o=n[3]?.split(/\s*\(/)[0],s=n.index,a=n.index+n[0].length-1,c=Mo(e,a);Im.lastIndex=a+1,o!=="each"&&t.push({kind:i,skip:r!==void 0||o==="skip"||o==="todo",skipKind:o==="todo"?"todo":"skip",callStart:s,argsStart:a+1,callEnd:c+1})}return t}function Mo(e,t){let n=0;for(let r=t;r<e.length;r+=1){let i=e[r];if(i==="(")n+=1;else if(i===")"&&(n-=1,n===0))return r}return e.length-1}function Ao(e,t){let n=0;for(let r=0;r<t&&r<e.length;r+=1)e[r]===`
|
|
838
|
+
`&&(n+=1);return n}function Uv(e,t){let n=e.slice(t,t+400),r=/^\s*(['"`])((?:\\.|(?!\1)[\s\S])*)\1/.exec(n);return r?r[2]:"(anonymous)"}var fK=new Set(["vitest","chai","jest","@jest/globals","assert","node:assert","node:assert/strict","assert/strict","uvu/assert","expect","chai-as-promised"]),Hv=/import\s+(?:\*\s+as\s+(\w+)|\{([^}]*)\}|(\w+))\s+from\s+['"]([^'"]+)['"]/g;function pK(e){let t=new Set(["expect","assert"]);Hv.lastIndex=0;let n;for(;n=Hv.exec(e);){let[,r,i,o,s]=n;if(!(!s||!fK.has(s))&&(r&&t.add(r),o&&t.add(o),i))for(let a of i.split(",")){let c=a.trim().replace(/^type\s+/,"");if(!c)continue;let l=/^(\w+)\s+as\s+(\w+)$/.exec(c);t.add(l?l[2]:c)}}return t}function Wv(e,t){if(/\.should\b/.test(e)||/\bawait\s+(?:[\w$.]+\.)?findBy[A-Z]\w*\s*\(/.test(e)||/\bawait\s+\w*waitFor(?:Text|Value|Condition|Result|Event)\s*\(/.test(e)||/\bthrow\b/.test(e))return!0;for(let n of t){let r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(new RegExp(`\\b${r}\\s*(?:<[^<>]*>)?\\s*[.(]`).test(e))return!0}return!1}var gK=/\bfunction\s+(\w+)\s*\(/g,hK=/\b(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?\(/g,yK=60;function bK(e,t){let n=new Set;for(let r of[gK,hK]){r.lastIndex=0;let i;for(;i=r.exec(e);){let o=i[1],s=i.index+i[0].length-1,a=Mo(e,s),c=e.indexOf("{",a+1);if(c===-1||c-a>yK)continue;let l=SK(e,c),u=e.slice(c+1,l);Wv(u,t)&&n.add(o)}}return n}function SK(e,t){let n=0;for(let r=t;r<e.length;r+=1){let i=e[r];if(i==="{")n+=1;else if(i==="}"&&(n-=1,n===0))return r}return e.length-1}var CK=/\bmock(?:ReturnValue|ResolvedValue)(?:Once)?\s*\(/g,wm=/\bexpect\s*\(/g,xK=/^\s*\.\s*(?:toBe|toEqual|toStrictEqual)\s*\(/,Gv=/^(?:-?\d+(?:\.\d+)?|(['"`]).+\1)$/;function vK(e,t){let n=RK(e,t,CK);if(n.length===0)return null;let r=IK(e,t);for(let i of r)if(n.includes(i))return i;return null}function RK(e,t,n){let r=[];n.lastIndex=0;let i;for(;i=n.exec(e);){let o=i.index+i[0].length-1,s=Mo(e,o),a=t.slice(o+1,s).trim();Gv.test(a)&&r.push(a),n.lastIndex=s+1}return r}function IK(e,t){let n=[];wm.lastIndex=0;let r;for(;r=wm.exec(e);){let i=r.index+r[0].length-1,o=Mo(e,i),s=e.slice(o+1),a=xK.exec(s);if(wm.lastIndex=o+1,!a)continue;let c=o+1+a[0].length-1,l=Mo(e,c),u=t.slice(c+1,l).trim();Gv.test(u)&&n.push(u)}return n}function wK(e,t,n,r){let i=P(e,t),o=Uv(i,n.argsStart),s=Ao(i,n.callStart),a=EK(e.config.projectRoot,t,s),c=a===null?"unknown":a>=r?"rot":"workflow";return{file:t,startLine:s,title:o,skipKind:n.skipKind,blockKind:n.kind,ageDays:a,rot:c}}function EK(e,t,n){let r=n+1;try{let i=Ot(e,["blame","-L",`${r},${r}`,"--porcelain","--",t]),o=/^author-time (\d+)$/m.exec(i);if(!o)return null;let s=Number(o[1]);return Number.isFinite(s)?Math.max(0,Math.round((Date.now()/1e3-s)/86400)):null}catch{return null}}var DK=.7,zv=.62,Vv=.45;function kK(e,t={}){let{windowCommits:n=100,limit:r=30,scope:i,scanLimit:o}=t,s=ze(e,{historyMode:t.historyMode}).fileAddRecords();if(!s)return{available:!1,windowCommits:n,findings:[]};if(r<=0)return{available:!0,windowCommits:n,findings:[]};let a=OK(s,n);if(a.size===0)return{available:!0,windowCommits:n,findings:[]};let l=PK(e,{limit:r,minSimilarity:t.minSimilarity,scanLimit:o,scope:i,semantic:t.semantic,focusFiles:Number.isFinite(r)?void 0:a}).map(d=>jK(d,s,n)).filter(d=>d!==null);l.sort((d,m)=>(d.kind===m.kind?0:d.kind==="echo"?-1:1)||m.similarity-d.similarity||d.echoFile.localeCompare(m.echoFile)||d.echoSymbol.localeCompare(m.echoSymbol)||d.domain.localeCompare(m.domain));let u=l.slice(0,r).map(BK);return{available:!0,windowCommits:n,findings:u,rootCauseGroups:$K(u)}}function PK(e,t){let n=UK(t.limit),r=[...TK(e,{scope:t.scope,minSimilarity:t.minSimilarity??DK,limit:n,scanLimit:t.scanLimit,semantic:t.semantic,focusFiles:t.focusFiles})],i=us(e,{scope:t.scope});return i.react&&r.push(...FK(e,{scope:t.scope,minSimilarity:t.minSimilarity??zv,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles}),..._K(e,{scope:t.scope,minSimilarity:t.minSimilarity??Vv,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles})),i.vue&&r.push(...AK(e,{scope:t.scope,minSimilarity:t.minSimilarity??zv,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles}),...MK(e,{scope:t.scope,minSimilarity:t.minSimilarity??Vv,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles})),r}function TK(e,t){return po(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,crossFileOnly:!0,scanLimit:t.scanLimit,semantic:t.semantic,focusFiles:t.focusFiles}).filter(n=>!Ie(n.symbolA)&&!Ie(n.symbolB)).map(n=>({domain:"callable",basis:n.similarityBasis??"callees",symbolA:n.shortNameA,fileA:n.fileA,symbolB:n.shortNameB,fileB:n.fileB,similarity:n.similarity,sharedEvidence:n.sharedCallees,sharedCallees:n.sharedCallees}))}function FK(e,t){return uc(e,t,{query:go,domain:"react-component",basis:"jsx-structure",symbolA:n=>n.componentA,symbolB:n=>n.componentB,evidenceBuckets:n=>[["component",n.sharedComponents],["tag",n.sharedNativeTags],["prop",n.sharedProps],["event",n.sharedEvents],["binding",n.sharedBindings]]})}function uc(e,t,n){return n.query(e,t).filter(r=>r.fileA!==r.fileB).filter(r=>n.acceptPair?.(r)??!0).map(r=>({domain:n.domain,basis:n.basis,symbolA:n.symbolA(r),fileA:r.fileA,symbolB:n.symbolB(r),fileB:r.fileB,similarity:r.similarity,sharedEvidence:WK(...n.evidenceBuckets(r)),sharedCallees:[]}))}function _K(e,t){return uc(e,t,{query:ho,domain:"react-hook",basis:"react-behavior",symbolA:n=>n.componentA,symbolB:n=>n.componentB,acceptPair:NK,evidenceBuckets:n=>[["hook",n.sharedHooks],["react-hook",n.sharedReactHooks],["effect",n.sharedEffects],["state",n.sharedState],["request",n.sharedRequests],["handler",n.sharedHandlers],["action",n.sharedHandlerVerbs]]})}var LK=new Set(["useCallback","useEffect","useLayoutEffect","useMemo","useMutation","useQueries","useQuery","useQueryClient","useReducer","useRef","useState"]);function NK(e){return e.sharedHooks.some(t=>!LK.has(t))||e.sharedState.length>0||e.sharedHandlers.length>0||e.sharedHandlerVerbs.length>=2}function AK(e,t){return uc(e,t,{query:yo,domain:"vue-component",basis:"vue-template",symbolA:n=>lc(n.fileA),symbolB:n=>lc(n.fileB),evidenceBuckets:n=>[["component",n.sharedComponents],["prop",n.sharedProps],["event",n.sharedEvents],["directive",n.sharedDirectives],["slot",n.sharedSlots],["identifier",n.sharedIdentifiers]]})}function MK(e,t){return uc(e,t,{query:bo,domain:"vue-composable",basis:"vue-behavior",symbolA:n=>lc(n.fileA),symbolB:n=>lc(n.fileB),evidenceBuckets:n=>[["composable",n.sharedComposables],["store",n.sharedStores],["reactivity",n.sharedReactivity],["lifecycle",n.sharedLifecycle],["request",n.sharedRequests],["function",n.sharedFunctions],["action",n.sharedFunctionVerbs],["binding",n.sharedBindings],["template-event",n.sharedTemplateEvents]]})}function OK(e,t){let n=new Set;for(let[r,i]of e)i.commitsAgo<=t&&n.add(r);return n}function jK(e,t,n){let r=t.get(e.fileA)?.commitsAgo??null,i=t.get(e.fileB)?.commitsAgo??null,o=r!==null&&r<=n,s=i!==null&&i<=n;if(!o&&!s)return null;if(o&&s){let a=(r??0)<=(i??0);return{kind:"twin",domain:e.domain,basis:e.basis,echoSymbol:a?e.symbolA:e.symbolB,echoFile:a?e.fileA:e.fileB,echoAgeCommits:(a?r:i)??0,establishedSymbol:a?e.symbolB:e.symbolA,establishedFile:a?e.fileB:e.fileA,establishedAgeCommits:a?i:r,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}return{kind:"echo",domain:e.domain,basis:e.basis,echoSymbol:o?e.symbolA:e.symbolB,echoFile:o?e.fileA:e.fileB,echoAgeCommits:(o?r:i)??0,establishedSymbol:o?e.symbolB:e.symbolA,establishedFile:o?e.fileB:e.fileA,establishedAgeCommits:o?i:r,similarity:e.similarity,sharedEvidence:e.sharedEvidence,sharedCallees:e.sharedCallees}}function BK(e){let t=qv(e);return{...e,rootCauseKey:t,groupKey:`recent-duplicate:${t}`}}function qv(e){if(e.kind==="echo")return["echo",e.domain,e.basis,e.establishedSymbol].join(":");let t=e.sharedEvidence.slice().sort().join("|"),n=[e.echoSymbol,e.establishedSymbol].sort().join("|");return["twin",e.domain,e.basis,t||n].join(":")}function $K(e){let t=new Map;for(let[n,r]of e.entries()){let i=r.rootCauseKey??qv(r),o=r.groupKey??`recent-duplicate:${i}`,s=t.get(o);s||(s={groupKey:o,rootCauseKey:i,kind:r.kind,domain:r.domain,basis:r.basis,count:0,maxSimilarity:r.similarity,findingIndexes:[],echoFiles:new Set,establishedFile:r.kind==="echo"?r.establishedFile:void 0,establishedSymbol:r.kind==="echo"?r.establishedSymbol:void 0,relatedFiles:new Set,sharedEvidence:new Set,recommendation:HK(r)},t.set(o,s)),s.count+=1,s.maxSimilarity=Math.max(s.maxSimilarity,r.similarity),s.findingIndexes.push(n),s.echoFiles.add(r.echoFile),s.relatedFiles.add(r.echoFile),s.relatedFiles.add(r.establishedFile);for(let a of r.sharedEvidence)s.sharedEvidence.add(a)}return[...t.values()].map(n=>({...n,echoFiles:[...n.echoFiles].sort(),relatedFiles:[...n.relatedFiles].sort(),sharedEvidence:[...n.sharedEvidence].sort().slice(0,16)})).sort((n,r)=>r.count-n.count||r.maxSimilarity-n.maxSimilarity||n.groupKey.localeCompare(r.groupKey))}function HK(e){return e.kind==="echo"?"Review the established side once, then migrate or delete every echo in this group.":"Pick one owner for the new twins and consolidate the group before the copies diverge."}function UK(e){return Number.isFinite(e)?e*5:Number.POSITIVE_INFINITY}function WK(...e){let t=[],n=new Set;for(let[r,i]of e)for(let o of i){let s=`${r}:${o}`;n.has(s)||(n.add(s),t.push(s))}return t}function lc(e){return(e.split("/").pop()??e).replace(/\.[^.]+$/,"")}var GK=X("suppression-inventory",{clearGroups:["whole-project"]});function dc(e){return GK.get(e,()=>zK(e))}function zK(e){let t={dead:0,stale:0,wrapper:0,passthrough:0,drift:0,extract:0,similar:0,twin:0,uncategorized:0},n=new Map,r=0;for(let i of $e(e)){let o=P(e,i);if(!(!o||!o.includes("scip-query")))for(let s of o.split(/\r?\n/)){let a=mi(s);if(a===null)continue;r+=1,n.set(i,(n.get(i)??0)+1);let c=VK(a);t[c]+=1}}return{total:r,byCategory:t,byFile:n}}function VK(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}import{readFileSync as qK}from"fs";import{join as KK}from"path";function Em(e,t,n={}){let r=B(e,t);if(!r)return null;let i=new F(e),o=JK(e,r),s=r.endLine-r.startLine+1,c=i.calleeMap([r],{additive:!0,semantic:n.semantic}).get(r.symbolId)??[],l=new Set(c.map(u=>u.symbol));return{symbol:r.symbol,shortName:I(r.symbol),relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,loc:s,branches:o.branches,estimateBasis:o.estimateBasis,cyclomaticEstimate:o.branches+1,calleeCount:l.size,fanIn:XK(e,r.symbolId),fanOut:QK(c,r.relativePath)}}function JK(e,t){let n=K(e,t.relativePath);if(n){let r=Xv(n.rootNode,t.startLine,t.endLine);if(r)return{branches:ZK(r),estimateBasis:"ast"}}return{branches:Zv(Yv(e,t.relativePath,t.startLine,t.endLine),Jv(e,t.relativePath)),estimateBasis:"regex-fallback"}}function Kv(e,t){let n=new Map,r=new Map;for(let i of t){let o=r.get(i.relativePath)??[];o.push(i),r.set(i.relativePath,o)}for(let[i,o]of r){let s=K(e,i),a=s===null?[]:o.filter(l=>s.rootNode.startPosition.row<=l.startLine&&s.rootNode.endPosition.row>=l.endLine),c=new Set(a.map(l=>l.symbolId));if(s&&a.length>0){for(let l of a)n.set(l.symbolId,{branches:0,estimateBasis:"ast"});e2(s.rootNode,a,n)}for(let l of o)c.has(l.symbolId)||n.set(l.symbolId,YK(e,l))}return n}function YK(e,t){return{branches:Zv(Yv(e,t.relativePath,t.startLine,t.endLine),Jv(e,t.relativePath)),estimateBasis:"regex-fallback"}}function Jv(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function Yv(e,t,n,r){try{return qK(KK(e.config.projectRoot,t),"utf-8").split(`
|
|
839
839
|
`).slice(n,r+1).join(`
|
|
840
|
-
`)}catch{return""}}function
|
|
840
|
+
`)}catch{return""}}function XK(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
|
|
841
841
|
FROM mentions m
|
|
842
842
|
JOIN chunks c ON m.chunk_id = c.id
|
|
843
843
|
JOIN (
|
|
@@ -849,9 +849,9 @@ describe.skipIf(inputs.length === 0)('twin-ab: ${e.shortName} vs ${t.shortName}'
|
|
|
849
849
|
) sym_def ON sym_def.symbol_id = m.symbol_id
|
|
850
850
|
WHERE m.symbol_id = ?
|
|
851
851
|
AND m.role != 1
|
|
852
|
-
AND sym_def.document_id != c.document_id`,t)?.c??0}function
|
|
852
|
+
AND sym_def.document_id != c.document_id`,t)?.c??0}function QK(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function ZK(e){let t=0;return Dm(e,n=>{t+=Qv(n)}),t}function e2(e,t,n){let r=[...t].sort((i,o)=>i.startLine-o.startLine||o.endLine-i.endLine);Dm(e,i=>{let o=Qv(i);if(o===0)return;let s=i.startPosition.row,a=i.endPosition.row;for(let c of r){if(c.startLine>s)break;if(c.endLine<a)continue;let l=n.get(c.symbolId);l&&(l.branches+=o)}})}function Dm(e,t){t(e);for(let n of e.namedChildren)Dm(n,t)}function Xv(e,t,n){if(e.startPosition.row>t||e.endPosition.row<n)return null;for(let r of e.namedChildren){let i=Xv(r,t,n);if(i)return i}return e}var t2=new Set(["if_statement","conditional_expression","ternary_expression","for_statement","for_in_statement","for_of_statement","while_statement","do_statement","switch_case","case_statement","catch_clause","except_clause","elif_clause","match_arm"]);function Qv(e){return t2.has(e.type)?1:e.type==="binary_expression"&&e.parent?.type!=="binary_expression"&&(e.text.includes("&&")||e.text.includes("||"))?n2(e.text):0}function n2(e){return(e.match(/&&|\|\|/g)??[]).length}function Zv(e,t){let n=st(e),r=0,i=[/\bif\b/g,/\belse\s+if\b/g,/\belse\b/g,/\bfor\b/g,/\bwhile\b/g,/\bswitch\b/g,/\bcase\b/g,/\bcatch\b/g,/\?\s*[^?]/g,/&&/g,/\|\|/g];for(let o of i){let s=n.match(o);s&&(r+=s.length)}if(t==="python"){let o=[/\belif\b/g,/\bexcept\b/g,/\bfinally\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}else if(t==="rust"){let o=[/\bmatch\b/g,/=>/g,/\bloop\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}else if(t==="ruby"){let o=[/\belsif\b/g,/\bunless\b/g,/\brescue\b/g,/\bwhen\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}else if(t==="go"){let o=[/\bselect\b/g,/\bdefer\b/g];for(let s of o){let a=n.match(s);a&&(r+=a.length)}}return r}function km(e,t,n={}){let r=B(e,t);if(!r)return null;let i=[{file:r.relativePath,line:r.startLine}],o=kt(e,r,{semantic:n.semantic,semanticEvidence:H}).map(c=>({file:c.file,line:c.line,enclosingSymbol:c.enclosingSymbol??"(top-level)",enclosingShort:c.enclosingSymbol?I(c.enclosingSymbol):"(top-level)"})),{producers:s,consumers:a}=r2(e,r,o,{semantic:n.semantic!==!1});return{symbol:r.symbol,shortName:I(r.symbol),relativePath:r.relativePath,definitionSites:i.filter(c=>!e.isIgnored(c.file)),usageSites:o,producers:s.filter(c=>!e.isIgnored(c.file)).map(c=>({symbol:c.symbol,shortName:I(c.symbol),file:c.file})),consumers:a.filter(c=>!e.isIgnored(c.file)).map(c=>({symbol:c.symbol,shortName:c.symbol===c.file?"(top-level)":I(c.symbol),file:c.file}))}}function r2(e,t,n,r){let i=Vr(ft(e,t,{limit:30,semantic:r.semantic,semanticEvidence:H}).map(a=>({symbol:a.symbol,file:a.file}))),o=Vr(xt(e,t,{limit:30,semantic:r.semantic,semanticEvidence:H})),s=o.length>0?o:Vr(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:i,consumers:s}}function mc(e,t,n={}){let{direction:r="backward",maxDepth:i=3}=n,o=B(e,t);return o?r==="backward"?i2(e,o,i,{semantic:n.semantic!==!1}):o2(e,o,{semantic:n.semantic!==!1}):null}function i2(e,t,n,r){let i=[],o=new Set([t.symbol]),s=[t];for(let a=1;a<=n&&s.length!==0;a++){let c=[];for(let l of s){let u=ft(e,l,{semantic:r.semantic,semanticEvidence:H});for(let d of u){if(o.has(d.symbol))continue;o.add(d.symbol),i.push({symbol:d.symbol,shortName:I(d.symbol),file:d.file,relationship:a===1?"referenced within definition (callee)":`depth ${a} callee`});let m=Ei(e,d.symbol);m&&!e.isIgnored(m.relativePath)&&c.push(m)}}s=c}return{symbol:t.symbol,shortName:I(t.symbol),direction:"backward",connectedSymbols:i}}function o2(e,t,n){let r=new Set,i=[],o=new F(e);for(let s of kt(e,t,{semantic:n.semantic,semanticEvidence:H})){if(i.length>=30)break;let a=s.enclosingSymbol??Dt(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=Ei(e,a);!c||e.isIgnored(c.relativePath)||r.has(c.symbol)||(r.add(c.symbol),i.push({symbol:c.symbol,shortName:I(c.symbol),file:c.relativePath,relationship:`references target at ${s.file}:${s.line+1}`}))}return i.sort((s,a)=>s.file.localeCompare(a.file)),{symbol:t.symbol,shortName:I(t.symbol),direction:"forward",connectedSymbols:i}}function s2(e,t,n={}){let r=n.impactDepth??3,i=n.sliceDepth??3,o=n.semantic,s=!c2(t),a=s?Ne("trace",t,()=>pd(e,t,{semantic:o}),v=>({definitions:v.definitions.length,references:v.referencedBy.length})):{definitions:[],referencedBy:[]},c=s?Ne("call-graph",t,()=>Id(e,t,{semantic:o}),v=>({callers:v?.callers.length??0,callees:v?.callees.length??0})):null,l=s?Ne("complexity",t,()=>Em(e,t,{semantic:o}),v=>({callees:v?.calleeCount??0})):null,u=s?Ne("dataflow",t,()=>km(e,t,{semantic:o}),v=>({references:v?.usageSites.length??0,producers:v?.producers.length??0,consumers:v?.consumers.length??0})):null,d=s?Ne("backward-slice",t,()=>mc(e,t,{direction:"backward",maxDepth:i,semantic:o}),v=>({maxDepth:i,connectedSymbols:v?.connectedSymbols.length??0})):null,m=s?Ne("forward-slice",t,()=>mc(e,t,{direction:"forward",maxDepth:i,semantic:o}),v=>({maxDepth:i,connectedSymbols:v?.connectedSymbols.length??0})):null,f=s?Ne("affected",t,()=>$d(e,t,{maxDepth:r,scope:n.scope}),v=>({maxDepth:r,affectedSymbols:v.length})):[],p=Ne("change-surface",t,()=>Hd(e,t,{semantic:o}),v=>({symbols:v?.symbols.length??0,externalConsumers:v?.totalExternalConsumers??0})),g=Ne("system",t,()=>yd(e,t),v=>({files:v.files.length,symbols:v.symbols.length})),y=g.files.length===1,h=Ne("deps",t,()=>y?g.dependsOn.map(v=>({relativePath:v})):gd(e,t),v=>({files:v.length,reusedSystem:y})),x=Ne("rdeps",t,()=>y?g.dependedOnBy.map(v=>({relativePath:v})):hd(e,t),v=>({files:v.length,reusedSystem:y})),b=Ne("surface",t,()=>bd(e,t),v=>({consumers:v.length})),C={symbol:a.definitions.length>0||a.referencedBy.length>0||c!==null||l!==null||u!==null||d!==null||m!==null||f.length>0,file:p!==null||h.length>0||x.length>0,module:g.files.length>0||g.symbols.length>0||b.length>0},S=[];!C.symbol&&!C.file&&!C.module&&S.push("No symbol, file, or module matched target.");let R=p?.file??a.definitions[0]?.relativePath??null;return{target:t,matched:C,history:Ne("history",R??t,()=>a2(e,R,n.gitHead)),trace:a,callGraph:c,complexity:l,dataflow:u,backwardSlice:d,forwardSlice:m,affected:f,changeSurface:p,deps:h,rdeps:x,system:g,surface:b,warnings:S}}function Ne(e,t,n,r=()=>({})){let i;return E(`plan-context.${e}`,()=>(i=n(),i),()=>({target:t,...r(i)}))}function a2(e,t,n){let r={available:!1,file:t,churn:null,coChangePartners:[],suppressionsInFile:0};if(!t)return r;let i=ze(e,n?{head:n}:{}),o=Ne("history.churn",t,()=>i.fileChurn(),c=>({files:c?.size??0}));if(!o)return r;let s=Ne("history.co-change",t,()=>xo(e,t,{limit:5,...n?{head:n}:{}}),c=>({commits:c.commitsAnalyzed,partners:c.findings.length})),a=Ne("history.suppressions",t,()=>dc(e).byFile.get(t)??0,c=>({suppressions:c}));return{available:!0,file:t,churn:o.get(t)??{changes:0,fixChanges:0,lastChangedAt:0},coChangePartners:s.findings.map(c=>({file:c.fileA===t?c.fileB:c.fileA,together:c.together,confidence:c.confidence,subjectContext:c.subjectContext})),suppressionsInFile:a}}function c2(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z0-9]+(?::\d+(?:-\d+)?)?$/.test(e)}var l2=new Set(Nt());function Pm(e,t){let{scope:n,minLoc:r=10,limit:i=30,scanLimit:o}=t??{},s=new F(e);return gt({candidates:()=>s.productionCallableDefinitions({scope:n,minLoc:r,requireFunctionLikeSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof o=="number"&&o>0}),scanLimit:o,filterCandidate:u2,profile:{name:"complexity-hotspots"},prepare:a=>{let c=m2(e,a),l=t?.semantic!==!1,u=l?We(e):null;u?.materializeReferences(a,{prefetchCallees:!0});let d=s.crossFileCallerMap(a,{semantic:!1});return{callerMap:u?on(d,u.callerMap(a)):d,calleeMap:s.calleeMap(a,{semantic:l}),languageByFile:c,clojureCallableIds:f2(e,a,c),branchEstimates:Kv(e,a)}},evaluate:(a,c)=>d2(a,c,r),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:i})}function u2(e){return e.symbol.startsWith("rust-analyzer ")?typeof e.kind=="number"&&l2.has(e.kind):!0}function d2(e,t,n){if(t.languageByFile.get(e.relativePath)==="clojure"&&!t.clojureCallableIds.has(e.symbolId))return null;let r=e.endLine-e.startLine+1;if(r<n)return null;let i=t.callerMap.get(e.symbolId)?.size??0,o=t.calleeMap.get(e.symbolId)??[],s=new Set,a=new Set;for(let m of o){let f=`${m.symbol}|${m.file}`;s.add(f),m.file!==e.relativePath&&a.add(f)}let c=a.size,l=s.size,u=t.branchEstimates.get(e.symbolId)??{branches:0,estimateBasis:"regex-fallback"},d=u.branches+1;return{symbol:e.symbol,shortName:I(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:r,fanIn:i,fanOut:c,calleeCount:l,branches:u.branches,estimateBasis:u.estimateBasis,score:Math.round(r/50*(i/5)*Math.max(c/5,1)*Math.max(d/5,1)*100)/100}}function m2(e,t){let n=[...new Set(t.map(o=>o.relativePath))];if(n.length===0)return new Map;let r=n.map(()=>"?").join(", "),i=e.all(`SELECT relative_path, language
|
|
853
853
|
FROM documents
|
|
854
|
-
WHERE relative_path IN (${r})`,...n);return new Map(i.map(o=>[o.relative_path,o.language?.toLowerCase()??null]))}function m2(e,t,n){let r=new Set,i=new Map;for(let o of t){if(n.get(o.relativePath)!=="clojure")continue;let s=i.get(o.relativePath);s||(s=new Set((z(e,o.relativePath)?.callables??[]).map(a=>`${a.name}:${a.startLine}`)),i.set(o.relativePath,s)),s.has(`${o.leaf}:${o.startLine}`)&&r.add(o.symbolId)}return r}function $t(e,t){return`${e}\0${t}`}function Wfe(e,t,n,r,i,o={}){let s=new Map(e.map(l=>[$t(l.check,l.findingId),l])),a=[],c=(l,u)=>{let d=n.get(l.findingId),m=u==="resolved"?o.verifiedAgainstByFinding?.get($t(l.check,l.findingId)):void 0;a.push({ts:i,check:l.check,findingId:l.findingId,event:u,commit:r,...o.comparisonBaseCommit?{comparisonBaseCommit:o.comparisonBaseCommit}:{},...m?{verifiedAgainstCommit:m}:{},...d?{symbol:d}:{}})};for(let l of t){let u=s.get($t(l.check,l.findingId));if(!u){c(l,"caught"),l.outcome==="suppressed"&&c(l,"suppressed");continue}u.outcome!==l.outcome&&(l.outcome==="resolved"?c(l,"resolved"):l.outcome==="suppressed"?c(l,"suppressed"):l.outcome==="still-open"&&c(l,"reopened"))}return a}function Gfe(e){for(let t=e.length-1;t>=0;t-=1){let n=e[t];if(n?.event==="caught"||n?.event==="reopened")return n}}function f2(e,t,n,r,i=new Set){let o=new Map(e.map(c=>[$t(c.check,c.findingId),c])),s=new Set(t.map(c=>$t(c.check,c.findingId))),a=new Set(n);for(let c of t){let l=$t(c.check,c.findingId),u=o.get(l),d=c.suppressed?"suppressed":"still-open";u?o.set(l,{...u,lastSeen:r,timesShown:u.timesShown+1,outcome:d}):o.set(l,{check:c.check,findingId:c.findingId,firstSeen:r,lastSeen:r,timesShown:1,outcome:d})}for(let c of e){if(!a.has(c.check))continue;let l=$t(c.check,c.findingId);s.has(l)||i.has(l)||c.outcome!=="resolved"&&o.set(l,{...c,outcome:"resolved"})}return[...o.values()]}function Tm(e,t){let n=new Map;for(let i of e){let o=n.get(i.check)??[];o.push(i),n.set(i.check,o)}let r=[];for(let[i,o]of n){let s=o.filter(d=>d.outcome==="resolved").length,a=o.filter(d=>d.outcome==="suppressed").length,c=o.filter(d=>d.outcome==="still-open").length,l=o.length,u=o.filter(d=>d.outcome==="still-open").sort((d,m)=>d.firstSeen-m.firstSeen)[0];r.push({check:i,seen:l,resolved:s,suppressed:a,stillOpen:c,resolutionRate:l>0?s/l:0,suppressionRate:l>0?a/l:0,oldestOpenAgeDays:u?Math.floor((t-u.firstSeen)/ev):null})}return r.sort((i,o)=>i.check.localeCompare(o.check))}var ev=864e5,p2=50,g2=.1,h2=10;function y2(e,t,n){return e.filter(r=>r.check===t).sort((r,i)=>i.firstSeen-r.firstSeen).slice(0,n)}function Kfe(e,t,n){if(t.length===0)return null;let r=new Map(e.map(s=>[$t(s.check,s.findingId),s])),i=t.map(s=>r.get($t(s.check,s.findingId))).filter(s=>s!==void 0&&s.timesShown>1);if(i.length===0)return null;let o=Math.max(...i.map(s=>Math.floor((n-s.firstSeen)/ev)));return`${t.length} finding(s), ${i.length} shown before and unresolved (oldest: ${o} day(s))`}function Jfe(e,t){let n=[];for(let r of[...new Set(t)].sort()){let i=y2(e,r,p2);i.length<h2||i.filter(a=>a.outcome==="resolved").length/i.length>=g2||n.push(`(the ${r} check's findings are rarely acted on in this repo \u2014 consider suppressing with reasons or tuning its config)`)}return n}function mc(e){return of(e).map(t=>({check:t.check,findingId:t.findingId,firstSeen:t.firstSeen,lastSeen:t.lastSeen,timesShown:t.timesShown,outcome:t.outcome}))}function Yfe(e,t,n,r=Date.now(),i=new Set){let o=mc(e),s=f2(o,t,n,r,i);return sf(e,s),s}function un(e){return e.scoreCount??e.count}function rv(e){let t=x2(e),{breakdown:n,pressure:r}=R2(e),i=nv(n,"risk"),o=nv(n,"hygiene");return{score:Math.min(i,o),riskScore:i,hygieneScore:o,scoreBreakdown:n,overview:{documents:e.statsResult.documents,symbols:e.statsResult.symbols,indexSizeBytes:e.statsResult.indexSizeBytes},findings:{deadSymbols:e.dead.count,deadLoc:e.dead.loc,isolatedSymbols:e.isolated.count,isolatedLoc:e.isolated.loc,cycles:e.realCycleCount,similarPairs:e.similarCount,duplicateBodyGroups:e.duplicateBodies.count,duplicateBodyLoc:e.duplicateBodies.loc,twinDriftGroups:e.twinDrift.count,twinDriftLoc:e.twinDrift.loc,reactComponentDuplicatePairs:e.reactComponentDuplicates.count,reactHookCandidatePairs:e.reactHookCandidates.count,reactHookCandidateScoreCount:un(e.reactHookCandidates),reactLargeComponentPressureFiles:e.reactLargeComponentPressure.count,vueComponentDuplicatePairs:e.vueComponentDuplicates.count,vueComposableCandidatePairs:e.vueComposableCandidates.count,vueComposableCandidateScoreCount:un(e.vueComposableCandidates),vueLargeViewPressureFiles:e.vueLargeViewPressure.count,extractionCandidates:e.extractCount,wrappers:e.wrappers.count,wrapperScoreCount:un(e.wrappers),passthroughs:e.passthroughs.count,staleTypes:e.stale.count,driftedFiles:e.drift.count,complexityHotspotCount:e.complexity.extremeCount,hiddenCouplingPairs:e.gitEvidence?.hiddenCoupling.pairCount??null,hiddenCouplingScoreCount:e.gitEvidence?.hiddenCoupling.scoreCount??null,coverageContractViolations:e.coverageContracts.count},axes:b2(e),validation:C2(e),suppressions:e.suppressions,actions:t,pressure:r,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0,detectorPrecision:[]}}function b2(e){return{deletable:{loc:e.dead.loc+e.isolated.loc,symbols:e.dead.count+e.isolated.count},cycles:{count:e.realCycleCount},changeAmplification:e.gitEvidence?.amplification??null,hiddenCoupling:e.gitEvidence?.hiddenCoupling??null,churnWeightedComplexity:S2(e),evidenceQuality:{graphFindings:e.dead.count+e.isolated.count+e.realCycleCount,heuristicFindings:e.similarCount+e.duplicateBodies.count+e.twinDrift.count+e.reactComponentDuplicates.count+e.reactHookCandidates.count+e.reactLargeComponentPressure.count+e.vueComponentDuplicates.count+e.vueComposableCandidates.count+e.vueLargeViewPressure.count+e.extractCount+e.wrappers.count+e.passthroughs.count+e.stale.count+e.drift.count,userSuppressed:e.suppressions?.total??0}}}function S2(e){let t=e.gitEvidence?.fileStats;return t?e.complexity.top.map(n=>{let r=n.file?t[n.file]?.changes??0:0;return{...n,changes:r,weighted:Ht(n.score*Math.log2(1+r))}}).sort((n,r)=>r.weighted-n.weighted):null}function C2(e){let t=e.gitEvidence?.fileStats;if(!t)return null;let n={dead:e.dead.files??[],isolated:e.isolated.files??[],twinDrift:e.twinDrift.files??[],wrappers:e.wrappers.files??[],passthroughs:e.passthroughs.files??[],stale:e.stale.files??[],reactComponents:e.reactComponentDuplicates.files??[],reactHooks:e.reactHookCandidates.files??[],reactLargeComponents:e.reactLargeComponentPressure.files??[],vueComponents:e.vueComponentDuplicates.files??[],vueComposables:e.vueComposableCandidates.files??[],vueLargeViews:e.vueLargeViewPressure.files??[]},r=new Set(Object.values(n).flat()),i=0,o=0,s=0;for(let[u,d]of Object.entries(t))r.has(u)?i+=d.fixChanges:(o+=d.fixChanges,s+=1);let a=r.size>0?Ht(i/r.size):0,c=s>0?Ht(o/s):0,l={};for(let[u,d]of Object.entries(n)){let m=new Set(d);if(m.size===0)continue;let f=0;for(let g of m)f+=t[g]?.fixChanges??0;let p=Ht(f/m.size);l[u]={flaggedFiles:m.size,fixDensity:p,lift:c>0?Ht(p/c):null}}return{flaggedFiles:r.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:r.size>0&&c>0?Ht(a/c):null,byCategory:l,validationBasis:{method:"subject-regex",commitsScanned:e.gitEvidence?.commitsScanned??0}}}function Ht(e){return Math.round(e*100)/100}function iv(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function fc(e,t="existing shared infrastructure discount"){let n=un(e);return Math.abs(n-e.count)<.01?"":` (${iv(n)} score-weighted after ${t})`}function Oo(e,t){let n=un(e),r=`${e.count} ${t}`;return Math.abs(n-e.count)<.01?r:`${r} (${iv(n)} score-weighted)`}function x2(e){let t=[];if(e.dead.count>0&&t.push({category:"Dead code",evidence:"graph-fact",description:`${e.dead.count} indexed symbols with no visible repository references \u2014 review runtime/framework roots and the capability disclosure, then verify any deletion with cleanup-plan --verify`,effort:"low",impact:"high",count:e.dead.count,locRecoverable:e.dead.loc}),e.isolated.count>0&&t.push({category:"Isolated symbols",evidence:"graph-fact",description:`${e.isolated.count} symbols completely disconnected from the codebase graph`,effort:"low",impact:"medium",count:e.isolated.count,locRecoverable:e.isolated.loc}),e.realCycleCount>0&&t.push({category:"Circular dependencies",evidence:"graph-fact",description:`${e.realCycleCount} indexed dependency cycle(s) \u2014 inspect ownership and runtime order before choosing whether or how to break them`,effort:"medium",impact:"high",count:e.realCycleCount,locRecoverable:0}),e.similarCount>0&&t.push({category:"Similar functions",evidence:"heuristic",description:`${e.similarCount} pairs share disclosed call or source-token evidence beyond imports \u2014 review domain identity before considering consolidation`,effort:"medium",impact:"medium",count:e.similarCount,locRecoverable:0}),e.duplicateBodies.count>0&&t.push({category:"Duplicate function bodies",evidence:"heuristic",description:`${e.duplicateBodies.count} exact small-body group(s) across files \u2014 consolidate only when the domain concept matches`,effort:"low",impact:"medium",count:e.duplicateBodies.count,locRecoverable:e.duplicateBodies.loc}),e.twinDrift.count>0&&t.push({category:"Drifted twin implementations",evidence:"heuristic",description:`${e.twinDrift.count} same-name (or near-name) function group(s) across files with diverged or identical bodies \u2014 determine whether they represent the same concept before acting`,effort:"medium",impact:"medium",count:e.twinDrift.count,locRecoverable:0}),e.reactComponentDuplicates.count>0&&t.push({category:"Duplicated React components",evidence:"heuristic",description:`${e.reactComponentDuplicates.count} React component pair(s) share JSX structure \u2014 review whether local product intent justifies reuse`,effort:"medium",impact:"medium",count:e.reactComponentDuplicates.count,locRecoverable:e.reactComponentDuplicates.loc}),e.reactHookCandidates.count>0&&t.push({category:"Duplicated React hook behavior",evidence:"heuristic",description:`${e.reactHookCandidates.count} React component pair(s) share state/effect/request behavior${fc(e.reactHookCandidates)} \u2014 review whether a common hook would preserve ownership and lifecycle semantics`,effort:"medium",impact:"medium",count:e.reactHookCandidates.count,locRecoverable:e.reactHookCandidates.loc}),e.reactLargeComponentPressure.count>0&&t.push({category:"Large React components",evidence:"heuristic",description:`${e.reactLargeComponentPressure.count} React component(s) concentrate JSX/behavior pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.reactLargeComponentPressure.count,locRecoverable:0}),e.vueComponentDuplicates.count>0&&t.push({category:"Duplicated Vue components",evidence:"heuristic",description:`${e.vueComponentDuplicates.count} Vue component pair(s) share template structure \u2014 review whether local product intent justifies reuse`,effort:"medium",impact:"medium",count:e.vueComponentDuplicates.count,locRecoverable:e.vueComponentDuplicates.loc}),e.vueComposableCandidates.count>0&&t.push({category:"Duplicated Vue behavior",evidence:"heuristic",description:`${e.vueComposableCandidates.count} Vue component pair(s) share state/effect/request behavior${fc(e.vueComposableCandidates)} \u2014 review whether a common composable would preserve ownership and lifecycle semantics`,effort:"medium",impact:"medium",count:e.vueComposableCandidates.count,locRecoverable:e.vueComposableCandidates.loc}),e.vueLargeViewPressure.count>0&&t.push({category:"Large Vue views",evidence:"heuristic",description:`${e.vueLargeViewPressure.count} Vue file(s) concentrate template/script/style pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.vueLargeViewPressure.count,locRecoverable:0}),e.extractCount>0&&t.push({category:"Extraction candidates",evidence:"heuristic",description:`${e.extractCount} large functions with isolated callee clusters \u2014 review same-file or feature-local extraction seams`,effort:"medium",impact:"medium",count:e.extractCount,locRecoverable:0}),e.wrappers.count>0&&t.push({category:"Wrapper functions",evidence:"heuristic",description:`${e.wrappers.count} single-consumer symbols${fc(e.wrappers,"boundary-evidence discount")} \u2014 inspect whether each is indirection or an intentional API, framework, or ownership boundary`,effort:"low",impact:"low",count:e.wrappers.count,locRecoverable:e.wrappers.loc}),e.passthroughs.count>0&&t.push({category:"Passthrough functions",evidence:"heuristic",description:`${e.passthroughs.count} functions that literally forward to one callee \u2014 inspect whether each is unnecessary indirection or an intentional boundary`,effort:"low",impact:"low",count:e.passthroughs.count,locRecoverable:e.passthroughs.loc}),e.stale.count>0){let i=[];e.stale.unused>0&&i.push(`${e.stale.unused} unused`),e.stale.singleUse>0&&i.push(`${e.stale.singleUse} single-consumer (not in types file)`),t.push({category:"Stale abstractions",evidence:"heuristic",description:`${i.join(", ")} \u2014 review public, runtime-registration, and ownership evidence before removing, moving, or inlining`,effort:"low",impact:"medium",count:e.stale.count,locRecoverable:e.stale.loc})}if(e.drift.count>0){let i=[];e.drift.unusedImports>0&&i.push(`${e.drift.unusedImports} unused imports`),e.drift.architectureViolations>0&&i.push(`${e.drift.architectureViolations} declared architecture violations`),t.push({category:"Structural drift",evidence:"heuristic",description:`${i.join(", ")} \u2014 repair direct dependency-rule breaks; inspect boundary signals with \`drift --architecture\``,effort:e.drift.architectureViolations>0?"medium":"low",impact:e.drift.architectureViolations>0?"medium":"low",count:e.drift.count,locRecoverable:0})}if(e.coverageContracts.count>0&&t.push({category:"Coverage contract drift",evidence:"graph-fact",description:`${e.coverageContracts.count} configured coverage contract(s) drifted from their ground-truth source (enumeration rot) \u2014 run \`scip-query diff-gate\` or \`scip-query health --json\` for the missing/extra keys`,effort:"low",impact:"medium",count:e.coverageContracts.count,locRecoverable:0}),e.gitEvidence&&e.gitEvidence.hiddenCoupling.pairCount>0){let i=e.gitEvidence.hiddenCoupling.top[0];t.push({category:"Hidden coupling",evidence:"change-graph",description:`${e.gitEvidence.hiddenCoupling.pairCount} file pair(s) co-change without a structural link`+fc({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:e.gitEvidence.hiddenCoupling.scoreCount},"broad/stale-history discount")+(i?` (e.g. ${i.fileA} \u2194 ${i.fileB})`:"")+" \u2014 inspect whether a shared concept, generated artifact, or coordinated contract explains the history",effort:"medium",impact:"high",count:e.gitEvidence.hiddenCoupling.pairCount,locRecoverable:0})}let n={high:3,medium:2,low:1},r={low:3,medium:2,high:1};return t.sort((i,o)=>{let s=n[i.impact]*r[i.effort];return n[o.impact]*r[o.effort]-s}),t}var tv={"dead-code":"risk",isolated:"risk",cycles:"risk",complexity:"risk","hidden-coupling":"risk","cycles-pressure":"risk","complexity-pressure":"risk","hidden-coupling-pressure":"risk",similar:"hygiene","duplicate-bodies":"hygiene","twin-drift":"hygiene","react-component-duplicates":"hygiene","react-hook-candidates":"hygiene","react-large-component-pressure":"hygiene","vue-component-duplicates":"hygiene","vue-composable-candidates":"hygiene","vue-large-view-pressure":"hygiene",extract:"hygiene",wrappers:"hygiene",passthroughs:"hygiene","stale-abstractions":"hygiene",drift:"hygiene","similar-pressure":"hygiene","duplicate-bodies-pressure":"hygiene","twin-drift-pressure":"hygiene","react-component-duplicates-pressure":"hygiene","react-hook-candidates-pressure":"hygiene","react-large-component-pressure-pressure":"hygiene","vue-component-duplicates-pressure":"hygiene","vue-composable-candidates-pressure":"hygiene","vue-large-view-pressure-pressure":"hygiene","extract-pressure":"hygiene","wrappers-pressure":"hygiene","passthroughs-pressure":"hygiene","stale-abstractions-pressure":"hygiene","drift-pressure":"hygiene"};function nv(e,t){let n=e.filter(r=>r.kind===t).reduce((r,i)=>r+i.points,0);return Math.max(0,Math.min(100,100-n))}function R2(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),r=[],i=[],o=(R,D,w)=>{D>0&&r.push({axis:R,points:D,detail:w,kind:tv[R]??"hygiene"})},s=(R,D,w,P,L,re,Q)=>{let _=Math.max(P,1);if(w<=_)return;let ae=w/_,ee=Math.min(L,Math.ceil(Math.log2(ae)*re));if(ee<=0)return;let dn=tv[R]??"hygiene";i.push({axis:R,category:D,kind:dn,count:w,threshold:Ht(_),ratio:Ht(ae),extraPenalty:ee}),o(R,ee,`${w} ${Q} exceed pressure threshold ${Ht(_)} (${Ht(ae)}x)`)},a=e.dead.count/n;o("dead-code",Math.min(20,Math.round(a*200)),`${e.dead.count} dead symbols (${e.dead.loc} LOC deletable)`);let c=e.isolated.count/n;o("isolated",Math.min(10,Math.round(c*200)),`${e.isolated.count} isolated symbols (${e.isolated.loc} LOC deletable)`),o("cycles",Math.min(15,e.realCycleCount*5),`${e.realCycleCount} real dependency cycle(s)`);let l=e.similarCount/n*1e3;o("similar",Math.min(10,Math.round(l)),`${e.similarCount} similar function pair(s)`);let u=e.duplicateBodies.count/n*1e3;o("duplicate-bodies",Math.min(10,Math.round(u*2)),`${e.duplicateBodies.count} exact duplicate small-body group(s) (${e.duplicateBodies.loc} duplicate LOC)`);let d=e.twinDrift.count/n*1e3;o("twin-drift",Math.min(10,Math.round(d*2)),`${e.twinDrift.count} drifted twin implementation group(s) (same or near-same name, diverged or identical bodies)`);let m=e.reactComponentDuplicates.count/t*1e3;o("react-component-duplicates",Math.min(10,Math.round(m)),`${e.reactComponentDuplicates.count} duplicated React component pair(s)`);let f=un(e.reactHookCandidates),p=f/t*1e3;o("react-hook-candidates",Math.min(10,Math.round(p)),Oo(e.reactHookCandidates,"duplicated React behavior pair(s)"));let g=e.reactLargeComponentPressure.count/t*1e3;o("react-large-component-pressure",Math.min(5,Math.round(g/2)),`${e.reactLargeComponentPressure.count} large React component pressure file(s)`);let y=e.vueComponentDuplicates.count/t*1e3;o("vue-component-duplicates",Math.min(10,Math.round(y)),`${e.vueComponentDuplicates.count} duplicated Vue component pair(s)`);let h=un(e.vueComposableCandidates),x=h/t*1e3;o("vue-composable-candidates",Math.min(10,Math.round(x)),Oo(e.vueComposableCandidates,"duplicated Vue behavior pair(s)"));let b=e.vueLargeViewPressure.count/t*1e3;o("vue-large-view-pressure",Math.min(5,Math.round(b/2)),`${e.vueLargeViewPressure.count} large Vue view pressure file(s)`);let C=un(e.wrappers);o("wrappers",Math.min(3,C),Oo(e.wrappers,"wrapper candidate(s)"));let S=un(e.passthroughs);o("passthroughs",Math.min(3,S),Oo(e.passthroughs,"passthrough candidate(s)")),o("stale-abstractions",Math.min(8,e.stale.unused),`${e.stale.unused} unused stale abstraction(s); ${e.stale.singleUse} single-consumer signal(s)`);let v=e.drift.direct/t;if(o("drift",Math.min(5,Math.round(v*50)),`${e.drift.direct} direct drift finding(s); ${e.drift.signal} signal drift finding(s)`),o("complexity",Math.min(5,e.complexity.extremeCount*2),`${e.complexity.extremeCount} extreme complexity hotspot(s)`),e.gitEvidence){let R=e.gitEvidence.hiddenCoupling.scoreCount;o("hidden-coupling",Math.min(5,Math.ceil(R/10)),Oo({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:R},"co-changing pair(s) without a structural link"))}if(s("cycles-pressure","Circular dependencies",e.realCycleCount,3,10,3,"cycle(s)"),s("complexity-pressure","Extreme complexity",e.complexity.extremeCount,3,5,2,"extreme complexity hotspot(s)"),e.gitEvidence){let R=e.gitEvidence.hiddenCoupling.scoreCount;s("hidden-coupling-pressure","Hidden coupling",R,50,10,4,"score-weighted co-changing pair(s)")}return s("similar-pressure","Similar functions",e.similarCount,Math.max(50,n*.01),8,4,"similar function pair(s)"),s("duplicate-bodies-pressure","Duplicate function bodies",e.duplicateBodies.count,Math.max(20,n*.005),8,4,"exact duplicate small-body group(s)"),s("twin-drift-pressure","Drifted twin implementations",e.twinDrift.count,Math.max(20,n*.005),8,4,"drifted twin implementation group(s)"),s("react-component-duplicates-pressure","Duplicated React components",e.reactComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated React component pair(s)"),s("react-hook-candidates-pressure","Duplicated React hook behavior",f,Math.max(10,t*.01),8,4,"duplicated React behavior pair(s)"),s("react-large-component-pressure-pressure","Large React components",e.reactLargeComponentPressure.count,Math.max(10,t*.01),4,2,"large React component pressure file(s)"),s("vue-component-duplicates-pressure","Duplicated Vue components",e.vueComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated Vue component pair(s)"),s("vue-composable-candidates-pressure","Duplicated Vue behavior",h,Math.max(10,t*.01),8,4,"duplicated Vue behavior pair(s)"),s("vue-large-view-pressure-pressure","Large Vue views",e.vueLargeViewPressure.count,Math.max(10,t*.01),4,2,"large Vue view pressure file(s)"),s("extract-pressure","Extraction candidates",e.extractCount,Math.max(50,n*.01),4,2,"extraction candidate(s)"),s("wrappers-pressure","Wrapper functions",C,50,4,2,"wrapper candidate(s)"),s("passthroughs-pressure","Passthrough functions",S,50,4,2,"passthrough candidate(s)"),s("stale-abstractions-pressure","Single-consumer stale abstraction signals",e.stale.singleUse,Math.max(50,n*.02),4,2,"single-consumer stale abstraction signal(s)"),s("drift-pressure","Structural drift signals",e.drift.signal,Math.max(10,t*.1),4,2,"signal drift finding(s)"),{breakdown:r,pressure:i}}import{getHeapStatistics as v2}from"v8";var I2=64*1024*1024;function Fm(){let e=globalThis.gc;if(!e)return;let t=v2();t.heap_size_limit-t.used_heap_size<I2||e()}var w2=50,E2=25e3,D2=2500,ov=2500,sv=50,P2=10,pc=["overview","dead","isolated","cycles","similar","duplicate-bodies","twin-drift","react-component-duplicates","react-hook-candidates","react-large-component-pressure","vue-component-duplicates","vue-composable-candidates","vue-large-view-pressure","extract-candidates","wrapper-candidates","passthrough-candidates","stale-abstractions","drift","complexity-hotspots","git-evidence","suppressions","coverage-contracts"],k2={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:L2(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:N2(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:A2(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:M2(e,t,n)}),"duplicate-bodies":(e,t,n)=>({phase:"duplicate-bodies",duplicateBodies:j2(e,t,n)}),"twin-drift":(e,t,n)=>({phase:"twin-drift",twinDrift:B2(e,t,n)}),"react-component-duplicates":(e,t,n)=>({phase:"react-component-duplicates",reactComponentDuplicates:$2(e,t,n)}),"react-hook-candidates":(e,t,n)=>({phase:"react-hook-candidates",reactHookCandidates:H2(e,t,n)}),"react-large-component-pressure":(e,t,n)=>({phase:"react-large-component-pressure",reactLargeComponentPressure:U2(e,t,n)}),"vue-component-duplicates":(e,t,n)=>({phase:"vue-component-duplicates",vueComponentDuplicates:W2(e,t,n)}),"vue-composable-candidates":(e,t,n)=>({phase:"vue-composable-candidates",vueComposableCandidates:G2(e,t,n)}),"vue-large-view-pressure":(e,t,n)=>({phase:"vue-large-view-pressure",vueLargeViewPressure:z2(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:O2(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:V2(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:q2(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:K2(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:Q2(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:Z2(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:J2(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:Y2(e,n)}),"coverage-contracts":(e,t,n)=>({phase:"coverage-contracts",coverageContracts:X2(e,n)})};function _m(e,t,n={}){return T2(e,[t],n)[0]}function T2(e,t,n={}){return F2(e,n.full!==!1,(r,i)=>{let o={...i,releaseCachesBetweenPhases:!1};return t.map(s=>k2[s](e,n.scope,o,r))})}function F2(e,t,n){let r=cr(e),i=eJ(r,t);try{return n(r,i)}finally{xd(e,{semanticProvider:!0}),Fm()}}function Lm(e){return rv(_2(e))}function _2(e){let t=ge(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:ge(e,"dead").dead,isolated:ge(e,"isolated").isolated,realCycleCount:ge(e,"cycles").realCycleCount,similarCount:ge(e,"similar").similarCount,duplicateBodies:ge(e,"duplicate-bodies").duplicateBodies,twinDrift:ge(e,"twin-drift").twinDrift,reactComponentDuplicates:ge(e,"react-component-duplicates").reactComponentDuplicates,reactHookCandidates:ge(e,"react-hook-candidates").reactHookCandidates,reactLargeComponentPressure:ge(e,"react-large-component-pressure").reactLargeComponentPressure,vueComponentDuplicates:ge(e,"vue-component-duplicates").vueComponentDuplicates,vueComposableCandidates:ge(e,"vue-composable-candidates").vueComposableCandidates,vueLargeViewPressure:ge(e,"vue-large-view-pressure").vueLargeViewPressure,extractCount:ge(e,"extract-candidates").extractCount,wrappers:ge(e,"wrapper-candidates").wrappers,passthroughs:ge(e,"passthrough-candidates").passthroughs,stale:ge(e,"stale-abstractions").stale,drift:ge(e,"drift").drift,complexity:ge(e,"complexity-hotspots").complexity,gitEvidence:av(e,"git-evidence")?.gitEvidence??null,suppressions:av(e,"suppressions")?.suppressions??null,coverageContracts:ge(e,"coverage-contracts").coverageContracts}}function av(e,t){return e.find(n=>n.phase===t)}function ge(e,t){let n=e.find(r=>r.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function L2(e,t,n){return fe(e,n,"dead",()=>{let r=lr(e,{scope:t,...me.dead,scanLimit:n.candidateScanLimit,semantic:n.semantic});return gc(rJ(e,r.symbols))})}function N2(e,t,n){return fe(e,n,"isolated",()=>{let r=fo(e,{scope:t,...me.isolated,scanLimit:n.candidateScanLimit,semantic:n.semantic});return gc(iJ(e,r))})}function A2(e,t,n){return fe(e,n,"cycles",()=>uo(e,{scope:t}).filter(i=>i.kind==="real").length)}function M2(e,t,n){let r=fe(e,n,"similar",()=>Td(e,{scope:t,...me.similar,scanLimit:n.candidateScanLimit,semantic:n.semantic}));return Math.min(r,n.candidateResultLimit)}function O2(e,t,n){return fe(e,n,"extract-candidates",()=>So(e,{scope:t,...me.extract,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic}).length)}function j2(e,t,n){return fe(e,n,"duplicate-bodies",()=>{let r=Eo(e,{scope:t,...me.duplicateBodies,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}),i=new Set,o=0;for(let s of r)for(let a of s.functions.slice(1))i.add(a.file),o+=a.loc;return{count:r.length,loc:o,files:[...i]}})}function B2(e,t,n){return fe(e,n,"twin-drift",()=>{let r=ri(e,{scope:t,...me.twinDrift,scanLimit:n.candidateScanLimit}).filter(s=>s.relationship==="divergent"||s.relationship==="identical"),i=new Set,o=0;for(let s of r)for(let a of s.members)i.add(a.file),o+=a.loc;return{count:r.length,loc:o,files:[...i].sort()}})}function $2(e,t,n){return fe(e,n,"react-component-duplicates",()=>{let r=go(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Nm(r)})}function H2(e,t,n){return fe(e,n,"react-hook-candidates",()=>{let r=ho(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return uv(r,sJ)})}function U2(e,t,n){return fe(e,n,"react-large-component-pressure",()=>{let r=Fd(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return oJ(r)})}function W2(e,t,n){return fe(e,n,"vue-component-duplicates",()=>{let r=yo(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Nm(r)})}function G2(e,t,n){return fe(e,n,"vue-composable-candidates",()=>{let r=bo(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return uv(r,aJ)})}function z2(e,t,n){return fe(e,n,"vue-large-view-pressure",()=>{let r=_d(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return gc(r)})}function V2(e,t,n){return fe(e,n,"wrapper-candidates",()=>{let r=Lo(e,{scope:t,...me.wrappers,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return lv(r,cJ)})}function q2(e,t,n){return fe(e,n,"passthrough-candidates",()=>{let r=To(e,{scope:t,...me.passthroughs,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return lv(r,lJ)})}function K2(e,t,n){return fe(e,n,"stale-abstractions",()=>{let r=_o(e,{scope:t,...me.stale,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic}),i=r.filter(o=>o.consumers===0).length;return{count:r.length,loc:r.reduce((o,s)=>o+s.loc,0),files:[...new Set(r.map(o=>o.file))],unused:i,singleUse:r.length-i}})}function J2(e,t){return fe(e,t,"git-evidence",()=>{let n=ze(e,{historyMode:t.gitHistoryMode}),r=n.fileChurn();if(!r)return null;let i=n.commitHistory(),o=xo(e,void 0,{limit:t.candidateResultLimit,historyMode:t.gitHistoryMode}),s={};for(let[a,c]of r)s[a]={changes:c.changes,fixChanges:c.fixChanges};return{amplification:n.changeAmplification(),hiddenCoupling:{pairCount:o.findings.length,scoreCount:Am(o.findings.reduce((a,c)=>a+cv(c),0)),top:o.findings.slice(0,5).map(a=>({fileA:a.fileA,fileB:a.fileB,together:a.together,confidence:a.confidence,focusedTogether:a.focusedTogether,broadTogether:a.broadTogether,broadCommitRatio:a.broadCommitRatio,lastTogetherAt:a.lastTogetherAt,recentTogether:a.recentTogether,commitScope:a.commitScope,recency:a.recency,scoreWeight:cv(a),subjectContext:a.subjectContext}))},fileStats:s,commitsScanned:i?.commits.length??0}})}function Y2(e,t){return fe(e,t,"suppressions",()=>{let n=uc(e);return{total:n.total,byCategory:{...n.byCategory}}})}function X2(e,t){return fe(e,t,"coverage-contracts",()=>{let n=e.config.coverageContracts??[],i=cR(e,n).filter(o=>o.status!=="ok");return{count:i.length,loc:0,files:[...new Set(i.map(o=>o.file))].sort()}})}function Q2(e,t,n){return fe(e,n,"drift",()=>{let r=ko(e,{scope:t,...me.drift,includePatternDeviations:!1,limit:Number.POSITIVE_INFINITY,semantic:n.semantic}),i=r.results.filter(a=>a.kind!=="pattern-deviation"),o=i.filter(a=>a.actionTier==="direct").length,s=i.length-o;return{count:i.length,unusedImports:r.unusedImports,architectureViolations:r.architectureViolations,layerViolations:r.layerViolations,direct:o,signal:s}})}function Z2(e,t,n){return fe(e,n,"complexity-hotspots",()=>{let r=km(e,{scope:t,minLoc:10,limit:n.complexityResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return{top:r.slice(0,5).map(i=>({symbol:i.shortName,score:i.score,file:i.file})),extremeCount:r.filter(i=>i.score>w2).length}})}function eJ(e,t){let n=e.symbols>=E2||e.documents>=D2,r=t?Number.POSITIVE_INFINITY:sv,i=t?Number.POSITIVE_INFINITY:P2;return!n||t?{candidateScanLimit:void 0,candidateResultLimit:r,complexityResultLimit:i,semantic:!0,gitHistoryMode:t?"full":"bounded",releaseCachesBetweenPhases:!0,warnings:t&&n?["Large index detected; running health without candidate scan or result caps because full mode is enabled."]:[]}:{candidateScanLimit:ov,candidateResultLimit:r,complexityResultLimit:i,semantic:!1,gitHistoryMode:"bounded",releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${ov} symbols and reported their top ${sv} findings. Enable full mode for unbounded candidate counts.`]}}function tJ(e,t){t.releaseCachesBetweenPhases&&(xd(e),Fm())}function fe(e,t,n,r){nJ(n);try{return r()}finally{tJ(e,t)}}function nJ(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function rJ(e,t){return t.filter(n=>!De(e,n.relativePath)&&!de(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function iJ(e,t){return t.filter(n=>!De(e,n.relativePath)&&!de(e,n.symbol,n.relativePath))}function gc(e){let t=new Set;for(let n of e){let r=n.relativePath??n.file;r&&t.add(r)}return{count:e.length,loc:e.reduce((n,r)=>n+r.loc,0),files:[...t]}}function lv(e,t){return{...gc(e),scoreCount:Am(e.reduce((r,i)=>r+t(i),0))}}function oJ(e){let t=new Map;for(let n of e)t.set(n.file,Math.max(t.get(n.file)??0,n.loc));return{count:t.size,loc:[...t.values()].reduce((n,r)=>n+r,0),files:[...t.keys()]}}function Nm(e){let t=new Map;for(let n of e)t.set(n.fileA,Math.max(t.get(n.fileA)??0,n.locA)),t.set(n.fileB,Math.max(t.get(n.fileB)??0,n.locB));return{count:e.length,loc:[...t.values()].reduce((n,r)=>n+r,0),files:[...t.keys()]}}function uv(e,t){return{...Nm(e),scoreCount:Am(e.reduce((r,i)=>r+t(i),0))}}function sJ(e){let t=e.sharedHooks.length>0,n=dv({namedState:e.sharedState,requests:e.sharedRequests,lifecycle:e.sharedEffects,functions:e.sharedHandlers});return t&&n<=2?0:t?.5:mv(e.sharedState,e.sharedHandlers,e.sharedHandlerVerbs)?.25:n>=2?1:.5}function aJ(e){let t=e.sharedComposables.length+e.sharedStores.length>0,n=dv({namedState:e.sharedBindings,requests:e.sharedRequests,lifecycle:e.sharedLifecycle,functions:e.sharedFunctions});return t&&n<=2?0:t?.5:mv(e.sharedBindings,e.sharedFunctions,e.sharedFunctionVerbs)?.25:n>=2?1:.5}function dv(e){return e.requests.length*2+e.lifecycle.length+e.namedState.filter(t=>!pv.has(fv(t))).length+Math.min(e.functions.length,3)}function mv(e,t,n){let r=[...e,...t,...n].map(fv);return r.length>0&&r.every(i=>pv.has(i))}function fv(e){return e.replace(/^handle/,"").replace(/^is/,"").replace(/^has/,"").toLowerCase()}function cJ(e){return e.actionTier==="signal"?.25:1}function lJ(e){return e.actionTier==="signal"?.25:1}function cv(e){return e.commitScope==="broad-sweep"?e.recency==="recent"?.25:0:e.commitScope==="mixed"?e.recency==="recent"?.5:.25:e.recency==="recent"?1:.5}function Am(e){return Math.round(e*100)/100}var pv=new Set(["add","apply","cancel","change","clear","close","create","delete","draft","edit","error","filter","form","load","loading","name","open","refresh","remove","reset","save","saving","search","select","selected","submit","toggle","update","value"]);function uJ(e,t,n,r={}){let i=kd(e,t,n,r);return i?{symbolA:i.symbolA,symbolB:i.symbolB,similarity:i.similarity,sharedCallees:i.sharedEvidence,uniqueToA:i.uniqueToA,uniqueToB:i.uniqueToB,consolidationStrategy:i.consolidationStrategy}:null}function dJ(e,t={}){let{scope:n,limit:r}=t,i=new F(e),o=SJ([...mJ(e,n),...gJ(e,i,n)]);return CJ(o),r?o.slice(0,r):o}function mJ(e,t){let n=[];for(let r of fJ(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||ld(e,r.barrel_path)||k(e,r.barrel_path)&&bs(e,r.barrel_path).length===0)continue;let i=pJ(e,r),o=i?.barrel_consumers??0,s=i?.direct_consumers??0;o!==0||s!==0||n.push({barrelFile:r.barrel_path,symbol:r.symbol,shortName:I(r.symbol),originalFile:r.original_path,barrelConsumers:o,directConsumers:s,...hv(e,r.barrel_path)})}return n}function fJ(e,t){let n=t?"AND barrel_d.relative_path LIKE ?":"",r=t?[`%${t}%`]:[];return e.all(`SELECT DISTINCT
|
|
854
|
+
WHERE relative_path IN (${r})`,...n);return new Map(i.map(o=>[o.relative_path,o.language?.toLowerCase()??null]))}function f2(e,t,n){let r=new Set,i=new Map;for(let o of t){if(n.get(o.relativePath)!=="clojure")continue;let s=i.get(o.relativePath);s||(s=new Set((z(e,o.relativePath)?.callables??[]).map(a=>`${a.name}:${a.startLine}`)),i.set(o.relativePath,s)),s.has(`${o.leaf}:${o.startLine}`)&&r.add(o.symbolId)}return r}function $t(e,t){return`${e}\0${t}`}function qfe(e,t,n,r,i,o={}){let s=new Map(e.map(l=>[$t(l.check,l.findingId),l])),a=[],c=(l,u)=>{let d=n.get(l.findingId),m=u==="resolved"?o.verifiedAgainstByFinding?.get($t(l.check,l.findingId)):void 0;a.push({ts:i,check:l.check,findingId:l.findingId,event:u,commit:r,...o.comparisonBaseCommit?{comparisonBaseCommit:o.comparisonBaseCommit}:{},...m?{verifiedAgainstCommit:m}:{},...d?{symbol:d}:{}})};for(let l of t){let u=s.get($t(l.check,l.findingId));if(!u){c(l,"caught"),l.outcome==="suppressed"&&c(l,"suppressed");continue}u.outcome!==l.outcome&&(l.outcome==="resolved"?c(l,"resolved"):l.outcome==="suppressed"?c(l,"suppressed"):l.outcome==="still-open"&&c(l,"reopened"))}return a}function Kfe(e){for(let t=e.length-1;t>=0;t-=1){let n=e[t];if(n?.event==="caught"||n?.event==="reopened")return n}}function p2(e,t,n,r,i=new Set){let o=new Map(e.map(c=>[$t(c.check,c.findingId),c])),s=new Set(t.map(c=>$t(c.check,c.findingId))),a=new Set(n);for(let c of t){let l=$t(c.check,c.findingId),u=o.get(l),d=c.suppressed?"suppressed":"still-open";u?o.set(l,{...u,lastSeen:r,timesShown:u.timesShown+1,outcome:d}):o.set(l,{check:c.check,findingId:c.findingId,firstSeen:r,lastSeen:r,timesShown:1,outcome:d})}for(let c of e){if(!a.has(c.check))continue;let l=$t(c.check,c.findingId);s.has(l)||i.has(l)||c.outcome!=="resolved"&&o.set(l,{...c,outcome:"resolved"})}return[...o.values()]}function Tm(e,t){let n=new Map;for(let i of e){let o=n.get(i.check)??[];o.push(i),n.set(i.check,o)}let r=[];for(let[i,o]of n){let s=o.filter(d=>d.outcome==="resolved").length,a=o.filter(d=>d.outcome==="suppressed").length,c=o.filter(d=>d.outcome==="still-open").length,l=o.length,u=o.filter(d=>d.outcome==="still-open").sort((d,m)=>d.firstSeen-m.firstSeen)[0];r.push({check:i,seen:l,resolved:s,suppressed:a,stillOpen:c,resolutionRate:l>0?s/l:0,suppressionRate:l>0?a/l:0,oldestOpenAgeDays:u?Math.floor((t-u.firstSeen)/eR):null})}return r.sort((i,o)=>i.check.localeCompare(o.check))}var eR=864e5,g2=50,h2=.1,y2=10;function b2(e,t,n){return e.filter(r=>r.check===t).sort((r,i)=>i.firstSeen-r.firstSeen).slice(0,n)}function Qfe(e,t,n){if(t.length===0)return null;let r=new Map(e.map(s=>[$t(s.check,s.findingId),s])),i=t.map(s=>r.get($t(s.check,s.findingId))).filter(s=>s!==void 0&&s.timesShown>1);if(i.length===0)return null;let o=Math.max(...i.map(s=>Math.floor((n-s.firstSeen)/eR)));return`${t.length} finding(s), ${i.length} shown before and unresolved (oldest: ${o} day(s))`}function Zfe(e,t){let n=[];for(let r of[...new Set(t)].sort()){let i=b2(e,r,g2);i.length<y2||i.filter(a=>a.outcome==="resolved").length/i.length>=h2||n.push(`(the ${r} check's findings are rarely acted on in this repo \u2014 consider suppressing with reasons or tuning its config)`)}return n}function fc(e){return of(e).map(t=>({check:t.check,findingId:t.findingId,firstSeen:t.firstSeen,lastSeen:t.lastSeen,timesShown:t.timesShown,outcome:t.outcome}))}function epe(e,t,n,r=Date.now(),i=new Set){let o=fc(e),s=p2(o,t,n,r,i);return sf(e,s),s}function un(e){return e.scoreCount??e.count}function rR(e){let t=v2(e),{breakdown:n,pressure:r}=R2(e),i=nR(n,"risk"),o=nR(n,"hygiene");return{score:Math.min(i,o),riskScore:i,hygieneScore:o,scoreBreakdown:n,overview:{documents:e.statsResult.documents,symbols:e.statsResult.symbols,indexSizeBytes:e.statsResult.indexSizeBytes},findings:{deadSymbols:e.dead.count,deadLoc:e.dead.loc,isolatedSymbols:e.isolated.count,isolatedLoc:e.isolated.loc,cycles:e.realCycleCount,similarPairs:e.similarCount,duplicateBodyGroups:e.duplicateBodies.count,duplicateBodyLoc:e.duplicateBodies.loc,twinDriftGroups:e.twinDrift.count,twinDriftLoc:e.twinDrift.loc,reactComponentDuplicatePairs:e.reactComponentDuplicates.count,reactHookCandidatePairs:e.reactHookCandidates.count,reactHookCandidateScoreCount:un(e.reactHookCandidates),reactLargeComponentPressureFiles:e.reactLargeComponentPressure.count,vueComponentDuplicatePairs:e.vueComponentDuplicates.count,vueComposableCandidatePairs:e.vueComposableCandidates.count,vueComposableCandidateScoreCount:un(e.vueComposableCandidates),vueLargeViewPressureFiles:e.vueLargeViewPressure.count,extractionCandidates:e.extractCount,wrappers:e.wrappers.count,wrapperScoreCount:un(e.wrappers),passthroughs:e.passthroughs.count,staleTypes:e.stale.count,driftedFiles:e.drift.count,complexityHotspotCount:e.complexity.extremeCount,hiddenCouplingPairs:e.gitEvidence?.hiddenCoupling.pairCount??null,hiddenCouplingScoreCount:e.gitEvidence?.hiddenCoupling.scoreCount??null,coverageContractViolations:e.coverageContracts.count},axes:S2(e),validation:x2(e),suppressions:e.suppressions,actions:t,pressure:r,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0,detectorPrecision:[]}}function S2(e){return{deletable:{loc:e.dead.loc+e.isolated.loc,symbols:e.dead.count+e.isolated.count},cycles:{count:e.realCycleCount},changeAmplification:e.gitEvidence?.amplification??null,hiddenCoupling:e.gitEvidence?.hiddenCoupling??null,churnWeightedComplexity:C2(e),evidenceQuality:{graphFindings:e.dead.count+e.isolated.count+e.realCycleCount,heuristicFindings:e.similarCount+e.duplicateBodies.count+e.twinDrift.count+e.reactComponentDuplicates.count+e.reactHookCandidates.count+e.reactLargeComponentPressure.count+e.vueComponentDuplicates.count+e.vueComposableCandidates.count+e.vueLargeViewPressure.count+e.extractCount+e.wrappers.count+e.passthroughs.count+e.stale.count+e.drift.count,userSuppressed:e.suppressions?.total??0}}}function C2(e){let t=e.gitEvidence?.fileStats;return t?e.complexity.top.map(n=>{let r=n.file?t[n.file]?.changes??0:0;return{...n,changes:r,weighted:Ht(n.score*Math.log2(1+r))}}).sort((n,r)=>r.weighted-n.weighted):null}function x2(e){let t=e.gitEvidence?.fileStats;if(!t)return null;let n={dead:e.dead.files??[],isolated:e.isolated.files??[],twinDrift:e.twinDrift.files??[],wrappers:e.wrappers.files??[],passthroughs:e.passthroughs.files??[],stale:e.stale.files??[],reactComponents:e.reactComponentDuplicates.files??[],reactHooks:e.reactHookCandidates.files??[],reactLargeComponents:e.reactLargeComponentPressure.files??[],vueComponents:e.vueComponentDuplicates.files??[],vueComposables:e.vueComposableCandidates.files??[],vueLargeViews:e.vueLargeViewPressure.files??[]},r=new Set(Object.values(n).flat()),i=0,o=0,s=0;for(let[u,d]of Object.entries(t))r.has(u)?i+=d.fixChanges:(o+=d.fixChanges,s+=1);let a=r.size>0?Ht(i/r.size):0,c=s>0?Ht(o/s):0,l={};for(let[u,d]of Object.entries(n)){let m=new Set(d);if(m.size===0)continue;let f=0;for(let g of m)f+=t[g]?.fixChanges??0;let p=Ht(f/m.size);l[u]={flaggedFiles:m.size,fixDensity:p,lift:c>0?Ht(p/c):null}}return{flaggedFiles:r.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:r.size>0&&c>0?Ht(a/c):null,byCategory:l,validationBasis:{method:"subject-regex",commitsScanned:e.gitEvidence?.commitsScanned??0}}}function Ht(e){return Math.round(e*100)/100}function iR(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function pc(e,t="existing shared infrastructure discount"){let n=un(e);return Math.abs(n-e.count)<.01?"":` (${iR(n)} score-weighted after ${t})`}function Oo(e,t){let n=un(e),r=`${e.count} ${t}`;return Math.abs(n-e.count)<.01?r:`${r} (${iR(n)} score-weighted)`}function v2(e){let t=[];if(e.dead.count>0&&t.push({category:"Dead code",evidence:"graph-fact",description:`${e.dead.count} indexed symbols with no visible repository references \u2014 review runtime/framework roots and the capability disclosure, then verify any deletion with cleanup-plan --verify`,effort:"low",impact:"high",count:e.dead.count,locRecoverable:e.dead.loc}),e.isolated.count>0&&t.push({category:"Isolated symbols",evidence:"graph-fact",description:`${e.isolated.count} symbols completely disconnected from the codebase graph`,effort:"low",impact:"medium",count:e.isolated.count,locRecoverable:e.isolated.loc}),e.realCycleCount>0&&t.push({category:"Circular dependencies",evidence:"graph-fact",description:`${e.realCycleCount} indexed dependency cycle(s) \u2014 inspect ownership and runtime order before choosing whether or how to break them`,effort:"medium",impact:"high",count:e.realCycleCount,locRecoverable:0}),e.similarCount>0&&t.push({category:"Similar functions",evidence:"heuristic",description:`${e.similarCount} pairs share disclosed call or source-token evidence beyond imports \u2014 review domain identity before considering consolidation`,effort:"medium",impact:"medium",count:e.similarCount,locRecoverable:0}),e.duplicateBodies.count>0&&t.push({category:"Duplicate function bodies",evidence:"heuristic",description:`${e.duplicateBodies.count} exact small-body group(s) across files \u2014 consolidate only when the domain concept matches`,effort:"low",impact:"medium",count:e.duplicateBodies.count,locRecoverable:e.duplicateBodies.loc}),e.twinDrift.count>0&&t.push({category:"Drifted twin implementations",evidence:"heuristic",description:`${e.twinDrift.count} same-name (or near-name) function group(s) across files with diverged or identical bodies \u2014 determine whether they represent the same concept before acting`,effort:"medium",impact:"medium",count:e.twinDrift.count,locRecoverable:0}),e.reactComponentDuplicates.count>0&&t.push({category:"Duplicated React components",evidence:"heuristic",description:`${e.reactComponentDuplicates.count} React component pair(s) share JSX structure \u2014 review whether local product intent justifies reuse`,effort:"medium",impact:"medium",count:e.reactComponentDuplicates.count,locRecoverable:e.reactComponentDuplicates.loc}),e.reactHookCandidates.count>0&&t.push({category:"Duplicated React hook behavior",evidence:"heuristic",description:`${e.reactHookCandidates.count} React component pair(s) share state/effect/request behavior${pc(e.reactHookCandidates)} \u2014 review whether a common hook would preserve ownership and lifecycle semantics`,effort:"medium",impact:"medium",count:e.reactHookCandidates.count,locRecoverable:e.reactHookCandidates.loc}),e.reactLargeComponentPressure.count>0&&t.push({category:"Large React components",evidence:"heuristic",description:`${e.reactLargeComponentPressure.count} React component(s) concentrate JSX/behavior pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.reactLargeComponentPressure.count,locRecoverable:0}),e.vueComponentDuplicates.count>0&&t.push({category:"Duplicated Vue components",evidence:"heuristic",description:`${e.vueComponentDuplicates.count} Vue component pair(s) share template structure \u2014 review whether local product intent justifies reuse`,effort:"medium",impact:"medium",count:e.vueComponentDuplicates.count,locRecoverable:e.vueComponentDuplicates.loc}),e.vueComposableCandidates.count>0&&t.push({category:"Duplicated Vue behavior",evidence:"heuristic",description:`${e.vueComposableCandidates.count} Vue component pair(s) share state/effect/request behavior${pc(e.vueComposableCandidates)} \u2014 review whether a common composable would preserve ownership and lifecycle semantics`,effort:"medium",impact:"medium",count:e.vueComposableCandidates.count,locRecoverable:e.vueComposableCandidates.loc}),e.vueLargeViewPressure.count>0&&t.push({category:"Large Vue views",evidence:"heuristic",description:`${e.vueLargeViewPressure.count} Vue file(s) concentrate template/script/style pressure \u2014 split by reason to change`,effort:"medium",impact:"medium",count:e.vueLargeViewPressure.count,locRecoverable:0}),e.extractCount>0&&t.push({category:"Extraction candidates",evidence:"heuristic",description:`${e.extractCount} large functions with isolated callee clusters \u2014 review same-file or feature-local extraction seams`,effort:"medium",impact:"medium",count:e.extractCount,locRecoverable:0}),e.wrappers.count>0&&t.push({category:"Wrapper functions",evidence:"heuristic",description:`${e.wrappers.count} single-consumer symbols${pc(e.wrappers,"boundary-evidence discount")} \u2014 inspect whether each is indirection or an intentional API, framework, or ownership boundary`,effort:"low",impact:"low",count:e.wrappers.count,locRecoverable:e.wrappers.loc}),e.passthroughs.count>0&&t.push({category:"Passthrough functions",evidence:"heuristic",description:`${e.passthroughs.count} functions that literally forward to one callee \u2014 inspect whether each is unnecessary indirection or an intentional boundary`,effort:"low",impact:"low",count:e.passthroughs.count,locRecoverable:e.passthroughs.loc}),e.stale.count>0){let i=[];e.stale.unused>0&&i.push(`${e.stale.unused} unused`),e.stale.singleUse>0&&i.push(`${e.stale.singleUse} single-consumer (not in types file)`),t.push({category:"Stale abstractions",evidence:"heuristic",description:`${i.join(", ")} \u2014 review public, runtime-registration, and ownership evidence before removing, moving, or inlining`,effort:"low",impact:"medium",count:e.stale.count,locRecoverable:e.stale.loc})}if(e.drift.count>0){let i=[];e.drift.unusedImports>0&&i.push(`${e.drift.unusedImports} unused imports`),e.drift.architectureViolations>0&&i.push(`${e.drift.architectureViolations} declared architecture violations`),t.push({category:"Structural drift",evidence:"heuristic",description:`${i.join(", ")} \u2014 repair direct dependency-rule breaks; inspect boundary signals with \`drift --architecture\``,effort:e.drift.architectureViolations>0?"medium":"low",impact:e.drift.architectureViolations>0?"medium":"low",count:e.drift.count,locRecoverable:0})}if(e.coverageContracts.count>0&&t.push({category:"Coverage contract drift",evidence:"graph-fact",description:`${e.coverageContracts.count} configured coverage contract(s) drifted from their ground-truth source (enumeration rot) \u2014 run \`scip-query diff-gate\` or \`scip-query health --json\` for the missing/extra keys`,effort:"low",impact:"medium",count:e.coverageContracts.count,locRecoverable:0}),e.gitEvidence&&e.gitEvidence.hiddenCoupling.pairCount>0){let i=e.gitEvidence.hiddenCoupling.top[0];t.push({category:"Hidden coupling",evidence:"change-graph",description:`${e.gitEvidence.hiddenCoupling.pairCount} file pair(s) co-change without a structural link`+pc({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:e.gitEvidence.hiddenCoupling.scoreCount},"broad/stale-history discount")+(i?` (e.g. ${i.fileA} \u2194 ${i.fileB})`:"")+" \u2014 inspect whether a shared concept, generated artifact, or coordinated contract explains the history",effort:"medium",impact:"high",count:e.gitEvidence.hiddenCoupling.pairCount,locRecoverable:0})}let n={high:3,medium:2,low:1},r={low:3,medium:2,high:1};return t.sort((i,o)=>{let s=n[i.impact]*r[i.effort];return n[o.impact]*r[o.effort]-s}),t}var tR={"dead-code":"risk",isolated:"risk",cycles:"risk",complexity:"risk","hidden-coupling":"risk","cycles-pressure":"risk","complexity-pressure":"risk","hidden-coupling-pressure":"risk",similar:"hygiene","duplicate-bodies":"hygiene","twin-drift":"hygiene","react-component-duplicates":"hygiene","react-hook-candidates":"hygiene","react-large-component-pressure":"hygiene","vue-component-duplicates":"hygiene","vue-composable-candidates":"hygiene","vue-large-view-pressure":"hygiene",extract:"hygiene",wrappers:"hygiene",passthroughs:"hygiene","stale-abstractions":"hygiene",drift:"hygiene","similar-pressure":"hygiene","duplicate-bodies-pressure":"hygiene","twin-drift-pressure":"hygiene","react-component-duplicates-pressure":"hygiene","react-hook-candidates-pressure":"hygiene","react-large-component-pressure-pressure":"hygiene","vue-component-duplicates-pressure":"hygiene","vue-composable-candidates-pressure":"hygiene","vue-large-view-pressure-pressure":"hygiene","extract-pressure":"hygiene","wrappers-pressure":"hygiene","passthroughs-pressure":"hygiene","stale-abstractions-pressure":"hygiene","drift-pressure":"hygiene"};function nR(e,t){let n=e.filter(r=>r.kind===t).reduce((r,i)=>r+i.points,0);return Math.max(0,Math.min(100,100-n))}function R2(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),r=[],i=[],o=(v,D,w)=>{D>0&&r.push({axis:v,points:D,detail:w,kind:tR[v]??"hygiene"})},s=(v,D,w,k,L,re,Q)=>{let _=Math.max(k,1);if(w<=_)return;let ae=w/_,ee=Math.min(L,Math.ceil(Math.log2(ae)*re));if(ee<=0)return;let dn=tR[v]??"hygiene";i.push({axis:v,category:D,kind:dn,count:w,threshold:Ht(_),ratio:Ht(ae),extraPenalty:ee}),o(v,ee,`${w} ${Q} exceed pressure threshold ${Ht(_)} (${Ht(ae)}x)`)},a=e.dead.count/n;o("dead-code",Math.min(20,Math.round(a*200)),`${e.dead.count} dead symbols (${e.dead.loc} LOC deletable)`);let c=e.isolated.count/n;o("isolated",Math.min(10,Math.round(c*200)),`${e.isolated.count} isolated symbols (${e.isolated.loc} LOC deletable)`),o("cycles",Math.min(15,e.realCycleCount*5),`${e.realCycleCount} real dependency cycle(s)`);let l=e.similarCount/n*1e3;o("similar",Math.min(10,Math.round(l)),`${e.similarCount} similar function pair(s)`);let u=e.duplicateBodies.count/n*1e3;o("duplicate-bodies",Math.min(10,Math.round(u*2)),`${e.duplicateBodies.count} exact duplicate small-body group(s) (${e.duplicateBodies.loc} duplicate LOC)`);let d=e.twinDrift.count/n*1e3;o("twin-drift",Math.min(10,Math.round(d*2)),`${e.twinDrift.count} drifted twin implementation group(s) (same or near-same name, diverged or identical bodies)`);let m=e.reactComponentDuplicates.count/t*1e3;o("react-component-duplicates",Math.min(10,Math.round(m)),`${e.reactComponentDuplicates.count} duplicated React component pair(s)`);let f=un(e.reactHookCandidates),p=f/t*1e3;o("react-hook-candidates",Math.min(10,Math.round(p)),Oo(e.reactHookCandidates,"duplicated React behavior pair(s)"));let g=e.reactLargeComponentPressure.count/t*1e3;o("react-large-component-pressure",Math.min(5,Math.round(g/2)),`${e.reactLargeComponentPressure.count} large React component pressure file(s)`);let y=e.vueComponentDuplicates.count/t*1e3;o("vue-component-duplicates",Math.min(10,Math.round(y)),`${e.vueComponentDuplicates.count} duplicated Vue component pair(s)`);let h=un(e.vueComposableCandidates),x=h/t*1e3;o("vue-composable-candidates",Math.min(10,Math.round(x)),Oo(e.vueComposableCandidates,"duplicated Vue behavior pair(s)"));let b=e.vueLargeViewPressure.count/t*1e3;o("vue-large-view-pressure",Math.min(5,Math.round(b/2)),`${e.vueLargeViewPressure.count} large Vue view pressure file(s)`);let C=un(e.wrappers);o("wrappers",Math.min(3,C),Oo(e.wrappers,"wrapper candidate(s)"));let S=un(e.passthroughs);o("passthroughs",Math.min(3,S),Oo(e.passthroughs,"passthrough candidate(s)")),o("stale-abstractions",Math.min(8,e.stale.unused),`${e.stale.unused} unused stale abstraction(s); ${e.stale.singleUse} single-consumer signal(s)`);let R=e.drift.direct/t;if(o("drift",Math.min(5,Math.round(R*50)),`${e.drift.direct} direct drift finding(s); ${e.drift.signal} signal drift finding(s)`),o("complexity",Math.min(5,e.complexity.extremeCount*2),`${e.complexity.extremeCount} extreme complexity hotspot(s)`),e.gitEvidence){let v=e.gitEvidence.hiddenCoupling.scoreCount;o("hidden-coupling",Math.min(5,Math.ceil(v/10)),Oo({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:v},"co-changing pair(s) without a structural link"))}if(s("cycles-pressure","Circular dependencies",e.realCycleCount,3,10,3,"cycle(s)"),s("complexity-pressure","Extreme complexity",e.complexity.extremeCount,3,5,2,"extreme complexity hotspot(s)"),e.gitEvidence){let v=e.gitEvidence.hiddenCoupling.scoreCount;s("hidden-coupling-pressure","Hidden coupling",v,50,10,4,"score-weighted co-changing pair(s)")}return s("similar-pressure","Similar functions",e.similarCount,Math.max(50,n*.01),8,4,"similar function pair(s)"),s("duplicate-bodies-pressure","Duplicate function bodies",e.duplicateBodies.count,Math.max(20,n*.005),8,4,"exact duplicate small-body group(s)"),s("twin-drift-pressure","Drifted twin implementations",e.twinDrift.count,Math.max(20,n*.005),8,4,"drifted twin implementation group(s)"),s("react-component-duplicates-pressure","Duplicated React components",e.reactComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated React component pair(s)"),s("react-hook-candidates-pressure","Duplicated React hook behavior",f,Math.max(10,t*.01),8,4,"duplicated React behavior pair(s)"),s("react-large-component-pressure-pressure","Large React components",e.reactLargeComponentPressure.count,Math.max(10,t*.01),4,2,"large React component pressure file(s)"),s("vue-component-duplicates-pressure","Duplicated Vue components",e.vueComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated Vue component pair(s)"),s("vue-composable-candidates-pressure","Duplicated Vue behavior",h,Math.max(10,t*.01),8,4,"duplicated Vue behavior pair(s)"),s("vue-large-view-pressure-pressure","Large Vue views",e.vueLargeViewPressure.count,Math.max(10,t*.01),4,2,"large Vue view pressure file(s)"),s("extract-pressure","Extraction candidates",e.extractCount,Math.max(50,n*.01),4,2,"extraction candidate(s)"),s("wrappers-pressure","Wrapper functions",C,50,4,2,"wrapper candidate(s)"),s("passthroughs-pressure","Passthrough functions",S,50,4,2,"passthrough candidate(s)"),s("stale-abstractions-pressure","Single-consumer stale abstraction signals",e.stale.singleUse,Math.max(50,n*.02),4,2,"single-consumer stale abstraction signal(s)"),s("drift-pressure","Structural drift signals",e.drift.signal,Math.max(10,t*.1),4,2,"signal drift finding(s)"),{breakdown:r,pressure:i}}import{getHeapStatistics as I2}from"v8";var w2=64*1024*1024;function Fm(){let e=globalThis.gc;if(!e)return;let t=I2();t.heap_size_limit-t.used_heap_size<w2||e()}var E2=50,D2=25e3,k2=2500,oR=2500,sR=50,P2=10,gc=["overview","dead","isolated","cycles","similar","duplicate-bodies","twin-drift","react-component-duplicates","react-hook-candidates","react-large-component-pressure","vue-component-duplicates","vue-composable-candidates","vue-large-view-pressure","extract-candidates","wrapper-candidates","passthrough-candidates","stale-abstractions","drift","complexity-hotspots","git-evidence","suppressions","coverage-contracts"],T2={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:N2(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:A2(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:M2(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:O2(e,t,n)}),"duplicate-bodies":(e,t,n)=>({phase:"duplicate-bodies",duplicateBodies:B2(e,t,n)}),"twin-drift":(e,t,n)=>({phase:"twin-drift",twinDrift:$2(e,t,n)}),"react-component-duplicates":(e,t,n)=>({phase:"react-component-duplicates",reactComponentDuplicates:H2(e,t,n)}),"react-hook-candidates":(e,t,n)=>({phase:"react-hook-candidates",reactHookCandidates:U2(e,t,n)}),"react-large-component-pressure":(e,t,n)=>({phase:"react-large-component-pressure",reactLargeComponentPressure:W2(e,t,n)}),"vue-component-duplicates":(e,t,n)=>({phase:"vue-component-duplicates",vueComponentDuplicates:G2(e,t,n)}),"vue-composable-candidates":(e,t,n)=>({phase:"vue-composable-candidates",vueComposableCandidates:z2(e,t,n)}),"vue-large-view-pressure":(e,t,n)=>({phase:"vue-large-view-pressure",vueLargeViewPressure:V2(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:j2(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:q2(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:K2(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:J2(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:Z2(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:eJ(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:Y2(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:X2(e,n)}),"coverage-contracts":(e,t,n)=>({phase:"coverage-contracts",coverageContracts:Q2(e,n)})};function _m(e,t,n={}){return F2(e,[t],n)[0]}function F2(e,t,n={}){return _2(e,n.full!==!1,(r,i)=>{let o={...i,releaseCachesBetweenPhases:!1};return t.map(s=>T2[s](e,n.scope,o,r))})}function _2(e,t,n){let r=cr(e),i=tJ(r,t);try{return n(r,i)}finally{xd(e,{semanticProvider:!0}),Fm()}}function Lm(e){return rR(L2(e))}function L2(e){let t=ge(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:ge(e,"dead").dead,isolated:ge(e,"isolated").isolated,realCycleCount:ge(e,"cycles").realCycleCount,similarCount:ge(e,"similar").similarCount,duplicateBodies:ge(e,"duplicate-bodies").duplicateBodies,twinDrift:ge(e,"twin-drift").twinDrift,reactComponentDuplicates:ge(e,"react-component-duplicates").reactComponentDuplicates,reactHookCandidates:ge(e,"react-hook-candidates").reactHookCandidates,reactLargeComponentPressure:ge(e,"react-large-component-pressure").reactLargeComponentPressure,vueComponentDuplicates:ge(e,"vue-component-duplicates").vueComponentDuplicates,vueComposableCandidates:ge(e,"vue-composable-candidates").vueComposableCandidates,vueLargeViewPressure:ge(e,"vue-large-view-pressure").vueLargeViewPressure,extractCount:ge(e,"extract-candidates").extractCount,wrappers:ge(e,"wrapper-candidates").wrappers,passthroughs:ge(e,"passthrough-candidates").passthroughs,stale:ge(e,"stale-abstractions").stale,drift:ge(e,"drift").drift,complexity:ge(e,"complexity-hotspots").complexity,gitEvidence:aR(e,"git-evidence")?.gitEvidence??null,suppressions:aR(e,"suppressions")?.suppressions??null,coverageContracts:ge(e,"coverage-contracts").coverageContracts}}function aR(e,t){return e.find(n=>n.phase===t)}function ge(e,t){let n=e.find(r=>r.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function N2(e,t,n){return fe(e,n,"dead",()=>{let r=lr(e,{scope:t,...me.dead,scanLimit:n.candidateScanLimit,semantic:n.semantic});return hc(iJ(e,r.symbols))})}function A2(e,t,n){return fe(e,n,"isolated",()=>{let r=fo(e,{scope:t,...me.isolated,scanLimit:n.candidateScanLimit,semantic:n.semantic});return hc(oJ(e,r))})}function M2(e,t,n){return fe(e,n,"cycles",()=>uo(e,{scope:t}).filter(i=>i.kind==="real").length)}function O2(e,t,n){let r=fe(e,n,"similar",()=>Td(e,{scope:t,...me.similar,scanLimit:n.candidateScanLimit,semantic:n.semantic}));return Math.min(r,n.candidateResultLimit)}function j2(e,t,n){return fe(e,n,"extract-candidates",()=>So(e,{scope:t,...me.extract,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic}).length)}function B2(e,t,n){return fe(e,n,"duplicate-bodies",()=>{let r=Eo(e,{scope:t,...me.duplicateBodies,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit}),i=new Set,o=0;for(let s of r)for(let a of s.functions.slice(1))i.add(a.file),o+=a.loc;return{count:r.length,loc:o,files:[...i]}})}function $2(e,t,n){return fe(e,n,"twin-drift",()=>{let r=ri(e,{scope:t,...me.twinDrift,scanLimit:n.candidateScanLimit}).filter(s=>s.relationship==="divergent"||s.relationship==="identical"),i=new Set,o=0;for(let s of r)for(let a of s.members)i.add(a.file),o+=a.loc;return{count:r.length,loc:o,files:[...i].sort()}})}function H2(e,t,n){return fe(e,n,"react-component-duplicates",()=>{let r=go(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Nm(r)})}function U2(e,t,n){return fe(e,n,"react-hook-candidates",()=>{let r=ho(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return uR(r,aJ)})}function W2(e,t,n){return fe(e,n,"react-large-component-pressure",()=>{let r=Fd(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return sJ(r)})}function G2(e,t,n){return fe(e,n,"vue-component-duplicates",()=>{let r=yo(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Nm(r)})}function z2(e,t,n){return fe(e,n,"vue-composable-candidates",()=>{let r=bo(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return uR(r,cJ)})}function V2(e,t,n){return fe(e,n,"vue-large-view-pressure",()=>{let r=_d(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return hc(r)})}function q2(e,t,n){return fe(e,n,"wrapper-candidates",()=>{let r=Lo(e,{scope:t,...me.wrappers,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return lR(r,lJ)})}function K2(e,t,n){return fe(e,n,"passthrough-candidates",()=>{let r=To(e,{scope:t,...me.passthroughs,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return lR(r,uJ)})}function J2(e,t,n){return fe(e,n,"stale-abstractions",()=>{let r=_o(e,{scope:t,...me.stale,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic}),i=r.filter(o=>o.consumers===0).length;return{count:r.length,loc:r.reduce((o,s)=>o+s.loc,0),files:[...new Set(r.map(o=>o.file))],unused:i,singleUse:r.length-i}})}function Y2(e,t){return fe(e,t,"git-evidence",()=>{let n=ze(e,{historyMode:t.gitHistoryMode}),r=n.fileChurn();if(!r)return null;let i=n.commitHistory(),o=xo(e,void 0,{limit:t.candidateResultLimit,historyMode:t.gitHistoryMode}),s={};for(let[a,c]of r)s[a]={changes:c.changes,fixChanges:c.fixChanges};return{amplification:n.changeAmplification(),hiddenCoupling:{pairCount:o.findings.length,scoreCount:Am(o.findings.reduce((a,c)=>a+cR(c),0)),top:o.findings.slice(0,5).map(a=>({fileA:a.fileA,fileB:a.fileB,together:a.together,confidence:a.confidence,focusedTogether:a.focusedTogether,broadTogether:a.broadTogether,broadCommitRatio:a.broadCommitRatio,lastTogetherAt:a.lastTogetherAt,recentTogether:a.recentTogether,commitScope:a.commitScope,recency:a.recency,scoreWeight:cR(a),subjectContext:a.subjectContext}))},fileStats:s,commitsScanned:i?.commits.length??0}})}function X2(e,t){return fe(e,t,"suppressions",()=>{let n=dc(e);return{total:n.total,byCategory:{...n.byCategory}}})}function Q2(e,t){return fe(e,t,"coverage-contracts",()=>{let n=e.config.coverageContracts??[],i=cv(e,n).filter(o=>o.status!=="ok");return{count:i.length,loc:0,files:[...new Set(i.map(o=>o.file))].sort()}})}function Z2(e,t,n){return fe(e,n,"drift",()=>{let r=Po(e,{scope:t,...me.drift,includePatternDeviations:!1,limit:Number.POSITIVE_INFINITY,semantic:n.semantic}),i=r.results.filter(a=>a.kind!=="pattern-deviation"),o=i.filter(a=>a.actionTier==="direct").length,s=i.length-o;return{count:i.length,unusedImports:r.unusedImports,architectureViolations:r.architectureViolations,layerViolations:r.layerViolations,direct:o,signal:s}})}function eJ(e,t,n){return fe(e,n,"complexity-hotspots",()=>{let r=Pm(e,{scope:t,minLoc:10,limit:n.complexityResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return{top:r.slice(0,5).map(i=>({symbol:i.shortName,score:i.score,file:i.file})),extremeCount:r.filter(i=>i.score>E2).length}})}function tJ(e,t){let n=e.symbols>=D2||e.documents>=k2,r=t?Number.POSITIVE_INFINITY:sR,i=t?Number.POSITIVE_INFINITY:P2;return!n||t?{candidateScanLimit:void 0,candidateResultLimit:r,complexityResultLimit:i,semantic:!0,gitHistoryMode:t?"full":"bounded",releaseCachesBetweenPhases:!0,warnings:t&&n?["Large index detected; running health without candidate scan or result caps because full mode is enabled."]:[]}:{candidateScanLimit:oR,candidateResultLimit:r,complexityResultLimit:i,semantic:!1,gitHistoryMode:"bounded",releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${oR} symbols and reported their top ${sR} findings. Enable full mode for unbounded candidate counts.`]}}function nJ(e,t){t.releaseCachesBetweenPhases&&(xd(e),Fm())}function fe(e,t,n,r){rJ(n);try{return r()}finally{nJ(e,t)}}function rJ(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function iJ(e,t){return t.filter(n=>!De(e,n.relativePath)&&!de(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function oJ(e,t){return t.filter(n=>!De(e,n.relativePath)&&!de(e,n.symbol,n.relativePath))}function hc(e){let t=new Set;for(let n of e){let r=n.relativePath??n.file;r&&t.add(r)}return{count:e.length,loc:e.reduce((n,r)=>n+r.loc,0),files:[...t]}}function lR(e,t){return{...hc(e),scoreCount:Am(e.reduce((r,i)=>r+t(i),0))}}function sJ(e){let t=new Map;for(let n of e)t.set(n.file,Math.max(t.get(n.file)??0,n.loc));return{count:t.size,loc:[...t.values()].reduce((n,r)=>n+r,0),files:[...t.keys()]}}function Nm(e){let t=new Map;for(let n of e)t.set(n.fileA,Math.max(t.get(n.fileA)??0,n.locA)),t.set(n.fileB,Math.max(t.get(n.fileB)??0,n.locB));return{count:e.length,loc:[...t.values()].reduce((n,r)=>n+r,0),files:[...t.keys()]}}function uR(e,t){return{...Nm(e),scoreCount:Am(e.reduce((r,i)=>r+t(i),0))}}function aJ(e){let t=e.sharedHooks.length>0,n=dR({namedState:e.sharedState,requests:e.sharedRequests,lifecycle:e.sharedEffects,functions:e.sharedHandlers});return t&&n<=2?0:t?.5:mR(e.sharedState,e.sharedHandlers,e.sharedHandlerVerbs)?.25:n>=2?1:.5}function cJ(e){let t=e.sharedComposables.length+e.sharedStores.length>0,n=dR({namedState:e.sharedBindings,requests:e.sharedRequests,lifecycle:e.sharedLifecycle,functions:e.sharedFunctions});return t&&n<=2?0:t?.5:mR(e.sharedBindings,e.sharedFunctions,e.sharedFunctionVerbs)?.25:n>=2?1:.5}function dR(e){return e.requests.length*2+e.lifecycle.length+e.namedState.filter(t=>!pR.has(fR(t))).length+Math.min(e.functions.length,3)}function mR(e,t,n){let r=[...e,...t,...n].map(fR);return r.length>0&&r.every(i=>pR.has(i))}function fR(e){return e.replace(/^handle/,"").replace(/^is/,"").replace(/^has/,"").toLowerCase()}function lJ(e){return e.actionTier==="signal"?.25:1}function uJ(e){return e.actionTier==="signal"?.25:1}function cR(e){return e.commitScope==="broad-sweep"?e.recency==="recent"?.25:0:e.commitScope==="mixed"?e.recency==="recent"?.5:.25:e.recency==="recent"?1:.5}function Am(e){return Math.round(e*100)/100}var pR=new Set(["add","apply","cancel","change","clear","close","create","delete","draft","edit","error","filter","form","load","loading","name","open","refresh","remove","reset","save","saving","search","select","selected","submit","toggle","update","value"]);function dJ(e,t,n,r={}){let i=Pd(e,t,n,r);return i?{symbolA:i.symbolA,symbolB:i.symbolB,similarity:i.similarity,sharedCallees:i.sharedEvidence,uniqueToA:i.uniqueToA,uniqueToB:i.uniqueToB,consolidationStrategy:i.consolidationStrategy}:null}function mJ(e,t={}){let{scope:n,limit:r}=t,i=new F(e),o=CJ([...fJ(e,n),...hJ(e,i,n)]);return xJ(o),r?o.slice(0,r):o}function fJ(e,t){let n=[];for(let r of pJ(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||ld(e,r.barrel_path)||P(e,r.barrel_path)&&Ss(e,r.barrel_path).length===0)continue;let i=gJ(e,r),o=i?.barrel_consumers??0,s=i?.direct_consumers??0;o!==0||s!==0||n.push({barrelFile:r.barrel_path,symbol:r.symbol,shortName:I(r.symbol),originalFile:r.original_path,barrelConsumers:o,directConsumers:s,...hR(e,r.barrel_path)})}return n}function pJ(e,t){let n=t?"AND barrel_d.relative_path LIKE ?":"",r=t?[`%${t}%`]:[];return e.all(`SELECT DISTINCT
|
|
855
855
|
barrel_d.id AS barrel_doc_id,
|
|
856
856
|
barrel_d.relative_path AS barrel_path,
|
|
857
857
|
gs.id AS symbol_id,
|
|
@@ -881,7 +881,7 @@ describe.skipIf(inputs.length === 0)('twin-ab: ${e.shortName} vs ${t.shortName}'
|
|
|
881
881
|
-- Only function-level symbols (ending with ().), not module-level
|
|
882
882
|
AND gs.symbol LIKE '%().'
|
|
883
883
|
${n}
|
|
884
|
-
ORDER BY barrel_d.relative_path, gs.symbol`,...r)}function
|
|
884
|
+
ORDER BY barrel_d.relative_path, gs.symbol`,...r)}function gJ(e,t){return e.get(`SELECT
|
|
885
885
|
SUM(CASE WHEN uses_barrel = 1 THEN 1 ELSE 0 END) AS barrel_consumers,
|
|
886
886
|
SUM(CASE WHEN uses_barrel = 0 THEN 1 ELSE 0 END) AS direct_consumers
|
|
887
887
|
FROM (
|
|
@@ -910,18 +910,18 @@ describe.skipIf(inputs.length === 0)('twin-ab: ${e.shortName} vs ${t.shortName}'
|
|
|
910
910
|
AND consumer_d.id != ?
|
|
911
911
|
${e.pathExclusionsFor("consumer_d")}
|
|
912
912
|
GROUP BY consumer_d.id
|
|
913
|
-
)`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function gJ(e,t,n){let r=[];for(let i of hJ(e,n))yv(e,i,i)>0||r.push(...yJ(e,t,i));return r}function hJ(e,t){return N(e,{scope:t,includeIgnored:!1}).filter(n=>bs(e,n).length>0||Jt(e,n).length>0)}function yJ(e,t,n){let r=bs(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>gv(e,t,n,o.sourcePath,[bJ(o.specifier)])),i=Jt(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>gv(e,t,n,o.sourcePath,o.kind==="named"&&o.names.length>0?o.names:[o.kind==="star"?`* from ${o.sourcePath}`:`* namespace from ${o.sourcePath}`]));return[...r,...i]}function gv(e,t,n,r,i){let o=t.definitionsForFile(r);return i.map(s=>{let a=o.find(c=>c.leaf===s);return{barrelFile:n,symbol:a?.symbol??`source-reexport:${n}:${s}`,shortName:a?I(a.symbol):s,originalFile:r,barrelConsumers:0,directConsumers:yv(e,r,n),...hv(e,n)}})}function bJ(e){return e.split("::").at(-1)?.split("/").at(-1)?.replace(/\.[^.]+$/,"")??e}function hv(e,t){return ar(e,t)?{actionTier:"signal",surfaceEvidence:["barrel file is declared on the package public surface"],recommendation:"Review the package API before removing this re-export; local consumers are zero, but external consumers may import through the public barrel."}:{actionTier:"direct",surfaceEvidence:[],recommendation:"Remove this unused re-export when the barrel is not part of an external API surface."}}function yv(e,t,n){let r=new Set;for(let i of N(e,{includeIgnored:!1}))if(i!==n)for(let o of Z(e,i))o.sourcePath===t&&r.add(i);return r.size}function SJ(e){let t=new Set,n=[];for(let r of e){let i=`${r.barrelFile}|${r.symbol}|${r.originalFile}`;t.has(i)||(t.add(i),n.push(r))}return n}function CJ(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function xJ(e,t={}){let{samples:n=50,scope:r,maxDisagreements:i=5}=t,o=new F(e),s=RJ(o.productionCallableDefinitions({scope:r,minLoc:2,requireFunctionLikeSymbol:!0}),n),a=vJ(e,s);if(s.length===0||!a)return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let c={references:bv(),callees:bv()},l=[],u=0,d=a==="semantic"?oa(e,s):new Map,m=a==="source"?EJ(e,o,s):null;for(let f of s){let p=hc(f,a==="semantic"?ia(e,f).map(C=>C.file):[...m?.referencesBySymbolId.get(f.symbolId)??[]]),g=hc(f,a==="semantic"?(d.get(f.symbolId)??[]).map(C=>C.file):[...m?.calleesBySymbolId.get(f.symbolId)??[]]);u+=1;let y=hc(f,Pt(e,f,{semanticEvidence:H}).map(C=>C.file)),h=hc(f,(o.calleeMap([f],{semantic:!1}).get(f.symbolId)??[]).map(C=>C.file)),x=Mm(a,"references"),b=Mm(a,"callees");Sv(c.references,f,"references",y,p,x,l),Sv(c.callees,f,"callees",h,g,b,l)}return l.sort((f,p)=>p.cheapOnly.length+p.oracleOnly.length-(f.cheapOnly.length+f.oracleOnly.length)),{available:!0,sampleSize:s.length,oracleCoverage:s.length>0?jm(u/s.length):0,oracleKind:a,scores:["references","callees"].map(f=>wJ(f,c[f],a)),topDisagreements:l.slice(0,i)}}function bv(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0,skippedOraclePartial:0}}function RJ(e,t){let n=[...e].sort((o,s)=>o.symbolId-s.symbolId);if(n.length<=t)return n;let r=n.length/t,i=[];for(let o=0;o<t;o++)i.push(n[Math.floor(o*r)]);return i}function vJ(e,t){let n=t[0];if(!n)return null;if(Om(e,n))return"source";try{if(We(e).capability("semantic-references",n.relativePath).available)return"semantic"}catch{}return t.some(r=>Om(e,r))?"source":null}function hc(e,t){let n=new Set;for(let r of t)r!==e.relativePath&&n.add(r);return n}function Sv(e,t,n,r,i,o,s){if(!o&&i.size===0){e.skippedOraclePartial+=1;return}e.comparedSymbols+=1,e.cheapTotal+=r.size,e.oracleTotal+=i.size;let a=[],c=[];for(let l of r)i.has(l)?e.agreed+=1:a.push(l);for(let l of i)r.has(l)||c.push(l);(a.length>0||c.length>0)&&s.push({symbol:I(t.symbol),question:n,cheapOnly:a,oracleOnly:c})}var IJ={references:!0,callees:!1};function wJ(e,t,n){let r=t.oracleTotal>0?t.agreed/t.oracleTotal:1,i=t.cheapTotal-t.agreed,o=Mm(n,e);return{question:e,comparedSymbols:t.comparedSymbols,precision:o&&t.cheapTotal>0?jm(t.agreed/t.cheapTotal):null,recall:jm(r),unverified:i,skippedOraclePartial:t.skippedOraclePartial}}function Mm(e,t){return e==="semantic"?IJ[t]:!1}function Om(e,t){return M(t.relativePath)==="clojure"&&z(e,t.relativePath)!==null}function EJ(e,t,n){let r=new Map,i=new Map,o=n.filter(c=>Om(e,c)),s=new Map;for(let c of o){let l=s.get(c.leaf)??[];l.push(c),s.set(c.leaf,l)}for(let c of t.sourceFiles()){if(M(c)!=="clojure")continue;let l=z(e,c);if(l)for(let u of l.fileIdentifiers)for(let d of s.get(u)??[])Cv(r,d.symbolId,c)}let a=new Map;for(let c of t.scopedDefinitions()){if(M(c.relativePath)!=="clojure")continue;let l=a.get(c.leaf)??[];l.push(c),a.set(c.leaf,l)}for(let c of o){let l=z(e,c.relativePath);if(l){for(let u of l.callSites)if(!(u.line<c.startLine||u.line>c.endLine))for(let d of a.get(u.calleeLeaf)??[])Cv(i,c.symbolId,d.relativePath)}}return{referencesBySymbolId:r,calleesBySymbolId:i}}function Cv(e,t,n){let r=e.get(t);if(r){r.add(n);return}e.set(t,new Set([n]))}function jm(e){return Math.round(e*1e3)/1e3}var DJ=new Set(Nt());function PJ(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o,maxShapeFrequency:s=12}=t,a=t.semantic!==!1,c=FJ(e,kJ(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:a,maxShapeFrequency:s}),l=LJ(c);return i?l.slice(0,i):l}function kJ(e,t){let n=xe(e,{scope:t.scope}).filter(r=>TJ(r)&&!e.isIgnored(r.relativePath)).filter(r=>O(r)>=t.minLoc);return typeof t.scanLimit=="number"&&t.scanLimit>0&&n.sort((r,i)=>O(i)-O(r)||r.relativePath.localeCompare(i.relativePath)),se(n,t.scanLimit)}function TJ(e){return!e.isFunctionLike||Ie(e.symbol)?!1:e.kind===null||DJ.has(e.kind)}function FJ(e,t,n){let r=[];for(let s of t){let a=AJ(e,s,n);a&&r.push({signature:a,definition:s,fn:_J(s)})}let i=new Map;for(let s of r)i.set(s.signature,(i.get(s.signature)??0)+1);let o=new Map;for(let s of r){let a=NJ(s.fn.loc),c=(i.get(s.signature)??0)>n.maxShapeFrequency,l=c?lm(e,s.definition):null;if(c&&!l)continue;let u=c?`${s.signature}\0body\0${l}`:`${s.signature}\0band\0${a}`,d=o.get(u)??{signature:s.signature,locBand:a,exactBody:c,functions:[]};d.functions.push(s.fn),o.set(u,d)}return[...o.values()]}function _J(e){return{symbol:e.symbol,shortName:I(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:O(e)}}function LJ(e){let t=[];for(let n of e)n.functions.length>=2&&t.push(n);return t.sort((n,r)=>{let i=r.functions.length-n.functions.length;if(i!==0)return i;let o=n.functions.reduce((a,c)=>a+c.loc,0);return r.functions.reduce((a,c)=>a+c.loc,0)-o}),t}function NJ(e){return e<=5?"<=5":e<=20?"6-20":">20"}function AJ(e,t,n){if(n.semantic){let o=xy(e,t);if(o)return o}let r=MJ(t.documentation),i=r?BJ(r):null;return i||$J(OJ(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function MJ(e){return Yt(Xt(e))}function OJ(e,t,n,r,i){let o=k(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=UJ(s,n,r,i);for(let c of a){let l=Math.min(s.length-1,Math.max(c,c+4)),u="";for(let d=c;d<=l;d+=1){let m=s[d]?.trim();if(m&&(u=u?`${u} ${m}`:m,jJ(u)))return u}if(u&&u.includes("("))return u}return null}function jJ(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||xi(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function BJ(e){if(!e||!e.trim())return null;let t=e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim(),n=t.indexOf("(");return n===-1||(t=t.slice(n),t=t.replace(/\s+/g,"").toLowerCase(),t.length<3)?null:t}function $J(e,t){if(!e||!e.trim())return null;let n=e.replace(/\s+/g," ").trim(),r=n.indexOf("(");if(r===-1)return null;let i=n.slice(0,r),s=new RegExp(`\\b${$(t)}\\b`,"i").exec(i);s&&typeof s.index=="number"&&(i=i.slice(0,s.index)),i=i.replace(/\b(public|private|protected|internal|final|static|abstract|sealed|virtual|override|async|suspend|inline|constexpr|consteval|constinit|const|pub|fn|function|def|sub|friend|shared|readonly|new|open|partial|export)\b/gi," ").replace(/\s+/g," ").trim();let a=HJ(n.slice(r)).replace(/\)\s*=\s*[\s\S]*$/,")").replace(/\s+throws\s+[^={]+$/i,"").replace(/\s+where\s+.+$/i,"").replace(/\s+/g," ").trim();if(!a.startsWith("("))return null;let c=`${i?`${i} `:""}${a}`.replace(/\s+/g,"").toLowerCase();return c.length>=3?c:null}function HJ(e){let t=0,n=0,r=0,i=0,o=null,s=!1;for(let a=0;a<e.length;a+=1){let c=e[a];if(o){if(s){s=!1;continue}if(c==="\\"){s=!0;continue}c===o&&(o=null);continue}if(c==='"'||c==="'"||c==="`"){o=c;continue}if(c==="(")t+=1;else if(c===")")t=Math.max(0,t-1);else if(c==="[")r+=1;else if(c==="]")r=Math.max(0,r-1);else if(c==="<")i+=1;else if(c===">")i=Math.max(0,i-1);else if(c==="{"){if(t===0&&r===0&&i===0)return e.slice(0,a);n+=1}else if(c==="}")n=Math.max(0,n-1);else if(c==="="&&e[a+1]===">"&&t===0&&n===0&&r===0&&i===0)return e.slice(0,a)}return e}function UJ(e,t,n,r){let i=$(r),o=new RegExp(`\\b${i}\\b\\s*\\(`,"i"),s=new RegExp(`\\bdef\\s+${i}\\b`,"i"),a=[],c=new Set,l=Math.max(0,Math.min(t,e.length-1)),u=Math.max(l,Math.min(e.length-1,Math.max(n,t+4)));for(let d=l;d<=u;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}for(let d=0;d<e.length;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}return a}import{spawn as GJ,spawnSync as ghe}from"child_process";var si=class extends Error{constructor(n,r){super(`${n} timed out after ${r}ms.`);this.label=n;this.timeoutMs=r}label;timeoutMs;timedOut=!0};function xv(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function yc(e){return new Promise((t,n)=>{let r=e.maxBuffer??10485760,i=GJ(process.execPath,[...process.execArgv,e.cliPath,e.command,...e.args??[]],{cwd:process.cwd(),env:e.env??process.env,stdio:["ignore","pipe","pipe"]}),o=[],s=[],a=0,c=0,l=!1,u=e.timeoutMs&&e.timeoutMs>0?setTimeout(()=>d(new si(e.label,e.timeoutMs)),e.timeoutMs):null,d=m=>{l||(l=!0,u&&clearTimeout(u),i.kill(),n(m))};i.stdout.on("data",m=>{if(a+=m.length,a>r){d(new Error(`${e.label} exceeded stdout buffer limit (${r} bytes).`));return}o.push(m)}),i.stderr.on("data",m=>{if(c+=m.length,c>r){d(new Error(`${e.label} exceeded stderr buffer limit (${r} bytes).`));return}s.push(m)}),i.on("error",d),i.on("close",m=>{if(l)return;l=!0,u&&clearTimeout(u);let f=Buffer.concat(s).toString("utf8").trim();if(m!==0){n(new Error(`${e.label} failed${f?`:
|
|
914
|
-
${f}`:""}`));return}try{t(JSON.parse(Buffer.concat(o).toString("utf8")))}catch(p){n(new Error(`${e.label} returned invalid JSON: ${p instanceof Error?p.message:p}`))}})})}async function Bm(e,t,n){let r=new Array(e.length),i=0;async function o(){for(;i<e.length;){let s=i++;r[s]=await n(e[s])}}return await Promise.all(Array.from({length:Math.min(t,e.length)},()=>o())),r}function
|
|
915
|
-
`)}function
|
|
913
|
+
)`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function hJ(e,t,n){let r=[];for(let i of yJ(e,n))yR(e,i,i)>0||r.push(...bJ(e,t,i));return r}function yJ(e,t){return N(e,{scope:t,includeIgnored:!1}).filter(n=>Ss(e,n).length>0||Jt(e,n).length>0)}function bJ(e,t,n){let r=Ss(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>gR(e,t,n,o.sourcePath,[SJ(o.specifier)])),i=Jt(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>gR(e,t,n,o.sourcePath,o.kind==="named"&&o.names.length>0?o.names:[o.kind==="star"?`* from ${o.sourcePath}`:`* namespace from ${o.sourcePath}`]));return[...r,...i]}function gR(e,t,n,r,i){let o=t.definitionsForFile(r);return i.map(s=>{let a=o.find(c=>c.leaf===s);return{barrelFile:n,symbol:a?.symbol??`source-reexport:${n}:${s}`,shortName:a?I(a.symbol):s,originalFile:r,barrelConsumers:0,directConsumers:yR(e,r,n),...hR(e,n)}})}function SJ(e){return e.split("::").at(-1)?.split("/").at(-1)?.replace(/\.[^.]+$/,"")??e}function hR(e,t){return ar(e,t)?{actionTier:"signal",surfaceEvidence:["barrel file is declared on the package public surface"],recommendation:"Review the package API before removing this re-export; local consumers are zero, but external consumers may import through the public barrel."}:{actionTier:"direct",surfaceEvidence:[],recommendation:"Remove this unused re-export when the barrel is not part of an external API surface."}}function yR(e,t,n){let r=new Set;for(let i of N(e,{includeIgnored:!1}))if(i!==n)for(let o of Z(e,i))o.sourcePath===t&&r.add(i);return r.size}function CJ(e){let t=new Set,n=[];for(let r of e){let i=`${r.barrelFile}|${r.symbol}|${r.originalFile}`;t.has(i)||(t.add(i),n.push(r))}return n}function xJ(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function vJ(e,t={}){let{samples:n=50,scope:r,maxDisagreements:i=5}=t,o=new F(e),s=RJ(o.productionCallableDefinitions({scope:r,minLoc:2,requireFunctionLikeSymbol:!0}),n),a=IJ(e,s);if(s.length===0||!a)return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let c={references:bR(),callees:bR()},l=[],u=0,d=a==="semantic"?sa(e,s):new Map,m=a==="source"?DJ(e,o,s):null;for(let f of s){let p=yc(f,a==="semantic"?oa(e,f).map(C=>C.file):[...m?.referencesBySymbolId.get(f.symbolId)??[]]),g=yc(f,a==="semantic"?(d.get(f.symbolId)??[]).map(C=>C.file):[...m?.calleesBySymbolId.get(f.symbolId)??[]]);u+=1;let y=yc(f,kt(e,f,{semanticEvidence:H}).map(C=>C.file)),h=yc(f,(o.calleeMap([f],{semantic:!1}).get(f.symbolId)??[]).map(C=>C.file)),x=Mm(a,"references"),b=Mm(a,"callees");SR(c.references,f,"references",y,p,x,l),SR(c.callees,f,"callees",h,g,b,l)}return l.sort((f,p)=>p.cheapOnly.length+p.oracleOnly.length-(f.cheapOnly.length+f.oracleOnly.length)),{available:!0,sampleSize:s.length,oracleCoverage:s.length>0?jm(u/s.length):0,oracleKind:a,scores:["references","callees"].map(f=>EJ(f,c[f],a)),topDisagreements:l.slice(0,i)}}function bR(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0,skippedOraclePartial:0}}function RJ(e,t){let n=[...e].sort((o,s)=>o.symbolId-s.symbolId);if(n.length<=t)return n;let r=n.length/t,i=[];for(let o=0;o<t;o++)i.push(n[Math.floor(o*r)]);return i}function IJ(e,t){let n=t[0];if(!n)return null;if(Om(e,n))return"source";try{if(We(e).capability("semantic-references",n.relativePath).available)return"semantic"}catch{}return t.some(r=>Om(e,r))?"source":null}function yc(e,t){let n=new Set;for(let r of t)r!==e.relativePath&&n.add(r);return n}function SR(e,t,n,r,i,o,s){if(!o&&i.size===0){e.skippedOraclePartial+=1;return}e.comparedSymbols+=1,e.cheapTotal+=r.size,e.oracleTotal+=i.size;let a=[],c=[];for(let l of r)i.has(l)?e.agreed+=1:a.push(l);for(let l of i)r.has(l)||c.push(l);(a.length>0||c.length>0)&&s.push({symbol:I(t.symbol),question:n,cheapOnly:a,oracleOnly:c})}var wJ={references:!0,callees:!1};function EJ(e,t,n){let r=t.oracleTotal>0?t.agreed/t.oracleTotal:1,i=t.cheapTotal-t.agreed,o=Mm(n,e);return{question:e,comparedSymbols:t.comparedSymbols,precision:o&&t.cheapTotal>0?jm(t.agreed/t.cheapTotal):null,recall:jm(r),unverified:i,skippedOraclePartial:t.skippedOraclePartial}}function Mm(e,t){return e==="semantic"?wJ[t]:!1}function Om(e,t){return M(t.relativePath)==="clojure"&&z(e,t.relativePath)!==null}function DJ(e,t,n){let r=new Map,i=new Map,o=n.filter(c=>Om(e,c)),s=new Map;for(let c of o){let l=s.get(c.leaf)??[];l.push(c),s.set(c.leaf,l)}for(let c of t.sourceFiles()){if(M(c)!=="clojure")continue;let l=z(e,c);if(l)for(let u of l.fileIdentifiers)for(let d of s.get(u)??[])CR(r,d.symbolId,c)}let a=new Map;for(let c of t.scopedDefinitions()){if(M(c.relativePath)!=="clojure")continue;let l=a.get(c.leaf)??[];l.push(c),a.set(c.leaf,l)}for(let c of o){let l=z(e,c.relativePath);if(l){for(let u of l.callSites)if(!(u.line<c.startLine||u.line>c.endLine))for(let d of a.get(u.calleeLeaf)??[])CR(i,c.symbolId,d.relativePath)}}return{referencesBySymbolId:r,calleesBySymbolId:i}}function CR(e,t,n){let r=e.get(t);if(r){r.add(n);return}e.set(t,new Set([n]))}function jm(e){return Math.round(e*1e3)/1e3}var kJ=new Set(Nt());function PJ(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o,maxShapeFrequency:s=12}=t,a=t.semantic!==!1,c=_J(e,TJ(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:a,maxShapeFrequency:s}),l=NJ(c);return i?l.slice(0,i):l}function TJ(e,t){let n=xe(e,{scope:t.scope}).filter(r=>FJ(r)&&!e.isIgnored(r.relativePath)).filter(r=>O(r)>=t.minLoc);return typeof t.scanLimit=="number"&&t.scanLimit>0&&n.sort((r,i)=>O(i)-O(r)||r.relativePath.localeCompare(i.relativePath)),se(n,t.scanLimit)}function FJ(e){return!e.isFunctionLike||Ie(e.symbol)?!1:e.kind===null||kJ.has(e.kind)}function _J(e,t,n){let r=[];for(let s of t){let a=MJ(e,s,n);a&&r.push({signature:a,definition:s,fn:LJ(s)})}let i=new Map;for(let s of r)i.set(s.signature,(i.get(s.signature)??0)+1);let o=new Map;for(let s of r){let a=AJ(s.fn.loc),c=(i.get(s.signature)??0)>n.maxShapeFrequency,l=c?lm(e,s.definition):null;if(c&&!l)continue;let u=c?`${s.signature}\0body\0${l}`:`${s.signature}\0band\0${a}`,d=o.get(u)??{signature:s.signature,locBand:a,exactBody:c,functions:[]};d.functions.push(s.fn),o.set(u,d)}return[...o.values()]}function LJ(e){return{symbol:e.symbol,shortName:I(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:O(e)}}function NJ(e){let t=[];for(let n of e)n.functions.length>=2&&t.push(n);return t.sort((n,r)=>{let i=r.functions.length-n.functions.length;if(i!==0)return i;let o=n.functions.reduce((a,c)=>a+c.loc,0);return r.functions.reduce((a,c)=>a+c.loc,0)-o}),t}function AJ(e){return e<=5?"<=5":e<=20?"6-20":">20"}function MJ(e,t,n){if(n.semantic){let o=xy(e,t);if(o)return o}let r=OJ(t.documentation),i=r?$J(r):null;return i||HJ(jJ(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function OJ(e){return Yt(Xt(e))}function jJ(e,t,n,r,i){let o=P(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=WJ(s,n,r,i);for(let c of a){let l=Math.min(s.length-1,Math.max(c,c+4)),u="";for(let d=c;d<=l;d+=1){let m=s[d]?.trim();if(m&&(u=u?`${u} ${m}`:m,BJ(u)))return u}if(u&&u.includes("("))return u}return null}function BJ(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||xi(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function $J(e){if(!e||!e.trim())return null;let t=e.replace(/^```\w*\s*/,"").replace(/\s*```$/,"").replace(/^\(method\)\s*/,"").replace(/^\(property\)\s*/,"").replace(/^\(function\)\s*/,"").replace(/^\(class\)\s*/,"").replace(/^\(interface\)\s*/,"").replace(/^\(enum\)\s*/,"").replace(/^\(type alias\)\s*/,"").replace(/^\(const\)\s*/,"").replace(/^\(var\)\s*/,"").trim(),n=t.indexOf("(");return n===-1||(t=t.slice(n),t=t.replace(/\s+/g,"").toLowerCase(),t.length<3)?null:t}function HJ(e,t){if(!e||!e.trim())return null;let n=e.replace(/\s+/g," ").trim(),r=n.indexOf("(");if(r===-1)return null;let i=n.slice(0,r),s=new RegExp(`\\b${$(t)}\\b`,"i").exec(i);s&&typeof s.index=="number"&&(i=i.slice(0,s.index)),i=i.replace(/\b(public|private|protected|internal|final|static|abstract|sealed|virtual|override|async|suspend|inline|constexpr|consteval|constinit|const|pub|fn|function|def|sub|friend|shared|readonly|new|open|partial|export)\b/gi," ").replace(/\s+/g," ").trim();let a=UJ(n.slice(r)).replace(/\)\s*=\s*[\s\S]*$/,")").replace(/\s+throws\s+[^={]+$/i,"").replace(/\s+where\s+.+$/i,"").replace(/\s+/g," ").trim();if(!a.startsWith("("))return null;let c=`${i?`${i} `:""}${a}`.replace(/\s+/g,"").toLowerCase();return c.length>=3?c:null}function UJ(e){let t=0,n=0,r=0,i=0,o=null,s=!1;for(let a=0;a<e.length;a+=1){let c=e[a];if(o){if(s){s=!1;continue}if(c==="\\"){s=!0;continue}c===o&&(o=null);continue}if(c==='"'||c==="'"||c==="`"){o=c;continue}if(c==="(")t+=1;else if(c===")")t=Math.max(0,t-1);else if(c==="[")r+=1;else if(c==="]")r=Math.max(0,r-1);else if(c==="<")i+=1;else if(c===">")i=Math.max(0,i-1);else if(c==="{"){if(t===0&&r===0&&i===0)return e.slice(0,a);n+=1}else if(c==="}")n=Math.max(0,n-1);else if(c==="="&&e[a+1]===">"&&t===0&&n===0&&r===0&&i===0)return e.slice(0,a)}return e}function WJ(e,t,n,r){let i=$(r),o=new RegExp(`\\b${i}\\b\\s*\\(`,"i"),s=new RegExp(`\\bdef\\s+${i}\\b`,"i"),a=[],c=new Set,l=Math.max(0,Math.min(t,e.length-1)),u=Math.max(l,Math.min(e.length-1,Math.max(n,t+4)));for(let d=l;d<=u;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}for(let d=0;d<e.length;d+=1){let m=e[d]??"";(o.test(m)||s.test(m))&&!c.has(d)&&(c.add(d),a.push(d))}return a}import{spawn as zJ,spawnSync as She}from"child_process";var si=class extends Error{constructor(n,r){super(`${n} timed out after ${r}ms.`);this.label=n;this.timeoutMs=r}label;timeoutMs;timedOut=!0};function xR(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function bc(e){return new Promise((t,n)=>{let r=e.maxBuffer??10485760,i=zJ(process.execPath,[...process.execArgv,e.cliPath,e.command,...e.args??[]],{cwd:process.cwd(),env:e.env??process.env,stdio:["ignore","pipe","pipe"]}),o=[],s=[],a=0,c=0,l=!1,u=e.timeoutMs&&e.timeoutMs>0?setTimeout(()=>d(new si(e.label,e.timeoutMs)),e.timeoutMs):null,d=m=>{l||(l=!0,u&&clearTimeout(u),i.kill(),n(m))};i.stdout.on("data",m=>{if(a+=m.length,a>r){d(new Error(`${e.label} exceeded stdout buffer limit (${r} bytes).`));return}o.push(m)}),i.stderr.on("data",m=>{if(c+=m.length,c>r){d(new Error(`${e.label} exceeded stderr buffer limit (${r} bytes).`));return}s.push(m)}),i.on("error",d),i.on("close",m=>{if(l)return;l=!0,u&&clearTimeout(u);let f=Buffer.concat(s).toString("utf8").trim();if(m!==0){n(new Error(`${e.label} failed${f?`:
|
|
914
|
+
${f}`:""}`));return}try{t(JSON.parse(Buffer.concat(o).toString("utf8")))}catch(p){n(new Error(`${e.label} returned invalid JSON: ${p instanceof Error?p.message:p}`))}})})}async function Bm(e,t,n){let r=new Array(e.length),i=0;async function o(){for(;i<e.length;){let s=i++;r[s]=await n(e[s])}}return await Promise.all(Array.from({length:Math.min(t,e.length)},()=>o())),r}function vR(e,t){let n=new Set,r=[];for(let i of e){if(n.has(i))continue;let o=t.find(a=>a.has(i));if(!o){n.add(i),r.push([i]);continue}let s=e.filter(a=>o.has(a));s.forEach(a=>n.add(a)),r.push(s)}return r}import{spawnSync as VJ}from"child_process";import{existsSync as qJ,mkdirSync as KJ,readFileSync as JJ,renameSync as YJ,writeFileSync as XJ}from"fs";import{dirname as RR,join as QJ}from"path";var Sc=3,ZJ="health-report-cache.json";function $m(e,t,n,r=rY()){let i=Te(e);return i?{version:Sc,projectFingerprint:i,cliVersion:n,scope:t.scope??null,full:t.full===!0,phaseTimeoutMs:t.phaseTimeoutMs??null,gitHead:r.gitHead(e.config.projectRoot)}:null}function IR(e,t,n=kR()){let r=ER(e),i=DR(t),o=!1;return E("health.report-cache.read",()=>{if(!n.existsSync(r))return null;try{let s=JSON.parse(n.readFileSync(r,"utf8"));return!eY(s)||s.keyHash!==i?null:(o=!0,s.report)}catch{return null}},()=>({available:!0,hit:o,keyHash:i}))}function wR(e,t,n,r=kR()){let i=ER(e),o={version:Sc,keyHash:DR(t),key:t,writtenAt:r.nowIso(),report:n};r.mkdirSync(RR(i),{recursive:!0});let s=`${i}.${process.pid}.${Date.now()}.tmp`;r.writeFileSync(s,JSON.stringify(o)),r.renameSync(s,i)}function ER(e){return QJ(RR(e.config.dbPath),ZJ)}function DR(e){return he(JSON.stringify(e))}function eY(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===Sc&&typeof t.keyHash=="string"&&tY(t.key)&&typeof t.writtenAt=="string"&&nY(t.report)}function tY(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===Sc&&typeof t.projectFingerprint=="string"&&typeof t.cliVersion=="string"&&(t.scope===null||typeof t.scope=="string")&&typeof t.full=="boolean"&&(t.phaseTimeoutMs===null||typeof t.phaseTimeoutMs=="number")&&(t.gitHead===null||typeof t.gitHead=="string")}function nY(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.score=="number"&&typeof t.riskScore=="number"&&typeof t.hygieneScore=="number"&&typeof t.overview=="object"&&typeof t.findings=="object"&&Array.isArray(t.scoreBreakdown)&&Array.isArray(t.actions)&&Array.isArray(t.pressure)&&Array.isArray(t.topComplexity)&&Array.isArray(t.detectorPrecision)}function rY(){return{gitHead(e){let t=VJ("git",["rev-parse","HEAD"],{cwd:e,encoding:"utf8"});return t.status===0?t.stdout.trim():null}}}function kR(){return{existsSync:qJ,mkdirSync:KJ,readFileSync:JJ,renameSync:YJ,writeFileSync:XJ,nowIso:()=>new Date().toISOString()}}var FR="__health-phase",oY="__diff-impact-batch",sY=10,aY=4,cY=8,lY=25e3,uY=2500,Hm=2500,dY=4,mY=12,PR=3e4,_R=new Set(["react-component-duplicates","react-hook-candidates","react-large-component-pressure"]),LR=new Set(["vue-component-duplicates","vue-composable-candidates","vue-large-view-pressure"]),fY=new Set([...LR,"suppressions"]),pY=new Set(["similar","extract-candidates"]),Cc=2,TR=$n({kind:"health-semantic-prewarm",invalidation:J("health-semantic-prewarm"),serialize:e=>JSON.stringify(e),deserialize:gY});function gY(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;return n.version!==Cc||typeof n.definitions!="number"||!Number.isFinite(n.definitions)||typeof n.referenceCacheWrites!="number"||!Number.isFinite(n.referenceCacheWrites)||typeof n.referenceIncomplete!="number"||!Number.isFinite(n.referenceIncomplete)||typeof n.calleeRows!="number"||!Number.isFinite(n.calleeRows)||typeof n.warmedAt!="number"||!Number.isFinite(n.warmedAt)?null:{version:Cc,definitions:n.definitions,referenceCacheWrites:n.referenceCacheWrites,referenceIncomplete:n.referenceIncomplete,calleeRows:n.calleeRows,warmedAt:n.warmedAt}}catch{return null}}function NR(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
|
|
915
|
+
`)}function hY(e){let t=cr(e);return t.symbols>=lY||t.documents>=uY}function AR(e,t,n,r={}){return hY(e)?n?(r.quiet||console.error(`Large index detected; ${t} is running the unbounded semantic pass because --full was supplied.`),{semantic:!0}):(r.quiet||console.error(`Large index detected; ${t} will scan the highest-priority ${Hm} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:Hm,semantic:!1,analysisBudget:{scanLimit:Hm,semanticEnrichment:!1,reason:"large index default budget; pass --full for unbounded semantic analysis"}}):{semantic:!0}}function Ghe(e){return e?`analysis budget: scanning up to ${e.scanLimit} candidate(s); semantic enrichment=${e.semanticEnrichment}; ${e.reason}`:null}var yY={env:process.env,projectFingerprint:Te,semanticEngineFingerprint:xY,readMarker:(e,t,n)=>TR.read(e,t,n),writeMarker:(e,t,n,r)=>TR.write(e,t,n,r),candidateDefinitions:(e,t)=>new F(e).scopedDefinitions(t.scope).filter(n=>Ee(n.relativePath)!==null),materializeReferences:(e,t,n)=>We(e).materializeReferences(t,n),materializeCallees:Iu};function bY(e,t,n=yY){if(t.full!==!0)return Mn("default-mode");if((n.env??process.env).SCIP_QUERY_HEALTH_SEMANTIC_PREWARM==="0")return Mn("disabled");let r=Mn("error");return E("health.semantic-prewarm",()=>{try{r=SY(e,t,n)}catch(i){r=Mn("error",{error:i instanceof Error?i.message:String(i)})}return r},()=>vY(r))}function SY(e,t,n){let r=n.projectFingerprint(e);if(!r)return Mn("missing-project-fingerprint");let i=CY(t,n.semanticEngineFingerprint(e)),o=n.readMarker(e,i,r);if(o&&o.referenceIncomplete===0)return Mn("cache-hit");let s=[];if(s=E("health.semantic-prewarm.candidate-definitions",()=>(s=n.candidateDefinitions(e,t),s),()=>({definitions:s.length})),s.length===0)return Mn("no-semantic-definitions");let a=0,c=E("health.semantic-prewarm.references",()=>{let m=n.materializeReferences(e,s,{prefetchCallees:!0});return a=m.cacheHits+m.cacheWrites+m.inMemoryHits,m},()=>({definitions:s.length,rows:a}));if(c.cacheHits+c.cacheWrites+c.inMemoryHits===0&&c.misses+c.unkeyed>0)return Mn("provider-unavailable",{definitions:s.length,referenceMisses:c.misses});let u=0,d=E("health.semantic-prewarm.callees",()=>{let m=n.materializeCallees(e,s);return u=m.size,m},()=>({definitions:s.length,rows:u}));return c.incomplete>0?{status:"partial",reason:"incomplete-references",definitions:s.length,referenceCacheHits:c.cacheHits,referenceCacheWrites:c.cacheWrites,referenceMisses:c.misses,referenceIncomplete:c.incomplete,calleeRows:d.size}:(E("health.semantic-prewarm.marker-write",()=>n.writeMarker(e,i,r,{version:Cc,definitions:s.length,referenceCacheWrites:c.cacheWrites,referenceIncomplete:c.incomplete,calleeRows:d.size,warmedAt:Date.now()})),{status:"warmed",reason:"cache-miss",definitions:s.length,referenceCacheHits:c.cacheHits,referenceCacheWrites:c.cacheWrites,referenceMisses:c.misses,referenceIncomplete:c.incomplete,calleeRows:d.size})}function CY(e,t){return JSON.stringify({version:Cc,cliVersion:er,semanticEngineFingerprint:t,scope:e.scope??null})}function xY(e){return he(JSON.stringify({kind:"health-semantic-prewarm-engine",rust:Yn(e.config.projectRoot)}))}function Mn(e,t={}){return{status:"skipped",reason:e,definitions:0,referenceCacheHits:0,referenceCacheWrites:0,referenceMisses:0,referenceIncomplete:0,calleeRows:0,...t}}function vY(e){return{status:e.status,reason:e.reason,definitions:e.definitions,referenceCacheHits:e.referenceCacheHits,referenceCacheWrites:e.referenceCacheWrites,referenceMisses:e.referenceMisses,referenceIncomplete:e.referenceIncomplete,calleeRows:e.calleeRows,error:e.error}}async function zhe(e){let t=kY(e),n={...e,phaseTimeoutMs:t??null},r=nn(m=>{let f=$m(m,n,er);if(!f)return null;let p=IR(m,f);return p?(p.detectorPrecision=Tm(fc(m),Date.now()),p):null});if(r)return r;let{applicability:i,overview:o}=nn(m=>({applicability:RY(m,e),overview:_m(m,"overview",e)})),s=new Map;s.set("overview",o);let a=gc.filter(m=>m==="overview"?!1:IY(m,i)?!0:(s.set(m,fr(m)),!1)),c=wY(a);e.full&&nn(m=>bY(m,e));let l=await Bm(c,PY(c.length),m=>EY(m,e,t)),u=[];if(l.flat().forEach(m=>{m.healthPhaseMeta&&u.push(`Health phase "${m.phase}" deferred: ${m.healthPhaseMeta.reason}. Run health --full for exhaustive analysis.`),s.set(m.phase,m)}),u.length>0){let m=s.get("overview");s.set("overview",{...m,warnings:[...m.warnings,...u]})}let d=Lm(gc.map(m=>s.get(m)));return d.detectorPrecision=nn(m=>Tm(fc(m),Date.now())),nn(m=>{let f=$m(m,n,er);f&&wR(m,f,d)}),d}function RY(e,t){return us(e,{scope:t.scope})}function IY(e,t){return _R.has(e)?t.react:LR.has(e)?t.vue:!0}function wY(e){return vR(e,[_R,fY,pY])}function fr(e){switch(e){case"react-component-duplicates":return{phase:e,reactComponentDuplicates:{count:0,loc:0,files:[]}};case"react-hook-candidates":return{phase:e,reactHookCandidates:{count:0,loc:0,files:[]}};case"react-large-component-pressure":return{phase:e,reactLargeComponentPressure:{count:0,loc:0,files:[]}};case"vue-component-duplicates":return{phase:e,vueComponentDuplicates:{count:0,loc:0,files:[]}};case"vue-composable-candidates":return{phase:e,vueComposableCandidates:{count:0,loc:0,files:[]}};case"vue-large-view-pressure":return{phase:e,vueLargeViewPressure:{count:0,loc:0,files:[]}};default:throw new Error(`Health phase "${e}" cannot be synthesized.`)}}function EY(e,t,n){if(e.length===1)return DY(e[0],t,n).then(s=>[s]);let r=e.join(","),i=process.argv[1]??Wm(import.meta.url),o=[r];return t.scope&&o.push("--scope",t.scope),t.full&&o.push("--full"),bc({cliPath:i,command:FR,args:o,label:`Health phases "${r}"`,timeoutMs:n}).catch(s=>{if(t.full||!(s instanceof si))throw s;return e.map(a=>MR(a,s.timeoutMs,`timed out after ${s.timeoutMs}ms`))})}function DY(e,t,n){let r=process.argv[1]??Wm(import.meta.url),i=[e];return t.scope&&i.push("--scope",t.scope),t.full&&i.push("--full"),bc({cliPath:r,command:FR,args:i,label:`Health phase "${e}"`,timeoutMs:n}).catch(o=>{if(t.full||!(o instanceof si))throw o;return MR(e,o.timeoutMs,`timed out after ${o.timeoutMs}ms`)})}function kY(e,t=process.env){if(e.full)return;let n=t.SCIP_QUERY_HEALTH_PHASE_TIMEOUT_MS;if(!n)return PR;let r=parseInt(n,10);return!Number.isFinite(r)||r<0?PR:r===0?void 0:r}function MR(e,t,n){let r={healthPhaseMeta:{status:"deferred",reason:n,timeoutMs:t}};switch(e){case"overview":throw new Error("Overview health phase cannot be deferred.");case"dead":return{phase:e,dead:{count:0,loc:0,files:[]},...r};case"isolated":return{phase:e,isolated:{count:0,loc:0,files:[]},...r};case"cycles":return{phase:e,realCycleCount:0,...r};case"similar":return{phase:e,similarCount:0,...r};case"duplicate-bodies":return{phase:e,duplicateBodies:{count:0,loc:0,files:[]},...r};case"twin-drift":return{phase:e,twinDrift:{count:0,loc:0,files:[]},...r};case"react-component-duplicates":return{...fr(e),...r};case"react-hook-candidates":return{...fr(e),...r};case"react-large-component-pressure":return{...fr(e),...r};case"vue-component-duplicates":return{...fr(e),...r};case"vue-composable-candidates":return{...fr(e),...r};case"vue-large-view-pressure":return{...fr(e),...r};case"extract-candidates":return{phase:e,extractCount:0,...r};case"wrapper-candidates":return{phase:e,wrappers:{count:0,loc:0,files:[]},...r};case"passthrough-candidates":return{phase:e,passthroughs:{count:0,loc:0,files:[]},...r};case"stale-abstractions":return{phase:e,stale:{count:0,loc:0,files:[],unused:0,singleUse:0},...r};case"drift":return{phase:e,drift:{count:0,unusedImports:0,architectureViolations:0,layerViolations:0,direct:0,signal:0},...r};case"complexity-hotspots":return{phase:e,complexity:{top:[],extremeCount:0},...r};case"git-evidence":return{phase:e,gitEvidence:null,...r};case"suppressions":return{phase:e,suppressions:{total:0,byCategory:{}},...r};case"coverage-contracts":return{phase:e,coverageContracts:{count:0,loc:0,files:[]},...r}}}var PY=OR({envKey:"SCIP_QUERY_HEALTH_CONCURRENCY",defaultMinimum:dY,defaultMaximum:mY});function Vhe(e,t){if(t){console.log(JSON.stringify(e,null,2));return}if(console.log(`
|
|
916
916
|
Codebase Health Score: ${e.score}/100`),console.log(` Risk: ${e.riskScore}/100 (risk-oriented graph facts + change graph)`),console.log(` Hygiene: ${e.hygieneScore}/100 (tidiness candidates)
|
|
917
917
|
`),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${fS(e.overview.indexSizeBytes)}
|
|
918
918
|
`),e.warnings&&e.warnings.length>0){console.log(" Warnings:");for(let r of e.warnings)console.log(` ${r}`);console.log("")}console.log(" Findings:");let n=e.findings;if(n.deadSymbols>0&&console.log(` Dead code: ${n.deadSymbols} symbols (${n.deadLoc} LOC)`),n.isolatedSymbols>0&&console.log(` Isolated symbols: ${n.isolatedSymbols} (${n.isolatedLoc} LOC)`),n.cycles>0&&console.log(` Circular deps: ${n.cycles}`),n.similarPairs>0&&console.log(` Similar pairs: ${n.similarPairs}`),n.twinDriftGroups>0&&console.log(` Drifted twins: ${n.twinDriftGroups} group(s)`),n.reactComponentDuplicatePairs>0&&console.log(` React components: ${n.reactComponentDuplicatePairs} duplicate pair(s)`),n.reactHookCandidatePairs>0&&console.log(` React hook reuse: ${Um(n.reactHookCandidatePairs,n.reactHookCandidateScoreCount)} candidate pair(s)`),n.reactLargeComponentPressureFiles>0&&console.log(` React large comps: ${n.reactLargeComponentPressureFiles} component(s)`),n.vueComponentDuplicatePairs>0&&console.log(` Vue components: ${n.vueComponentDuplicatePairs} duplicate pair(s)`),n.vueComposableCandidatePairs>0&&console.log(` Vue composables: ${Um(n.vueComposableCandidatePairs,n.vueComposableCandidateScoreCount)} candidate pair(s)`),n.vueLargeViewPressureFiles>0&&console.log(` Vue large views: ${n.vueLargeViewPressureFiles} file(s)`),n.extractionCandidates>0&&console.log(` Extract candidates: ${n.extractionCandidates}`),n.wrappers>0&&console.log(` Wrapper functions: ${Um(n.wrappers,n.wrapperScoreCount)}`),n.passthroughs>0&&console.log(` Passthroughs: ${n.passthroughs}`),n.staleTypes>0&&console.log(` Stale abstractions: ${n.staleTypes}`),n.driftedFiles>0&&console.log(` Pattern drift: ${n.driftedFiles} files`),n.complexityHotspotCount>0&&console.log(` Complexity hotspots: ${n.complexityHotspotCount}`),e.actions.length>0){console.log(`
|
|
919
919
|
Prioritized Actions (highest impact + lowest effort first):`);for(let r=0;r<e.actions.length;r++){let i=e.actions[r],o=i.locRecoverable>0?` (~${i.locRecoverable} LOC involved)`:"";console.log(` ${r+1}. [${i.effort} effort / ${i.impact} impact] ${i.description}${o}`)}}if(e.topComplexity.length>0){console.log(`
|
|
920
|
-
Top Complexity Hotspots:`);for(let r of e.topComplexity)console.log(` ${r.score.toFixed(1).padStart(6)} ${r.symbol}`)}if(
|
|
920
|
+
Top Complexity Hotspots:`);for(let r of e.topComplexity)console.log(` ${r.score.toFixed(1).padStart(6)} ${r.symbol}`)}if(_Y(e),FY(e),e.scoreBreakdown.length>0){console.log(`
|
|
921
921
|
Score Breakdown (100 minus the following):`);for(let r of e.scoreBreakdown)console.log(` -${String(r.points).padStart(2)} ${r.axis}: ${r.detail}`)}e.actions.length===0&&console.log(e.warnings&&e.warnings.length>0?`
|
|
922
922
|
No findings from completed analyses. Review warnings before interpreting this result as clean.`:`
|
|
923
|
-
No issues found. Codebase is clean.`)}function Um(e,t){return Math.abs(e-t)<.01?String(e):`${e} (${
|
|
924
|
-
Maintenance Pressure:`);for(let t of e.pressure)console.log(` ${t.category}: ${t.count} / ${t.threshold} threshold (${t.ratio}x, -${t.extraPenalty} ${t.kind})`)}}function
|
|
925
|
-
Axes:`),console.log(` Zero-reference candidates: ${t.deletable.loc} LOC across ${t.deletable.symbols} symbols`),t.changeAmplification){let r=t.changeAmplification;console.log(` Change amplification: ${r.medianFilesPerCommit} files/commit median, ${r.p90FilesPerCommit} p90 (${r.commitsAnalyzed} commits)`)}if(t.hiddenCoupling&&t.hiddenCoupling.pairCount>0){console.log(` Hidden coupling: ${t.hiddenCoupling.pairCount} co-changing pair(s) without a dependency edge`);for(let r of t.hiddenCoupling.top.slice(0,3))console.log(` ${r.fileA} <-> ${r.fileB} (${r.together}x together, ${Math.round(r.confidence*100)}%)`)}if(t.churnWeightedComplexity&&t.churnWeightedComplexity.length>0){let r=t.churnWeightedComplexity[0];r.weighted>0&&console.log(` Churn x complexity: hottest is ${r.symbol} (${r.changes} changes, weighted ${r.weighted})`)}let n=t.evidenceQuality;if(console.log(` Evidence quality: ${n.graphFindings} graph-fact finding(s), ${n.heuristicFindings} heuristic finding(s), ${n.userSuppressed} user-suppressed`),e.validation&&e.validation.flaggedFiles>0){let r=e.validation,i=r.ratio===null?"n/a":`${r.ratio}x`;console.log(` Validation: flagged files fix-density ${r.flaggedFixDensity} vs baseline ${r.baselineFixDensity} (${i})`),console.log(` fix-commit signal: subject-keyword heuristic over ${r.validationBasis.commitsScanned} commits`)}}async function
|
|
926
|
-
Affected consumer files:`),Lt.list(e.affectedConsumers,n=>` ${n.file} (${n.consumedSymbols} symbol(s))`))}var
|
|
927
|
-
//# sourceMappingURL=chunk-
|
|
923
|
+
No issues found. Codebase is clean.`)}function Um(e,t){return Math.abs(e-t)<.01?String(e):`${e} (${TY(t)} score-weighted)`}function TY(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function FY(e){if(e.pressure.length!==0){console.log(`
|
|
924
|
+
Maintenance Pressure:`);for(let t of e.pressure)console.log(` ${t.category}: ${t.count} / ${t.threshold} threshold (${t.ratio}x, -${t.extraPenalty} ${t.kind})`)}}function _Y(e){let t=e.axes;if(console.log(`
|
|
925
|
+
Axes:`),console.log(` Zero-reference candidates: ${t.deletable.loc} LOC across ${t.deletable.symbols} symbols`),t.changeAmplification){let r=t.changeAmplification;console.log(` Change amplification: ${r.medianFilesPerCommit} files/commit median, ${r.p90FilesPerCommit} p90 (${r.commitsAnalyzed} commits)`)}if(t.hiddenCoupling&&t.hiddenCoupling.pairCount>0){console.log(` Hidden coupling: ${t.hiddenCoupling.pairCount} co-changing pair(s) without a dependency edge`);for(let r of t.hiddenCoupling.top.slice(0,3))console.log(` ${r.fileA} <-> ${r.fileB} (${r.together}x together, ${Math.round(r.confidence*100)}%)`)}if(t.churnWeightedComplexity&&t.churnWeightedComplexity.length>0){let r=t.churnWeightedComplexity[0];r.weighted>0&&console.log(` Churn x complexity: hottest is ${r.symbol} (${r.changes} changes, weighted ${r.weighted})`)}let n=t.evidenceQuality;if(console.log(` Evidence quality: ${n.graphFindings} graph-fact finding(s), ${n.heuristicFindings} heuristic finding(s), ${n.userSuppressed} user-suppressed`),e.validation&&e.validation.flaggedFiles>0){let r=e.validation,i=r.ratio===null?"n/a":`${r.ratio}x`;console.log(` Validation: flagged files fix-density ${r.flaggedFixDensity} vs baseline ${r.baselineFixDensity} (${i})`),console.log(` fix-commit signal: subject-keyword heuristic over ${r.validationBasis.commitsScanned} commits`)}}async function qhe(e){let t=nn(i=>{let o=An(i,{base:e.base});return o.note?{kind:"complete",result:ei(i,{base:e.base})}:o.changedFiles.length===0?{kind:"complete",result:ei(i,{base:e.base})}:{kind:"batched",plan:o}});if(t.kind==="complete")return t.result;let n=xR(t.plan.changedFiles,sY),r=await Bm(n,LY(n.length),i=>MY(i,e));return Ka(t.plan.changedFiles,r)}var LY=OR({envKey:"SCIP_QUERY_DIFF_IMPACT_CONCURRENCY",defaultMinimum:aY,defaultMaximum:cY});function OR(e){return(t,n=process.env,r=iY)=>NY(t,n,r,e)}function NY(e,t,n,r){let i=t[r.envKey],o=AY(n,r),s=i?parseInt(i,10):o;return!Number.isFinite(s)||s<1?Math.min(o,e):Math.min(s,e)}function AY(e,t){let n=e(),r=Number.isFinite(n)?Math.max(t.defaultMinimum,n-1):0;return Math.min(t.defaultMaximum,Math.max(t.defaultMinimum,r))}function MY(e,t){let n=process.argv[1]??Wm(import.meta.url),r=[];return t.base&&r.push("--base",t.base),bc({cliPath:n,command:oY,args:r,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function Khe(e){console.log(`Changed files: ${e.summary.totalChangedFiles}`),console.log(`Changed symbols: ${e.summary.totalChangedSymbols}`),console.log(`Affected consumer files: ${e.summary.totalAffectedFiles}`),e.summary.note&&console.log(`Note: ${e.summary.note}`);let t=e.attributionNotes.filter(n=>n.method==="unattributed");if(t.length>0){let n=[...new Set(t.map(r=>r.file))];for(let r of n){let i=t.filter(o=>o.file===r).length;console.log(`note: ${i} changed line-range(s) in ${r} belong to no indexed symbol`)}}console.log(""),e.changedSymbols.length>0&&(console.log("Changed symbols:"),Lt.list(e.changedSymbols,n=>` ${n.file} ${n.shortName} (fan-in: ${n.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
|
|
926
|
+
Affected consumer files:`),Lt.list(e.affectedConsumers,n=>` ${n.file} (${n.consumedSymbols} symbol(s))`))}var jR=Symbol("option-value-source"),BR=new Map,$R=new Map;function eye(e){BR=new Map(e)}function tye(e){$R=new Map(e)}function Bo(e){return(...t)=>{let{args:n,opts:r}=VY(t);nn(i=>e({db:i,args:n,opts:r}))}}function xc(e,t){return Bo(n=>{let r=AR(n.db,e,jo(n.opts,"full"),{quiet:jo(n.opts,"json")});t({...n,budget:r})})}function nye(e){return Bo(t=>ai(t,e,{kind:"list"}))}function rye(e){return Bo(t=>ai(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function iye(e){return Bo(t=>ai(t,e,{kind:"grouped",key:e.key}))}function OY(e){return Bo(t=>Gm(t,e))}function oye(e){return OY({commandName:e.commandName,query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>Lt.sectionedReport(e.sections(t,n)),toJson:e.toJson,coverage:e.coverage,agentResult:e.agentResult,after:e.after})}function jY(e,t){return xc(e,n=>Gm(n,{...t,commandName:t.commandName??e}))}function sye(e,t){return jY(e,{commandName:t.commandName??e,query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,r)=>Lt.sectionedReport(t.sections(n,r)),toJson:t.toJson,coverage:t.coverage,agentResult:t.agentResult,after:t.after})}function aye(e,t){return xc(e,n=>ai(n,{...t,commandName:e},{kind:"list"}))}function cye(e,t){return xc(e,n=>ai(n,{...t,commandName:e},{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function lye(e,t){return xc(e,n=>ai(n,{...t,commandName:e},{kind:"grouped",key:t.key}))}function uye(e,t){return String(e[t])}function dye(e,t){let n=e[t];return typeof n=="string"?n:void 0}function mye(e,t){let n=e[t];return typeof n=="string"?n:void 0}function HR(e,t){let n=e[t];return typeof n=="number"?n:void 0}function jo(e,t){return!!e[t]}function fye(e,t){let n=e[t];return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:[]}function pye(e,t,n){return HR(e,t)??n}function gye(e,t,n){let r=HR(e,t),i=r!==void 0&&BY(e,t)!=="default";if(jo(e,"full")){if(i)throw new Error("--full cannot be combined with --limit. Use --full for all findings, or --limit N for a capped report.");return Number.MAX_SAFE_INTEGER}return r??n}function BY(e,t){return e[jR]?.(t)}function ai(e,t,n){Gm(e,{commandName:t.commandName,query:t.query,emptyMessage:(r,i)=>r.length===0&&t.emptyMessage?t.emptyMessage(i):void 0,heuristicLabel:t.heuristicLabel,render:(r,i)=>{n.kind==="list"?Lt.list(r,o=>t.format(o,i)):n.kind==="table"?Lt.table(n.headers,r.map(o=>t.format(o,i)),n.dashWidths):Lt.groupedByFile(r,o=>t.format(o,i),n.key?o=>n.key(o,i):void 0)},toJson:t.toJson,coverage:t.coverage,agentResult:t.agentResult,before:t.before,after:t.after})}function Gm(e,t){let n=t.query(e);if(jo(e.opts,"json")){HY(t.commandName,e.args,e.opts,t.toJson?t.toJson(n,e):n,{analysisBudget:$Y(e),coverage:t.coverage?.(n,e),agentResult:t.agentResult?.(n,e)});return}let r=t.emptyMessage?.(n,e);if(r){Lt.empty(r);return}t.heuristicLabel&&NR(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function $Y(e){return e.budget?.analysisBudget}function HY(e,t,n,r,i={}){let o=e?BR.get(e):void 0,s=e?$R.get(e):void 0,a=i.coverage??WY(s,r,i.analysisBudget);a&&UY(a),console.log(JSON.stringify({command:e,...o?{evidence:o}:{},...i.analysisBudget?{analysisBudget:i.analysisBudget}:{},args:zY(t),options:n,result:r,...a?{coverage:a}:{},...i.agentResult!==void 0?{agentResult:i.agentResult}:{}},null,jo(n,"compact")?0:2))}function UY(e){if(!Number.isSafeInteger(e.returned)||e.returned<0)throw new Error("Invocation coverage returned count must be a non-negative safe integer.");if(e.complete===!0&&!e.totalKnown)throw new Error("Complete invocation coverage must know its total.");if(e.totalKnown){if(!Number.isSafeInteger(e.total)||(e.total??-1)<e.returned)throw new Error("Known invocation coverage total must be a safe integer at least as large as returned.");let t=e.total-e.returned;if(e.omitted!==t)throw new Error("Known invocation coverage omitted count must equal total minus returned.")}else if(e.total!==void 0||e.omitted!==void 0)throw new Error("Unknown invocation coverage cannot claim a total or omitted count.");if(e.omittedIdentities&&e.omittedIdentities.length!==e.omitted)throw new Error("Omitted identity count must equal the disclosed omitted count.")}function WY(e,t,n){if(!e)return;let r=GY(t);return e.coverage==="complete"?{complete:!0,totalKnown:!0,returned:r,total:r,omitted:0}:e.coverage==="sampled"?{complete:!1,totalKnown:!1,returned:r}:e.coverage==="bounded"&&n?{complete:!1,totalKnown:!1,returned:r}:{complete:null,totalKnown:!1,returned:r}}function GY(e){if(Array.isArray(e))return e.length;if(!e||typeof e!="object")return e==null?0:1;let t=e;if(Array.isArray(t.rows))return t.rows.length;let n=Object.values(t).filter(Array.isArray);return n.length>0?n.reduce((r,i)=>r+i.length,0):1}function zY(e){return e.filter(t=>typeof t=="string"||typeof t=="number"||typeof t=="boolean")}function VY(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:qY(t)}}function qY(e){if(!e||typeof e!="object")return{};let t=e;if(typeof t.opts=="function"){let n=t.opts();return!n||typeof n!="object"?{}:(typeof t.getOptionValueSource=="function"&&Object.defineProperty(n,jR,{value:r=>t.getOptionValueSource(r),enumerable:!1}),n)}return e}export{Te as a,n5 as b,N as c,FX as d,wr as e,Et as f,Me as g,U as h,gf as i,hf as j,yf as k,cI as l,E as m,l5 as n,pn as o,$ as p,st as q,v5 as r,R5 as s,K as t,UE as u,YX as v,cp as w,c8 as x,ie as y,I as z,T as A,Y as B,xe as C,B as D,wi as E,G8 as F,ao as G,Nt as H,NS as I,rre as J,zZ as K,Fl as L,VZ as M,Tg as N,mF as O,Nl as P,e3 as Q,gF as R,t3 as S,_g as T,Ms as U,dt as V,Fe as W,jl as X,zg as Y,F3 as Z,WF as _,Bl as $,Ti as aa,l6 as ba,_6 as ca,Ph as da,q_ as ea,Th as fa,nu as ga,Ze as ha,g5 as ia,yr as ja,vI as ka,vf as la,h5 as ma,Uo as na,It as oa,Or as pa,jr as qa,Tt as ra,$h as sa,dL as ta,Ys as ua,ey as va,ea as wa,na as xa,w7 as ya,cr as za,_O as Aa,OO as Ba,nee as Ca,pd as Da,gd as Ea,hd as Fa,yd as Ga,bd as Ha,lr as Ia,Mj as Ja,Bj as Ka,$j as La,Hj as Ma,mee as Na,eB as Oa,rB as Pa,iB as Qa,oB as Ra,aB as Sa,cB as Ta,lB as Ua,lC as Va,ur as Wa,TB as Xa,fo as Ya,LB as Za,NB as _a,HB as $a,zB as ab,Id as bb,ja as cb,Pd as db,po as eb,A$ as fb,go as gb,ho as hb,Fd as ib,yo as jb,bo as kb,_d as lb,D1 as mb,So as nb,LH as ob,$d as pb,Hd as qb,mU as rb,xo as sb,An as tb,Tx as ub,pG as vb,Eo as wb,NG as xb,Po as yb,To as zb,_o as Ab,Lo as Bb,_V as Cb,ym as Db,Sm as Eb,xm as Fb,Dde as Gb,XV as Hb,QV as Ib,ZV as Jb,eq as Kb,Aq as Lb,Mq as Mb,Gq as Nb,iK as Ob,dK as Pb,kK as Qb,Em as Rb,km as Sb,mc as Tb,s2 as Ub,Pm as Vb,$t as Wb,qfe as Xb,Kfe as Yb,Qfe as Zb,Zfe as _b,fc as $b,epe as ac,gc as bc,_m as cc,F2 as dc,dJ as ec,See as fc,mJ as gc,vJ as hc,PJ as ic,Ly as jc,aa as kc,Eu as lc,Ny as mc,ca as nc,Oy as oc,qy as pc,Ky as qc,Mee as rc,Oee as sc,jee as tc,Bee as uc,$ee as vc,Vi as wc,ob as xc,Yee as yc,Ki as zc,cb as Ac,er as Bc,_u as Cc,Lu as Dc,hte as Ec,yte as Fc,bte as Gc,Ste as Hc,Ete as Ic,Dte as Jc,kte as Kc,Pte as Lc,Bte as Mc,zte as Nc,Vte as Oc,va as Pc,nS as Qc,rS as Rc,sr as Sc,iS as Tc,Xu as Uc,pne as Vc,Qu as Wc,rd as Xc,dS as Yc,wne as Zc,mS as _c,Ene as $c,Dne as ad,kne as bd,nn as cd,Pne as dd,fS as ed,Tne as fd,pS as gd,c0 as hd,_ne as id,Lne as jd,Lt as kd,FR as ld,oY as md,NR as nd,AR as od,Ghe as pd,zhe as qd,Vhe as rd,qhe as sd,Khe as td,eye as ud,tye as vd,Bo as wd,xc as xd,nye as yd,rye as zd,iye as Ad,OY as Bd,oye as Cd,jY as Dd,sye as Ed,aye as Fd,cye as Gd,lye as Hd,uye as Id,dye as Jd,mye as Kd,HR as Ld,jo as Md,fye as Nd,pye as Od,gye as Pd,BY as Qd,HY as Rd,VY as Sd,qY as Td};
|
|
927
|
+
//# sourceMappingURL=chunk-7UY7SD7D.js.map
|