scip-query 0.19.3 → 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/augment-vue-worker.js +1 -1
- package/dist/{chunk-LSJDKJIB.js → chunk-25LPM4DG.js} +2 -2
- package/dist/chunk-2CTX5CMX.js +4 -0
- package/dist/chunk-2Y373BDD.js +2 -0
- package/dist/{chunk-24ET4VLC.js → chunk-2YU7I3QO.js} +2 -2
- package/dist/{chunk-QNO3QIMN.js → chunk-3MJ5YA4Y.js} +2 -2
- package/dist/{chunk-B26UX7ZD.js → chunk-3SVWW4PN.js} +2 -2
- package/dist/{chunk-WWCZCH7W.js → chunk-4333ETTV.js} +2 -2
- package/dist/{chunk-6EWBPAA3.js → chunk-4RSI5EMG.js} +2 -2
- package/dist/{chunk-CIYUFF24.js → chunk-4SALD7RU.js} +2 -2
- package/dist/{chunk-XWE7PZQH.js → chunk-4T3LTWUS.js} +2 -2
- package/dist/{chunk-34MLC6UI.js → chunk-4XTA5OMB.js} +2 -2
- package/dist/chunk-52ZYCAEO.js +2 -0
- package/dist/{chunk-SJ6XSCG7.js → chunk-54HA4ZXH.js} +2 -2
- package/dist/{chunk-J4MYRIYT.js → chunk-64RFXJT5.js} +2 -2
- package/dist/{chunk-FUFNRZFJ.js → chunk-6E7UTQY7.js} +2 -2
- package/dist/{chunk-PNESKY2Z.js → chunk-6NSFJYRC.js} +2 -2
- package/dist/{chunk-AOSFSYEA.js → chunk-7B3UPBVA.js} +2 -2
- package/dist/{chunk-4BUMNEYQ.js → chunk-7GXM52MI.js} +2 -2
- package/dist/chunk-7UY7SD7D.js +927 -0
- package/dist/{chunk-SOS256TP.js → chunk-A2EZV2UM.js} +2 -2
- package/dist/{chunk-6FIA5BEB.js → chunk-ABMYA4TN.js} +2 -2
- package/dist/{chunk-64QITTX7.js → chunk-B5NLK2B3.js} +2 -2
- package/dist/{chunk-OLG2YPLS.js → chunk-BTEE5NZQ.js} +2 -2
- package/dist/{chunk-MP43RX4O.js → chunk-C7NIYIQ4.js} +1 -1
- package/dist/{chunk-AEM24WSF.js → chunk-CFMXJPHH.js} +2 -2
- package/dist/{chunk-HHOJH3RJ.js → chunk-CNKAGUPL.js} +2 -2
- package/dist/{chunk-MQ2B33LQ.js → chunk-D4U5Q3FT.js} +2 -2
- package/dist/{chunk-YZXV3CU3.js → chunk-DGAGY7RJ.js} +1 -1
- package/dist/{chunk-FRXB74RQ.js → chunk-DLWR3NUU.js} +5 -5
- package/dist/{chunk-YGQBJUS6.js → chunk-DZ74OMG6.js} +2 -2
- package/dist/{chunk-APLNTJPJ.js → chunk-EOOJGLDU.js} +2 -2
- package/dist/{chunk-TYEGFDOP.js → chunk-F6O7AAC3.js} +2 -2
- package/dist/{chunk-HFBNIIZX.js → chunk-FECYOO5O.js} +2 -2
- package/dist/{chunk-AFVU2GB2.js → chunk-FWUUZTIO.js} +2 -2
- package/dist/{chunk-KMOMNTB4.js → chunk-GBQ5NYPR.js} +2 -2
- package/dist/{chunk-2ROSOG2I.js → chunk-GPBBJ5Y4.js} +2 -2
- package/dist/{chunk-IXAALOUP.js → chunk-H7UKLTWJ.js} +2 -2
- package/dist/{chunk-YILKXTIY.js → chunk-HEXVUYFQ.js} +2 -2
- package/dist/{chunk-J5XJWCB3.js → chunk-HKEHS2AS.js} +2 -2
- package/dist/{chunk-JRCJEHRG.js → chunk-I5AWSI2G.js} +2 -2
- package/dist/{chunk-XYBNOILR.js → chunk-I5RJM53C.js} +2 -2
- package/dist/{chunk-AD7WUFFT.js → chunk-IG7N5ZIK.js} +2 -2
- package/dist/{chunk-C3KCSAQ4.js → chunk-IUFDSKGG.js} +2 -2
- package/dist/{chunk-OQ6TCHBB.js → chunk-IZKFSVBV.js} +2 -2
- package/dist/{chunk-5OZCNAVM.js → chunk-J77UIT3I.js} +2 -2
- package/dist/{chunk-EGKWRX5I.js → chunk-K2ERX4UT.js} +2 -2
- package/dist/{chunk-FYE4PWWP.js → chunk-KP6XRY5Z.js} +2 -2
- package/dist/{chunk-FC5K7T35.js → chunk-L7SPDE73.js} +1 -1
- package/dist/{chunk-YGBHQOB2.js → chunk-LBMJEAEW.js} +2 -2
- package/dist/chunk-LHMNRHGV.js +3 -0
- package/dist/{chunk-5TZ2MQBG.js → chunk-M7AIS73L.js} +2 -2
- package/dist/{chunk-53SUJOJA.js → chunk-M7MTH5NR.js} +2 -2
- package/dist/{chunk-HNTLCR4F.js → chunk-MITTUCEH.js} +2 -2
- package/dist/{chunk-5GCAM4JE.js → chunk-MSWVMDAH.js} +6 -6
- package/dist/chunk-NH5ALKPW.js +2 -0
- package/dist/{chunk-EHU4TZJJ.js → chunk-NPKYOIFM.js} +3 -3
- package/dist/{chunk-XWJ3JYRG.js → chunk-NRCXJDHL.js} +2 -2
- package/dist/{chunk-5GOBZI34.js → chunk-NSS46APD.js} +2 -2
- package/dist/{chunk-5FUAFNMP.js → chunk-NZL2DBT7.js} +2 -2
- package/dist/{chunk-C3VQZFP2.js → chunk-OMPZHGHO.js} +2 -2
- package/dist/{chunk-XYNWAZ6J.js → chunk-P2PC2WGR.js} +2 -2
- package/dist/{chunk-CAKPEQZB.js → chunk-Q3AFUTGB.js} +2 -2
- package/dist/{chunk-ZJGZCBYT.js → chunk-Q4IIEGXJ.js} +2 -2
- package/dist/chunk-QDV6RDCP.js +4 -0
- package/dist/{chunk-FTRNGQGR.js → chunk-QGXBRIM5.js} +2 -2
- package/dist/{chunk-WXVGNFAO.js → chunk-QOKYJ33H.js} +1 -1
- package/dist/{chunk-FB6IKAKZ.js → chunk-QRGV2F7L.js} +2 -2
- package/dist/chunk-QVWS2VWZ.js +7 -0
- package/dist/{chunk-77IOFJVY.js → chunk-R4FQGQ4X.js} +2 -2
- package/dist/{chunk-4CZJ4YJB.js → chunk-RV2FQIX3.js} +2 -2
- package/dist/{chunk-4FMT4HPC.js → chunk-S44IULR6.js} +2 -2
- package/dist/{chunk-PCIFZHWS.js → chunk-SOAT6NLA.js} +2 -2
- package/dist/{chunk-TDUU63FC.js → chunk-STOL2BTL.js} +2 -2
- package/dist/{chunk-TOIS2VAI.js → chunk-TW4OG5FC.js} +2 -2
- package/dist/{chunk-2WCXKANA.js → chunk-U6WNH5GC.js} +2 -2
- package/dist/chunk-U7DSEKOM.js +30 -0
- package/dist/{chunk-EII5ZHL2.js → chunk-UKZBVX4U.js} +2 -2
- package/dist/chunk-UOAV44HR.js +38 -0
- package/dist/{chunk-VIKEPD4D.js → chunk-VGRICIQI.js} +2 -2
- package/dist/{chunk-JFO2UVQP.js → chunk-VTKGCT3V.js} +5 -5
- package/dist/{chunk-PJENL245.js → chunk-VXQNNXJE.js} +2 -2
- package/dist/{chunk-HAC5EI2T.js → chunk-WER3B7MI.js} +2 -2
- package/dist/{chunk-5OR4QRPR.js → chunk-WQTAC523.js} +2 -2
- package/dist/{chunk-GAE7WCBK.js → chunk-X6D5IC6I.js} +2 -2
- package/dist/chunk-XAGAZSFE.js +6 -0
- package/dist/{chunk-FBUNGRKI.js → chunk-XLTP42QA.js} +2 -2
- package/dist/chunk-XTX6QHOF.js +4 -0
- package/dist/{chunk-AYRHVJXW.js → chunk-XYADIZHU.js} +5 -5
- package/dist/{chunk-WAU7HVDI.js → chunk-YGAGTIDK.js} +2 -2
- package/dist/{chunk-IICQP2DY.js → chunk-YIJ7ZAA4.js} +3 -3
- package/dist/{chunk-EYF5HOUZ.js → chunk-YNRNA5LK.js} +2 -2
- package/dist/{chunk-QKW7ISEW.js → chunk-YVVCVR2L.js} +2 -2
- package/dist/{chunk-Z7M7X3ZG.js → chunk-ZGZUZ7XE.js} +2 -2
- package/dist/{chunk-PTYQQHZM.js → chunk-ZXJYMGD3.js} +2 -2
- package/dist/cli.js +3 -3
- package/dist/command-descriptors-N2TL4XM2.js +613 -0
- package/dist/{config-types-BA3xLCfG.d.ts → config-types-D20KuvvZ.d.ts} +67 -0
- package/dist/{db-CzA-9_rL.d.ts → db-G_II8yXU.d.ts} +1 -1
- package/dist/diff-gate-types-C9BoYwYD.d.ts +10 -0
- package/dist/direct-navigation-DUCZCTOE.js +3 -0
- package/dist/{health-DYy13GAe.d.ts → health-oblXYgkF.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/queries/affected.d.ts +2 -2
- package/dist/queries/affected.js +1 -1
- package/dist/queries/architecture.d.ts +86 -4
- package/dist/queries/architecture.js +1 -1
- package/dist/queries/bottlenecks.d.ts +2 -2
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.d.ts +2 -2
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.d.ts +2 -2
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.d.ts +2 -2
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.d.ts +2 -2
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +2 -2
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.d.ts +2 -2
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.d.ts +2 -2
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.d.ts +2 -2
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/convergence.d.ts +2 -2
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.d.ts +2 -2
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.d.ts +2 -2
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dataflow.d.ts +2 -2
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.d.ts +2 -2
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.d.ts +2 -2
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/deep-chains.d.ts +2 -2
- package/dist/queries/deep-chains.js +1 -1
- package/dist/queries/deps.d.ts +2 -2
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-gate.d.ts +3 -3
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.d.ts +4 -8
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.d.ts +3 -3
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.d.ts +2 -2
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.d.ts +2 -2
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/extract-candidates.d.ts +2 -2
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.d.ts +2 -2
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.d.ts +2 -2
- package/dist/queries/health.d.ts +3 -3
- package/dist/queries/health.js +1 -1
- package/dist/queries/hierarchy.d.ts +2 -2
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.d.ts +2 -2
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +2 -2
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +3 -2
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +21 -5
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.d.ts +2 -2
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.d.ts +2 -2
- package/dist/queries/locality-candidates.js +1 -1
- package/dist/queries/members.d.ts +2 -2
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.d.ts +2 -2
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.d.ts +2 -2
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.d.ts +2 -2
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.d.ts +2 -2
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.d.ts +2 -2
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.d.ts +2 -2
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +2 -2
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.d.ts +2 -2
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.d.ts +2 -2
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.d.ts +2 -2
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/refs.d.ts +2 -2
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.d.ts +2 -2
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-chains.d.ts +2 -2
- package/dist/queries/similar-chains.js +1 -1
- package/dist/queries/similar-files.d.ts +2 -2
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.d.ts +2 -2
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.d.ts +2 -2
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.d.ts +2 -2
- package/dist/queries/slice.js +1 -1
- package/dist/queries/stale-abstractions.d.ts +2 -2
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/stats.d.ts +2 -2
- package/dist/queries/surface.d.ts +2 -2
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.d.ts +2 -2
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system.d.ts +2 -2
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.d.ts +2 -2
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/trace.d.ts +2 -2
- package/dist/queries/trace.js +1 -1
- package/dist/queries/twin-ab.d.ts +2 -2
- package/dist/queries/twin-ab.js +1 -1
- package/dist/queries/twin-drift.d.ts +2 -2
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.d.ts +2 -2
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.d.ts +2 -2
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/vue-component-duplicates.d.ts +2 -2
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.d.ts +2 -2
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.d.ts +2 -2
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/queries/wrapper-candidates.d.ts +2 -2
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/reindex-worker.js +7 -7
- package/dist/reindex.d.ts +3 -3
- package/dist/reindex.js +1 -1
- package/dist/runtime.d.ts +3 -3
- package/dist/runtime.js +2 -2
- package/dist/rust-semantic-session-worker.js +1 -1
- package/dist/rust-semantic-worker.js +1 -1
- package/dist/{scip-cli-1bVKJgXi.d.ts → scip-cli-kRpaexVJ.d.ts} +1 -1
- package/dist/watch-server.js +4 -4
- package/docs/AI_FAILURE_MODES.md +1 -1
- package/docs/COMMAND_REFERENCE.md +6 -6
- package/docs/DETECTOR_GUIDE.md +1 -1
- package/docs/analyzer-inventory.md +1 -1
- package/docs/analyzer-validation-ledger.md +131 -1
- package/docs/architecture-coherence-vision.md +29 -0
- package/package.json +2 -2
- 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-26JI77AY.js +0 -927
- package/dist/chunk-2E7QY4B5.js +0 -7
- package/dist/chunk-33RLKB6L.js +0 -4
- package/dist/chunk-DO775SYA.js +0 -2
- package/dist/chunk-HCSTQGQE.js +0 -4
- package/dist/chunk-MRYPDVOS.js +0 -5
- package/dist/chunk-NLNZK7RL.js +0 -5
- package/dist/chunk-OAM22BCR.js +0 -2
- package/dist/chunk-PLDIXTKR.js +0 -38
- package/dist/chunk-UJKZQLDB.js +0 -2
- package/dist/chunk-WFWQWQK6.js +0 -3
- package/dist/chunk-XAMVIPE2.js +0 -29
- package/dist/command-descriptors-QJEYYND2.js +0 -607
- package/dist/diff-gate-types-CG2YQ_ei.d.ts +0 -4
- package/dist/direct-navigation-TT23TDBS.js +0 -3
|
@@ -0,0 +1,927 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
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
|
+
CREATE TABLE IF NOT EXISTS file_evidence (
|
|
4
|
+
kind TEXT NOT NULL,
|
|
5
|
+
relative_path TEXT NOT NULL,
|
|
6
|
+
content_hash TEXT NOT NULL,
|
|
7
|
+
version TEXT NOT NULL,
|
|
8
|
+
payload TEXT NOT NULL,
|
|
9
|
+
PRIMARY KEY (kind, relative_path)
|
|
10
|
+
);
|
|
11
|
+
CREATE TABLE IF NOT EXISTS project_evidence (
|
|
12
|
+
kind TEXT NOT NULL,
|
|
13
|
+
cache_key TEXT NOT NULL,
|
|
14
|
+
project_fingerprint TEXT NOT NULL,
|
|
15
|
+
version TEXT NOT NULL,
|
|
16
|
+
payload TEXT NOT NULL,
|
|
17
|
+
PRIMARY KEY (kind, cache_key)
|
|
18
|
+
);
|
|
19
|
+
CREATE TABLE IF NOT EXISTS semantic_callees (
|
|
20
|
+
relative_path TEXT NOT NULL,
|
|
21
|
+
symbol TEXT NOT NULL,
|
|
22
|
+
content_hash TEXT NOT NULL,
|
|
23
|
+
deps_digest TEXT NOT NULL,
|
|
24
|
+
version TEXT NOT NULL,
|
|
25
|
+
payload TEXT NOT NULL,
|
|
26
|
+
PRIMARY KEY (relative_path, symbol)
|
|
27
|
+
);
|
|
28
|
+
CREATE TABLE IF NOT EXISTS semantic_references (
|
|
29
|
+
relative_path TEXT NOT NULL,
|
|
30
|
+
symbol TEXT NOT NULL,
|
|
31
|
+
project_fingerprint TEXT NOT NULL,
|
|
32
|
+
version TEXT NOT NULL,
|
|
33
|
+
payload TEXT NOT NULL,
|
|
34
|
+
PRIMARY KEY (relative_path, symbol)
|
|
35
|
+
);
|
|
36
|
+
CREATE TABLE IF NOT EXISTS finding_outcome_ledger (
|
|
37
|
+
check_name TEXT NOT NULL,
|
|
38
|
+
finding_id TEXT NOT NULL,
|
|
39
|
+
first_seen INTEGER NOT NULL,
|
|
40
|
+
last_seen INTEGER NOT NULL,
|
|
41
|
+
times_shown INTEGER NOT NULL,
|
|
42
|
+
outcome TEXT NOT NULL,
|
|
43
|
+
PRIMARY KEY (check_name, finding_id)
|
|
44
|
+
);
|
|
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
|
+
WHERE kind = ? AND relative_path = ? AND content_hash = ? AND ${pr}
|
|
47
|
+
ORDER BY version DESC
|
|
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
|
|
49
|
+
WHERE kind = ? AND cache_key = ? AND project_fingerprint = ? AND ${pr}
|
|
50
|
+
ORDER BY version DESC
|
|
51
|
+
LIMIT 1`),writeProjectEvidence:n.prepare("INSERT OR REPLACE INTO project_evidence (kind, cache_key, project_fingerprint, version, payload) VALUES (?, ?, ?, ?, ?)"),readCallees:n.prepare(`SELECT payload FROM semantic_callees
|
|
52
|
+
WHERE relative_path = ? AND symbol = ? AND content_hash = ? AND deps_digest = ? AND version = ?`),readLegacyCallees:n.prepare(`SELECT payload FROM semantic_callees
|
|
53
|
+
WHERE relative_path = ? AND symbol = ? AND content_hash = ? AND deps_digest = ? AND ${pr}
|
|
54
|
+
ORDER BY version DESC
|
|
55
|
+
LIMIT 1`),readCalleesForFile:n.prepare(`SELECT symbol, payload FROM semantic_callees
|
|
56
|
+
WHERE relative_path = ? AND content_hash = ? AND deps_digest = ? AND version = ?`),readLegacyCalleesForFile:n.prepare(`SELECT symbol, payload FROM semantic_callees
|
|
57
|
+
WHERE relative_path = ? AND content_hash = ? AND deps_digest = ? AND ${pr}
|
|
58
|
+
ORDER BY symbol, version DESC`),writeCallees:n.prepare(`INSERT OR REPLACE INTO semantic_callees
|
|
59
|
+
(relative_path, symbol, content_hash, deps_digest, version, payload) VALUES (?, ?, ?, ?, ?, ?)`),dropStaleCallees:n.prepare("DELETE FROM semantic_callees WHERE relative_path = ? AND content_hash != ?"),readReferences:n.prepare(`SELECT payload FROM semantic_references
|
|
60
|
+
WHERE relative_path = ? AND symbol = ? AND project_fingerprint = ? AND version = ?`),readLegacyReferences:n.prepare(`SELECT payload FROM semantic_references
|
|
61
|
+
WHERE relative_path = ? AND symbol = ? AND project_fingerprint = ? AND ${pr}
|
|
62
|
+
ORDER BY version DESC
|
|
63
|
+
LIMIT 1`),readReferencesForFile:n.prepare(`SELECT symbol, payload FROM semantic_references
|
|
64
|
+
WHERE relative_path = ? AND project_fingerprint = ? AND version = ?`),readLegacyReferencesForFile:n.prepare(`SELECT symbol, payload FROM semantic_references
|
|
65
|
+
WHERE relative_path = ? AND project_fingerprint = ? AND ${pr}
|
|
66
|
+
ORDER BY symbol, version DESC`),writeReferences:n.prepare(`INSERT OR REPLACE INTO semantic_references
|
|
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 $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
|
+
CREATE TABLE IF NOT EXISTS file_evidence (
|
|
70
|
+
kind TEXT NOT NULL,
|
|
71
|
+
relative_path TEXT NOT NULL,
|
|
72
|
+
content_hash TEXT NOT NULL,
|
|
73
|
+
version TEXT NOT NULL,
|
|
74
|
+
payload TEXT NOT NULL,
|
|
75
|
+
last_accessed_at INTEGER NOT NULL,
|
|
76
|
+
PRIMARY KEY (kind, relative_path, content_hash, version)
|
|
77
|
+
);
|
|
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
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
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 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
|
+
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(!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
|
+
`.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 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
|
+
`;)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 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
|
+
FROM documents
|
|
97
|
+
WHERE 1 = 1
|
|
98
|
+
${e.pathExclusionsFor("documents")}
|
|
99
|
+
${n}
|
|
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 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
|
+
`,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
|
+
`)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
|
+
`?`
|
|
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
|
+
`?`
|
|
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
|
+
`),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=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
|
+
FROM global_symbols gs
|
|
115
|
+
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
116
|
+
JOIN documents d ON der.document_id = d.id
|
|
117
|
+
WHERE ${t.where}
|
|
118
|
+
${e.pathExclusionsFor("d")}
|
|
119
|
+
${Kp(t.orderBy)}
|
|
120
|
+
${Jp(t.limit)}`,...t.params??[])}function Fr(e,t){return e.all(`SELECT
|
|
121
|
+
gs.id,
|
|
122
|
+
gs.symbol,
|
|
123
|
+
c.document_id,
|
|
124
|
+
MIN(c.start_line) AS start_line,
|
|
125
|
+
0 AS start_char,
|
|
126
|
+
MAX(c.end_line) AS end_line,
|
|
127
|
+
0 AS end_char,
|
|
128
|
+
d.relative_path,
|
|
129
|
+
gs.display_name,
|
|
130
|
+
gs.documentation
|
|
131
|
+
FROM global_symbols gs
|
|
132
|
+
JOIN mentions m ON m.symbol_id = gs.id
|
|
133
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
134
|
+
JOIN documents d ON c.document_id = d.id
|
|
135
|
+
WHERE m.role = 1
|
|
136
|
+
AND ${t.where}
|
|
137
|
+
${e.pathExclusionsFor("d")}
|
|
138
|
+
GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path, gs.display_name, gs.documentation
|
|
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 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
|
+
gs.id,
|
|
142
|
+
gs.symbol,
|
|
143
|
+
der.document_id,
|
|
144
|
+
der.start_line,
|
|
145
|
+
der.start_char,
|
|
146
|
+
der.end_line,
|
|
147
|
+
der.end_char,
|
|
148
|
+
d.relative_path,
|
|
149
|
+
gs.display_name,
|
|
150
|
+
gs.kind,
|
|
151
|
+
gs.documentation,
|
|
152
|
+
gs.enclosing_symbol
|
|
153
|
+
FROM global_symbols gs
|
|
154
|
+
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
155
|
+
JOIN documents d ON der.document_id = d.id
|
|
156
|
+
WHERE d.relative_path = ?
|
|
157
|
+
${e.symbolNoiseFor("gs")}
|
|
158
|
+
ORDER BY der.start_line, der.end_line`,t)}function MP(e,t){return e.all(`SELECT
|
|
159
|
+
gs.id,
|
|
160
|
+
gs.symbol,
|
|
161
|
+
c.document_id,
|
|
162
|
+
MIN(c.start_line) AS start_line,
|
|
163
|
+
0 AS start_char,
|
|
164
|
+
MAX(c.end_line) AS end_line,
|
|
165
|
+
0 AS end_char,
|
|
166
|
+
d.relative_path,
|
|
167
|
+
gs.display_name,
|
|
168
|
+
gs.kind,
|
|
169
|
+
gs.documentation,
|
|
170
|
+
gs.enclosing_symbol
|
|
171
|
+
FROM global_symbols gs
|
|
172
|
+
JOIN mentions m ON m.symbol_id = gs.id
|
|
173
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
174
|
+
JOIN documents d ON c.document_id = d.id
|
|
175
|
+
WHERE d.relative_path = ?
|
|
176
|
+
AND m.role = 1
|
|
177
|
+
${e.symbolNoiseFor("gs")}
|
|
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=>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
|
+
gs.id,
|
|
181
|
+
gs.symbol,
|
|
182
|
+
der.document_id,
|
|
183
|
+
der.start_line,
|
|
184
|
+
der.start_char,
|
|
185
|
+
der.end_line,
|
|
186
|
+
der.end_char,
|
|
187
|
+
d.relative_path,
|
|
188
|
+
gs.display_name,
|
|
189
|
+
gs.kind,
|
|
190
|
+
gs.documentation,
|
|
191
|
+
gs.enclosing_symbol
|
|
192
|
+
FROM global_symbols gs
|
|
193
|
+
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
194
|
+
JOIN documents d ON der.document_id = d.id
|
|
195
|
+
WHERE 1 = 1
|
|
196
|
+
${e.pathExclusionsFor("d")}
|
|
197
|
+
${r}
|
|
198
|
+
${i}
|
|
199
|
+
${e.symbolNoiseFor("gs")}
|
|
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
|
+
gs.id,
|
|
202
|
+
gs.symbol,
|
|
203
|
+
c.document_id,
|
|
204
|
+
MIN(c.start_line) AS start_line,
|
|
205
|
+
0 AS start_char,
|
|
206
|
+
MAX(c.end_line) AS end_line,
|
|
207
|
+
0 AS end_char,
|
|
208
|
+
d.relative_path,
|
|
209
|
+
gs.display_name,
|
|
210
|
+
gs.kind,
|
|
211
|
+
gs.documentation,
|
|
212
|
+
gs.enclosing_symbol
|
|
213
|
+
FROM global_symbols gs
|
|
214
|
+
JOIN mentions m ON m.symbol_id = gs.id
|
|
215
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
216
|
+
JOIN documents d ON c.document_id = d.id
|
|
217
|
+
WHERE m.role = 1
|
|
218
|
+
${e.pathExclusionsFor("d")}
|
|
219
|
+
${r}
|
|
220
|
+
${i}
|
|
221
|
+
${e.symbolNoiseFor("gs")}
|
|
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 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
|
+
m.symbol_id,
|
|
226
|
+
d.relative_path,
|
|
227
|
+
COUNT(*) AS ref_count
|
|
228
|
+
FROM mentions m
|
|
229
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
230
|
+
JOIN documents d ON c.document_id = d.id
|
|
231
|
+
WHERE m.role != 1
|
|
232
|
+
${r}
|
|
233
|
+
${e.pathExclusionsFor("d")}
|
|
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
|
+
FROM mentions m
|
|
236
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
237
|
+
JOIN documents d ON c.document_id = d.id
|
|
238
|
+
WHERE m.role != 1
|
|
239
|
+
${r}
|
|
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
|
+
FROM mentions m
|
|
242
|
+
WHERE m.role != 1
|
|
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
|
+
c.start_line AS chunk_start, c.end_line AS chunk_end
|
|
245
|
+
FROM mentions m
|
|
246
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
247
|
+
JOIN documents d ON c.document_id = d.id
|
|
248
|
+
WHERE m.role != 1
|
|
249
|
+
${r}
|
|
250
|
+
${e.pathExclusionsFor("d")}
|
|
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
|
+
COALESCE(der_doc.relative_path, mention_doc.relative_path) AS relative_path
|
|
253
|
+
FROM global_symbols gs
|
|
254
|
+
LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
255
|
+
LEFT JOIN documents der_doc ON der_doc.id = der.document_id
|
|
256
|
+
LEFT JOIN (
|
|
257
|
+
SELECT m.symbol_id, MIN(d.relative_path) AS relative_path
|
|
258
|
+
FROM mentions m
|
|
259
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
260
|
+
JOIN documents d ON c.document_id = d.id
|
|
261
|
+
WHERE m.role = 1
|
|
262
|
+
GROUP BY m.symbol_id
|
|
263
|
+
) mention_doc ON mention_doc.symbol_id = gs.id
|
|
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_$]*$/,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
|
+
d1.relative_path AS from_file,
|
|
267
|
+
d2.relative_path AS to_file
|
|
268
|
+
FROM mentions m
|
|
269
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
270
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
271
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
272
|
+
JOIN (
|
|
273
|
+
SELECT m2.symbol_id, c2.document_id
|
|
274
|
+
FROM mentions m2
|
|
275
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
276
|
+
WHERE m2.role = 1
|
|
277
|
+
GROUP BY m2.symbol_id
|
|
278
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
279
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
280
|
+
WHERE d1.id != d2.id
|
|
281
|
+
${o}
|
|
282
|
+
${e.pathExclusionsFor("d1","d2")}
|
|
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
|
+
`),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 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
|
+
`),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(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
|
+
EXISTS (
|
|
293
|
+
SELECT 1
|
|
294
|
+
FROM defn_enclosing_ranges local_der
|
|
295
|
+
JOIN documents local_d ON local_der.document_id = local_d.id
|
|
296
|
+
WHERE local_der.symbol_id = gs.id
|
|
297
|
+
${this.pathExclusionsFor("local_d").trimStart()}
|
|
298
|
+
)
|
|
299
|
+
OR EXISTS (
|
|
300
|
+
SELECT 1
|
|
301
|
+
FROM mentions local_m
|
|
302
|
+
JOIN chunks local_c ON local_m.chunk_id = local_c.id
|
|
303
|
+
JOIN documents local_d ON local_c.document_id = local_d.id
|
|
304
|
+
WHERE local_m.symbol_id = gs.id
|
|
305
|
+
AND local_m.role = 1
|
|
306
|
+
${this.pathExclusionsFor("local_d").trimStart()}
|
|
307
|
+
)
|
|
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
|
+
# Dependencies
|
|
312
|
+
node_modules/
|
|
313
|
+
vendor/
|
|
314
|
+
.bundle/
|
|
315
|
+
|
|
316
|
+
# Build output
|
|
317
|
+
dist/
|
|
318
|
+
build/
|
|
319
|
+
out/
|
|
320
|
+
target/
|
|
321
|
+
bin/
|
|
322
|
+
obj/
|
|
323
|
+
|
|
324
|
+
# Python
|
|
325
|
+
__pycache__/
|
|
326
|
+
*.pyc
|
|
327
|
+
*.pyo
|
|
328
|
+
.venv/
|
|
329
|
+
venv/
|
|
330
|
+
.env/
|
|
331
|
+
env/
|
|
332
|
+
*.egg-info/
|
|
333
|
+
|
|
334
|
+
# Rust
|
|
335
|
+
target/
|
|
336
|
+
|
|
337
|
+
# Java / Kotlin / Scala
|
|
338
|
+
*.class
|
|
339
|
+
.gradle/
|
|
340
|
+
.mvn/
|
|
341
|
+
|
|
342
|
+
# C# / .NET
|
|
343
|
+
bin/
|
|
344
|
+
obj/
|
|
345
|
+
packages/
|
|
346
|
+
|
|
347
|
+
# Go
|
|
348
|
+
vendor/
|
|
349
|
+
|
|
350
|
+
# Dart
|
|
351
|
+
.dart_tool/
|
|
352
|
+
build/
|
|
353
|
+
|
|
354
|
+
# PHP
|
|
355
|
+
vendor/
|
|
356
|
+
|
|
357
|
+
# IDE / OS
|
|
358
|
+
.idea/
|
|
359
|
+
.vscode/
|
|
360
|
+
*.swp
|
|
361
|
+
*.swo
|
|
362
|
+
.DS_Store
|
|
363
|
+
Thumbs.db
|
|
364
|
+
|
|
365
|
+
# Type definitions (often noise in queries)
|
|
366
|
+
*.d.ts
|
|
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
|
+
FROM defn_enclosing_ranges der
|
|
379
|
+
JOIN documents d ON d.id = der.document_id
|
|
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"||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
|
+
d.id AS documentId,
|
|
383
|
+
gs.id AS symbolId,
|
|
384
|
+
gs.symbol,
|
|
385
|
+
d.relative_path AS relativePath,
|
|
386
|
+
COALESCE(der.start_line, c.start_line) AS startLine,
|
|
387
|
+
COALESCE(der.end_line, c.end_line) AS endLine,
|
|
388
|
+
COALESCE(gs.display_name, '') AS leaf,
|
|
389
|
+
NULL AS parentTypeName,
|
|
390
|
+
CASE WHEN gs.kind IN (${n}) OR gs.symbol LIKE '%().' THEN 1 ELSE 0 END AS isFunctionLike,
|
|
391
|
+
CASE WHEN gs.kind IN (${r}) THEN 1 ELSE 0 END AS isTypeLike,
|
|
392
|
+
gs.kind AS kind,
|
|
393
|
+
gs.documentation AS documentation,
|
|
394
|
+
gs.enclosing_symbol AS enclosingSymbol
|
|
395
|
+
FROM global_symbols gs
|
|
396
|
+
LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
397
|
+
LEFT JOIN chunks c ON c.document_id = der.document_id
|
|
398
|
+
JOIN documents d ON d.id = COALESCE(der.document_id, c.document_id)
|
|
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(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
|
+
FROM mentions m
|
|
402
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
403
|
+
WHERE m.role != 1
|
|
404
|
+
AND c.document_id IN (${f.map(()=>"?").join(",")})`,...f)),i=new Map;for(let f of r)i.has(f.document_id)||i.set(f.document_id,[]),i.get(f.document_id).push(f);let s=ud(r.map(f=>f.symbol_id)).flatMap(f=>e.all(`SELECT gs.id AS symbol_id, gs.symbol,
|
|
405
|
+
COALESCE(der.document_id, def_chunk.document_id) AS document_id
|
|
406
|
+
FROM global_symbols gs
|
|
407
|
+
LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
408
|
+
LEFT JOIN (
|
|
409
|
+
SELECT m.symbol_id, MIN(c.document_id) AS document_id
|
|
410
|
+
FROM mentions m
|
|
411
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
412
|
+
WHERE m.role = 1
|
|
413
|
+
AND m.symbol_id IN (${f.map(()=>"?").join(",")})
|
|
414
|
+
GROUP BY m.symbol_id
|
|
415
|
+
) def_chunk ON def_chunk.symbol_id = gs.id
|
|
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=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
|
+
`).slice(n,r+1).join(`
|
|
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
|
+
FROM mentions m
|
|
421
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
422
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
423
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
424
|
+
JOIN (
|
|
425
|
+
SELECT m2.symbol_id, c2.document_id
|
|
426
|
+
FROM mentions m2
|
|
427
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
428
|
+
WHERE m2.role = 1
|
|
429
|
+
GROUP BY m2.symbol_id
|
|
430
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
431
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
432
|
+
WHERE d1.relative_path = ?
|
|
433
|
+
AND d2.relative_path <> d1.relative_path
|
|
434
|
+
AND ${e.localSymbolPredicate}
|
|
435
|
+
ORDER BY d2.relative_path`,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function hd(e,t){let n=Oe(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
|
|
436
|
+
FROM mentions m
|
|
437
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
438
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
439
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
440
|
+
JOIN (
|
|
441
|
+
SELECT m2.symbol_id, c2.document_id
|
|
442
|
+
FROM mentions m2
|
|
443
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
444
|
+
WHERE m2.role = 1
|
|
445
|
+
GROUP BY m2.symbol_id
|
|
446
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
447
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
448
|
+
WHERE d2.relative_path = ?
|
|
449
|
+
AND d1.relative_path != ?
|
|
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
|
+
WHERE relative_path IN (${r})
|
|
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
|
+
FROM mentions m
|
|
454
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
455
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
456
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
457
|
+
JOIN (
|
|
458
|
+
SELECT m2.symbol_id, c2.document_id
|
|
459
|
+
FROM mentions m2
|
|
460
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
461
|
+
WHERE m2.role = 1
|
|
462
|
+
GROUP BY m2.symbol_id
|
|
463
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
464
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
465
|
+
WHERE d1.relative_path IN (${r})
|
|
466
|
+
AND d2.relative_path NOT IN (${r})
|
|
467
|
+
AND ${e.localSymbolPredicate}
|
|
468
|
+
ORDER BY d2.relative_path`,...n,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d)),u=e.all(`SELECT DISTINCT d1.relative_path
|
|
469
|
+
FROM mentions m
|
|
470
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
471
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
472
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
473
|
+
JOIN (
|
|
474
|
+
SELECT m2.symbol_id, c2.document_id
|
|
475
|
+
FROM mentions m2
|
|
476
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
477
|
+
WHERE m2.role = 1
|
|
478
|
+
GROUP BY m2.symbol_id
|
|
479
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
480
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
481
|
+
WHERE d2.relative_path IN (${r})
|
|
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?[]: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
|
+
FROM mentions m
|
|
485
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
486
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
487
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
488
|
+
WHERE d1.relative_path NOT IN (${n})
|
|
489
|
+
AND (
|
|
490
|
+
EXISTS (
|
|
491
|
+
SELECT 1
|
|
492
|
+
FROM defn_enclosing_ranges der
|
|
493
|
+
JOIN documents d2 ON der.document_id = d2.id
|
|
494
|
+
WHERE der.symbol_id = gs.id
|
|
495
|
+
AND d2.relative_path IN (${n})
|
|
496
|
+
)
|
|
497
|
+
OR EXISTS (
|
|
498
|
+
SELECT 1
|
|
499
|
+
FROM mentions def_m
|
|
500
|
+
JOIN chunks def_c ON def_m.chunk_id = def_c.id
|
|
501
|
+
JOIN documents d2 ON def_c.document_id = d2.id
|
|
502
|
+
WHERE def_m.symbol_id = gs.id
|
|
503
|
+
AND def_m.role = 1
|
|
504
|
+
AND d2.relative_path IN (${n})
|
|
505
|
+
)
|
|
506
|
+
)
|
|
507
|
+
AND m.role != 1
|
|
508
|
+
AND ${e.localSymbolPredicate}
|
|
509
|
+
${e.pathExclusionsFor("d1")}
|
|
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
|
+
gs.symbol,
|
|
513
|
+
COUNT(*) AS ref_count,
|
|
514
|
+
COUNT(DISTINCT ref_d.id) AS file_count,
|
|
515
|
+
def_d.relative_path AS defined_in
|
|
516
|
+
FROM mentions m
|
|
517
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
518
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
519
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
520
|
+
JOIN (
|
|
521
|
+
SELECT m2.symbol_id, c2.document_id
|
|
522
|
+
FROM mentions m2
|
|
523
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
524
|
+
WHERE m2.role = 1
|
|
525
|
+
GROUP BY m2.symbol_id
|
|
526
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
527
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
528
|
+
WHERE m.role != 1
|
|
529
|
+
AND def_d.id != ref_d.id
|
|
530
|
+
${e.pathExclusionsFor("def_d")}
|
|
531
|
+
${e.symbolNoiseFor("gs")}
|
|
532
|
+
${i}
|
|
533
|
+
GROUP BY gs.id
|
|
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: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
|
+
FROM mentions m
|
|
537
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
538
|
+
JOIN documents d ON c.document_id = d.id
|
|
539
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
540
|
+
WHERE gs.symbol LIKE ?
|
|
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 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
|
+
gs.symbol,
|
|
544
|
+
def_d.relative_path AS from_file,
|
|
545
|
+
imp_d.relative_path AS importer,
|
|
546
|
+
EXISTS (
|
|
547
|
+
SELECT 1
|
|
548
|
+
FROM mentions ref_m
|
|
549
|
+
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
550
|
+
WHERE ref_m.symbol_id = gs.id
|
|
551
|
+
AND ref_m.role != 1
|
|
552
|
+
AND ref_c.document_id = imp_d.id
|
|
553
|
+
) AS used
|
|
554
|
+
FROM mentions m
|
|
555
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
556
|
+
JOIN documents imp_d ON c.document_id = imp_d.id
|
|
557
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
558
|
+
LEFT JOIN (
|
|
559
|
+
SELECT m2.symbol_id, c2.document_id
|
|
560
|
+
FROM mentions m2
|
|
561
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
562
|
+
WHERE m2.role = 1
|
|
563
|
+
GROUP BY m2.symbol_id
|
|
564
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
565
|
+
LEFT JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
566
|
+
WHERE imp_d.relative_path = ?
|
|
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=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
|
+
FROM mentions m
|
|
570
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
571
|
+
JOIN (
|
|
572
|
+
SELECT m2.symbol_id, c2.document_id
|
|
573
|
+
FROM mentions m2
|
|
574
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
575
|
+
WHERE m2.role = 1
|
|
576
|
+
GROUP BY m2.symbol_id
|
|
577
|
+
) sym_def ON sym_def.symbol_id = m.symbol_id
|
|
578
|
+
WHERE m.symbol_id = ?
|
|
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 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
|
+
FROM mentions m
|
|
582
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
583
|
+
JOIN documents d ON c.document_id = d.id
|
|
584
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
585
|
+
JOIN (
|
|
586
|
+
SELECT m2.symbol_id, c2.document_id
|
|
587
|
+
FROM mentions m2
|
|
588
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
589
|
+
WHERE m2.role = 1
|
|
590
|
+
GROUP BY m2.symbol_id
|
|
591
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
592
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
593
|
+
WHERE d.relative_path = ?
|
|
594
|
+
AND m.role != 1
|
|
595
|
+
AND def_d.id != d.id
|
|
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 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
|
+
COUNT(DISTINCT c.document_id) AS file_count,
|
|
599
|
+
def_d.relative_path AS defined_in
|
|
600
|
+
FROM mentions m
|
|
601
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
602
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
603
|
+
JOIN (
|
|
604
|
+
SELECT m2.symbol_id, c2.document_id
|
|
605
|
+
FROM mentions m2
|
|
606
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
607
|
+
WHERE m2.role = 1
|
|
608
|
+
GROUP BY m2.symbol_id
|
|
609
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
610
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
611
|
+
WHERE m.role != 1
|
|
612
|
+
AND def_d.id != c.document_id
|
|
613
|
+
${e.pathExclusionsFor("def_d")}
|
|
614
|
+
${e.symbolNoiseFor("gs")}
|
|
615
|
+
${i}
|
|
616
|
+
GROUP BY gs.id
|
|
617
|
+
HAVING file_count > 1
|
|
618
|
+
ORDER BY file_count DESC
|
|
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
|
+
FROM mentions m
|
|
621
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
622
|
+
JOIN documents d ON c.document_id = d.id
|
|
623
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
624
|
+
JOIN (
|
|
625
|
+
SELECT m2.symbol_id, c2.document_id
|
|
626
|
+
FROM mentions m2
|
|
627
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
628
|
+
WHERE m2.role = 1
|
|
629
|
+
GROUP BY m2.symbol_id
|
|
630
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
631
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
632
|
+
WHERE m.role != 1
|
|
633
|
+
AND def_d.id != d.id
|
|
634
|
+
${e.pathExclusionsFor("d")}
|
|
635
|
+
${e.symbolNoiseFor("gs")}
|
|
636
|
+
${i}
|
|
637
|
+
GROUP BY d.id
|
|
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 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
|
+
FROM global_symbols gs
|
|
641
|
+
WHERE (
|
|
642
|
+
-- Defined in file1, referenced in file2
|
|
643
|
+
EXISTS (
|
|
644
|
+
SELECT 1
|
|
645
|
+
FROM mentions def_m
|
|
646
|
+
JOIN chunks def_c ON def_m.chunk_id = def_c.id
|
|
647
|
+
JOIN documents d ON def_c.document_id = d.id
|
|
648
|
+
WHERE def_m.symbol_id = gs.id AND def_m.role = 1 AND d.relative_path = ?
|
|
649
|
+
)
|
|
650
|
+
AND EXISTS (
|
|
651
|
+
SELECT 1 FROM mentions m
|
|
652
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
653
|
+
JOIN documents d ON c.document_id = d.id
|
|
654
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
|
|
655
|
+
)
|
|
656
|
+
) OR (
|
|
657
|
+
-- Defined in file2, referenced in file1
|
|
658
|
+
EXISTS (
|
|
659
|
+
SELECT 1
|
|
660
|
+
FROM mentions def_m
|
|
661
|
+
JOIN chunks def_c ON def_m.chunk_id = def_c.id
|
|
662
|
+
JOIN documents d ON def_c.document_id = d.id
|
|
663
|
+
WHERE def_m.symbol_id = gs.id AND def_m.role = 1 AND d.relative_path = ?
|
|
664
|
+
)
|
|
665
|
+
AND EXISTS (
|
|
666
|
+
SELECT 1 FROM mentions m
|
|
667
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
668
|
+
JOIN documents d ON c.document_id = d.id
|
|
669
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
|
|
670
|
+
)
|
|
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
|
+
def_d.relative_path AS file1,
|
|
673
|
+
ref_d.relative_path AS file2,
|
|
674
|
+
COUNT(DISTINCT gs.id) AS shared
|
|
675
|
+
FROM mentions m
|
|
676
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
677
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
678
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
679
|
+
JOIN (
|
|
680
|
+
SELECT m2.symbol_id, c2.document_id
|
|
681
|
+
FROM mentions m2
|
|
682
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
683
|
+
WHERE m2.role = 1
|
|
684
|
+
GROUP BY m2.symbol_id
|
|
685
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
686
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
687
|
+
WHERE m.role != 1
|
|
688
|
+
AND def_d.id != ref_d.id
|
|
689
|
+
${e.pathExclusionsFor("def_d","ref_d")}
|
|
690
|
+
${i}
|
|
691
|
+
GROUP BY def_d.id, ref_d.id
|
|
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: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
|
+
FROM defn_enclosing_ranges der
|
|
695
|
+
JOIN global_symbols gs ON der.symbol_id = gs.id
|
|
696
|
+
JOIN documents d ON der.document_id = d.id
|
|
697
|
+
WHERE gs.kind IS NOT NULL
|
|
698
|
+
AND gs.kind != 0
|
|
699
|
+
AND gs.symbol NOT LIKE '%#'
|
|
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 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
|
+
gs.kind,
|
|
703
|
+
gs.documentation,
|
|
704
|
+
gs.enclosing_symbol,
|
|
705
|
+
d.relative_path,
|
|
706
|
+
der.start_line,
|
|
707
|
+
der.end_line
|
|
708
|
+
FROM defn_enclosing_ranges der
|
|
709
|
+
JOIN global_symbols gs ON der.symbol_id = gs.id
|
|
710
|
+
JOIN documents d ON der.document_id = d.id
|
|
711
|
+
WHERE (gs.kind IS NULL OR gs.kind = 0 OR gs.symbol LIKE '%#')
|
|
712
|
+
${e.symbolNoiseFor("gs")}
|
|
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 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
|
+
`)}return e.slice(t,Math.min(e.length,t+8)).join(`
|
|
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
|
+
FROM mentions m
|
|
720
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
721
|
+
JOIN documents consumer_d ON consumer_d.id = c.document_id
|
|
722
|
+
WHERE m.symbol_id = ?
|
|
723
|
+
AND m.role != 1
|
|
724
|
+
AND c.document_id != ?
|
|
725
|
+
${e.pathExclusionsFor("consumer_d")}
|
|
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
|
+
WHERE relative_path = ?
|
|
728
|
+
${e.pathExclusionsFor("documents")}
|
|
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
|
+
FROM mentions m
|
|
731
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
732
|
+
JOIN documents consumer_d ON consumer_d.id = c.document_id
|
|
733
|
+
WHERE m.symbol_id = ?
|
|
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 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
|
+
FROM global_symbols gs
|
|
737
|
+
JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
738
|
+
JOIN documents d ON d.id = der.document_id
|
|
739
|
+
WHERE gs.symbol = ?
|
|
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
|
+
`),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=$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
|
+
`),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 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
|
+
FROM mentions m
|
|
753
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
754
|
+
WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
|
|
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 $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
|
+
FROM mentions m
|
|
758
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
759
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
760
|
+
WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
|
|
761
|
+
AND m.role != 1
|
|
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 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
|
+
FROM mentions m
|
|
769
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
770
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
771
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
772
|
+
JOIN (
|
|
773
|
+
SELECT m2.symbol_id, c2.document_id
|
|
774
|
+
FROM mentions m2
|
|
775
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
776
|
+
WHERE m2.role = 1
|
|
777
|
+
GROUP BY m2.symbol_id
|
|
778
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
779
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
780
|
+
WHERE d1.id != d2.id
|
|
781
|
+
AND m.role != 1
|
|
782
|
+
${e.pathExclusionsFor("d1","d2")}
|
|
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
|
+
FROM mentions m
|
|
788
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
789
|
+
JOIN documents d ON c.document_id = d.id
|
|
790
|
+
WHERE m.symbol_id = ? AND m.role != 1 AND d.relative_path = ?
|
|
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
|
+
FROM mentions m
|
|
794
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
795
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
796
|
+
WHERE m.symbol_id = ?
|
|
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=>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
|
+
* Generated by 'scip-query twin-ab'. scip-integrity-audit drill 5
|
|
801
|
+
* ("cross-examine same-concept twins"): where one concept is computed in
|
|
802
|
+
* more than one place, feed both the same input and require the same
|
|
803
|
+
* answer. Disagreement between twins means at least one is wrong \u2014
|
|
804
|
+
* determine which before consolidating.
|
|
805
|
+
*
|
|
806
|
+
* Twin A: ${e.shortName} (${e.file}:${e.startLine+1})
|
|
807
|
+
* ${e.signature??"(signature unavailable)"}
|
|
808
|
+
* Twin B: ${t.shortName} (${t.file}:${t.startLine+1})
|
|
809
|
+
* ${t.signature??"(signature unavailable)"}
|
|
810
|
+
* ${a}
|
|
811
|
+
*
|
|
812
|
+
* Fill in the TODO input table below with inputs both twins should agree
|
|
813
|
+
* on, then run this file with vitest.
|
|
814
|
+
*/
|
|
815
|
+
import { describe, expect, it } from 'vitest';
|
|
816
|
+
import { ${e.shortName} as twinA } from '${o}';
|
|
817
|
+
import { ${t.shortName} as twinB } from '${s}';
|
|
818
|
+
|
|
819
|
+
// TODO: fill in shared inputs both twins should agree on \u2014 one arg array per call.
|
|
820
|
+
const inputs: any[][] = [
|
|
821
|
+
// [/* arg1, arg2, ... */],
|
|
822
|
+
];
|
|
823
|
+
|
|
824
|
+
// Cast to a variadic signature so the input table can hold any arg shape \u2014
|
|
825
|
+
// the real twins have fixed, non-rest parameter lists, and TS rejects
|
|
826
|
+
// spreading a generic args array into those (TS2556) even when the array
|
|
827
|
+
// itself is 'any'; casting the callee's signature, not the args, satisfies
|
|
828
|
+
// the checker without weakening the twins' real exported types elsewhere.
|
|
829
|
+
const callA = twinA as (...callArgs: any[]) => any;
|
|
830
|
+
const callB = twinB as (...callArgs: any[]) => any;
|
|
831
|
+
|
|
832
|
+
describe.skipIf(inputs.length === 0)('twin-ab: ${e.shortName} vs ${t.shortName}', () => {
|
|
833
|
+
it.each(inputs)('agrees on input %#', (...args) => {
|
|
834
|
+
expect(callA(...args)).toEqual(callB(...args));
|
|
835
|
+
});
|
|
836
|
+
});
|
|
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
|
+
`).slice(n,r+1).join(`
|
|
840
|
+
`)}catch{return""}}function XK(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
|
|
841
|
+
FROM mentions m
|
|
842
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
843
|
+
JOIN (
|
|
844
|
+
SELECT m2.symbol_id, c2.document_id
|
|
845
|
+
FROM mentions m2
|
|
846
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
847
|
+
WHERE m2.role = 1
|
|
848
|
+
GROUP BY m2.symbol_id
|
|
849
|
+
) sym_def ON sym_def.symbol_id = m.symbol_id
|
|
850
|
+
WHERE m.symbol_id = ?
|
|
851
|
+
AND m.role != 1
|
|
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
|
+
FROM documents
|
|
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
|
+
barrel_d.id AS barrel_doc_id,
|
|
856
|
+
barrel_d.relative_path AS barrel_path,
|
|
857
|
+
gs.id AS symbol_id,
|
|
858
|
+
gs.symbol AS symbol,
|
|
859
|
+
orig_d.id AS original_doc_id,
|
|
860
|
+
orig_d.relative_path AS original_path
|
|
861
|
+
FROM mentions m
|
|
862
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
863
|
+
JOIN documents barrel_d ON c.document_id = barrel_d.id
|
|
864
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
865
|
+
JOIN (
|
|
866
|
+
SELECT m2.symbol_id, c2.document_id
|
|
867
|
+
FROM mentions m2
|
|
868
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
869
|
+
WHERE m2.role = 1
|
|
870
|
+
GROUP BY m2.symbol_id
|
|
871
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
872
|
+
JOIN documents orig_d ON sym_def.document_id = orig_d.id
|
|
873
|
+
WHERE m.role != 1
|
|
874
|
+
AND (barrel_d.relative_path LIKE '%/index.ts'
|
|
875
|
+
OR barrel_d.relative_path LIKE '%/index.js'
|
|
876
|
+
OR barrel_d.relative_path = 'index.ts'
|
|
877
|
+
OR barrel_d.relative_path = 'index.js')
|
|
878
|
+
AND orig_d.id != barrel_d.id
|
|
879
|
+
${e.pathExclusionsFor("barrel_d","orig_d")}
|
|
880
|
+
${e.symbolNoiseFor("gs")}
|
|
881
|
+
-- Only function-level symbols (ending with ().), not module-level
|
|
882
|
+
AND gs.symbol LIKE '%().'
|
|
883
|
+
${n}
|
|
884
|
+
ORDER BY barrel_d.relative_path, gs.symbol`,...r)}function gJ(e,t){return e.get(`SELECT
|
|
885
|
+
SUM(CASE WHEN uses_barrel = 1 THEN 1 ELSE 0 END) AS barrel_consumers,
|
|
886
|
+
SUM(CASE WHEN uses_barrel = 0 THEN 1 ELSE 0 END) AS direct_consumers
|
|
887
|
+
FROM (
|
|
888
|
+
SELECT
|
|
889
|
+
consumer_d.id AS consumer_doc_id,
|
|
890
|
+
MAX(CASE WHEN EXISTS (
|
|
891
|
+
SELECT 1
|
|
892
|
+
FROM mentions barrel_m
|
|
893
|
+
JOIN chunks barrel_c ON barrel_m.chunk_id = barrel_c.id
|
|
894
|
+
WHERE barrel_c.document_id = consumer_d.id
|
|
895
|
+
AND barrel_m.role != 1
|
|
896
|
+
AND barrel_m.symbol_id IN (
|
|
897
|
+
SELECT m2.symbol_id
|
|
898
|
+
FROM mentions m2
|
|
899
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
900
|
+
WHERE c2.document_id = ?
|
|
901
|
+
AND m2.role != 1
|
|
902
|
+
)
|
|
903
|
+
) THEN 1 ELSE 0 END) AS uses_barrel
|
|
904
|
+
FROM mentions ref_m
|
|
905
|
+
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
906
|
+
JOIN documents consumer_d ON ref_c.document_id = consumer_d.id
|
|
907
|
+
WHERE ref_m.symbol_id = ?
|
|
908
|
+
AND ref_m.role != 1
|
|
909
|
+
AND consumer_d.id != ?
|
|
910
|
+
AND consumer_d.id != ?
|
|
911
|
+
${e.pathExclusionsFor("consumer_d")}
|
|
912
|
+
GROUP BY consumer_d.id
|
|
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
|
+
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
|
+
`),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${fS(e.overview.indexSizeBytes)}
|
|
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
|
+
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(_Y(e),FY(e),e.scoreBreakdown.length>0){console.log(`
|
|
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
|
+
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} (${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
|