scip-query 0.19.6 → 0.19.8
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 +37 -0
- package/README.md +28 -15
- package/dist/augment-vue-worker.js +1 -1
- package/dist/chunk-2465DLHK.js +3 -0
- package/dist/{chunk-2CVXCGL4.js → chunk-24GTWJ3N.js} +2 -2
- package/dist/{chunk-XVJ3V7LM.js → chunk-2SNGN6U4.js} +2 -2
- package/dist/{chunk-FKGN4A4E.js → chunk-2U3OLUNJ.js} +2 -2
- package/dist/{chunk-UUJBLG6J.js → chunk-33KUO7CG.js} +2 -2
- package/dist/{chunk-N3SE646F.js → chunk-33XTHFKR.js} +2 -2
- package/dist/{chunk-WXAAURU7.js → chunk-3EDFLQ6A.js} +2 -2
- package/dist/chunk-3ZSJ3PWF.js +16 -0
- package/dist/{chunk-G4UQL4CP.js → chunk-43KC6EQZ.js} +2 -2
- package/dist/{chunk-NQLSSVOB.js → chunk-464PLI5O.js} +2 -2
- package/dist/chunk-46XGSFNI.js +2 -0
- package/dist/{chunk-NN4ZIRPK.js → chunk-47BU5Z4T.js} +2 -2
- package/dist/chunk-4BV4QAZJ.js +5 -0
- package/dist/chunk-4YTUWQ6M.js +18 -0
- package/dist/{chunk-LMFVTUW2.js → chunk-5ML2BNRH.js} +2 -2
- package/dist/{chunk-OP3MTFJR.js → chunk-5YLUDDAF.js} +2 -2
- package/dist/chunk-67QRR5YC.js +6 -0
- package/dist/{chunk-273W2U4Y.js → chunk-6GXYN7YA.js} +2 -2
- package/dist/{chunk-JELJLXEE.js → chunk-6M7RONVB.js} +2 -2
- package/dist/{chunk-MLGTCX56.js → chunk-7FT5Y65S.js} +2 -2
- package/dist/{chunk-F42A3AKG.js → chunk-7KYNAMMH.js} +2 -2
- package/dist/{chunk-VP542C25.js → chunk-7LSVMFX7.js} +2 -2
- package/dist/{chunk-YWB2EBNB.js → chunk-7QHY3H7P.js} +2 -2
- package/dist/{chunk-UQK5CRUK.js → chunk-7RAG65VK.js} +2 -2
- package/dist/{chunk-CYJM7CYF.js → chunk-7SWJEWJF.js} +2 -2
- package/dist/{chunk-47X75ZKH.js → chunk-7VCOXZH3.js} +2 -2
- package/dist/chunk-A2TNXAXO.js +8 -0
- package/dist/{chunk-TYQ76QHQ.js → chunk-A3QXWFBK.js} +2 -2
- package/dist/{chunk-S2GP3CU3.js → chunk-AA4UWRNL.js} +2 -2
- package/dist/{chunk-OBKDTVZ3.js → chunk-ACAM6O5R.js} +2 -2
- package/dist/chunk-AQOFWNQJ.js +1 -0
- package/dist/chunk-AZFUMCQB.js +2 -0
- package/dist/{chunk-IYAOX36F.js → chunk-BDOIKGDI.js} +2 -2
- package/dist/{chunk-7E3TH5ZN.js → chunk-BNXICU42.js} +2 -2
- package/dist/chunk-C5Q44Q5D.js +3 -0
- package/dist/{chunk-OQ2A4G2G.js → chunk-CTF2GDEX.js} +2 -2
- package/dist/chunk-DHEQMPLW.js +2 -0
- package/dist/{chunk-EVOC5I5I.js → chunk-DQBCO2UY.js} +2 -2
- package/dist/{chunk-YLVE3SXZ.js → chunk-DQGSM7RZ.js} +2 -2
- package/dist/chunk-E2LAW7SL.js +30 -0
- package/dist/chunk-E3HYEQO7.js +2 -0
- package/dist/chunk-E4NFOAD4.js +6 -0
- package/dist/chunk-E5HNT4X2.js +3 -0
- package/dist/{chunk-6XHTISLI.js → chunk-ELLMY7XJ.js} +2 -2
- package/dist/chunk-FD3HFKXR.js +5 -0
- package/dist/{chunk-RJHCPSZ7.js → chunk-FIJCV235.js} +2 -2
- package/dist/{chunk-KLVJABXA.js → chunk-FJ5UDTQF.js} +2 -2
- package/dist/{chunk-SHKZ7OVJ.js → chunk-GHKEJTCE.js} +2 -2
- package/dist/{chunk-JERWGHQT.js → chunk-GLZTVKAB.js} +3 -3
- package/dist/{chunk-A43URCQ3.js → chunk-GNC4JVAN.js} +2 -2
- package/dist/chunk-HIB452NU.js +949 -0
- package/dist/{chunk-U5CNPPTZ.js → chunk-HZYDQPNY.js} +2 -2
- package/dist/chunk-IF6FP6B2.js +66 -0
- package/dist/{chunk-CSTYYXKC.js → chunk-JAY7YWS3.js} +2 -2
- package/dist/{chunk-6XFC7PQ5.js → chunk-JHF3E4YM.js} +2 -2
- package/dist/chunk-JORHF5AL.js +108 -0
- package/dist/{chunk-QBYYWGAT.js → chunk-K2WO7XY7.js} +2 -2
- package/dist/chunk-KFZNKUNT.js +2 -0
- package/dist/{chunk-J7VT2CRB.js → chunk-KJ2IIBZN.js} +2 -2
- package/dist/{chunk-336DC5NJ.js → chunk-KKME5ZAI.js} +2 -2
- package/dist/chunk-KSGTULOS.js +9 -0
- package/dist/{chunk-E2ZXPB7J.js → chunk-KXDJAG4N.js} +3 -3
- package/dist/{chunk-Z2LHPIOM.js → chunk-L4S2A7BV.js} +2 -2
- package/dist/chunk-LP3ARJKF.js +8 -0
- package/dist/chunk-LSOR3LQG.js +3 -0
- package/dist/{chunk-FHCTEANE.js → chunk-MLFZP76A.js} +2 -2
- package/dist/{chunk-RBFFD4V2.js → chunk-MNSTUIDD.js} +2 -2
- package/dist/{chunk-3OIKRYU5.js → chunk-MSBDMFER.js} +2 -2
- package/dist/{chunk-7LABSJSR.js → chunk-MZZBAITE.js} +5 -5
- package/dist/{chunk-QQWOFXNW.js → chunk-NE3TZUCI.js} +2 -2
- package/dist/{chunk-JZNLMHWY.js → chunk-NTUMF2X3.js} +2 -2
- package/dist/{chunk-DD5BOU5I.js → chunk-O23I56NA.js} +2 -2
- package/dist/{chunk-YHXBD52M.js → chunk-O3O4XXO6.js} +2 -2
- package/dist/{chunk-FQTPPXNA.js → chunk-OUBAF226.js} +2 -2
- package/dist/chunk-P3UO3EH3.js +2 -0
- package/dist/{chunk-5OC3HWP5.js → chunk-QGGLL3UH.js} +2 -2
- package/dist/chunk-QIQ63BHW.js +16 -0
- package/dist/{chunk-RWRLUZ6U.js → chunk-QJIVBYEK.js} +2 -2
- package/dist/chunk-QOXBSI6G.js +20 -0
- package/dist/{chunk-7Q6VYYCH.js → chunk-QXK6UUSM.js} +2 -2
- package/dist/{chunk-ZTTISZ7J.js → chunk-RA3AYNWP.js} +2 -2
- package/dist/chunk-RJMDJR3A.js +2 -0
- package/dist/{chunk-TFUU5MQQ.js → chunk-RLH5VUMG.js} +2 -2
- package/dist/{chunk-OHWZKLVA.js → chunk-S4S2WOIX.js} +2 -2
- package/dist/{chunk-YTUD45PU.js → chunk-SERUIGV5.js} +2 -2
- package/dist/{chunk-2OXVAGGT.js → chunk-SMQWE25B.js} +2 -2
- package/dist/{chunk-K42M2KWT.js → chunk-TAVELHYR.js} +2 -2
- package/dist/{chunk-MGBJHRFB.js → chunk-TWMJ3Y3G.js} +2 -2
- package/dist/chunk-VAXNI5NE.js +146 -0
- package/dist/chunk-VVY2G5ET.js +2 -0
- package/dist/{chunk-XF3KLXN3.js → chunk-W3DBTGL4.js} +2 -2
- package/dist/{chunk-26X7KCJR.js → chunk-WANA4KAQ.js} +2 -2
- package/dist/chunk-WJL2L6MV.js +60 -0
- package/dist/chunk-WUW7YUAH.js +11 -0
- package/dist/{chunk-PC44K7RF.js → chunk-WWKWUPSU.js} +2 -2
- package/dist/{chunk-2EZSOTSY.js → chunk-WY45BHKQ.js} +2 -2
- package/dist/chunk-X4FR5BZF.js +9 -0
- package/dist/chunk-X6RKPDY7.js +2 -0
- package/dist/{chunk-GK3GRUJX.js → chunk-YLFORA5G.js} +2 -2
- package/dist/{chunk-NBRUH7OE.js → chunk-YTVWB7YJ.js} +2 -2
- package/dist/{chunk-YGQN3XGZ.js → chunk-ZCEJ63SP.js} +2 -2
- package/dist/{chunk-2GSQR6YA.js → chunk-ZJ5CBXK3.js} +2 -2
- package/dist/chunk-ZL2OGDCD.js +2 -0
- package/dist/cli.js +8 -3
- package/dist/command-descriptors-ZW5J4ZEM.js +631 -0
- package/dist/{config-types-BWQ5xPGI.d.ts → config-types-B6MEoRNy.d.ts} +4 -0
- package/dist/{db-B0r1o7Vt.d.ts → db-DYLKr9Wn.d.ts} +1 -1
- package/dist/direct-navigation-42YHQPOI.js +3 -0
- package/dist/{health-CFnlCiTz.d.ts → health-DgxIDXJC.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/postinstall.js +1 -1
- package/dist/queries/affected.d.ts +2 -2
- package/dist/queries/affected.js +1 -1
- package/dist/queries/architecture.d.ts +2 -2
- 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 +2 -2
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.d.ts +2 -2
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.d.ts +2 -2
- 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 +2 -2
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +3 -3
- 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 +26 -25
- package/dist/reindex.d.ts +7 -3
- package/dist/reindex.js +34 -33
- package/dist/runtime.d.ts +3 -10
- package/dist/runtime.js +3 -3
- package/dist/rust-semantic-session-server.js +1 -1
- package/dist/rust-semantic-session-worker.js +1 -1
- package/dist/rust-semantic-worker.js +1 -1
- package/dist/{scip-cli-DCvnlZCu.d.ts → scip-cli-Cc6c00-a.d.ts} +2 -2
- package/dist/watch-server.js +5 -5
- package/docs/AGENT_GUIDE.md +19 -3
- package/docs/CLI_JSON_OUTPUT.md +86 -1
- package/docs/COMMAND_REFERENCE.md +5 -3
- package/docs/SECURITY_MODEL.md +129 -0
- package/docs/TELEMETRY_RETENTION.md +5 -0
- package/docs/schemas/cli-output-page.schema.json +104 -0
- package/package.json +8 -7
- package/skills/_shared/SKILL.md +4 -2
- package/skills/scip-audit/SKILL.md +3 -2
- package/skills/scip-explore/SKILL.md +1 -1
- package/skills/scip-improve/SKILL.md +1 -1
- package/skills/scip-plan/SKILL.md +1 -1
- package/skills/scip-verify/SKILL.md +7 -2
- package/dist/chunk-24QNP7MN.js +0 -2
- package/dist/chunk-2ZOCHAL2.js +0 -8
- package/dist/chunk-35SQLYCQ.js +0 -2
- package/dist/chunk-4CGVLUDP.js +0 -18
- package/dist/chunk-4RI4BJGT.js +0 -8
- package/dist/chunk-52HQTTPB.js +0 -2
- package/dist/chunk-A63U2W3P.js +0 -3
- package/dist/chunk-ADFSIJP2.js +0 -16
- package/dist/chunk-AOLE4DYM.js +0 -6
- package/dist/chunk-B5MHCHP3.js +0 -107
- package/dist/chunk-DGAGY7RJ.js +0 -60
- package/dist/chunk-DGMCFMPG.js +0 -11
- package/dist/chunk-GA64UPMI.js +0 -6
- package/dist/chunk-HEBAY673.js +0 -2
- package/dist/chunk-HELS7KFF.js +0 -2
- package/dist/chunk-IPDCSB6N.js +0 -6
- package/dist/chunk-JJJCO4QC.js +0 -945
- package/dist/chunk-KP4KBDVF.js +0 -3
- package/dist/chunk-LRTP3DKL.js +0 -3
- package/dist/chunk-P6HBYNBE.js +0 -5
- package/dist/chunk-QHKUY4FW.js +0 -2
- package/dist/chunk-QHRL4LKM.js +0 -2
- package/dist/chunk-UXP636P5.js +0 -144
- package/dist/chunk-VEVBIAOJ.js +0 -16
- package/dist/chunk-VKRQDBW5.js +0 -9
- package/dist/chunk-VOQFGC2W.js +0 -67
- package/dist/chunk-WMXRRBII.js +0 -8
- package/dist/chunk-X3NLZHPA.js +0 -20
- package/dist/chunk-Z5QQPJ3U.js +0 -30
- package/dist/chunk-ZLJLE6LK.js +0 -2
- package/dist/command-descriptors-SJDZ7QGR.js +0 -617
- package/dist/direct-navigation-HTKOZEOM.js +0 -3
|
@@ -0,0 +1,949 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{createHash as nD}from"crypto";import{existsSync as rD,mkdirSync as iD}from"fs";import{dirname as fg,join as oD}from"path";import Ql from"better-sqlite3";function Wl(e,t){let n=e.split("/").at(-1)??e;if(cg.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=>(lg[i]??[]).includes(r))?"source":"other"}function sg(e,t,n){let r=e.split("/").at(-1)??e;if(n?.includes(e)||n?.includes(r)||cg.has(r))return!0;let i=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(lg[t]??[]).includes(i)}function ag(e){if(typeof e!="object"||e===null)return null;let t=e;return typeof t.version!="number"||!rg(t.languages)||typeof t.pnpmWorkspaces!="boolean"||typeof t.typescriptProjectMode!="string"||!rg(t.typescriptProjects)||t.clojureConfigPath!==void 0&&typeof t.clojureConfigPath!="string"||!Array.isArray(t.files)||!t.files.every(zl)?null:t}function B6(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=Wl(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"),(ig(e?.files??[])||ig(t.files))&&s.add("duplicate-input-path"),[...e?.files??[],...t.files].some(WE)&&s.add("unreadable-input"),{version:1,changes:o,projectIdentityChanged:e?!zE(e,t):!0,uncertainty:[...s].sort()}}function rg(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function ig(e){return new Set(e.map(t=>t.path)).size!==e.length}function zl(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.path=="string"&&typeof t.size=="number"&&Number.isFinite(t.size)&&typeof t.hash=="string"}function WE(e){return e.hash==="unreadable"||e.size<0}function zE(e,t){return og(e.languages,t.languages)&&e.pnpmWorkspaces===t.pnpmWorkspaces&&e.typescriptProjectMode===t.typescriptProjectMode&&og(e.typescriptProjects,t.typescriptProjects)&&e.clojureConfigPath===t.clojureConfigPath}function og(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 cg=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"]),lg={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 G(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Hs(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function B(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}var to=["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php","clojure"];var Kl=2,Us=3;var Jl=new Set(to);function Gt(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch(s){return{kind:"malformed",reason:`invalid JSON: ${eD(s)}`}}if(!G(t))return{kind:"malformed",reason:"metadata must be a JSON object"};let n=t.version;if(!Number.isInteger(n))return{kind:"malformed",reason:"version must be an integer"};if(n!==Kl&&n!==Us)return{kind:"unsupported",version:n,direction:n<Kl?"older":"future"};let r=JE(t,n);if(r)return{kind:"malformed",reason:r};let i=t,o={metadata:i,capabilities:KE(i)};return n===Kl?{kind:"legacy",...o,metadata:i}:{kind:"supported",...o,metadata:i}}function W6(e){return e.kind==="legacy"||e.kind==="supported"?e.metadata:null}function ug(e){if(e.kind!=="legacy"&&e.kind!=="supported"||!e.capabilities.stableGenerationIdentity)return null;let t=e.metadata;return JSON.stringify({version:t.version,status:t.status,updatedAt:t.updatedAt,fingerprint:t.fingerprint,indexedLanguages:t.indexedLanguages,scipCompanion:t.scipCompanion})}function KE(e){let t=e.fingerprint!==void 0,n=G(e.fingerprint),r=e.indexedLanguages!==void 0,i=e.status==="complete",o=e.version===Us?e:null;return{usableForQuery:r,usableForEvidenceCache:t,publishableGeneration:i&&n&&r,stableGenerationIdentity:i&&t&&typeof e.updatedAt=="string",languageShardReuse:!!o?.languageFingerprints,typescriptProjectShardReuse:!!o?.typescriptProjectShards}}function JE(e,t){if(e.status!=="complete"&&e.status!=="partial")return"status must be complete or partial";if(e.updatedAt!==void 0&&!Hs(e.updatedAt))return"updatedAt must be a valid timestamp";for(let n of["requestedLanguages","indexedLanguages"])if(e[n]!==void 0&&!YE(e[n]))return`${n} must contain unique supported languages`;return e.skipped!==void 0&&!XE(e.skipped)?"skipped must contain supported language/reason pairs":e.scipCompanion!==void 0&&e.scipCompanion!=="current"&&e.scipCompanion!=="deferred"?"scipCompanion must be current or deferred":t===Us&&e.languageFingerprints!==void 0&&!QE(e.languageFingerprints)?"languageFingerprints must map supported languages to fingerprint objects":t===Us&&e.typescriptProjectShards!==void 0&&!ZE(e.typescriptProjectShards)?"typescriptProjectShards must map project names to file fingerprints":null}function YE(e){return!Array.isArray(e)||!e.every(t=>typeof t=="string"&&Jl.has(t))?!1:new Set(e).size===e.length}function XE(e){return Array.isArray(e)&&e.every(t=>G(t)&&typeof t.language=="string"&&Jl.has(t.language)&&typeof t.reason=="string")}function QE(e){return G(e)&&Object.entries(e).every(([t,n])=>Jl.has(t)&&G(n))}function ZE(e){return G(e)&&Object.values(e).every(t=>G(t)&&Array.isArray(t.files)&&t.files.every(zl))}function eD(e){return e instanceof Error?e.message:String(e)}var dg=[];function On(e){e.groups.length>0&&dg.push(e)}function Yl(e,t){let n=new Set(t.groups);for(let r of dg)r.groups.some(i=>n.has(i))&&(t.file!==void 0&&r.clearFile?r.clearFile(e,t.file):r.clearAll(e))}function mg(){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 $(e,t){let{cache:n,ensure:r}=mg(),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 On({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}function ee(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 On({name:e,groups:t.clearGroups,clearAll:i=>r.invalidate(i)}),r}var tD={clearGroups:["whole-project","source-file"]};function jn(e){return hr(e,tD)}function hr(e,t){let{cache:n,ensure:r}=mg(),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 On({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}var sD="evidence.db";var aD=["source-facts","definition-exclusions","doc-path-tokens","react-component-behavior-profiles"],Zl=new Set(aD),cD=25e4,lD=512*1024*1024,uD=5e3,qs=new WeakMap,dD=$("evidence-content-hash",{clearGroups:["whole-project","source-file"]}),mD=$("evidence-project-fingerprint",{clearGroups:["whole-project"]}),ht="evidence-v1",Yr="version NOT LIKE 'evidence-%'";function Ee(e){return nD("sha256").update(e).digest("hex")}function pe(e,t,n){return dD.get(e,t,()=>Ee(n))}function Ge(e){return mD.get(e,"current",()=>{try{if(!e.generation.metadataRaw)return null;let t=Gt(e.generation.metadataRaw);if(t.kind!=="legacy"&&t.kind!=="supported"||!t.capabilities.usableForEvidenceCache)return null;let n=t.metadata,r=[...n.indexedLanguages??[]].sort();return Ee(JSON.stringify({fingerprint:n.fingerprint,indexedLanguages:r,status:n.status}))}catch(t){return Xr("project fingerprint unavailable",t),null}})}function Xr(e,t){process.env.SCIP_QUERY_DEBUG&&console.error(`evidence-cache: ${e}: ${t instanceof Error?t.message:String(t)}`)}function Lt(e){if(qs.has(e))return qs.get(e)??null;let t=null;try{let n=new Ql(oD(fg(e.config.dbPath),sD));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
|
+
CREATE TABLE IF NOT EXISTS finding_outcome_observations (
|
|
46
|
+
observation_id TEXT PRIMARY KEY,
|
|
47
|
+
fingerprint TEXT NOT NULL,
|
|
48
|
+
observed_at INTEGER NOT NULL
|
|
49
|
+
);
|
|
50
|
+
`),t={evidence:n,shared:fD(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
|
|
51
|
+
WHERE kind = ? AND relative_path = ? AND content_hash = ? AND ${Yr}
|
|
52
|
+
ORDER BY version DESC
|
|
53
|
+
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
|
|
54
|
+
WHERE kind = ? AND cache_key = ? AND project_fingerprint = ? AND ${Yr}
|
|
55
|
+
ORDER BY version DESC
|
|
56
|
+
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
|
|
57
|
+
WHERE relative_path = ? AND symbol = ? AND content_hash = ? AND deps_digest = ? AND version = ?`),readLegacyCallees:n.prepare(`SELECT payload FROM semantic_callees
|
|
58
|
+
WHERE relative_path = ? AND symbol = ? AND content_hash = ? AND deps_digest = ? AND ${Yr}
|
|
59
|
+
ORDER BY version DESC
|
|
60
|
+
LIMIT 1`),readCalleesForFile:n.prepare(`SELECT symbol, payload FROM semantic_callees
|
|
61
|
+
WHERE relative_path = ? AND content_hash = ? AND deps_digest = ? AND version = ?`),readLegacyCalleesForFile:n.prepare(`SELECT symbol, payload FROM semantic_callees
|
|
62
|
+
WHERE relative_path = ? AND content_hash = ? AND deps_digest = ? AND ${Yr}
|
|
63
|
+
ORDER BY symbol, version DESC`),writeCallees:n.prepare(`INSERT OR REPLACE INTO semantic_callees
|
|
64
|
+
(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
|
|
65
|
+
WHERE relative_path = ? AND symbol = ? AND project_fingerprint = ? AND version = ?`),readLegacyReferences:n.prepare(`SELECT payload FROM semantic_references
|
|
66
|
+
WHERE relative_path = ? AND symbol = ? AND project_fingerprint = ? AND ${Yr}
|
|
67
|
+
ORDER BY version DESC
|
|
68
|
+
LIMIT 1`),readReferencesForFile:n.prepare(`SELECT symbol, payload FROM semantic_references
|
|
69
|
+
WHERE relative_path = ? AND project_fingerprint = ? AND version = ?`),readLegacyReferencesForFile:n.prepare(`SELECT symbol, payload FROM semantic_references
|
|
70
|
+
WHERE relative_path = ? AND project_fingerprint = ? AND ${Yr}
|
|
71
|
+
ORDER BY symbol, version DESC`),writeReferences:n.prepare(`INSERT OR REPLACE INTO semantic_references
|
|
72
|
+
(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"),claimFindingOutcomeObservation:n.prepare(`INSERT OR IGNORE INTO finding_outcome_observations
|
|
73
|
+
(observation_id, fingerprint, observed_at) VALUES (?, ?, ?)`),readFindingOutcomeObservation:n.prepare("SELECT fingerprint FROM finding_outcome_observations WHERE observation_id = ?"),upsertFindingOutcomeLedgerRow:n.prepare(`INSERT INTO finding_outcome_ledger
|
|
74
|
+
(check_name, finding_id, first_seen, last_seen, times_shown, outcome)
|
|
75
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
76
|
+
ON CONFLICT(check_name, finding_id) DO UPDATE SET
|
|
77
|
+
first_seen = MIN(finding_outcome_ledger.first_seen, excluded.first_seen),
|
|
78
|
+
last_seen = MAX(finding_outcome_ledger.last_seen, excluded.last_seen),
|
|
79
|
+
times_shown = finding_outcome_ledger.times_shown + excluded.times_shown,
|
|
80
|
+
outcome = excluded.outcome`),updateFindingOutcomeLedgerRow:n.prepare(`UPDATE finding_outcome_ledger
|
|
81
|
+
SET first_seen = MIN(first_seen, ?),
|
|
82
|
+
last_seen = MAX(last_seen, ?),
|
|
83
|
+
outcome = ?
|
|
84
|
+
WHERE check_name = ? AND finding_id = ?`),trimFindingOutcomeLedgerCheck:n.prepare(`DELETE FROM finding_outcome_ledger
|
|
85
|
+
WHERE rowid IN (
|
|
86
|
+
SELECT rowid
|
|
87
|
+
FROM finding_outcome_ledger
|
|
88
|
+
WHERE check_name = ?
|
|
89
|
+
ORDER BY last_seen DESC, first_seen DESC, finding_id DESC
|
|
90
|
+
LIMIT -1 OFFSET ?
|
|
91
|
+
)`)}}catch(n){Xr("disabled (open failed)",n)}return qs.set(e,t),t}function At(e,t,n){Xr(`disabled (${t})`,n),qs.set(e,null)}function fD(e){if(!e)return null;try{iD(fg(e),{recursive:!0});let t=new Ql(e);return t.pragma("journal_mode = WAL"),t.pragma("busy_timeout = 250"),t.pragma("synchronous = NORMAL"),t.exec(`
|
|
92
|
+
CREATE TABLE IF NOT EXISTS file_evidence (
|
|
93
|
+
kind TEXT NOT NULL,
|
|
94
|
+
relative_path TEXT NOT NULL,
|
|
95
|
+
content_hash TEXT NOT NULL,
|
|
96
|
+
version TEXT NOT NULL,
|
|
97
|
+
payload TEXT NOT NULL,
|
|
98
|
+
last_accessed_at INTEGER NOT NULL,
|
|
99
|
+
PRIMARY KEY (kind, relative_path, content_hash, version)
|
|
100
|
+
);
|
|
101
|
+
`),{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)
|
|
102
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
103
|
+
ON CONFLICT(kind, relative_path, content_hash, version)
|
|
104
|
+
DO UPDATE SET payload = excluded.payload, last_accessed_at = excluded.last_accessed_at`)}}catch(t){return Xr("shared cache disabled (open failed)",t),null}}function eu(e,t,n){Xr(`shared cache disabled (${t})`,n);try{e.shared?.evidence.close()}catch{}e.shared=null}function r3(e,t={}){if(!rD(e))return null;let n;try{n=new Ql(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??cD,o=t.budgetBytes??lD,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 (
|
|
105
|
+
SELECT rowid FROM file_evidence ORDER BY last_accessed_at ASC, rowid ASC LIMIT ?
|
|
106
|
+
)`).run(d),n.pragma("wal_checkpoint(TRUNCATE)")),{deletedRows:d,remainingRows:r-d}}catch(r){return Xr("shared cache maintenance skipped",r),null}finally{try{n?.close()}catch{}}}function pg(e,t,n,r){let i=Lt(e);if(!i)return null;try{let o=i.readFileEvidence.get(t,n,r,ht)??i.readLegacyFileEvidence.get(t,n,r);if(o?.payload!==void 0)return o.payload;if(!Zl.has(t)||!i.shared)return null;try{return i.shared.readFileEvidence.get(t,n,r,ht)?.payload??null}catch(s){return eu(i,"file_evidence read",s),null}}catch(o){return At(e,"file_evidence read",o),null}}function gg(e,t,n,r,i){let o=Lt(e);if(o)try{if(o.writeFileEvidence.run(t,n,r,ht,i),Zl.has(t)&&o.shared)try{o.shared.writeFileEvidence.run(t,n,r,ht,i,Date.now())}catch(s){eu(o,"file_evidence write",s)}}catch(s){At(e,"file_evidence write",s)}}function hg(e,t){if(t.length===0)return;let n=Lt(e);if(n)try{n.evidence.transaction(()=>{for(let i of t)n.writeFileEvidence.run(i.kind,i.relativePath,i.contentHash,ht,i.payload)})();let r=t.filter(i=>Zl.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,ht,i.payload,Date.now())})()}catch(i){eu(n,"file_evidence batch write",i)}}catch(r){At(e,"file_evidence batch write",r)}}function yg(e,t,n,r){let i=Lt(e);if(!i)return null;try{return(i.readProjectEvidence.get(t,n,r,ht)??i.readLegacyProjectEvidence.get(t,n,r))?.payload??null}catch(o){return At(e,"project_evidence read",o),null}}function bg(e,t,n,r,i){let o=Lt(e);if(o)try{o.writeProjectEvidence.run(t,n,r,ht,i)}catch(s){At(e,"project_evidence write",s)}}function Sg(e,t,n,r){let i=Lt(e);if(!i)return new Map;try{let o=i.readCalleesForFile.all(t,n,r,ht),s=i.readLegacyCalleesForFile.all(t,n,r);return Cg([...s,...o])}catch(o){return At(e,"semantic_callees bulk read",o),new Map}}function xg(e,t,n){let r=Lt(e);if(!r)return new Map;try{let i=r.readReferencesForFile.all(t,n,ht),o=r.readLegacyReferencesForFile.all(t,n);return Cg([...o,...i])}catch(i){return At(e,"semantic_references bulk read",i),new Map}}function Cg(e){let t=new Map;for(let n of e)t.set(n.symbol,n.payload);return t}function tu(e,t){if(t.length===0)return;let n=Lt(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,ht,i.payload)}})()}catch(r){At(e,"semantic_callees write",r)}}function Rg(e,t){if(t.length===0)return;let n=Lt(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,ht,i.payload)}})()}catch(r){At(e,"semantic_references write",r)}}function vg(e){let t=Lt(e);if(!t)return[];try{return Gs(t)}catch(n){return At(e,"finding_outcome_ledger read",n),[]}}function Ig(e,t,n,r={}){let i=Lt(e);if(!i)return{status:"unavailable",previous:[],current:[]};let o=r.busyTimeoutMs,s;try{if(o!==void 0){s=Number(i.evidence.pragma("busy_timeout",{simple:!0}));let c=Math.max(0,Math.min(6e4,Math.floor(o)));i.evidence.pragma(`busy_timeout = ${c}`)}return i.evidence.transaction(()=>{let c=Gs(i);if(i.claimFindingOutcomeObservation.run(t.observationId,t.fingerprint,t.observedAt).changes===0)return{status:i.readFindingOutcomeObservation.get(t.observationId)?.fingerprint===t.fingerprint?"duplicate":"conflict",previous:c,current:c};let u=[...n(c)],d=new Map(c.map(p=>[Xl(p),p])),m=new Map,f=new Set;for(let p of u){let g=Xl(p);if(m.has(g))throw new Error(`duplicate finding-outcome row in transition: ${p.check}/${p.findingId}`);m.set(g,p);let y=d.get(g);if(!y){if(p.timesShown<1)throw new Error(`new finding-outcome row has a non-positive count: ${p.check}/${p.findingId}`);f.add(p.check),i.upsertFindingOutcomeLedgerRow.run(p.check,p.findingId,p.firstSeen,p.lastSeen,p.timesShown,p.outcome);continue}let h=p.timesShown-y.timesShown;if(h<0)throw new Error(`finding-outcome count regressed: ${p.check}/${p.findingId}`);h>0?(f.add(p.check),i.upsertFindingOutcomeLedgerRow.run(p.check,p.findingId,p.firstSeen,p.lastSeen,h,p.outcome)):(p.firstSeen!==y.firstSeen||p.lastSeen!==y.lastSeen||p.outcome!==y.outcome)&&(f.add(p.check),i.updateFindingOutcomeLedgerRow.run(p.firstSeen,p.lastSeen,p.outcome,p.check,p.findingId))}for(let p of c)if(!m.has(Xl(p)))throw new Error(`finding-outcome transition removed a row: ${p.check}/${p.findingId}`);for(let p of f)i.trimFindingOutcomeLedgerCheck.run(p,uD);return{status:"applied",previous:c,current:Gs(i)}}).immediate()}catch(a){if(pD(a)){let c=[];try{c=Gs(i)}catch{}return{status:"busy",previous:c,current:c}}return At(e,"finding_outcome_ledger transition",a),{status:"unavailable",previous:[],current:[]}}finally{if(s!==void 0)try{i.evidence.pragma(`busy_timeout = ${Math.max(0,Math.floor(s))}`)}catch{}}}function Gs(e){return e.readFindingOutcomeLedger.all().map(n=>({check:n.check_name,findingId:n.finding_id,firstSeen:n.first_seen,lastSeen:n.last_seen,timesShown:n.times_shown,outcome:n.outcome}))}function Xl(e){return`${e.check}\0${e.findingId}`}function pD(e){if(!e||typeof e!="object")return!1;let t=e.code;return t==="SQLITE_BUSY"||t==="SQLITE_BUSY_TIMEOUT"||t==="SQLITE_LOCKED"}import{appendFileSync as gD,mkdirSync as hD}from"fs";import{createHash as yD,randomUUID as bD}from"crypto";import{dirname as SD}from"path";import{performance as Qr}from"perf_hooks";var Pg="SCIP_QUERY_PROFILE",kg="SCIP_QUERY_PROFILE_OUT",Tg="SCIP_QUERY_PROFILE_COMMAND",Fg="SCIP_QUERY_PROFILE_CACHE_STATE",nu="SCIP_QUERY_PROFILE_RUN_ID",ru="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY",iu="SCIP_QUERY_PROFILE_WORKLOAD_IDENTITY_KIND",_g=[Pg,kg,Tg,Fg,nu,ru,iu],l3=new Set(_g),wg=new Set,Eg=new Map,Dg=!1;function V(){let e=process.env[Pg];return e==="1"||e==="true"}function xD(){return process.env[kg]}function Lg(){return process.env[Tg]}function CD(){return process.env[Fg]}function Ag(){let e=process.env[nu];if(e)return e;if(!V())return;let t=bD();return process.env[nu]=t,t}function Mg(){return process.env[ru]}function RD(e){let t=Mg();if(t)return t;if(!V())return;let n=Ag();if(!n)return;let r=e.projectFingerprint?"published-project":"run-only",i=no(["profile-workload-v1",e.toolVersion,e.command,e.projectFingerprint??n]);return process.env[ru]=i,process.env[iu]=r,i}function no(e){return yD("sha256").update(JSON.stringify(e)).digest("hex").slice(0,24)}function Ng(){return Object.fromEntries(_g.flatMap(e=>{let t=process.env[e];return t===void 0?[]:[[e,t]]}))}function E(e,t,n){if(!V())return t();let r=Qr.now();try{let i=t();return Bn({type:"span",name:e,durationMs:Math.round(Qr.now()-r),ok:!0,...Vs(n)??{}}),i}catch(i){throw Bn({type:"span",name:e,durationMs:Math.round(Qr.now()-r),ok:!1,error:i instanceof Error?i.message:String(i),...Vs(n)??{}}),i}}async function u3(e,t,n){if(!V())return t();let r=Qr.now();try{let i=await t();return Bn({type:"span",name:e,durationMs:Math.round(Qr.now()-r),ok:!0,...Vs(n)??{}}),i}catch(i){throw Bn({type:"span",name:e,durationMs:Math.round(Qr.now()-r),ok:!1,error:i instanceof Error?i.message:String(i),...Vs(n)??{}}),i}}function Bn(e,t=xD()){let n=vD(e),r={timestamp:new Date().toISOString(),pid:process.pid,runId:Ag(),command:Lg(),cacheState:CD(),...n,...e},i=`${JSON.stringify(r)}
|
|
107
|
+
`;if(t)try{let o=SD(t);wg.has(o)||(hD(o,{recursive:!0}),wg.add(o)),gD(t,i);return}catch(o){Dg||(Dg=!0,process.stderr.write(`[profile] failed to write ${t}: ${o instanceof Error?o.message:String(o)}
|
|
108
|
+
`));return}V()&&process.stderr.write(i)}function vD(e){let t=Mg()??RD({command:Lg()??"unknown",toolVersion:"unknown",projectFingerprint:null});if(!t)return{};let n=process.env[iu],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=Eg.get(o);return s||(s=no(["profile-subsystem-v1",t,r]),Eg.set(o,s)),{workloadIdentity:t,workloadIdentityKind:n,subsystem:i,subsystemWorkIdentity:s}}function Vs(e){return typeof e=="function"?e():e}import{spawnSync as ID}from"child_process";import{createHash as wD}from"crypto";import{existsSync as ED,lstatSync as DD,realpathSync as PD}from"fs";import{dirname as kD,isAbsolute as TD,join as FD,resolve as zs}from"path";var Zr={run(e,t){let n=Og(e,t);return n.kind==="success"?n.output:void 0},runResult:Og},_D=["rev-parse","--show-toplevel","--absolute-git-dir","--git-common-dir","HEAD","HEAD^{tree}"],ou=/^[0-9a-f]{40,64}$/;function Ks(e,t,n=Zr){if(!t||t.startsWith("-")||/[\0\r\n]/.test(t))throw new Error(`Invalid Git revision ${JSON.stringify(t)}.`);let r=n.runResult(e,["rev-parse","--verify","--end-of-options",`${t}^{commit}`]);if(r.kind!=="success"||!ou.test(r.output))throw new Error(`Git revision ${JSON.stringify(t)} does not resolve to exactly one commit.`);return r.output}function h3(e,t=Zr){let n=t.run(e,["rev-parse","--show-toplevel"])?.trim();return n?Vt(n):void 0}function ei(e,t=Zr){let n=t.runResult(e,_D);if(n.kind==="success"){let r=LD(n.output);if(r)return AD(r,t)}return MD(e,t)}function LD(e){let t=e.split(`
|
|
109
|
+
`).map(c=>c.trim());if(t.length!==5)return;let[n,r,i,o,s]=t;if(!n||!r||!i||!o||!s||!ou.test(o)||!ou.test(s))return;let a=Vt(n);return{root:a,gitDir:Vt(Ws(a,r)),commonDir:Vt(Ws(a,i)),headCommit:o,treeOid:s}}function AD(e,t){let n=t.run(e.root,["status","--porcelain=v1","-z","--untracked-files=all"]);return n===void 0?void 0:{...jg(e.root,e.gitDir),commonDir:e.commonDir,repositoryId:au("repository",e.commonDir),headCommit:e.headCommit,treeOid:e.treeOid,clean:n.length===0}}function MD(e,t){let n=ND(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=Vt(Ws(i,o)),a=su(t.run(i,["rev-parse","--verify","HEAD"])),c=su(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:au("repository",s),headCommit:a,treeOid:c,clean:l.length===0}}function ND(e,t=Zr){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=Vt(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=Vt(Ws(i,o));return{kind:"worktree",identity:jg(i,s)}}function jg(e,t){return{projectRoot:e,gitDir:t,worktreeId:au("worktree",`${e}\0${t}`)}}function Bg(e,t=Zr){let n=t.run(e,["worktree","list","--porcelain","-z"]);return n===void 0?[]:OD(n)}function OD(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:Vt(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 y3(e,t,n=Zr){return su(n.run(e,t))}function Ws(e,t){return TD(t)?t:zs(e,t)}function Vt(e){try{return PD(e)}catch{return zs(e)}}function au(e,t){return wD("sha256").update(`${e}\0${t}`).digest("hex").slice(0,24)}function su(e){return e?.trim()||void 0}function Og(e,t){let n=ID("git",["-C",e,...t],{encoding:"utf-8",env:{...process.env,LC_ALL:"C"},maxBuffer:52428800,stdio:["ignore","pipe","pipe"],timeout:3e4,killSignal:"SIGKILL"});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"&&ED(zs(e)))&&!jD(e)?{kind:"not-repository"}:{kind:"error",message:i}}function jD(e){if(process.env.GIT_DIR||process.env.GIT_COMMON_DIR)return!0;let t=zs(e);for(;;){try{return DD(FD(t,".git")),!0}catch(r){let i=r.code;if(i!=="ENOENT"&&i!=="ENOTDIR")return!0}let n=kD(t);if(n===t)return!1;t=n}}var BD={"/":"namespace","#":"type",".":"term","[":"type-param",":":"meta","!":"macro"};function De(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=$D(i);return{scheme:n,manager:r,packageName:o,version:s,descriptors:c,raw:e}}function Wt(e){let t=De(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 $D(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||$g(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&&!$g(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=BD[i];o&&t.push({name:r,suffix:o}),n+=1}}return t}function $g(e){return e==="/"||e==="#"||e==="."||e==="("||e==="["||e===":"||e==="!"}function I(e){let t=De(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=HD(i);o&&r.push(o)}return r.join(":")}function HD(e){let t=e.suffix==="namespace"?UD(e.name):e.name;return t?e.suffix==="method"?`${t}()`:t:""}function UD(e){return e.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/,"").replace(/\.(py|pyi)$/,"").replace(/\.(rs)$/,"").replace(/\.(java|scala|kt|kts)$/,"").replace(/\.(rb)$/,"").replace(/\.(go)$/,"").replace(/\.(cs|vb)$/,"").replace(/\.(dart)$/,"").replace(/\.(php)$/,"").replace(/\.(c|cc|cpp|cxx|h|hpp)$/,"")}function T(e){let t=De(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 he(e){let t=De(e);if("kind"in t&&t.kind==="local")return null;let n=t;return n.descriptors[n.descriptors.length-1]?.suffix??null}function ge(e){return e.endsWith("().")||he(e)==="method"}function ae(e){let t=he(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 $n(e){return he(e)==="namespace"}var qD=/^rust-analyzer\b.*[\s/]impl#\[[^\]]+\]\[[^\]]+\]/;function Oe(e){return qD.test(e)}var GD=new Set(["test","tests","_tests"]);function ti(e){let t=De(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&&GD.has(r.name))return!0}return!1}function Hg(e,t){let n=De(e),r=De(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 Ug(e,t){let n=De(e),r=De(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 qg}from"path";var VD={".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 N(e){return VD[qg(e).toLowerCase()]??null}function un(e){return qg(e).toLowerCase()===".vue"}import{createRequire as WD}from"module";var Ke=WD(import.meta.url),ro=null,cu=!1;function Gg(){if(cu)return null;if(ro)return ro;try{return ro=Ke("tree-sitter"),ro}catch{return cu=!0,null}}function v3(e){if(e==="clojure")return"reader";let t=Gg();if(!t)return"unavailable";let n=Vg(e);if(!n)return"unavailable";try{return new t().setLanguage(n),"ast"}catch{return ni.add(e),"unavailable"}}var lu=new Map,ni=new Set;function Vg(e){if(ni.has(e))return null;let t=lu.get(e);if(t)return t;let n;try{switch(e){case"rust":n=Ke("tree-sitter-rust");break;case"typescript":n=Ke("tree-sitter-typescript").typescript;break;case"tsx":n=Ke("tree-sitter-typescript").tsx;break;case"javascript":n=Ke("tree-sitter-javascript");break;case"python":n=Ke("tree-sitter-python");break;case"java":n=Ke("tree-sitter-java");break;case"kotlin":n=Ke("tree-sitter-kotlin");break;case"scala":n=Ke("tree-sitter-scala");break;case"ruby":n=Ke("tree-sitter-ruby");break;case"c":n=Ke("tree-sitter-c");break;case"cpp":n=Ke("tree-sitter-cpp");break;case"csharp":n=Ke("tree-sitter-c-sharp");break;case"php":n=Ke("tree-sitter-php").php;break;case"vb":{let r=Ke("tree-sitter-vb-dotnet");n=r.language??r;break}case"clojure":return ni.add(e),null}}catch{return ni.add(e),null}return lu.set(e,n),n}var uu=new Map;function I3(){ro=null,cu=!1,lu.clear(),ni.clear(),uu.clear(),JD.clear()}function zD(e){let t=uu.get(e);if(t)return t;let n=Vg(e);if(!n)return null;let r=Gg();if(!r)return null;let i=new r;try{i.setLanguage(n)}catch{return ni.add(e),null}return uu.set(e,i),i}function KD(e,t){return e.parse(r=>r>=t.length?null:t.slice(r,Math.min(t.length,r+16384)))}function io(e,t){let n=zD(e);if(!n)return null;try{return KD(n,t)}catch{return null}}var JD=new Map;import{execFileSync as tP}from"child_process";import{createHash as Xg}from"crypto";import{closeSync as nP,fstatSync as Qg,lstatSync as Zg,openSync as rP,readdirSync as iP,readFileSync as oP,readlinkSync as sP,realpathSync as Ys}from"fs";import{isAbsolute as aP,join as eh,relative as cP,resolve as lP,sep as uP}from"path";import{isAbsolute as Wg,relative as YD}from"path";var Je=class extends Error{constructor(n,r){super(`refusing unsafe project file path ${JSON.stringify(n)} (${r})`);this.relativePath=n;this.reason=r;this.name="UnsafeProjectPathError"}relativePath;reason;code="SCIP_QUERY_UNSAFE_PROJECT_PATH"};function dn(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function ce(e){return e.replace(/\\/g,"/")}function ct(e,t){return dn(e)===dn(t)}function ri(e,t){let n=YD(e,t);return n===""||!n.startsWith("..")&&!Wg(n)}function Hn(e){if(!e)throw new Je(e,"empty-path");if(e.includes("\0"))throw new Je(e,"nul-byte");if(Wg(e)||/^[A-Za-z]:/.test(e)||e.startsWith("//")||e.startsWith("\\\\"))throw new Je(e,"absolute-path");let t=dn(e);if(t.split("/").some(r=>r===".."))throw new Je(e,"parent-traversal");if(!t||t===".")throw new Je(e,"empty-path");return t}import{closeSync as du,fstatSync as Js,openSync as mu,readFileSync as XD,readSync as zg}from"fs";import{createHash as QD}from"crypto";var Ce=8*1024*1024,je=64*1024*1024,Fe=512*1024*1024,Kg=256*1024*1024,zt=class extends Error{constructor(n,r,i,o,s){let a=i==="too-large"?`is ${o} bytes; the safety limit is ${s} bytes`:i==="not-regular"?"is not a regular file":"changed while it was being read";super(`${n} ${JSON.stringify(r)} ${a}`);this.inputKind=n;this.inputPath=r;this.reason=i;this.observedBytes=o;this.limitBytes=s;this.name="BoundedFileReadError"}inputKind;inputPath;reason;observedBytes;limitBytes;code="SCIP_QUERY_BOUNDED_FILE_READ"};function ye(e,t){hu(t.maxBytes);let n=String(e),r=mu(e,"r");try{let i=Js(r);Yg(i,t,n);let o=XD(r),s=Js(r);if(s.dev!==i.dev||s.ino!==i.ino||s.size!==i.size||o.byteLength!==i.size)throw new zt(t.inputKind,n,"changed-during-read",s.size,t.maxBytes);return o}finally{du(r)}}function te(e,t,n="utf8"){return ye(e,t).toString(n)}function O(e,t){return te(e,{maxBytes:Ce,inputKind:t})}function ZD(e,t){return te(e,{maxBytes:je,inputKind:t})}function eP(e,t){return te(e,{maxBytes:Kg,inputKind:t})}function fu(e,t){hu(t.maxBytes);let n=[],r=Buffer.allocUnsafe(64*1024),i=0;for(;;){let o=zg(e,r,0,r.length,null);if(o===0)break;if(i+=o,!Number.isSafeInteger(i)||i>t.maxBytes)throw new zt(t.inputKind,`file descriptor ${e}`,"too-large",i,t.maxBytes);n.push(Buffer.from(r.subarray(0,o)))}return Buffer.concat(n,i)}function pu(e,t,n="utf8"){return fu(e,t).toString(n)}function Jg(e,t){let n=mu(e,"r");try{return fu(n,t)}finally{du(n)}}function gu(e,t,n="utf8"){return Jg(e,t).toString(n)}function ii(e,t,n){hu(t.maxBytes);let r=String(e),i=mu(e,"r");try{let o=Js(i);Yg(o,t,r);let s=Buffer.allocUnsafe(Math.min(1024*1024,Math.max(1,o.size))),a=0;for(;a<o.size;){let l=zg(i,s,0,Math.min(s.length,o.size-a),a);if(l===0)break;n(s.subarray(0,l)),a+=l}let c=Js(i);if(c.dev!==o.dev||c.ino!==o.ino||c.size!==o.size||a!==o.size)throw new zt(t.inputKind,r,"changed-during-read",c.size,t.maxBytes);return a}finally{du(i)}}function Un(e,t){let n=QD("sha256");return ii(e,t,r=>n.update(r)),n.digest("hex")}function Yg(e,t,n){if(!e.isFile())throw new zt(t.inputKind,n,"not-regular",Number(e.size),t.maxBytes);if(e.size>t.maxBytes)throw new zt(t.inputKind,n,"too-large",Number(e.size),t.maxBytes)}function hu(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError(`maxBytes must be a non-negative safe integer; received ${e}`)}var Xs=64*1024*1024,oo=class extends Error{constructor(n,r,i,o){super(`${n} ${JSON.stringify(r)} is ${i} bytes; the safety limit is ${o} bytes`);this.inputKind=n;this.inputPath=r;this.observedBytes=i;this.limitBytes=o;this.name="InputTooLargeError"}inputKind;inputPath;observedBytes;limitBytes;code="SCIP_QUERY_INPUT_TOO_LARGE"};function dP(e){return[...new Set((e??[]).map(t=>t.trim()).filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function mn(e,t,n={}){let r=Hn(t),i=Ys(e),o=lP(i,...r.split("/"));if(!ri(i,o)||o===i)throw new Je(t,"outside-project");let s=Ys(o);if(!ri(i,s)||s===i)throw new Je(t,"outside-project");let a=Zg(s);if(!a.isFile())throw new Je(t,"not-a-file");let c={projectRoot:i,relativePath:r,absolutePath:s,size:a.size,mtimeMs:a.mtimeMs,device:a.dev,inode:a.ino},l=n.maxBytes??Xs;if(mP(l),c.size>l)throw new oo(n.inputKind??"project file",c.relativePath,c.size,l);return c}function Qs(e,t,n={}){let r=mn(e,t,n),i=n.maxBytes??Xs,o=rP(r.absolutePath,"r");try{let s=Qg(o);if(!s.isFile()||s.dev!==r.device||s.ino!==r.inode||s.size!==r.size)throw new Je(t,"changed-during-read");if(s.size>i)throw new oo(n.inputKind??"project file",r.relativePath,s.size,i);let a=oP(o),c=Qg(o);if(c.dev!==s.dev||c.ino!==s.ino||c.size!==s.size||a.byteLength!==s.size)throw new Je(t,"changed-during-read");return a}finally{nP(o)}}function Re(e,t,n={}){return Qs(e,t,n).toString("utf8")}function _e(e){return typeof e=="object"&&e!==null&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function tt(e,t){try{return mn(e,t),!0}catch(n){if(_e(n))return!1;throw n}}function mP(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError(`maxBytes must be a non-negative safe integer; received ${e}`)}function fP(e){return(gP(e)??hP(e)).filter(t=>t&&!th(t)).sort()}function yu(e,t={}){let n=fP(e).filter(i=>!t.language||sg(i,t.language,t.markerFiles)).filter(i=>!t.includePath||t.includePath(i)),r=Ys(e);return n.map(i=>{let o=eh(e,i);try{if(Zg(o).isSymbolicLink()){let c=Ys(o),l=cP(r,c);if(l===".."||l.startsWith(`..${uP}`)||aP(l))throw new Error("external symlink");let u=sP(o);return{path:i,size:Buffer.byteLength(u),hash:Xg("sha256").update("symlink\0").update(u).digest("hex")}}let s=Xg("sha256"),a=ii(o,{inputKind:"project fingerprint input",maxBytes:Xs},c=>s.update(c));return{path:i,size:a,hash:s.digest("hex")}}catch{return{path:i,size:-1,hash:"unreadable"}}})}function so(e,t,n){return{version:2,languages:[...t].sort(),pnpmWorkspaces:n.typescriptProjectMode!=="workspace"&&n.pnpmWorkspaces===!0,typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:dP(n.typescriptProjects),clojureConfigPath:pP(n.clojureConfigPath),files:yu(e)}}function pP(e){return e?.trim()||void 0}function gP(e){try{return tP("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"],timeout:3e4,killSignal:"SIGKILL"}).split(`
|
|
110
|
+
`).filter(Boolean)}catch{return null}}function hP(e){let t=[],n=[""];for(;n.length>0;){let r=n.pop(),i=r?eh(e,r):e,o;try{o=iP(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=r?`${r}/${s.name}`:s.name;if(s.isDirectory()){th(a)||n.push(a);continue}t.push(a)}}return t}function th(e){let t=e.split("/");return e==="meta.json"||t.some(n=>yP.has(n))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var yP=new Set([".git","node_modules",".scipquery-cache",".scipquery-generations",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]);var bP=$("source-text",{clearGroups:["whole-project","source-file"]}),SP=$("source-lines",{clearGroups:["whole-project","source-file"]});function k(e,t){let n=t.replace(/\\/g,"/");return bP.get(e,n,()=>{try{return Re(e.config.projectRoot,n,{inputKind:"indexed source file"})}catch(r){if(_e(r))return"";throw r}})}function Le(e,t){let n=t.replace(/\\/g,"/");return SP.get(e,n,()=>{let r=k(e,n);return r?r.split(`
|
|
111
|
+
`):[]})}var xP=/^\s*(?:\/\/|#|\/\*+|\*)\s*scip-query[\s:-]*ignore(?:[\s:-]+(dead(?:-code)?|stale|wrapper|passthrough|drift|extract|similar|twin))?\b/i;function ao(e){let t=xP.exec(e);return t?t[1]??"":null}function Zs(e,t,n){return nh(e,t,n).length>0}function ea(e,t,n,r){let i=r.toLowerCase();return nh(e,t,n).some(o=>o.toLowerCase()===i)}function nh(e,t,n){if(n<=0)return[];let r=Le(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=ao(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 bu}from"path";import{parse as CP}from"@vue/compiler-sfc";var RP=jn("vue-sfc-units");function oi(e,t){let n=oh(t),r=k(e,n);return RP.get(e,n,r,()=>Su(e,n,r))}function oh(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function vP(e){let t=e?.toLowerCase();return!t||t==="js"||t==="javascript"||t==="jsx"?"javascript":t==="ts"||t==="typescript"?"typescript":t==="tsx"?"tsx":null}function yr(e){return!e||e.body.length===0?0:e.body.split(`
|
|
112
|
+
`).length}function Su(e,t,n){let r={relativePath:t,template:null,scripts:[],styles:[],customBlocks:[],errors:[]};if(!n)return r;let i;try{i=CP(n,{filename:t})}catch(s){return r.errors.push(ih(s)),r}r.errors.push(...i.errors.map(ih));let{descriptor:o}=i;return o.template&&(r.template=ta(e,t,"template",o.template)),o.script&&r.scripts.push(rh(e,t,o.script,!1)),o.scriptSetup&&r.scripts.push(rh(e,t,o.scriptSetup,!0)),r.styles=o.styles.map(s=>ta(e,t,"style",s)),r.customBlocks=o.customBlocks.map(s=>ta(e,t,"custom",s)),r.errors.push(...[r.template,...r.scripts,...r.styles,...r.customBlocks].flatMap(s=>s?.errors??[])),r}function rh(e,t,n,r){let i=ta(e,t,"script",n);return{...i,kind:"script",setup:r,astLanguage:vP(i.lang)}}function ta(e,t,n,r){let i=wP(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=IP(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=k(e,c),u=l?Math.max(0,l.split(`
|
|
113
|
+
`).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 IP(e,t){let n=t.split(/[?#]/,1)[0];if(!n||n.startsWith("/")||n.includes("://"))return null;let r=oh(bu.normalize(bu.join(bu.dirname(e),n)));return r===".."||r.startsWith("../")?null:r}function wP(e){return{...e}}function ih(e){return e instanceof Error?e.message:String(e)}function na(e,t,n){let i=Su(e,t,n).scripts.filter(s=>s.astLanguage&&s.body.length>0),o=i[0]?.astLanguage;return o?{body:i.map(s=>`${`
|
|
114
|
+
`.repeat(s.startLine)}${s.body}`).join(`
|
|
115
|
+
`),startLine:0,language:o}:null}var sh=hr("ast-trees",{clearGroups:["whole-project","source-file"]});function X(e,t){if(un(t))return EP(e,t);let n=N(t);if(!n)return null;let r=k(e,t);return r?sh.get(e,t,r,()=>io(n,r)):null}function EP(e,t){let n=k(e,t);return n?sh.get(e,t,n,()=>{let r=na(e,t,n);if(!r)return null;let i=`
|
|
116
|
+
`.repeat(r.startLine)+r.body;return io(r.language,i)}):null}function si(e,t){let n=DP(e,t);if(!n)return null;let r=br(n);return r?{calleeLeaf:r,memberAccess:PP(n),line:e.startPosition.row}:null}function DP(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 PP(e){switch(e.type){case"field_expression":case"member_expression":case"attribute":return!0;default:return!1}}function br(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?br(t):null}case"generic_function":{let t=e.childForFieldName("function")??e.namedChild(0);return t?br(t):null}case"scoped_identifier":{let t=e.childForFieldName("name")??e.namedChild(e.namedChildCount-1);return t?br(t):null}case"super":case"self":case"this":return null;default:return null}}var kP=[nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),nt("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"}),ra("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"}),ra("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"}),ra("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"}),ra("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 ue(e){let t=new Map;return{kind:e.kind,read(n,r,i){let o=!1,s=0,a;if(V()){let c=Ge(n);if(c){let l=`${c}\0${r}\0${i}`;a=t.get(l),a||(a=no(["evidence-product-file-read-v1",e.kind,c,r,i]),t.set(l,a))}}return E("evidence-product.file.read",()=>{let c=pg(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){gg(n,e.kind,r,i,e.serialize(o))},writeBatch(n,r){hg(n,r.map(i=>({kind:e.kind,relativePath:i.relativePath,contentHash:i.contentHash,payload:e.serialize(i.value)})))}}}function Sr(e){let t=new Map;return{kind:e.kind,read(n,r,i){let o=!1,s=0,a;if(V()){let c=`${i}\0${r}`;a=t.get(c),a||(a=no(["evidence-product-project-read-v1",e.kind,i,r]),t.set(c,a))}return E("evidence-product.project.read",()=>{let c=yg(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){bg(n,e.kind,r,i,e.serialize(o))}}}function Q(e){let t=kP.find(n=>n.kind===e);if(!t)throw new Error(`missing evidence product manifest entry for ${e}`);return t.invalidation}function nt(e,t){return{scope:"file",kind:e,invalidation:{scope:"file",...t}}}function ra(e,t){return{scope:"project",kind:e,invalidation:{scope:"project",...t}}}function co(e){return e.type==="comment"||e.type==="line_comment"||e.type==="block_comment"}var TP=new Set(["function_declaration","method_definition","method_signature","function_signature"]);function ia(e,t){let n=_P(e,t);if(n)return{name:n.name,startLine:n.definitionNode.startPosition.row,endLine:n.definitionNode.endPosition.row,paramCount:lh(n.functionNode),params:ah(n.functionNode),paramsEndLine:ch(n.functionNode),isLiteralPassthrough:uh(n.functionNode,t)};if(!FP(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:lh(e),params:ah(e),paramsEndLine:ch(e),isLiteralPassthrough:uh(e,t)}:null}function dh(e){return e.namedChildren.find(t=>t.type==="parameters"||t.type==="formal_parameters")}function ah(e){let t=dh(e);if(!t)return[];let n=[];for(let r of t.namedChildren){if(co(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 ch(e){let t=dh(e);return t?t.endPosition.row:e.startPosition.row}function FP(e,t){return t==="rust"?e==="function_item"||e==="function_signature_item":t==="python"?e==="function_definition":t==="typescript"||t==="tsx"||t==="javascript"?TP.has(e):!1}function _P(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 lh(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)co(r)||(n+=1);return n}function uh(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=>!co(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=>!co(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 LP=new Set(["identifier","type_identifier","field_identifier"]),AP=new Set(["identifier"]),MP=new Set(["identifier","property_identifier","type_identifier","shorthand_property_identifier","shorthand_property_identifier_pattern"]),NP=new Set(["rust","python"]),OP=/\{([^{}]*)\}/g,jP=/\b([A-Za-z_][\w]*)\b/g;function mh(e,t){return BP(t).has(e.type)}function fh(e,t){return NP.has(t)&&e.type==="string_content"}function xu(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 BP(e){return e==="rust"?LP:e==="python"?AP:MP}function ph(e,t){let n=e.startPosition.row;for(let r of e.text.matchAll(OP)){let i=r[1]??"";for(let o of i.matchAll(jP))o[1]&&t(o[1],n)}}var $P=[/\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],HP=/^#!?\[\s*serde\s*\(/,UP=/^#!?\[\s*schemars\s*\(/,qP=/^#!?\[\s*validate\s*\(/,GP=new Set(["invoke","invokeTauriCommand","listen","once","emit","subscribe","dispatch","sendCommand","callRust"]);function gh(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=br(r);if(!i||!GP.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 hh(e,t){let n=HP.test(e),r=UP.test(e),i=qP.test(e);if(!(!n&&!r&&!i))for(let o of $P){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 yh(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 VP=new Map([["defn","function"],["defn-","function"],["defmacro","macro"],["defmacro-","macro"],["defmethod","method"]]),Cu=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 bh(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===`
|
|
117
|
+
`){s+=1,a+=1;continue}if(/\s|,/.test(l)){a+=1;continue}if(l===";"){a=sa(e,a);continue}if(l==='"'){let p=uo(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,WP(p,{callables:t,callSites:n,clojureMembers:r,recordIdentifier:c}),o[o.length-1]?.children.push(p)),a+=1;continue}if(Ru(l)){a+=1;continue}let u=s,d=a;for(;a<e.length&&!vu(e[a]);)a+=1;let m=e.slice(d,a);if(!m)continue;let f={text:m,line:u};zP(o[o.length-1],f),c(yt(m),u)}return{language:"clojure",callables:t,callSites:n,clojureMembers:r,typeContainerMap:new Map,identifierLineMap:i,identifiersByLine:QP(i),fileIdentifiers:new Set(i.keys()),rustAttrReferencedNames:new Set,crossLanguageDispatchNames:new Set}}function WP(e,t){if(e.kind!=="("||e.headTokens.length===0)return;let n=e.headTokens[0],r=yt(n.text),i=VP.get(n.text);if(i){let s=e.headTokens[1];if(s){let a=yt(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(KP(e,t),!r||Cu.has(n.text)||Cu.has(r)||r.startsWith(":"))return;let o=XP(n.text);t.callSites.push({calleeLeaf:o.leaf,calleeQualifier:o.qualifier,calleeText:o.text,memberAccess:!1,line:n.line})}function zP(e,t){e&&(e.headTokens.length<2&&e.headTokens.push(t),e.tokens.length<200&&e.tokens.push(t))}function KP(e,t){let n=yt(e.tokens[0]?.text??"");if(n==="defprotocol"){let r=yt(e.tokens[1]?.text??"");if(!r)return;for(let i of oa(e))lo(t,r,"protocol",i,"protocol-method");return}if(n==="defrecord"||n==="deftype"){let r=yt(e.tokens[1]?.text??"");if(!r)return;let i=n==="defrecord"?"record":"type",o=n==="defrecord"?"record-method":"type-method";for(let s of oa(e))lo(t,r,i,s,o);return}if(n==="extend-type"){let r=yt(e.tokens[1]?.text??"");if(!r)return;for(let i of oa(e))lo(t,r,"extension",i,"extension-method");return}if(n==="extend-protocol"){let r=yt(e.tokens[1]?.text??"");for(let i of oa(e)){r&&lo(t,r,"extension",i,"extension-method");let o=YP(e,i.startLine);o&&o!==r&&lo(t,o,"extension",i,"extension-method")}}}function oa(e){return e.children.filter(JP)}function JP(e){if(e.kind!=="(")return!1;let t=yt(e.tokens[0]?.text??"");return!!(t&&!Cu.has(t)&&!t.startsWith(":"))}function lo(e,t,n,r,i){let o=r.tokens[0],s=yt(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 YP(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=yt(i.text);o&&!o.startsWith(":")&&(n=o)}return n}function yt(e){return e.replace(/^#?['`~@]+/,"").split("/").pop()?.replace(/^\./,"")??""}function XP(e){let t=e.replace(/^#?['`~@]+/,""),n=t.lastIndexOf("/"),r=yt(t);if(n<=0)return{leaf:r,text:t};let i=t.slice(0,n);return{leaf:r,qualifier:i,text:t}}function sa(e,t){let n=t;for(;n<e.length&&e[n]!==`
|
|
118
|
+
`;)n+=1;return n}function uo(e,t,n){let r=t+1,i=n;for(;r<e.length;){let o=e[r];if(o==="\\"){r+=2;continue}if(o===`
|
|
119
|
+
`&&(i+=1),r+=1,o==='"')break}return{index:r,line:i}}function Ru(e){return e==="'"||e==="`"||e==="~"||e==="@"||e==="^"||e==="#"}function vu(e){return/\s|,/.test(e)||e==="("||e===")"||e==="["||e==="]"||e==="{"||e==="}"||e==='"'||e===";"}function QP(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 Sh=3,ZP=hr("source-facts",{clearGroups:["whole-project","source-file"]}),Iu=ue({kind:"source-facts",invalidation:Q("source-facts"),serialize:nk,deserialize:rk});function K(e,t){return wu(e,t).facts}function wu(e,t){let n=k(e,t);if(!n)return{facts:null};let r=ek(e,t,n);return r?ZP.get(e,t,n,()=>tk(e,t,r,n)):{facts:null}}function ek(e,t,n){return un(t)?na(e,t,n)?.language??null:N(t)}function tk(e,t,n,r){let i=pe(e,t,r),o=Iu.read(e,t,i);if(o&&o.language===n)return{facts:o};if(n==="clojure"){let c=bh(r);return Iu.write(e,t,i,c),{facts:c}}let s=X(e,t);if(!s)return{facts:null,unavailable:{language:n,reason:"parser-unavailable"}};let a=ok(s,n);return Iu.write(e,t,i,a),{facts:a}}function nk(e){let t={version:Sh,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 rk(e){try{let t=JSON.parse(e);if(t.version!==Sh||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:xu(n),fileIdentifiers:new Set(n.keys()),rustAttrReferencedNames:new Set(t.rustAttrReferencedNames),crossLanguageDispatchNames:new Set(t.crossLanguageDispatchNames)}}catch{return null}}function Eu(e,t,n,r){let i=K(e,t);return i?ik(i,n,r)?.isLiteralPassthrough??!0:!0}function mo(e,t){return t.relativePath.includes(".clj-kondo/hooks/")?!0:K(e,t.relativePath)?.callables.find(r=>r.startLine===t.startLine&&r.endLine===t.endLine)?.clojureKind==="macro"}function ik(e,t,n){return e.callables.find(r=>r.startLine===t&&r.endLine===n)??null}function ok(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=ia(l,t);u&&n.push(u);let d=si(l,t);d&&r.push(d),gh(l,t,o),t==="rust"&&(l.type==="attribute_item"||l.type==="inner_attribute_item")&&hh(l.text,i),mh(l,t)&&a(l.text,l.startPosition.row),fh(l,t)&&ph(l,a);for(let m of l.children)c(m)};return c(e.rootNode),{language:t,callables:n,callSites:r,clojureMembers:[],typeContainerMap:yh(e,t),identifierLineMap:s,identifiersByLine:xu(s),fileIdentifiers:new Set(s.keys()),rustAttrReferencedNames:i,crossLanguageDispatchNames:o}}var xh=new Set(["rust","typescript","tsx","javascript","python","clojure"]);function Du(e,t){let n=K(e,t);return!n||!xh.has(n.language)?null:n.callables.map(r=>({name:r.name,startLine:r.startLine,endLine:r.endLine}))}function qn(e,t){let n=K(e,t);return!n||!xh.has(n.language)?null:n.callSites}function Pu(e,t){return K(e,t)?.typeContainerMap??new Map}import{ElementTypes as ak,NodeTypes as ku,parse as ck}from"@vue/compiler-dom";import{parse as OZ}from"@vue/compiler-sfc";var sk=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 aa(e){return e.length<=2||sk.has(e)}function ca(e,t){return e.split(t).filter(Boolean).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}var lk=jn("vue-template-facts"),uk=new Set(["component","keep-alive","slot","suspense","teleport","template","transition","transition-group"]),dk=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"]),mk=new Set(["div","span","template"]),fk=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 la(e,t){let n=t.replace(/\\/g,"/"),r=k(e,n);return lk.get(e,n,r,()=>pk(n,oi(e,n).template))}function pk(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=ck(t.body,{comments:!1})}catch{return n}let i=new Set,o=s=>{s.trim()&&i.add(s)};return Rh(r.children,t.startLine,n,o),n.structuralTokens=[...i].sort(),n}function Rh(e,t,n,r){for(let i of e)if(i.type===ku.ELEMENT)gk(i,t,n,r),Rh(i.children,t,n,r);else if(i.type===ku.INTERPOLATION){r("interpolation");let o=Tu(i.content);o&&vh(o,t,i.loc.start.line,n,r)}}function gk(e,t,n,r){let i=Rk(e.tag),o={tag:e.tag,normalized:i,kind:Ck(e),startLine:ai(t,e.loc.start.line),endLine:ai(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),mk.has(e.tag)||r(`native:${e.tag}`));for(let s of e.props)hk(s,t,n,r)}function hk(e,t,n,r){if(e.type===ku.ATTRIBUTE){let a=e.value?.content??null,c=Ch("prop",e.name,a,t,e.loc.start.line,e.loc.end.line);n.props.push(c),r(`prop:${e.name}`);return}let i=bk(e),o=Tu(e.exp),s=Ch(yk(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&&vh(o,t,e.loc.start.line,n,r)}function Ch(e,t,n,r,i,o){return{kind:e,name:t,value:n,startLine:ai(r,i),endLine:ai(r,o)}}function yk(e){switch(e){case"bind":case"model":return"prop";case"on":return"event";case"slot":return"slot";default:return"directive"}}function bk(e){let t=Tu(e.arg);return t||e.name}function Tu(e){if(!e)return null;let t=("content"in e&&typeof e.content=="string"?e.content:e.loc.source).trim();return t||null}function vh(e,t,n,r,i){for(let o of Sk(e)){let s={name:o,startLine:ai(t,n),endLine:ai(t,n)};r.expressionIdentifiers.push(s),i(`id:${o}`)}}function Sk(e){let t=new Set,n=xk(e),r=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,i;for(;i=r.exec(n);){let o=i[0];fk.has(o)||aa(o)||/^[A-Z_]+$/.test(o)||t.add(o)}return[...t].sort()}function xk(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 Ck(e){let t=e.tag;return e.tagType===ak.COMPONENT?"component":uk.has(t)?"builtin":dk.has(t)?"native":/^[A-Z]/.test(t)||t.includes("-")?"component":"native"}function Rk(e){return ca(e,/[-_:]/)}function ai(e,t){return e+Math.max(0,t-1)}import{createRequire as _k}from"module";import{existsSync as Rr}from"fs";import{basename as Ih,dirname as lt,extname as fn,join as bt,relative as xr,resolve as Be,sep as Lk}from"path";function A(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
|
|
120
|
+
FROM documents
|
|
121
|
+
WHERE 1 = 1
|
|
122
|
+
${e.pathExclusionsFor("documents")}
|
|
123
|
+
${n}
|
|
124
|
+
${r}
|
|
125
|
+
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{existsSync as _u,readdirSync as vk,statSync as Ik}from"fs";import{join as ci,relative as wk}from"path";function li(e){let t=Ek(e)??Tk(e);if(!t||t.length===0)return[];let n=[],r=new Set;for(let i of t)for(let o of Lu(e,i)){if(r.has(o))continue;r.add(o);let s=Fk(e,o);s&&n.push(s)}return n}function Ek(e){let t=ci(e,"pnpm-workspace.yaml");if(!_u(t))return null;try{return Dk(O(t,"pnpm workspace manifest"))}catch{return null}}function Dk(e){let t=[],n=!1;for(let r of e.split(/\r?\n/)){let i=Pk(r);if(!n){/^packages\s*:\s*$/.test(i.trim())&&(n=!0);continue}let o=/^\s+-\s*(.+)$/.exec(i);if(o){let s=kk(o[1].trim());s&&t.push(s);continue}if(i.trim()!=="")break}return t}function Pk(e){let t=e.indexOf("#");return t===-1?e:e.slice(0,t)}function kk(e){return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e}function Tk(e){let t=ci(e,"package.json");if(!_u(t))return null;try{let n=JSON.parse(O(t,"workspace package manifest"));return n.workspaces?Array.isArray(n.workspaces)?n.workspaces:n.workspaces.packages??[]:null}catch{return null}}function Lu(e,t){if(!t||t.startsWith("!")||t.includes("node_modules"))return[];if(!t.includes("*")){let s=ci(e,t);return Fu(s)?[s]:[]}let n=t.indexOf("*"),r=t.slice(0,n).replace(/\/$/,""),i=t.slice(n+1).replace(/^\//,""),o=ci(e,r||".");return Fu(o)?vk(o).map(s=>ci(o,s,i)).filter(Fu):[]}function Fu(e){try{return Ik(e).isDirectory()}catch{return!1}}function Fk(e,t){let n=ci(t,"package.json");if(!_u(n))return null;try{let r=JSON.parse(O(n,"workspace package manifest"));return typeof r.name!="string"||r.name.length===0?null:{name:r.name,relativeDir:wk(e,t).replace(/\\/g,"/"),exports:r.exports}}catch{return null}}var Ak=ee("indexed-paths",{clearGroups:[]}),Mk=ee("indexed-path-digest",{clearGroups:[]}),Nk=$("tsconfig-alias-config",{clearGroups:["whole-project"]}),Ok=$("tsconfig-alias-config-for-dir",{clearGroups:["whole-project"]}),jk=_k(import.meta.url),fo;function Bk(){if(fo!==void 0)return fo;try{fo=jk("typescript")}catch{fo=null}return fo}var $k=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"],Hk=ee("workspace-packages",{clearGroups:["whole-project"]}),Cr=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue"],ua=[".py",".pyi"],ut=[".java",".scala",".kt",".kts"],da=[".rs"],ma=[".rb"],fa=[".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx"],Gn=[".cs",".vb"],pa=[".dart"],vr=[".php"],ui=[".clj",".cljs",".cljc"],Uk=new Set(Cr),Au=new Set(ua),wh=new Set(ut),Mu=new Set(da),Nu=new Set(ma),Eh=new Set(fa),Dh=new Set(Gn),Ou=new Set(pa),Ph=new Set(vr),kh=new Set(ui),qk=[{extensions:Cr,lookup:Uk},{extensions:ua,lookup:Au},{extensions:ut,lookup:wh},{extensions:da,lookup:Mu},{extensions:ma,lookup:Nu},{extensions:fa,lookup:Eh},{extensions:Gn,lookup:Dh},{extensions:pa,lookup:Ou},{extensions:vr,lookup:Ph},{extensions:ui,lookup:kh}];function pn(e,t){return t.has(fn(e).toLowerCase())}function Gk(e){return pn(e,Au)}function Vk(e){return pn(e,wh)}function Wk(e){return pn(e,Mu)}function zk(e){return pn(e,Nu)}function Kk(e){return pn(e,Eh)}function Jk(e){return pn(e,Dh)}function Th(e){return fn(e).toLowerCase()===".vb"}function Yk(e){return pn(e,Ou)}function Xk(e){return pn(e,Ph)}function Qk(e){return pn(e,kh)}function ju(e){let t=fn(e).toLowerCase();for(let n of qk)if(n.lookup.has(t))return n.extensions;return Cr}function Zk(e){return Vk(e)||Jk(e)||Xk(e)}function dt(e,t,n){return Gk(t)?di(e,t,n):Wk(t)?gn(e,t,n):zk(t)?ga(e,t,n):Kk(t)?ha(e,t,n):Zk(t)?Pe(e,n.replace(/\\/g,"."),ju(t)):Yk(t)?ya(e,t,n):Qk(t)?Bu(e,n):eT(e,t,n)}function eT(e,t,n){if(!n.startsWith(".")&&!n.startsWith("/"))return tT(e,t,n)??rT(e,n);let r=lt(bt(e.config.projectRoot,t)),i=Be(r,n),o=hn(e);for(let s of Hu(i)){let a=ce(xr(e.config.projectRoot,s));if(o.has(a)||Rr(s))return a}return ce(xr(e.config.projectRoot,i))}function tT(e,t,n){let r=lT(e,t);if(!r)return null;let i=hn(e);for(let o of nT(r,n)){let s=Be(r.baseUrl,o);for(let a of Hu(s)){let c=ce(xr(e.config.projectRoot,a));if(i.has(c)||Rr(a))return c}}return null}function nT(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 rT(e,t){let n=oT(iT(e),t);if(!n)return null;let r=hn(e);for(let i of sT(n)){let o=Be(e.config.projectRoot,n.pkg.relativeDir,i);for(let s of Hu(o)){let a=ce(xr(e.config.projectRoot,s));if(r.has(a)||Rr(s))return a}}return null}function iT(e){return Hk.get(e,()=>li(e.config.projectRoot))}function oT(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 sT(e){let t=[],n=aT(e.pkg.exports,e.subpath);if(n){let r=cT(n);r&&t.push(r)}return t.push(e.subpath?`src/${e.subpath}`:"src/index"),t}function aT(e,t){if(!e||typeof e!="object")return null;let n=t===""?".":`./${t}`;return Fh(e[n])}function Fh(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=Fh(t[n]);if(r)return r}return null}function cT(e){let t=e.replace(/^\.\//,"");return t.startsWith("dist/")?`src/${t.slice(5)}`:null}function lT(e,t){let n=ce(lt(t));return Ok.get(e,n,()=>uT(e,n))}function uT(e,t){let n=Bk();if(!n)return null;let r=Be(e.config.projectRoot),i=Be(r,t);for(;i===r||i.startsWith(r+Lk);){for(let s of $k){let a=bt(i,s);if(!Rr(a))continue;let c=Nk.get(e,a,()=>dT(n,a));if(c)return c}let o=lt(i);if(o===i)break;i=o}return null}function dT(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,lt(t)),i=r.options.paths;return!i||Object.keys(i).length===0?null:{baseUrl:r.options.baseUrl?Be(lt(t),r.options.baseUrl):lt(t),paths:i}}catch{return null}}function di(e,t,n){let r=hn(e),i;if(n.startsWith(".")){let o=n.match(/^(\.+)(.*)$/);if(!o)return null;let s=o[1].length,a=o[2].replace(/^\./,""),c=lt(bt(e.config.projectRoot,t));for(let l=1;l<s;l++)c=lt(c);i=a?Be(c,a.replace(/\./g,"/")):c}else i=Be(e.config.projectRoot,n.replace(/\./g,"/"));for(let o of mT(i)){let s=ce(xr(e.config.projectRoot,o));if(r.has(s)||Rr(o))return s}return null}function gn(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=lt(bt(e.config.projectRoot,t)),o;return r.startsWith("crate::")?o=Be(e.config.projectRoot,"src",r.slice(7).replace(/::/g,"/")):r.startsWith("self::")?o=Be(i,r.slice(6).replace(/::/g,"/")):o=Be(lt(i),r.slice(7).replace(/::/g,"/")),$u(e,fT(o))}function ga(e,t,n){let r=lt(bt(e.config.projectRoot,t)),i=Be(r,n);return $u(e,pT(i))}function ha(e,t,n){let r=lt(bt(e.config.projectRoot,t)),i=[Be(r,n),Be(e.config.projectRoot,n),Be(e.config.projectRoot,"include",n),Be(e.config.projectRoot,"src",n)];return $u(e,i)}function Pe(e,t,n){let r=hn(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=>Ih(u)===`${s}${c}`);if(l)return l}let a=[...r].filter(c=>n.includes(fn(c).toLowerCase())).filter(c=>c.includes(`/${o}/`)||c.includes(`/${s}/`)).sort((c,l)=>c.localeCompare(l));return a.length===1?a[0]:null}function ya(e,t,n){let r=hn(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=ce(c.startsWith("lib/")?c:`lib/${c}`);return r.has(l)?l:null}let i=lt(bt(e.config.projectRoot,t)),o=Be(i,n);for(let s of gT(o)){let a=ce(xr(e.config.projectRoot,s));if(r.has(a)||Rr(s))return a}return null}function Bu(e,t){let n=t.replace(/-/g,"_").replace(/\./g,"/"),r=hn(e);for(let i of ui){let o=`${n}${i}`,s=[...r].find(a=>a.endsWith(o));if(s)return s}for(let i of ui){let o=[...r].find(s=>Ih(s)===`${n.split("/").pop()}${i}`);if(o)return o}return null}function mT(e){let t=fn(e);return Au.has(t)?[e]:[`${e}.py`,`${e}.pyi`,bt(e,"__init__.py"),bt(e,"__init__.pyi")]}function $u(e,t){let n=hn(e);for(let r of t){let i=ce(xr(e.config.projectRoot,r));if(n.has(i)||Rr(r))return i}return null}function fT(e){let t=fn(e);return Mu.has(t)?[e]:[`${e}.rs`,bt(e,"mod.rs")]}function pT(e){let t=fn(e);return Nu.has(t)?[e]:[`${e}.rb`,bt(e,"index.rb")]}function gT(e){let t=fn(e);return Ou.has(t)?[e]:[`${e}.dart`,e]}function Hu(e){let t=fn(e),n=new Set;if(t){n.add(e);for(let r of Cr)n.add(e.slice(0,-t.length)+r)}else for(let r of Cr)n.add(`${e}${r}`),n.add(bt(e,`index${r}`));return[...n]}function hn(e){return Ak.get(e,()=>new Set(A(e,{includeIgnored:!1}).map(ce)))}function Uu(e){return Mk.get(e,()=>Ee([...hn(e)].sort().join(`
|
|
126
|
+
`)))}import{readdirSync as hT}from"fs";import{execFileSync as yT}from"child_process";import{extname as ba,join as bT}from"path";var ST=[".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"],l9=[".vue"],_h=[".tsx",".jsx"],Lh=[".vue"],xT=[..._h,...Lh],CT=new Set(_h),RT=new Set(Lh),Ah=new Set(ST.map(e=>e.toLowerCase())),vT=[...Ah].sort().join(","),Mh=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 rt(e,t={}){let n=t.includeIndexed??!0,r=t.includeAuxiliary??!0,i=t.extensions?.map(c=>c.toLowerCase()),o=i?new Set(i):Ah,s=i?[...o].sort().join(","):vT,a=`${n?"1":"0"}|${r?"1":"0"}|${s}`;return IT.get(e,a,()=>{let c=new Set;if(n)for(let l of A(e,{includeIgnored:!1}))o.has(ba(l).toLowerCase())&&c.add(l);if(r)for(let l of wT(e.config.projectRoot,o))e.isIgnored(l)||n&&c.has(l)||c.add(l);return[...c].sort()})}function Sa(e,t={}){let n=!1,r=!1;for(let i of rt(e,{extensions:xT})){if(t.scope&&!i.includes(t.scope))continue;let o=ba(i).toLowerCase();if(n||=CT.has(o),r||=RT.has(o),n&&r)break}return{react:n,vue:r}}var IT=$("source-files",{clearGroups:[]});function wT(e,t){return ET(e,t)??PT(e,t)}function ET(e,t){try{let n=yT("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e,encoding:"utf-8",timeout:1e4,killSignal:"SIGKILL",stdio:["ignore","pipe","ignore"]}),r=new Set;for(let i of n.split(`
|
|
127
|
+
`)){let o=i.trim();o&&(DT(o)||t.has(ba(o).toLowerCase())&&r.add(o))}return r}catch{return null}}function DT(e){return e.split("/").some(t=>Mh.has(t))}function PT(e,t){let n=new Set,r=i=>{let o=i?bT(e,i):e,s;try{s=hT(o,{withFileTypes:!0})}catch{return}for(let a of s)if(!Mh.has(a.name)){if(a.isDirectory()){r(i?`${i}/${a.name}`:a.name);continue}t.has(ba(a.name).toLowerCase())&&n.add(i?`${i}/${a.name}`:a.name)}};return r(""),n}var kT=new Set(["ref","shallowRef","reactive","computed","watch","watchEffect"]),TT=new Set(["onBeforeMount","onMounted","onBeforeUpdate","onUpdated","onBeforeUnmount","onUnmounted","onActivated","onDeactivated","onErrorCaptured"]),FT=new Set(["axios","fetch","runRequest","useAsyncData","useFetch","useResource"]),_T=new Set(["defineEmits","defineExpose","defineModel","defineOptions","defineProps","withDefaults"]),LT=new Set(["catch","for","function","if","return","switch","while"]);function Ca(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+=yr(n),n.external&&(t.externalLineCount+=yr(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(...OT(n));let r=io(n.astLanguage,n.body);r?MT(n,r.rootNode,t):NT(n,t)}return AT(t),t.externalScriptPaths=Oh(t.externalScriptPaths),t}function AT(e){e.composables=mi(e,"composable"),e.stores=mi(e,"store"),e.reactivity=mi(e,"reactivity"),e.lifecycle=mi(e,"lifecycle"),e.requests=mi(e,"request"),e.macros=mi(e,"macro")}function mi(e,t){return Oh(e.calls.filter(n=>n.categories.includes(t)).map(n=>n.name))}function MT(e,t,n){let r=new Set,i=new Set,o=s=>{let a=ia(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=si(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:Nh(c.calleeLeaf),setup:e.setup}))}for(let l of s.children)o(l)};o(t)}function NT(e,t){for(let n of e.body.matchAll(/\b([A-Za-z_$][\w$]*)\s*\(/g)){let r=n[1];!r||LT.has(r)||t.calls.push({name:r,sourcePath:e.sourcePath,line:e.startLine+xa(e.body,n.index??0),categories:Nh(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+xa(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+xa(e.body,n.index??0);t.functions.push({name:r,sourcePath:e.sourcePath,startLine:i,endLine:i,setup:e.setup})}}function OT(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+xa(e.body,n.index??0);for(let s of jT(r))t.push({local:s,source:i,sourcePath:e.sourcePath,line:o,setup:e.setup})}return t}function jT(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 Nh(e){let t=["call"];return/^use[A-Z0-9_]/.test(e)&&t.push("composable"),/^use[A-Z0-9_].*Store$/.test(e)&&t.push("store"),kT.has(e)&&t.push("reactivity"),TT.has(e)&&t.push("lifecycle"),FT.has(e)&&t.push("request"),_T.has(e)&&t.push("macro"),t}function xa(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 Oh(e){return[...new Set(e)].sort()}var BT=new Set(["in","key","of"]),$T=new Set(["computed","defineEmits","defineProps","reactive","ref","watch","watchEffect"]),HT=jn("vue-component-behavior-profiles");function jh(e,t={}){let n=rt(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=>qu(e,i)).filter(i=>(t.minTemplateTokens===void 0||i.templateTokens.size>=t.minTemplateTokens)&&(t.minBehaviorTokens===void 0||i.behaviorTokens.size>=t.minBehaviorTokens))}function qu(e,t){let n=t.replace(/\\/g,"/"),r=k(e,n),i=HT.get(e,n,r,()=>UT(e,n,r));return GT(i)}function UT(e,t,n){let r=oi(e,t),i=la(e,t),o=Ca(r),s=zT(i),a=i.expressionIdentifiers.map(y=>y.name).filter(y=>!s.includes(y)).filter((y,h,C)=>C.indexOf(y)===h).sort(),c=i.componentTags.map(y=>y.normalized).filter((y,h,C)=>C.indexOf(y)===h).sort(),l=n?n.split(`
|
|
128
|
+
`).length:0,u=yr(r.template),d=o.lineCount,m=r.styles.reduce((y,h)=>y+yr(h),0),f=r.customBlocks.reduce((y,h)=>y+yr(h),0),{lines:p,paths:g}=qT(e,t,o);return{file:t,sfc:r,templateFacts:i,scriptFacts:o,templateTokens:new Set(i.structuralTokens),behaviorTokens:WT(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 qT(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=dt(e,a.sourcePath,a.source);!c||c===t||r.add(c)}let i=[...r].sort();return{lines:i.reduce((s,a)=>{let c=k(e,a);return s+(c?c.split(`
|
|
129
|
+
`).length:0)},0),paths:i}}function GT(e){let t=VT(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 VT(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 WT(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($T.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 zT(e){let t=new Set;for(let n of e.directives)if(n.name==="for"&&n.value)for(let r of KT(n.value))t.add(r);for(let n of e.slots)if(n.value)for(let r of Bh(n.value))t.add(r);return[...t].sort()}function KT(e){let t=/^(.*?)\s+(?:in|of)\s+/.exec(e.trim());return t?Bh(t[1]??""):[]}function Bh(e){let t=[];for(let n of e.matchAll(/\b[A-Za-z_$][\w$]*\b/g)){let r=n[0];BT.has(r)||t.push(r)}return t}import{extname as JT}from"path";function Kt(e){return typeof e=="object"&&e!==null}function Ye(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")?e:null}var YT=[".tsx",".jsx"],$h=new Set(["useActionState","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","useReducer","useRef","useState","useSyncExternalStore","useTransition"]),XT=new Set(["useEffect","useInsertionEffect","useLayoutEffect"]),QT=new Set(["useActionState","useOptimistic","useReducer","useRef","useState"]),ZT=new Set(["useLocation","useNavigate","useParams","useSearchParams","useTranslation"]),eF=new Set(["axios","fetch","gql","graphql","mutate","query","request","useMutation","useQuery","useSuspenseQuery"]),tF=new Set(["add","apply","cancel","change","clear","close","create","delete","fetch","filter","handle","load","open","refresh","remove","render","reset","save","select","submit","toggle","update"]),nF=new Set(["aria-hidden","className","clipRule","d","fill","fillRule","height","role","stroke","strokeLinecap","strokeLinejoin","strokeWidth","style","viewBox","width","xmlns"]),rF=jn("react-component-behavior-profiles"),Hh=ue({kind:"react-component-behavior-profiles",invalidation:Q("react-component-behavior-profiles"),serialize:aF,deserialize:cF});function Vh(e,t={}){let n=rt(e,{extensions:YT}).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=>Vu(e,i)).filter(i=>(t.minJsxTokens===void 0||i.jsxTokens.size>=t.minJsxTokens)&&(t.minBehaviorTokens===void 0||i.behaviorTokens.size>=t.minBehaviorTokens))}function Vu(e,t){let n=t.replace(/\\/g,"/"),r=k(e,n);return rF.get(e,n,r,()=>iF(e,n,r)).map(sF)}function iF(e,t,n){let r=pe(e,t,n),i=Hh.read(e,t,r);if(i)return i;let o=oF(e,t);return Hh.write(e,t,r,o),o}function oF(e,t){let n=uF(t);if(!n)return[];let r=X(e,t);if(!r)return[];let i=Le(e,t).length;return dF(r.rootNode,n).filter(s=>s.kind==="hook"||Wu(s.bodyNode)).map(s=>{let a=bF(s.bodyNode),c=vF(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:yn(a.componentNames),nativeTags:yn(a.nativeTags),propNames:yn(a.propNames),eventNames:yn(a.eventNames),hookNames:yn(c.hookNames),requestNames:yn(c.requestNames),stateNames:yn(c.stateNames),effectNames:yn(c.effectNames),handlerNames:yn(c.handlerNames)}})}function sF(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 aF(e){return JSON.stringify(e.map(t=>({...t,jsxTokens:[...t.jsxTokens],behaviorTokens:[...t.behaviorTokens]})))}function cF(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=[];for(let r of t){let i=lF(r);if(!i)return null;n.push(i)}return n}catch{return null}}function lF(e){if(!Kt(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:C}=e;if(typeof t!="string"||typeof n!="string"||r!=="component"&&r!=="hook"||!Ra(i)||!Ra(o)||!Ra(s)||!Ra(a))return null;let b={jsxTokens:Ye(c),behaviorTokens:Ye(l),componentNames:Ye(u),nativeTags:Ye(d),propNames:Ye(m),eventNames:Ye(f),hookNames:Ye(p),requestNames:Ye(g),stateNames:Ye(y),effectNames:Ye(h),handlerNames:Ye(C)};return Object.values(b).some(S=>S===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 Ra(e){return typeof e=="number"&&Number.isFinite(e)}function uF(e){let t=JT(e).toLowerCase();return t!==".tsx"&&t!==".jsx"?null:N(e)}function dF(e,t){let n=[],r=new Set,i=o=>{let s=mF(o);if(s&&(!hF(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 mF(e){if(e.type==="class_declaration"){let o=Gu(e);if(!o||!/^[A-Z]/.test(o))return null;let s=fF(e);return!s||!pF(e)&&!Wu(s)?null:{name:o,kind:"component",node:e,bodyNode:s}}if(e.type==="function_declaration"){let o=Gu(e);return!o||!Uh(o)?null:{name:o,kind:qh(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=po(t);if(!r||!n||!Uh(r))return null;let i=gF(n);return i?{name:r,kind:qh(r),node:e,bodyNode:i}:null}function fF(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 pF(e){return/\b(?:React\.)?(?:Pure)?Component\b/.test(e.text)}function Uh(e){return/^[A-Z]/.test(e)||/^use[A-Z0-9_]/.test(e)}function qh(e){return/^use[A-Z0-9_]/.test(e)?"hook":"component"}function gF(e){if(e.type==="arrow_function"||e.type==="function_expression")return e;if(e.type!=="call_expression")return null;let t=yF(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 hF(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 Gu(e){return po(e.childForFieldName("name")??e.namedChild(0))}function yF(e){let t=e.childForFieldName("function")??e.namedChild(0);return t?t.text.split(".").pop()??t.text:null}function Wu(e){return e.type.startsWith("jsx_")?!0:e.namedChildren.some(Wu)}function bF(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"?SF(r,t):r.type==="jsx_element"&&r.text.trimStart().startsWith("<>")?t.tokens.add("jsx:fragment"):r.type==="jsx_expression"?xF(r,t):r.type==="jsx_fragment"&&t.tokens.add("jsx:fragment");for(let i of r.children)n(i)};return n(e),t}function SF(e,t){let n=CF(e),r=!1;if(n){let i=Gh(n),o=i==="Fragment"||i==="React.Fragment";r=PF(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=RF(i);if(!o)continue;let s=Gh(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 nF.has(s)||(t.propNames.add(s),t.tokens.add(`${r?"prop":"native-prop"}:${s}`))}else i.type==="jsx_spread_attribute"&&t.tokens.add(Wh(i))}function xF(e,t){let n=e.text;/^\{\s*\.\.\./.test(n)&&t.tokens.add(Wh(e)),zh(e)&&t.tokens.add("jsx:conditional"),(n.includes(".map(")||n.includes(".flatMap("))&&t.tokens.add("jsx:list");for(let r of kF(n))aa(r)||t.tokens.add(`binding:${r}`)}function Wh(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 zh(e){return e.type==="ternary_expression"||e.type==="conditional_expression"?!0:e.namedChildren.some(zh)}function CF(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 RF(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 vF(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=si(i,t);o&&IF(o.calleeLeaf,n)}else if(i.type==="variable_declarator")EF(i,n);else if(i.type==="function_declaration"){let o=Gu(i);o&&Kh(o,n)}for(let o of i.namedChildren)r(o)};return r(e),n}function IF(e,t){/^use[A-Z0-9_]/.test(e)&&(t.hookNames.add(e),!$h.has(e)&&!ZT.has(e)&&t.tokens.add(`hook:${e}`)),$h.has(e)&&t.tokens.add(`react-hook:${e}`),XT.has(e)&&(t.effectNames.add(e),t.tokens.add(`effect:${e}`)),QT.has(e)&&t.tokens.add(`state-hook:${e}`),wF(e)&&(t.requestNames.add(e),t.tokens.add(`request:${e}`))}function wF(e){if(eF.has(e))return!0;let t=/^use([A-Z0-9_].*)$/.exec(e)?.[1];return t?/(Query|Mutation|Fetch|Resource)$/.test(t):!1}function EF(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=>po(a)),s=po(o);s&&(t.stateNames.add(s),t.tokens.add(`state:${s}`))}let i=po(n);i&&Kh(i,t)}function Kh(e,t){let n=DF(e);!n||!tF.has(n)||(t.handlerNames.add(e),t.tokens.add(`handler:${e}`),t.tokens.add(`handler-verb:${n}`))}function DF(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 PF(e){return/^[A-Z]/.test(e)||e.includes(".")}function Gh(e){return e.replace(/^this\./,"").replace(/\$/g,".")}function po(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 kF(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 yn(e){return[...e].sort()}function St(e){return{capability:(t,n)=>TF(t,n),reactProfiles:(t={})=>Vh(e,t),reactProfilesForFile:t=>Vu(e,t),vueProfiles:(t={})=>jh(e,t),vueProfileForFile:t=>qu(e,t),vueTemplateFacts:t=>la(e,t),vueScriptFacts:t=>Ca(oi(e,t))}}function TF(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 Ir(e,t,n={}){let r=K(e,t);if(!r)return[];let i=[];if(n.includeCrossLanguageDispatchNames)for(let o of r.crossLanguageDispatchNames)i.push({name:o,kind:"cross-language-dispatch",occurrences:1});if(n.includeRustAttributeNames&&r.language==="rust")for(let o of r.rustAttrReferencedNames)i.push({name:o,kind:"rust-attribute",occurrences:1});return i}import{basename as Xh}from"path";function U(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function xt(e){return e.replace(/'''[\s\S]*?'''/g,Vn).replace(/"""[\s\S]*?"""/g,Vn).replace(/#.*$/gm,Vn).replace(/\/\/.*$/gm,Vn).replace(/\/\*[\s\S]*?\*\//g,Vn).replace(/`(?:\\[\s\S]|[^`])*`/g,Vn).replace(/'(?:\\.|[^'\\\r\n])*'/g,Vn).replace(/"(?:\\.|[^"\\\r\n])*"/g,Vn)}function ho(e){return Yh(e,{maskStrings:!1})}function Jh(e){return Yh(e,{maskStrings:!0})}function Yh(e,t){let n="",r=0,i=e.length;for(;r<i;){if(e[r]==="/"&&e[r+1]==="/"){let s=e.indexOf(`
|
|
130
|
+
`,r),a=s===-1?i:s;n+=zu(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+=zu(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]===`
|
|
131
|
+
`)break;a+=1}n+=t.maskStrings?zu(e,r,a):e.slice(r,a),r=a;continue}n+=o,r+=1}return n}function zu(e,t,n){let r="";for(let i=t;i<n;i+=1)r+=e[i]===`
|
|
132
|
+
`?`
|
|
133
|
+
`:" ";return r}function Vn(e){return e.replace(/[^\r\n]/g," ")}var r8=hr("stripped-lines",{clearGroups:["whole-project","source-file"]});On({name:"stripped-source-singleton",groups:["whole-project","source-file"],clearAll:()=>{va=null,go=""},clearFile:()=>{va=null,go=""}});var va=null,go="";function FF(e){return va===e||(va=e,go=xt(e)),go}function Wn(e,t,n){let r=FF(e);return`${r.slice(0,t)}${" ".repeat(n-t)}${r.slice(n)}`}function it(e,t){return new RegExp(`\\b${U(t)}\\b`,"m").test(e)}function fi(e,t){let n=new Set,r=new RegExp(`\\b${U(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 yo(e){let t=0;for(let n of e)n==="("&&(t+=1),n===")"&&(t-=1);return t}var _F=new Set(["identifier","type_identifier","property_identifier","shorthand_property_identifier","field_identifier"]);function ot(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 mt(e,t){for(let n of e.namedChildren)if(n.type===t)return n;return null}function ke(e,t){let n=new Set,r=(i,o)=>{let s=o||t.has(i.type);!s&&_F.has(i.type)&&n.add(i.text);for(let a of i.children)r(a,s)};return r(e.rootNode,!1),n}function Mt(e,t,n,r,i,o,s){return{importedName:i,localName:o,sourcePath:s??Pe(e,r,ju(t)),kind:"named",used:it(n,o),usedMembers:[]}}function ve(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 bn(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 wr(e,t){return{importedName:e,localName:null,sourcePath:t,kind:"side-effect",used:!0,usedMembers:[]}}function Er(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 Ct(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=Wn(e,i.index,i.index+o.length);for(let a of n(i,s))r.push(a)}return r}function Rt(e,t,n,r){let i=X(e,t);if(i){let o=n(i);if(o)return o}return r()}function Ia(e,t,n,r){let i=X(e,t),o=N(t),s=o?n[o]:void 0;return i&&s?s(i):r()}function Qh(e,t,n){return Rt(e,t,r=>AF(e,t,r),()=>LF(e,t,n))}function LF(e,t,n){return Ct(n,/^[ \t]*#include\s+[<"]([^">]+)[">]\s*$/gm,(r,i)=>{let o=r[1]?.trim();if(!o)return[];let s=Xh(o).replace(/\.[^.]+$/,"");return[bn(o,s,ha(e,t,o),it(i,s))]})}function AF(e,t,n){let r=ke(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=Xh(s).replace(/\.[^.]+$/,"");i.push(ve(s,a,ha(e,t,s),r))}return i}var MF=new Set([":require",":require-macros",":use"]),Yu=String.raw`A-Za-z0-9_$*+!?.<>=-`;function ey(e,t,n){let r=WF(n);if(!r)return[];let i=VF(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=vt(s.children[0]);if(a){if(MF.has(a)){for(let c of jF(s.children.slice(1)))o.push(...OF(e,c,i));continue}if(a===":import")for(let c of $F(s.children.slice(1)))o.push(c)}}return o}function NF(e){return e.type==="list"&&vt(e.children[0])==="ns"}function OF(e,t,n){let r=Bu(e,t.namespace),i=t.alias??t.namespace,o=UF(n,i),s=[{importedName:t.namespace,localName:i,sourcePath:r,kind:"namespace",used:t.refers.length>0||t.referAll||o.length>0||qF(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:GF(n,a),usedMembers:[]});return s}function jF(e){return e.flatMap(t=>wa(t,null))}function wa(e,t){if(e.type==="atom")return e.text.startsWith(":")?[]:[{namespace:Ju(t,e.text),alias:null,refers:[],referAll:!1}];if(e.type==="vector")return e.children.length>0&&vt(e.children[0])===null?e.children.flatMap(n=>wa(n,t)):BF(e,t);if(e.type==="list"&&e.children.length>0){let n=vt(e.children[0]);return n?!n||n.startsWith(":")?[]:e.children.slice(1).flatMap(r=>wa(r,Ju(t,n))):e.children.flatMap(r=>wa(r,t))}return[]}function BF(e,t){let n=vt(e.children[0]);if(!n||n.startsWith(":"))return[];let r={namespace:Ju(t,n),alias:null,refers:[],referAll:!1};for(let i=1;i<e.children.length;i+=1){let o=vt(e.children[i]);if(!o?.startsWith(":"))continue;let s=e.children[i+1];if((o===":as"||o===":as-alias")&&s){r.alias=vt(s),i+=1;continue}o===":refer"&&s&&(vt(s)===":all"?r.referAll=!0:(s.type==="vector"||s.type==="list")&&r.refers.push(...s.children.map(vt).filter(HF)),i+=1)}return[r]}function $F(e){let t=[];for(let n of e){if(n.type==="atom"){let i=n.text.split(".").pop()??n.text;t.push(bn(i,i,null,!0));continue}if(n.type!=="vector")continue;let r=vt(n.children[0]);if(r)for(let i of n.children.slice(1)){let o=vt(i);o&&t.push(bn(`${r}.${o}`,o,null,!0))}}return t}function Ju(e,t){return e?`${e}.${t}`:t}function vt(e){return e?.type==="atom"?e.text:null}function HF(e){return!!(e&&!e.startsWith(":"))}function UF(e,t){let n=new Set,r=new RegExp(`${Xu()}${U(t)}\\s*/\\s*([${Yu}]+)`,"g");for(let i of e.matchAll(r)){let o=i[1];o&&n.add(o)}return[...n]}function qF(e,t){return new RegExp(`${Xu()}${U(t)}\\s*/`,"m").test(e)}function GF(e,t){return new RegExp(`${Xu()}${U(t)}(?![${Yu}])`,"m").test(e)}function Xu(){return`(?<![${Yu}])`}function VF(e,t,n){let r="",i=0;for(;i<e.length;){if(i>=t&&i<n){r+=e[i]===`
|
|
134
|
+
`?`
|
|
135
|
+
`:" ",i+=1;continue}let o=e[i];if(o===";"){let s=sa(e,i);r+=Zh(e.slice(i,s)),i=s;continue}if(o==='"'){let s=uo(e,i,0).index;r+=Zh(e.slice(i,s)),i=s;continue}r+=o,i+=1}return r}function WF(e){let t=0;for(;t<e.length&&(t=Qu(e,t),!(t>=e.length));){let n=Ea(e,t);if(!n){t+=1;continue}if(NF(n.form))return n.form;t=n.index}return null}function Ea(e,t){let n=Qu(e,t);if(e.startsWith("#?@",n)||e.startsWith("#?",n))return zF(e,n);if(e.startsWith("#_",n)){let i=Ea(e,n+2);return i?{form:{type:"atom",text:"",start:n,end:i.index},index:i.index}:null}for(;Ru(e[n]);)n+=1;let r=e[n];return r?r==="("?Ku(e,n,"list",")"):r==="["?Ku(e,n,"vector","]"):r==="{"?Ku(e,n,"map","}"):r==='"'?{form:{type:"atom",text:"",start:n,end:uo(e,n,0).index},index:uo(e,n,0).index}:JF(e,n):null}function zF(e,t){let n=e.startsWith("#?@",t)?3:2,r=Ea(e,t+n);return r?{form:{type:"list",children:r.form.type==="list"||r.form.type==="vector"||r.form.type==="map"?KF(r.form.children):[],start:t,end:r.index},index:r.index}:null}function KF(e){let t=[];for(let n=0;n<e.length;n+=2){let r=vt(e[n]),i=e[n+1];r?.startsWith(":")&&i&&t.push(i)}return t}function Ku(e,t,n,r){let i=[],o=t+1;for(;o<e.length;){if(o=Qu(e,o),e[o]===r)return{form:{type:n,children:i,start:t,end:o+1},index:o+1};let s=Ea(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 JF(e,t){let n=t;for(;n<e.length&&!vu(e[n]);)n+=1;return{form:{type:"atom",text:e.slice(t,n),start:t,end:n},index:n}}function Qu(e,t){let n=t;for(;n<e.length;){let r=e[n];if(/\s|,/.test(r)){n+=1;continue}if(r===";"){n=sa(e,n);continue}break}return n}function Zh(e){return e.replace(/[^\r\n]/g," ")}function ty(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=Wn(n,i.index,i.index+a.length);r.push({importedName:o,localName:s,sourcePath:ya(e,t,o),kind:s?"namespace":"side-effect",used:s?it(c,s):!0,usedMembers:s?fi(c,s):[]})}return r}function ny(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:ya(e,t,o)})}return r}function ry(e,t,n){return Ia(e,t,{csharp:r=>XF(e,t,r),vb:r=>YF(e,t,r)},()=>{let r=Th(t)?/^[ \t]*Imports\s+(.+?)\s*$/gm:/^[ \t]*using\s+(.+?)\s*;$/gm;return Ct(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[Mt(e,t,o,u,d,m,Pe(e,u,Gn))]})})}function YF(e,t,n){let r=ke(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(ve(u,d,Pe(e,l,Gn),r,c?"namespace":"named"))}return i}function XF(e,t,n){let r=ke(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(ve(u,d,Pe(e,l,Gn),r,a?"namespace":"named"))}return i}var QF=$("vue-non-script-identifiers",{clearGroups:["whole-project","source-file"]});function iy(e,t){return QF.get(e,t,()=>{let n=new Set,r=k(e,t);if(!r)return n;let o=r.replace(/<script\b[^>]*>[\s\S]*?<\/script>/g,s=>s.replace(/[^\r\n]/g," ")).replace(/<!--[\s\S]*?-->/g,s=>s.replace(/[^\r\n]/g," ")).replace(/\/\*[\s\S]*?\*\//g,s=>s.replace(/[^\r\n]/g," "));for(let s of o.matchAll(/[A-Za-z_$][\w$]*/g))n.add(s[0]);return n})}function Zu(e,t,n){return Rt(e,t,r=>e_(e,t,r),()=>ZF(e,t,n))}function ZF(e,t,n){return d_(n).flatMap(r=>m_(e,t,r.clause,r.specifier,r.start,r.end,n))}function e_(e,t,n){let r=t_(e,t,n),i=[];for(let o of n.rootNode.descendantsOfType("import_statement"))i.push(...n_(e,t,n,o,r));return i}function t_(e,t,n){let r=ke(n,new Set(["import_statement"]));if(un(t))for(let i of iy(e,t))r.add(i);return r}function n_(e,t,n,r,i){let o=a_(r);if(!o)return[];let s=dt(e,t,o),a=mt(r,"import_clause");return a?r_(n,a,s,i,c_(r.text)):[wr("*",s)]}function r_(e,t,n,r,i){let o=[];for(let s of t.namedChildren)if(s.type==="identifier")o.push(i_(s.text,n,r,i));else if(s.type==="namespace_import"){let a=o_(e,s,n,r,i);a&&o.push(a)}else s.type==="named_imports"&&o.push(...s_(s,n,r,i));return o}function i_(e,t,n,r){return ve("default",e,t,n,"default",{isTypeOnly:r})}function o_(e,t,n,r,i){let s=mt(t,"identifier")?.text??"";if(!s)return null;let a=u_(e,s);return Er("*",n,{localName:s,usedMembers:a,isTypeOnly:i,used:a.length>0||r.has(s)})}function s_(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(ve(c,l,t,n,"named",{isTypeOnly:r||l_(o.text)}))}return i}function a_(e){let t=mt(e,"string");if(!t)return null;let n=mt(t,"string_fragment");return n?n.text:null}function c_(e){return/^\s*import\s+type\b/.test(e)}function l_(e){return/^\s*type\b/.test(e.trim())}function u_(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 d_(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 m_(e,t,n,r,i,o,s){let a=dt(e,t,r),c=Wn(s,i,o);return n?f_(n).map(u=>({...u,sourcePath:a})).map(u=>{if(u.kind==="namespace"){let d=fi(c,u.localName);return Er(u.importedName,u.sourcePath,{localName:u.localName,usedMembers:d,used:d.length>0||it(c,u.localName),isTypeOnly:u.isTypeOnly})}return u.kind==="side-effect"?wr(u.importedName,u.sourcePath):bn(u.importedName,u.localName??"",u.sourcePath,u.localName?it(c,u.localName):!1,u.kind,[],{isTypeOnly:u.isTypeOnly})}):[wr("*",a)]}function f_(e){let t=e.trim(),n=/^type\b/.test(t),r=t.replace(/^type\s+/,""),[i,o]=p_(r),s=[];return i&&s.push(...oy(i,n)),o&&s.push(...oy(o,n)),s}function oy(e,t){let n=e.trim();if(!n)return[];if(n.startsWith("{")){let r=n.slice(1,-1).trim();return r?ot(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 p_(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 ed(e,t,n){let r=X(e,t);return r?x_(e,t,r):g_(e,t,n)}function g_(e,t,n){return[...h_(e,t,n),...y_(e,t,n),...b_(e,t,n)]}function h_(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=ot(s).map(d=>S_(d.trim())).filter(d=>!!d),l=pi(n,o.index),u=pi(n,o.index+o[0].length-1);r.push({kind:"named",sourcePath:dt(e,t,a),names:c,startLine:l,endLine:u})}return r}function y_(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=pi(n,o.index),c=pi(n,o.index+o[0].length-1);r.push({kind:"star-as",sourcePath:dt(e,t,s),names:[],startLine:a,endLine:c})}return r}function b_(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=pi(n,o.index),c=pi(n,o.index+o[0].length-1);r.push({kind:"star",sourcePath:dt(e,t,s),names:[],startLine:a,endLine:c})}return r}function S_(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 pi(e,t){let n=0;for(let r=0;r<t&&r<e.length;r++)e.charCodeAt(r)===10&&n++;return n}function x_(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("export_statement")){let o=C_(e,t,i);if(o===void 0)continue;let s=i.startPosition.row,a=i.endPosition.row,c=R_(i,o,s,a);r.push(c)}return r}function C_(e,t,n){let r=mt(n,"string");if(!r)return;let i=mt(r,"string_fragment");if(i)return dt(e,t,i.text)}function R_(e,t,n,r){let i=mt(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 mt(e,"namespace_export")?{kind:"star-as",sourcePath:t,names:[],startLine:n,endLine:r}:{kind:"star",sourcePath:t,names:[],startLine:n,endLine:r}}function sy(e,t,n){return Ia(e,t,{java:r=>v_(e,t,r),kotlin:r=>I_(e,t,r),scala:r=>w_(e,t,r)},()=>Ct(n,/^[ \t]*import\s+(?:static\s+)?(.+?)\s*;?$/gm,(r,i)=>{let o=r[1]?.trim();return o?E_(e,t,o,i):[]}))}function v_(e,t,n){let r=ke(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(Er("*",Pe(e,l,ut)));continue}let u=l.split(".").pop()??l;i.push(ve(u,u,Pe(e,l,ut),r))}return i}function I_(e,t,n){let r=ke(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(Er("*",Pe(e,s.text,ut)));continue}let l=s.text,u=l.split(".").pop()??l,m=c?.namedChild(0)?.text??u;i.push(ve(u,m,Pe(e,l,ut),r))}return i}function w_(e,t,n){let r=ke(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(Er("*",Pe(e,c,ut)));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(ve(p,g,Pe(e,`${c}.${p}`,ut),r))}else if(d.type==="identifier"){let m=d.text;i.push(ve(m,m,Pe(e,`${c}.${m}`,ut),r))}continue}let l=a[a.length-1]?.text??c,u=a.slice(0,-1).map(d=>d.text).join(".")||c;i.push(ve(l,l,Pe(e,u&&a.length>1?`${u}.${l}`:c,ut),r))}return i}function E_(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 ot(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[Mt(e,t,r,m,u,d)]})}return[Mt(e,t,r,n,n.split(".").pop()??n,n.split(".").pop()??n)]}function cy(e,t,n){return Rt(e,t,r=>D_(e,t,r),()=>Ct(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?ot(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[Mt(e,t,i,u,d,m,Pe(e,u.replace(/\\/g,"."),vr))]}):[]}))}function D_(e,t,n){let r=ke(n,new Set(["namespace_use_declaration"])),i=[],o=(s,a,c)=>{i.push(ve(a,c,Pe(e,s.replace(/\\/g,"."),vr),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}=ay(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}=ay(c,"");l&&o(d,l,u)}}return i}function ay(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 uy(e,t,n){return Rt(e,t,r=>P_(e,t,r),()=>T_(n).flatMap(r=>__(e,t,r,n)))}function P_(e,t,n){let r=ke(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=ly(s);if(!a)continue;let c=di(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=k_(s);if(a===null)continue;let c=di(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=ly(u);d&&i.push({importedName:d.qualifiedName,localName:d.localName,sourcePath:c,kind:"named",used:r.has(d.localName),usedMembers:[]})}}return i}function ly(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 k_(e){if(e.type==="dotted_name")return e.text;if(e.type==="relative_import"){let t=mt(e,"import_prefix")?.text??"",n=mt(e,"dotted_name")?.text??"";return`${t}${n}`}return null}function T_(e){let t=e.split(`
|
|
136
|
+
`),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=yo(o);for(;i+1<t.length&&(u>0||c.trimEnd().endsWith("\\"));){i++;let m=t[i];c+=`
|
|
137
|
+
${m}`,l+=1+m.length,u+=yo(m),r+=m.length+1}let d=F_(c);d&&n.push({...d,start:a,end:l})}return n}function F_(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 __(e,t,n,r){let i=Wn(r,n.start,n.end),o=n.clause.replace(/\n/g," ").trim();if(n.kind==="import")return ot(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=di(e,t,m),g=fi(i,f);return[{importedName:m,localName:f,sourcePath:p,kind:"namespace",used:it(i,f)||g.length>0,usedMembers:g}]});let s=n.module?di(e,t,n.module):null,a=[];for(let c of ot(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:it(i,m),usedMembers:[]})}return a}import{basename as L_}from"path";function dy(e,t,n){return Rt(e,t,r=>M_(e,t,r),()=>A_(e,t,n))}function A_(e,t,n){return Ct(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"?ga(e,t,s):null;if(a){let c=my(s);return[bn(c,c,a,it(i,c))]}return[wr(s,a)]})}function M_(e,t,n){let r=ke(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"?ga(e,t,d):null;if(m){let f=my(d);i.push(ve(f,f,m,r))}else i.push(wr(d,m))}return i}function my(e){return ca(L_(e).replace(/\.[^.]+$/,""),/_/)}function fy(e,t,n){return Rt(e,t,r=>N_(e,t,r),()=>Ct(n,/^[ \t]*use\s+(.+?)\s*;$/gm,(r,i)=>{let o=r[1]?.trim();return o?O_(e,t,o,i):[]}))}function N_(e,t,n){let r=ke(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 bo(s,"")){if(!a.importedName||a.importedName==="*")continue;let c=gn(e,t,a.qualifiedName)??gn(e,t,a.qualifiedName.split("::").slice(0,-1).join("::"));i.push(ve(a.importedName,a.localName,c,r))}}return i}function bo(e,t){switch(e.type){case"identifier":case"super":case"crate":{let n=e.text;return[{qualifiedName:gi(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:gi(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=gi(t,n.text),o=[];for(let s of r.namedChildren)o.push(...bo(s,i));return o}case"use_list":{let n=[];for(let r of e.namedChildren)n.push(...bo(r,t));return n}case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=bo(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:gi(t,`${r}::*`),importedName:"*",localName:"*"}]}default:return[]}}function gi(e,t){return e?t?`${e}::${t}`:e:t}function O_(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 ot(d).flatMap(m=>{let f=m.trim();if(!f)return[];if(f==="self"){let b=u.split("::").filter(Boolean).pop();return b?[Mt(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(),C=`${u}::${y}`.replace(/::::/g,"::");return[Mt(e,t,r,C,y.split("::").pop()??y,h,gn(e,t,u))]})}let[o,s]=i.split(/\s+as\s+/),a=o?.trim()??i,c=(s??a.split("::").pop()??a).trim(),l=gn(e,t,a)??gn(e,t,a.split("::").slice(0,-1).join("::"));return[Mt(e,t,r,a,a.split("::").pop()??a,c,l)]}function py(e,t,n){let r=X(e,t);if(r)return j_(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(...$_(e,t,s))}return i}function j_(e,t,n){let r=[];for(let i of n.rootNode.descendantsOfType("use_declaration")){if(!B_(i))continue;let o=i.namedChildren.find(s=>s.type!=="visibility_modifier");if(o)for(let s of bo(o,""))s.importedName&&r.push(td(e,t,s.qualifiedName))}return r}function B_(e){for(let t of e.children)if(t.type==="visibility_modifier"&&t.text.startsWith("pub"))return!0;return!1}function $_(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 ot(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[td(e,t,l)]})}return[td(e,t,r)]}function td(e,t,n){return{specifier:n,sourcePath:gn(e,t,n)??gn(e,t,n.split("::").slice(0,-1).join("::"))}}function zn({language:e,extensions:t,imports:n,parseImports:r}){return{language:e,extensions:t,capabilities:{imports:n},parseImports:r}}function gy(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 H_={language:"javascript",extensions:Cr,capabilities:{imports:"ast-with-regex-fallback",reExports:"ast-with-regex-fallback"},parseImports:Zu,parseReExports:ed},U_=zn({language:"python",extensions:ua,imports:"ast-with-regex-fallback",parseImports:uy}),q_=zn({language:"jvm",extensions:ut,imports:"ast-dispatch-with-regex-fallback",parseImports:sy}),G_={language:"rust",extensions:da,capabilities:{imports:"ast-with-regex-fallback",exports:"ast-with-regex-fallback"},parseImports:fy,parseExports:py},V_=zn({language:"ruby",extensions:ma,imports:"ast-with-regex-fallback",parseImports:dy}),W_=zn({language:"c/cpp",extensions:fa,imports:"ast-with-regex-fallback",parseImports:Qh}),z_=zn({language:"dotnet",extensions:Gn,imports:"ast-dispatch-with-regex-fallback",parseImports:ry}),K_={language:"dart",extensions:pa,capabilities:{imports:"regex-only",exports:"regex-only"},parseImports:ty,parseExports:ny},J_=zn({language:"php",extensions:vr,imports:"ast-with-regex-fallback",parseImports:cy}),Y_=zn({language:"clojure",extensions:ui,imports:"regex-only",parseImports:ey}),hy=[H_,U_,q_,G_,V_,W_,z_,K_,J_,Y_];function Da(e){return gy(hy,e)}function C7(e){return hy.find(n=>n.language===e)?.capabilities??null}var nd={clearGroups:["whole-project","source-file"]},X_=$("source-imports",nd),Q_=$("source-exports",nd),Z_=$("source-reexports",nd),yy=ue({kind:"source-imports",invalidation:Q("source-imports"),serialize:eL,deserialize:tL}),by=ue({kind:"source-reexports",invalidation:Q("source-reexports"),serialize:nL,deserialize:rL});function Sn(e,t){let n=ce(t);return Z_.get(e,n,()=>{let r=Da(n);if(!r?.parseReExports)return[];let i=k(e,n);if(!i)return[];let o=pe(e,n,i),s=Uu(e),a=by.read(e,n,o);if(a?.resolutionFingerprint===s)return a.reExports;let c=r.parseReExports(e,n,i);return by.write(e,n,o,{resolutionFingerprint:s,reExports:c}),c})}function re(e,t){let n=ce(t);return X_.get(e,n,()=>{let r=Da(n);if(!r)return[];let i=k(e,n);if(!i)return[];let o=pe(e,n,i),s=Uu(e),a=yy.read(e,n,o);if(a?.resolutionFingerprint===s)return a.imports;let c=r.parseImports(e,n,i);return yy.write(e,n,o,{resolutionFingerprint:s,imports:c}),c})}function Pa(e,t){let n=ce(t);return Q_.get(e,n,()=>{let r=Da(n);if(!r?.parseExports)return[];let i=k(e,n);return i?r.parseExports(e,n,i):[]})}function eL(e){return JSON.stringify(e)}function tL(e){try{let t=JSON.parse(e);return!Kt(t)||typeof t.resolutionFingerprint!="string"||!Array.isArray(t.imports)?null:{resolutionFingerprint:t.resolutionFingerprint,imports:t.imports}}catch{return null}}function nL(e){return JSON.stringify(e)}function rL(e){try{let t=JSON.parse(e);return!Kt(t)||typeof t.resolutionFingerprint!="string"||!Array.isArray(t.reExports)?null:{resolutionFingerprint:t.resolutionFingerprint,reExports:t.reExports}}catch{return null}}function It(e){return{forFile(t,n){return Sy(e,t,n)},forFiles(t,n){let r=new Map;for(let i of t)r.set(i,Sy(e,i,n));return r}}}function Sy(e,t,n){let r={file:t},i=n.facts||n.identifiers;if(n.text&&(r.text=k(e,t)),n.lines&&(r.lines=Le(e,t)),n.ast&&(r.ast=X(e,t)),n.imports&&(r.imports=re(e,t)),n.reexports&&(r.reexports=Sn(e,t)),i){let o=wu(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 Dr(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
|
|
138
|
+
FROM global_symbols gs
|
|
139
|
+
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
140
|
+
JOIN documents d ON der.document_id = d.id
|
|
141
|
+
WHERE ${t.where}
|
|
142
|
+
${e.pathExclusionsFor("d")}
|
|
143
|
+
${Cy(t.orderBy)}
|
|
144
|
+
${Ry(t.limit)}`,...t.params??[])}function hi(e,t){return e.all(`SELECT
|
|
145
|
+
gs.id,
|
|
146
|
+
gs.symbol,
|
|
147
|
+
c.document_id,
|
|
148
|
+
MIN(c.start_line) AS start_line,
|
|
149
|
+
0 AS start_char,
|
|
150
|
+
MAX(c.end_line) AS end_line,
|
|
151
|
+
0 AS end_char,
|
|
152
|
+
d.relative_path,
|
|
153
|
+
gs.display_name,
|
|
154
|
+
gs.documentation
|
|
155
|
+
FROM global_symbols gs
|
|
156
|
+
JOIN mentions m ON m.symbol_id = gs.id
|
|
157
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
158
|
+
JOIN documents d ON c.document_id = d.id
|
|
159
|
+
WHERE m.role = 1
|
|
160
|
+
AND ${t.where}
|
|
161
|
+
${e.pathExclusionsFor("d")}
|
|
162
|
+
GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path, gs.display_name, gs.documentation
|
|
163
|
+
${Cy(t.orderBy)}
|
|
164
|
+
${Ry(t.limit)}`,...t.params??[])}function Cy(e){return e?`ORDER BY ${e}`:""}function Ry(e){return typeof e=="number"?`LIMIT ${e}`:""}function xn(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 Cn(e){if(!e)return null;let t=xy(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(xy(r)??r).replace(/\n/g," ")}function xy(e){return/^```(?:\w+)?\s*\n?([\s\S]*?)\n?```/.exec(e.trimStart())?.[1]?.trim()||null}function iL(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 Kn(e,t,n={}){let r=new Map;for(let o of t)e.length>0&&!iL(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 oL=$("file-definitions",{clearGroups:["definition-catalog"]}),sL=$("file-function-like-definitions",{clearGroups:["definition-catalog"]}),vy=new WeakMap;function Z(e,t,n={}){return n.includeClassMemberFallbacks?rd(e,t,void 0,{includeClassMemberFallbacks:!0}):oL.get(e,t,()=>{let r=Dy(e,t);if(r)return r;let i=rd(e,t),o=Ge(e),s=It(e).forFile(t,{text:!0}).text;return o&&s&&Ey.write(e,t,pe(e,t,s),{projectFingerprint:o,definitions:i.map(a=>({...a}))}),i})}function aL(e,t){return sL.get(e,t,()=>{let n=Dy(e,t);return n?n.filter(r=>r.isFunctionLike):rd(e,t,r=>r.isFunctionLike)})}var Ey=ue({kind:"file-definitions",invalidation:Q("file-definitions"),serialize:cL,deserialize:lL});function Dy(e,t){let n=Ge(e);if(!n)return null;let r=It(e).forFile(t,{text:!0}).text;if(!r)return null;let i=Ey.read(e,t,pe(e,t,r));return i?uL(i,n,t):null}function cL(e){return JSON.stringify(e)}function lL(e){try{let t=JSON.parse(e);return!Kt(t)||typeof t.projectFingerprint!="string"||!Array.isArray(t.definitions)?null:{projectFingerprint:t.projectFingerprint,definitions:t.definitions}}catch{return null}}function uL(e,t,n){if(e.projectFingerprint!==t)return null;let r=[];for(let i of e.definitions){let o=dL(i,n);if(!o)return null;r.push(o)}return r}function dL(e,t){return!Kt(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 rd(e,t,n,r={}){let i=Kn(mL(e,t),fL(e,t),{sort:!0,includeClassMemberFallbacks:r.includeClassMemberFallbacks}).map(Py);return n&&(i=i.filter(n)),Fy(e,t,i)}function mL(e,t){return e.all(`SELECT
|
|
165
|
+
gs.id,
|
|
166
|
+
gs.symbol,
|
|
167
|
+
der.document_id,
|
|
168
|
+
der.start_line,
|
|
169
|
+
der.start_char,
|
|
170
|
+
der.end_line,
|
|
171
|
+
der.end_char,
|
|
172
|
+
d.relative_path,
|
|
173
|
+
gs.display_name,
|
|
174
|
+
gs.kind,
|
|
175
|
+
gs.documentation,
|
|
176
|
+
gs.enclosing_symbol
|
|
177
|
+
FROM global_symbols gs
|
|
178
|
+
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
179
|
+
JOIN documents d ON der.document_id = d.id
|
|
180
|
+
WHERE d.relative_path = ?
|
|
181
|
+
${e.symbolNoiseFor("gs")}
|
|
182
|
+
ORDER BY der.start_line, der.end_line`,t)}function fL(e,t){return e.all(`SELECT
|
|
183
|
+
gs.id,
|
|
184
|
+
gs.symbol,
|
|
185
|
+
c.document_id,
|
|
186
|
+
MIN(c.start_line) AS start_line,
|
|
187
|
+
0 AS start_char,
|
|
188
|
+
MAX(c.end_line) AS end_line,
|
|
189
|
+
0 AS end_char,
|
|
190
|
+
d.relative_path,
|
|
191
|
+
gs.display_name,
|
|
192
|
+
gs.kind,
|
|
193
|
+
gs.documentation,
|
|
194
|
+
gs.enclosing_symbol
|
|
195
|
+
FROM global_symbols gs
|
|
196
|
+
JOIN mentions m ON m.symbol_id = gs.id
|
|
197
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
198
|
+
JOIN documents d ON c.document_id = d.id
|
|
199
|
+
WHERE d.relative_path = ?
|
|
200
|
+
AND m.role = 1
|
|
201
|
+
${e.symbolNoiseFor("gs")}
|
|
202
|
+
GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
|
|
203
|
+
ORDER BY start_line, end_line`,t)}function Py(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:ae(e.symbol),isTypeLike:he(e.symbol)==="type",kind:e.kind??null,documentation:e.documentation??null,enclosingSymbol:e.enclosing_symbol??null}}function Ae(e,t={}){return id(e,t.scope)}function id(e,t){return A(e,{scope:t,includeIgnored:!1}).flatMap(n=>Z(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function ky(e,t){return A(e,{scope:t,includeIgnored:!1}).flatMap(n=>aL(e,n)).filter(n=>!e.isIgnored(n.relativePath))}function So(e,t){let n=Iy(pL(e,t.scope,t.sqlPrefilter)),r=Iy(gL(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=Kn(n.get(s)??[],r.get(s)??[],{sort:!0}).filter(c=>t.symbolMatches(c.symbol));a.length!==0&&o.push(...Fy(e,s,a.map(Py)))}return o}function pL(e,t,n){let r=t?"AND d.relative_path LIKE ?":"",i=n?`AND ${Ty("gs",n)}`:"",o=t?[`%${t}%`]:[];return e.all(`SELECT
|
|
204
|
+
gs.id,
|
|
205
|
+
gs.symbol,
|
|
206
|
+
der.document_id,
|
|
207
|
+
der.start_line,
|
|
208
|
+
der.start_char,
|
|
209
|
+
der.end_line,
|
|
210
|
+
der.end_char,
|
|
211
|
+
d.relative_path,
|
|
212
|
+
gs.display_name,
|
|
213
|
+
gs.kind,
|
|
214
|
+
gs.documentation,
|
|
215
|
+
gs.enclosing_symbol
|
|
216
|
+
FROM global_symbols gs
|
|
217
|
+
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
218
|
+
JOIN documents d ON der.document_id = d.id
|
|
219
|
+
WHERE 1 = 1
|
|
220
|
+
${e.pathExclusionsFor("d")}
|
|
221
|
+
${r}
|
|
222
|
+
${i}
|
|
223
|
+
${e.symbolNoiseFor("gs")}
|
|
224
|
+
ORDER BY d.relative_path, der.start_line, der.end_line`,...o)}function gL(e,t,n){let r=t?"AND d.relative_path LIKE ?":"",i=n?`AND ${Ty("gs",n)}`:"",o=t?[`%${t}%`]:[];return e.all(`SELECT
|
|
225
|
+
gs.id,
|
|
226
|
+
gs.symbol,
|
|
227
|
+
c.document_id,
|
|
228
|
+
MIN(c.start_line) AS start_line,
|
|
229
|
+
0 AS start_char,
|
|
230
|
+
MAX(c.end_line) AS end_line,
|
|
231
|
+
0 AS end_char,
|
|
232
|
+
d.relative_path,
|
|
233
|
+
gs.display_name,
|
|
234
|
+
gs.kind,
|
|
235
|
+
gs.documentation,
|
|
236
|
+
gs.enclosing_symbol
|
|
237
|
+
FROM global_symbols gs
|
|
238
|
+
JOIN mentions m ON m.symbol_id = gs.id
|
|
239
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
240
|
+
JOIN documents d ON c.document_id = d.id
|
|
241
|
+
WHERE m.role = 1
|
|
242
|
+
${e.pathExclusionsFor("d")}
|
|
243
|
+
${r}
|
|
244
|
+
${i}
|
|
245
|
+
${e.symbolNoiseFor("gs")}
|
|
246
|
+
GROUP BY gs.id, gs.symbol, c.document_id, d.relative_path
|
|
247
|
+
ORDER BY d.relative_path, start_line, end_line`,...o)}function hL(e){return`(${e}.symbol LIKE '%().' OR ${e}.symbol LIKE '%()')`}function Ty(e,t){return t==="callable"?hL(e):yL(e)}function yL(e){return`(${e}.symbol LIKE '%.' OR ${e}.symbol LIKE '%()')`}function Iy(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 ka(e,t,n={}){if(t.length===0)return[];let r=t.flatMap(i=>Z(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:xn(Cn(i.documentation)),relativePath:i.relativePath,enclosingSymbol:i.enclosingSymbol}))}function od(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 Jt(e,t){let n=vy.get(e);return n||(n=od(e),vy.set(e,n)),n.get(t)??null}function Ta(e,t){let n=Z(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 Fy(e,t,n){let r=It(e).forFile(t,{text:!0}).text,i=Du(e,t);return i?vL(n,i,r):r?bL(n,r):n}function bL(e,t){let n=t.split(/\r?\n/),r=SL(e,n),i=xL(e,r),o=CL(i,n);return RL(e,o)}function SL(e,t){let n=e.some(i=>Fa(i.symbol))?TL(t):null,r=new Map;for(let i of e)r.set(i.symbolId,kL(t,n,i));return r}function xL(e,t){return e.filter(n=>Fa(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 CL(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:FL(t,i.definition,i.startLine,s)})}return n}function RL(e,t){return e.map(n=>{let r=t.get(n.symbolId);return r?{...n,startLine:r.startLine,endLine:r.endLine}:n})}function vL(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(!PL(i)||!i.leaf)return wy(i,n);let o=r.get(i.leaf);if(!o||o.length===0)return wy(i,n);let s=n?IL(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 IL(e,t,n){let r=wL(e.symbol);if(!r)return null;let i=n.split(/\r?\n/),o=new RegExp(`\\b${U(r)}\\b`);for(let s of t){let a=EL(i,s.startLine);if(a&&o.test(a))return s}return null}function wL(e){return e.match(/\/impl#\[([^\]]+)\]/)?.[1]??null}function EL(e,t){for(let n=t;n>=0;n-=1){let r=e[n]?.trim()??"";if(r){if(/^impl\b/.test(r))return DL(e,n,t);if(/^(?:struct|enum|trait|mod)\b/.test(r))return null}}return null}function DL(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 PL(e){return Fa(e.symbol)?!0:he(e.symbol)==="term"&&Wt(e.symbol)===null}function wy(e,t){if(!t||!e.leaf||he(e.symbol)!=="term"||Wt(e.symbol)!==null)return e;let n=U(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 kL(e,t,n){if(!Fa(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 TL(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 FL(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=_L(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 _L(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 Fa(e){return e.includes("().")}function _a(e){let t=De(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 LL=$("symbol-resolution",{clearGroups:[]});function H(e,t){return Co(e,t).match}function Co(e,t){return LL.get(e,t,()=>{let n=Ly(e,t.trim()).filter(o=>!e.isIgnored(o.relative_path));if(n.length>0)return xo(e,n);let r=$L(e,t);if(r&&!e.isIgnored(r.relative_path))return xo(e,[r]);let i=AL(e,t);return i.length>0?xo(e,i):jL(e,t)})}function AL(e,t){let n=Aa(t),r=sd(n);if(!r)return[];let i=`%${r.path}%`,o=r.leaf;return ML(e,i,o,n)}function ML(e,t,n,r){let i=Kn([],[...NL(e,t,n),...OL(e,t,n)]).filter(o=>!e.isIgnored(o.relative_path)).filter(o=>yi(o,r)>1);return i.sort((o,s)=>yi(s,r)-yi(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 NL(e,t,n){return Dr(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function OL(e,t,n){return hi(e,{where:"d.relative_path LIKE ? AND (gs.display_name = ? OR gs.symbol LIKE ?)",params:[t,n,`%/${n}.%`]})}function jL(e,t){let n=Aa(t),r=WL(t),i=GL(e,r),o=zL(i,t,n).filter(a=>!e.isIgnored(a.relative_path));if(o.length>0)return xo(e,o);let s=[];for(let a of i){if(e.isIgnored(a.relative_path))continue;let c=VL(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)),xo(e,s.map(a=>a.row))}function xo(e,t){let n=t.map(i=>Ta(e,i)),r=n[0]??null;return{match:r,candidates:r?BL(n,r):[],total:n.length}}function BL(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 $L(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 HL(e,r,s,a)??UL(e,r,s,a)}function HL(e,t,n,r){return Dr(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 UL(e,t,n,r){return hi(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 Ro(e,t){let n=Ly(e,t).find(r=>!e.isIgnored(r.relative_path));return n?Ta(e,n):null}function Ly(e,t){let n=Dr(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, der.start_line"}),r=n.length>0?[]:hi(e,{where:"gs.symbol = ?",params:[t],orderBy:"d.relative_path, start_line"});return Kn(n,r)}function La(e,t){if("symbol"in t&&"relativePath"in t)return t;let n=qL(e,t.symbolId)[0];return n?Ta(e,n):null}function qL(e,t){let n=Dr(e,{where:"gs.id = ?",params:[t],orderBy:"der.start_line, der.end_line"}),r=hi(e,{where:"gs.id = ?",params:[t],orderBy:"start_line, end_line"});return Kn(n,r)}function GL(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(`
|
|
248
|
+
AND `),o=Dr(e,{where:i,params:r,limit:200}),s=hi(e,{where:i,params:r,limit:200});return Kn(o,s)}function VL(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(),C=e.relative_path.toLowerCase(),b=/[/:.]/.test(n),S=sd(n),x=S?.leaf.toLowerCase(),v=0;return(u===i||u===o)&&(v+=1150),(d===i||d===o)&&(v+=1100),f===s&&(v+=1180),m===s&&(v+=1160),(`${m}()`===i||`${m}()`===o)&&(v+=955),(p===a||p===c)&&(v+=1e3),(g===a||g===c)&&(v+=950),(C===a||C===c)&&(v+=925),(C.endsWith(`/${c}`)||C.endsWith(`/${a}`))&&(v+=875),h===l&&(v+=850),y===l&&(v+=825),(`${y}()`===a||`${y}()`===c)&&(v+=820),(g.endsWith(`:${c}`)||g.endsWith(`:${l}`)||g.endsWith(`:${l}()`))&&(v+=800),p.includes(c)&&(v+=120),g.includes(c)&&(v+=140),C.includes(c)&&(v+=140),h.includes(c)&&(v+=110),r.every(R=>{let D=R.toLowerCase();return p.includes(D)||g.includes(D)||C.includes(D)||h.includes(D)})&&(v+=100+r.length*15),S&&C.includes(S.path.toLowerCase())&&(v+=360,x&&(y===x||`${y}()`===x||`${y}()`==`${x}()`)&&(v+=700),ge(e.symbol)&&(v+=180)),ae(e.symbol)&&y===l&&(v+=60),!b&&$n(e.symbol)&&(v-=160),v-=Math.min(50,Math.max(0,e.end_line-e.start_line)),v}function sd(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 Aa(e){return e.trim().replace(/\(\)$/,"").replace(/\(.*$/,"")}function WL(e){let t=Aa(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 zL(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||yi(o,n)>1||o.relative_path===r});return i.length===0?[]:(i.sort((o,s)=>yi(s,n)-yi(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 yi(e,t){let n=sd(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:ge(e.symbol)?Wt(e.symbol)===null?5:4:Wt(e.symbol)===null?3:2:0}function ree(e,t,n=5){let r=_y(t);if(!r)return[];let i=Dr(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=>KL(_y(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 _y(e){return Aa(e).toLowerCase().replace(/[^a-z0-9_]+/g,"")}function KL(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 Ma(e,t,n,r={}){if(!n)return[];let i=k(e,t);return i?i.indexOf(n)===-1?[]:(Rn(e,t).get(n)??[]).filter(s=>!JL(s,r)):[]}function JL(e,t){return typeof t.excludeStartLine=="number"&&typeof t.excludeEndLine=="number"&&e>=t.excludeStartLine&&e<=t.excludeEndLine}var YL=$("file-identifiers",{clearGroups:["whole-project","source-file"]});function Ay(e,t){let n=K(e,t);return n?n.fileIdentifiers:YL.get(e,t,()=>new Set(Rn(e,t).keys()))}var XL=$("file-ident-lines",{clearGroups:["whole-project","source-file"]});function Rn(e,t){let n=K(e,t);return n?n.identifierLineMap:XL.get(e,t,()=>ZL(e,t))}var QL=$("file-idents-by-line",{clearGroups:["whole-project","source-file"]});function My(e,t){let n=K(e,t);return n?n.identifiersByLine:QL.get(e,t,()=>{let r=Rn(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 ZL(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=k(e,t);if(!i)return n;let o=xt(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 Ny(e,t){return Na(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT
|
|
249
|
+
m.symbol_id,
|
|
250
|
+
d.relative_path,
|
|
251
|
+
COUNT(*) AS ref_count
|
|
252
|
+
FROM mentions m
|
|
253
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
254
|
+
JOIN documents d ON c.document_id = d.id
|
|
255
|
+
WHERE m.role != 1
|
|
256
|
+
${r}
|
|
257
|
+
${e.pathExclusionsFor("d")}
|
|
258
|
+
GROUP BY m.symbol_id, d.relative_path`,...n??[])})}function Oy(e,t){return Na(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
|
|
259
|
+
FROM mentions m
|
|
260
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
261
|
+
JOIN documents d ON c.document_id = d.id
|
|
262
|
+
WHERE m.role != 1
|
|
263
|
+
${r}
|
|
264
|
+
${e.pathExclusionsFor("d")}`,...n??[])}).filter(n=>n.symbol_id!==null)}function jy(e,t){return Na(e,t,n=>{let r=n?`AND m.symbol_id IN (${n.map(()=>"?").join(",")})`:"";return e.all(`SELECT DISTINCT m.symbol_id
|
|
265
|
+
FROM mentions m
|
|
266
|
+
WHERE m.role != 1
|
|
267
|
+
${r}`,...n??[])}).filter(n=>n.symbol_id!==null)}function bi(e,t){return Na(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,
|
|
268
|
+
c.start_line AS chunk_start, c.end_line AS chunk_end
|
|
269
|
+
FROM mentions m
|
|
270
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
271
|
+
JOIN documents d ON c.document_id = d.id
|
|
272
|
+
WHERE m.role != 1
|
|
273
|
+
${r}
|
|
274
|
+
${e.pathExclusionsFor("d")}
|
|
275
|
+
ORDER BY d.relative_path, c.start_line`,...n??[])})}function Na(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 Oa(e,t){let n=By(e);return n?t.filter(r=>By(r.file)===n):t}function ja(e,t,n,r){let i=n.find(o=>o.file===t);if(i)return i;if(r){let o=new Set(re(e,t).map(s=>s.sourcePath).filter(s=>!!s));for(let s of n)for(let a of o)if(ct(a,s.file))return s;return null}return n.length===1?n[0]:null}function By(e){let t=N(e);return t?t==="typescript"||t==="tsx"||t==="javascript"?"javascript-family":t:null}var eA=ee("global-leaf-index",{clearGroups:["whole-project"]});function vn(e){return eA.get(e,()=>{let t=e.all(`SELECT gs.id, gs.symbol,
|
|
276
|
+
COALESCE(der_doc.relative_path, mention_doc.relative_path) AS relative_path
|
|
277
|
+
FROM global_symbols gs
|
|
278
|
+
LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
279
|
+
LEFT JOIN documents der_doc ON der_doc.id = der.document_id
|
|
280
|
+
LEFT JOIN (
|
|
281
|
+
SELECT m.symbol_id, MIN(d.relative_path) AS relative_path
|
|
282
|
+
FROM mentions m
|
|
283
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
284
|
+
JOIN documents d ON c.document_id = d.id
|
|
285
|
+
WHERE m.role = 1
|
|
286
|
+
GROUP BY m.symbol_id
|
|
287
|
+
) mention_doc ON mention_doc.symbol_id = gs.id
|
|
288
|
+
WHERE 1 = 1
|
|
289
|
+
${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 $y=/[A-Za-z_$][A-Za-z0-9_$]*/g,Hy=/^[A-Za-z_$][A-Za-z0-9_$]*$/,tA=512;function vo(e){let t=[],n=!1;for(let r of e)r&&(n=!0,Hy.test(r)||t.push(r));return{candidateNames:e,hasUsableCandidate:n,nonIdentifierNames:t}}function Ba(e,t){let n=nA(t)?t:vo(t);if(n.candidateNames.size===0||!n.hasUsableCandidate)return!0;if(n.candidateNames.size<=tA){for(let i of n.candidateNames)if(i){if(Hy.test(i)){if(rA(i).test(e))return!0;continue}if(e.includes(i))return!0}return!1}$y.lastIndex=0;let r;for(;(r=$y.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 nA(e){return"candidateNames"in e}function rA(e){return new RegExp(`(?<![A-Za-z_$0-9])${U(e)}(?![A-Za-z_$0-9])`)}var iA=$("source-import-paths-by-local-name",{clearGroups:["whole-project","source-file"]});function $a(e,t){let n=dn(t);return iA.get(e,n,()=>oA(e,n))}function oA(e,t){let n=new Map;for(let r of re(e,t)){if(!r.sourcePath)continue;let i=r.localName??r.importedName;if(i&&Uy(n,i,r.sourcePath),r.kind==="namespace")for(let o of r.usedMembers)Uy(n,o,r.sourcePath)}return n}function Uy(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function Si(e,t,n){let r=vn(e).get(n);if(!r||r.length===0)return[];if(r.length===1)return[Io(r[0])];let i=r.filter(c=>c.file===t);if(i.length>0)return i.map(Io);let o=$a(e,t),s=o.get(n);if(s)for(let c of s){let l=r.filter(u=>ct(c,u.file));if(l.length>0)return l.map(Io)}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=>ct(c,u.file));if(l.length>0&&l.length===r.length)return l.map(Io)}return[]}function qy(e,t,n){let r=Si(e,t,n);if(r.length>0)return r;let i=vn(e).get(n);return!i||i.length===0?[]:i.map(Io)}function Gy(e,t,n={}){let r=La(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 Ha(e,a)}}let o=new Map;for(let s of rt(e)){let a=k(e,s);if(!a||a.indexOf(i)===-1||s!==r.relativePath&&!Si(e,s,i).some(u=>u.symbolId===r.symbolId))continue;let c=Ma(e,s,i,s===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{});c.length>0&&o.set(s,c)}return Ha(e,o)}function Vy(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=vo(o),a=new Map;for(let c of rt(e)){if(n.skipPath?.(c)||!Ba(k(e,c),s))continue;let l=Ay(e,c);if(l.size!==0){for(let u of l)if(r.has(u))for(let d of Si(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 Io(e){return{symbolId:e.symbolId,symbol:e.symbol,relativePath:e.file}}function Ha(e,t){let n=[],r=new Set;for(let[i,o]of t){let s=Z(e,i);for(let a of o){let c=Jt(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 wo(e,t){let n=dA(e,t);return n?Ha(e,aA(e,n.match,n.identifier)):[]}function Yt(e,t,n={}){return sA(e,t,n).map(r=>({file:r.file,line:r.line,enclosingSymbol:r.enclosingSymbol}))}function sA(e,t,n={}){let r=Gy(e,t,{semantic:n.semantic,semanticEvidence:n.semanticEvidence}),i=r.length>0?Wy(r,"source-attribution"):Wy(wo(e,t),"scip-reference-chunk");return n.includeIgnored===!0?i:i.filter(o=>!e.isIgnored(o.file))}function Wy(e,t){return e.map(n=>({...n,provenance:t}))}function aA(e,t,n){let r=new Map;for(let[i,o]of cA(e,t.symbolId))r.set(i,lA(e,i,o,t,n));return r}function cA(e,t){let n=new Map;for(let r of bi(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 lA(e,t,n,r,i){let o=t===r.relativePath?{excludeStartLine:r.startLine,excludeEndLine:r.endLine}:{},s=i?Ma(e,t,i,o):[];return n.flatMap(a=>uA(s,a))}function uA(e,t){let n=e.filter(r=>r>=t.start_line&&r<=t.end_line);return n.length>0?n:[t.start_line]}function dA(e,t){let n=La(e,t);return n?{match:n,identifier:T(n.symbol)||null}:null}var zy=Sr({kind:"file-dependency-graph",invalidation:Q("file-dependency-graph"),serialize:e=>JSON.stringify(e),deserialize:bA}),mA=$("file-dep-graph",{clearGroups:["whole-project"]});function le(e,t,n={}){let r=n.scipEdges??"all-references",i=n.sourceEdges??"imports-only",o=gA(t,r,i);return mA.get(e,o,()=>{let s=new Set(A(e,{includeIgnored:!1})),a=Ge(e),c=0,l=0,u=null,d=!1,m=0,f=0;return E("file-dep-graph.product",()=>{if(a){let h=zy.read(e,o,a);if(h){d=!0;let C=yA(h);return c=h.sourceFileCount,l=h.sourceEdgeCount,m=h.scipEdgeCount,f=C.size,u=h.sourceDependencyFingerprint,C}}let p=E("file-dep-graph.source-imports",()=>{let h=fA(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,C)=>RA(e,g,s,h,C);E("file-dep-graph.scip-edges",()=>{for(let h of CA(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&&zy.write(e,o,a,{sourceDependencyFingerprint:p.fingerprint,sourceFileCount:p.files.length,sourceEdgeCount:p.edges.length,scipEdgeCount:m,graph:hA(g)}),g},()=>({scope:t??null,available:a!==null,hit:d,files:c,sourceEdges:l,sourceEdgeMode:i,scipEdges:m,graphFiles:f,sourceDependencyFingerprint:u}))})}function fA(e,t,n,r){let i=[],o=[];for(let s of t)if(!(n&&!s.includes(n))){i.push(s);for(let a of re(e,s))a.sourcePath&&o.push({fromFile:s,toFile:a.sourcePath});if(r==="imports-and-reexports")for(let a of Sn(e,s))a.sourcePath&&o.push({fromFile:s,toFile:a.sourcePath})}return{files:i,edges:o,fingerprint:pA(i,o)}}function pA(e,t){let n=t.map(r=>`${r.fromFile}\0${r.toFile}`).sort();return Ee(JSON.stringify({files:e,edges:n}))}function gA(e,t,n){return`edge-mode-v3:${t}:${n}:${e??"<all>"}`}function hA(e){return[...e].map(([t,n])=>[t,[...n]])}function yA(e){return new Map(e.graph.map(([t,n])=>[t,new Set(n)]))}function bA(e){let t=JSON.parse(e);return SA(t)?t:null}function SA(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(xA)}function xA(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&Array.isArray(e[1])&&e[1].every(t=>typeof t=="string")}function CA(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
|
|
290
|
+
d1.relative_path AS from_file,
|
|
291
|
+
d2.relative_path AS to_file
|
|
292
|
+
FROM mentions m
|
|
293
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
294
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
295
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
296
|
+
JOIN (
|
|
297
|
+
SELECT m2.symbol_id, c2.document_id
|
|
298
|
+
FROM mentions m2
|
|
299
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
300
|
+
WHERE m2.role = 1
|
|
301
|
+
GROUP BY m2.symbol_id
|
|
302
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
303
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
304
|
+
WHERE d1.id != d2.id
|
|
305
|
+
${o}
|
|
306
|
+
${e.pathExclusionsFor("d1","d2")}
|
|
307
|
+
${r}`,...i)}function RA(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 Ua(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 Ky(e){let t=new Map,n=IA(e),r=new Map;return i=>{let o=vA(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=wA(Z(e,i.file)),t.set(i.file,a));let c=EA(a,i);return r.set(o,c),c}}function vA(e){return`${e.file}\0${e.symbol}\0${e.line}`}function IA(e){return new Set(e.all("SELECT relative_path FROM documents").map(t=>t.relative_path))}function wA(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 EA(e,t){if(e.definitions.length===0)return t.symbol;let n=kA(t.symbol),r=DA(e.byLeaf,n),i=PA(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 DA(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 PA(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 kA(e){let t=new Set([e]),r=e.split(/::|\.|#/).filter(Boolean).at(-1);return r&&t.add(r),t}function Jy(e,t){let r=re(e,t).map(i=>FA(t,i));return{usage:r,positions:_A(e,t,r)}}function Yy(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?TA(r.usage,i.sourcePaths):r.usage}}}function TA(e,t){return e.map((n,r)=>{let i=t.get(String(r));return i?{...n,sourcePath:i}:n})}function FA(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 _A(e,t,n){let r=X(e,t);if(!r)return[];let i=LA(r.rootNode),o=new Map;for(let a of i){let c=o.get(cd(a.importedName,a.localName));c?c.push(a.position):o.set(cd(a.importedName,a.localName),[a.position])}let s=[];return n.forEach((a,c)=>{let l=o.get(cd(a.importedName,a.localName??a.importedName))?.shift();l&&s.push({...l,id:String(c),file:t})}),s}function LA(e){let t=[];for(let n of e.descendantsOfType("use_declaration")){let r=n.namedChildren.find(i=>i.type!=="visibility_modifier");r&&t.push(...qa(r,""))}return t.filter(n=>n.importedName!=="*")}function qa(e,t){switch(e.type){case"identifier":case"super":case"self":case"crate":return[{importedName:e.text,localName:e.text,position:ad(e,e.text)}];case"scoped_identifier":{let n=e.text.split("::").pop()??e.text;return[{importedName:n,localName:n,position:ad(e,n)}]}case"scoped_use_list":{let n=e.namedChild(0),r=e.namedChild(1);if(!n||!r)return[];let i=gi(t,n.text);return r.namedChildren.flatMap(o=>qa(o,i))}case"use_list":return e.namedChildren.flatMap(n=>qa(n,t));case"use_as_clause":{let n=e.namedChild(0),r=e.namedChild(1);return!n||!r?[]:qa(n,t).map(i=>({...i,localName:r.text}))}case"use_wildcard":{let n=e.namedChild(0),r="*";return[{importedName:r,localName:r,position:ad(n??e,r)}]}default:return[]}}function ad(e,t){let n=Math.max(0,e.text.lastIndexOf(t));return{id:"",file:"",line:e.startPosition.row,column:e.startPosition.column+n+AA(t)}}function AA(e){return Math.max(0,Math.min(e.length-1,1))}function cd(e,t){return`${e}\0${t}`}import{spawnSync as Pd}from"child_process";import{existsSync as kd}from"fs";import{fileURLToPath as wN}from"url";function Jn(e){if(!e)return;let t=Number(e);return Number.isInteger(t)&&t>0?t:void 0}import{execFileSync as nb}from"child_process";import{createHash as $A}from"crypto";import{existsSync as Ga,statSync as HA}from"fs";import{createRequire as UA}from"module";import{platform as qA}from"os";import{dirname as tb,join as Eo}from"path";import{execFileSync as Xy,spawnSync as MA}from"child_process";import{platform as NA}from"os";var Qy=NA()==="win32";function ite(e,t=MA){try{return t(e,["--version"],{stdio:"ignore",timeout:1e4}).status===0}catch{return!1}}function Zy(e){let t=Qy?"where":"which";try{return Xy(t,[e],{stdio:"pipe",timeout:1e4,killSignal:"SIGKILL"}),!0}catch{return!1}}var OA=/\.(?:c|m)?js$/i,jA=/\.(?:exe|com)$/i;function ote(e,t){return OA.test(e)?{binary:process.execPath,args:[e,...t]}:{binary:e,args:[...t]}}function BA(e,t){return Xy(e,t,{stdio:["ignore","pipe","ignore"],encoding:"utf8",timeout:1e4,killSignal:"SIGKILL"})}function eb(e,t={}){let n=t.isWindows??Qy,r=t.lookup??BA,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=>jA.test(s))??null:o[0]??null}var GA=UA(import.meta.url),rb={language:"rust",indexerBinary:"rust-analyzer",installUrl:"https://github.com/rust-lang/rust-analyzer"};function ld(e){return[e.indexerBinary,...e.binaryAliases??[]]}function VA(e){let t=ld(e);return t.length===1?t[0]:t.join(" or ")}function ud(e){for(let t of ld(e)){let n=eb(t);if(n)return n}return zA(e)}function hte(e){return ud(e)!==null||WA(e)}function WA(e){return ib(e)!==null}function zA(e){let t=ib(e);if(!t)return null;let r=JSON.parse(O(t,"indexer package manifest")).bin;if(!r)return null;if(typeof r=="string")return Eo(tb(t),r);for(let i of ld(e)){let o=r[i];if(o)return Eo(tb(t),o)}return null}function ib(e){if(!e.bundledNpmPackage)return null;try{return GA.resolve(`${e.bundledNpmPackage}/package.json`)}catch{return null}}function KA(e,t){for(let n of e.projectLocalBinaries??[]){let r=Eo(t,n);if(Ga(r))return r}return null}function JA(e,t){for(let n of e.projectLocalBinaries??[]){let r=Eo(t,n);if(Ga(r))return ob(t,n,r)}return null}function yte(e,t){let n=YA(e,t);if(!n||n.canonicalPath!==t.canonicalPath||n.sha256!==t.sha256||n.size!==t.size||n.mtimeMs!==t.mtimeMs||n.device!==t.device||n.inode!==t.inode||n.executable!==t.executable)throw new Error(`refusing changed project-local indexer ${t.relativePath}; review the current file and rerun with --trust-project-tools`)}function YA(e,t){try{return ob(e,t.relativePath,t.configuredPath)}catch{return null}}function ob(e,t,n){let r={maxBytes:268435456,inputKind:"project-local indexer"},i=mn(e,t,r),o=Qs(e,t,r),s=HA(i.absolutePath);return{configuredPath:n,canonicalPath:i.absolutePath,relativePath:t,sha256:$A("sha256").update(o).digest("hex"),size:i.size,mtimeMs:i.mtimeMs,device:i.device,inode:i.inode,executable:(s.mode&73)!==0}}function XA(e,t,n={}){return(n.trustProjectTools?JA(e,t)?.canonicalPath:null)??ud(e)}function bte(e,t=process.env,n=e.indexerBinary){if(e.indexerBinary!=="scip-dotnet"||dd(n,t))return t;let r=ab(n,t);return r?{...t,DOTNET_ROOT:r}:t}function sb(e,t,n={}){let r=VA(e),i=t?XA(e,t,n):ud(e);if(!i)return{language:e.language,binaryLabel:r,installed:!1,runnable:!1,resolvedBinary:null,installUrl:e.installUrl,...t&&KA(e,t)?{note:"project-local indexer available only with --trust-project-tools"}:{}};if(e.indexerBinary!=="scip-dotnet")return{language:e.language,binaryLabel:r,installed:!0,runnable:!0,resolvedBinary:i};let o=QA(i);return{language:e.language,binaryLabel:r,installed:!0,runnable:o.runnable,resolvedBinary:i,installUrl:e.installUrl,note:o.note}}function QA(e){if(dd(e,process.env))return{runnable:!0};let t=ab(e,process.env);if(t)return{runnable:!0,note:`using .NET 9 runtime from ${t}`};let n=cb(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 ab(e,t){for(let n of cb(t))if(dd(e,{...t,DOTNET_ROOT:n}))return n;return null}function cb(e){let t=[],n=e.DOTNET_ROOT;if(n&&Ga(n)&&t.push(n),qA()==="darwin"&&Zy("brew"))try{let r=nb("brew",["--prefix","dotnet@9"],{stdio:"pipe",env:e,timeout:1e4,killSignal:"SIGKILL"}).toString().trim(),i=Eo(r,"libexec");Ga(i)&&!t.includes(i)&&t.push(i)}catch{}return t}function dd(e,t){try{return nb(e,["--version"],{stdio:"pipe",env:t,timeout:1e4,killSignal:"SIGKILL"}),!0}catch{return!1}}function Va(e){let t=sb(rb,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 uN,mkdtempSync as Gb,rmSync as Rd}from"fs";import{tmpdir as wd}from"os";import{join as vd}from"path";import{fileURLToPath as No,pathToFileURL as dN}from"url";import{SHARE_ENV as mN,Worker as fN}from"worker_threads";function Yn(e){try{return process.kill(e,0),!0}catch(t){return typeof t=="object"&&t!==null&&"code"in t&&t.code==="EPERM"}}import{execFileSync as eM}from"child_process";import{platform as tM}from"os";var ZA=new Set(["aix","android","darwin","freebsd","haiku","linux","openbsd","sunos","win32","cygwin","netbsd"]);function In(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;return t.version!==1||typeof t.pid!="number"||!Number.isSafeInteger(t.pid)||t.pid<=0||typeof t.platform!="string"||!ZA.has(t.platform)||typeof t.startToken!="string"||t.startToken.trim()===""?null:{version:1,pid:t.pid,platform:t.platform,startToken:t.startToken}}function wt(e,t){return e.version===t.version&&e.pid===t.pid&&e.platform===t.platform&&e.startToken===t.startToken}var nM=1e3,lb=16*1024;function Nt(e,t=oM){if(!Number.isSafeInteger(e)||e<=0)return null;try{let n=rM(e,t);return n?{version:1,pid:e,platform:t.platform,startToken:n}:null}catch{return null}}function rM(e,t){if(t.platform==="linux"||t.platform==="android")return iM(t.readFile(`/proc/${e}/stat`));if(t.platform==="win32"){let n=`([DateTimeOffset](Get-Process -Id ${e} -ErrorAction Stop).StartTime).ToUnixTimeMilliseconds()`;return ub(t.run("powershell.exe",["-NoProfile","-NonInteractive","-Command",n]))}return t.platform==="darwin"||t.platform==="freebsd"||t.platform==="openbsd"||t.platform==="netbsd"?ub(t.run("ps",["-p",String(e),"-o","lstart="])):null}function iM(e){let t=e.lastIndexOf(")");if(t<0)return null;let r=e.slice(t+1).trim().split(/\s+/)[19];return r&&/^\d+$/.test(r)?r:null}function ub(e){let t=e.trim();return t===""?null:t}var oM={platform:tM(),readFile(e){return gu(e,{maxBytes:lb,inputKind:"process identity pseudo-file"})},run(e,t){return eM(e,[...t],{encoding:"utf8",timeout:nM,maxBuffer:lb,env:{...process.env,LC_ALL:"C",LANG:"C"},stdio:["ignore","pipe","ignore"]})}};function Xn(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 Pr(e,t,n){let r=Jn(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 YM}from"child_process";import{createHash as XM,randomUUID as QM}from"crypto";import{existsSync as Ob,realpathSync as ZM,rmSync as eN}from"fs";import{tmpdir as tN}from"os";import{resolve as Ei}from"path";function Te(){return performance.now()}function wn(e){return Array.isArray(e)?`[${e.map(wn).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>`${JSON.stringify(t)}:${wn(n)}`).join(",")}}`:JSON.stringify(e)}import{createHash as gM,randomUUID as yb}from"crypto";import{existsSync as vi,lstatSync as Fo,mkdirSync as hM,readdirSync as Ri,renameSync as bb,rmSync as Qn}from"fs";import{basename as fd,dirname as yM,join as Ie}from"path";import{randomUUID as sM}from"crypto";import{closeSync as aM,fsyncSync as cM,linkSync as lM,mkdirSync as uM,openSync as dM,renameSync as mM,unlinkSync as fM,writeSync as pM}from"fs";import{dirname as db}from"path";function Do(e,t,n,r){let i=0;for(;i<t.length;){let o=n.writeFile(e,t,i,t.length-i);if(!Number.isSafeInteger(o)||o<=0||o>t.length-i)throw new Error(`${r} write did not make valid forward progress`);i+=o}}function xi(e,t){if(t!=="win32")return!1;let n=e.code;return n==="EACCES"||n==="EBADF"||n==="EINVAL"||n==="EISDIR"||n==="EPERM"}var md=Object.freeze({platform:process.platform,randomToken:()=>sM(),makeDirectory:e=>uM(e,{recursive:!0}),openFile:(e,t,n)=>dM(e,t,n),writeFile:(e,t,n,r)=>pM(e,t,n,r),syncFile:e=>cM(e),closeFile:e=>aM(e),renameFile:(e,t)=>mM(e,t),linkFile:(e,t)=>lM(e,t),removeFile:e=>fM(e)});function Po(e,t,n={}){let r=n.durability??"visibility",i=n.runtime??md,o=db(e);i.makeDirectory(o);let s=`${e}.tmp-${i.randomToken()}`,a=typeof t=="string"?Buffer.from(t):t,c,l=!1;try{return c=i.openFile(s,"wx",n.mode??384),l=!0,Do(c,a,i,"atomic file"),r==="durable"&&i.syncFile(c),i.closeFile(c),c=void 0,i.renameFile(s,e),l=!1,{durability:r,directorySync:r==="durable"?Ot(o,i):"not-requested"}}finally{if(c!==void 0)try{i.closeFile(c)}catch{}if(l)try{i.removeFile(s)}catch{}}}function ko(e,t,n={}){let r=n.durability??"visibility",i=n.runtime??md;if(!i.linkFile)throw new Error("Exclusive atomic file publication requires hard-link support.");let o=db(e);i.makeDirectory(o);let s=`${e}.tmp-${i.randomToken()}`,a=typeof t=="string"?Buffer.from(t):t,c,l=!1;try{return c=i.openFile(s,"wx",n.mode??384),l=!0,Do(c,a,i,"exclusive atomic file"),r==="durable"&&i.syncFile(c),i.closeFile(c),c=void 0,i.linkFile(s,e),i.removeFile(s),l=!1,{durability:r,directorySync:r==="durable"?Ot(o,i):"not-requested"}}finally{if(c!==void 0)try{i.closeFile(c)}catch{}if(l)try{i.removeFile(s)}catch{}}}function Ot(e,t=md){let n;try{n=t.openFile(e,"r")}catch(r){if(xi(r,t.platform))return"unsupported";throw r}try{return t.syncFile(n),"synced"}catch(r){if(xi(r,t.platform))return"unsupported";throw r}finally{t.closeFile(n)}}function Wa(e,t,n={}){Po(e,mb(t,n),{durability:"visibility",runtime:n.runtime})}function ft(e,t,n={}){return Po(e,mb(t,n),{durability:"durable",runtime:n.runtime})}function mb(e,t){let n=JSON.stringify(e,null,t.spacing);return t.trailingNewline?`${n}
|
|
308
|
+
`:n}var Zn=1,bM=Object.freeze({maxItems:1024,maxBytes:512*1024*1024,maxItemBytes:64*1024*1024,maxBatch:16,claimLeaseMs:5*6e4,responseRetentionMs:10*6e4,deadLetterRetentionMs:1440*6e4,temporaryRetentionMs:6e4,cleanupBatch:64}),Ci=class extends Error{constructor(n,r,i,o){let s=n==="item-too-large"?`request is ${o} bytes; per-item limit is ${i.maxItemBytes}`:n==="item-capacity"?`mailbox has ${r.totalItems} retained items; limit is ${i.maxItems}`:n==="byte-capacity"?`mailbox retains ${r.totalBytes} bytes and the request adds ${o}; limit is ${i.maxBytes}`:"another writer held the admission coordinator through the bounded wait";super(`Mailbox backpressure: ${s}. Retry after the service drains or expires retained work.`);this.code=n;this.status=r;this.limits=i;this.attemptedBytes=o;this.name="MailboxBackpressureError"}code;status;limits;attemptedBytes},SM=".owner.json",xM={isProcessAlive:()=>!0,readProcessIdentity:()=>null};function za(e){return{rootDir:e,pendingDir:Ie(e,"pending"),inflightDir:Ie(e,"inflight"),responseDir:Ie(e,"responses"),deadLetterDir:Ie(e,"dead-letter"),legacyRequestDir:Ie(e,"requests")}}function CM(e={}){let t={...bM,...e};for(let[n,r]of Object.entries(t))if(!Number.isFinite(r)||r<=0||!Number.isInteger(r))throw new Error(`Mailbox limit ${n} must be a positive integer.`);return t}function Sb(e){for(let t of[e.pendingDir,e.inflightDir,e.responseDir,e.deadLetterDir,e.legacyRequestDir])hM(t,{recursive:!0})}function Ii(e,t){return gM("sha256").update(wn({namespace:e,payload:t})).digest("hex")}function kr(e){if(!/^[a-f0-9]{64}$/.test(e))throw new Error("Mailbox operation keys must be lowercase SHA-256 identities.");return`op-${e}`}function Ka(e,t,n={}){let r=CM(n.limits),i=n.nowMs??Date.now();return Sb(e),kM(t),vM(e,r,n.admissionLockTimeoutMs??2e3,n.monotonicNow??Te,()=>{RM(e,i,r);let o=Ie(e.pendingDir,`${t.id}.json`),s=Ie(e.responseDir,`${t.id}.json`),a=fb(e,t.id);if(a){let d=pb(a,t.operationKey,t.id);return{disposition:"duplicate",requestId:t.id,responsePath:s,authoritativeDeadlineAtMs:d.deadlineAtMs??t.deadlineAtMs}}let c=`${JSON.stringify(t)}
|
|
309
|
+
`,l=Buffer.byteLength(c),u=xb(e);if(l>r.maxItemBytes)throw new Ci("item-too-large",u,r,l);if(u.totalItems+1>r.maxItems)throw new Ci("item-capacity",u,r,l);if(u.totalBytes+l>r.maxBytes)throw new Ci("byte-capacity",u,r,l);n.onBeforePublish?.();try{return ko(o,c,{durability:"durable"}),{disposition:"accepted",requestId:t.id,responsePath:s,authoritativeDeadlineAtMs:t.deadlineAtMs}}catch(d){if(d.code!=="EEXIST")throw d;let m=fb(e,t.id);if(!m)throw d;let f=pb(m,t.operationKey,t.id);return{disposition:"duplicate",requestId:t.id,responsePath:s,authoritativeDeadlineAtMs:f.deadlineAtMs??t.deadlineAtMs}}})}function RM(e,t,n,r=xM){let i={reclaimed:0,completedClaimsRemoved:0,responsesRemoved:0,deadLettersRemoved:0,temporaryFilesRemoved:0},o=n.cleanupBatch;for(let s of gd(e.inflightDir)){if(o<=0)break;let a=Ie(e.responseDir,`${s.requestId}.json`);if(vi(a)){Qn(s.path,{force:!0}),i.completedClaimsRemoved++,o--;continue}if(s.claimExpiresAtMs>t||DM(e,s.ownerId,r)!=="dead")continue;let c=Ie(e.pendingDir,s.originalFile);try{bb(s.path,c),i.reclaimed++}catch(l){if(l.code!=="EEXIST")throw l;Qn(s.path,{force:!0})}Ot(yM(s.path)),Ot(e.pendingDir),o--}o=gb(e.responseDir,o,(s,a)=>a+n.responseRetentionMs,t,()=>{i.responsesRemoved++}),o=gb(e.deadLetterDir,o,(s,a)=>a+n.deadLetterRetentionMs,t,()=>{i.deadLettersRemoved++});for(let s of[e.pendingDir,e.inflightDir,e.responseDir,e.deadLetterDir,e.legacyRequestDir]){if(o<=0)break;for(let a of Cb(s)){if(o<=0)break;fd(a).includes(".tmp-")&&(Fo(a).mtimeMs+n.temporaryRetentionMs>t||(Qn(a,{force:!0}),i.temporaryFilesRemoved++,o--))}}return TM(e.inflightDir),i}function xb(e){Sb(e);let t=[...To(e.pendingDir).map(c=>({path:c,pending:!0})),...To(e.legacyRequestDir).map(c=>({path:c,pending:!0}))],n=gd(e.inflightDir).map(c=>({path:c.path,pending:!1})),r=To(e.responseDir).map(c=>({path:c,pending:!1})),i=To(e.deadLetterDir).map(c=>({path:c,pending:!1})),o=[...t,...n,...r,...i],s=0,a;for(let c of t){let l=hd(c.path);if(!l){s++;continue}let u=l.enqueuedAtMs??Fo(c.path).mtimeMs;a=a===void 0?u:Math.min(a,u)}return{pending:t.length,inflight:n.length,responses:r.length,deadLetters:i.length,invalid:s,totalItems:o.length,totalBytes:o.reduce((c,l)=>c+FM(l.path),0),...a===void 0?{}:{oldestPendingAt:new Date(a).toISOString()}}}function vM(e,t,n,r,i){let o=Ie(e.rootDir,".admission.lock"),s=`${process.pid}-${yb()}`,a=r()+Math.max(0,n);for(;!IM(e.rootDir,o,s);){if(wM(o),r()>=a)throw new Ci("admission-busy",xb(e),t,0);Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,5)}try{return i()}finally{try{pd(o).ownerToken===s&&(Qn(o,{recursive:!0,force:!0}),Ot(e.rootDir))}catch{}}}function IM(e,t,n){let r=`${JSON.stringify({ownerToken:n,pid:process.pid,acquiredAtMs:Date.now()})}
|
|
310
|
+
`;try{return ko(t,r,{durability:"durable"}),!0}catch(i){if(i.code==="EEXIST")return!1;try{pd(t).ownerToken===n&&(Qn(t,{force:!0}),Ot(e))}catch{}throw i}}function wM(e){let t=null;try{let r=pd(e);typeof r.ownerToken=="string"&&Number.isSafeInteger(r.pid)&&Number(r.pid)>0&&(t=Number(r.pid))}catch{}if(t===null||EM(t))return;let n=`${e}.stale-${yb()}`;try{bb(e,n)}catch(r){let i=r.code;if(i==="ENOENT"||i==="EEXIST")return;throw r}Qn(n,{recursive:!0,force:!0})}function pd(e){try{return JSON.parse(O(e,"mailbox lock record"))}catch(t){if(t.code!=="EISDIR"&&!(t instanceof zt&&t.reason==="not-regular"))throw t;return JSON.parse(O(Ie(e,"owner.json"),"mailbox lock owner record"))}}function EM(e){try{return process.kill(e,0),!0}catch(t){let n=t.code;return n==="EPERM"||n!=="ESRCH"}}function DM(e,t,n){let r=PM(Ie(e.inflightDir,Rb(t),SM));if(!r)return"unknown";if(!n.isProcessAlive(r.pid))return"dead";if(!r.processIdentity)return"live";let i=n.readProcessIdentity(r.pid);return i?wt(r.processIdentity,i)?"live":"dead":"unknown"}function PM(e){try{let t=JSON.parse(O(e,"mailbox owner record"));if(t.version!==1||typeof t.ownerId!="string"||!t.ownerId||typeof t.pid!="number"||!Number.isSafeInteger(t.pid)||t.pid<=0)return null;let n=t.processIdentity===void 0?null:In(t.processIdentity);return t.processIdentity!==void 0&&(!n||n.pid!==t.pid)?null:{version:1,ownerId:t.ownerId,pid:t.pid,...n?{processIdentity:n}:{}}}catch{return null}}function fb(e,t){for(let n of[Ie(e.pendingDir,`${t}.json`),Ie(e.legacyRequestDir,`${t}.json`),Ie(e.responseDir,`${t}.json`)])if(vi(n))return n;for(let n of gd(e.inflightDir))if(n.requestId===t)return n.path;return null}function pb(e,t,n){let r=hd(e);if(!r||r.operationKey!==t)throw new Error(`Mailbox operation ${n} conflicts with an existing retained record.`);return r}function kM(e){if(e.mailboxVersion!==Zn||e.id!==kr(e.operationKey)||!e.clientId.trim()||!Number.isFinite(e.enqueuedAtMs)||!Number.isFinite(e.deadlineAtMs)||e.deadlineAtMs<e.enqueuedAtMs)throw new Error("Mailbox request has an invalid lifecycle identity.")}function gd(e){if(!vi(e))return[];let t=[];for(let n of Ri(e,{withFileTypes:!0})){if(!n.isDirectory())continue;let r=hb(n.name);if(r===null)continue;let i=Ie(e,n.name);for(let o of Ri(i,{withFileTypes:!0})){if(!o.isFile()||!o.name.endsWith(".claim"))continue;let s=/^(.*)\.(\d+)\.claim$/.exec(o.name);if(!s)continue;let a=hb(s[1]),c=Number(s[2]);if(a===null||fd(a)!==a||!a.endsWith(".json")||!Number.isSafeInteger(c))continue;let l=Ie(i,o.name),u=hd(l)??{id:fd(a,".json")},d=Fo(l);t.push({requestId:u.id,ownerId:r,path:l,originalFile:a,claimedAtMs:d.mtimeMs,claimExpiresAtMs:c,byteLength:d.size,...u.operationKey?{operationKey:u.operationKey}:{},...u.clientId?{clientId:u.clientId}:{},...u.enqueuedAtMs===void 0?{}:{enqueuedAtMs:u.enqueuedAtMs},...u.deadlineAtMs===void 0?{}:{deadlineAtMs:u.deadlineAtMs},legacy:u.operationKey===void 0})}}return t.sort((n,r)=>n.claimedAtMs-r.claimedAtMs||n.path.localeCompare(r.path))}function hd(e){try{let t=JSON.parse(O(e,"mailbox record"));return typeof t.id!="string"||!t.id?null:{id:t.id,...typeof t.operationKey=="string"?{operationKey:t.operationKey}:{},...typeof t.clientId=="string"?{clientId:t.clientId}:{},...typeof t.enqueuedAtMs=="number"?{enqueuedAtMs:t.enqueuedAtMs}:{},...typeof t.deadlineAtMs=="number"?{deadlineAtMs:t.deadlineAtMs}:{}}}catch{return null}}function gb(e,t,n,r,i){for(let o of To(e)){if(t<=0)break;let s=Fo(o);n(o,s.mtimeMs)>r||(Qn(o,{force:!0}),i(),t--)}return t}function To(e){return vi(e)?Ri(e,{withFileTypes:!0}).filter(t=>t.isFile()).map(t=>Ie(e,t.name)).sort():[]}function Cb(e){if(!vi(e))return[];let t=[];for(let n of Ri(e,{withFileTypes:!0})){let r=Ie(e,n.name);n.isFile()?t.push(r):n.isDirectory()&&t.push(...Cb(r))}return t.sort()}function TM(e){if(vi(e))for(let t of Ri(e,{withFileTypes:!0})){if(!t.isDirectory())continue;let n=Ie(e,t.name);Ri(n).some(r=>r.endsWith(".claim"))||Qn(n,{recursive:!0,force:!0})}}function FM(e){try{return Fo(e).size}catch{return 0}}function Rb(e){return Buffer.from(e,"utf8").toString("base64url")}function hb(e){try{let t=Buffer.from(e,"base64url").toString("utf8");return Rb(t)===e?t:null}catch{return null}}import{execFileSync as BM}from"child_process";import{existsSync as _M}from"fs";import{deserializeSCIP as LM,SymbolRole as AM}from"@c4312/scip";import{realpathSync as Xte}from"fs";import{basename as Zte,dirname as ene,join as tne,relative as nne,sep as rne}from"path";import{fileURLToPath as one,pathToFileURL as sne}from"url";function Ja(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 yd=new WeakMap,MM="SCIP_RUST_SCIP_OCCURRENCE_REFERENCE_MODE";function vb(e,t){let n=new Map,r=Ya(),i=t.filter(s=>Eb(s,r));if(i.length===0)return n;let o=Db(e);if(!o)return n;for(let s of i){let a=wb(o,s);a!==null&&n.set(s.symbolId,a)}return n}function Ib(e,t){if(!Eb(t,Ya()))return null;let n=Db(e);return n?wb(n,t):null}function wb(e,t){return e.referencesBySymbol.get(t.symbol)??[]}function Eb(e,t="safe"){if(!e.symbol.startsWith("rust-analyzer ")||!e.relativePath.endsWith(".rs")||Oe(e.symbol)||/impl#\[[^\]]+\]\[Default\]default\(\)\.$/.test(e.symbol))return!1;if(t==="all")return!0;let n=he(e.symbol);if(n==="method")return!0;if(n!=="term")return!1;let r=De(e.symbol);return"kind"in r?!1:!NM(r)}function NM(e){for(let t=0;t<e.descriptors.length-1;t+=1)if(e.descriptors[t]?.suffix==="type")return!0;return!1}function Db(e){if(yd.has(e))return yd.get(e)??null;let t=OM(e);return yd.set(e,t),t}function OM(e){if(!e.generation.indexPath||!_M(e.generation.indexPath))return null;try{let t=LM(ye(e.generation.indexPath,{inputKind:"SCIP occurrence-reference index",maxBytes:Fe})),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&AM.Definition)!==0)continue;let s=jM(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,Ja(i));return{referencesBySymbol:n}}catch{return null}}function jM(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 Ya(){return process.env[MM]==="all"?"all":"safe"}var Pb=new Map;function bd(e){let n=Va(e).resolvedBinary??null;return{engine:"rust-analyzer",resolvedBinary:n,version:n?$M(e,n):"unavailable"}}function Tr(e){return{...bd(e),scipOccurrenceReferenceMode:Ya()}}function $M(e,t){let n=`${e}\0${t}`,r=Pb.get(n);if(r)return r;let i;try{i=BM(t,["--version"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:2e3}).trim()}catch{i="unknown"}return Pb.set(n,i),i}import{createHash as HM}from"crypto";var UM=new Set(["Cargo.lock","Cargo.toml","rust-project.json","rust-toolchain","rust-toolchain.toml"]);function kb(e){let t=yu(e,{includePath:qM});return HM("sha256").update(JSON.stringify(t)).digest("hex")}function qM(e){let t=e.replaceAll("\\","/"),n=t.split("/").at(-1)??t;return t.endsWith(".rs")||UM.has(n)?!0:t===".cargo/config"||t===".cargo/config.toml"||t.endsWith("/.cargo/config")||t.endsWith("/.cargo/config.toml")}import{createHash as GM}from"crypto";import{resolve as VM}from"path";var wi=3;function xd(e){return GM("sha256").update(wn({kind:"scip-query-durable-rust-mailbox",protocolVersion:wi,sessionDir:VM(e)})).digest("hex")}function _b(e,t){return G(e)?e.protocolVersion!==wi?Fb(e.protocolVersion===void 0?"helper wrote a prior uncorrelated response protocol":`helper wrote unsupported response protocol ${String(e.protocolVersion)}`):e.mailboxVersion!==Zn||e.id!==t.requestId||e.operationKey!==t.operationKey||e.sessionIdentity!==t.sessionIdentity||e.deadlineAtMs!==t.deadlineAtMs?Fb("helper wrote an incompatible response identity"):typeof e.completedAtMs!="number"||!Number.isFinite(e.completedAtMs)||e.completedAtMs>t.deadlineAtMs||t.nowMs>t.deadlineAtMs?{ok:!1,code:"expired-request",error:"helper response arrived after the durable request deadline"}:e.ok===!1?typeof e.error!="string"||!JM(e.errorCode)?Sd("helper wrote an invalid rejection response"):{ok:!1,code:e.errorCode,error:e.error}:e.ok!==!0||e.session!=="created"&&e.session!=="reused"&&e.session!=="invalidated"||!WM(e.response,t.requestKind)?Sd("helper wrote an invalid success response"):{ok:!0,session:e.session,response:e.response}:Sd("helper wrote an invalid response object")}function WM(e,t){return!G(e)||typeof e.available!="boolean"||e.reason!==void 0&&typeof e.reason!="string"?!1:t==="import-definitions"?Array.isArray(e.sourcePaths)&&e.sourcePaths.every(n=>Array.isArray(n)&&n.length===2&&typeof n[0]=="string"&&(n[1]===null||typeof n[1]=="string")):Tb(e.references,zM)&&(e.incompleteReferenceSymbolIds===void 0||Array.isArray(e.incompleteReferenceSymbolIds)&&e.incompleteReferenceSymbolIds.every(n=>Number.isSafeInteger(n)))&&(e.callees===void 0||Tb(e.callees,KM))&&(e.signatures===void 0||Array.isArray(e.signatures)&&e.signatures.every(n=>Array.isArray(n)&&n.length===2&&Number.isSafeInteger(n[0])&&(n[1]===null||typeof n[1]=="string")))}function Tb(e,t){return Array.isArray(e)&&e.every(n=>Array.isArray(n)&&n.length===2&&Number.isSafeInteger(n[0])&&Array.isArray(n[1])&&n[1].every(t))}function zM(e){return G(e)&&typeof e.file=="string"&&B(e.line)&&B(e.column)}function KM(e){return G(e)&&typeof e.symbol=="string"&&typeof e.file=="string"&&B(e.line)}function JM(e){return e==="unsupported-protocol"||e==="malformed-request"||e==="expired-request"||e==="handler-error"}function Sd(e){return{ok:!1,code:"malformed-response",error:e}}function Fb(e){return{ok:!1,code:"incompatible-response",error:e}}var nN=5e3,jb=10,rN=3e4;function Lb(e,t,n,r=Ub){let i=r.engineIdentity(e),o={protocolVersion:wi,projectRoot:r.canonicalProjectRoot(e),projectFingerprint:r.projectFingerprint(e),engine:{engine:i.engine,resolvedBinary:i.resolvedBinary,version:i.version},workerFingerprint:r.fileFingerprint(t),environment:Bb(r.environment())};return{key:qb(wn(o)),...o}}function _o(e,t,n,r){if(e.protocolVersion!==wi||!n(e.pid))return!1;if(!e.processIdentity)return!0;let i=r?.(e.pid);return i!=null&&wt(e.processIdentity,i)}function Cd(e,t,n){let r;try{r=Un(t,{maxBytes:je,inputKind:"Rust semantic engine artifact"})}catch{r="missing"}let i=qb(wn({projectRoot:Ei(e),serverPath:Ei(t),serverFingerprint:r})).slice(0,20);return Ei(n,`scip-query-rust-session-${i}`)}function Ab(e){let t=e===void 0?Number.NaN:Number(e);return Number.isInteger(t)&&t>=0?t:0}function Bb(e){return Object.fromEntries(Object.entries(e).filter(([t])=>Hb(t)).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,n??null]))}function $b(e,t){let n=t.runtime??lN,r=t.identityRuntime??Ub,i=Cd(e,t.serverPath,t.tempRoot??tN()),o=!1,s=(a,c)=>{if(o)throw new Error("Durable Rust semantic session was already disposed.");return oN(i,t.serverPath,t.semanticWorkerPath,a,c,n,t.mailboxLimits)};return{requestSemantic(a,c){let l=Lb(e,t.semanticWorkerPath,a,r),{readinessDeadlineMs:u,...d}=a;return s({kind:"semantic",identityKey:l.key,workerEnvironment:Nb(),request:{...d,referenceRetryTimeoutMs:iN(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,a.referenceRetryTimeoutMs),settleDelayMs:process.env.SCIP_RUST_SEMANTIC_SETTLE_MS===void 0?a.settleDelayMs:Ab(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS)},timeoutMs:c},c)},requestImportDefinitions(a,c){let l=Lb(e,t.semanticWorkerPath,a,r),{readinessDeadlineMs:u,...d}=a;return s({kind:"import-definitions",identityKey:l.key,workerEnvironment:Nb(),request:{...d,settleDelayMs:process.env.SCIP_RUST_SEMANTIC_SETTLE_MS===void 0?a.settleDelayMs:Ab(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS)},timeoutMs:c},c)},shutdown(){o=!0}}}function iN(e,t){return t!==void 0?t:e===void 0?rN:void 0}function oN(e,t,n,r,i,o,s={}){let a=o.now(),c=a+i,l=(o.monotonicNow??Te)(),u=l+i,d=Ii("rust-semantic-v3",r),m=kr(d),f=za(e),p=xd(e),g=Ka(f,{mailboxVersion:Zn,protocolVersion:wi,id:m,operationKey:d,clientId:o.randomId(),enqueuedAtMs:a,deadlineAtMs:c,sessionIdentity:p,request:r},{nowMs:a,limits:s});for(Mb(e,t,n,u,o);(o.monotonicNow??Te)()<=u;){if(Ob(g.responsePath)){let h=sN(te(g.responsePath,{maxBytes:s.maxItemBytes??je,inputKind:"durable Rust semantic mailbox response"}),{requestId:m,operationKey:d,sessionIdentity:p,deadlineAtMs:g.authoritativeDeadlineAtMs,requestKind:r.kind,nowMs:o.now()});if(!h.ok)throw new Error(h.error);return V()&&Bn({type:"span",name:"rust.semantic.durable-session.request",durationMs:(o.monotonicNow??Te)()-l,ok:!0,session:h.session,kind:r.kind}),h.response}let y=Lo(e);(!y||!_o(y,o.now(),o.isProcessAlive,o.readProcessIdentity))&&Mb(e,t,n,u,o),o.sleep(jb)}throw new Error(`Durable Rust semantic session timed out after ${(i/1e3).toFixed(0)}s.`)}function Mb(e,t,n,r,i){let o=Lo(e);if(o&&_o(o,i.now(),i.isProcessAlive,i.readProcessIdentity))return;eN(Ei(e,"server.json"),{force:!0}),i.spawnServer(t,e,n);let s=i.monotonicNow??Te,a=Math.min(r,s()+nN);for(;s()<=a;){let c=Lo(e);if(c&&_o(c,i.now(),i.isProcessAlive,i.readProcessIdentity))return;i.sleep(jb)}throw new Error("Durable Rust semantic session helper did not become ready within 5s.")}function Lo(e){try{let t=JSON.parse(te(Ei(e,"server.json"),{maxBytes:Ce,inputKind:"durable Rust session state"}));if(typeof t.protocolVersion!="number"||t.sessionIdentity!==void 0&&(typeof t.sessionIdentity!="string"||t.sessionIdentity!==xd(e))||typeof t.pid!="number"||typeof t.heartbeatAtMs!="number"||t.busyUntilMs!==void 0&&typeof t.busyUntilMs!="number"||t.mailbox!==void 0&&!aN(t.mailbox))return null;let n=t.processIdentity===void 0?null:In(t.processIdentity);return t.processIdentity!==void 0&&(!n||n.pid!==t.pid)?null:{protocolVersion:t.protocolVersion,...t.sessionIdentity===void 0?{}:{sessionIdentity:t.sessionIdentity},pid:t.pid,...n?{processIdentity:n}:{},heartbeatAtMs:t.heartbeatAtMs,...t.busyUntilMs===void 0?{}:{busyUntilMs:t.busyUntilMs},...t.mailbox===void 0?{}:{mailbox:t.mailbox}}}catch{return null}}function sN(e,t){try{return _b(JSON.parse(e),t)}catch(n){return{ok:!1,code:"malformed-response",error:`helper wrote malformed JSON: ${n instanceof Error?n.message:String(n)}`}}}function aN(e){if(!e||typeof e!="object")return!1;let t=e;return B(t.pending)&&B(t.inflight)&&B(t.responses)&&B(t.deadLetters)&&B(t.invalid)&&B(t.totalItems)&&typeof t.totalBytes=="number"&&Number.isFinite(t.totalBytes)&&t.totalBytes>=0&&(t.oldestPendingAt===void 0||Number.isFinite(Date.parse(t.oldestPendingAt)))}function Nb(){return Object.fromEntries(Object.entries(process.env).filter(([e])=>cN(e)).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,t??null]))}function Hb(e){return e==="HOME"||e==="PATH"||e.startsWith("CARGO_")||e.startsWith("RA_")||e.startsWith("RUST")}function cN(e){return Hb(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 Ub={canonicalProjectRoot(e){try{return ZM(e)}catch{return Ei(e)}},projectFingerprint(e){return kb(e)},engineIdentity:bd,fileFingerprint(e){return Un(e,{maxBytes:je,inputKind:"Rust semantic engine artifact"})},environment(){return Bb(process.env)}},lN={now:Date.now,monotonicNow:Te,randomId:QM,isProcessAlive:Yn,readProcessIdentity:Nt,spawnServer(e,t,n){if(!Ob(e))throw new Error(`Durable Rust semantic session helper was not found at ${e}. Run npm run build first.`);YM(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 qb(e){return XM("sha256").update(e).digest("hex")}var Vb=15e3,Wb=8,Kb=5e3,pN=64,gN=96,Ed=class{constructor(t,n,r={}){this.projectRoot=t;this.status=n;this.opts=r;this.requester=r.requester??bN(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:Ao(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,references:Xn(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:Ao(t)}}}calleesForDefinitions(t){let n=this.status(this.projectRoot);if(!n.available||!n.resolvedBinary)return{available:!1,resolvedBinary:n.resolvedBinary,reason:n.reason,callees:Mo(t)};try{let r=this.requestSession(n.resolvedBinary,t,{includeReferences:!1,includeCallees:!0});return{available:r.available,resolvedBinary:n.resolvedBinary,reason:r.reason,callees:Id(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:Mo(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:Ao(t),callees:Mo(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:Xn(t,new Map(o.references),new Set(o.incompleteReferenceSymbolIds??[])),callees:Id(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:zb(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:vN(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:zb(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=Xa(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Vb),o=Qa(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,0),s=Xa(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Wb),a=Qa(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=Oo(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=IN(m);return E("rust.semantic.session.request",()=>this.requester.requestSemantic(m,Pr(f,Dd(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:Ao(n)}:this.opts.fallbackReferenceResolver?.referencesForDefinitions(n),s=r.length===0?{available:!0,callees:Mo(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:Xn(n,o.references),callees:Id(r,s.callees)}:{available:!1,resolvedBinary:t.resolvedBinary,reason:i instanceof Error?i.message:String(i),references:Ao(n),callees:Mo(r)}}requestImportDefinitions(t,n,r){let i=Xa(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Vb),o=Xa(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Wb),s=Qa(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(i,1e4)),a=Qa(process.env.SCIP_RUST_SEMANTIC_SETTLE_MS,Kb),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,Pr(r.length,i,o)),()=>({file:n,positions:r.length}))}};function Jb(e,t,n={}){return new Ed(e,t,n)}function Oo(e,t){let n=Zb(e);if(n!==null)return n;let r=t.includeReferences!==!1;return r&&t.includeCallees!==!0&&t.includeSignatures!==!0&&t.definitionCount<=pN||r&&t.includeCallees===!0&&t.includeSignatures!==!0&&t.definitionCount<=gN?0:Kb}function Yb(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 hN(e){return Yb(e).transport}function ore(e,t){let n=Yb(t);if(n.transport==="worker")return{...n,state:"per-command"};let r=No(Qb()),i=Cd(e,r,wd()),o=Lo(i);return o?{...n,state:_o(o,Date.now(),Yn,Nt)?"live":"stale",pid:o.pid,heartbeatAtMs:o.heartbeatAtMs,...o.busyUntilMs===void 0?{}:{busyUntilMs:o.busyUntilMs}}:{...n,state:"stopped"}}function yN(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=RN(u);r=!0;try{a()}catch{}V()&&Bn({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=performance.now();try{return d(e)}catch(p){c(p,u,performance.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 bN(e,t,n={worker:()=>SN(),durable:()=>$b(e,{serverPath:No(Qb()),semanticWorkerPath:No(Xb())})}){return hN(t)==="durable"?yN(n.durable(),n.worker):n.worker()}function SN(e={}){let t=null,n=null,r=1,i=!1,o=()=>{n&&(Rd(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?dN(e.semanticWorkerPath):Xb();if(!uN(No(l)))throw new Error(`Rust semantic session worker was not found at ${No(l)}. Run npm run build before using built semantic Rust queries.`);return n=Gb(vd(wd(),"scip-query-rust-session-")),t=new fN(l,e.shareEnvironment?{env:mN}:void 0),t.unref(),t},c=()=>{let l=n??Gb(vd(wd(),"scip-query-rust-session-"));return n=l,vd(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=xN(te(m,{maxBytes:je,inputKind:"Rust semantic worker response"}));if(!y.ok)throw new Error(y.error);return y.response}finally{Rd(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=CN(te(m,{maxBytes:je,inputKind:"Rust import-definition worker response"}));if(!y.ok)throw new Error(y.error);return y.response}finally{Rd(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 xN(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 CN(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 RN(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 Ao(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Mo(e){return new Map(e.map(t=>[t.symbolId,[]]))}function zb(e){return new Map(e.map(t=>[t.symbolId,null]))}function Id(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??[]]))}function vN(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??null]))}function IN(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 Dd(e,t){return t&&t>0?Math.max(e,t):e}function Xb(){return new URL("./rust-semantic-session-worker.js",import.meta.url)}function Qb(){return new URL("./rust-semantic-session-server.js",import.meta.url)}function Xa(e,t){return Jn(e)??t}function Qa(e,t){return Zb(e)??t}function Zb(e){if(!e)return null;let t=Number(e);return Number.isInteger(t)&&t>=0?t:null}var Td=15e3,Fd=8;function rS(e,t={}){let n=t.status??Va,r=PN(e,n),i=kN(e,n),o=TN(e,n),s=t.referenceResolver||t.calleeResolver||t.signatureResolver||!EN(t)?null:Jb(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??Yy(t.sourceImportUsageResolver??DN(),t.importDefinitionResolver??s),d=t.calleeSymbolResolver,m=t.sourceZeroCalleeOracle,f=t.scipOccurrenceCalleeOracle,p=new Map,g=new Map,y=null,h=null,C=()=>(y??=n(e),y),b=()=>{let D=C();return D.dependencyAvailable?h??D:D},S=D=>{if(D.length===0)return new Map;let w=jo(D);try{let P=a.referencesForDefinitions(w),L=C();return h={...L,available:P.available,resolvedBinary:P.resolvedBinary??L.resolvedBinary,reason:P.reason??L.reason},P.available?new Map(P.references):Xn(w,P.references)}catch(P){return h={...C(),available:!1,reason:P instanceof Error?P.message:String(P)},Fr(w)}},x=D=>{if(D.length===0)return new Map;let w=jo(D),P=w.filter(eS);if(P.length===0)return _r(w);let L=new Map,ie=nS(P,f),ne=[];for(let _ of P)g.has(_.symbolId)?L.set(_.symbolId,g.get(_.symbolId)??[]):ie.has(_.symbolId)?L.set(_.symbolId,ie.get(_.symbolId)??[]):tS(_,m)?L.set(_.symbolId,[]):ne.push(_);if(ne.length===0)return Di(w,L,void 0);try{let _=c.calleesForDefinitions(ne),me=C();h={...me,available:_.available,resolvedBinary:_.resolvedBinary??me.resolvedBinary,reason:_.reason??me.reason};let oe=Di(ne,_.callees,d);for(let[Nn,ql]of oe)L.set(Nn,ql);return Di(w,L,void 0)}catch(_){return h={...C(),available:!1,reason:_ instanceof Error?_.message:String(_)},_r(w)}},v=(D,w)=>{let P=jo(D),L=jo(w),ie=L.filter(eS),ne=new Map,_=nS(ie,f),me=[];for(let oe of ie)_.has(oe.symbolId)?ne.set(oe.symbolId,_.get(oe.symbolId)??[]):tS(oe,m)?ne.set(oe.symbolId,[]):me.push(oe);if(P.length===0&&me.length===0)return{references:Fr(P),callees:Di(L,ne,void 0)};try{let oe=s?s.referencesAndCalleesForDefinitions(P,me):AN(a,c,{referenceDefinitions:P,calleeDefinitions:me}),Nn=C();h={...Nn,available:oe.available,resolvedBinary:oe.resolvedBinary??Nn.resolvedBinary,reason:oe.reason??Nn.reason};let ql=oe.available?new Map(oe.references):Xn(P,oe.references);for(let[Gl,Vl]of oe.callees)ne.set(Gl,Vl);let ng=Di(L,ne,d);for(let[Gl,Vl]of ng)g.set(Gl,Vl);return{references:ql,callees:ng}}catch(oe){return h={...C(),available:!1,reason:oe instanceof Error?oe.message:String(oe)},{references:Fr(P),callees:_r(L)}}},R=D=>{if(D.length===0)return new Map;let w=jo(D);try{let P=l.signaturesForDefinitions(w),L=C();return h={...L,available:P.available,resolvedBinary:P.resolvedBinary??L.resolvedBinary,reason:P.reason??L.reason},iS(w,P.signatures)}catch(P){return h={...C(),available:!1,reason:P instanceof Error?P.message:String(P)},Za(w)}};return{language:"rust",availability:b,dispose:()=>{s?.dispose()},importUsage:D=>{let w=p.get(D);if(w)return w;try{let P=u.importUsage(D);return p.set(D,P),P}catch(P){return h={...C(),available:!1,reason:P instanceof Error?P.message:String(P)},[]}},referencesFor:D=>S([D]).get(D.symbolId)??[],referencesForDefinitions:S,referencesAndCalleesForDefinitions:v,calleesFor:D=>x([D]).get(D.symbolId)??[],calleesForDefinitions:x,signatureFor:D=>R([D]).get(D.symbolId)??null}}function EN(e){if(e.usePersistentSession!==void 0)return e.usePersistentSession;let t=process.env.SCIP_RUST_SEMANTIC_SESSION;return t!=="0"&&t!=="false"}function DN(){return{importUsageFacts:()=>({usage:[],positions:[]})}}function jo(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:ae(t.symbol),isTypeLike:n.isTypeLike??!1,kind:n.kind??null,documentation:n.documentation??null,enclosingSymbol:n.enclosingSymbol??null}})}function eS(e){return e.isFunctionLike}function tS(e,t){if(!t)return!1;try{return t(e)}catch{return!1}}function nS(e,t){if(!t||e.length===0)return new Map;try{return t(e)}catch{return new Map}}function PN(e,t){return{referencesForDefinitions:n=>FN(e,t,n)}}function kN(e,t){return{calleesForDefinitions:n=>_N(e,t,n)}}function TN(e,t){return{signaturesForDefinitions:n=>LN(e,t,n)}}function FN(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,references:Fr(n)};let i=_d();if(!kd(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:Fr(n)};let o=Pi(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Td),s=ec(process.env.SCIP_RUST_SEMANTIC_REFERENCE_RETRY_TIMEOUT_MS,0),a=Pi(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Fd),c=ec(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),l=Oo(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=Pd(process.execPath,[i],{cwd:e,input:JSON.stringify(u),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Pr(n.length,Dd(o,u.referenceRetryTimeoutMs),a)}),m=Ld(d.stdout);if(m)return{available:m.available,resolvedBinary:r.resolvedBinary,reason:m.reason,references:Xn(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:Fr(n)}}function _N(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,callees:_r(n)};let i=_d();if(!kd(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:_r(n)};let o=Pi(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Td),s=Pi(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Fd),a=ec(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),c=Oo(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=Pd(process.execPath,[i],{cwd:e,input:JSON.stringify(l),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Pr(n.length,o,s)}),d=Ld(u.stdout);if(d)return{available:d.available,resolvedBinary:r.resolvedBinary,reason:d.reason,callees:Di(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:_r(n)}}function LN(e,t,n){let r=t(e);if(!r.available||!r.resolvedBinary)return{available:!1,resolvedBinary:r.resolvedBinary,reason:r.reason,signatures:Za(n)};let i=_d();if(!kd(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:Za(n)};let o=Pi(process.env.SCIP_RUST_SEMANTIC_REQUEST_TIMEOUT_MS,Td),s=Pi(process.env.SCIP_RUST_SEMANTIC_CONCURRENCY,Fd),a=ec(process.env.SCIP_RUST_SEMANTIC_DIAGNOSTICS_TIMEOUT_MS,Math.min(o,1e4)),c=Oo(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=Pd(process.execPath,[i],{cwd:e,input:JSON.stringify(l),encoding:"utf8",maxBuffer:50*1024*1024,timeout:Pr(n.length,o,s)}),d=Ld(u.stdout);if(d)return{available:d.available,resolvedBinary:r.resolvedBinary,reason:d.reason,signatures:iS(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:Za(n)}}function AN(e,t,n){let r=n.referenceDefinitions.length>0?e.referencesForDefinitions(n.referenceDefinitions):{available:!0,references:Fr(n.referenceDefinitions)},i=n.calleeDefinitions.length>0?t.calleesForDefinitions(n.calleeDefinitions):{available:!0,callees:_r(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 Fr(e){return new Map(e.map(t=>[t.symbolId,[]]))}function _r(e){return new Map(e.map(t=>[t.symbolId,[]]))}function Za(e){return new Map(e.map(t=>[t.symbolId,null]))}function Di(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 iS(e,t){return new Map(e.map(n=>[n.symbolId,t.get(n.symbolId)??null]))}function _d(){return wN(new URL("./rust-semantic-worker.js",import.meta.url))}function Ld(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 Pi(e,t){return Jn(e)??t}function ec(e,t){if(!e)return t;let n=Number(e);return Number.isInteger(n)&&n>=0?n:t}import{existsSync as MN}from"fs";import{deserializeSCIP as NN,SymbolRole as ON}from"@c4312/scip";var Ad=new WeakMap;function sS(e,t){let n=t.filter(jN);if(n.length===0)return new Map;let r=!1,i=0,o=0;return E("rust.scip-occurrence.callees",()=>{let s=HN(e);if(r=!!s,!s)return new Map;let a=new Map;for(let c of n){let l=BN(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 jN(e){return!(!e.symbol.startsWith("rust-analyzer ")||!e.relativePath.endsWith(".rs")||!e.isFunctionLike||e.leaf==="main"||Oe(e.symbol))}function BN(e,t,n){let r=K(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)||!$N(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 $N(e,t){let n=oS(e),r=oS(t);if(n.size!==r.size)return!1;for(let[i,o]of n)if(r.get(i)!==o)return!1;return!0}function oS(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 HN(e){if(Ad.has(e))return Ad.get(e)??null;let t=UN(e);return Ad.set(e,t),t}function UN(e){if(!e.generation.indexPath||!MN(e.generation.indexPath))return null;try{let t=Ae(e).filter(o=>o.symbol.startsWith("rust-analyzer ")&&o.relativePath.endsWith(".rs")&&o.isFunctionLike),n=new Map(t.map(o=>[o.symbol,o])),r=NN(ye(e.generation.indexPath,{inputKind:"SCIP occurrence-callee index",maxBytes:Fe})),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&ON.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:Oe(l.symbol),callee:{symbol:l.symbol,file:l.relativePath,line:l.startLine}})}i.set(s,a)}return{occurrencesByFile:i}}catch{return null}}var tc=class{sessions=new WeakMap;getOrCreate(t,n,r){let i=qN(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 qN(e,t){return`${e.config.projectRoot}:${t}-workspace`}import{randomUUID as B0}from"crypto";import{existsSync as $0}from"fs";import{dirname as H0}from"path";import{join as nc}from"path";var Fre=5,_re=5e3,GN="watch.lock",VN="watch-state.json",WN="watch-activity.json",zN="watch-refresh-requests";function aS(e){return{lockPath:nc(e,GN),statePath:nc(e,VN),activityPath:nc(e,WN),refreshRequestsPath:nc(e,zN)}}function Md(e){try{return KN(JSON.parse(O(e,"watch service state")))}catch{return null}}function KN(e){if(!e||typeof e!="object")return null;let t=e;if(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"||!Qe(t.startedAt)||!Qe(t.heartbeatAt)||!Qe(t.lastActivityAt)||!JN(t.watcher)||t.idleDeadlineAt!==void 0&&!Qe(t.idleDeadlineAt))return null;if(t.processIdentity!==void 0){let n=In(t.processIdentity);if(!n||n.pid!==t.pid)return null;t.processIdentity=n}return t.indexGeneration!==void 0&&!/^[a-f0-9]{64}$/.test(t.indexGeneration)||t.lastError!==void 0&&!YN(t.lastError)||t.lastRefresh!==void 0&&!XN(t.lastRefresh)||t.reindexActivity!==void 0&&!QN(t.reindexActivity)||t.refreshRequests!==void 0&&!ZN(t.refreshRequests)||t.typescriptSemantic!==void 0&&!e0(t.typescriptSemantic)||t.typescriptIndex!==void 0&&!t0(t.typescriptIndex)?null:t}function Qe(e){return Hs(e)}function JN(e){if(!e||typeof e!="object"||!("state"in e))return!1;let t=e;switch(t.state){case"idle":return!0;case"waiting":return Xe(t.changedFiles)&&Xe(t.reindexAt);case"indexing":return Xe(t.startedAt);case"cooldown":return Xe(t.until)&&typeof t.dirty=="boolean";case"draining":return Xe(t.startedAt)&&typeof t.reason=="string";default:return!1}}function YN(e){if(!e||typeof e!="object")return!1;let t=e;return Qe(t.at)&&typeof t.message=="string"}function XN(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.trigger?.kind=="string"&&typeof t.result=="string"&&Qe(t.startedAt)&&Qe(t.completedAt)&&Xe(t.durationMs)}function QN(e){if(!e||typeof e!="object")return!1;let t=e;return!Qe(t.windowStartedAt)||!Qe(t.windowEndedAt)||!B(t.runs)||!B(t.rebuilt)||!B(t.reused)||!B(t.failed)||!B(t.suppressed)||!Xe(t.estimatedLogicalOutputBytes)||t.estimatedLogicalOutputBytes<0||!t.byTrigger||typeof t.byTrigger!="object"?!1:Object.values(t.byTrigger).every(n=>n===void 0||B(n))}function ZN(e){if(!e||typeof e!="object")return!1;let t=e;return B(t.pending)&&B(t.claimed)&&B(t.completed)&&B(t.expired)&&B(t.invalid)&&(t.oldestPendingAt===void 0||Qe(t.oldestPendingAt))}function e0(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.sessionsReused)&&Xe(t.sessionsRefreshed)&&Xe(t.sessionsReplaced)&&Xe(t.projectsCreated)&&(t.lastRequestAt===void 0||Qe(t.lastRequestAt))&&(t.lastError===void 0||typeof t.lastError=="string")&&(t.busyUntil===void 0||Qe(t.busyUntil))&&(t.mailbox===void 0||cS(t.mailbox))}function t0(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")&&B(t.requests)&&B(t.sessionsCreated)&&B(t.sessionsReplaced)&&B(t.initializations)&&B(t.programUpdates)&&B(t.documentsEmitted)&&B(t.documentsRemoved)&&(t.lastRequestAt===void 0||Qe(t.lastRequestAt))&&(t.lastDurationMs===void 0||Xe(t.lastDurationMs)&&t.lastDurationMs>=0)&&(t.lastError===void 0||typeof t.lastError=="string")&&(t.busyUntil===void 0||Qe(t.busyUntil))&&(t.mailbox===void 0||cS(t.mailbox))}function cS(e){if(!e||typeof e!="object")return!1;let t=e;return B(t.pending)&&B(t.inflight)&&B(t.responses)&&B(t.deadLetters)&&B(t.invalid)&&B(t.totalItems)&&Xe(t.totalBytes)&&t.totalBytes>=0&&t.totalItems===t.pending+t.inflight+t.responses+t.deadLetters&&(t.oldestPendingAt===void 0||Qe(t.oldestPendingAt))}function Xe(e){return typeof e=="number"&&Number.isFinite(e)}import{performance as W}from"perf_hooks";function Et(e,t,n){if(e.has(t))return e.get(t);let r=n();return e.set(t,r),r}import dS from"path";import{realpathSync as lS}from"fs";function n0(e,t){return e.getReferences().map(n=>{let r=n.getNode();return rc(r,t)})}function r0(e){let t=e;return typeof t.findReferences=="function"?t.findReferences():[]}function mS(e,t,n,r){let i=[];for(let o of r0(e))for(let s of n0(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 ki(i)}function fS(e,t,n,r){let i=[],o=n?.getStart();for(let s of e.getReferences()){let a=s.getNode();Ti(r,a.getSourceFile().getFilePath())===t&&(o!==void 0&&a.getStart()===o||i.push({location:rc(a,r),node:a}))}return i}function rc(e,t){let n=e.getSourceFile(),r=n.getLineAndColumnAtPos(e.getStart());return{file:Ti(t,n.getFilePath())??n.getBaseName(),line:r.line-1,column:r.column-1}}function pS(e,t,n){let r=e.getSourceFile(),i=Od(r,e),o=e.getText(),s=new RegExp(`\\b${U(o)}\\b`,"g"),a=r.getFullText().split(`
|
|
311
|
+
`),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 ki(c.filter(l=>Ti(n,dS.join(n,l.file))===t))}function Nd(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 Od(e,t){return e.getLineAndColumnAtPos(t.getStart()).line-1}function ki(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 Ti(e,t){let n=e||process.cwd(),r=uS(n,t);if(r)return r;try{return uS(lS(n),lS(t))}catch{return null}}function uS(e,t){let n=dS.relative(e,t).replace(/\\/g,"/");return!n||n===".."||n.startsWith("../")?null:n}function gS(e,t,n,r){let i=i0(t,r);return i.size===0?new Map:o0(e,n,i)}function i0(e,t){let n=new Map;for(let r of Z(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 o0(e,t,n){let r=new Map,i=new Map;return t.forEachDescendant(o=>{for(let s of s0(e,o)){let a=n.get(s);if(!a)continue;let c=Od(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 s0(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 a0=$("ts-definition-leaf-candidates",{clearGroups:["definition-catalog"]});function hS(e,t,n,r){let i=$d(e,t),o=jd(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 jd(s,n)}function Bd(e,t,n,r){return jd($d(e,t).get(r)??[],n)}function yS(e,t){let n=new Map;for(let[r,i]of $d(e,t)){let o=i[0];o&&n.set(r,o)}return n}function $d(e,t){return a0.get(e,t,()=>{let n=new Map;for(let r of Z(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 jd(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 c0 from"path";import{realpathSync as l0}from"fs";var Bo=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"];function Xt(e){let t=e.toLowerCase();return Bo.some(n=>t.endsWith(n))}function bS(e,t){let n=new Map,r=null,i=null,o=()=>(i??=A(e,{extensions:Bo}),i),s=()=>(r??=E("typescript.source-file-index",()=>u0(e.config.projectRoot,t,o()),()=>({projects:t.length,indexedDocuments:o().length})),r),a=c=>Xt(c)?Et(n,c,()=>{let l=SS(e.config.projectRoot,c);if(!l)return null;for(let{project:u,sourceFiles:d}of s()){let m=d.get(l)??null;if(m||(m=u.addSourceFileAtPathIfExists(l)??null,m&&Hd(d,m)),m)return{project:u,sourceFile:m}}return null}):null;return{sourceFile:c=>a(c)?.sourceFile??null,sourceFileMatch:a,indexedTypeScriptLikeDocuments:o}}function u0(e,t,n){let r=t.map(({project:i})=>{let o=new Map;for(let s of i.getSourceFiles())Hd(o,s);return{project:i,sourceFiles:o}});for(let i of n){let o=SS(e,i);if(o)for(let s of r){if(s.sourceFiles.has(o))break;let a=s.project.addSourceFileAtPathIfExists(o)??null;if(a){Hd(s.sourceFiles,a);break}}}return r}function Hd(e,t){let n=Ud(t.getFilePath());e.set(n,t);try{e.set(Ud(l0(n)),t)}catch(r){if(!_e(r))throw r}}function SS(e,t){try{return Ud(mn(e,t,{inputKind:"indexed TypeScript source file"}).absolutePath)}catch(n){if(!_e(n))throw n;return null}}function Ud(e){return c0.resolve(e)}function qd(e,t){for(let n of e)if(t===n.name||t.startsWith(`${n.name}/`))return n.name;return null}function xS(e){let t=`${e.relativeDir}/src`;return[`${t}/index.ts`,`${t}/index.tsx`,`${t}/index.mts`,`${t}/index.cts`]}import{existsSync as $o}from"fs";import Ve from"path";var Gd=["tsconfig.json","tsconfig.app.json","tsconfig.node.json","tsconfig.base.json"];function Vd(e,t){let r=t?Ve.dirname(Ve.join(e,t)):e,i=Ve.resolve(e);for(;r.startsWith(i);){for(let s of Gd){let a=Ve.join(r,s);if($o(a))return a}let o=Ve.dirname(r);if(o===r)break;r=o}for(let o of Gd){let s=Ve.join(e,o);if($o(s))return s}return null}function CS(e){let t=e.config.projectRoot,n=new Set(d0(t,e.config.semantic?.typescript?.tsconfigs)),r=A(e,{includeIgnored:!1,extensions:Bo});for(let i of r){let o=Vd(t,i);o&&n.add(Ve.resolve(o))}if(n.size===0){let i=Vd(t);i&&n.add(Ve.resolve(i))}return[...n].filter(i=>!RS(t,i)).sort((i,o)=>i.localeCompare(o))}function d0(e,t=[]){let n=new Set;for(let r of t){let i=Ve.isAbsolute(r)?r:Ve.join(e,r);$o(i)&&n.add(Ve.resolve(i))}for(let r of m0(e))for(let i of Gd){let o=Ve.join(r,i);$o(o)&&n.add(Ve.resolve(o))}if(n.size===0){let r=Vd(e);r&&n.add(Ve.resolve(r))}return[...n].filter(r=>!RS(e,r)).sort((r,i)=>r.localeCompare(i))}function m0(e){let t=Ve.join(e,"package.json");if(!$o(t))return[];let n;try{n=JSON.parse(O(t,"project package manifest"))}catch{return[]}return(Array.isArray(n.workspaces)?n.workspaces:n.workspaces?.packages??[]).flatMap(i=>Lu(e,i))}function RS(e,t){let n=Ve.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 f0}from"module";var vS=f0(import.meta.url),Ho,ic;function Wd(){if(Ho!==void 0)return Ho;try{Ho=vS("ts-morph")}catch{Ho=null}return Ho}function oc(){if(ic)return ic;let e=Wd();if(!e)return"ts-morph:unavailable";let t="unknown";try{t=vS("ts-morph/package.json").version??"unknown"}catch{}return ic=`ts-morph:${t}:typescript:${e.ts.version}`,ic}function IS(e,t){return t.map(n=>({tsconfigPath:n,project:new e.Project({tsConfigFilePath:n,skipFileDependencyResolution:!0})}))}function sc(e,t,n){return{language:"typescript",availability:()=>({available:!1,reason:e,tsconfigPath:t,tsconfigPaths:n}),importUsage:()=>[],referencesFor:()=>[],calleesFor:()=>[],signatureFor:()=>null}}function ac(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,p0(o));return r}function DS(e,t,n){let r=ES(e,t),i=ES(e,n),o=[...r].filter(d=>!i.has(d)).sort(),s=[...i].filter(d=>!r.has(d)).sort(),a=wS(e,t),c=wS(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 wS(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 PS(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,g0(s));return i}function ES(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 p0(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(kS)}function g0(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)||kS(n.location,r.location))}function kS(e,t){return e.file.localeCompare(t.file)||e.line-t.line||e.column-t.column}var h0=32;function MS(e,t){let n=E("typescript.provider.load",()=>Wd());if(!n)return sc("ts-morph is not installed");let r=E("typescript.provider.tsconfig-discovery",()=>CS(e));if(r.length===0)return sc("no tsconfig found");try{let i=E("typescript.provider.project-bundles",()=>IS(n,r),()=>({tsconfigs:r.length}));return y0(e,n,i)}catch(i){return sc(i instanceof Error?i.message:String(i),r[0],r)}}function y0(e,t,n,r={}){return E("typescript.provider.construct",()=>new Kd(e,t,n),()=>({tsconfigs:n.length,reusedProjects:r.reusedProjects===!0}))}var Kd=class{constructor(t,n,r){this.db=t;this.tsMorph=n;this.projects=r;this.workspacePackages=li(t.config.projectRoot),this.sourceFiles=bS(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 Et(this.importUsageCache,t,()=>{let n=this.sourceFiles.sourceFile(t);if(!n)return[];let r=S0();return E("typescript.import-usage.file",()=>this.importUsageForSourceFile(t,n,r),()=>({file:t,...r}))})}referencesFor(t){return Et(this.referencesCache,t.symbolId,()=>{let n=this.nodeForDefinition(t);return this.referencesForDefinitionNode(t,n)})}referencesForDefinitions(t,n={}){let r=new Map,i=V(),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=>!FS(u));if(a.length>=h0){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=>FS(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=_S();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,...LS(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=Ae(this.db).filter(o=>Xt(o.relativePath)),r=t.filter(o=>this.sourceFiles.sourceFile(o)!==null),i=this.referencesForDefinitionsBySymbolScan(n,r);return PS(n,i,r)}referencesForDefinitionsBySymbolScan(t,n){let r=V(),i=_S(),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 C=o.get(y.symbolId)??[];C.push(...h),o.set(y.symbolId,C)}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 C=ki(h);o.set(y,C),r&&(i.referenceCount+=C.length)}},()=>({definitions:t.length,...LS(i)})),o}addReferencesFromSourceFileScan(t,n,r,i,o,s,a,c,l,u){let d=this.compilerCheckerForSourceFile(t),m=t.compilerNode,f=R0(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 C=Et(c,y,()=>this.compilerSymbolKeys(y)),b=null,S=null,x=h&&r.has(h.symbolId)?i.get(h.symbolId):void 0;if(x&&(b=zd(m,g),!TS(x,n,b))){let v=m.getLineAndCharacterOfPosition(g.getStart(m));S={file:n,line:v.line,column:v.character};let R=l.get(x.symbolId)??[];R.push(S),l.set(x.symbolId,R),u&&(u.requestedHits+=1)}for(let v of C)for(let R of o.get(v)?.values()??[]){if(b??=zd(m,g),TS(R,n,b))continue;if(!S){let w=m.getLineAndCharacterOfPosition(g.getStart(m));S={file:n,line:w.line,column:w.character}}let D=l.get(R.symbolId)??[];D.push(S),l.set(R.symbolId,D),u&&(u.requestedHits+=1)}}}this.tsMorph.ts.forEachChild(g,p)};p(m)}hierarchyTargetsForDefinitions(t){let n=new Map;for(let r of t){let i=this.nodeForDefinition(r),o=i?.compilerNode;if(!o||!this.isHierarchyMethod(o))continue;let s=o.parent;if(!this.isHierarchyContainer(s))continue;let a=this.compilerCheckerForSourceFile(i.getSourceFile()),c=a.getSymbolAtLocation(o.name);if(c)for(let l of this.hierarchyMemberSymbols(a,s,c))for(let u of this.compilerSymbolKeys(l)){let d=n.get(u)??new Map;d.set(r.symbolId,r),n.set(u,d)}}return n}hierarchyMemberSymbols(t,n,r){let i=new Set,o=new Set,s=(a,c,l)=>{if(!o.has(a)){o.add(a),i.add(c);for(let u of l){let d=u.getProperty(r.name);d&&s(u,d,this.hierarchyAncestorTypesForType(t,u))}}};return s(t.getTypeAtLocation(n),r,this.hierarchyAncestorTypes(t,n)),i}addHierarchyMemberReferences(t,n,r){let i=new Map;for(let o of t){let s=this.nodeForDefinition(o),a=s?.compilerNode;if(!a||!this.isHierarchyMethod(a))continue;let c=a.parent;if(!this.isHierarchyContainer(c))continue;let l=this.compilerCheckerForSourceFile(s.getSourceFile()),u=l.getSymbolAtLocation(a.name);if(!u)continue;let d=a.getSourceFile(),m=d.getLineAndCharacterOfPosition(a.name.getStart(d)),f={definition:o,location:{file:o.relativePath,line:m.line,column:m.character}},p=n.get(o.symbolId)??[];for(let y of this.hierarchyMemberSymbols(l,c,u))if(y!==u)for(let h of this.compilerSymbolLocations(y))p.push(h),r&&(r.hierarchyReferences+=1);n.set(o.symbolId,p);let g=this.hierarchyRootMemberSymbols(l,c,u);for(let y of g){let h=i.get(y)??new Map;h.set(o.symbolId,f),i.set(y,h)}r&&(r.hierarchyDefinitions+=1)}for(let o of i.values())if(!(o.size<2)){r&&(r.hierarchyFamilies+=1);for(let{definition:s}of o.values()){let a=n.get(s.symbolId)??[];for(let c of o.values())c.definition.symbolId!==s.symbolId&&(a.push(c.location),r&&(r.hierarchyReferences+=1));n.set(s.symbolId,a)}}}hierarchyRootMemberSymbols(t,n,r){let i=new Set,o=new Set,s=(a,c,l)=>{if(o.has(a))return;o.add(a);let u=!1;for(let d of l){let m=d.getProperty(r.name);m&&(u=!0,s(d,m,this.hierarchyAncestorTypesForType(t,d)))}if(!u)for(let d of this.compilerSymbolKeys(c))i.add(d)};return s(t.getTypeAtLocation(n),r,this.hierarchyAncestorTypes(t,n)),i}compilerSymbolKeys(t){return(t.declarations??[]).map(n=>{let r=n.getSourceFile();return`${r.fileName}\0${n.getStart(r)}\0${t.name}`})}compilerSymbolLocations(t){let n=[];for(let r of t.declarations??[]){let i=r.getSourceFile(),o=Ti(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 Et(this.calleesCache,t.symbolId,()=>Et(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=mS(n,t,o,this.db.config.projectRoot);return r&&(r.semanticRefsMs+=W.now()-s,r.referenceCount+=a.length),a}signatureFor(t){return Et(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 AS(c)}),o=r.getReturnType().getText(n);return`(${i.join(",")})=>${AS(o)}`})}importUsageForSourceFile(t,n,r){let i=[],o=new Map;for(let s of n.getImportDeclarations()){r.declarations+=1;let a=dt(this.db,t,s.getModuleSpecifierValue()),c=s.getImportClause()?.isTypeOnly()??!1;for(let l of Jd(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||x0(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:rc(s,this.db.config.projectRoot),node:s}),r.matchedReferences+=1;break}}}),i.map(s=>s.typeOnlyDeclaration?b0(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 fS(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=>!Nd(c.node)),s=i.some(c=>Nd(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=qd(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,ki(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,ki(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=qd(this.workspacePackages,i.getModuleSpecifierValue());if(!o)return;let s=n.get(o);if(s)for(let a of Jd(i)){if(a.kind!=="named"||!a.identifier)continue;let c=s.get(a.importedName);if(!c||c.size===0)continue;let l=pS(a.identifier,r,this.db.config.projectRoot);l.length>0&&E0(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 xS(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?dt(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 Et(this.indexedDefinitionLeafCache,t,()=>yS(this.db,t)).get(n)??null}nodeForDefinition(t){return Et(this.definitionNodeCache,t.symbolId,()=>this.definitionNodesForFile(t.relativePath).get(t.symbolId)??null)}definitionNodesForFile(t){return Et(this.fileDefinitionNodeCache,t,()=>{let n=this.sourceFiles.sourceFile(t);return n?gS(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=Ti(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?Bd(this.db,u,d,i)??(f&&f!==i?Bd(this.db,u,d,f):null):hS(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=V(),i=0,o=0,s=0,a=0,c=0,l=0,u=0,d=0,m=r?I0():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=Z(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,C=r?W.now():0,b=this.compilerCheckerForSourceFile(p),S=p.compilerNode;r&&(u=Math.round(W.now()-C));let x=new Map,v=D=>{if(this.tsMorph.ts.isCallExpression(D)||this.tsMorph.ts.isNewExpression(D)){r&&(o+=1);let w=this.semanticCalleeForCallNode(b,S,y,D,x,n,m);w&&(r&&(s+=1),C0(h,w.callerId,w.target))}this.tsMorph.ts.forEachChild(D,v)},R=r?W.now():0;v(S),r&&(d=Math.round(W.now()-R));for(let[D,w]of h)h.set(D,D0(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?w0(m):{}}))}semanticCalleeForCallNode(t,n,r,i,o,s,a){let c=a?W.now():0,l=v0(r,zd(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 Jd(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 b0(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 S0(){return{declarations:0,entries:0,bindingSymbols:0,missingBindingSymbols:0,scannedIdentifiers:0,symbolLookups:0,matchedReferences:0,fallbackEntries:0}}function x0(e){for(let t=e;t;t=t.getParent())if(t.getKindName()==="ImportDeclaration")return!0;return!1}function C0(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}function R0(e){let t=new Set;for(let n of e.getImportDeclarations())for(let r of Jd(n))r.localName&&t.add(r.localName);return t}function v0(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 zd(e,t){return e.getLineAndCharacterOfPosition(t.getStart(e)).line}function TS(e,t,n){return t===e.relativePath&&n>=e.startLine&&n<=e.endLine}function FS(e){return e.symbol.includes("#")?he(e.symbol)==="type"&&e.relativePath.endsWith(".d.ts"):!1}function I0(){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 w0(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 _S(){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 LS(e){return{...e,scanMs:Math.round(e.scanMs),packageRefsMs:Math.round(e.packageRefsMs),semanticRefsMs:Math.round(e.semanticRefsMs),hierarchyMs:Math.round(e.hierarchyMs)}}function E0(e,t,n){for(let r of t){let i=e.get(r)??[];i.push(...n),e.set(r,i)}}function D0(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 AS(e){return e.replace(/\s+/g," ").replace(/\bimport\("[^"]+"\)\./g,"").trim()}import{join as O0}from"path";import{createHash as P0}from"crypto";import{existsSync as Uo,statSync as Zd}from"fs";import{basename as k0,dirname as cc,join as er}from"path";var Lr=1,em=1,qo=".scipquery-generations",lc="manifest.json";function Dt(e){return er(cc(e),qo)}function Fi(e){try{let t=JSON.parse(O(er(Dt(e),"state.json"),"SQLite generation state"));return L0(t)?t:null}catch{return null}}function uc(e,t){return dc(Dt(e),t)}function dc(e,t){try{let n=JSON.parse(O(er(e,t,lc),"SQLite generation manifest"));return _0(n,t)?n:null}catch{return null}}function tm(e){let t=Fi(e.dbPath);if(t){let n=T0(e,t.currentGeneration);if(n)return n;if(t.artifactSet==="immutable-v1")throw new Error(`Published SQLite generation ${t.currentGeneration} is missing or invalid.`)}if(Uo(er(cc(e.dbPath),"index.lock")))throw new Error("Legacy SQLite publication is in progress; retry after the reindex lock is released.");return F0(e,t?.currentGeneration)}function NS(e){let t=Fi(e);if(t)return t.currentGeneration;try{let n=er(cc(e),"meta.json"),r=Uo(n)?O(n,"reindex metadata"):void 0;return OS(e,r)}catch{return null}}function tr(e){return ug(Gt(e))??e}function T0(e,t){try{let n=er(Dt(e.dbPath),t),r=uc(e.dbPath,t);if(!r)return null;let i=Yd(n,r.database),o=r.index?Yd(n,r.index):void 0,s=r.metadata?Yd(n,r.metadata):void 0;return!Xd(i,r.database)||r.index&&(!o||!Xd(o,r.index))||r.metadata&&(!s||!Xd(s,r.metadata))?null:{identity:t,databasePath:i,...o?{indexPath:o}:{},...s?{metadataPath:s,metadataRaw:O(s,"reindex metadata")}:{},source:"immutable"}}catch{return null}}function F0(e,t){let n=En(e.dbPath),r=er(cc(e.dbPath),"meta.json"),i=Uo(r)?O(r,"reindex metadata"):void 0,o=Uo(e.indexPath)?e.indexPath:void 0;return{identity:t??OS(e.dbPath,i),databasePath:e.dbPath,...o?{indexPath:o}:{},...i===void 0?{}:{metadataPath:r,metadataRaw:i},source:"legacy",databaseFileIdentity:n}}function OS(e,t){let n=P0("sha256").update("sqlite-generation-legacy-v1\0");return t!==void 0&&n.update(tr(t)),n.update(`\0${En(e)}`),n.digest("hex")}function En(e){let t=Zd(e);return`${t.dev}:${t.ino}:${t.size}:${t.mtimeMs}`}function Yd(e,t){if(k0(t.file)!==t.file||t.file==="."||t.file==="..")throw new Error("SQLite generation manifest contains an unsafe artifact path");return er(e,t.file)}function Xd(e,t){return Uo(e)&&Zd(e).isFile()&&Zd(e).size===t.size}function _0(e,t){return e.version===em&&e.identity===t&&Qd(e.database)&&(e.index===void 0||Qd(e.index))&&(e.metadata===void 0||Qd(e.metadata))}function Qd(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.file=="string"&&!!t.file&&Number.isSafeInteger(t.size)&&(t.size??-1)>=0&&typeof t.sha256=="string"&&/^[a-f0-9]{64}$/.test(t.sha256)}function L0(e){return e.version===Lr&&typeof e.currentGeneration=="string"&&!!e.currentGeneration&&typeof e.publishedAt=="string"&&Number.isFinite(Date.parse(e.publishedAt))&&(e.artifactSet===void 0||e.artifactSet==="immutable-v1")&&A0(e.stableMirrors)&&M0(e.previousGeneration)&&N0(e.publication)}function A0(e){if(e===void 0)return!0;if(!e||typeof e!="object")return!1;let t=e;return typeof t.databaseFileIdentity=="string"&&!!t.databaseFileIdentity&&(t.indexFileIdentity===void 0||typeof t.indexFileIdentity=="string"&&!!t.indexFileIdentity)}function M0(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 N0(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")}var mc=3;var j0="typescript-semantic";function jS(e){let t=O0(e,j0),n=za(t);return{...n,requestDir:n.legacyRequestDir}}function BS(e){return NS(e)}var U0=12e4,q0=5;function US(e,t,n={}){let r=new nm(e,n),i=null,o=null,s=process.env.SCIP_QUERY_SKIP_WATCH_SERVICE==="1",a=()=>(i??=MS(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=>HS(f),()=>a().referencesForDefinitions?.(d,m)??new Map(d.map(f=>[f.symbolId,a().referencesFor(f)]))),u=d=>c({kind:"callees",definitions:[...d]},m=>HS(m),()=>a().calleesForDefinitions?.(d)??new Map(d.map(m=>[m.symbolId,a().calleesFor(m)])));return{language:"typescript",availability:()=>(o??=c({kind:"availability"},W0,()=>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=>V0(m),()=>a().referenceFragmentsForFiles?.(d)??new Map),calleesFor:d=>u([d]).get(d.symbolId)??[],calleesForDefinitions:u,signatureFor:d=>c({kind:"signature",definition:d},z0,()=>a().signatureFor(d)),dispose:()=>i?.dispose?.()}}var nm=class{constructor(t,n={}){this.db=t;this.runtime=n.runtime??J0,this.timeoutMs=n.timeoutMs??K0(),this.mailboxLimits=n.mailboxLimits??{},this.cacheDir=H0(t.config.dbPath),this.projectRoot=Vt(t.config.projectRoot)}db;runtime;timeoutMs;cacheDir;projectRoot;mailboxLimits;request(t){let n=aS(this.cacheDir),r=jS(this.cacheDir),i=Md(n.statePath);if(!$S(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript semantic service is not running.");let o=this.db.generation.identity;if(!o)throw new Error("Published TypeScript generation identity is unavailable.");let s=this.runtime.now(),a=s+this.timeoutMs,c=(this.runtime.monotonicNow??Te)()+this.timeoutMs,l=Ng(),u=Ii("typescript-semantic-v3",{generation:o,profileEnvironment:l,request:t}),d=kr(u),m=Ka(r,{mailboxVersion:Zn,operationKey:u,clientId:this.runtime.randomId(),enqueuedAtMs:s,deadlineAtMs:a,protocolVersion:mc,id:d,generation:o,profileEnvironment:l,request:t},{nowMs:s,limits:this.mailboxLimits});for(;(this.runtime.monotonicNow??Te)()<=c;){if($0(m.responsePath))return G0(te(m.responsePath,{maxBytes:this.mailboxLimits.maxItemBytes??64*1024*1024,inputKind:"TypeScript semantic mailbox response"}),d,o,u);let f=Md(n.statePath);if(!$S(f,this.projectRoot,this.runtime))throw new Error("TypeScript semantic service stopped while processing a request.");this.runtime.sleep(q0)}throw new Error(`TypeScript semantic service timed out after ${this.timeoutMs}ms.`)}};function $S(e,t,n){let r=e?.processIdentity?n.readProcessIdentity?.(e.pid):null;return e!==null&&e.projectRoot===t&&e.typescriptSemantic?.protocolVersion===mc&&n.isProcessAlive(e.pid)&&(!e.processIdentity||r!=null&&wt(e.processIdentity,r))}function G0(e,t,n,r){let i=JSON.parse(e);if(i.protocolVersion!==mc||i.id!==t||i.operationKey!==r||i.ok===!0&&i.generation!==n)throw new Error("TypeScript semantic service wrote an incompatible response.");if(i.ok===!0)return i.response;throw new Error(typeof i.error=="string"?i.error:"TypeScript semantic service request failed.")}function HS(e){if(!Array.isArray(e))throw new Error("TypeScript semantic service wrote an invalid numeric map.");return new Map(e)}function V0(e){if(!Array.isArray(e))throw new Error("TypeScript semantic service wrote an invalid string map.");return new Map(e)}function W0(e){if(!e||typeof e!="object"||typeof e.available!="boolean")throw new Error("TypeScript semantic service wrote invalid availability.");return e}function z0(e){if(e!==null&&typeof e!="string")throw new Error("TypeScript semantic service wrote an invalid signature.");return e}function K0(){let e=Number(process.env.SCIP_TYPESCRIPT_SEMANTIC_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:U0}var J0={now:Date.now,monotonicNow:Te,randomId:B0,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:Yn,readProcessIdentity:Nt};var qS=new tc;On({name:"semantic-provider",groups:["semantic-provider"],clearAll:e=>qS.clear(e)});function Ar(e,t){let n=$e(t)??"typescript";return qS.getOrCreate(e,n,()=>n==="rust"?rS(e.config.projectRoot,{sourceImportUsageResolver:{importUsageFacts:r=>Jy(e,r)},calleeSymbolResolver:Ky(e),sourceZeroCalleeOracle:r=>Y0(e,r),scipOccurrenceCalleeOracle:r=>sS(e,r)}):US(e,t))}function $e(e){return e?N(e)==="rust"?"rust":Xt(e)?"typescript":null:"typescript"}function Y0(e,t){let n=K(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}var X0=/^[A-Za-z_][A-Za-z0-9_]*$/,GS=/\bDefault::default\b/g,Q0=/^\.\.\s*Default::default\b/;function VS(e,t){let n=new Map,r=new Map;for(let i of t){let o=rm(e,i,r);o!==null&&n.set(i.symbolId,o)}return n}function rm(e,t,n=new Map){let r=eO(t.symbol);if(!r)return null;let i=bi(e,[t.symbolId]);if(i.length===0)return null;let o=new RegExp(`(^|[^A-Za-z0-9_])${U(r)}::default\\b`,"g"),s=new RegExp(`(^|[^A-Za-z0-9_])${U(r)}\\s*$`),a=Z0(e,t.symbolId),c=[];for(let l of i){let u=tO(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]??"",C=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 S=0;S<h.length;S+=1){let x=Q0.exec(h.slice(S));if(x){if(a&&f.includes(m)){let R=S+x[0].lastIndexOf("default");c.push({file:l.relative_path,line:g,column:R}),C.add(R),p+=1}S+=x[0].length-1;continue}let v=h[S];if(v==="{"){let R=s.test(h.slice(0,S));m+=1,R&&f.push(m);continue}if(v==="}")for(m=Math.max(0,m-1);f.length>0&&f[f.length-1]>m;)f.pop()}for(GS.lastIndex=0;b=GS.exec(h);){let S=b.index+9;if(!C.has(S))return null}}if(p===0)return null}return Ja(c)}function Z0(e,t){return e.get("SELECT 1 AS present FROM mentions WHERE symbol_id = ? AND role = 1 LIMIT 1",t)?.present===1}function eO(e){let t=/impl#\[([^\]]+)\]\[Default\]default\(\)\./.exec(e)?.[1]??null;return!t||!X0.test(t)?null:t}function tO(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:nO(e,t);return n.set(t,i),i}function nO(e,t){try{return Re(e.config.projectRoot,t,{inputKind:"indexed Rust source file"})}catch(n){if(!_e(n))throw n;return null}}function pc(e){let t=fc(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=Wl(d.path,["typescript"]);return m==="config"||m==="ambient"}).map(d=>d.path),o=fc([...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=>WS(r.get(d))),l=Ee(JSON.stringify({pnpmWorkspaces:e.snapshot.pnpmWorkspaces,typescriptProjectMode:e.snapshot.typescriptProjectMode,typescriptProjects:fc(e.snapshot.typescriptProjects),membership:t})),u=new Map;return{identityFor(d,m){if(!n.has(d))return _i("target-outside-project");if(a)return _i("duplicate-input-path");if(s)return _i("missing-input-fingerprint");if(c)return _i("unreadable-input");let f=[],p,g;if(e.graph===null)f.push("dependency-graph-unavailable"),g="whole-project",p=o;else{let C=iO(d,e.graph,u);if(C.find(S=>!r.has(S)))return _i("missing-input-fingerprint");if(p=fc([...C,...i]),p.some(S=>WS(r.get(S))))return _i("unreadable-input");g="dependency-closure"}let y=p.map(C=>oO(r.get(C)));return{version:1,key:Ee(JSON.stringify({version:1,engineIdentity:e.engineIdentity,schemaVersion:m,projectIdentity:l,inputs:y})),mode:g,inputFiles:p,reasons:f}}}}function rO(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 iO(e,t,n){let r=n.get(e);if(r)return r;let i=rO(e,t);return n.set(e,i),i}function oO(e){return{path:e.path,size:e.size,hash:e.hash}}function WS(e){return e.size<0||e.hash==="unreadable"}function _i(e){return{version:1,key:null,mode:"unkeyed",inputFiles:[],reasons:[e]}}function fc(e){return[...new Set(e)].sort()}var sO=ee("typescript-semantic-identity-context",{clearGroups:["whole-project"]});function nr(e,t,n){let r=sO.get(e,()=>aO(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 Go(e){return A(e,{includeIgnored:!1}).filter(Xt).sort()}function aO(e){try{if(!e.generation.metadataRaw)return null;let t=Gt(e.generation.metadataRaw);if(t.kind!=="legacy"&&t.kind!=="supported"||!t.capabilities.usableForEvidenceCache)return null;let n=ag(t.metadata.fingerprint);return n?{builder:pc({projectFiles:Go(e),snapshot:n,graph:le(e),engineIdentity:oc()}),identities:new Map}:null}catch{return null}}var im="typescript-reference-fragment-v2",hc=ue({kind:"typescript-reference-fragments",invalidation:Q("typescript-reference-fragments"),serialize:e=>JSON.stringify(e),deserialize:lO});function Noe(e,t,n,r=e){let i=Go(e),o=pc({projectFiles:i,snapshot:t,graph:le(e),engineIdentity:oc()}),s=[...n].map(([a,c])=>({relativePath:a,contentHash:o.identityFor(a,im).key,value:[...c]}));if(s.some(a=>a.contentHash===null))throw new Error("TypeScript reference fragment identity is unavailable for an affected document.");return hc.writeBatch(r,s.map(a=>({...a,contentHash:a.contentHash}))),s.length}function om(e,t,n,r){let i=t.filter(s=>Xt(s.relativePath));if(i.length===0)return gc("no TypeScript definitions");let o=gc("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=gc("TypeScript reference fragment provider is unavailable"),o;let a=Go(e),c=new Set(a),l=s.referenceFragmentsForFiles(a),u=ac(i,l),d=DS(i,cO(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=nr(e,f,im);p?.key&&m.push({relativePath:f,contentHash:p.key,value:l.get(f)??[]})}return hc.writeBatch(e,m),o={state:"passing",files:a.length,keyedFiles:m.length,writtenFiles:m.length,...d},o}catch(s){return o=gc(s instanceof Error?s.message:String(s)),o}},()=>({...o}))}function cO(e,t){return new Map([...e].map(([n,r])=>[n,r.filter(i=>t.has(i.file))]))}function sm(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=Go(e);i=c.length;let l=new Map,u=new Map,d=[];for(let p of c){let g=nr(e,p,im);if(!g?.key)return null;l.set(p,g.key);let y=hc.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:ac(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,hc.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:ac(t,u),files:i,cacheHits:o,cacheMisses:s,computedFiles:a}}catch{return null}},()=>({state:r,files:i,cacheHits:o,cacheMisses:s,computedFiles:a}))}function gc(e){return{state:"unavailable",files:0,keyedFiles:0,writtenFiles:0,expectedCount:0,actualCount:0,missing:[],extra:[],reason:e}}function lO(e){try{let t=JSON.parse(e);return!Array.isArray(t)||!t.every(uO)?null:t}catch{return null}}function uO(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 dO="typescript-import-usage-v1",mO="typescript-signatures-v1",am=ee("semantic-prefetched-callees",{clearGroups:["whole-project","source-file","semantic-provider"]}),zS=Sr({kind:"semantic-import-usage",invalidation:Q("semantic-import-usage"),serialize:e=>JSON.stringify(e),deserialize:ix}),KS=Sr({kind:"semantic-signatures",invalidation:Q("semantic-signatures"),serialize:e=>JSON.stringify(e),deserialize:CO}),JS=ue({kind:"typescript-import-usage",invalidation:Q("typescript-import-usage"),serialize:e=>JSON.stringify(e),deserialize:ix}),YS=ue({kind:"typescript-signatures",invalidation:Q("typescript-signatures"),serialize:e=>JSON.stringify(e),deserialize:RO});function st(e){let t=new Map,n=new Set;return{capability:(r,i)=>ox(e,r,i),importUsage:r=>pO(e,r),references:r=>ZS(e,r),materializeReferences:(r,i)=>tx(e,r,t,n,i),callerMap:r=>gO(e,r,t,n),calleeMap:r=>bO(e,r),signature:r=>SO(e,r)}}function fO(e,t){if(t.size===0)return;let n=am.get(e,()=>new Map);for(let[r,i]of t)n.set(r,[...i])}function QS(e,t){if(!am.has(e))return{hits:[],misses:[...t]};let n=am.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 Wo(e,t){return st(e).importUsage(t)}function pO(e,t){if($e(t)==="typescript"){let o="fallback",s=0,a=0,c=0,l=0;return E("typescript.import-usage.materialize",()=>{let u=nr(e,t,dO);if(u?.key){s=1;let m=JS.read(e,t,u.key);if(m)return o="hit",a=1,m;c=1;let f=Qt(e,t);if(!f)return o="unavailable",[];let p=f.importUsage(t);return JS.write(e,t,u.key,p),o="computed",p}l=1;let d=Qt(e,t);return d?(o="direct-fallback",d.importUsage(t)):(o="unavailable",[])},()=>({state:o,eligible:s,cacheHits:a,cacheMisses:c,fallbacks:l}))}let n=rx(e,"semantic-import-usage",t);if(n){let o=zS.read(e,t,n);if(o)return o}let r=Qt(e,t);if(!r)return[];let i=r.importUsage(t);return n&&zS.write(e,t,n,i),i}function yc(e,t){return st(e).references(t)}function ZS(e,t){let n=rm(e,t);if(n)return n;let r=Ib(e,t);if(r)return r;let i=Qt(e,t.relativePath);return i?i.referencesFor(t):[]}function rr(e,t){return st(e).callerMap(t)}function ex(e,t){let n=new Map,r=new Map;for(let i of t){if($e(i.relativePath)==="typescript"){let o=Qt(e,i.relativePath);if(!o)continue;let s=r.get(o)??[];s.push(i),r.set(o,s);continue}cm(e,n,i,ZS(e,i))}for(let[i,o]of r){let s=sm(e,o,c=>Ar(e,c)),a=s?.references??(i.referencesForDefinitions?i.referencesForDefinitions(o,{exact:!0}):new Map(o.map(c=>[c.symbolId,i.referencesFor(c)])));!s&&V()&&om(e,o,a,c=>Ar(e,c));for(let c of o)cm(e,n,c,a.get(c.symbolId)??[])}return n}function gO(e,t,n=new Map,r=new Set){let i=new Map,o=tx(e,t,n,r),s=0;return E("semantic.callers.from-references",()=>{for(let a of t)s+=cm(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 tx(e,t,n,r,i={}){let o=Ge(e),s=[],a=[],c=[],l=0,u=0,d=0,m=0,f=0,p=0,g=0,y=0,h=0,C=0,b=0,S=0,x=[],v=new Map,R=t.filter(w=>$e(w.relativePath)==="typescript"&&!n.has(w.symbolId)&&!r.has(w.symbolId)),D=sm(e,R,w=>Ar(e,w));if(D){h=R.length,C=D.cacheHits,b=D.cacheMisses,S=D.computedFiles;for(let w of R)n.set(w.symbolId,D.references.get(w.symbolId)??[])}if(E("semantic.references.cache-scan",()=>{for(let[w,P]of Ua(t)){let L=[];for(let _ of P)n.has(_.symbolId)?u+=1:r.has(_.symbolId)?y+=1:L.push(_);if(L.length===0){g+=1;continue}let ie=hO(e,o,w);if(!ie){for(let _ of L)$e(_.relativePath)||(l+=1),c.push(_);continue}p+=1;let ne=xg(e,w,ie);for(let _ of L){let me=ne.get(_.symbol)??null;if(me!==null){let oe=yO(me);if(oe){d+=1,n.set(_.symbolId,oe);continue}m+=1}a.push({definition:_,cacheFingerprint:ie})}}},()=>({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){x=[...c,...a.map(w=>w.definition)],v=E("semantic.references.compute-misses",()=>{let w=lm(e,x,i);return f=w.size,w},()=>({definitions:x.length,misses:a.length,unkeyed:c.length,rows:f}));for(let w of x)v.has(w.symbolId)?(n.set(w.symbolId,v.get(w.symbolId)??[]),r.delete(w.symbolId)):r.add(w.symbolId);for(let{definition:w,cacheFingerprint:P}of a)v.has(w.symbolId)&&ox(e,"semantic-references",w.relativePath).available&&s.push({relativePath:w.relativePath,symbol:w.symbol,projectFingerprint:P,payload:JSON.stringify(v.get(w.symbolId)??[])})}return s.length>0&&E("semantic.references.cache-write",()=>Rg(e,s),()=>({entries:s.length})),v.size>0&&om(e,x,v,w=>Ar(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:C,fragmentCacheMisses:b,fragmentComputedFiles:S}}function hO(e,t,n){if(!t)return null;let r=$e(n);return r==="typescript"?t:r==="rust"?Ee(JSON.stringify({kind:"semantic-references",language:r,engine:Tr(e.config.projectRoot),projectFingerprint:t})):null}function lm(e,t,n={}){let r=V(),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=VS(e,t),g=vb(e,t),y=new Map,h=n.prefetchCallees?new Map:null,C=[];for(let S of t){let x,v=()=>(x??=Qt(e,S.relativePath),x);if(h){let P=v();if(P?.referencesAndCalleesForDefinitions){let L=h.get(P);L?L.push(S):h.set(P,[S]),f+=1}}let R=p.get(S.symbolId);if(R){a+=1,c+=R.length,Vo(i,S.symbolId,R,r,P=>{d+=1,m+=P});continue}let D=g.get(S.symbolId);if(D){l+=1,u+=D.length,Vo(i,S.symbolId,D,r,P=>{d+=1,m+=P});continue}let w=v();if(!w){r&&(s+=1);continue}if(r&&(o+=1),w.referencesForDefinitions){let P=y.get(w);P?P.push(S):y.set(w,[S])}else C.push({provider:w,definition:S})}let b=new Set;if(h)for(let[S,x]of h){if(!S.referencesAndCalleesForDefinitions)continue;let v=y.get(S)??[],R=S.referencesAndCalleesForDefinitions(v,x);b.add(S),fO(e,R.callees);for(let D of v){if(!R.references.has(D.symbolId))continue;let w=R.references.get(D.symbolId)??[];Vo(i,D.symbolId,w,r,P=>{d+=1,m+=P})}}for(let[S,x]of y){if(b.has(S))continue;let v=S.referencesForDefinitions(x);for(let R of x){if(!v.has(R.symbolId))continue;let D=v.get(R.symbolId)??[];Vo(i,R.symbolId,D,r,w=>{d+=1,m+=w})}}for(let{provider:S,definition:x}of C){let v=S.referencesFor(x);Vo(i,x.symbolId,v,r,R=>{d+=1,m+=R})}return i},()=>({definitions:t.length,providerHits:o,providerMisses:s,rustDefaultFastPathRows:a,rustDefaultFastPathReferences:c,rustScipOccurrenceFastPathRows:l,rustScipOccurrenceFastPathReferences:u,prefetchCalleeDefinitions:f,definitionsWithReferences:d,referenceCount:m,rows:i.size}))}function Vo(e,t,n,r,i){e.set(t,n),r&&n.length>0&&i(n.length)}function cm(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 yO(e){try{return JSON.parse(e)}catch{return null}}function bc(e,t){return st(e).calleeMap(t)}function bO(e,t){let n=V(),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=Qt(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)??[];XS(r,f.symbolId,p,n,g=>{s+=1,a+=g})}}for(let{provider:u,definition:d}of l){let m=u.calleesFor(d);XS(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 XS(e,t,n,r,i){n.length>0&&(e.set(t,n),r&&i(n.length))}function nx(e,t){return st(e).signature(t)}function SO(e,t){if($e(t.relativePath)==="typescript"){let s="fallback",a=0,c=0,l=0,u=0;return E("typescript.signature.materialize",()=>{let d=nr(e,t.relativePath,mO);if(d?.key){a=1;let f=YS.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=Qt(e,t.relativePath);if(!p)return s="unavailable",null;let g=p.signatureFor(t);return YS.write(e,t.relativePath,d.key,{...f,[t.symbol]:g}),s="computed",g}u=1;let m=Qt(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=rx(e,"semantic-signatures",t.relativePath),r=xO(t);if(n){let s=KS.read(e,r,n);if(s)return s.signature}let i=Qt(e,t.relativePath);if(!i)return null;let o=i.signatureFor(t);return n&&KS.write(e,r,n,{signature:o}),o}function rx(e,t,n){let r=Ge(e);if(!r)return null;let i=$e(n);return i!=="rust"?null:Ee(JSON.stringify({kind:t,language:i,engine:Tr(e.config.projectRoot),projectFingerprint:r}))}function xO(e){return`${e.relativePath}\0${e.symbol}`}function ix(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function CO(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 RO(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 ox(e,t,n){let r=$e(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,...Ar(e,n).availability()}}catch(i){return{slot:t,language:r,available:!1,reason:i instanceof Error?i.message:String(i)}}}function Qt(e,t){if(!$e(t))return null;let n=Ar(e,t);return n.availability().available?n:null}var q={references:yc,referenceMap:lm,callerMap:(e,t)=>st(e).callerMap(t),calleeMap:um};function um(e,t){let n=V(),r=new Map,i=QS(e,t),o=[],s=[],a=0,c=0,l=0,u=0,d=0,m=0,f=0;for(let{definition:b,callees:S}of i.hits)d+=1,S.length>0&&(m+=1,f+=S.length,r.set(b.symbolId,S));let p=vO(e,i.hits);if(p.entries.length>0&&E("semantic.callees.prefetch-cache-write",()=>tu(e,p.entries),()=>({entries:p.entries.length,sourceMissing:p.sourceMissing,skippedUnsupportedLanguage:p.skippedUnsupportedLanguage})),E("semantic.callees.cache-scan",()=>{for(let[b,S]of Ua(i.misses)){if(!$e(b)){n&&(a+=S.length);continue}let x=k(e,b);if(!x){n&&(c+=S.length),s.push(...S);continue}let v=pe(e,b,x),R=sx(e,b);if(!R){s.push(...S);continue}let D=Sg(e,b,v,R);for(let w of S){let P=D.get(w.symbol)??null;if(P!==null){let L=wO(P);if(L){n&&(l+=1),L.length>0&&r.set(w.symbolId,L);continue}n&&(u+=1)}o.push({def:w,contentHash:v,depsDigest:R})}}},()=>({definitions:t.length,skippedUnsupportedLanguage:a,sourceMissing:c,cacheHits:l,parseFailures:u,misses:o.length,unkeyed:s.length,inMemoryHits:d,inMemoryRows:m,inMemoryCalleeCount:f,resultRows:r.size})),o.length===0&&s.length===0)return r;let g=[...s,...o.map(b=>b.def)],y=0,h=E("semantic.callees.compute-misses",()=>{let b=bc(e,g);return y=b.size,b},()=>({definitions:g.length,misses:o.length,unkeyed:s.length,rows:y}));for(let[b,S]of h)r.set(b,S);let C=o.filter(b=>st(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 C.length>0?E("semantic.callees.cache-write",()=>tu(e,C),()=>({entries:C.length})):E("semantic.callees.cache-write-skip",()=>{},()=>({reason:"provider-unavailable",misses:o.length})),r}function vO(e,t){let n=[],r=new Map,i=0,o=0;for(let{definition:s,callees:a}of t){if(!$e(s.relativePath)){o+=1;continue}if(!r.has(s.relativePath)){let l=k(e,s.relativePath),u=l?sx(e,s.relativePath):null;r.set(s.relativePath,l&&u?{contentHash:pe(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 IO="typescript-callees-v1";function sx(e,t){let n=$e(t);if(n==="typescript")return nr(e,t,IO)?.key??null;let r=DO(e,t);return n==="rust"?Ee(JSON.stringify({kind:"semantic-callees",language:n,engine:Tr(e.config.projectRoot),positionMapping:"nearby-leaf-v1",depsDigest:r})):r}function wO(e){try{return JSON.parse(e)}catch{return null}}var EO=$("semantic-deps-digest",{clearGroups:["whole-project","source-file"]});function DO(e,t){return EO.get(e,t,()=>{let r=[...le(e).get(t)??[]].sort().map(i=>`${i}:${pe(e,i,k(e,i))}`);return Ee(r.join("|"))})}function fse(e,t,n={}){let r=H(e,t);if(!r)return[];let o=!ae(r.symbol)&&!e.isIgnored(r.relativePath)?[{relativePath:r.relativePath,line:r.startLine}]:[],s=Yt(e,r,{semantic:n.semantic,semanticEvidence:q}).map(u=>({relativePath:u.file,line:u.line})),a=PO(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 PO(e,t){if(!t.relativePath.endsWith(".rb"))return[];let n=kO(t.symbol);if(n.length===0)return[];let r=[];for(let i of A(e,{extensions:[".rb"],includeIgnored:!1})){let o=k(e,i);if(!o)continue;let s=o.split(`
|
|
312
|
+
`);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 kO(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 TO}from"fs";import{basename as ax,isAbsolute as FO,join as _O}from"path";function Ze(e,t){let n=cx(e,t,{allowMultiple:!1})[0]?.relativePath;return n||LO(e,t)}function Li(e,t){return cx(e,t,{allowMultiple:!0}).map(n=>n.relativePath)}function LO(e,t){if(!t)return null;let n=t.replace(/\\/g,"/").replace(/^\.\//,""),r=FO(n)&&n.startsWith(e.config.projectRoot)?n.slice(e.config.projectRoot.length).replace(/^\/+/,""):n,i=_O(e.config.projectRoot,r);return TO(i)?r:null}function cx(e,t,n){let r=lx(t);if(!r)return[];let i=A(e,{includeIgnored:!1}).map(a=>({relativePath:a,score:AO(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=H(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 AO(e,t){let n=lx(e),r=ax(n),i=ax(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 lx(e){return e.trim().replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"")}function vse(e,t){let n=Li(e,t),r=ka(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&&!Ug(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{extname as MO}from"path";function _se(e,t,n={}){let{context:r=0}=n,i=NO(t);if(i)return jO(e,i.filePath,i.startLine,i.endLine,r);let o=H(e,t);return o?OO(e,o,r):null}function NO(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 OO(e,t,n){let r=e.get("SELECT language FROM documents WHERE relative_path = ?",t.relativePath),i;try{i=Re(e.config.projectRoot,t.relativePath,{inputKind:"indexed source file"})}catch(l){if(!_e(l))throw l;return null}let o=i.split(`
|
|
313
|
+
`),s=Math.max(0,t.startLine-n),a=Math.min(o.length-1,t.endLine+n),c=o.slice(s,a+1).join(`
|
|
314
|
+
`);return{symbol:t.symbol,shortName:I(t.symbol),relativePath:t.relativePath,startLine:s,endLine:a,language:r?.language??ux(t.relativePath),source:c}}function jO(e,t,n,r,i){let o=Ze(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;try{a=Re(e.config.projectRoot,s.relative_path,{inputKind:"indexed source file"})}catch(m){if(!_e(m))throw m;return null}let c=a.split(`
|
|
315
|
+
`),l=Math.max(0,n-1-i),u=Math.min(c.length-1,r-1+i),d=c.slice(l,u+1).join(`
|
|
316
|
+
`);return{symbol:`${s.relative_path}:${n}-${r}`,shortName:`${s.relative_path}:${n}-${r}`,relativePath:s.relative_path,startLine:l,endLine:u,language:s.language??ux(s.relative_path),source:d}}function ux(e){switch(MO(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 BO}from"module";var $O=BO(import.meta.url),pt=HO().version;function HO(){for(let e of["../package.json","../../package.json"])try{return $O(e)}catch{}return{version:"0.0.0"}}import{existsSync as cf,statSync as H$}from"fs";import{join as U$}from"path";import{createHash as fm}from"crypto";import{chmodSync as fx,closeSync as UO,existsSync as Ai,fsyncSync as qO,lstatSync as xc,mkdirSync as GO,openSync as VO,readdirSync as pm,realpathSync as Pt,unlinkSync as WO,writeSync as zO}from"fs";import{homedir as KO}from"os";import{basename as JO,dirname as px,isAbsolute as dx,join as gt,resolve as Cc}from"path";var gx=1,Rc=".scip-query-cache-owner.json",YO=16*1024;function Sc(e,t){return Object.assign(new Error(`refusing unsafe project dbPath ${JSON.stringify(e)} (${t}); use a repository-relative directory that remains inside the checkout`),{name:"UnsafeCachePathError",code:"SCIP_QUERY_UNSAFE_CACHE_PATH",configuredPath:e,reason:t})}function jt(e,t){return Object.assign(new Error(`refusing unowned cache directory ${JSON.stringify(e)} (${t}); move unrelated data elsewhere or choose a new empty dbPath`),{name:"CacheOwnershipError",code:"SCIP_QUERY_CACHE_OWNERSHIP",cacheDir:e,reason:t})}function XO(e,t){let n=Pt(e),r=process.env.SCIP_QUERY_CACHE_DIR;return r?dm(n,Cc(r)):t?.dbPath?dm(n,QO(n,t.dbPath)):dm(n,vc(n))}function hx(){let e=process.env.XDG_CACHE_HOME;return gt(e||gt(KO(),".cache"),"scip-query")}function vc(e){let t=Cc(e);try{t=Pt(t)}catch{}let n=fm("sha256").update(t).digest("hex").slice(0,12);return gt(hx(),"projects",n)}function Ko(e){if(!/^[a-f0-9]{24}$/.test(e))throw new Error(`invalid repository cache identity: ${e}`);let t=gt(hx(),"repositories",e);return xx(t),Pt(t)}function gm(e){return process.env.SCIP_QUERY_SHARED_CACHE!=="0"&&!process.env.SCIP_QUERY_CACHE_DIR&&!process.env.SCIP_QUERY_INDEX_DB&&!e?.dbPath}function yx(e,t){let n=XO(e,t);return{cacheDir:n,dbPath:gt(n,"index.db"),indexPath:gt(n,"index.scip"),metaPath:gt(n,"meta.json")}}function dm(e,t){let n=Pt(e);Ai(t)||xx(t);let r=Pt(t),i=gt(r,Rc);if(Ai(i))return mm(n,r),hm(i),zo(r),r;mx(r);let s=`${JSON.stringify({schemaVersion:gx,canonicalProjectRoot:n,canonicalCacheDir:r,creatorVersion:pt},null,2)}
|
|
317
|
+
`;try{rj(i,s)}catch(a){if(ij(a))return mm(n,r),r;throw a}try{mx(r),nj(r)}catch(a){throw WO(i),a}return r}function mm(e,t){let n=Pt(e),r=Pt(t);return bx(r,n,r)}function qse(e,t,n,r){let i=Pt(e),o=Pt(t),s=Cx(n),a=bx(o,i,s);if(r&&a.ownerSha256!==r)throw jt(t,"ownership record changed after the cache was moved");return a}function Gse(e,t){return Ai(gt(t,Rc))?(mm(e,t),Sx(t),!0):!1}function QO(e,t){let n;try{n=Hn(t)}catch(s){throw s instanceof Je?Sc(t,s.reason):s}let r=Cc(e,...n.split("/"));if(r===e||!ri(e,r))throw Sc(t,"outside-project");let i=ZO(r),o=Pt(i);if(!ri(e,o)&&o!==e)throw Sc(t,"symlink-escape");return r}function ZO(e){let t=e;for(;!Ai(t);){let n=px(t);if(n===t)throw Sc(e,"no-existing-ancestor");t=n}return t}function bx(e,t,n){let r=gt(e,Rc);if(!Ai(r)||xc(r).isSymbolicLink())throw jt(e,"missing regular ownership record");let i=xc(r);if(!i.isFile()||i.size>YO)throw jt(e,"invalid ownership record file");let o=O(r,"cache ownership record"),s=ej(o,e);if(s.canonicalProjectRoot!==t)throw jt(e,"ownership record belongs to a different project");if(s.canonicalCacheDir!==n)throw jt(e,"ownership record names a different cache directory");return{record:s,ownerSha256:fm("sha256").update(o).digest("hex"),physicalCacheDir:e}}function ej(e,t){try{let n=JSON.parse(e);if(n.schemaVersion!==gx||typeof n.canonicalProjectRoot!="string"||typeof n.canonicalCacheDir!="string"||typeof n.creatorVersion!="string"||!dx(n.canonicalProjectRoot)||!dx(n.canonicalCacheDir))throw new Error("invalid fields");return n}catch(n){throw jt(t,`malformed ownership record: ${n instanceof Error?n.message:String(n)}`)}}function mx(e){let t=pm(e).filter(n=>n!==Rc&&!tj(n));if(t.length>0)throw jt(e,`unrecognized existing entries: ${t.slice(0,3).join(", ")}`)}function tj(e){return[".scipquery-generations","affected-shadow-latest.json","affected-shadow.jsonl","agent-hooks","augment-vue-meta.json","cache-lifecycle.lock","evidence.db","evidence.db-shm","evidence.db-wal","health-report-cache.json","index.db","index.db-shm","index.db-wal","index.lock","index.scip","language-indexes","meta.json","reindex-activity.jsonl","shared-cache.json","typescript-index","typescript-scip-fragments","typescript-scip-overlays","typescript-semantic","watch-activity.json","watch-refresh-requests","watch-state.json","watch.lock"].includes(e)?!0:/^(?:reindex-|rust-|typescript-)/.test(e)}function nj(e){for(let t of pm(e)){let n=gt(e,t),r=xc(n);if(r.isSymbolicLink())throw jt(e,`legacy cache entry ${t} is a symlink`);if(r.isDirectory())zo(n);else if(r.isFile())hm(n);else throw jt(e,`legacy cache entry ${t} is not a file or directory`)}zo(e)}function Sx(e){let t=xc(e);if(t.isSymbolicLink())throw jt(e,"managed cache tree contains a symlink");if(t.isFile()){hm(e);return}if(!t.isDirectory())throw jt(e,"managed cache tree contains a special file");zo(e);for(let n of pm(e))Sx(gt(e,n))}function xx(e){GO(e,{recursive:!0,mode:448}),zo(e)}function rj(e,t){let n=VO(e,"wx",384);try{zO(n,t),qO(n)}finally{UO(n)}}function zo(e){process.platform!=="win32"&&fx(e,448)}function hm(e){process.platform!=="win32"&&fx(e,384)}function Cx(e){if(Ai(e))return Pt(e);let t=Pt(px(e));return gt(t,JO(e))}function Vse(e){let t=Ic(e);return fm("sha256").update(t).digest("hex")}function Ic(e){return Cx(Cc(e))}function ij(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EEXIST"}import oj from"better-sqlite3";var sj=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".nbb",".cpcache",".shadow-cljs",".scipquery-cache","__pycache__",".venv","venv"],wc=class{db;config;generation;pathFilter;statementCache=new Map;constructor(t,n){this.config=t,this.pathFilter=n??null;let r=cj(t);this.generation=r.generation,this.db=r.db,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");try{aj(this.db)}catch(i){throw this.db.close(),i}}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
|
|
318
|
+
EXISTS (
|
|
319
|
+
SELECT 1
|
|
320
|
+
FROM defn_enclosing_ranges local_der
|
|
321
|
+
JOIN documents local_d ON local_der.document_id = local_d.id
|
|
322
|
+
WHERE local_der.symbol_id = gs.id
|
|
323
|
+
${this.pathExclusionsFor("local_d").trimStart()}
|
|
324
|
+
)
|
|
325
|
+
OR EXISTS (
|
|
326
|
+
SELECT 1
|
|
327
|
+
FROM mentions local_m
|
|
328
|
+
JOIN chunks local_c ON local_m.chunk_id = local_c.id
|
|
329
|
+
JOIN documents local_d ON local_c.document_id = local_d.id
|
|
330
|
+
WHERE local_m.symbol_id = gs.id
|
|
331
|
+
AND local_m.role = 1
|
|
332
|
+
${this.pathExclusionsFor("local_d").trimStart()}
|
|
333
|
+
)
|
|
334
|
+
)`}get pathExclusions(){return this.pathExclusionsFor("d")}get symbolNoise(){return this.symbolNoiseFor("gs")}pathExclusionsFor(...t){return t.flatMap(n=>sj.flatMap(r=>[`AND ${n}.relative_path NOT LIKE '${r}/%'`,`AND ${n}.relative_path NOT LIKE '%/${r}/%'`])).join(`
|
|
335
|
+
`)}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}};function aj(e){if(!e.prepare("SELECT 1 AS present FROM sqlite_master WHERE type = 'table' AND name = 'documents'").get())return;let n=e.prepare("SELECT relative_path FROM documents").iterate();for(let r of n)Hn(r.relative_path)}function cj(e){for(let t=0;t<4;t+=1){let n=tm(e),r=new oj(n.databasePath,{readonly:!0,fileMustExist:!0});if(n.source==="immutable")return{db:r,generation:n};try{let i=tm(e);if(n.databaseFileIdentity===En(n.databasePath)&&i.source==="legacy"&&i.identity===n.identity&&i.databaseFileIdentity===n.databaseFileIdentity&&i.metadataRaw===n.metadataRaw)return{db:r,generation:n}}catch(i){throw r.close(),i}r.close()}throw new Error("SQLite index publication changed repeatedly while opening a coherent generation.")}import lj from"ignore";import{existsSync as Rx,readdirSync as uj}from"fs";import{dirname as ym,isAbsolute as vx,join as Ec,relative as dj,resolve as mj}from"path";function Ix(e){let t=lj();return fj(e,t)||t.add(hj),{isIgnored:r=>bm(t,e,r),filter:r=>r.filter(i=>!bm(t,e,i))}}function fj(e,t){let n=new Set,r=(s,a)=>{if(!(n.has(s)||!Rx(s)))try{let c=te(s,{maxBytes:Ce,inputKind:"gitignore file"});t.add(a?pj(c,a):c),n.add(s)}catch{}},i=ym(e),o=0;for(;i!==ym(i)&&o<5&&(r(Ec(i,".gitignore"),""),!Rx(Ec(i,".git")));)i=ym(i),o++;return wx(e,"",t,r),n.size>0}function wx(e,t,n,r){let i=t?Ec(e,t):e;r(Ec(i,".gitignore"),t);let o;try{o=uj(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;bm(n,e,`${a}/`)||wx(e,a,n,r)}}function pj(e,t){let n=t.replaceAll("\\","/").replace(/\/+$/,"");return e.split(/\r?\n/).map(r=>gj(r,n)).join(`
|
|
336
|
+
`)}function gj(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 hj=`
|
|
337
|
+
# Dependencies
|
|
338
|
+
node_modules/
|
|
339
|
+
vendor/
|
|
340
|
+
.bundle/
|
|
341
|
+
|
|
342
|
+
# Build output
|
|
343
|
+
dist/
|
|
344
|
+
build/
|
|
345
|
+
out/
|
|
346
|
+
target/
|
|
347
|
+
bin/
|
|
348
|
+
obj/
|
|
349
|
+
|
|
350
|
+
# Python
|
|
351
|
+
__pycache__/
|
|
352
|
+
*.pyc
|
|
353
|
+
*.pyo
|
|
354
|
+
.venv/
|
|
355
|
+
venv/
|
|
356
|
+
.env/
|
|
357
|
+
env/
|
|
358
|
+
*.egg-info/
|
|
359
|
+
|
|
360
|
+
# Rust
|
|
361
|
+
target/
|
|
362
|
+
|
|
363
|
+
# Java / Kotlin / Scala
|
|
364
|
+
*.class
|
|
365
|
+
.gradle/
|
|
366
|
+
.mvn/
|
|
367
|
+
|
|
368
|
+
# C# / .NET
|
|
369
|
+
bin/
|
|
370
|
+
obj/
|
|
371
|
+
packages/
|
|
372
|
+
|
|
373
|
+
# Go
|
|
374
|
+
vendor/
|
|
375
|
+
|
|
376
|
+
# Dart
|
|
377
|
+
.dart_tool/
|
|
378
|
+
build/
|
|
379
|
+
|
|
380
|
+
# PHP
|
|
381
|
+
vendor/
|
|
382
|
+
|
|
383
|
+
# IDE / OS
|
|
384
|
+
.idea/
|
|
385
|
+
.vscode/
|
|
386
|
+
*.swp
|
|
387
|
+
*.swo
|
|
388
|
+
.DS_Store
|
|
389
|
+
Thumbs.db
|
|
390
|
+
|
|
391
|
+
# Type definitions (often noise in queries)
|
|
392
|
+
*.d.ts
|
|
393
|
+
`;function bm(e,t,n){let r=yj(t,n);if(!r)return!1;try{return e.ignores(r)}catch{return!1}}function yj(e,t){if(!t||t===".")return null;if(!vx(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let n=vx(t)?t:mj(e,t),r=dj(e,n).replaceAll("\\","/");return!r||r==="."||r.startsWith("..")?null:r}import{existsSync as Oi}from"fs";import{isAbsolute as Nx,join as Mr,relative as Ox,resolve as jx}from"path";var ir=1,or=2,bj="./node_modules/scip-query/docs/schemas/project-config.schema.json";function Sm(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch(a){return{kind:"malformed",reason:`invalid JSON: ${a instanceof Error?a.message:String(a)}`}}if(!G(t))return{kind:"malformed",reason:"project config must be a JSON object"};let n=t.schemaVersion;if(n!==void 0&&!Number.isInteger(n))return{kind:"malformed",reason:"schemaVersion must be an integer"};let r=n===void 0?ir:n;if(r!==ir&&r!==or)return{kind:"unsupported",schemaVersion:r,direction:r<ir?"older":"future"};let i=t.$schema;if(i!==void 0&&(typeof i!="string"||i.trim()===""))return{kind:"malformed",reason:"$schema must be a non-empty string when present"};let o=Dc(t),s=r!==or||typeof t.$schema!="string";return r===ir?{kind:"legacy",sourceVersion:ir,config:o,needsMigration:s}:{kind:"supported",sourceVersion:or,config:o,needsMigration:s}}function Dc(e){let t=e,{$schema:n,schemaVersion:r,...i}=t;return{$schema:typeof n=="string"&&n.trim()!==""?n:bj,schemaVersion:or,...i}}function Ex(e){return`${JSON.stringify(Dc(e),null,2)}
|
|
394
|
+
`}var Pc=class extends Error{constructor(n,r,i){super(`${n} is ${r} characters; the safety limit is ${i} characters`);this.inputKind=n;this.observedCharacters=r;this.limitCharacters=i;this.name="RegExpPatternBudgetError"}inputKind;observedCharacters;limitCharacters;code="SCIP_QUERY_REGEXP_PATTERN_BUDGET"};function Jo(e,t,n,r=4096){if(!Number.isSafeInteger(r)||r<0)throw new RangeError(`maxCharacters must be a non-negative safe integer; received ${r}`);if(e.length>r)throw new Pc(t,e.length,r);return new RegExp(e,n)}import{createHash as Fx}from"crypto";import{closeSync as _j,fstatSync as _x,openSync as Lj,rmSync as Aj}from"fs";import{dirname as Mj}from"path";import{randomUUID as Sj}from"crypto";import{closeSync as xj,fsyncSync as Cj,linkSync as Rj,mkdirSync as vj,openSync as Ij,statSync as wj,unlinkSync as Ej,writeSync as Dj}from"fs";import{dirname as Im}from"path";var Cm="scip-query-process-lock",Rm=1;var kc=Object.freeze({wallNow:()=>Date.now(),isProcessAlive:Yn,readProcessIdentity:Nt,randomToken:()=>Sj(),makeDirectory:e=>vj(e,{recursive:!0}),openFile:(e,t,n)=>Ij(e,t,n),writeFile:(e,t,n,r)=>Dj(e,t,n,r),syncFile:e=>Cj(e),closeFile:e=>xj(e),linkFile:(e,t)=>Rj(e,t),readFile:e=>O(e,"process lock record"),statFile:e=>{let t=wj(e);return{dev:t.dev,ino:t.ino,size:t.size,mtimeMs:t.mtimeMs}},removeFile:e=>Ej(e)});function Ni(e,t){let n=t.runtime??kc;n.makeDirectory(Im(e));let r;for(let i=0;i<2;i+=1)try{return{kind:"acquired",lock:Px(e,t,n),...r?{reclaimed:r}:{}}}catch(o){if(o.code!=="EEXIST")throw o;let s=Mi(e,{parseLegacy:t.parseLegacy,runtime:n});if(i===0&&kj(e,s,{creationGraceMs:t.creationGraceMs,parseLegacy:t.parseLegacy,runtime:n})){r=s;continue}return{kind:"contended",observation:s}}return{kind:"contended",observation:Mi(e,{parseLegacy:t.parseLegacy,runtime:n})}}function Mi(e,t={}){let n=t.runtime??kc,r,i;try{r=n.statFile(e),i=n.readFile(e)}catch(c){return c.code==="ENOENT"?{state:"missing"}:{state:"malformed"}}let o;try{o=JSON.parse(i)}catch{return{state:"malformed",raw:i,identity:r}}let s=Pj(o);if(s)return{state:"valid",raw:i,identity:r,record:s,owner:Fj(s),parsed:o};let a=t.parseLegacy?.(o)??null;return a?{state:"legacy",raw:i,identity:r,owner:a,parsed:o}:{state:"malformed",raw:i,identity:r,parsed:o}}function Pj(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(t.protocol!==Cm||t.version!==Rm||typeof t.kind!="string"||t.kind.trim()===""||typeof t.pid!="number"||!Number.isSafeInteger(t.pid)||t.pid<=0||typeof t.token!="string"||t.token.trim()===""||typeof t.startedAt!="string"||!Number.isFinite(Date.parse(t.startedAt))||t.detail!==void 0&&(typeof t.detail!="object"||t.detail===null||Array.isArray(t.detail)))return null;let n=t.processIdentity===void 0?null:In(t.processIdentity);return t.processIdentity!==void 0&&(!n||n.pid!==t.pid)?null:{protocol:Cm,version:Rm,kind:t.kind,pid:t.pid,token:t.token,...n?{processIdentity:n}:{},startedAt:t.startedAt,...t.detail?{detail:t.detail}:{}}}function kj(e,t,n={}){let r=n.runtime??kc;if(!vm(t,r))return!1;let i=Tj(`${e}.reclaim`,r);if(!i)return!1;try{let o=Mi(e,{parseLegacy:n.parseLegacy,runtime:r});return!kx(t,o)||!vm(o,r)?!1:wm(e,r)}finally{i.release()}}function Px(e,t,n){let r=t.pid??process.pid,i=n.randomToken(),o=t.processIdentity===void 0?n.readProcessIdentity(r):t.processIdentity,s={protocol:Cm,version:Rm,kind:t.kind,pid:r,token:i,...o?{processIdentity:o}:{},startedAt:new Date(n.wallNow()).toISOString(),...t.detail?{detail:t.detail}:{}},a=`${e}.${i}.candidate`,c=n.openFile(a,"wx",384),l;try{Do(c,Buffer.from(`${JSON.stringify(s)}
|
|
395
|
+
`),n,"process lock"),n.syncFile(c)}catch(d){l=d}try{n.closeFile(c)}catch(d){l??=d}if(l!==void 0)throw xm(a,n),l;try{n.linkFile(a,e)}catch(d){throw xm(a,n),d}xm(a,n);try{Tx(Im(e),n)}catch(d){throw Dx(e,s,n),d}let u=!1;return{path:e,record:s,release:()=>u?!1:(u=!0,Dx(e,s,n))}}function Dx(e,t,n=kc){let r=Mi(e,{runtime:n});return r.state!=="valid"||!r.record||r.record.pid!==t.pid||r.record.token!==t.token||t.processIdentity&&(!r.record.processIdentity||!wt(t.processIdentity,r.record.processIdentity))?!1:wm(e,n)}function Tj(e,t){for(let n=0;n<2;n+=1)try{return Px(e,{kind:"reclaim-guard",runtime:t},t)}catch(r){if(r.code!=="EEXIST")return null;let i=Mi(e,{runtime:t});if(n>0||!vm(i,t))return null;let o=Mi(e,{runtime:t});if(!kx(i,o)||!wm(e,t))return null}return null}function vm(e,t){if(e.state==="missing")return!1;if(e.owner){if(!t.isProcessAlive(e.owner.pid))return!0;if(!e.owner.processIdentity)return!1;let n=t.readProcessIdentity(e.owner.pid);return n!==null&&!wt(e.owner.processIdentity,n)}return!1}function kx(e,t){return e.state===t.state&&e.raw===t.raw&&e.identity!==void 0&&t.identity!==void 0&&e.identity.dev===t.identity.dev&&e.identity.ino===t.identity.ino&&e.identity.size===t.identity.size&&e.identity.mtimeMs===t.identity.mtimeMs}function Fj(e){return{pid:e.pid,...e.processIdentity?{processIdentity:e.processIdentity}:{}}}function Tx(e,t){let n;try{n=t.openFile(e,"r")}catch(r){if(xi(r,process.platform))return;throw r}try{t.syncFile(n)}catch(r){if(!xi(r,process.platform))throw r}finally{t.closeFile(n)}}function wm(e,t){try{return t.removeFile(e),Tx(Im(e),t),!0}catch{return!1}}function xm(e,t){try{t.removeFile(e)}catch{}}var Nj=2e3,Oj=10,jj=3,Fc=class extends Error{constructor(n,r,i){super(`Concurrent edit detected for ${n}; expected revision ${Ax(r)}, but found ${Ax(i)}. The latest file was left untouched.`);this.path=n;this.original=r;this.latest=i;this.name="FileRevisionConflictError"}path;original;latest},Yo=class extends Error{constructor(n,r){super(`Concurrent edit detected for ${n}: ${r} changed since it was read. The latest file was left untouched; reload it and retry.`);this.path=n;this.field=r;this.name="FileContentConflictError"}path;field};function _c(e,t,n={}){let r=Bj(e,n.lockTimeoutMs??Nj,n.monotonicNow??Te);try{let i=Math.max(0,Math.floor(n.maxRetries??jj));for(let o=0;;o+=1){let s=Tc(e),a=t(s,o);if(a.kind==="unchanged")return{changed:!1,attempts:o+1,previous:s,current:s};n.onBeforeCommit?.({attempt:o,snapshot:s,mutation:a});let c=Tc(e);if(!Hj(s.revision,c.revision)){if(o<i)continue;throw new Fc(e,s.revision,c.revision)}try{$j(e,a,s.revision)}catch(l){if(l.code==="EEXIST"){let u=Tc(e);if(o<i)continue;throw new Fc(e,s.revision,u.revision)}throw l}return{changed:!0,attempts:o+1,previous:s,current:Tc(e)}}}finally{r.release()}}function Tc(e){for(let t=0;t<4;t+=1){let n;try{n=Lj(e,"r");let r=Lx(_x(n)),i=pu(n,{maxBytes:je,inputKind:"revisioned text file"}),o=Lx(_x(n));if(!Mx(r,o))continue;return{path:e,text:i,revision:{exists:!0,hash:Fx("sha256").update(i).digest("hex"),identity:o}}}catch(r){if(r.code==="ENOENT")return{path:e,text:"",revision:{exists:!1,hash:Fx("sha256").update("").digest("hex")}};throw r}finally{n!==void 0&&_j(n)}}throw new Error(`Could not read a stable revision of ${e}; the file is changing continuously.`)}function Bj(e,t,n){let r=`${e}.scip-query-write.lock`,i=n()+Math.max(0,t);for(;;){let o=Ni(r,{kind:"revisioned-file-mutation",detail:{target:e}});if(o.kind==="acquired")return o.lock;if(n()>=i)throw new Error(`Timed out after ${t}ms waiting to update ${e}; the file was left untouched.`);Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,Oj)}}function $j(e,t,n){if(t.kind==="delete"){if(!n.exists)return;Aj(e),Ot(Mj(e));return}let r=t.mode??n.identity?.mode;n.exists?Po(e,t.text,{durability:"durable",mode:r}):ko(e,t.text,{durability:"durable",mode:r})}function Hj(e,t){return e.exists===t.exists&&e.hash===t.hash&&(e.identity===void 0?t.identity===void 0:t.identity!==void 0&&Mx(e.identity,t.identity))}function Lx(e){return{dev:e.dev,ino:e.ino,size:e.size,mtimeMs:e.mtimeMs,mode:e.mode&511}}function Mx(e,t){return e.dev===t.dev&&e.ino===t.ino&&e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.mode===t.mode}function Ax(e){return e.exists?e.hash.slice(0,12):"<absent>"}var Nr=".scipquery.json",Hx=250,Ux=0,qx=10*6e4,Uj={enabled:!1,debounceMs:Hx,cooldownMs:Ux,gitPollMs:2e3,idleTimeoutMs:qx,autoRefresh:!0,ignore:[]};var qj=new Set(["$schema","schemaVersion","languages","indexerConcurrency","watch","hooks","indexer","dbPath","entryRoots","semantic","suppressions","declaredCouplings","locality","architecture","coverageContracts","docs"]),Gj=new Set(["enabled","debounceMs","cooldownMs","gitPollMs","idleTimeoutMs","autoRefresh","ignore"]),Vj=new Set(["router"]),Wj=new Set(["pathPrefixes","files","symbolPatterns","qualifiedVars"]),zj=new Set(["typescript","rust"]),Kj=new Set(["tsconfigs"]),Jj=new Set(["rustAnalyzerPath"]),Bx=new Set(to),Yj=new Set(["pnpmWorkspaces","projectMode","projects","configPath"]),Xj=new Set(["architecturalBoundarySegments"]),Qj=new Set(["boundaries","allowedDependencies","requireCompletePolicy","requireAcyclic","requireResolvedBoundaries","requireMinimalPolicy","maxBoundaryFanOut","maxBoundaryFiles","testPaths"]),Zj=new Set(["name","paths","subUnits","maxFiles"]),eB=new Set(["snapshotPaths"]),tB=new Set(["name","files","reason"]),nB=new Set(["id","check","file","reason","expiresAt","createdAt"]),rB=new Set(["name","file","keys","mustEqual","allowExtra"]),iB=new Set(["type","identifier","marker"]),oB=new Set(["type","path","pattern"]),sB=new Set(["object-literal-keys","string-array","markdown-list"]),aB=new Set(["top-level-dirs","file-glob","registered-commands","builtin-skills"]);function Gx(e){let t=Mr(e,Nr);if(!Oi(t))return{};let n;try{n=te(t,{maxBytes:Ce,inputKind:"scip-query project config"})}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`unable to read ${Nr} at ${t}: ${i}`,{cause:r})}return zx(Sm(n),t,"read").config}function _ae(e,t={}){let n=[];mB(e,n);let r=e;r.schemaVersion!==void 0&&r.schemaVersion!==or&&n.push({level:"error",path:"schemaVersion",message:`Must be ${or}; unversioned and v${ir} files are migrated while loading.`}),r.$schema!==void 0&&(typeof r.$schema!="string"||r.$schema.trim()==="")&&n.push({level:"error",path:"$schema",message:"Must be a non-empty string."});let i=new Set(to);for(let[l,u]of(e.languages??[]).entries())i.has(u)||n.push({level:"error",path:`languages[${l}]`,message:`Unsupported language: ${u}`});for(let[l,u]of(e.entryRoots?.symbolPatterns??[]).entries())try{Jo(u,`entryRoots.symbolPatterns[${l}]`)}catch(d){n.push({level:"error",path:`entryRoots.symbolPatterns[${l}]`,message:d instanceof Error?d.message:String(d)})}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 o=e.indexer?.typescript;if(o?.projectMode!==void 0&&o.projectMode!=="single"&&o.projectMode!=="workspace"&&n.push({level:"error",path:"indexer.typescript.projectMode",message:'Must be "single" or "workspace".'}),o?.projects!==void 0)if(!Array.isArray(o.projects))n.push({level:"error",path:"indexer.typescript.projects",message:"Must be an array."});else for(let[l,u]of o.projects.entries()){let d=`indexer.typescript.projects[${l}]`;if(typeof u!="string"||u.trim()==="")n.push({level:"error",path:d,message:"Project path must be a non-empty string."});else if(t.projectRoot){let m=jx(t.projectRoot,u),f=Ox(t.projectRoot,m);f.startsWith("..")||Nx(f)?n.push({level:"error",path:d,message:"Project path must stay inside the project root."}):Oi(m)||n.push({level:"warning",path:d,message:`TypeScript project path does not exist: ${u}`})}}o?.projectMode==="workspace"&&o.pnpmWorkspaces===!0&&n.push({level:"warning",path:"indexer.typescript.pnpmWorkspaces",message:'Ignored when projectMode is "workspace"; explicit TypeScript projects are indexed directly.'});let s=e.semantic?.rust;s?.rustAnalyzerPath!==void 0&&(typeof s.rustAnalyzerPath!="string"||s.rustAnalyzerPath.trim()==="")&&n.push({level:"error",path:"semantic.rust.rustAnalyzerPath",message:"Rust analyzer path must be a non-empty string."});let a=e.indexer?.clojure;if(a?.configPath!==void 0){let l="indexer.clojure.configPath";if(typeof a.configPath!="string"||a.configPath.trim()==="")n.push({level:"error",path:l,message:"Config path must be a non-empty string."});else if(t.projectRoot){let u=jx(t.projectRoot,a.configPath),d=Ox(t.projectRoot,u);d.startsWith("..")||Nx(d)?n.push({level:"error",path:l,message:"Config path must stay inside the project root."}):Oi(u)||n.push({level:"warning",path:l,message:`Clojure indexer config path does not exist: ${a.configPath}`})}}if(e.locality!==void 0)if(!G(e.locality))n.push({level:"error",path:"locality",message:"Must be an object."});else{let l=e.locality.architecturalBoundarySegments;if(l!==void 0)if(!Array.isArray(l))n.push({level:"error",path:"locality.architecturalBoundarySegments",message:"Must be an array."});else for(let[u,d]of l.entries()){let m=`locality.architecturalBoundarySegments[${u}]`;typeof d!="string"||d.trim()===""?n.push({level:"error",path:m,message:"Boundary segment must be a non-empty string."}):(d.includes("/")||d.includes("\\"))&&n.push({level:"error",path:m,message:"Boundary segment must be a single folder name, not a path."})}}if(cB(e,n),e.declaredCouplings!==void 0&&!Array.isArray(e.declaredCouplings))n.push({level:"error",path:"declaredCouplings",message:"Must be an array."});else for(let[l,u]of(e.declaredCouplings??[]).entries()){let d=`declaredCouplings[${l}]`;if((!u.name||u.name.trim()==="")&&n.push({level:"error",path:`${d}.name`,message:"Declared coupling name is required."}),!Array.isArray(u.files)||u.files.length<2)n.push({level:"error",path:`${d}.files`,message:"Declared coupling needs at least two files."});else for(let[m,f]of u.files.entries())!f||f.trim()===""?n.push({level:"error",path:`${d}.files[${m}]`,message:"Declared coupling file path is required."}):t.projectRoot&&!Oi(Mr(t.projectRoot,f))&&n.push({level:"warning",path:`${d}.files[${m}]`,message:`Declared coupling file does not exist: ${f}`});u.reason!==void 0&&u.reason.trim()===""&&n.push({level:"error",path:`${d}.reason`,message:"Declared coupling reason cannot be blank."})}let c=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[l,u]of(Array.isArray(e.suppressions)?e.suppressions:[]).entries()){let d=`suppressions[${l}]`;if(!G(u)){n.push({level:"error",path:d,message:"Suppression must be an object."});continue}if((!u.reason||u.reason.trim()==="")&&n.push({level:"error",path:`${d}.reason`,message:"Suppression reason is required."}),u.id!==void 0&&u.id.trim()===""&&n.push({level:"error",path:`${d}.id`,message:"Suppression id cannot be blank."}),u.check!==void 0&&u.check.trim()===""&&n.push({level:"error",path:`${d}.check`,message:"Suppression check cannot be blank."}),!u.id&&(!u.check||!u.file)?n.push({level:"error",path:d,message:"Suppression must include id or both check and file."}):!u.id&&u.check&&u.file&&n.push({level:"warning",path:d,message:"Check+file suppressions waive every matching finding in that file; prefer a stable id when available."}),u.file!==void 0&&(u.file.trim()===""?n.push({level:"error",path:`${d}.file`,message:"Suppression file path cannot be blank."}):t.projectRoot&&!Oi(Mr(t.projectRoot,u.file))&&n.push({level:"warning",path:`${d}.file`,message:`Suppression file does not exist: ${u.file}`})),u.expiresAt){let m=Date.parse(u.expiresAt);Number.isNaN(m)?n.push({level:"error",path:`${d}.expiresAt`,message:"Must be an ISO date string."}):m<=c.getTime()&&n.push({level:"warning",path:`${d}.expiresAt`,message:"Suppression has expired."})}}return dB(e,n,t),uB(e,n),n}function cB(e,t){if(e.architecture===void 0)return;if(!G(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(!G(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}lB(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&&!G(o))t.push({level:"error",path:"architecture.allowedDependencies",message:"Must be an object keyed by boundary name."});else if(G(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=G(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 lB(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 uB(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 dB(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(!G(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&&!Oi(Mr(n.projectRoot,i.file))&&t.push({level:"warning",path:`${o}.file`,message:`Coverage contract file does not exist: ${i.file}`}),$x(t,i.keys,`${o}.keys`,sB,"Unknown coverage-contract key extractor type."),$x(t,i.mustEqual,`${o}.mustEqual`,aB,"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 $x(e,t,n,r,i){if(!G(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 Lae(e){return{...Uj,...e.watch}}function Aae(e,t){let n=Mr(e,Nr),r={languages:t,watch:{enabled:!0,debounceMs:Hx,cooldownMs:Ux,gitPollMs:2e3,idleTimeoutMs:qx,autoRefresh:!0}};return _c(n,i=>i.revision.exists?{kind:"unchanged"}:{kind:"write",text:Em(r)}),n}function Mae(e,t,n){let r=Mr(e,Nr),i=[...n],o=t,s=_c(r,a=>{let c=Vx(a,t);if(Wx(t.languages,c.config.languages,i))throw new Yo(r,"languages");let l={...c.config,languages:i};return o=l,a.revision.exists&&!c.needsMigration&&Lc(l,c.config)?{kind:"unchanged"}:{kind:"write",text:Em(l)}});return{configPath:r,config:o,changed:s.changed}}function Nae(e,t,n){let r=Mr(e,Nr),i=t,o=_c(r,s=>{let a=Vx(s,t);if(Wx(t.watch?.enabled,a.config.watch?.enabled,n))throw new Yo(r,"watch.enabled");let c={...a.config,watch:{...a.config.watch,enabled:n,...n&&a.config.watch?.autoRefresh===void 0?{autoRefresh:!0}:{}}};return i=c,s.revision.exists&&!a.needsMigration&&Lc(c,a.config)?{kind:"unchanged"}:{kind:"write",text:Em(c)}});return{configPath:r,config:i,changed:o.changed}}function Vx(e,t){if(!e.revision.exists)return{config:Dc(t),needsMigration:!0};let n=zx(Sm(e.text),e.path,"update");return{config:n.config,needsMigration:n.needsMigration}}function Em(e){return Ex(e)}function Lc(e,t){return JSON.stringify(e)===JSON.stringify(t)}function Wx(e,t,n){return!Lc(e,t)&&!Lc(t,n)}function zx(e,t,n){if(e.kind==="legacy"||e.kind==="supported")return e;if(e.kind==="malformed"){let i=n==="read"?`invalid ${Nr} at ${t}: ${e.reason}`:`Cannot update ${t}: the latest project config is ${e.reason}.`;throw new Error(`${i} The file was left untouched.`)}let r=n==="read"?`invalid ${Nr} at ${t}`:`Cannot update ${t}: the latest project config is invalid`;throw new Error(`${r} (unsupported ${e.direction} schemaVersion ${e.schemaVersion}; this scip-query reads legacy v${ir} and current v${or}). Upgrade scip-query before retrying; the file was left untouched.`)}function mB(e,t){if(!G(e))return;let n=e;if(Me(t,n,"",qj),Me(t,n.watch,"watch",Gj),Me(t,n.hooks,"hooks",Vj),Me(t,n.entryRoots,"entryRoots",Wj),Me(t,n.semantic,"semantic",zj),Me(t,n.semantic?.typescript,"semantic.typescript",Kj),Me(t,n.semantic?.rust,"semantic.rust",Jj),Me(t,n.locality,"locality",Xj),Me(t,n.architecture,"architecture",Qj),Me(t,n.docs,"docs",eB),Array.isArray(n.architecture?.boundaries))for(let[r,i]of n.architecture.boundaries.entries())Me(t,i,`architecture.boundaries[${r}]`,Zj);if(G(n.indexer)){Me(t,n.indexer,"indexer",Bx);for(let[r,i]of Object.entries(n.indexer))Bx.has(r)&&Me(t,i,`indexer.${r}`,Yj)}if(Array.isArray(n.declaredCouplings))for(let[r,i]of n.declaredCouplings.entries())Me(t,i,`declaredCouplings[${r}]`,tB);if(Array.isArray(n.suppressions))for(let[r,i]of n.suppressions.entries())Me(t,i,`suppressions[${r}]`,nB);if(Array.isArray(n.coverageContracts))for(let[r,i]of n.coverageContracts.entries()){let o=`coverageContracts[${r}]`;Me(t,i,o,rB),G(i)&&(Me(t,i.keys,`${o}.keys`,iB),Me(t,i.mustEqual,`${o}.mustEqual`,oB))}}function Me(e,t,n,r){if(G(t))for(let i of Object.keys(t))r.has(i)||e.push({level:"warning",path:n?`${n}.${i}`:i,message:"Unknown config key."})}import{existsSync as cC}from"fs";import{execFileSync as fB}from"child_process";import{existsSync as pB,readdirSync as Jx}from"fs";import{extname as Yx,join as Xx}from"path";var Qx=new Set([".git",".hg",".svn",".idea",".vscode","node_modules","vendor","dist","build","target","bin","obj",".dart_tool",".gradle",".next",".venv","venv","__pycache__"]),gB=[{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 Xo(e){let t=[],n=hB(e),r=xB(e);for(let i of gB){if(yB(e,i.files)){t.push(i.language);continue}if(bB(n,i.globs)){t.push(i.language);continue}RB(r,i.extensions)&&t.push(i.language)}return t.includes("typescript")&&Kx(t,"javascript"),t.includes("cpp")&&!r.has(".c")&&Kx(t,"c"),t}function hB(e){try{return Jx(e)}catch{return[]}}function yB(e,t){return t?.length?t.some(n=>pB(Xx(e,n))):!1}function bB(e,t){return t?.length?e.some(n=>t.some(r=>SB(n,r))):!1}function SB(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 xB(e){let t=CB(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=Jx(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=Xx(i,s.name);if(s.isDirectory()){Qx.has(s.name)||r.push(a);continue}let c=Yx(s.name).toLowerCase();c&&n.add(c)}}return n}function CB(e){try{let t=fB("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"],timeout:3e4,killSignal:"SIGKILL"}),n=new Set;for(let r of t.split(`
|
|
396
|
+
`)){if(!r||r.split("/").some(o=>Qx.has(o)))continue;let i=Yx(r).toLowerCase();i&&n.add(i)}return n}catch{return null}}function RB(e,t){return t?.length?t.some(n=>e.has(n)):!1}function Kx(e,t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}import{createHash as Fm}from"crypto";import{closeSync as nC,chmodSync as vB,copyFileSync as IB,constants as wB,existsSync as fe,fsyncSync as EB,mkdirSync as Zx,openSync as rC,readSync as DB,readdirSync as PB,renameSync as Tm,rmSync as Ac,statSync as Mc}from"fs";import{basename as iC,dirname as Zt,join as se,relative as eC}from"path";function oC(e){let t=Dt(e.outputDb),n=FB(e);e.onStage?.("after-recovery-retained");let r=e.preserveOutputScip?e.outputScip:e.tempOutputScip,i=Lm({generationRoot:t,databasePath:e.tempOutputDb,indexPath:fe(r)?r:void 0,metadataPath:fe(e.tempMetaPath)?e.tempMetaPath:void 0}),o=(e.now??(()=>new Date))().toISOString(),s={version:Lr,currentGeneration:i.identity,artifactSet:"immutable-v1",...n?{previousGeneration:n}:{},...e.publication?{publication:e.publication}:{},publishedAt:o};ft(se(t,"state.json"),s,{spacing:2,trailingNewline:!0}),e.onStage?.("after-pointer-handoff"),e.preserveOutputScip||km(e.tempOutputScip,e.outputScip),e.onStage?.("after-scip-handoff"),km(e.tempOutputDb,e.outputDb),e.onStage?.("after-database-handoff"),km(e.tempMetaPath,e.metaPath),e.onStage?.("after-metadata-handoff");let a=i.identity,c={...s,stableMirrors:_m(e.outputDb,e.outputScip)};return ft(se(t,"state.json"),c,{spacing:2,trailingNewline:!0}),{currentGeneration:a,...n?{previousGeneration:n}:{}}}function kB(e,t,n,r=()=>new Date){if(!fe(e))return null;let i=Fi(e),o=se(Dt(e),"state.json");if(i?.artifactSet==="immutable-v1"&&uc(e,i.currentGeneration))return i;let s=Dt(e),a=!i&&fe(o)?LB(n,e,t):void 0;if(a&&!dc(s,a))return null;let c=Lm({generationRoot:s,databasePath:e,indexPath:fe(t)?t:void 0,metadataPath:fe(n)?n:void 0,forcedIdentity:i?.currentGeneration??a}),l={version:Lr,currentGeneration:c.identity,artifactSet:"immutable-v1",stableMirrors:_m(e,t),...i?.previousGeneration?{previousGeneration:i.previousGeneration}:{},...i?.publication?{publication:i.publication}:{},publishedAt:i?.publishedAt??r().toISOString()};return ft(se(s,"state.json"),l,{spacing:2,trailingNewline:!0}),l}function Jae(e,t,n=()=>new Date){if(!fe(e)||!fe(t))throw new Error("metadata-only generation refresh requires stable database and metadata files");let r=Fi(e),i=Dt(e),o=Lm({generationRoot:i,databasePath:e,indexPath:fe(se(Zt(e),"index.scip"))?se(Zt(e),"index.scip"):void 0,metadataPath:t}),s=r&&r.currentGeneration!==o.identity?sC(e,r.currentGeneration):void 0,a={version:Lr,currentGeneration:o.identity,artifactSet:"immutable-v1",stableMirrors:_m(e,se(Zt(e),"index.scip")),...s?{previousGeneration:s}:{},...r?.publication?{publication:r.publication}:{},publishedAt:n().toISOString()};return ft(se(Dt(e),"state.json"),a,{spacing:2,trailingNewline:!0}),a}function Qo(e,t=se(Zt(e),"meta.json")){let n=se(Dt(e),"state.json");if(!fe(n))return{state:"legacy",statePath:n};let r=Fi(e);if(!r)return{state:"invalid",statePath:n,reason:"generation state is malformed"};try{let i=uc(e,r.currentGeneration),o=i!==null,s=i?TB(e,t,i,r):!1,a=r.previousGeneration?fe(se(Zt(e),r.previousGeneration.databasePath)):!0;return!s||!o||!a?{state:"drifted",statePath:n,currentMatches:s,recoveryExists:a,generation:r,reason:o?s?"retained recovery database is missing":"stable database or metadata no longer matches the published generation":"published immutable generation is missing"}:{state:"current",statePath:n,currentMatches:s,recoveryExists:a,generation:r}}catch(i){return{state:"drifted",statePath:n,currentMatches:!1,recoveryExists:!1,generation:r,reason:i instanceof Error?i.message:String(i)}}}function TB(e,t,n,r){if(r.stableMirrors&&(r.stableMirrors.databaseFileIdentity!==En(e)||r.stableMirrors.indexFileIdentity!==void 0&&r.stableMirrors.indexFileIdentity!==En(se(Zt(e),"index.scip")))||!tC(e,n.database))return!1;let i=se(Zt(e),"index.scip");if(n.index&&!tC(i,n.index))return!1;if(!n.metadata)return!fe(t);if(!fe(t))return!1;let o=se(Dt(e),n.identity,n.metadata.file);return fe(o)&&tr(O(t,"reindex metadata"))===tr(O(o,"immutable reindex metadata"))}function tC(e,t){return fe(e)&&Mc(e).isFile()&&Mc(e).size===t.size}function FB(e){let t=kB(e.outputDb,e.outputScip,e.metaPath);return t?sC(e.outputDb,t.currentGeneration):void 0}function _m(e,t){return{databaseFileIdentity:En(e),...fe(t)?{indexFileIdentity:En(t)}:{}}}function sC(e,t){let n=se(Dt(e),t),r=se(n,iC(e)),i=se(n,"meta.json");return{generationIdentity:t,databasePath:eC(Zt(e),r),...fe(i)?{metadataPath:eC(Zt(e),i)}:{}}}function _B(e){if(fe(e))for(let t of PB(e,{withFileTypes:!0}))t.isDirectory()&&t.name.endsWith(".tmp")&&Ac(se(e,t.name),{recursive:!0,force:!0})}function LB(e,t,n=se(Zt(t),"index.scip")){let r=Fm("sha256").update("sqlite-generation-artifacts-v1\0");return r.update(Nc(t)),fe(n)&&r.update(`\0${Nc(n)}`),fe(e)&&r.update(`\0${tr(O(e,"reindex metadata"))}`),r.digest("hex")}function Lm(e){let t=Dm(e.databasePath),n=e.indexPath?Dm(e.indexPath):void 0,r=e.metadataPath?Dm(e.metadataPath):void 0,i=e.forcedIdentity??AB(t,n,e.metadataPath),o=se(e.generationRoot,i),s=se(o,lc);if(fe(s)){let c=dc(e.generationRoot,i);if(c&&aC(o,c.database,t)&&NB(o,c.index,n)&&OB(o,c.metadata,e.metadataPath))return{identity:i};throw new Error(`SQLite generation ${i} already exists with different or corrupt artifacts.`)}Zx(e.generationRoot,{recursive:!0}),_B(e.generationRoot);let a=`${o}.${process.pid}.${Date.now()}.tmp`;Ac(a,{recursive:!0,force:!0}),Zx(a,{recursive:!0});try{Pm(e.databasePath,se(a,t.file)),n&&e.indexPath&&Pm(e.indexPath,se(a,n.file)),r&&e.metadataPath&&Pm(e.metadataPath,se(a,r.file)),ft(se(a,lc),{version:em,identity:i,database:t,...n?{index:n}:{},...r?{metadata:r}:{}},{spacing:2,trailingNewline:!0}),Tm(a,o),Ot(e.generationRoot)}finally{Ac(a,{recursive:!0,force:!0})}return{identity:i}}function AB(e,t,n){let r=Fm("sha256").update("sqlite-generation-artifacts-v1\0");return r.update(e.sha256),t&&r.update(`\0${t.sha256}`),n&&r.update(`\0${tr(O(n,"reindex metadata"))}`),r.digest("hex")}function Dm(e){return{file:iC(e),size:Mc(e).size,sha256:Nc(e)}}function Nc(e){let t=Fm("sha256"),n=rC(e,"r"),r=Buffer.allocUnsafe(1024*1024);try{for(;;){let i=MB(n,r);if(i===0)break;t.update(r.subarray(0,i))}}finally{nC(n)}return t.digest("hex")}function MB(e,t){let n=0;for(;n<t.length;){let r=DB(e,t,n,t.length-n,null);if(n+=r,r===0)break}return n}function Pm(e,t){IB(e,t,wB.COPYFILE_FICLONE);let n=rC(t,"r");try{EB(n)}finally{nC(n)}vB(t,292)}function aC(e,t,n){let r=se(e,t.file);return t.file===n.file&&t.size===n.size&&t.sha256===n.sha256&&fe(r)&&Mc(r).size===t.size&&Nc(r)===t.sha256}function NB(e,t,n){return!t||!n?t===n:aC(e,t,n)}function OB(e,t,n){if(!t||!n)return t===void 0&&n===void 0;let r=se(e,t.file);return fe(r)&&tr(O(r,"stored reindex metadata"))===tr(O(n,"candidate reindex metadata"))}function km(e,t){Ac(`${t}.tmp-replace`,{force:!0}),Tm(e,`${t}.tmp-replace`),Tm(`${t}.tmp-replace`,t)}function lC(e,t,n){let r=new Date().toISOString();if(!cC(n.dbPath))return{state:"missing",checkedAt:r,metaPath:n.metaPath,reason:"No SQLite index database exists.",remedy:"Run: scip-query reindex"};if(!cC(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=Gt(O(n.metaPath,"reindex metadata"));if(i.kind==="unsupported")return{state:"unknown",checkedAt:r,metaPath:n.metaPath,reason:`Reindex metadata version ${i.version} is unsupported by this scip-query build.`,remedy:"Upgrade scip-query or run: scip-query reindex"};if(i.kind==="malformed")return{state:"unknown",checkedAt:r,metaPath:n.metaPath,reason:`Could not decode reindex metadata: ${i.reason}`,remedy:"Run: scip-query reindex"};let o=i.metadata,s=t.languages??Xo(e),a=jB(e,s,t),c=[...o.indexedLanguages??[]].sort(),l=i.capabilities.publishableGeneration&&JSON.stringify(o.fingerprint)===JSON.stringify(a)&&JSON.stringify(c)===JSON.stringify(a.languages),u=Qo(n.dbPath,n.metaPath),d=u.state==="invalid"||u.state==="drifted",m=l&&!d;return{state:m?"fresh":"stale",checkedAt:r,metaPath:n.metaPath,updatedAt:o.updatedAt,lastRefresh:o.lastRefresh,reason:d?`SQLite generation requires repair: ${u.reason}`:l?"Index metadata fingerprint matches current source files.":"Index metadata fingerprint differs from current source files.",remedy:m?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 jB(e,t,n){return so(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 qC,randomUUID as E$}from"crypto";import{constants as D$,copyFileSync as jC,existsSync as ar,lstatSync as P$,mkdirSync as cr,mkdtempSync as GC,readdirSync as k$,realpathSync as T$,renameSync as Br,rmSync as sr,statSync as Wc}from"fs";import{dirname as qc,join as M,resolve as Dn}from"path";import{setTimeout as F$}from"timers/promises";import{pathToFileURL as BC}from"url";import{deserializeSCIP as VC}from"@c4312/scip";import _$ from"better-sqlite3";import{join as BB}from"path";var $B=e=>{if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e.pid;return typeof t=="number"&&Number.isSafeInteger(t)&&t>0?{pid:t}:null};function Mm(e,t={}){return Nm(BB(e,"gc.lock"),t)}function Nm(e,t={}){let n=t.waitMs??0,r=t.pollMs??10,i=t.now??Te,o=i()+n;do{let s=uC(e);if(s)return dC(s);let a=o-i();if(a<=0)return null;HB(Math.min(r,a))}while(i()<=o);return null}async function ace(e,t={}){let n=t.waitMs??0,r=t.pollMs??10,i=t.now??Te,o=i()+n;do{qB(t.signal);let s=uC(e);if(s)return dC(s);let a=o-i();if(a<=0)return null;await UB(Math.min(r,a),t.signal)}while(i()<=o);return null}function uC(e){let t=Ni(e,{kind:"generic",parseLegacy:$B});return t.kind==="acquired"?t.lock:null}function dC(e){return{release:()=>{e.release()}}}function HB(e){let t=new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));Atomics.wait(t,0,0,e)}function UB(e,t){return t?.aborted?Promise.reject(Am(t)):new Promise((n,r)=>{let i=setTimeout(()=>{t?.removeEventListener("abort",o),n()},e),o=()=>{clearTimeout(i),t?.removeEventListener("abort",o),r(t?Am(t):new Error("Lock acquisition was aborted."))};t?.addEventListener("abort",o,{once:!0})})}function qB(e){if(e?.aborted)throw Am(e)}function Am(e){return e.reason instanceof Error?e.reason:new Error("Lock acquisition was aborted.")}import{lstatSync as i$,readdirSync as o$}from"fs";import{join as s$,relative as a$,resolve as Vm,sep as c$}from"path";import{createHash as GB}from"crypto";import{existsSync as jm,mkdirSync as VB,readdirSync as dce,renameSync as WB,rmSync as mce,writeFileSync as zB}from"fs";import{join as ji}from"path";import{create as fC,fromBinary as pC,toBinary as KB}from"@bufbuild/protobuf";import{deserializeSCIP as Oc,DocumentSchema as Bm,IndexSchema as gC,serializeSCIP as hC}from"@c4312/scip";var jc=1,Zo="typescript-scip-fragments";function bce(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=Or(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=pC(Bm,o.bytes);if(a.relativePath!==s)throw new Error(`TypeScript fragment path mismatch: expected ${s}, got ${a.relativePath}`);n.push(a)}let r=hC(fC(gC,{documents:n,externalSymbols:[]})),i=Oc(r);if(i.documents.length!==n.length||i.externalSymbols.length!==0)throw new Error("affected TypeScript SCIP index failed structural verification");return r}function Bc(e){let t=ji(e,Zo);return{rootDir:t,blobDir:ji(t,"blobs"),generationDir:ji(t,"generations")}}function JB(e){let t=Oc(e.indexBytes);wC(t.metadata,EC(e)),IC(t.externalSymbols);let n=new Set,r=[];for(let o of t.documents){let s=Or(o.relativePath);if(n.has(s))throw new Error(`duplicate TypeScript SCIP document path: ${s}`);n.add(s);let a=KB(Bm,o),c=e.documentIdentities.get(s)??(e.allowUntrackedDocuments?jr(JSON.stringify({version:1,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,untrackedDocument:s,contentHash:jr(a)})):null);if(!c)throw new Error(`missing TypeScript document identity: ${s}`);r.push(xC(e.cacheDir,{relativePath:s,bytes:a,occurrences:o.occurrences.length,symbols:o.symbols.length,referenceFragments:[]},c))}let i=CC(e,r);return RC(e.cacheDir,i),i}function Sce(e){let t=Bc(e.cacheDir);if(!jm($m(t,e.generationIdentity)))return JB(e);let n=yC({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 xce(e){let t=yC({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=Or(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,xC(e.cacheDir,o,a))}if(r.size===0)throw new Error("TypeScript fragment generation requires at least one replacement");let i=CC(e,[...n.values()]);return RC(e.cacheDir,i),i}function yC(e){let t=Bc(e.cacheDir),n=$m(t,e.generationIdentity),r;try{r=vC(te(n,{maxBytes:Ce,inputKind:"TypeScript fragment manifest"}))}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=ji(t.blobDir,`${o.blobHash}.scipdoc`),a=ye(s,{maxBytes:je,inputKind:"TypeScript fragment blob"});if(a.byteLength!==o.byteLength||jr(a)!==o.blobHash)throw new Error(`TypeScript fragment blob is corrupt: ${o.relativePath}`);i.set(o.relativePath,a)}return{manifest:r,fragments:i}}function bC(e){let t=SC(e);return Om(t.baseIndex,t.completeDocuments,"assembled")}function Cce(e){let t=SC(e);return YB(t.deletedAffectedPaths),{completeIndexBytes:Om(t.baseIndex,t.completeDocuments,"assembled"),affectedIndexBytes:Om(t.baseIndex,t.affectedDocuments,"affected")}}function SC(e){let t=Oc(e.baseIndexBytes);wC(t.metadata,EC(e)),IC(t.externalSymbols);let n=new Map;for(let a of e.fragments){let c=Or(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=Or(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=pC(Bm,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 Om(e,t,n){let r=hC(fC(gC,{metadata:e.metadata,documents:t,externalSymbols:[]})),i=Oc(r);if(i.documents.length!==t.length||i.externalSymbols.length!==0)throw new Error(`${n} TypeScript SCIP index failed structural verification`);return r}function YB(e){if(e.length>0)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${e[0]}`)}function xC(e,t,n){if(t.bytes===null)throw new Error(`cannot persist an empty TypeScript fragment: ${t.relativePath}`);let r=Or(t.relativePath),i=Buffer.from(t.bytes),o=jr(i),s=Bc(e);VB(s.blobDir,{recursive:!0});let a=ji(s.blobDir,`${o}.scipdoc`);if(jm(a)){let c=ye(a,{maxBytes:je,inputKind:"TypeScript fragment blob"});if(c.byteLength!==i.byteLength||jr(c)!==o)throw new Error(`existing TypeScript fragment blob is corrupt: ${r}`)}else{let c=`${a}.${process.pid}.${Date.now()}.tmp`;zB(c,i),WB(c,a)}return{relativePath:r,blobHash:o,byteLength:i.byteLength,documentIdentity:n}}function CC(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:jc,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,createdAt:(e.now??(()=>new Date))().toISOString(),documents:n}}function RC(e,t){let n=Bc(e),r=$m(n,t.generationIdentity);if(jm(r)){let i=vC(te(r,{maxBytes:Ce,inputKind:"TypeScript fragment manifest"}));if(mC(i)!==mC(t))throw new Error(`TypeScript fragment generation is immutable: ${t.generationIdentity}`);return}Wa(r,t,{spacing:2,trailingNewline:!0})}function mC(e){return jr(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,documents:e.documents}))}function vC(e){let t=JSON.parse(e);if(t.version!==jc||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(Or(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript fragment record");n.add(r.relativePath)}return t}function $m(e,t){return ji(e.generationDir,XB(t))}function XB(e){if(!e)throw new Error("TypeScript fragment generation identity must be non-empty");return`${jr(e)}.json`}function IC(e){if(e.length>0)throw new Error("scip-typescript emitted external symbols; incremental document assembly is unsupported")}function wC(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 EC(e){let t=e.packageVersion??e.runtime?.packageVersion;if(!t)throw new Error("scip-typescript package version is unavailable");return t}function Or(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 jr(e){return GB("sha256").update(e).digest("hex")}import{createHash as QB}from"crypto";import{existsSync as es,mkdirSync as ZB,readdirSync as Hm,renameSync as e$,rmSync as DC,writeFileSync as t$}from"fs";import{join as Bt}from"path";var $c=1,kce=64*1024*1024,ns="typescript-scip-overlays";function Tce(e){let t=kC(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=Gm(o.relativePath);if(r.has(s))throw new Error(`duplicate TypeScript overlay: ${s}`);r.add(s),n.set(s,n$(e.cacheDir,o))}if(r.size===0)throw new Error("TypeScript overlay generation requires affected documents");let i={version:$c,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 r$(e.cacheDir,i),i}function Fce(e){let t=kC(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=ye(Bt(rs(e.cacheDir),"blobs",`${r.blobHash}.scipdoc`),{maxBytes:je,inputKind:"TypeScript overlay blob"});if(i.byteLength!==r.byteLength||ts(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 bC({packageVersion:e.packageVersion,baseIndexBytes:e.baseIndexBytes,fragments:n})}function _ce(e,t){let n=rs(e),r=Bt(n,"generations");if(!es(r))return;let i=new Set(t.map(qm)),o=new Set;for(let a of Hm(r).filter(c=>i.has(c))){let c=Um(te(Bt(r,a),{maxBytes:Ce,inputKind:"TypeScript overlay manifest"}));for(let l of c.overlays)l.blobHash&&o.add(`${l.blobHash}.scipdoc`)}for(let a of Hm(r))i.has(a)||DC(Bt(r,a),{force:!0});let s=Bt(n,"blobs");if(es(s))for(let a of Hm(s))o.has(a)||DC(Bt(s,a),{force:!0})}function kC(e,t){let n=Bt(rs(e),"generations",qm(t));if(!es(n))return null;let r=Um(te(n,{maxBytes:Ce,inputKind:"TypeScript overlay manifest"}));if(r.generationIdentity!==t)throw new Error("TypeScript overlay generation identity does not match its path");return r}function n$(e,t){let n=Gm(t.relativePath);if(t.bytes===null)return{relativePath:n,blobHash:null,byteLength:0};let r=Buffer.from(t.bytes),i=ts(r),o=Bt(rs(e),"blobs");ZB(o,{recursive:!0});let s=Bt(o,`${i}.scipdoc`);if(es(s)){let a=ye(s,{maxBytes:je,inputKind:"TypeScript overlay blob"});if(a.byteLength!==r.byteLength||ts(a)!==i)throw new Error(`existing TypeScript overlay blob is corrupt: ${n}`)}else{let a=`${s}.${process.pid}.${Date.now()}.tmp`;t$(a,r),e$(a,s)}return{relativePath:n,blobHash:i,byteLength:r.byteLength}}function r$(e,t){let n=Bt(rs(e),"generations",qm(t.generationIdentity));if(es(n)){let r=Um(te(n,{maxBytes:Ce,inputKind:"TypeScript overlay manifest"}));if(PC(r)!==PC(t))throw new Error(`TypeScript overlay generation is immutable: ${t.generationIdentity}`);return}Wa(n,t,{spacing:2,trailingNewline:!0})}function Um(e){let t=JSON.parse(e);if(t.version!==$c||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(Gm(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript overlay record");n.add(r.relativePath)}return t}function rs(e){return Bt(e,ns)}function qm(e){if(!e)throw new Error("TypeScript overlay generation identity must be non-empty");return`${ts(e)}.json`}function PC(e){return ts(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,baseGenerationIdentity:e.baseGenerationIdentity,generationIdentity:e.generationIdentity,overlays:e.overlays}))}function Gm(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 ts(e){return QB("sha256").update(e).digest("hex")}var is=1,Wm="language-indexes",TC=["index.db","index.scip","meta.json"],FC=[Wm,Zo,ns];function Hc(e){let t=[];for(let n of TC)l$(e,n),t.push(n);for(let n of FC)_C(e,n,t);return{version:is,files:t.sort()}}function Uc(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(!TC.includes(e)&&!FC.includes(n))throw new Error(`index artifact path is not shareable: ${e}`);return e}function en(e,t){let n=Uc(t),r=Vm(e),i=Vm(r,...n.split("/"));if(i!==r&&!i.startsWith(`${r}${c$}`))throw new Error(`index artifact escapes cache: ${t}`);return i}function _C(e,t,n){let r=s$(e,t),i;try{i=o$(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()?_C(e,s,n):o.isFile()&&n.push(Uc(s))}}function l$(e,t){let n=en(e,t),r;try{r=i$(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(a$(Vm(e),n).startsWith(".."))throw new Error(`index artifact escapes cache: ${t}`)}import{writeFileSync as Km}from"fs";import{create as os}from"@bufbuild/protobuf";import{deserializeSCIP as Jm,serializeSCIP as Ym,DocumentSchema as h$,IndexSchema as AC,MetadataSchema as y$,SymbolInformationSchema as b$}from"@c4312/scip";import{writeFileSync as u$}from"fs";import{create as LC}from"@bufbuild/protobuf";import{deserializeSCIP as d$,DocumentSchema as m$,IndexSchema as f$,serializeSCIP as p$,SymbolRole as g$}from"@c4312/scip";function Gce(e){let t;try{t=d$(ye(e,{inputKind:"SCIP sanitization input",maxBytes:Fe}))}catch{return{removedDefinitionOccurrences:0,touchedDocuments:0}}let n=zm(t);return n.removedDefinitionOccurrences>0&&u$(e,Buffer.from(p$(n.index))),{removedDefinitionOccurrences:n.removedDefinitionOccurrences,touchedDocuments:n.touchedDocuments}}function zm(e){let t=new Set;for(let o of e.documents){Hn(o.relativePath);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&g$.Definition)===0||t.has(a.symbol)?!0:(n+=1,!1));if(s.length===o.occurrences.length){i.push(o);continue}r+=1,i.push(LC(m$,{language:o.language,relativePath:o.relativePath,occurrences:s,symbols:o.symbols,text:o.text,positionEncoding:o.positionEncoding}))}return{index:n===0?e:LC(f$,{metadata:e.metadata,documents:i,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:n,touchedDocuments:r}}function MC(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=x$(e),n=C$(e.flatMap(i=>i.documents??[])),r=OC(e.flatMap(i=>i.externalSymbols??[]));return os(AC,{metadata:t,documents:n,externalSymbols:r})}function Xce(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Jm(ye(i,{inputKind:"SCIP merge input",maxBytes:Fe}))),r=MC(n);return Km(t,Buffer.from(Ym(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Qce(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Jm(ye(i,{inputKind:"SCIP merge input",maxBytes:Fe}))),r=zm(MC(n));return Km(t,Buffer.from(Ym(r.index))),{documentCount:r.index.documents.length,externalSymbolCount:r.index.externalSymbols.length,inputCount:e.length,removedDefinitionOccurrences:r.removedDefinitionOccurrences,touchedDocuments:r.touchedDocuments}}function S$(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 os(AC,{metadata:os(y$,{...r,projectRoot:n}),documents:e.documents,externalSymbols:e.externalSymbols})}function NC(e,t,n){let r=Jm(ye(e,{inputKind:"SCIP normalization input",maxBytes:Fe})),i=S$(r,t,n);Km(e,Buffer.from(Ym(i)))}function x$(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 C$(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,os(h$,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:R$([...r.occurrences,...n.occurrences]),symbols:OC([...r.symbols,...n.symbols]),text:I$(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function R$(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 OC(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,os(b$,{symbol:r.symbol,documentation:w$([...r.documentation,...n.documentation]),relationships:v$([...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 v$(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 I$(e,t){return e?t?e.length>=t.length?e:t:e:t}function w$(e){return[...new Set(e)]}var ef=1,$C="SCIP_QUERY_SHARED_CACHE",Xm=JSON.stringify({cliVersion:pt,artifactCatalogVersion:is,sqliteGenerationStoreVersion:Lr,typescriptFragmentStoreVersion:jc,typescriptOverlayStoreVersion:$c}),WC="manifest.json",zC="shared-cache.json",tf=[Wm,Zo,ns];function Gc(e,t){if(!e.clean||!e.treeOid)return;let n=nR(JSON.stringify({version:ef,repositoryId:e.repositoryId,treeOid:e.treeOid,fingerprint:t,producerIdentity:Xm}));return{repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,fingerprint:t,producerIdentity:Xm,generationId:n,repositoryCacheDir:Ko(e.repositoryId)}}function KC(e,t,n){if(process.env[$C]==="0")return`${$C}=0`;if(!gm(n))return"explicit cache or database override";if(Ic(qc(t))!==Ic(vc(e))||t!==M(qc(t),"index.db"))return"index database is outside the managed worktree cache"}function JC(e,t,n){if(!gm(t))return;let r=n??ei(e);return r?M(Ko(r.repositoryId),"evidence.db"):void 0}function $r(e,t=!0){let n=of(e),r;try{r=L$(te(M(n,WC),{inputKind:"shared-generation manifest",maxBytes:Ce}))}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=en(n,i.path),s=Wc(o);if(!s.isFile()||s.size!==i.size||Un(o,{inputKind:"shared-generation artifact",maxBytes:Fe})!==i.sha256)return null}}catch{return null}return r}function YC(e){let t=$r(e.snapshot);if(t)return t;if(!Bi(e.sourceCacheDir,e.sourceProjectRoot,e.snapshot.fingerprint))throw new Error("source index is incomplete, incompatible, or corrupt");let n=HC(e.sourceCacheDir);if(!n)throw new Error("source index artifacts are incomplete");let r=Hc(e.sourceCacheDir),i=M(e.snapshot.repositoryCacheDir,"generations");cr(i,{recursive:!0});let o=GC(M(i,`.tmp-${process.pid}-`));try{let s=[];for(let d of r.files){let m=en(e.sourceCacheDir,d),f=en(o,d);as(m,f);let p=Wc(f).size;s.push({path:d,size:p,sha256:Un(f,{inputKind:"staged shared-generation artifact",maxBytes:Fe})})}let a=VC(ye(M(o,"index.scip"),{inputKind:"staged shared SCIP index",maxBytes:Fe})).metadata?.projectRoot;if(!a)throw new Error("shared SCIP generation has no project root metadata");let c=sf(e.sourceProjectRoot);if(a!==c)throw new Error("shared SCIP generation root does not match its source worktree");if(HC(e.sourceCacheDir)!==n||e.sourceStillValid&&!e.sourceStillValid())throw new Error("source index changed while staging a shared generation");let l={version:ef,artifactCatalogVersion:is,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))};ft(M(o,WC),l,{spacing:2,trailingNewline:!0});let u=of(e.snapshot);try{if(ar(u)&&!$r(e.snapshot)){let d=`${u}.corrupt-${process.pid}-${Date.now()}`;Br(u,d),sr(d,{recursive:!0,force:!0})}Br(o,u)}catch(d){let m=$r(e.snapshot);if(m)return m;throw d}return l}finally{sr(o,{recursive:!0,force:!0})}}function Qm(e){let t=of(e.snapshot);cr(e.targetCacheDir,{recursive:!0});let n=Nm(M(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=GC(M(e.targetCacheDir,".shared-hydrate-")),B$(e.manifest,e.snapshot);for(let c of e.manifest.artifacts){let l=en(t,c.path),u=en(r,c.path);if(as(l,u),Wc(u).size!==c.size||Un(u,{inputKind:"hydrated shared-generation artifact",maxBytes:Fe})!==c.sha256)throw new Error(`shared artifact is corrupt: ${c.path}`)}let s=sf(e.targetProjectRoot);if(s!==e.manifest.scipProjectRoot)for(let c of e.manifest.artifacts)c.path.endsWith(".scip")&&NC(en(r,c.path),e.manifest.scipProjectRoot,s);if(!Bi(r,e.targetProjectRoot,e.snapshot.fingerprint,!1))throw new Error("staged shared generation failed completeness or integrity validation");i=N$(e.targetCacheDir,r),o=!0,O$(r,e.targetCacheDir,i),oC({tempOutputScip:M(r,"index.scip"),tempOutputDb:M(r,"index.db"),tempMetaPath:M(r,"meta.json"),outputScip:M(e.targetCacheDir,"index.scip"),outputDb:M(e.targetCacheDir,"index.db"),metaPath:M(e.targetCacheDir,"meta.json"),now:e.now});let a=Qo(M(e.targetCacheDir,"index.db"),M(e.targetCacheDir,"meta.json"));if(a.state==="invalid"||a.state==="drifted")throw new Error(`hydrated SQLite generation failed validation: ${a.reason}`);Zm(e.snapshot,e.targetCacheDir,e.action??"attached",e.now)}catch(s){throw o&&i&&j$(e.targetCacheDir,i),s}finally{r&&sr(r,{recursive:!0,force:!0}),n.release()}}function XC(e,t,n,r){let i=KC(e,n.dbPath,t);if(i)return{kind:"bypassed",reason:i};try{let o=r??ei(e);if(!o)return{kind:"missed",reason:"Git worktree identity is unavailable"};if(!o.clean)return Vc(o,n.cacheDir,"missed",void 0,"worktree has uncommitted changes"),{kind:"missed",reason:"worktree has uncommitted changes"};let s=t.languages??Xo(e),a=so(e,s,ZC(t)),c=Gc(o,a);if(!c)return{kind:"missed",reason:"clean committed snapshot is unavailable"};let l=$r(c);if(l)return Qm({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e}),{kind:"attached",generationId:c.generationId};let u=A$(c,e);return u?(l=u.manifest,Qm({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e,action:"peer-imported"}),{kind:"peer-imported",generationId:c.generationId,sourceProjectRoot:u.sourceProjectRoot}):(Vc(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 nf(e,t,n,r){let i=KC(e,n.dbPath,t);if(i)return{kind:"bypassed",reason:i};try{let o=r??ei(e);if(!o)return{kind:"missed",reason:"Git worktree identity is unavailable"};if(!o.clean)return Vc(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??Xo(e),a=so(e,s,ZC(t)),c=Gc(o,a);if(!c)return Vc(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=$r(c);if(l)return Bi(n.cacheDir,e,a)?(Zm(c,n.cacheDir,"local-fresh"),{kind:"local-fresh"}):(Qm({snapshot:c,manifest:l,targetCacheDir:n.cacheDir,targetProjectRoot:e}),{kind:"attached",generationId:c.generationId});let u=zc(n.cacheDir);return!u||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"}:Bi(n.cacheDir,e,a)?(YC({snapshot:c,sourceCacheDir:n.cacheDir,sourceProjectRoot:e,sourceStillValid:()=>{let d=ei(e);return(d?Gc(d,a):void 0)?.generationId===c.generationId}}),Zm(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 vle(e,t={}){let n=t.timeoutMs??3e4,r=t.pollMs??100,i=t.now??Te,o=i()+n,s=M(e.repositoryCacheDir,"locks"),a=M(s,`${e.generationId}.lock`),c=l=>{if(!l||typeof l!="object"||Array.isArray(l))return null;let u=l.pid;return typeof u=="number"&&Number.isSafeInteger(u)&&u>0?{pid:u}:null};for(;i()<=o;){if($r(e))return{kind:"generation-ready"};let l=Ni(a,{kind:"shared-generation-build",detail:{generationId:e.generationId},parseLegacy:c});if(l.kind==="acquired")return{kind:"owner",release:()=>l.lock.release()};let u=o-i();if(u<=0)break;await F$(Math.min(r,u))}return $r(e)?{kind:"generation-ready"}:{kind:"timeout"}}function Zm(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:rf(i)};return eR(e.repositoryCacheDir,o,!0),o}function Vc(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:rf(o)};return eR(Ko(e.repositoryId),s,!1),s}function rf(e){return nR(JSON.stringify({version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:Dn(e.projectRoot),localCacheDir:Dn(e.localCacheDir)}))}function QC(e,t,n=void 0,r,i={}){try{let o=UC(t);if(!o)return null;let s=Ko(o.repositoryId);i.onBeforeRepositoryLock?.();let a=Mm(s,{waitMs:5e3});if(!a)return null;try{let c=UC(t);if(!c||c.repositoryId!==o.repositoryId||c.worktreeId!==o.worktreeId)return null;let l=M(s,"worktrees",`${c.worktreeId}.json`),u=JSON.parse(te(l,{inputKind:"worktree cache lease",maxBytes:Ce})),d=r??ei(e);if(!d?.clean||!d.treeOid||u.version!==1||u.repositoryId!==c.repositoryId||u.worktreeId!==c.worktreeId||u.repositoryId!==d.repositoryId||u.worktreeId!==d.worktreeId||Dn(u.projectRoot)!==Dn(d.projectRoot)||u.treeOid!==d.treeOid||Dn(u.localCacheDir)!==Dn(t)||u.ownershipChecksum!==rf(u))return null;let m=zc(t);if(!$$(m?.fingerprint))return null;let f=Gc(d,m.fingerprint);if(!f||f.repositoryCacheDir!==s||u.baseGenerationId!==f.generationId||u.activeGenerationId!==f.generationId||!Bi(t,e,f.fingerprint,!0,!1))return null;let p=(n??(()=>new Date))();if(Number.isFinite(Date.parse(u.lastSeenAt))&&p.getTime()-Date.parse(u.lastSeenAt)<6e4)return u;let g={...u,lastSeenAt:p.toISOString()};return ft(l,g,{spacing:2,trailingNewline:!0}),g}finally{a.release()}}catch{return null}}function L$(e){let t=JSON.parse(e);if(t.version!==ef||t.artifactCatalogVersion!==is||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!==Xm||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(Uc(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 as(e,t){cr(qc(t),{recursive:!0});try{jC(e,t,D$.COPYFILE_FICLONE)}catch{jC(e,t)}}function A$(e,t){for(let n of Bg(t)){if(Dn(n.path)===Dn(t))continue;let r=vc(n.path),i=zc(r);if(!(!i||JSON.stringify(i.fingerprint)!==JSON.stringify(e.fingerprint)||JSON.stringify([...i.indexedLanguages??[]].sort())!==JSON.stringify([...e.fingerprint.languages].sort()))&&Bi(r,n.path,e.fingerprint))try{return{manifest:YC({snapshot:e,sourceCacheDir:r,sourceProjectRoot:n.path}),sourceProjectRoot:n.path}}catch{continue}}return null}function M$(e,t,n){cr(e,{recursive:!0}),ft(M(e,zC),{version:1,repositoryId:t,worktreeId:n},{spacing:2,trailingNewline:!0})}function HC(e){try{let t=Hc(e),n=qC("sha256");for(let r of t.files){let i=en(e,r),o=Wc(i).size;n.update(r).update("\0").update(String(o)).update("\0"),ii(i,{inputKind:"source-generation artifact",maxBytes:Fe},s=>n.update(s)),n.update("\0")}return n.digest("hex")}catch{return null}}function zc(e){try{let t=Gt(te(M(e,"meta.json"),{inputKind:"reindex metadata",maxBytes:Ce}));return(t.kind==="legacy"||t.kind==="supported")&&t.capabilities.publishableGeneration?t.metadata:void 0}catch{return}}function ZC(e){return{pnpmWorkspaces:e.indexer?.typescript?.pnpmWorkspaces,typescriptProjectMode:e.indexer?.typescript?.projectMode,typescriptProjects:e.indexer?.typescript?.projects,clojureConfigPath:e.indexer?.clojure?.configPath}}function of(e){return M(e.repositoryCacheDir,"generations",e.generationId)}function UC(e){let t=JSON.parse(te(M(e,zC),{inputKind:"worktree cache pointer",maxBytes:Ce}));return t.version!==1||typeof t.repositoryId!="string"||!/^[a-f0-9]{24}$/.test(t.repositoryId)||typeof t.worktreeId!="string"||!/^[a-f0-9]{24}$/.test(t.worktreeId)?null:{version:t.version,repositoryId:t.repositoryId,worktreeId:t.worktreeId}}function eR(e,t,n){let r=Mm(e,{waitMs:5e3});if(!r)throw new Error("repository cache cleanup is busy");try{if(n){let o=t.activeGenerationId;if(!o||!ar(M(e,"generations",o)))throw new Error("shared generation disappeared before its lease was attached")}let i=M(e,"worktrees");cr(i,{recursive:!0}),ft(M(i,`${t.worktreeId}.json`),t,{spacing:2,trailingNewline:!0}),M$(t.localCacheDir,t.repositoryId,t.worktreeId)}finally{r.release()}}function N$(e,t){let n=M(t,".rollback"),r=new Map,i=new Map;cr(n,{recursive:!0});for(let a of["index.scip","index.db","meta.json"]){let c=M(e,a),l=ar(c);r.set(a,l),l&&as(c,M(n,"stable",a))}for(let a of tf){let c=M(e,a),l=ar(c);if(l){let u=P$(c);if(!u.isDirectory()||u.isSymbolicLink())throw new Error(`managed artifact path is not a directory: ${a}`)}i.set(a,l)}let o=M(e,qo),s=ar(o);return s&&tR(o,M(n,"sqlite-generations")),{root:n,stableFiles:r,managedDirectories:i,generationStoreExisted:s}}function O$(e,t,n){for(let r of tf){let i=M(t,r);if(n.managedDirectories.get(r)){let s=M(n.root,"managed",r);cr(qc(s),{recursive:!0}),Br(i,s)}let o=M(e,r);ar(o)&&Br(o,i)}}function j$(e,t){for(let i of tf){let o=M(e,i),s=M(t.root,"managed",i);t.managedDirectories.get(i)?ar(s)&&(sr(o,{recursive:!0,force:!0}),Br(s,o)):sr(o,{recursive:!0,force:!0})}for(let[i,o]of t.stableFiles){let s=M(e,i);if(!o){sr(s,{force:!0});continue}let a=`${s}.shared-restore-${E$()}`;as(M(t.root,"stable",i),a),sr(s,{force:!0}),Br(a,s)}let n=M(e,qo);sr(n,{recursive:!0,force:!0});let r=M(t.root,"sqlite-generations");t.generationStoreExisted&&ar(r)&&Br(r,n)}function tR(e,t){cr(t,{recursive:!0});for(let n of k$(e,{withFileTypes:!0})){let r=M(e,n.name),i=M(t,n.name);if(n.isSymbolicLink())throw new Error(`managed cache backup cannot contain a symlink: ${r}`);n.isDirectory()?tR(r,i):n.isFile()&&as(r,i)}}function B$(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 Bi(e,t,n,r=!0,i=!0){try{let o=zc(e);if(!o||JSON.stringify(o.fingerprint)!==JSON.stringify(n)||JSON.stringify([...o.indexedLanguages??[]].sort())!==JSON.stringify([...n.languages].sort()))return ss("source validation rejected metadata"),!1;let s=Hc(e),a=Qo(M(e,"index.db"),M(e,"meta.json"));if(r?a.state!=="current":a.state==="invalid"||a.state==="drifted")return ss(`source validation rejected SQLite generation state ${a.state}`),!1;let c=new _$(M(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=sf(t),d=(i?s.files.filter(m=>m.endsWith(".scip")):["index.scip"]).every(m=>{let f=VC(ye(en(e,m),{inputKind:"shared SCIP validation artifact",maxBytes:Fe})).metadata?.projectRoot;return f!==l&&ss(`source validation rejected SCIP root for ${m}: ${String(f)}`),f===l});return d||ss("source validation rejected SCIP project roots"),d}catch(o){return ss(`source validation failed: ${o instanceof Error?o.message:String(o)}`),!1}}function ss(e){process.env.SCIP_QUERY_DEBUG&&console.error(`shared-cache: ${e}`)}function sf(e){try{return BC(T$(e)).href}catch{return BC(Dn(e)).href}}function $$(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 nR(e){return qC("sha256").update(e).digest("hex")}function rR(){return process.env.SCIP_QUERY_PROJECT_ROOT??process.cwd()}var af;function Ale(e){af=e}function iR(e=rR(),t=void 0){if(t===void 0&&af?.projectRoot===e)return af;let n=Gx(e),r=yx(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(cf(r.dbPath))return{projectRoot:e,config:n,paths:r,dbPath:r.dbPath,dbPathSource:"configured",gitContext:t};let o=U$(e,"index.db");return{projectRoot:e,config:n,paths:r,dbPath:o,dbPathSource:"root-fallback",rootFallbackWarning:W$(o,r.dbPath),gitContext:t}}function Mle(e){return iR(e).dbPath}function Nle(e,t,n,r={}){return cf(n.dbPath)&&QC(e,n.cacheDir,void 0,r.gitContext)?{kind:"local-fresh"}:r.gitContext?.clean===!1&&r.watcherGeneration!==void 0&&BS(n.dbPath)===r.watcherGeneration?nf(e,t,n,r.gitContext):lC(e,t,n).state==="fresh"?nf(e,t,n,r.gitContext):XC(e,t,n,r.gitContext)}function Ole(e){return!e.startsWith("__")&&!q$.has(e)}var q$=new Set(["bench","config-validate","hook-context","hook-stop","init","setup","setup-agent","setup-ci","setup-hooks","uninstall","work-audit"]);function G$(){try{return V$(rR(),{warnOnRootFallback:!0})}catch(e){console.error(`error: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}function V$(e,t={}){let{config:n,paths:r,dbPath:i,dbPathSource:o,rootFallbackWarning:s,gitContext:a}=iR(e);if(!cf(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:JC(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=Ix(e);return new wc(c,l)}function W$(e,t){let n="unknown time";try{n=H$(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 Pn(e){let t=G$();try{return e(t)}finally{t.close()}}function jle(e,t){return t.concat([e])}function oR(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 Ble(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":""}`;case"draining":return`Stopping safely \u2014 ${e.reason}`;default:return z$(e)}}function z$(e){throw new Error(`Unhandled watcher status: ${JSON.stringify(e)}`)}var K$=new Map([[8,"\u2408"],[9,"\u2409"],[10,"\u2424"],[13,"\u240D"]]);function sR(e,t={}){let n=t.allowNewlines??!0,r=t.allowTabs??!0,i="";for(let o=0;o<e.length;){let s=e.charCodeAt(o);if(s===27){o=J$(e,o);continue}if(s===155){o=aR(e,o+1);continue}if(s===144||s===152||s===157||s===158||s===159){o=cR(e,o+1);continue}if(Q$(s)){s===10&&n?i+=`
|
|
397
|
+
`:s===9&&r?i+=" ":i+=K$.get(s)??"\uFFFD",o+=1;continue}if(Z$(s)){i+="\uFFFD",o+=1;continue}i+=e[o],o+=1}return i}function kt(e){return sR(e,{allowNewlines:!1,allowTabs:!1})}function cs(e,t=n=>process.stdout.write(n)){t(`${e}
|
|
398
|
+
`)}function Hle(e=console){let t={log:e.log.bind(e),error:e.error.bind(e),warn:e.warn.bind(e)};return e.log=(...n)=>t.log(...n.map(lf)),e.error=(...n)=>t.error(...n.map(lf)),e.warn=(...n)=>t.warn(...n.map(lf)),()=>{e.log=t.log,e.error=t.error,e.warn=t.warn}}function lf(e){return typeof e=="string"?sR(e):e}function J$(e,t){let n=e.charCodeAt(t+1);if(Number.isNaN(n))return e.length;if(n===91)return aR(e,t+2);if(n===80||n===88||n===93||n===94||n===95)return cR(e,t+2);let r=t+1;for(;r<e.length&&Y$(e.charCodeAt(r));)r+=1;return r<e.length&&X$(e.charCodeAt(r))?r+1:t+1}function aR(e,t){let n=t;for(;n<e.length;){let r=e.charCodeAt(n);if(n+=1,r>=64&&r<=126)return n}return e.length}function cR(e,t){let n=t;for(;n<e.length;){let r=e.charCodeAt(n);if(r===7||r===156)return n+1;if(r===27&&e.charCodeAt(n+1)===92)return n+2;n+=1}return e.length}function Y$(e){return e>=32&&e<=47}function X$(e){return e>=48&&e<=126}function Q$(e){return e<=31||e>=127&&e<=159}function Z$(e){return e===1564||e===8206||e===8207||e>=8234&&e<=8238||e>=8294&&e<=8297}function lR(e){return e+1}function e1(e,t){return`${lR(e)}-${lR(t)}`}function Gle(e,t,n){return`${kt(e)}:${e1(t,n)}`}function Vle(e,t=180){let n=kt(e).replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-3)}...`:n}var tn={empty(e){console.log(kt(e))},list(e,t){for(let n of e)console.log(kt(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(kt(o)),r=o),console.log(kt(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 ${kt(n.title)} \u2550\u2550\u2550`),n.explanation!==void 0&&console.log(kt(n.explanation));for(let r of n.rows)console.log(kt(r))}},table(e,t,n){console.log(` ${e.map(kt).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(kt(i))}};import{availableParallelism as V4}from"os";import{fileURLToPath as eg}from"url";import{existsSync as Kc,readdirSync as dR}from"fs";import{join as ls}from"path";var t1={files:new Set,pathPrefixes:[]},uf=/^(?:dist|build|lib|out|output|esm|cjs|umd)\//,n1=/\.(?:d\.ts|d\.mts|d\.cts|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,mR=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],r1=new Set([".git",".next",".turbo","build","coverage","dist","node_modules","out"]),i1=4,o1=ee("package-surface",{clearGroups:["whole-project"]});function s1(e){return o1.get(e,()=>a1(e.config.projectRoot))}function Hr(e,t){let n=s1(e);return n.files.has(t)?!0:n.pathPrefixes.some(r=>t.startsWith(r))}function a1(e){let t=new Set,n=[];for(let{manifest:r,packageRoot:i}of c1(e))for(let o of l1(r))u1(e,i,o,t,n);return t.size===0&&n.length===0?t1:{files:t,pathPrefixes:n}}function c1(e){let t=[],n=pR(e,"");return n&&t.push({manifest:n,packageRoot:""}),fR(e,"",t,0),t}function fR(e,t,n,r){if(r>=i1)return;let i=ls(e,t);if(Kc(i))for(let o of dR(i,{withFileTypes:!0})){if(!o.isDirectory()||r1.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name,a=pR(e,s);a&&n.push({manifest:a,packageRoot:s}),fR(e,s,n,r+1)}}function pR(e,t){let n;try{n=Re(e,ls(t,"package.json"),{maxBytes:8*1024*1024,inputKind:"package manifest"})}catch(r){if(!_e(r))throw r;return null}try{let r=JSON.parse(n);return r&&typeof r=="object"?r:null}catch{return null}}function l1(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 gR(e.exports,t),t}function gR(e,t){if(typeof e=="string"){t.push(e);return}if(!(!e||typeof e!="object"))for(let n of Object.values(e))gR(n,t)}function u1(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 uR(c))l!==""&&i.push(kn(t,l));return}let a=o.replace(n1,"");for(let c of uR(a)){c===a&&c===o&&r.add(kn(t,o));for(let l of mR)d1(e,r,t,c+l)}r.add(kn(t,o))}function uR(e){let t=[e];return uf.test(e)&&(t.push(e.replace(uf,"src/")),t.push(e.replace(uf,""))),t}function d1(e,t,n,r){let i=kn(n,r);if(t.add(i),!r.startsWith("src/")||Kc(ls(e,i)))return;let o=mR.find(u=>r.endsWith(u));if(!o)return;let s=r.slice(0,-o.length);m1(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 hR(e,n,c,`${l}${o}`))t.add(u)}function m1(e,t,n,r,i){let o=kn(n,`${r}/index${i}`);Kc(ls(e,o))&&t.add(o)}function hR(e,t,n,r){let i=ls(e,t,n);if(!Kc(i))return[];let o=[];for(let s of dR(i,{withFileTypes:!0})){let a=`${n}/${s.name}`;s.isDirectory()?o.push(...hR(e,t,a,r)):s.isFile()&&s.name===r&&o.push(kn(t,a))}return o}function kn(e,t){return e?`${e}/${t}`:t}import{existsSync as df,readdirSync as f1}from"fs";import{dirname as p1,join as mf}from"path";var g1={rootFiles:new Set,sourcePrefixes:[]},h1=new Set([".git",".scipquery","node_modules","target"]),y1=6,b1=ee("rust-library-surface",{clearGroups:["whole-project"]});function yR(e,t,n){if(!n.endsWith(".rs")||!C1(S1(e),n))return!1;let r=Z(e,n).find(i=>i.symbol===t);return r?R1(Le(e,n)[r.startLine]??""):!1}function S1(e){return b1.get(e,()=>x1(e.config.projectRoot))}function x1(e){let t=new Set,n=new Set;for(let r of v1(e)){let i=Re(e,mf(r,"Cargo.toml"),{maxBytes:8388608,inputKind:"Cargo manifest"}),o=I1(i),s=kn(r,"src/lib.rs"),a=o?kn(r,o):!w1(i)&&tt(e,s)?s:null;if(!a)continue;t.add(a);let c=p1(a).replaceAll("\\","/");n.add(c==="."?"":`${c}/`)}return t.size===0?g1:{rootFiles:t,sourcePrefixes:[...n].sort()}}function C1(e,t){return t.endsWith(".rs")?e.rootFiles.has(t)?!0:E1(t)?!1:e.sourcePrefixes.some(n=>t.startsWith(n)):!1}function R1(e){return/^\s*pub\s+(?!\()/.test(e)}function v1(e){if(!df(e))return[];let t=[];return bR(e,"",t,0),t}function bR(e,t,n,r){let i=mf(e,t);if(df(i)&&(df(mf(i,"Cargo.toml"))&&n.push(t),!(r>=y1)))for(let o of f1(i,{withFileTypes:!0})){if(!o.isDirectory()||h1.has(o.name))continue;let s=t?`${t}/${o.name}`:o.name;bR(e,s,n,r+1)}}function I1(e){let t=!1;for(let n of e.split(`
|
|
399
|
+
`)){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 w1(e){let t=!1;for(let n of e.split(`
|
|
400
|
+
`)){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 E1(e){return/(?:^|\/)src\/main\.rs$/.test(e)||/(?:^|\/)src\/bin\//.test(e)||/(?:^|\/)(?:examples|tests|benches)\//.test(e)}function z(e){let t=ce(e);return q1(t)?"test":G1(t)?"worker":V1(t)?"entry":W1(t)?"barrel":"source"}function $i(e){return z(e)==="barrel"}function xR(e){return D1.get(e,()=>{let n=A(e,{includeIgnored:!1}).filter(s=>{let a=z(s);return a==="entry"||a==="worker"});if(n.length===0)return new Set;let r=le(e),i=new Set,o=new Set;for(;n.length>0;){let s=n.shift();if(!i.has(s)){i.add(s),z(s)==="barrel"&&o.add(s);for(let a of r.get(s)??[])i.has(a)||n.push(a)}}return o})}var D1=ee("live-barrels",{clearGroups:["whole-project"]});function ff(e,t){return xR(e).has(ce(t))}function CR(e){let t=xR(e);return A(e,{includeIgnored:!1}).filter(n=>$i(n)&&!t.has(n)&&!P1(e,n))}function P1(e,t){let n=ce(t),r=It(e).forFile(n,{facts:!0}).facts?.callables;return r&&r.length>0?!0:(e.get(`SELECT COUNT(*) AS n
|
|
401
|
+
FROM defn_enclosing_ranges der
|
|
402
|
+
JOIN documents d ON d.id = der.document_id
|
|
403
|
+
WHERE d.relative_path = ?
|
|
404
|
+
AND der.end_line - der.start_line >= 2`,n)?.n??0)>0}function He(e,t){let n=ce(t),r=z(t);return r==="entry"||r==="worker"||$1(n)||ff(e,n)}function be(e,t,n){let r=ce(n);if(Hr(e,r)||T1(e,t,r)||yR(e,t,r)||B1(t,r))return!0;let i=e.config.entryRoots;return i?!!(i.files?.some(o=>ce(o)===r)||i.pathPrefixes?.some(o=>r.startsWith(ce(o)))||i.qualifiedVars?.some(o=>z1(t,o))||i.symbolPatterns?.some(o=>{try{return Jo(o,"entryRoots.symbolPatterns entry").test(t)}catch{return!1}})):!1}var k1=ee("package-surface-reachability",{clearGroups:["whole-project"]});function T1(e,t,n){let r=F1(e).get(n);return r===void 0?!1:r===null||r.has(T(t))}function F1(e){return k1.get(e,()=>{let t=new Map,n=[];for(let r of A(e,{includeIgnored:!1}))Hr(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 Sn(e,r)){if(!o.sourcePath||e.isIgnored(o.sourcePath))continue;let s=_1(i,o);s!==void 0&&L1(t,o.sourcePath,s)&&n.push(o.sourcePath)}}return t})}function _1(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 L1(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 RR=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),A1=new Set(["default","generateMetadata","generateStaticParams"]),M1=new Set(["default","getStaticProps","getServerSideProps","getStaticPaths","config"]),N1=new Set(["default","loader","action","clientLoader","clientAction","headers","links","meta","shouldRevalidate","ErrorBoundary","HydrateFallback"]),O1=new Set(["load","actions","entries",...RR]),j1=new Set(["default"]);function B1(e,t){let n=T(e);return n===""?!1:vR(t)?RR.has(n):IR(t)?A1.has(n):wR(t)?M1.has(n):ER(t)?N1.has(n):DR(t)?O1.has(n):U1(t)?j1.has(n):!1}function $1(e){return vR(e)||IR(e)||wR(e)||H1(e)||ER(e)||DR(e)}function vR(e){return/(?:^|\/)app(?:\/[^/]+)*\/route\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function IR(e){return/(?:^|\/)app(?:\/[^/]+)*\/(?:page|layout|template|loading|error|not-found|global-error|head|default)\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function wR(e){return/(?:^|\/)pages\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function H1(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 ER(e){return/(?:^|\/)app\/routes\/.+\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(e)}function DR(e){return/(?:^|\/)src\/routes\/(?:.*\/)?\+(?:page|page\.server|layout|layout\.server|server)\.(?:ts|js)$/.test(e)}function U1(e){return/(?:^|\/)src\/(?:pages|views|routes)\/.+\.(?:ts|tsx|js|jsx|vue)$/.test(e)}function q1(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 G1(e){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(e)}function V1(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 W1(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 z1(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(SR(r)+"/")&&e.includes(SR(i)+".")}function SR(e){return/^[A-Za-z0-9_$+-]+$/.test(e)?e:"`"+e.replace(/`/g,"``")+"`"}import{SymbolInformation_Kind as J}from"@c4312/scip";var Jc=new Map(Object.entries(J).filter(([e,t])=>Number.isInteger(Number(e))&&typeof t=="string").map(([e,t])=>[Number(e),t])),PR=new Map([...Jc.entries()].map(([e,t])=>[t.toLowerCase(),e]));function us(e){return Jc.get(e)??"Unknown"}function nn(){return[J.Function,J.Method,J.Macro,J.Constructor,J.Getter,J.Setter,J.StaticMethod,J.SingletonMethod,J.AbstractMethod,J.ProtocolMethod,J.TraitMethod]}function kR(){return[J.Class,J.Interface,J.Struct,J.Trait,J.Type,J.TypeAlias,J.Enum,J.Union,J.Protocol]}function bue(){return[J.Constant,J.Variable,J.Value,J.Field,J.Property,J.StaticDataMember,J.StaticField,J.StaticProperty,J.StaticVariable,J.EnumMember]}function Tt(e,t,n={}){let r=Yc(e,[t],{additive:n.additive,semantic:n.semantic,semanticEvidence:n.semanticEvidence}),i=n.callableOnly?(r.get(t.symbolId)??[]).filter(o=>ge(o.symbol)||o.source==="ast-callsite"):r.get(t.symbolId)??[];return typeof n.limit=="number"?i.slice(0,n.limit):i}function $t(e,t,n){return gf(e,[t],n).get(t.symbolId)??[]}function gf(e,t,n){let r=Y1(e)?Q1(e,t,{semantic:n.semantic!==!1,semanticEvidence:n.semanticEvidence}):X1(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 K1=ee("caller-rows",{clearGroups:["whole-project"]}),J1=2e4;function Y1(e){return(e.get("SELECT COUNT(*) AS count FROM global_symbols")?.count??0)>J1}function X1(e,t){return K1.get(e,()=>{let n=Ae(e),r=Yc(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 Q1(e,t,n){let r=n.semantic&&n.semanticEvidence?t.flatMap(a=>{let c=Z1(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 wo(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=Jt(Z(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 Z1(e,t){let n=nn().join(", "),r=kR().join(", ");return e.get(`SELECT
|
|
405
|
+
d.id AS documentId,
|
|
406
|
+
gs.id AS symbolId,
|
|
407
|
+
gs.symbol,
|
|
408
|
+
d.relative_path AS relativePath,
|
|
409
|
+
COALESCE(der.start_line, c.start_line) AS startLine,
|
|
410
|
+
COALESCE(der.end_line, c.end_line) AS endLine,
|
|
411
|
+
COALESCE(gs.display_name, '') AS leaf,
|
|
412
|
+
NULL AS parentTypeName,
|
|
413
|
+
CASE WHEN gs.kind IN (${n}) OR gs.symbol LIKE '%().' THEN 1 ELSE 0 END AS isFunctionLike,
|
|
414
|
+
CASE WHEN gs.kind IN (${r}) THEN 1 ELSE 0 END AS isTypeLike,
|
|
415
|
+
gs.kind AS kind,
|
|
416
|
+
gs.documentation AS documentation,
|
|
417
|
+
gs.enclosing_symbol AS enclosingSymbol
|
|
418
|
+
FROM global_symbols gs
|
|
419
|
+
LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
420
|
+
LEFT JOIN chunks c ON c.document_id = der.document_id
|
|
421
|
+
JOIN documents d ON d.id = COALESCE(der.document_id, c.document_id)
|
|
422
|
+
WHERE gs.id = ?
|
|
423
|
+
LIMIT 1`,t.symbolId)??null}function Yc(e,t,n={}){if(t.length===0)return new Map;let r=n.additive??!1,i=[],o=[];for(let u of t)N(u.relativePath)&&qn(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(eH(e,i)),n.semantic!==!1&&n.semanticEvidence&&c(sH(n.semanticEvidence.calleeMap(e,t)));let l=r?t:o;return l.length>0&&c(iH(e,l)),s}function eH(e,t){let n=new Map,r=tH(t,n),i=vn(e);for(let[o,s]of r){let a=qn(e,o);if(!a)continue;let c=od(s);for(let l of a){let u=c.get(l.line);if(!u)continue;let d=nH(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 tH(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 nH(e,t,n,r){let i=Oa(t,n.get(r.calleeLeaf)??[]);if(i.length===0)return null;let o=rH(e,t,i,r.calleeQualifier);return o||ja(e,t,i,r.memberAccess)}function rH(e,t,n,r){if(!r||N(t)!=="clojure")return null;let o=re(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=>ct(s,c.file));if(a)return a}return n.find(s=>/`([^`]+)`\//.exec(s.symbol)?.[1]===r)??null}function iH(e,t){if(t.length===0)return new Map;let r=pf(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
|
|
424
|
+
FROM mentions m
|
|
425
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
426
|
+
WHERE m.role != 1
|
|
427
|
+
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=pf(r.map(f=>f.symbol_id)).flatMap(f=>e.all(`SELECT gs.id AS symbol_id, gs.symbol,
|
|
428
|
+
COALESCE(der.document_id, def_chunk.document_id) AS document_id
|
|
429
|
+
FROM global_symbols gs
|
|
430
|
+
LEFT JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
431
|
+
LEFT JOIN (
|
|
432
|
+
SELECT m.symbol_id, MIN(c.document_id) AS document_id
|
|
433
|
+
FROM mentions m
|
|
434
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
435
|
+
WHERE m.role = 1
|
|
436
|
+
AND m.symbol_id IN (${f.map(()=>"?").join(",")})
|
|
437
|
+
GROUP BY m.symbol_id
|
|
438
|
+
) def_chunk ON def_chunk.symbol_id = gs.id
|
|
439
|
+
WHERE gs.id IN (${f.map(()=>"?").join(",")})`,...f,...f)),a=pf([...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
|
|
440
|
+
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=oH(t);for(let[f,p]of m){let y=[...i.get(f)??[]].sort((S,x)=>S.start_line-x.start_line||S.end_line-x.end_line),h=[...p].sort((S,x)=>S.startLine-x.startLine||S.endLine-x.endLine),C=new Set,b=0;for(let S of h){for(;b<y.length&&y[b].start_line<=S.endLine;)C.add(y[b]),b+=1;for(let w of C)w.end_line<S.startLine&&C.delete(w);let x=new Set,v=[],R=null,D=()=>{if(R)return R;let w=d.get(S.documentId)??"",P=new Set;if(w){let L=My(e,w),ie=Math.max(0,S.startLine),ne=Math.min(L.length-1,S.endLine);for(let _=ie;_<=ne;_+=1)for(let me of L[_])P.add(me)}return R=P,P};for(let w of C){if(w.symbol_id===S.symbolId)continue;let P=l.get(w.symbol_id);if(!P)continue;if(!(w.start_line>=S.startLine&&w.end_line<=S.endLine)){if(!(w.start_line<=S.endLine&&w.end_line>=S.startLine))continue;let _=T(P.symbol);if(!_||!D().has(_))continue}let ie=`${P.symbol}|${w.chunk_id}`;x.has(ie)||(x.add(ie),v.push({...P,chunkId:w.chunk_id,source:"scip-chunk"}))}u.set(S.symbolId,v)}}return u}var TR=500;function pf(e){let t=[...new Set(e)],n=[];for(let r=0;r<t.length;r+=TR)n.push(t.slice(r,r+TR));return n}function oH(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 sH(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 FR(e,t,n={}){let r=new Map;if(t&&t.length===0)return r;let i=A(e,{includeIgnored:!1}),o=vn(e),s=t??Ae(e),a=new Set(s.map(l=>l.symbolId)),c=fH(s);return aH(e,r,i,o,a,c),cH(e,r,s,a),mH(e,r,i,o,a,c),n.semantic!==!1&&n.semanticEvidence&&gH(r,n.semanticEvidence.callerMap(e,pH(s))),r}function aH(e,t,n,r,i,o){for(let s of n){if(!N(s))continue;let a=qn(e,s);if(a)for(let c of a){if(o&&!o.has(c.calleeLeaf))continue;let l=Oa(s,r.get(c.calleeLeaf)??[]);if(!l||l.length===0)continue;let u=ja(e,s,l,c.memberAccess);u&&i.has(u.symbolId)&&u.file!==s&&hf(t,u.symbolId,s)}}}function cH(e,t,n,r){let i=uH(n);for(let o of lH(e,r))e.isIgnored(o.relative_path)||dH(o,i.get(o.symbol_id))||hf(t,o.symbol_id,o.relative_path)}function lH(e,t){return bi(e,t?[...t]:void 0)}function uH(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 dH(e,t){return!!t&&t.docId===e.document_id&&e.chunk_start>=t.startLine&&e.chunk_end<=t.endLine}function mH(e,t,n,r,i,o){for(let s of n){if(N(s)!=="rust")continue;let a=Ir(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&&hf(t,u.symbolId,s)}}}function hf(e,t,n){let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)}function fH(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 pH(e){return e.filter(t=>"relativePath"in t&&"symbol"in t&&"leaf"in t)}function gH(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 yf(e,t,n={}){return FR(e,t,n)}function ds(e,t,n={}){return Vy(e,t,n)}function _R(e,t,n={}){let r=yf(e,t,{semantic:n.semantic,semanticEvidence:n.semanticEvidence});return n.sourceFallback===!1?r:Tn(r,ds(e,t))}function Tn(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 LR(e,t,n){let r=t.identifierResolution==="strict"?Si:qy,i=t.candidateNames?vo(t.candidateNames):null,o=0,s=0,a=0,c=0,l="";for(let u of t.paths)if(o+=1,l=u,!(!N(u)&&!(t.includeVueSfc&&un(u)))&&!e.isIgnored(u)&&!t.skipPath?.(u))try{if(i&&!Ba(k(e,u),i))continue;s+=1;let m=(p,g,y,h)=>{if(t.candidateNames&&!t.candidateNames.has(p))return;a+=1;let C=t.resolveTargets?t.resolveTargets({sourceFile:u,name:p,kind:g,defaultTargets:h}):h();for(let b of C)c+=1,n({sourceFile:u,name:p,target:b,occurrences:y,kind:g})},f=Rn(e,u);for(let[p,g]of f)m(p,"identifier",g.length,()=>r(e,u,p));for(let p of Ir(e,u,{includeCrossLanguageDispatchNames:t.includeCrossLanguageDispatchNames,includeRustAttributeNames:t.includeRustAttributeNames})){let g=p.kind==="cross-language-dispatch"?()=>Si(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 j(e){return e.endLine-e.startLine+1}function AR(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=hH(e,{scope:n,files:r,requireFunctionLikeSymbol:u,requireCallableSymbol:d}),h=new Map,C=new Map,b=x=>{let v=h.get(x);if(v!==void 0)return v;let R=He(e,x);return h.set(x,R),R},S=x=>{let v=C.get(x);if(v!==void 0)return v;let R=z(x);return C.set(x,R),R};for(let x of y){let v=x.relativePath;if(e.isIgnored(v)||a&&b(v)||!yH(x,{requireFunctionLikeSymbol:u,requireCallableSymbol:d})||s!==void 0&&x.symbol===s)continue;let R=j(x);R<i||R>o||c&&bH(v)||l&&be(e,x.symbol,v)||m&&Oe(x.symbol)||S(v)!=="test"&&(ti(x.symbol)||!f&&Zs(e,v,x.startLine)||g.push(x))}return p?g.sort((x,v)=>j(v)-j(x)):g}function hH(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=>Z(e,r)):t.requireCallableSymbol?So(e,{scope:t.scope,symbolMatches:ge,sqlPrefilter:"callable"}):t.requireFunctionLikeSymbol?So(e,{scope:t.scope,symbolMatches:ae,sqlPrefilter:"function-like"}):ky(e,t.scope)}function yH(e,t){return t.requireCallableSymbol?ge(e.symbol):t.requireFunctionLikeSymbol?ae(e.symbol):e.isFunctionLike}function bH(e){return(e.split("/").pop()??"").includes("types")}var F=class{constructor(t){this.db=t}db;scopedDefinitions(t){return id(this.db,t)}definitionsForFile(t){return Z(this.db,t)}productionCallableDefinitions(t={}){return AR(this.db,t)}calleeMap(t,n={}){return Yc(this.db,t,{...n,semanticEvidence:q})}crossFileCallerMap(t,n={}){return yf(this.db,t,{...n,semanticEvidence:q})}sourceFallbackCallerFiles(t,n={}){return ds(this.db,t,n)}callerFileMap(t,n={}){return _R(this.db,t,{...n,semanticEvidence:q})}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 A(this.db,{includeIgnored:!1}))if(N(i)==="rust")for(let{name:o}of Ir(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 le(this.db,t)}fileKind(t){return z(t)}hasSuppressionComment(t){return Zs(this.db,t.relativePath,t.startLine)}sourceFiles(){return rt(this.db)}scanSourceReferences(t,n){LR(this.db,t,n)}callableSignature(t){let n=It(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 SH}from"fs";function Ur(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,...xH(e.generation.databasePath)}}function xH(e){try{let t=SH(e);return{indexSizeBytes:t.size,lastBuilt:t.mtime}}catch{return{indexSizeBytes:0,lastBuilt:null}}}function CH(e){return/[*?]/.test(e)?e.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_"):`%${e}%`}function RH(e,t){let n=CH(t);return A(e,{like:n,includeIgnored:!1}).filter(r=>vH(t,r)).map(r=>({relativePath:r}))}function vH(e,t){if(!/[*?]/.test(e))return t.includes(e);let n=e.includes("/")?e:`**/${e}`;return Xc(n.split("/"),t.split("/"))}function Xc(e,t){if(e.length===0)return t.length===0;let[n,...r]=e;return n==="**"?Xc(r,t)||t.length>0&&Xc(e,t.slice(1)):t.length===0||!IH(n??"",t[0]??"")?!1:Xc(r,t.slice(1))}function IH(e,t){let n="^";for(let r of e)r==="*"?n+="[^/]*":r==="?"?n+="[^/]":n+=wH(r);return n+="$",new RegExp(n).test(t)}function wH(e){return/[\\^$.*+?()[\]{}|]/.test(e)?`\\${e}`:e}import{basename as EH}from"path";function DH(e,t){let n=H(e,t);if(!n)return[];let r=T(n.symbol),o=new F(e).definitionsForFile(n.relativePath).filter(l=>ge(l.symbol)),s=o.filter(l=>l.parentTypeName===r||l.symbol.includes(r)),c=(s.length>0?s:PH(EH(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 N(n.relativePath)!=="clojure"?c:TH(c,kH(e,n))}function PH(e){return e.replace(/\.[^.]+$/,"")}function kH(e,t){let n=T(t.symbol);return n?(K(e,t.relativePath)?.clojureMembers??[]).filter(r=>r.ownerName===n).map(r=>({startLine:r.startLine,endLine:r.endLine,name:r.memberName})):[]}function TH(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 bf(e,t,n={}){let r=H(e,t);if(!r)return{definitions:[],referencedBy:[]};let i=e.get("SELECT display_name, documentation FROM global_symbols WHERE id = ?",r.symbolId),o=Cn(i?.documentation??null),s=e.isIgnored(r.relativePath)?[]:[{relativePath:r.relativePath,startLine:r.startLine,endLine:r.endLine,signature:_H(o,i?.display_name??null,r.symbol),source:FH(e,r.relativePath,r.startLine,r.endLine)}],a=Yt(e,r,{semantic:n.semantic,semanticEvidence:q}).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 FH(e,t,n,r){let i=k(e,t);if(!i)return null;let s=i.split(`
|
|
441
|
+
`).slice(n,r+1).join(`
|
|
442
|
+
`).trimEnd();return s.length>0?s:null}function _H(e,t,n){let r=xn(e);if(r&&!LH(r))return r;let i=(t??"").trim();return i?ae(n)&&!i.endsWith("()")?`${i}()`:i:I(n)}function LH(e){return e.startsWith("undefined")||e.includes("|")||e.includes("```")}function Sf(e,t){let n=Ze(e,t);return n?e.all(`SELECT DISTINCT d2.relative_path
|
|
443
|
+
FROM mentions m
|
|
444
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
445
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
446
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
447
|
+
JOIN (
|
|
448
|
+
SELECT m2.symbol_id, c2.document_id
|
|
449
|
+
FROM mentions m2
|
|
450
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
451
|
+
WHERE m2.role = 1
|
|
452
|
+
GROUP BY m2.symbol_id
|
|
453
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
454
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
455
|
+
WHERE d1.relative_path = ?
|
|
456
|
+
AND d2.relative_path <> d1.relative_path
|
|
457
|
+
AND ${e.localSymbolPredicate}
|
|
458
|
+
ORDER BY d2.relative_path`,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function xf(e,t){let n=Ze(e,t);return n?e.all(`SELECT DISTINCT d1.relative_path
|
|
459
|
+
FROM mentions m
|
|
460
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
461
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
462
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
463
|
+
JOIN (
|
|
464
|
+
SELECT m2.symbol_id, c2.document_id
|
|
465
|
+
FROM mentions m2
|
|
466
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
467
|
+
WHERE m2.role = 1
|
|
468
|
+
GROUP BY m2.symbol_id
|
|
469
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
470
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
471
|
+
WHERE d2.relative_path = ?
|
|
472
|
+
AND d1.relative_path != ?
|
|
473
|
+
ORDER BY d1.relative_path`,n,n).filter(i=>!e.isIgnored(i.relative_path)).map(i=>({relativePath:i.relative_path})):[]}function Cf(e,t){let n=Li(e,t);if(n.length===0)return{files:[],symbols:[],dependsOn:[],dependedOnBy:[]};let r=n.map(()=>"?").join(", "),o=e.all(`SELECT relative_path FROM documents
|
|
474
|
+
WHERE relative_path IN (${r})
|
|
475
|
+
ORDER BY relative_path`,...n).map(d=>d.relative_path).filter(d=>!e.isIgnored(d)),s=ka(e,o,{onlyDocumented:!0,sort:!0}).map(({relativePath:d,...m})=>m),c=e.all(`SELECT DISTINCT d2.relative_path
|
|
476
|
+
FROM mentions m
|
|
477
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
478
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
479
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
480
|
+
JOIN (
|
|
481
|
+
SELECT m2.symbol_id, c2.document_id
|
|
482
|
+
FROM mentions m2
|
|
483
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
484
|
+
WHERE m2.role = 1
|
|
485
|
+
GROUP BY m2.symbol_id
|
|
486
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
487
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
488
|
+
WHERE d1.relative_path IN (${r})
|
|
489
|
+
AND d2.relative_path NOT IN (${r})
|
|
490
|
+
AND ${e.localSymbolPredicate}
|
|
491
|
+
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
|
|
492
|
+
FROM mentions m
|
|
493
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
494
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
495
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
496
|
+
JOIN (
|
|
497
|
+
SELECT m2.symbol_id, c2.document_id
|
|
498
|
+
FROM mentions m2
|
|
499
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
500
|
+
WHERE m2.role = 1
|
|
501
|
+
GROUP BY m2.symbol_id
|
|
502
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
503
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
504
|
+
WHERE d2.relative_path IN (${r})
|
|
505
|
+
AND d1.relative_path NOT IN (${r})
|
|
506
|
+
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 Rf(e,t){let n=Li(e,t);return n.length===0?[]:NH([...AH(e,n),...MH(e,n)]).filter(r=>!e.isIgnored(r.relative_path)).map(OH)}function AH(e,t){let n=t.map(()=>"?").join(", ");return e.all(`SELECT DISTINCT d1.relative_path, gs.symbol
|
|
507
|
+
FROM mentions m
|
|
508
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
509
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
510
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
511
|
+
WHERE d1.relative_path NOT IN (${n})
|
|
512
|
+
AND (
|
|
513
|
+
EXISTS (
|
|
514
|
+
SELECT 1
|
|
515
|
+
FROM defn_enclosing_ranges der
|
|
516
|
+
JOIN documents d2 ON der.document_id = d2.id
|
|
517
|
+
WHERE der.symbol_id = gs.id
|
|
518
|
+
AND d2.relative_path IN (${n})
|
|
519
|
+
)
|
|
520
|
+
OR EXISTS (
|
|
521
|
+
SELECT 1
|
|
522
|
+
FROM mentions def_m
|
|
523
|
+
JOIN chunks def_c ON def_m.chunk_id = def_c.id
|
|
524
|
+
JOIN documents d2 ON def_c.document_id = d2.id
|
|
525
|
+
WHERE def_m.symbol_id = gs.id
|
|
526
|
+
AND def_m.role = 1
|
|
527
|
+
AND d2.relative_path IN (${n})
|
|
528
|
+
)
|
|
529
|
+
)
|
|
530
|
+
AND m.role != 1
|
|
531
|
+
AND ${e.localSymbolPredicate}
|
|
532
|
+
${e.pathExclusionsFor("d1")}
|
|
533
|
+
ORDER BY d1.relative_path`,...t,...t,...t)}function MH(e,t){let n=new F(e);return t.flatMap(r=>n.definitionsForFile(r).filter(i=>ge(i.symbol)).map(i=>({relative_path:r,symbol:i.symbol})))}function NH(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 OH(e){return{consumer:e.relative_path,symbol:e.symbol,shortName:I(e.symbol)}}var ms=new WeakMap,MR=ue({kind:"definition-exclusions",invalidation:Q("definition-exclusions"),serialize:e=>JSON.stringify(e),deserialize:jH});function OR(e,t){let n=N(t);if(!(n==="rust"||n==="typescript"||n==="tsx"||n==="javascript"))return[];let i=k(e,t);if(!i)return[];let o=pe(e,t,i),s=MR.read(e,t,o);if(s)return s;let a=n==="rust"?WH(e,t):UH(e,t);return MR.write(e,t,o,a),a}function jH(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=t.map(BH);return n.some(r=>r===null)?null:n}catch{return null}}function BH(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?iU(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 jR=new Set(["describe","it","test","fdescribe","fit","xdescribe","xit","beforeEach","afterEach","beforeAll","afterAll","before","after","suite","bench","benchmark"]),$H=/\b(?:describe|it|test|fdescribe|fit|xdescribe|xit|beforeEach|afterEach|beforeAll|afterAll|before|after|suite|bench|benchmark)\s*\(/,HH=/\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 UH(e,t){let n=k(e,t);if(!n||!qH(n))return[];let r=X(e,t);if(!r)return[];let i=ms.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&&jR.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(...BR(r,new Set(["function_declaration","method_definition","class_declaration","interface_declaration","type_alias_declaration","enum_declaration","variable_declarator","export_statement"]),new Set(["comment"]))),ms.set(r,a),a}function qH(e){if(e.includes("scip-query"))return!0;let t=!1;for(let n of jR)if(e.includes(n)){t=!0;break}return t&&$H.test(e)?!0:e.includes("use")&&HH.test(e)}var GH=/scip-query[\s:-]*ignore[\s:-]*(?:dead(?:-code)?|stale)?/i;function VH(e){return GH.test(e)}function BR(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(VH(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 WH(e,t){let n=X(e,t);if(!n)return[];let r=ms.get(n);if(r)return r;let i=[],o=zH(n);return o?(ms.set(n,o),o):($R(n.rootNode,i,!1,!1),i.push(...BR(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(...nU(n.rootNode)),ms.set(n,i),i)}function zH(e){return oU(e.rootNode)?[{startLine:0,endLine:e.rootNode.endPosition.row,reason:"generated file (@generated header)",disposition:"exclude"}]:null}function $R(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"?KH(e,t,n,r):r&&tU(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"?JH(e,t,n):e.type==="mod_item"&&vf(e).some(s=>/#\[\s*cfg\s*\(\s*test\s*\)/.test(s))&&(i=!0);for(let s of e.namedChildren)$R(s,t,i,o)}function KH(e,t,n,r){let i=vf(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(HR(s)){o={reason:"#[allow(dead_code)]",disposition:"exclude"};break}let a=ZH(s);if(a){o=a;break}}o&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:o.reason,disposition:o.disposition})}function JH(e,t,n){let r=vf(e),i=e.namedChildren.find(o=>o.type==="type_identifier")?.text;r.some(eU)&&t.push({startLine:e.startPosition.row,endLine:e.endPosition.row,reason:"#[derive(...)] - generated impl may access fields",disposition:"implicit-usage",containerName:i}),r.some(HR)&&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 vf(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 YH=new Set(["test","bench","tokio::test","async_std::test"]),XH=new Set(["no_mangle","export_name","link_name","used","macro_export","proc_macro","proc_macro_derive","proc_macro_attribute"]),QH=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 ZH(e){if(/#\[\s*cfg\s*\(\s*test\s*\)/.test(e))return{reason:"#[cfg(test)]",disposition:"exclude"};let t=rU(e);return t?YH.has(t)?{reason:`#[${t}]`,disposition:"exclude"}:XH.has(t)?{reason:`Rust ABI/export attribute #[${t}]`,disposition:"implicit-usage"}:QH.has(t)?null:{reason:`Rust attribute macro #[${t}]`,disposition:"implicit-usage"}:null}function eU(e){return/#\[\s*derive\s*\(/.test(e)}function HR(e){return/#\[\s*allow\s*\(\s*dead_code\s*\)/.test(e)}function tU(e){return e.type==="const_item"||e.type==="type_item"||e.type==="static_item"||e.type==="associated_type"}function nU(e){let t=sU(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 rU(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 iU(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 oU(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 NR=/\bwith\s*=\s*"([^"]+)"/g;function sU(e){let t=new Set;for(let n of e.descendantsOfType("attribute_item")){NR.lastIndex=0;let r;for(;(r=NR.exec(n.text))!==null;){let i=r[1],o=i.split("::").pop()??i;o&&t.add(o)}}return t}function UR(e){let t=If(e);return(n,r,i,o)=>t(n,r,i,o)?.disposition==="exclude"}function If(e){let t=new Map,n=r=>{let i=t.get(r);if(i)return i;let o=OR(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 _a(o))l.add(u);for(let u of l){let d=a.containers.get(u);d&&c.push(...d)}return aU(c)}}function aU(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 wf(e,t={}){Yl(e,{groups:t.semanticProvider===!0?["whole-project","semantic-provider"]:["whole-project"]})}function qR(e,t,n={}){Yl(e,{groups:n.definitions===!0?["source-file","definition-catalog"]:["source-file"],file:t.replace(/\\/g,"/")})}function GR(e,t){if(t.isIgnoredPath(e.relativePath))return et("ignored-file");if($n(e.symbol))return et("module-like-symbol");if(!Qc(e.symbol))return et("non-value-symbol");if(!e.isFunctionLike&&e.enclosingSymbol&&Qc(e.enclosingSymbol))return et("nested-non-callable-value");if(!t.includeTests&&!cU(e.relativePath))return et("test-file");if(!t.includeTests&&t.isExcludedRegion(e.relativePath,e.startLine,e.symbol,e.parentTypeName))return et("excluded-file-region");let n=T(e.symbol);if(n==="<constructor>")return et("implicit-constructor");if(e.symbol.startsWith("scip-python ")){if(n==="__all__")return et("python-runtime-metadata");if(/^__[^_].*__$/.test(n))return et("python-protocol-member")}return t.isDeclarationOnlyCallable()?et("declaration-only-callable"):t.isFrameworkContractCallable()?et("framework-contract-member"):Oe(e.symbol)?et("rust-trait-impl-member"):ti(e.symbol)?et("rust-test-module"):!t.includeMembers&&!lU(e)?et("member"):e.endLine-e.startLine+1<t.minLoc?et("below-min-loc"):{accepted:!0}}function cU(e){return z(e)!=="test"}function et(e){return{accepted:!1,rejectionReason:e}}function Qc(e){return ae(e)||e.endsWith("().")||e.endsWith(".")}function lU(e){return ge(e.symbol)||_a(e.symbol).length===0}function Zc(e,t){return j(e)-j(t)||e.relativePath.localeCompare(t.relativePath)}function de(e,t){return typeof t!="number"||t<=0||e.length<=t?e:e.slice(0,t)}function Hi(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 VR(){return new Map}function WR(e,t,n){let r=new Map;for(let i of Ny(e,n))e.isIgnored(i.relative_path)||t.has(i.relative_path)||tl(r,i.symbol_id,i.relative_path,i.ref_count,"scip-mention");return r}function zR(e,t,n,r={}){let i=new Set;if(r.conservative||n.size===0){for(let o of jy(e,t))i.add(o.symbol_id);return i}for(let o of Oy(e,t))e.isIgnored(o.relative_path)||n.has(o.relative_path)||i.add(o.symbol_id);return i}function Ef(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 el(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 KR(e){return e?.occurrences??0}function tl(e,t,n,r,i="source-fallback"){if(r<=0)return;let o=YR(e,t,n);o.occurrences+=r,o.sources.add(i)}function JR(e,t,n,r,i){if(r<=0)return;let o=YR(e,t,n);o.occurrences=Math.max(r,o.occurrences),o.sources.add(i)}function YR(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 uU=new Set(["componentDidCatch","componentDidMount","componentDidUpdate","componentWillUnmount","getDerivedStateFromError","getDerivedStateFromProps","getSnapshotBeforeUpdate","render","shouldComponentUpdate","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate"]);function Ui(e,t){if(!t.parentTypeName||!/\.[cm]?[jt]sx?$/.test(t.relativePath))return!1;let n=X(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:uU.has(t.leaf)&&/\bextends\s+(?:React\.)?(?:Component|PureComponent)\b/.test(o)}var dU=1e3,mU=300;function qr(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 x=de(fU(e,{scope:n,minLoc:r,includeTests:i,includeMembers:s}),c);return u=x.length,x},()=>({definitions:u})),m=0,f=o?E("dead.inactive-barrels",()=>{let x=new Set(CR(e));return m=x.size,x},()=>({paths:m})):new Set,p=0,g=a?VR():E("dead.mention-reference-counts",()=>{let x=WR(e,f,d.map(v=>v.symbolId));return p=x.size,x},()=>({definitions:d.length,symbolsWithReferences:p})),y=0,h=a?E("dead.mentioned-symbol-ids",()=>{let x=zR(e,d.map(v=>v.symbolId),f,{conservative:f.size===0});return y=x.size,x},()=>({definitions:d.length,referencedSymbols:y})):new Set,C=a?d.filter(x=>!h.has(x.symbolId)):d.filter(x=>!el(g,x.symbolId,x.relativePath));a?E("dead.source-fallback.dead-code-only",()=>xU(e,C,g,{inactiveBarrelPaths:f}),()=>({definitions:C.length,testReferencesIncluded:!0})):E("dead.source-fallback.ast",()=>SU(e,C,g,{inactiveBarrelPaths:f}),()=>({definitions:C.length,testReferencesIncluded:!0}));let b=a?C.filter(x=>!Ef(g,x.symbolId)):C.filter(x=>!el(g,x.symbolId,x.relativePath));E("dead.caller-map-supplement",()=>wU(e,b,g,{inactiveBarrelPaths:f,includeSemantic:!a&&l}),()=>({definitions:b.length,semantic:!a&&l}));let S=a?C.filter(x=>!Ef(g,x.symbolId)):d;return bU(e,hU(S,g))}function fU(e,t){let n=UR(e),r=[];for(let i of So(e,{scope:t.scope,symbolMatches:Qc,sqlPrefilter:"function-like"}))GR(i,{minLoc:t.minLoc,includeTests:t.includeTests,includeMembers:t.includeMembers,isIgnoredPath:s=>e.isIgnored(s),isExcludedRegion:n,isDeclarationOnlyCallable:()=>gU(e,i),isFrameworkContractCallable:()=>Ui(e,i)}).accepted&&r.push(i);return r}var pU=["method_signature","abstract_method_signature","call_signature","construct_signature"];function gU(e,t){if(!t.parentTypeName||!/\.[cm]?[jt]sx?$/.test(t.relativePath))return!1;let n=X(e,t.relativePath);if(n)return n.rootNode.descendantsOfType([...pU]).some(i=>i.startPosition.row<=t.startLine&&i.endPosition.row>=t.endLine);let r=Le(e,t.relativePath).slice(t.startLine,t.endLine+1).join(`
|
|
534
|
+
`).trim();return r.endsWith(";")&&!r.includes("=>")&&!r.includes("{")}function hU(e,t){return e.map(n=>yU(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 yU(e,t){let n=t.get(e.symbolId)??new Map,r=KR(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 bU(e,t){let n=If(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(He(e,u.relative_path)){a++;continue}if(be(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 SU(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 A(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)&&(vU(e,c)||tl(n,c.target.symbolId,c.sourceFile,IU(c),"source-fallback"))})}function xU(e,t,n,r){if(t.length===0)return;let i=new F(e),o=CU(t),s=new Set(i.sourceFiles());for(let u of A(e))s.add(u);let a=new Set(o.keys()),c=new Map,l=u=>{let d=c.get(u);return d||(d=$a(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?RU(u,d,f,()=>l(u),{permissive:m!=="cross-language-dispatch"}):[]},afterPath:u=>{c.delete(u),qR(e,u)}},u=>{let d=u.kind==="identifier"&&u.sourceFile===u.target.relativePath?Math.max(0,u.occurrences-1):u.occurrences;u.kind==="identifier"&&XR(e,{sourceFile:u.sourceFile,name:u.name,target:u.target,occurrences:d})||tl(n,u.target.symbolId,u.sourceFile,d,"source-fallback")})}function CU(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 RU(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=>ct(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=>ct(l,d.relativePath));if(u.length>0&&u.length===n.length)return u}return i.permissive?[...n]:[]}function vU(e,t){return t.kind==="cross-language-dispatch"&&t.target.relativePath===t.sourceFile?!0:t.kind==="identifier"&&XR(e,t)}function IU(e){return e.kind==="identifier"&&e.target.relativePath===e.sourceFile?Math.max(0,e.occurrences-1):e.occurrences}function XR(e,t){return t.occurrences>1?!1:re(e,t.sourceFile).some(n=>n.used||n.sourcePath!==t.target.relativePath?!1:n.importedName===t.name||n.localName===t.name)}function wU(e,t,n,r){let i=r.includeSemantic!==!1,o=i&&t.length>=dU&&A(e).length>=mU,s=(u,d)=>{d===u.relativePath||e.isIgnored(d)||r.inactiveBarrelPaths.has(d)||JR(n,u.symbolId,d,1,"caller-map")};if(o?E("dead.caller-map.per-symbol-non-semantic",()=>{for(let u of t){let d=$t(e,u,{semantic:!1,semanticEvidence:q});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=$t(e,u,{semantic:i,semanticEvidence:q});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=>!el(n,d.symbolId,d.relativePath));return a=u.length,u},()=>({definitions:t.length,semanticCandidates:a}));if(c.length===0)return;let l=ex(e,c);for(let u of c){let d=l.get(u.symbolId);if(d)for(let m of d)s(u,m)}}function EU(e,t={}){let{limit:n=30,scope:r}=t,i=r?"AND def_d.relative_path LIKE ?":"",o=r?[`%${r}%`]:[],a=e.all(`SELECT
|
|
535
|
+
gs.symbol,
|
|
536
|
+
COUNT(*) AS ref_count,
|
|
537
|
+
COUNT(DISTINCT ref_d.id) AS file_count,
|
|
538
|
+
def_d.relative_path AS defined_in
|
|
539
|
+
FROM mentions m
|
|
540
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
541
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
542
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
543
|
+
JOIN (
|
|
544
|
+
SELECT m2.symbol_id, c2.document_id
|
|
545
|
+
FROM mentions m2
|
|
546
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
547
|
+
WHERE m2.role = 1
|
|
548
|
+
GROUP BY m2.symbol_id
|
|
549
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
550
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
551
|
+
WHERE m.role != 1
|
|
552
|
+
AND def_d.id != ref_d.id
|
|
553
|
+
${e.pathExclusionsFor("def_d")}
|
|
554
|
+
${e.symbolNoiseFor("gs")}
|
|
555
|
+
${i}
|
|
556
|
+
GROUP BY gs.id
|
|
557
|
+
ORDER BY ref_count DESC
|
|
558
|
+
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:DU(e,r,n)}function DU(e,t,n){return Ae(e,{scope:t}).filter(r=>!e.isIgnored(r.relativePath)).map(r=>PU(e,r)).filter(r=>r.refCount>0).sort((r,i)=>i.refCount-r.refCount||i.fileCount-r.fileCount).slice(0,n)}function PU(e,t){let r=$t(e,t,{limit:500,semanticEvidence:q}).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 kU(e,t,n={}){return BU(e,t,n)?.map(r=>({symbol:r.symbol,shortName:r.shortName,fromFile:r.fromFile}))??[]}function TU(e,t){let n=H(e,t),r=LU(e,t);if(r.length>0&&!MU(n))return r;let i=AU(e,t,n);return Df(t)&&i.length>0?i:NU([...r,...i])}function FU(e,t,n={}){let r=Ze(e,t);if(!r)return[];let i=ZR(e,r),o=n.semantic===!1?null:QR(e,r);return(o?_U(o,i):i).filter(a=>!a.used).map(a=>({symbol:a.symbol,shortName:a.shortName,importedIn:a.importer}))}function _U(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 LU(e,t){return e.all(`SELECT DISTINCT gs.symbol, d.relative_path AS importer
|
|
559
|
+
FROM mentions m
|
|
560
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
561
|
+
JOIN documents d ON c.document_id = d.id
|
|
562
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
563
|
+
WHERE gs.symbol LIKE ?
|
|
564
|
+
AND m.role = 2
|
|
565
|
+
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 AU(e,t,n=H(e,t)){let r=n?.relativePath??null,i=n?T(n.symbol):t.replace(/\(\)$/,""),o=n?$n(n.symbol):!1,s=new Set;for(let c of A(e,{includeIgnored:!1}))for(let l of re(e,c))OU(l,c,{targetFile:r,targetLeaf:i,targetIsModule:o,targetPattern:t})&&s.add(c);let a=Df(t)?t.trim():null;return[...s].sort().map(c=>({symbol:a??n?.symbol??i,shortName:a??(n?I(n.symbol):i),fromFile:c}))}function MU(e){return!!(e&&(e.symbol.startsWith("scip-clojure ")||N(e.relativePath)==="clojure"))}function NU(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 OU(e,t,n){return!e.sourcePath||n.targetFile&&ce(e.sourcePath)!==ce(n.targetFile)?!1:e.kind==="side-effect"||n.targetFile&&qU(t)||e.kind==="namespace"&&jU(e,n.targetPattern)||n.targetIsModule||e.kind==="named"&&e.importedName===n.targetLeaf?!0:e.kind==="namespace"&&e.usedMembers.includes(n.targetLeaf)}function jU(e,t){let n=t.trim().replace(/\(\)$/,"");return Df(n)?e.importedName===n||e.localName===n:!1}function Df(e){let t=e.trim().replace(/\(\)$/,"");return t.includes(".")&&!t.includes("/")&&!t.includes(":")}function BU(e,t,n={}){let r=Ze(e,t);return r?$U(e,r,n)??(n.semantic===!1?null:QR(e,r))??ZR(e,r):null}function $U(e,t,n){let i=e.all(`SELECT DISTINCT
|
|
566
|
+
gs.symbol,
|
|
567
|
+
def_d.relative_path AS from_file,
|
|
568
|
+
imp_d.relative_path AS importer,
|
|
569
|
+
EXISTS (
|
|
570
|
+
SELECT 1
|
|
571
|
+
FROM mentions ref_m
|
|
572
|
+
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
573
|
+
WHERE ref_m.symbol_id = gs.id
|
|
574
|
+
AND ref_m.role != 1
|
|
575
|
+
AND ref_c.document_id = imp_d.id
|
|
576
|
+
) AS used
|
|
577
|
+
FROM mentions m
|
|
578
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
579
|
+
JOIN documents imp_d ON c.document_id = imp_d.id
|
|
580
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
581
|
+
LEFT JOIN (
|
|
582
|
+
SELECT m2.symbol_id, c2.document_id
|
|
583
|
+
FROM mentions m2
|
|
584
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
585
|
+
WHERE m2.role = 1
|
|
586
|
+
GROUP BY m2.symbol_id
|
|
587
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
588
|
+
LEFT JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
589
|
+
WHERE imp_d.relative_path = ?
|
|
590
|
+
AND m.role = 2
|
|
591
|
+
ORDER BY def_d.relative_path, gs.symbol`,t).filter(o=>!e.isIgnored(o.importer));if(i.length>0){let o=n.semantic===!1?[]:Wo(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 QR(e,t){let n=Wo(e,t);return n.length>0?n.map(r=>{let i=ev(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 ZR(e,t){let n=HU(t,k(e,t));return re(e,t).map(r=>{let i=ev(r.importedName,r.localName,r.kind),o=r.kind==="side-effect"||UU(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 HU(e,t){let n=new Set;if(N(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 UU(e,t){if(N(e)!=="rust"||t.used||t.kind==="side-effect")return!1;let n=t.localName??t.importedName;return n==="_"||/^[A-Z]/.test(n)}function ev(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 qU(e){return/\.(?:c|h|cc|cpp|cxx|hpp|hh|hxx)$/i.test(e)}function GU(e,t){let n=H(e,t);if(!n)return[];let i=new F(e).definitionsForFile(n.relativePath).filter(o=>o.symbol!==n.symbol).filter(o=>Hg(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:he(o.symbol)??"unknown"}));return N(n.relativePath)!=="clojure"?i:WU(i,VU(e,n))}function VU(e,t){let n=T(t.symbol);if(!n)return[];let r=I(t.symbol);return(K(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 WU(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 zU(e,t){let n=H(e,t);if(!n)return[];let r=e.get(`SELECT COUNT(DISTINCT c.document_id) AS file_count
|
|
592
|
+
FROM mentions m
|
|
593
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
594
|
+
JOIN (
|
|
595
|
+
SELECT m2.symbol_id, c2.document_id
|
|
596
|
+
FROM mentions m2
|
|
597
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
598
|
+
WHERE m2.role = 1
|
|
599
|
+
GROUP BY m2.symbol_id
|
|
600
|
+
) sym_def ON sym_def.symbol_id = m.symbol_id
|
|
601
|
+
WHERE m.symbol_id = ?
|
|
602
|
+
AND m.role != 1
|
|
603
|
+
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 KU(e,t){let n=Ze(e,t);if(!n)return[];let i=e.all(`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
|
|
604
|
+
FROM mentions m
|
|
605
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
606
|
+
JOIN documents d ON c.document_id = d.id
|
|
607
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
608
|
+
JOIN (
|
|
609
|
+
SELECT m2.symbol_id, c2.document_id
|
|
610
|
+
FROM mentions m2
|
|
611
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
612
|
+
WHERE m2.role = 1
|
|
613
|
+
GROUP BY m2.symbol_id
|
|
614
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
615
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
616
|
+
WHERE d.relative_path = ?
|
|
617
|
+
AND m.role != 1
|
|
618
|
+
AND def_d.id != d.id
|
|
619
|
+
GROUP BY d.id
|
|
620
|
+
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=le(e).get(n);return!s||s.size===0?[]:[{name:n,count:s.size}]}function JU(e,t={}){return YU(e,t).map(n=>({name:I(n.symbol),count:n.file_count,symbol:n.symbol,definedIn:n.defined_in}))}function YU(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,
|
|
621
|
+
COUNT(DISTINCT c.document_id) AS file_count,
|
|
622
|
+
def_d.relative_path AS defined_in
|
|
623
|
+
FROM mentions m
|
|
624
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
625
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
626
|
+
JOIN (
|
|
627
|
+
SELECT m2.symbol_id, c2.document_id
|
|
628
|
+
FROM mentions m2
|
|
629
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
630
|
+
WHERE m2.role = 1
|
|
631
|
+
GROUP BY m2.symbol_id
|
|
632
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
633
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
634
|
+
WHERE m.role != 1
|
|
635
|
+
AND def_d.id != c.document_id
|
|
636
|
+
${e.pathExclusionsFor("def_d")}
|
|
637
|
+
${e.symbolNoiseFor("gs")}
|
|
638
|
+
${i}
|
|
639
|
+
GROUP BY gs.id
|
|
640
|
+
HAVING file_count > 1
|
|
641
|
+
ORDER BY file_count DESC
|
|
642
|
+
LIMIT ?`,...o,n)}function XU(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
|
|
643
|
+
FROM mentions m
|
|
644
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
645
|
+
JOIN documents d ON c.document_id = d.id
|
|
646
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
647
|
+
JOIN (
|
|
648
|
+
SELECT m2.symbol_id, c2.document_id
|
|
649
|
+
FROM mentions m2
|
|
650
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
651
|
+
WHERE m2.role = 1
|
|
652
|
+
GROUP BY m2.symbol_id
|
|
653
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
654
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
655
|
+
WHERE m.role != 1
|
|
656
|
+
AND def_d.id != d.id
|
|
657
|
+
${e.pathExclusionsFor("d")}
|
|
658
|
+
${e.symbolNoiseFor("gs")}
|
|
659
|
+
${i}
|
|
660
|
+
GROUP BY d.id
|
|
661
|
+
ORDER BY symbol_count DESC
|
|
662
|
+
LIMIT ?`,...o,n).filter(a=>!e.isIgnored(a.relative_path)).map(a=>({name:a.relative_path,count:a.symbol_count}))}function QU(e,t,n){let r=Ze(e,t)??t,i=Ze(e,n)??n,o=e.get(`SELECT COUNT(DISTINCT gs.id) AS shared
|
|
663
|
+
FROM global_symbols gs
|
|
664
|
+
WHERE (
|
|
665
|
+
-- Defined in file1, referenced in file2
|
|
666
|
+
EXISTS (
|
|
667
|
+
SELECT 1
|
|
668
|
+
FROM mentions def_m
|
|
669
|
+
JOIN chunks def_c ON def_m.chunk_id = def_c.id
|
|
670
|
+
JOIN documents d ON def_c.document_id = d.id
|
|
671
|
+
WHERE def_m.symbol_id = gs.id AND def_m.role = 1 AND d.relative_path = ?
|
|
672
|
+
)
|
|
673
|
+
AND EXISTS (
|
|
674
|
+
SELECT 1 FROM mentions m
|
|
675
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
676
|
+
JOIN documents d ON c.document_id = d.id
|
|
677
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
|
|
678
|
+
)
|
|
679
|
+
) OR (
|
|
680
|
+
-- Defined in file2, referenced in file1
|
|
681
|
+
EXISTS (
|
|
682
|
+
SELECT 1
|
|
683
|
+
FROM mentions def_m
|
|
684
|
+
JOIN chunks def_c ON def_m.chunk_id = def_c.id
|
|
685
|
+
JOIN documents d ON def_c.document_id = d.id
|
|
686
|
+
WHERE def_m.symbol_id = gs.id AND def_m.role = 1 AND d.relative_path = ?
|
|
687
|
+
)
|
|
688
|
+
AND EXISTS (
|
|
689
|
+
SELECT 1 FROM mentions m
|
|
690
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
691
|
+
JOIN documents d ON c.document_id = d.id
|
|
692
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path = ?
|
|
693
|
+
)
|
|
694
|
+
)`,r,i,i,r);return{...tv(r,i,o?.shared??0)}}function ZU(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
|
|
695
|
+
def_d.relative_path AS file1,
|
|
696
|
+
ref_d.relative_path AS file2,
|
|
697
|
+
COUNT(DISTINCT gs.id) AS shared
|
|
698
|
+
FROM mentions m
|
|
699
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
700
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
701
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
702
|
+
JOIN (
|
|
703
|
+
SELECT m2.symbol_id, c2.document_id
|
|
704
|
+
FROM mentions m2
|
|
705
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
706
|
+
WHERE m2.role = 1
|
|
707
|
+
GROUP BY m2.symbol_id
|
|
708
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
709
|
+
JOIN documents def_d ON sym_def.document_id = def_d.id
|
|
710
|
+
WHERE m.role != 1
|
|
711
|
+
AND def_d.id != ref_d.id
|
|
712
|
+
${e.pathExclusionsFor("def_d","ref_d")}
|
|
713
|
+
${i}
|
|
714
|
+
GROUP BY def_d.id, ref_d.id
|
|
715
|
+
ORDER BY shared DESC
|
|
716
|
+
LIMIT ?`,...o,n).filter(a=>!e.isIgnored(a.file1)&&!e.isIgnored(a.file2)).map(a=>tv(a.file1,a.file2,a.shared))}function tv(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 fs(e,t={}){return iv(e,t).cycles}function iv(e,t={}){let{scope:n,maxDepth:r=10}=t,i=le(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((S,x)=>S<x?S:x)),C=[...y.slice(h,-1),...y.slice(0,h),y[h]],b=C.join(" -> ");d.has(b)||(d.add(b),o.push({path:C,kind:eq(C)}))}return}if(s.has(m))return;s.add(m),a.add(m),c.push(m);let p=i.get(m);if(p)for(let 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 eq(e){for(let r of e){let i=z(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":$i(t)||$i(n)||nv(t,n)||nv(n,t)||rv(t,n)||rv(n,t)||z(t)==="entry"||z(n)==="entry"?"module-hierarchy":"real"}function nv(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 rv(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 tq}from"fs";import{join as ov}from"path";function lr(e,t){let n=nl(e),r=nl(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 nq(e){return nl(e).replace(/\/\*\*?$/,"")}function rl(e,t){let n=nl(t),r=nq(n),i=n.endsWith("/**"),o=[],s=(a,c)=>{let l;try{l=tq(a,{withFileTypes:!0})}catch{return}for(let u of l){if(u.name.startsWith("."))continue;let d=c?`${c}/${u.name}`:u.name;lr(n,d)&&o.push(d),i&&u.isDirectory()&&s(ov(a,u.name),d)}};return s(ov(e,r),r),o.sort()}function nl(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function ps(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 rq=/\.(test|spec)\.(ts|tsx|js|jsx|mts|cts)$/,sv=new Map;function av(e,t,n,r){if(!t?.testPaths?.length)return[];let i=iq(t),o=[];for(let s of oq(e,t.testPaths)){let a=sq(e,s,r),c=a?n(a):null;if(c)for(let l of re(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 aq(o)}function iq(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 oq(e,t){let n=`${e.config.projectRoot}\0${t.join("\0")}`,r=sv.get(n);if(r)return r;let i=new Set;for(let s of t)for(let a of rl(e.config.projectRoot,s))rq.test(a)&&i.add(a);let o=[...i].sort();return sv.set(n,o),o}function sq(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=re(e,t).map(s=>s.sourcePath).filter(s=>!!s&&n(s)&&s.split("/").pop()===i);return o.length===1?o[0]:null}function aq(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 Ht="architecture:";function cv(e,t,n,r={}){let i=uq(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 S=n.boundaries.filter(x=>x.paths.some(v=>lr(v,b))).map(x=>x.name).sort();if(S.length===0)a.push(b);else if(S.length>1)c.push({file:b,boundaries:S});else{let x=S[0];o.set(b,x),s.get(x).add(b)}}let l=new Map;for(let[b,S]of e){let x=o.get(b);if(x)for(let v of S){let R=o.get(v);if(!R||x===R)continue;let D=qi(x,R),w=l.get(D);w||(w={from:x,to:R,fileEdges:[],importers:new Set,importedFiles:new Set},l.set(D,w)),w.fileEdges.push({fromFile:b,toFile:v}),w.importers.add(b),w.importedFiles.add(v)}}let u=[...l.values()].map(b=>dq(b,n)).sort(Sq),d=u,m=new Map(d.map(b=>[qi(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 S=m.get(qi(b.to,b.from));S&&p.push({boundaries:[b.from,b.to],forward:b,reverse:S})}let{components:g}=ps(f),y=g.filter(b=>b.length>1).map(b=>fq(b,d,n.requireAcyclic===!0)).sort((b,S)=>S.boundaries.length-b.boundaries.length||b.boundaries.join("/").localeCompare(S.boundaries.join("/"))),h=n.allowedDependencies??{},C=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,S)=>b.name.localeCompare(S.name)),edges:u,forbiddenEdges:d.filter(b=>b.policyStatus==="forbidden"),reciprocalPairs:p,cycles:y,staleAllowances:gq(n,d),boundaryLimits:hq(n,d,s),fragileEdges:d.filter(b=>b.fragile),testBoundaryViolations:r.testBoundaryViolations??[],coarseBoundaries:pq(e,s,r.isModuleHierarchyFile,n.requireResolvedBoundaries===!0,b=>n.boundaries.find(S=>S.name===b)?.subUnits??"directory"),coverage:{totalFiles:i.length,mappedFiles:o.size,unmappedFiles:a,ambiguousFiles:c},policyCoverage:{declaredRows:n.boundaries.length-C.length,totalBoundaries:n.boundaries.length,missingRows:C,requiresCompletePolicy:n.requireCompletePolicy===!0,requiresMinimalPolicy:n.requireMinimalPolicy===!0}}}function Gr(e,t={}){let n=le(e,t.scope,{scipEdges:"imports-only",sourceEdges:"imports-and-reexports"}),r=A(e,{includeIgnored:!1}).filter(o=>!t.scope||o.includes(t.scope)),i=new Set(r);return cv(n,r,e.config.architecture,{isModuleHierarchyFile:o=>lq(e,o),testBoundaryViolations:av(e,e.config.architecture,o=>cq(e.config.architecture,o),o=>i.has(o))})}function cq(e,t){let n=(e?.boundaries??[]).filter(r=>r.paths.some(i=>lr(i,t)));return n.length===1?n[0].name:null}function lq(e,t){let n=z(t);return n==="test"||n==="entry"?!0:n!=="barrel"?!1:Z(e,t).length===0}function il(e){let t=e.forbiddenEdges.map(r=>`${Ht}forbidden-edge:${encodeURIComponent(r.from)}:${encodeURIComponent(r.to)}`);if(e.policyCoverage.requiresCompletePolicy)for(let r of e.policyCoverage.missingRows)t.push(`${Ht}missing-policy-row:${encodeURIComponent(r)}`);if(e.policyCoverage.requiresMinimalPolicy)for(let r of e.staleAllowances)t.push(`${Ht}stale-allowance:${encodeURIComponent(r.from)}:${encodeURIComponent(r.to)}`);for(let r of e.testBoundaryViolations)t.push(`${Ht}test-boundary:${encodeURIComponent(r.testFile)}:${encodeURIComponent(r.importedBoundary)}`);for(let r of e.boundaryLimits)t.push(`${Ht}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=`${Ht}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(`${Ht}cycle:${r.boundaries.map(i=>encodeURIComponent(i)).sort().join("|")}`);return[...new Set(t)].sort()}function lv(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 uq(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 dq(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:mq(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 mq(e,t,n){return!e.allowedDependencies||!Object.hasOwn(e.allowedDependencies,t)?"undeclared":e.allowedDependencies[t].includes(n)?"allowed":"forbidden"}function fq(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 pq(e,t,n=yq,r=!1,i=()=>"directory"){let o=[];for(let[s,a]of t){let c=i(s)==="file"?p=>p:bq,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 C=qi(y,h),b=d.get(C);b||(b={from:y,to:h,fileEdges:[]},d.set(C,b)),b.fileEdges.push({fromFile:p,toFile:g}),m.get(y).add(h)}let{components:f}=ps(m);for(let p of f){if(p.length<2)continue;let g=new Set(p),y=[...d.values()].filter(C=>g.has(C.from)&&g.has(C.to)).map(C=>({from:C.from,to:C.to,fileEdgeCount:C.fileEdges.length,examples:C.fileEdges.slice(0,5)})).sort((C,b)=>C.from.localeCompare(b.from)||C.to.localeCompare(b.to)),h=Math.min(...y.map(C=>C.fileEdgeCount));o.push({boundary:s,violatesPolicy:r,subUnits:[...p].sort(),internalEdges:y,narrowestEdges:y.filter(C=>C.fileEdgeCount===h)})}}return o.sort((s,a)=>a.subUnits.length-s.subUnits.length||s.boundary.localeCompare(a.boundary))}function gq(e,t){let n=new Set(t.map(s=>qi(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(qi(s,c))||o.push({from:s,to:c});return o.sort((s,a)=>s.from.localeCompare(a.from)||s.to.localeCompare(a.to))}function hq(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 yq(e){let t=z(e);return t==="test"||t==="entry"}function bq(e){let t=e.lastIndexOf("/");return t===-1?".":e.slice(0,t)}function qi(e,t){return`${e}\0${t}`}function Sq(e,t){return e.from.localeCompare(t.from)||e.to.localeCompare(t.to)}function xq(e,t={}){let{limit:n=20,scope:r,minFanIn:i=2,minFanOut:o=2,scanLimit:s}=t,a=new F(e);return de(a.productionCallableDefinitions({scope:r,requireCallableSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof s=="number"&&s>0}),s).map(u=>Cq(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 Cq(e,t,n){let r=[...new Set($t(e,t,{limit:500,semantic:n,semanticEvidence:q}).map(l=>l.file))].sort(),i=new Map;for(let l of Tt(e,t,{limit:500,semantic:n,semanticEvidence:q})){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 gs(e,t={}){let{scope:n,minLoc:r=3,scanLimit:i}=t,o=new F(e),s=t.semantic!==!1,a=0,c=E("isolated.candidates",()=>{let v=de(o.productionCallableDefinitions({scope:n,minLoc:r,excludeEntrySurfaces:!0,excludeRootedSymbols:!0,excludeRustTraitImplMembers:!0,includeSuppressed:!0,requireFunctionLikeSymbol:!0,sortByLocDesc:typeof i=="number"&&i>0}),i).filter(R=>!Ui(e,R));return a=v.length,v},()=>({definitions:a})),l=0,u=E("isolated.strict-callees",()=>{let x=o.symbolsWithNonSelfCallees(c,{additive:!1,semantic:!1});return l=x.size,x},()=>({definitions:c.length,symbols:l})),d=c.filter(x=>!u.has(x.symbolId)),m=0,f=E("isolated.scip-callers",()=>{let x=o.crossFileCallerMap(d,{semantic:!1});return m=x.size,x},()=>({definitions:d.length,symbols:m})),p=new Set(f.keys());for(let x of o.frameworkReferencedSymbolIds(d))p.add(x);let g=d.filter(x=>!p.has(x.symbolId));if(s&&g.length>0){for(let x of rr(e,g).keys())p.add(x);for(let x of o.symbolsWithNonSelfCallees(g,{additive:!1,semantic:!0}))u.add(x);g=g.filter(x=>!p.has(x.symbolId)).filter(x=>!u.has(x.symbolId))}let y=0,h=E("isolated.source-fallback-callers",()=>{let x=o.sourceFallbackCallerFiles(g,{skipPath:v=>z(v)==="test"});return y=x.size,x},()=>({definitions:g.length,symbols:y}));for(let x of h.keys())p.add(x);let C=g.filter(x=>!p.has(x.symbolId)),b=0,S=E("isolated.additive-callees",()=>{let x=o.symbolsWithNonSelfCallees(C,{additive:!0,semantic:s});return b=x.size,x},()=>({definitions:C.length,symbols:b}));for(let x of S)u.add(x);return C.filter(x=>!u.has(x.symbolId)).sort((x,v)=>j(v)-j(x)||x.relativePath.localeCompare(v.relativePath)||x.startLine-v.startLine).map(x=>({symbol:x.symbol,shortName:I(x.symbol),relativePath:x.relativePath,startLine:x.startLine,endLine:x.endLine,loc:j(x)}))}import{SymbolInformation_Kind as Ue}from"@c4312/scip";var uv=500;function Rq(e){let t=parseInt(e,10);if(!isNaN(t))return t;let n=e.toLowerCase(),r=PR.get(n);if(r!==void 0)return r;for(let[i,o]of Jc)if(o.toLowerCase().includes(n))return i;return null}function vq(e,t,n={}){let{scope:r,limit:i=100}=n,o=Rq(t);return o===null?[]:wq(e,r).map(a=>({row:a,resolvedKind:mv(a)})).filter(a=>a.resolvedKind===o).slice(0,i).map(({row:a,resolvedKind:c})=>({symbol:a.symbol,shortName:I(a.symbol),kind:c,kindName:us(c),relativePath:a.relative_path,startLine:a.start_line,endLine:a.end_line}))}function Iq(e,t={}){let n=Eq(e,t.scope);for(let r of Dq(e,t.scope)){let i=mv(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:us(r),count:i}))}function wq(e,t){return Ae(e,{scope:t}).map(Pq)}function Eq(e,t){let n=new Map;for(let r of dv(A(e,{scope:t,includeIgnored:!1}))){let i=r.map(()=>"?").join(", "),o=e.all(`SELECT gs.kind AS kind, COUNT(*) AS count
|
|
717
|
+
FROM defn_enclosing_ranges der
|
|
718
|
+
JOIN global_symbols gs ON der.symbol_id = gs.id
|
|
719
|
+
JOIN documents d ON der.document_id = d.id
|
|
720
|
+
WHERE gs.kind IS NOT NULL
|
|
721
|
+
AND gs.kind != 0
|
|
722
|
+
AND gs.symbol NOT LIKE '%#'
|
|
723
|
+
AND d.relative_path IN (${i})
|
|
724
|
+
GROUP BY gs.kind`,...r);for(let s of o)n.set(s.kind,(n.get(s.kind)??0)+s.count)}return n}function Dq(e,t){let n=[];for(let r of dv(A(e,{scope:t,includeIgnored:!1}))){let i=r.map(()=>"?").join(", ");n.push(...e.all(`SELECT gs.symbol,
|
|
725
|
+
gs.kind,
|
|
726
|
+
gs.documentation,
|
|
727
|
+
gs.enclosing_symbol,
|
|
728
|
+
d.relative_path,
|
|
729
|
+
der.start_line,
|
|
730
|
+
der.end_line
|
|
731
|
+
FROM defn_enclosing_ranges der
|
|
732
|
+
JOIN global_symbols gs ON der.symbol_id = gs.id
|
|
733
|
+
JOIN documents d ON der.document_id = d.id
|
|
734
|
+
WHERE (gs.kind IS NULL OR gs.kind = 0 OR gs.symbol LIKE '%#')
|
|
735
|
+
${e.symbolNoiseFor("gs")}
|
|
736
|
+
AND d.relative_path IN (${i})
|
|
737
|
+
ORDER BY d.relative_path, der.start_line, der.end_line, gs.symbol`,...r))}return n}function dv(e){let t=[];for(let n=0;n<e.length;n+=uv)t.push(e.slice(n,n+uv));return t}function Pq(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 mv(e){return e.kind!==null&&e.kind!==0?kq(e.kind,e.symbol,e.documentation):Tq(e.symbol,e.documentation,e.enclosing_symbol)}function kq(e,t,n){let r=(n??"").toLowerCase();if(he(t)==="type"){if(r.includes("type "))return Ue.TypeAlias;if(r.includes("interface "))return Ue.Interface;if(r.includes("struct "))return Ue.Struct;if(r.includes("trait "))return Ue.Trait;if(r.includes("class "))return Ue.Class}return e}function Tq(e,t,n){let r=De(e);if("kind"in r)return null;let i=r.descriptors,o=i[i.length-2]??null,s=he(e),a=(t??"").toLowerCase();return s==="type"?a.includes("type ")?Ue.TypeAlias:a.includes("interface ")?Ue.Interface:a.includes("struct ")?Ue.Struct:a.includes("trait ")?Ue.Trait:a.includes("class ")?Ue.Class:Ue.Class:s==="method"?o?.suffix==="type"?Ue.Method:Ue.Function:s==="namespace"?Ue.Module:s!=="term"?null:a.includes("async def ")||a.includes("def ")?Ue.Function:(n?he(n):o?.suffix??null)==="type"?Ue.Field:Ue.Variable}function Fq(e,t={}){let{limit:n=10,scope:r,minDepth:i=3}=t,o=le(e,r),{components:s,componentOf:a}=ps(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 C of y){let b=a.get(C);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 C of c.get(g)){let b=u[C];b>h&&(h=b,y=l[C])}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(S=>m[S]),C=h.map(S=>S[0]);if(h.length<i)continue;let b=C.join(" ");f.has(b)||(f.add(b),p.push(_q(C,h)))}return p.sort((g,y)=>y.depth-g.depth),Lq(p).slice(0,n)}function _q(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 Lq(e){let t=[];for(let n of e)t.some(r=>Aq(n.chain,r.chain))||t.push(n);return t}function Aq(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 Mq(e,t){let n=H(e,t);if(!n)return[];let r=e.get(`SELECT symbol, enclosing_symbol FROM global_symbols
|
|
738
|
+
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=De(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 Pf(e,t,n={}){let r=H(e,t);if(!r)return null;let i=n.semantic!==!1,o=$t(e,r,{semantic:i,semanticEvidence:q}).filter(a=>ae(a.symbol)).slice(0,50),s=Hi(Tt(e,r,{limit:50,additive:!0,callableOnly:!0,semantic:i,semanticEvidence:q}));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 Ft(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function qe(e,t){let n=new Set;for(let r of e)t.has(r)||n.add(r);return n}function ur(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 fv(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 kf(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 Gi(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 Vi(e,t){let n=0;for(let r of e){let i=t.get(r)??0;n+=i*i}return Math.sqrt(n)}function pv(e,t,n,r={}){let i=0,o=0,s=0,a=r.medianIdf??Gi(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 gv(e,t,n,r){let i=0,o=r.medianIdf??Gi(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 ol(e,t,n={}){let{minSimilarity:r=.4,limit:i=20}=n,o=Gq(e,t,{semantic:n.semantic!==!1});if(!o)return[];if(!ae(o.symbol))return[];if(o.callees.size===0)return hv(e,t,{minSimilarity:r,limit:i,scanLimit:n.scanLimit,candidateMode:n.sourceCandidateMode??"full"});let s=Oq(e,o,r,{scanLimit:n.scanLimit,semantic:n.semantic!==!1});return s.length>0?s.slice(0,i):hv(e,t,{minSimilarity:r,limit:i,scanLimit:n.scanLimit,candidateMode:n.sourceCandidateMode??"full"})}function Lf(e,t,n,r={}){let i=H(e,t),o=H(e,n);if(!i||!o)return null;let s=ol(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:Nq(s)}}function Nq(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 Oq(e,t,n,r){let i=Wi(e).calleeIndex({minCallees:3,scanLimit:r.scanLimit,semantic:r.semantic}),o=Qq(t,i.corpus),s=Jq(o,i),a=jq(o,i),c=Gi(a),l=Vi(o.callees,a),u=[];for(let d of s){if(d.callees.size<3)continue;let m=Vi(d.callees,a),f=xv(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 jq(e,t){let n=new Map(t.docFreq);for(let r of e.callees)n.set(r,(n.get(r)??0)+1);return kf(n,t.corpus.length+1)}function xv(e,t,n,r){let i=$q(e,t,n,r);if(!Hq(i,r))return null;let{similarity:o,significantShared:s,trivialShared:a}=i,c=s.length>0?s:a,l=wv(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:[...qe(e.callees,t.callees)].map(I),uniqueToB:[...qe(t.callees,e.callees)].map(I),...l}}function Bq(e,t,n,r){let i=r.magnitudeA??Vi(e.callees,n),o=r.magnitudeB??Vi(t.callees,n),s=0,a=0,c=0,l=r.medianIdf??Gi(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 $q(e,t,n,r){return r.magnitudeA===void 0||r.magnitudeB===void 0?pv(e.callees,t.callees,n,{medianIdf:r.medianIdf}):gv(e.callees,t.callees,n,{medianIdf:r.medianIdf,magnitudeA:r.magnitudeA,magnitudeB:r.magnitudeB})}function Hq(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 hs(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=V(),u=0,d=0,m=0,f=0,p=0,g=0,y=0;return E("similar.all",()=>{let C=Wi(e).calleeIndex({minCallees:o,scope:i,scanLimit:a,semantic:c}),b=C.corpus;u=b.length;let S=t.focusFiles,x=[],v=0;return E("similar.all.pair-scan",()=>{for(let R=0;R<b.length;R+=1){let D=b[R],w=S?.has(D.file)??!1,P=C.weightedMagnitudes[R],L=new Set;for(let ie of D.callees){let ne=C.candidateIndexesByCallee.get(ie);if(ne)for(let _ of ne)_<=R||S&&!w&&!S.has(b[_].file)||L.add(_)}l&&(m+=L.size,L.size>0&&(d+=1));for(let ie of L){let ne=b[ie];if(s&&D.file===ne.file){l&&(p+=1);continue}if(Cv(D,ne)){l&&(g+=1);continue}l&&(f+=1);let _=xv(D,ne,C.idfWeights,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4,medianIdf:C.medianIdf,magnitudeA:P,magnitudeB:C.weightedMagnitudes[ie]});_&&(Uq(x,_,r,v),l&&(y+=1),v+=1)}}},()=>({corpusSize:u,candidateSets:d,candidatePairs:m,comparedPairs:f,crossFileSkips:p,signatureSkips:g,insertedResults:y,topResults:x.length})),E("similar.all.sort-project",()=>(x.sort((R,D)=>D.result.similarity-R.result.similarity||R.order-D.order),x.map(R=>R.result)),()=>({topResults:x.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 Af(e,t={}){let{minSimilarity:n=.5,scope:r,minCallees:i=4,crossFileOnly:o=!1,scanLimit:s}=t,a=t.semantic!==!1,c=V(),l=0,u=0,d=0,m=0,f=0,p=0,g=0;return E("similar.all-count",()=>{let h=Wi(e).calleeIndex({minCallees:i,scope:r,scanLimit:s,semantic:a}),C=h.corpus;l=C.length;let b=t.focusFiles;return E("similar.all-count.pair-scan",()=>{for(let S=0;S<C.length;S+=1){let x=C[S],v=b?.has(x.file)??!1,R=h.weightedMagnitudes[S],D=new Set;for(let w of x.callees){let P=h.candidateIndexesByCallee.get(w);if(P)for(let L of P)L<=S||b&&!v&&!b.has(C[L].file)||D.add(L)}c&&(d+=D.size,D.size>0&&(u+=1));for(let w of D){let P=C[w];if(o&&x.file===P.file){c&&(f+=1);continue}if(Cv(x,P)){c&&(p+=1);continue}c&&(m+=1),Bq(x,P,h.idfWeights,{minSimilarity:n,requireSignificantShared:2,requireSharedCount:4,medianIdf:h.medianIdf,magnitudeA:R,magnitudeB:h.weightedMagnitudes[w]})&&(g+=1)}}},()=>({corpusSize:l,candidateSets:u,candidatePairs:d,comparedPairs:m,crossFileSkips:f,signatureSkips:p,insertedResults:g})),g},()=>({minSimilarity:n,scope:r,minCallees:i,crossFileOnly:o,scanLimit:s,semantic:a,corpusSize:l,candidateSets:u,candidatePairs:d,comparedPairs:m,crossFileSkips:f,signatureSkips:p,insertedResults:g}))}function Cv(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 Rv=ue({kind:"source-fingerprints",invalidation:Q("source-fingerprints"),serialize:bG,deserialize:yG});function Uq(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 qq=["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 Gq(e,t,n){let r=H(e,t);if(!r||!ae(r.symbol))return null;let i=new F(e),o=Tt(e,r,{semantic:n.semantic,semanticEvidence:q});return{symbol:r.symbol,file:r.relativePath,callees:sl(o.map(s=>s.symbol)),paramCount:i.callableSignature(r)?.paramCount??-1}}var Vq=ee("callee-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),Wq=ee("callee-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function vv(e,t){let{minCallees:n,scope:r,excludeSymbol:i,scanLimit:o}=t,s=t.semantic!==!1,a=Vq.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=Yq(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 zq(e,t){let{minCallees:n,scope:r,scanLimit:i}=t,o=t.semantic!==!1,s=Wq.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=Kq(vv(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 Wi(e){return{calleeCorpus:t=>vv(e,t),calleeIndex:t=>zq(e,t),sourceCorpus:(t={})=>Tv(e,t),sourceIndex:(t={})=>Sv(e,t),sourceCandidates:(t,n)=>(n.candidateMode??"full")==="target-pruned"?lG(e,t,{minSimilarity:n.minSimilarity,scanLimit:n.scanLimit}):cG(t,Sv(e,{scanLimit:n.scanLimit}))}}function Kq(e){let t=V(),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",()=>kf(r,e.length),()=>({corpusSize:e.length,uniqueCallees:r.size})),s=E("similar.callee-index.weighted-magnitudes",()=>e.map(m=>Vi(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",()=>Gi(o),()=>({uniqueCallees:o.size}));return{corpus:e,candidateIndexesByCallee:u,docFreq:r,idfWeights:o,weightedMagnitudes:s,medianIdf:d,ubiquityThreshold:i}}function Jq(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 Yq(e,t){let{minCallees:n,scope:r,scanLimit:i,semantic:o}=t,s=V(),a=new F(e),c=0,l=E("similar.callee-fingerprints.candidates",()=>{let g=de(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(C=>({symbol:C.symbol,file:C.relativePath,callees:sl((d.get(C.symbolId)??[]).map(b=>b.symbol)),paramCount:a.callableSignature(C)?.paramCount??-1})),y=Xq(g);s&&(p=y.filter((C,b)=>C.callees.size!==g[b].callees.size).length);let h=y.filter(C=>C.callees.size>=n);return m=h.length,s&&(f=h.reduce((C,b)=>C+b.callees.size,0)),h},()=>({candidateCount:c,fingerprintCount:m,retainedCalleeCount:f,minCallees:n,siblingSaturatedFingerprints:p}))}var Iv=5;function Xq(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)>=Iv);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 Qq(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>=Iv);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 sl(e){return new Set([...e].filter(t=>!Zq(t)))}function Zq(e){return qq.some(t=>e.includes(t))}function hv(e,t,n){let r=rG(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=Wi(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=Ft(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:[...qe(r.tokens,f.tokens)].sort(),uniqueToB:[...qe(f.tokens,r.tokens)].sort(),...wv([...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 wv(e,t){let n=e.flatMap(Ff),r=e.flatMap(y=>yv(y,t)),i=Tf(n,Ev),o=Tf(n,Dv),s=Tf(r,_f),a=[...new Set(r.filter(bv))],c=e.filter(y=>{let h=yv(y,t);return h.some(C=>_f.has(C))&&h.some(bv)}).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=>Pv.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:eG(p,g)}}function eG(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 Tf(e,t){return[...new Set(e.filter(n=>t.has(n)))]}function Ff(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1)}function yv(e,t){if(t==="source-tokens")return Ff(e);let n=T(e);return Ff(n.length>0?n:tG(e))}function tG(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 bv(e){return e.length>3&&!_f.has(e)&&!Ev.has(e)&&!Dv.has(e)&&!Pv.has(e)&&!nG.has(e)}var _f=new Set(["archive","assign","book","cancel","create","delete","ensure","export","import","notify","persist","publish","restore","schedule","send","set","submit","sync","update","upload","validate","write"]),Ev=new Set(["access","auth","authorize","cache","context","db","find","get","guard","list","permission","permissions","prisma","query","request","response","role","route","session","sql","where"]),Dv=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"]),Pv=new Set(["bytes","crypto","data","false","get","hex","id","key","map","name","num","random","result","secret","set","string","to","token","true","type","value"]),nG=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 rG(e,t){let n=H(e,t);if(!n||!ae(n.symbol))return null;let r=iG(e,n);return r?{symbol:n.symbol,file:n.relativePath,tokens:r}:null}function iG(e,t){let n=T(t.symbol),r=pG(e,t.relativePath,t.startLine,t.endLine,n),i=Lv(r,n);return i.size>0?i:null}var oG=ee("source-fingerprint-corpus",{clearGroups:["whole-project","definition-catalog"]}),sG=ee("source-fingerprint-index",{clearGroups:["whole-project","definition-catalog"]});function kv(e){return`${e.scanLimit??""}`}function Tv(e,t={}){let n=oG.get(e,()=>new Map),r=kv(t),i=n.get(r);return i||(i=fG(e,t),n.set(r,i)),i}function Sv(e,t={}){let n=sG.get(e,()=>new Map),r=kv(t),i=n.get(r);return i||(i=aG(Tv(e,t)),n.set(r,i)),i}function aG(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 cG(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 lG(e,t,n){let r=V(),i=new F(e),o=uG(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 A(e,{includeIgnored:!1})){s+=1;let h=k(e,y);h&&(a+=1,dG(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=de(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=Fv(e,d);return r&&(m=p.length),p},()=>({symbol:t.symbol,definitionCount:u,fingerprintCount:m})).filter(p=>p.symbol!==t.symbol)}function uG(e,t){return Math.max(2,Math.ceil(e*t))}function dG(e,t,n){if(t.length<n)return!1;let r=e.toLowerCase(),i=0;for(let o of t)if(mG(r,o)&&(i+=1,i>=n))return!0;return!1}function mG(e,t){return t==="num"?/\b\d+\b/.test(e):e.includes(t)}function fG(e,t={}){let n=new F(e),{scanLimit:r}=t,i=de(n.productionCallableDefinitions({sortByLocDesc:typeof r=="number"&&r>0}),r);return Fv(e,i)}function Fv(e,t){let n=new Map;for(let i of t){let o=n.get(i.relativePath)??[];o.push(i),n.set(i.relativePath,o)}let r=new Map;for(let[i,o]of n){let s=k(e,i);if(!s)continue;let a=pe(e,i,s),c=hG(e,i,a),l=!1,u=null;for(let d of o){let m=gG(d),f=c.get(m),p=f?new Set(f.tokens):null;p||(u??=Le(e,i),p=Lv(_v(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&&SG(e,i,a,c)}return t.map(i=>r.get(i.symbol)).filter(i=>!!i)}function pG(e,t,n,r,i){let o=Le(e,t);return o.length===0?"":_v(o,n,r,i)}function _v(e,t,n,r){if(n>=t&&n-t<=12)return e.slice(t,n+1).join(`
|
|
739
|
+
`);let i=[new RegExp(`\\bdef\\s+${U(r)}\\b`),new RegExp(`\\bfun\\s+${U(r)}\\b`),new RegExp(`\\bfn\\s+${U(r)}\\b`),new RegExp(`\\bfunction\\s+${U(r)}\\b`),new RegExp(`\\b${U(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&&CG(c)||(s=a,c.trim()===""&&a>o+1))break}return e.slice(o,s+1).join(`
|
|
740
|
+
`)}return e.slice(t,Math.min(e.length,t+8)).join(`
|
|
741
|
+
`)}function gG(e){return`${e.symbol}\0${e.startLine}\0${e.endLine}\0${e.leaf}`}function hG(e,t,n){return Rv.read(e,t,n)??new Map}function yG(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 bG(e){let t={entries:[...e.values()].sort((n,r)=>n.key.localeCompare(r.key))};return JSON.stringify(t)}function SG(e,t,n,r){Rv.write(e,t,n,new Map(r))}function Lv(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=xG(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 xG(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 CG(e){return/^\s*(?:def|fun|fn|function|class|trait|module|object|enum|interface|public|private|protected)\b/.test(e)}function rn(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 on(e){let t=Av(e.profile?.name),n=()=>{let r=[];t=Av(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 RG(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 vG(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,()=>({...IG(e.profile?.metadata),...t})):n()}function RG(e,t){if(e.candidateIndex)return Mv(e,t,-1);let n=[];for(let r=0;r<e.profiles.length;r+=1)r!==t&&n.push(r);return n}function vG(e,t){if(e.candidateIndex)return Mv(e,t,t);let n=[];for(let r=t+1;r<e.profiles.length;r+=1)n.push(r);return n}function Mv(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 Av(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 IG(e){return typeof e=="function"?e():e??{}}function wG(e,t={}){let{minSimilarity:n=.5,limit:r=20,scope:i,filePattern:o}=t,s=t.minDeps??(o?1:3),{profiles:a,distinctiveDeps:c}=EG(e,{scope:i,minDeps:s}),l=rn(a,u=>u.deps);return on({profiles:a,limit:r,filePattern:o,overrunFactor:5,candidateIndex:l,profile:{name:"similar-files"},compare:(u,d)=>PG(u,d,n,c)})}function EG(e,t){let{scope:n,minDeps:r}=t,i=le(e,n),{universalDeps:o,distinctiveDeps:s}=DG(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 DG(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 PG(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=ur(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 dr(e){let t=[],n=[],r=[];for(let l of e.primitiveGroups)l.values.length!==0&&Nv(l.bucket,n,r).push(`${l.reasonPrefix}: ${l.values.join(", ")}`);for(let l of e.nameGroups)kG(l.names,l.label,e.genericWords,e.stripPrefixes??[],t,Nv(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 al(e,t){if(e.size===0||t.size===0)return 0;let i=Ft(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(ur(e,t),i)}function mr(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 cl(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 Y(e,t){return[...e].filter(n=>n.startsWith(t)).map(n=>n.slice(t.length)).sort()}function We(e){return[...e].sort()}function kG(e,t,n,r,i,o){let s=[],a=[];for(let c of e)TG(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 TG(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 Nv(e,t,n){return e==="generic"?t:n}function ys(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=St(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=rn(l,d=>d.tokens);return on({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"react-component-duplicates"},compare:(d,m)=>FG(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 FG(e,t,n){let r=Ft(e.tokens,t.tokens);if(r.size<6||!_G(r))return null;let i=ur(e.tokens,t.tokens);if(i<n)return null;let o=Y(r,"component:"),s=Y(r,"native:"),a=Y(r,"prop:"),c=Y(r,"event:"),l=Y(r,"binding:"),u=LG({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:We(r),sharedComponents:o,sharedNativeTags:s,sharedProps:a,sharedEvents:c,sharedBindings:l,evidenceClass:u.evidenceClass,actionTier:u.actionTier,evidenceClassReasons:u.reasons,recommendation:u.recommendation,uniqueToA:We(qe(e.tokens,t.tokens)).slice(0,25),uniqueToB:We(qe(t.tokens,e.tokens)).slice(0,25),locA:e.profile.loc,locB:t.profile.loc}}function _G(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 mr([{name:"component",count:t},{name:"shape",count:n}],[{min:{component:1},reason:"shared custom component"},{min:{shape:4},reason:"shared JSX structure"}]).pass}function LG(e){return dr({genericWords:MG,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:AG})}function AG(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 MG=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 bs(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=St(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=rn(l,d=>d.tokens);return on({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"react-hook-candidates"},compare:(d,m)=>NG(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 NG(e,t,n,r){let i=Ft(e.tokens,t.tokens);if(i.size<r||!BG(i))return null;let o=al(e.tokens,t.tokens);if(o<n)return null;let s=Y(i,"hook:"),a=Y(i,"react-hook:"),c=Y(i,"effect:"),l=Y(i,"state:"),u=Y(i,"request:"),d=Y(i,"handler:"),m=Y(i,"handler-verb:"),f=OG({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:We(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:We(qe(e.tokens,t.tokens)).slice(0,25),uniqueToB:We(qe(t.tokens,e.tokens)).slice(0,25),reason:$G({sharedHooks:s,sharedReactHooks:a,sharedEffects:c,sharedState:l,sharedRequests:u,sharedHandlers:d,sharedHandlerVerbs:m}),locA:e.profile.loc,locB:t.profile.loc}}function OG(e){return dr({genericWords:HG,stripPrefixes:UG,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:jG})}function jG(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 BG(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 mr([{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 $G(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 HG=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"]),UG=[/^use(?=[A-Z])/,/^handle(?=[A-Z])/,/^is(?=[A-Z])/,/^has(?=[A-Z])/];function Mf(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 St(e).reactProfiles({scope:a,scanLimit:c}).filter(d=>d.kind==="component").filter(d=>!l||d.file.includes(l)||d.name.includes(l)).map(d=>qG(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 qG(e,t){let n=Math.max(80,Math.floor(t.minComponentLines/2)),r=cl(e,GG({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=VG(e),c=WG(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:zG(c,a),reasons:i,loc:e.loc}}function GG(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 VG(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=>JG.has(m))>=0,s=n.some(m=>KG.has(m));if(Ov(r)||Ov(e.name))return"component";let c=YG.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 Ov(e){let t=e.split(/[^A-Za-z0-9]+/).filter(Boolean).map(n=>n.toLowerCase());return t.at(-1)&&jv.has(t.at(-1))?!0:[...jv].some(n=>e.endsWith(XG(n)))}function WG(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 zG(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 KG=new Set(["component","components","panel","panels","partial","partials"]),jv=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"]),JG=new Set(["landing","page","pages","route","routes","screen","screens","view","views"]),YG=new Set(["page","route","screen"]);function XG(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Ss(e,t={}){let{minSimilarity:n=.62,minTokens:r=8,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=QG(e,{scope:o,minTokens:r,scanLimit:s}),u=rn(l,d=>d.tokens);return on({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"vue-component-duplicates"},compare:(d,m)=>eV(d,m,n),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.fileB.localeCompare(m.fileB)})}function QG(e,t){return St(e).vueProfiles({scope:t.scope,minTemplateTokens:t.minTokens,scanLimit:t.scanLimit}).map(n=>({file:n.file,tokens:n.templateTokens,loc:ZG(n)}))}function ZG(e){return e.totalLines}function eV(e,t,n){let r=Ft(e.tokens,t.tokens);if(r.size<6||!tV(r))return null;let i=ur(e.tokens,t.tokens);if(i<n)return null;let o=Y(r,"component:"),s=Y(r,"prop:"),a=Y(r,"event:"),c=Y(r,"directive:"),l=Y(r,"slot:"),u=Y(r,"id:"),d=nV({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:We(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:We(qe(e.tokens,t.tokens)).slice(0,25),uniqueToB:We(qe(t.tokens,e.tokens)).slice(0,25),locA:e.loc,locB:t.loc}}function tV(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 mr([{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 nV(e){return dr({genericWords:iV,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:rV})}function rV(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 iV=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 xs(e,t={}){let{minSimilarity:n=.45,minSharedBehaviors:r=6,limit:i=20,scope:o,scanLimit:s,filePattern:a,focusFiles:c}=t,l=St(e).vueProfiles({scope:o,minBehaviorTokens:Math.max(3,r),scanLimit:s}).map(d=>({file:d.file,tokens:d.behaviorTokens,profile:d})),u=rn(l,d=>d.tokens);return on({profiles:l,limit:i,filePattern:a,focusFiles:c,candidateIndex:u,profile:{name:"vue-composable-candidates"},compare:(d,m)=>oV(d,m,n,r),sort:(d,m)=>m.similarity-d.similarity||d.fileA.localeCompare(m.fileA)||d.fileB.localeCompare(m.fileB)})}function oV(e,t,n,r){let i=Ft(e.tokens,t.tokens);if(i.size<r||!cV(i))return null;let o=al(e.tokens,t.tokens);if(o<n)return null;let s=Y(i,"composable:"),a=Y(i,"store:"),c=Y(i,"reactivity:"),l=Y(i,"lifecycle:"),u=Y(i,"request:"),d=Y(i,"function:"),m=Y(i,"function-verb:"),f=Y(i,"template-binding:"),p=Y(i,"template-event:"),g=sV({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:We(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:We(qe(e.tokens,t.tokens)).slice(0,25),uniqueToB:We(qe(t.tokens,e.tokens)).slice(0,25),reason:lV({sharedComposables:s,sharedStores:a,sharedRequests:u,sharedLifecycle:l,sharedFunctions:d,sharedFunctionVerbs:m,sharedBindings:f}),locA:e.profile.totalLines,locB:t.profile.totalLines}}function sV(e){return dr({genericWords:uV,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:aV})}function aV(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 cV(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 mr([{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 lV(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 uV=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 Nf(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 St(e).vueProfiles({scope:a,scanLimit:c}).filter(d=>!l||d.file.includes(l)).map(d=>dV(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 dV(e,t){let n=cl(e,mV(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=fV(e.file),a=pV(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:gV(a,s),reasons:r,loc:c}}function mV(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 fV(e){return e.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).some(r=>hV.has(r))||/(?:view|page|route)\.vue$/i.test(e)||/(?:^|\/)(views|pages|routes)\//i.test(e)?"route-page":"component"}function pV(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 gV(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 hV=new Set(["landing","page","pages","route","routes","view","views"]);function yV(e,t={}){let{minSimilarity:n=.5,limit:r=15,scope:i,minChainLength:o=3,maxChainLength:s=8}=t,a=le(e,i),c=wV(a,o,s);if(c.length===0)return[];let l=bV(c);return l.length<2?[]:IV(CV(l,n,r),r)}function bV(e){let t=SV(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 SV(e){let{nodeFreq:t,tailFreq:n}=xV(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 xV(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 CV(e,t,n){let r=[];for(let i=0;i<e.length;i++){for(let o=i+1;o<e.length;o++){let s=RV(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 RV(e,t,n){if(!vV(e.filtered,t.filtered))return null;let{distance:r,ops:i}=EV(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:DV(e.original,t.original),commonSuffix:PV(e.original,t.original)}}function vV(e,t){let n=new Set(e);return t.some(r=>n.has(r))}function IV(e,t){let n=[];for(let r of e)if(n.some(o=>Bv(r.chainA,o.chainA)&&Bv(r.chainB,o.chainB))||n.push(r),n.length>=t)break;return n}function wV(e,t,n){let r=[];for(let o of e.keys()){if(r.length>=500)break;$v(e,o,[o],new Set([o]),t,n,r,500)}return r}function $v(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),$v(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 EV(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 DV(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 PV(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 Bv(e,t){if(e.length>t.length)return!1;let n=t.join("\u2192"),r=e.join("\u2192");return n.includes(r)}function _t(e){let t=kV(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=de(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,()=>({...TV(e.profile?.metadata),...t})):n()}function kV(e){return{pipeline:e,loadedCandidates:0,filteredCandidates:0,scannedCandidates:0,evaluatedCandidates:0,matchedResults:0,emittedResults:0,scanLimitApplied:!1,resultLimitApplied:!1}}function TV(e){return typeof e=="function"?e():e??{}}function Cs(e,t={}){let{scope:n,minLoc:r=10,minCallees:i=6,limit:o=20,scanLimit:s}=t,a=new F(e);return _t({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)=>FV(c,l.get(c.symbolId)??[],i),orderResults:(c,l)=>l.clusters.length-c.clusters.length||l.loc-c.loc,limit:o})}function FV(e,t,n){let r=new Set(t.map(l=>l.symbol));if(r.size<n)return null;let i=NV(r,t),o=OV(r,i);if(o.length<2)return null;let s=jV(o,i);if(s.length===0)return null;let a=I(e.symbol),c=_V(a,r.size,o.length,s);return{symbol:e.symbol,shortName:a,relativePath:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:j(e),totalCallees:r.size,extractionKind:c.extractionKind,actionTier:"signal",evidenceReasons:c.evidenceReasons,recommendation:c.recommendation,clusters:s}}function _V(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=LV(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 LV(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=AV(e);return MV.has(r)?`caller verb suggests orchestration: ${r}`:null}function AV(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 MV=new Set(["apply","build","check","collect","create","diff","execute","find","handle","load","prepare","process","render","resolve","run","select","sync","update","validate","verify","write"]);function NV(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 OV(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 jV(e,t){return e.filter(n=>n.size>=3).map(n=>BV(n,e,t)).filter(n=>n.isolation>.5).sort((n,r)=>r.isolation-n.isolation)}function BV(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 zi}from"path";import{spawnSync as $V}from"child_process";import{createHash as HV}from"crypto";import{existsSync as UV}from"fs";import{dirname as Hv,join as qV}from"path";import{fileURLToPath as GV}from"url";var Gv=$("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]}),Uv=ue({kind:"consumer-file-usage",invalidation:Q("consumer-file-usage"),serialize:eW,deserialize:tW});function Fn(e,t){return{forDefinitions(n,r){return VV(e,t,n,r)}}}function _n(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 ul(e,t,n){return Wv(e,t,n).partition}function VV(e,t,n,r){let i=Vv(n.length),o=V()?Ge(e):null,s=o?WV(n,r,o):void 0,a=s?{workIdentity:s,workOutcome:"computed"}:{};return E("consumer-evidence.product",()=>{let c=E("consumer-evidence.provenance",()=>zV(e,t,n,r),()=>({...a,definitions:n.length,semantic:r.semantic,sourceFallback:r.sourceFallback!==!1})),l=new Map;i={...i,...c.counters};let u=KV(n,c.sources);return E("consumer-evidence.classify",()=>{let d=JV(e,n,c.sources,u);for(let m of n){let f=d.get(m.symbolId)??XV();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 WV(e,t,n){let r=HV("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 Vv(e){return{definitions:e,indexedFiles:0,semanticFiles:0,fallbackFiles:0,totalFiles:0,realFiles:0,reexportOnlyFiles:0,importOnlyFiles:0}}function zV(e,t,n,r){let i=Vv(n.length),o=new Map;return Of(o,i,"indexed",t.crossFileCallerMap(n,{semantic:!1})),r.semantic&&Of(o,i,"semantic",rr(e,n)),r.sourceFallback!==!1&&Of(o,i,"source-fallback",t.sourceFallbackCallerFiles(n)),i.totalFiles=[...o.values()].reduce((s,a)=>s+a.size,0),{sources:o,counters:i}}function KV(e,t){return{definitions:e.length,consumerFiles:[...t.values()].reduce((n,r)=>n+r.size,0),nativeAttempted:!1,nativeUsed:!1,nativeReason:"not-attempted"}}function Of(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 JV(e,t,n,r){let i=cW(e,t,n,r);return i||YV(e,t,n)}function YV(e,t,n){let r=new Map;for(let i of t){let o=n.get(i.symbolId)??new Map;r.set(i.symbolId,Wv(e,i,[...o.keys()],o))}return r}function Wv(e,t,n,r=new Map){let i=[],o=0,s=0,a=T(t.symbol),c=[];for(let l of n){let u;nW(e,l,t.relativePath,a)?(o++,u="reexport-only"):jf(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 XV(){return{partition:{realConsumers:[],barrelConsumers:0,importOnlyConsumers:0},files:[]}}function jf(e,t,n){if(!n)return!1;let r=N(t);if(!r)return!1;let i=Gv.get(e,t,()=>zv(e,t,r));return i.importedLeaves.has(n)&&!i.usedLeaves.has(n)}function zv(e,t,n){let r=It(e).forFile(t,{text:!0,ast:!0}),i=r.text;if(!i)return ZV();let o=pe(e,t,i),s=Uv.read(e,t,o);if(s)return s;let a=QV(r.ast,n);return Uv.write(e,t,o,a),a}function QV(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 ZV(){return{importedLeaves:new Set,usedLeaves:new Set}}function eW(e){return JSON.stringify({importedLeaves:[...e.importedLeaves],usedLeaves:[...e.usedLeaves]})}function tW(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 nW(e,t,n,r){if(!r)return!1;let i=It(e).forFile(t,{lines:!0,reexports:!0}),o=i.lines??[];if(o.length===0)return!1;let s=i.reexports??[];return Kv(o,s,r)}function Kv(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 rW="SCIP_QUERY_NATIVE_CONSUMER_CLASSIFY",iW="SCIP_QUERY_NATIVE_KERNELS_BIN",oW="SCIP_QUERY_NATIVE_CONSUMER_CLASSIFY_MIN_FILES",qv=1e3,sW=5e3,aW=64*1024*1024,ll;function cW(e,t,n,r){let i=process.env[rW]?.toLowerCase();if(i!=="1"&&i!=="true")return r.nativeReason=i==="0"||i==="false"?"disabled":"opt-in-required",null;if(r.consumerFiles<gW())return r.nativeReason="below-threshold",null;let o=hW();if(!o)return r.nativeReason="binary-missing",null;r.nativeAttempted=!0;let s=lW(e,t,n),a=$V(o,["consumer-classify"],{input:JSON.stringify(s),encoding:"utf8",timeout:sW,maxBuffer:aW});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=dW(c,t);return l?(r.nativeUsed=!0,r.nativeReason="used",l):(r.nativeReason="invalid-response",null)}catch{return r.nativeReason="invalid-json",null}}function lW(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=N(a);if(l){let d=Gv.get(e,a,()=>zv(e,a,l));o[a]={imported_leaves:[...d.importedLeaves],used_leaves:[...d.usedLeaves]}}let u=uW(e,a,c);u.length>0&&(s[a]=u)}return{definitions:i,file_usages:o,reexport_only_leaves:s}}function uW(e,t,n){if(n.size===0)return[];let r=It(e).forFile(t,{lines:!0,reexports:!0}),i=r.lines??[],o=r.reexports??[];return i.length===0||o.length===0?[]:[...n].filter(s=>Kv(i,o,s))}function dW(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=mW(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 mW(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(fW)||!pW(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 fW(e){return e==="indexed"||e==="semantic"||e==="source-fallback"}function pW(e){return e==="real"||e==="reexport-only"||e==="import-only"}function gW(){let e=process.env[oW];if(!e)return qv;let t=Number(e);return Number.isFinite(t)&&t>=0?t:qv}function hW(){if(ll!==void 0)return ll;let e=process.env[iW],t=process.platform==="win32"?"scip-query-kernels.exe":"scip-query-kernels";return ll=[...e?[e]:[],...yW().map(r=>qV(r,"target","release",t))].find(r=>UV(r))??null,ll}function yW(){let e=new Set,t=Hv(GV(import.meta.url));for(let n=0;n<5;n++)e.add(t),t=Hv(t);return[...e]}var bW=20,SW=1,xW=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"]]),CW=new Set(["components","contracts","hooks","lib","services","shared","stores","utils"]),RW=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 vW(e,t={}){let n=Hf(t.limit,bW),r=Hf(t.minConsumers,SW),i=new F(e),o=i.fileDependencyGraph(t.scope),s=qW(A(e,{includeIgnored:!1})),a=WW(e.config.locality?.architecturalBoundarySegments,t.architecturalBoundarySegments);return(t.target?IW(e,i,t.target):wW(e,t.scope,t.scanLimit)).map(u=>EW(e,i,o,u,t,s,a)).filter(u=>u.consumerFiles.length>=r||t.target).sort(UW).slice(0,n)}function IW(e,t,n){let r=kW(e,n);if(r)return[Zv(r)];let i=H(e,n);if(!i)return[];let o=t.definitionsForFile(i.relativePath).find(s=>s.symbolId===i.symbolId);return o?[TW(o)]:[{unit:{kind:"symbol",file:i.relativePath,shortName:I(i.symbol),symbol:i.symbol,startLine:i.startLine,endLine:i.endLine}}]}function wW(e,t,n){let r=A(e,{scope:t,includeIgnored:!1}),i=Hf(n,r.length);return r.slice(0,i).map(o=>Zv(o))}function EW(e,t,n,r,i,o,s){let a=r.definition?DW(e,t,r.definition,i.semantic):PW(n,r.unit.file),c=r.definition?a.length>0?"exact":"none":a.length>0?"file-level":"none",l=r.unit.file,u=Ut(zi.dirname(l)),d=_W(a),m=FW(u),f=qf([...Jv(u),...d?Jv(d):[]]),p=LW(r.unit,u,d,a),g=AW(p,r.unit,u,d,a,o,s),y=BW(r.unit,c,d,a,u,g.whyNoSuggestedHome),h=$W(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:HW(p,g.suggestedHome,c)}}function DW(e,t,n,r){let i=_n(Fn(e,t).forDefinitions([n],{semantic:r!==!1,sourceFallback:!0}));return iI(i.get(n.symbolId)??[])}function PW(e,t){let n=[];for(let[r,i]of e.entries())r!==t&&i.has(t)&&n.push(r);return iI(n)}function kW(e,t){let n=dn(t),r=A(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 TW(e){return{definition:e,unit:{kind:"symbol",file:e.relativePath,shortName:I(e.symbol),symbol:e.symbol,startLine:e.startLine,endLine:e.endLine}}}function Zv(e){return{unit:{kind:"file",file:e,shortName:zi.basename(e)}}}function FW(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:Uf(i)})}return t}function Jv(e){return e==="."?[]:eI(e).map(({marker:t,prefix:n})=>`${t}: ${n}`)}function Uf(e){return qf(eI(e).map(({marker:t})=>t))}function eI(e){let t=e.split("/").filter(Boolean),n=[];for(let r=0;r<t.length;r+=1){let i=xW.get(t[r]);i&&n.push({marker:i,prefix:t.slice(0,r+1).join("/")})}return n}function _W(e){if(e.length===0)return null;let t=e.map(r=>Ut(zi.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 LW(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":Xv(n,"package")?"package-level-shared":Xv(n,"app")?"app-level-shared":Qv(n,["feature","domain","module"])||Qv(t,["feature","domain","module"])?"feature-local-shared":"sibling-folder":"no-exact-consumers"}function AW(e,t,n,r,i,o,s){let a=MW(e,r);if(a)return fr(a);let c=GW(t.file),l=NW(e,n,c,i,s);if(l)return l;let u=r;if(Ut(n)===Ut(u))return fr(`${n} is already the nearest common owner for its consumers.`);let d=OW(u,n,c,s);return d||jW(u,n,c,o,s)}function MW(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 NW(e,t,n,r,i){if(e==="same-file"){let o=r[0]??null;return o?Bf(o):fr("No same-file consumer path was available.")}if(e==="sibling-folder"&&r.length===1){let o=Ut(zi.dirname(r[0])),s=rI(t,n,o,i);return s?fr(s):Bf(o)}return null}function OW(e,t,n,r){return KW(e)?tI(e,t,n,r,`Nearest shared owner ${e} is outside source root ${n}.`):null}function jW(e,t,n,r,i){if(e===".")return fr("The nearest common owner is the repository root.");let o=`${e}/shared`,s=tI(o,t,n,i,`Proposed home ${o} is outside source root ${n}.`);return s.confidence==="withheld"||r.has(o)?s:fr(`${o} does not exist in the indexed project.`)}function tI(e,t,n,r,i){if(!nI(e,n))return fr(i);let o=rI(t,n,e,r);return o?fr(o):Bf(e)}function Bf(e){return{suggestedHome:e,confidence:"exact",whyNoSuggestedHome:null}}function fr(e){return{suggestedHome:null,confidence:"withheld",whyNoSuggestedHome:e}}function BW(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 $W(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 HW(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 UW(e,t){return Yv(t)-Yv(e)||e.candidatePath.localeCompare(t.candidatePath)}function Yv(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 qW(e){let t=new Set(["."]);for(let n of e){let r=Ut(zi.dirname(n));for(;!t.has(r)&&(t.add(r),r!==".");)r=Ut(zi.dirname(r))}return t}function GW(e){let t=$f(e),n=t.indexOf("src");return n>=0?t.slice(0,n+1).join("/"):t.length<=1?".":t[0]}function nI(e,t){let n=Ut(e),r=Ut(t);return r==="."||n===r||n.startsWith(`${r}/`)}function VW(e,t,n){let r=$f(e),i=$f(t);return(nI(e,t)?r.slice(i.length):r).some(s=>n.has(s.toLowerCase()))}function rI(e,t,n,r){return Ut(e)===Ut(n)||!VW(e,t,r)?null:`${e} is a named architectural boundary; an exact move to ${n} needs human design.`}function WW(...e){let t=new Set(RW);for(let n of e)for(let r of n??[]){let i=zW(r);i&&t.add(i)}return t}function zW(e){let t=e.trim().toLowerCase();return t===""?null:t}function Xv(e,t){return Uf(e).includes(t)}function Qv(e,t){let n=Uf(e);return t.some(r=>n.includes(r))}function KW(e){let t=e.split("/").filter(Boolean),n=t[t.length-1];return n?CW.has(n):!1}function Ut(e){let t=dn(e);return t===""?".":t}function $f(e){let t=dn(e);return t==="."?[]:t.split("/").filter(Boolean)}function Hf(e,t){return!Number.isFinite(e)||e===void 0||e<1?t:Math.floor(e)}function iI(e){return qf([...e]).sort((t,n)=>t.localeCompare(n))}function qf(e){return[...new Set(e)]}function Gf(e,t,n={}){let{maxDepth:r=5,scope:i}=n,o=H(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=gf(e,l,{limit:500,semanticEvidence:q});for(let f of l)for(let p of JW(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 JW(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 YW(e,t,n)){if(o.has(u))continue;let d=Z(e,u),m=d.length>0?Jt(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=Ro(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)||!XW(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 YW(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
|
|
742
|
+
FROM mentions m
|
|
743
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
744
|
+
JOIN documents consumer_d ON consumer_d.id = c.document_id
|
|
745
|
+
WHERE m.symbol_id = ?
|
|
746
|
+
AND m.role != 1
|
|
747
|
+
AND c.document_id != ?
|
|
748
|
+
${e.pathExclusionsFor("consumer_d")}
|
|
749
|
+
${r}`,...i).map(o=>o.relative_path).filter(o=>!e.isIgnored(o)))}function XW(e){if(e.symbol.startsWith("scip-clojure ")||N(e.relativePath)==="clojure")return!0;let t=he(e.symbol);return t==="method"||t==="type"||e.symbol.endsWith("().")}function Vf(e,t,n={}){let r=Ze(e,t);if(!r)return null;let i=QW(e,r);if(!i||e.isIgnored(i.relative_path))return null;let o=[],s=0,a=ZW(e,i.relative_path),c=n.semantic===!1?new Map:rr(e,a);for(let l of a){let u=ez(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:tz(u)})}return{file:i.relative_path,symbols:o,totalExternalConsumers:s}}function QW(e,t){return e.get(`SELECT id, relative_path FROM documents
|
|
750
|
+
WHERE relative_path = ?
|
|
751
|
+
${e.pathExclusionsFor("documents")}
|
|
752
|
+
LIMIT 1`,t)??null}function ZW(e,t){return new F(e).definitionsForFile(t).sort((n,r)=>n.startLine-r.startLine||n.endLine-r.endLine)}function ez(e,t,n,r){let i=e.all(`SELECT DISTINCT consumer_d.relative_path
|
|
753
|
+
FROM mentions m
|
|
754
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
755
|
+
JOIN documents consumer_d ON consumer_d.id = c.document_id
|
|
756
|
+
WHERE m.symbol_id = ?
|
|
757
|
+
AND m.role != 1
|
|
758
|
+
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 tz(e){return e>10?"high":e>0?"medium":"low"}function nz(e,t={}){let{scope:n,minLoc:r=1,maxDepth:i=5,scanLimit:o}=t,s=new F(e),a=rz(e,n,r,o),c=new Wf;for(let g of a)c.add(g);let l=[],u=[];a.length>0&&l.push(oI(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 S of y.get(b.symbolId)??[])m.has(S.symbol)||h.add(S.symbol);let C=[];for(let b of h){m.add(b);let S=sI(e,b);if(!S||e.isIgnored(S.relativePath)||He(e,S.relativePath)||be(e,S.symbol,S.relativePath)||s.fileKind(S.relativePath)==="test"||s.hasSuppressionComment(S))continue;let x=oz(e,S,c);x.removable?C.push(iz(S,"cascade")):x.blockingFiles.length>0&&u.push({shortName:I(S.symbol),file:S.relativePath,blockingFiles:x.blockingFiles.slice(0,3)})}if(C.length===0)break;for(let b of C)c.add(b);l.push(oI(e,g,C,c)),d=C.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 rz(e,t,n,r){let i=qr(e,{scope:t,minLoc:n,skipBarrels:!0,deadCodeOnly:!0,scanLimit:r,semantic:!1}),o=[];for(let s of i.symbols)s.kind==="dead-code"&&(He(e,s.relativePath)||be(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:sI(e,s.symbol)}));return o}function iz(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 sI(e,t){let n=e.get(`SELECT d.relative_path
|
|
759
|
+
FROM global_symbols gs
|
|
760
|
+
JOIN defn_enclosing_ranges der ON der.symbol_id = gs.id
|
|
761
|
+
JOIN documents d ON d.id = der.document_id
|
|
762
|
+
WHERE gs.symbol = ?
|
|
763
|
+
LIMIT 1`,t);return n?Z(e,n.relative_path).find(r=>r.symbol===t)??null:null}function oz(e,t,n){let r=wo(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 oI(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=Z(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 Wf=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 AY}from"crypto";import{existsSync as Pl}from"fs";import{execFileSync as sz}from"child_process";var dI=2e3,dl=50,az=64,cz=8,lz=3,uz=2160*60*60,dz=/\b(?:fix(?:es|ed)?|bug|regression|hotfix)\b/i,mz=3,fz=/#\d+|\b[A-Z][A-Z0-9]+-\d+\b/g,pz=/^([a-z][a-z0-9-]+)(?:\([^)]+\))?!?:/i;function gz(e){let t=ee(e,{clearGroups:["whole-project"]});return(n,r,i)=>{let o=i??zf(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 ml(e){let t=ee(e,{clearGroups:["whole-project"]});return(n,r,i,o)=>{let s=o??zf(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 hz=ml("git-commit-history");function at(e,t={}){let n=t.historyMode??"bounded",r=t.head;return{capability:i=>yz(e,i,r),commitHistory:()=>Rs(e,n,r),fileChurn:()=>xz(e,n,r),changeAmplification:()=>Cz(e,n,r),trackedFiles:()=>vz(e,r),fileAddRecords:()=>wz(e,n,r),coChangePairs:(i={})=>_z(e,i,n,r),coChangePairsForFiles:(i,o={})=>fI(e,i,o,n,r),directionalCoChangePairsForFiles:(i,o={})=>Lz(e,i,o,n,r)}}function Rs(e,t="bounded",n){return hz(e,Ki(t),(r,i)=>bz(r,i,t),n)}function yz(e,t,n){let r=n??zf(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 zf(e){try{return sn(e,["rev-parse","HEAD"]).trim()||null}catch{return null}}function sn(e,t){return sz("git",["-C",e,...t],{encoding:"utf-8",maxBuffer:64*1024*1024,stdio:["ignore","pipe","ignore"],timeout:3e4,killSignal:"SIGKILL"})}function bz(e,t,n){let r;try{r=sn(e,["log","--no-merges","--name-only",...fl(n),"--pretty=format:%x01%H%x00%ct%x00%s"])}catch{return null}return{head:t,...Xf(r,dl)}}function Sz(e){return dz.test(e.subject)}function xz(e,t,n){let r=Rs(e,t,n);if(!r)return null;let i=new Map;for(let o of r.commits){let s=Sz(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 Cz(e,t,n){let r=Rs(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:aI(i,.5),p90FilesPerCommit:aI(i,.9),commitsAnalyzed:i.length}}function aI(e,t){let n=Math.min(e.length-1,Math.floor(e.length*t));return e[n]}var Rz=gz("git-tracked-files");function vz(e,t){return Rz(e,n=>{try{let r=sn(n,["ls-files"]);return new Set(r.split(`
|
|
764
|
+
`).map(i=>i.trim()).filter(i=>i!==""))}catch{return null}},t)}var Iz=ml("git-file-adds"),cI="__git__/file-adds",lI=ue({kind:"git-file-adds",invalidation:Q("git-file-adds"),serialize:Dz,deserialize:Pz});function Kf(e){return at(e).fileAddRecords()}function wz(e,t,n){let r=Ki(t);return Iz(e,r,(i,o)=>Ez(e,i,o,t),n)}function Ez(e,t,n,r){let i=lI.read(e,uI(r),n);if(i)return i;let o=kz(t,r);return o&&lI.write(e,uI(r),n,o),o}function Dz(e){return JSON.stringify([...e.entries()])}function Pz(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 kz(e,t){let n;try{n=sn(e,["log","--no-merges","--find-renames","--name-status",...fl(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(`
|
|
765
|
+
`),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(`
|
|
766
|
+
`)){let m=Tz(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 Tz(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 mI=ml("git-co-change-pairs"),Fz=ml("git-directional-co-change-pairs");function _z(e,t,n,r){let i=`all\0${Ki(n)}\0${Jf(t)}`,o=mI(e,i,()=>{let s=Rs(e,n,r);return s?Yf(s,t):null},r);return o&&[...o]}function fI(e,t,n,r,i){if(t.size===0)return[];let o=`files\0${Ki(r)}\0${pI(t)}\0${Jf(n)}`,s=mI(e,o,()=>{let a=Rs(e,r,i);return a?Yf(a,n,t):null},i);return s&&[...s]}function Lz(e,t,n,r,i){if(t.size===0)return[];let o=n.maxFilesPerCommit??dl;if(t.size>az)return fI(e,t,n,r,i);let s=`directional\0${Ki(r)}\0${pI(t)}\0${Jf({...n,maxFilesPerCommit:o})}`,a=Fz(e,s,(c,l)=>{let u=Az(c,l,t,o,r);return u?Yf(u,n,t):null},i);return a&&[...a]}function Jf(e){let t=e.minTogether??4,n=e.minConfidence??.6,r=e.maxFilesPerCommit??dl;return`${t}\0${n}\0${r}`}function pI(e){return[...e].sort().join("\0")}function Yf(e,t,n){let{minTogether:r=4,minConfidence:i=.6,maxFilesPerCommit:o=dl}=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=Oz(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]}`,C=a.get(h)??{together:0,focusedTogether:0,broadTogether:0,lastTogetherAt:0,timestamps:[],subjects:[]};C.together+=1,f?C.broadTogether+=1:C.focusedTogether+=1,d.timestamp>C.lastTogetherAt&&(C.lastTogetherAt=d.timestamp),C.timestamps.push(d.timestamp),C.subjects.push(d.subject),a.set(h,C)}}let l=[],u=c-uz;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,C=Math.max(f/y,f/h);if(C<i)continue;let b=m.broadTogether/f,S=m.timestamps.filter(x=>x>=u).length;l.push({fileA:p,fileB:g,together:f,confidence:C,changesA:y,changesB:h,focusedTogether:m.focusedTogether,broadTogether:m.broadTogether,broadCommitRatio:b,lastTogetherAt:m.lastTogetherAt,recentTogether:S,commitScope:Bz(m.broadTogether,f),recency:S>0?"recent":"stale",subjectContext:$z(m.subjects)})}return l.sort((d,m)=>m.together-d.together||m.confidence-d.confidence||d.fileA.localeCompare(m.fileA)),l}function Az(e,t,n,r,i){let o;try{o=Mz(e,i)}catch{return null}if(o.length===0)return{head:t,commits:[],skippedBulkCommits:0,newestAnalyzedAt:0};let s;try{s=sn(e,["log","--no-merges","--format=%H",...fl(i),"--",...[...n].sort()])}catch{return null}let a=new Set(o.map(m=>m.hash)),c=s.split(`
|
|
767
|
+
`).map(m=>m.trim()).filter(m=>m!==""&&a.has(m)),l=Nz(e,o,r);if(c.length===0)return{head:t,commits:[],skippedBulkCommits:0,newestAnalyzedAt:l};let u;try{u=sn(e,["show","--no-walk=unsorted","--name-only","--pretty=format:%x01%H%x00%ct%x00%s",...c])}catch{return null}let d=Xf(u,r);return{head:t,...d,newestAnalyzedAt:l}}function Mz(e,t){return sn(e,["log","--no-merges","--format=%H%x00%ct",...fl(t)]).split(`
|
|
768
|
+
`).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 fl(e){return e==="full"?[]:["-n",String(gI())]}function gI(){return Jn(process.env.SCIP_QUERY_GIT_HISTORY_MAX_COMMITS)??dI}function Ki(e){return e==="full"?"full":`bounded:${gI()}`}function uI(e){let t=Ki(e);return t===`bounded:${dI}`?cI:`${cI}:${t}`}function Nz(e,t,n){for(let i=0;i<t.length;i+=20){let o=t.slice(i,i+20),s;try{s=sn(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=Xf(s,n);if(a.commits.length>0)return a.commits[0].timestamp}return 0}function Xf(e,t){let n=[],r=0;for(let i of e.split("")){if(i.trim()==="")continue;let o=i.indexOf(`
|
|
769
|
+
`),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(`
|
|
770
|
+
`).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 Oz(e){return e.length>=cz?!0:jz(e).size>=lz}function jz(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 Bz(e,t){return e===0?"focused":e/t>=.5?"broad-sweep":"mixed"}function $z(e){let t=new Set,n=[],r=[];for(let i of e){!r.includes(i)&&r.length<mz&&r.push(i);for(let o of Hz(i))t.add(o);for(let o of i.match(fz)??[])n.includes(o)||n.push(o)}return{subjectLabels:[...t].sort(),issueRefs:n,sampleSubjects:r,externalIssueLabelStatus:"unavailable"}}function Hz(e){let t=new Set,n=pz.exec(e)?.[1]?.toLowerCase();return n&&t.add(Uz(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 Uz(e){return e==="feat"?"feature":e}function Zf(e){return Qf.test(e)}var Qf=/(?:^|\/)(?: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 vs(e,t,n={}){let{minTogether:r=4,minConfidence:i=.6,limit:o=30,maxFilesPerCommit:s=20}=n,a=at(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=le(e),f=xI(e),p=np(e,m,f),g=n.includeLinked===!0||l,y=[];for(let h of d){if(Qf.test(h.fileA)||Qf.test(h.fileB)||!hI(e,h.fileA)||!hI(e,h.fileB)||l&&!h.fileA.includes(t)&&!h.fileB.includes(t)||!l&&(z(h.fileA)==="test"||z(h.fileB)==="test"||Wz(h.fileA,h.fileB)||Gz(h.fileA,h.fileB)))continue;let C=p(h.fileA,h.fileB);if(!g&&C)continue;let b=ep(h.fileA,h.fileB),S=tp(h,b,C);if(y.push({...h,structurallyLinked:C,partnerClass:b.partnerClass,partnerClassReasons:b.reasons,...S?{declaredCouplingSuggestion:S}:{}}),y.length>=o)break}return{available:!0,commitsAnalyzed:c.commits.length,findings:y}}function hI(e,t){return tt(e.config.projectRoot,t)}function ep(e,t){let n=bI(e),r=bI(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=rK(n.tokens,r.tokens).filter(c=>!tK.has(c));return SI(e,t)||a.length>=2?(o(SI(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 tp(e,t,n){if(n||e.together<4||e.confidence<.75||e.commitScope==="broad-sweep"||e.recency==="stale"||!eK.has(t.partnerClass))return;let r=[e.fileA,e.fileB].sort();return{name:`co-change ${t.partnerClass}: ${iK(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 np(e,t=le(e),n=xI(e)){return(r,i)=>zz(t,n,r,i)}var qz=/(?:^|\/)(?:locales|i18n)\//i;function yI(e){return qz.test(e)}function Gz(e,t){return yI(e)&&yI(t)?!0:Vz(e,t)}function Vz(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 Wz(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 xI(e){return(e.config.declaredCouplings??[]).filter(t=>Array.isArray(t.files)&&t.files.length>=2).map(t=>new Set(t.files))}function zz(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 Kz=/(?:^|\/)(?:readme|docs?|guides?|adr|architecture|design)(?:\/|$)|\.(?:md|mdx|rst|adoc|txt)$/i,Jz=/(?:^|\/)(?:\.[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,Yz=/(?:^|\/)(?:schemas?|contracts?|migrations?|models?|types?)(?:\/|$)|(?:^|\/)[^/]*(?:schema|contract|migration|model|types?)[^/]*|(?:\.schema)?\.(?:graphql|gql|proto|prisma)$/i,Xz=/(?:^|\/)(?:scripts?|bin|tools?|tasks?|generators?|codegen|migrations?|seeds?)(?:\/|$)|(?:^|\/)[^/]*(?:generate|codegen|migrate|seed|script)[^/]*\.[cm]?[jt]s$/i,Qz=/(?:^|\/)(?:models?|entities|domain|state|stores?|reducers?)(?:\/|$)|(?:^|\/)[^/]*(?:model|entity|state|store|reducer|viewmodel)[^/]*\.[^.]+$/i,Zz=/(?:^|\/)(?:views?|pages?|components?|screens?|routes?|templates?)(?:\/|$)|(?:^|\/)[^/]*(?:view|page|component|screen|template)[^/]*\.[^.]+$|\.(?:vue|svelte|tsx|jsx)$/i,eK=new Set(["doc-code","config-code","schema-script","model-view","test-code"]),tK=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 bI(e){let t=e.replace(/\\/g,"/"),n=new Set;return Kz.test(t)&&n.add("doc"),Jz.test(t)&&n.add("config"),Yz.test(t)&&n.add("schema"),Xz.test(t)&&n.add("script"),Qz.test(t)&&n.add("model"),Zz.test(t)&&n.add("view"),z(t)==="test"&&n.add("test"),!n.has("doc")&&!n.has("config")&&n.add("code"),{tags:n,tokens:nK(t)}}function SI(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 nK(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 rK(e,t){let n=new Set(t);return[...new Set(e.filter(r=>n.has(r)))].sort()}function iK(e){return e.map(t=>t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).join(" + ")}import{execFileSync as Vr}from"child_process";import{existsSync as oK}from"fs";import{basename as CI}from"path";function pl(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 Is="Unable to compute git diff.";function Ji(e,t={}){let n=t.plan??pr(e,t);return n.note?sK(n.note,n.changedFileLines):n.changedFiles.length===0?aK(n.changedFileLines):gl(n.changedFiles,[wI(e,n.changedFiles,n.changedFiles,n.changedRanges)])}function pr(e,t={}){let{base:n="HEAD"}=t;try{let r=Ks(e.config.projectRoot,n),i=cK(e.config.projectRoot,r),o=i.changedFileLines,s=gK(e,o),a=hK(e,i.changedRanges);return{changedFileLines:o,changedFiles:s,changedRanges:a,renamedFiles:mK(e.config.projectRoot,r,s,i),note:o.length===0?"No changed files found.":void 0}}catch{return{changedFileLines:[],changedFiles:[],changedRanges:[],renamedFiles:[],note:Is}}}function wI(e,t,n,r=[]){let i=new F(e),o=new Set(n),s=pl(r),a=[],c=new Map,l=t.flatMap(S=>i.definitionsForFile(S)).filter(TK),u=l.filter(S=>bK(S,s)),d=xK(e,l,u,s),m=vK([...u,...d.definitions]).sort((S,x)=>S.relativePath.localeCompare(x.relativePath)||S.startLine-x.startLine),f=m.map(S=>S.symbolId),p=DK(e,f),g=PK(e,f,n),y=m.filter(S=>(p.get(S.symbolId)??0)===0),h=II(()=>rr(e,y)),C=y.filter(S=>(h.get(S.symbolId)?.size??0)===0),b=II(()=>ds(e,C));for(let S of m)EK(e,S,o,a,c,h.get(S.symbolId)??new Set,b.get(S.symbolId)??new Set,p.get(S.symbolId)??0,g.get(S.symbolId)??new Set);return{changedSymbols:a,consumerEntries:[...c.entries()].map(([S,x])=>({file:S,symbols:[...x].sort()})),attributionNotes:d.notes}}function gl(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=kK(n);return{changedFiles:[...e],changedSymbols:r,affectedConsumers:o,attributionNotes:i,summary:{totalChangedFiles:e.length,totalChangedSymbols:r.length,totalAffectedFiles:o.length}}}function sK(e,t=[]){return{changedFiles:t,changedSymbols:[],affectedConsumers:[],attributionNotes:[],summary:{totalChangedFiles:t.length,totalChangedSymbols:0,totalAffectedFiles:0,note:e}}}function aK(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 cK(e,t){let n=Vr("git",["diff","--name-status","--find-renames",t,"--"],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:67108864}),r=Vr("git",["diff","--name-status","--find-renames","--cached",t,"--"],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),i=Vr("git",["ls-files","--others","--exclude-standard"],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),o=Vr("git",["diff","--unified=0",t,"--"],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),s=Vr("git",["diff","--unified=0","--cached",t,"--"],{encoding:"utf-8",cwd:e,timeout:3e4,maxBuffer:64*1024*1024}),a=fK([n,r]);return{changedFileLines:[...new Set([...a.changedFiles,...EI(i)])],changedRanges:PI([...vI(o),...vI(s)]),renamedFiles:a.renamedFiles,deletedFiles:a.deletedFiles}}function op(e,t,n){try{let r=Ks(e,t);return lK(e,r,n)}catch{return null}}function lK(e,t,n){try{return Vr("git",["show",`${t}:./${n}`],{encoding:"utf-8",cwd:e,timeout:1e4,stdio:["ignore","pipe","ignore"]})}catch{return null}}function ws(e,t,n=[]){let r=uK(e,t,n);return i=>(r.has(i)||r.set(i,op(e,t,i)),r.get(i)??null)}function Es(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 uK(e,t,n){let r=[...new Set(n)],i=new Map;if(r.length===0)return i;try{let o=Ks(e,t),s=r.map(c=>`${o}:./${c}
|
|
771
|
+
`).join(""),a=Vr("git",["cat-file","--batch"],{cwd:e,input:s,maxBuffer:256*1024*1024,timeout:1e4,stdio:["pipe","pipe","ignore"]});return dK(a,r)}catch{for(let o of r)i.set(o,op(e,t,o));return i}}function dK(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 mK(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)||!oK(`${e}/${a}`))continue;let c=s.filter(d=>!o.has(d)).filter(d=>CI(d)===CI(a));if(c.length===0)continue;let l=Re(e,a),u=c.map(d=>({from:d,to:a,similarity:pK(op(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 fK(e){let t=new Set,n=new Map,r=new Set;for(let i of e.flatMap(o=>EI(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 pK(e,t){let n=new Set(RI(e)),r=new Set(RI(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 RI(e){return e.match(/[A-Za-z_$][\w$]*|[{}()[\].,]/g)??[]}function EI(e){return e.split(`
|
|
772
|
+
`).map(t=>t.trim()).filter(t=>t.length>0)}function gK(e,t){let n=DI(e),r=[];for(let i of t){let o=n(i);o&&!e.isIgnored(o)&&r.push(o)}return r}function hK(e,t){let n=DI(e),r=[];for(let i of t){let o=n(i.file);o&&!e.isIgnored(o)&&r.push({...i,file:o})}return PI(r)}function DI(e){let t=e.all(`SELECT relative_path FROM documents
|
|
773
|
+
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 vI(e){let t=[],n=null;for(let r of e.split(`
|
|
774
|
+
`)){if(r.startsWith("+++ ")){n=yK(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 yK(e){return e==="/dev/null"?null:e.startsWith("a/")||e.startsWith("b/")?e.slice(2):e}function PI(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 bK(e,t){let n=t.get(e.relativePath);return!n||n.length===0?!0:n.some(r=>sp(e.startLine,e.endLine,r.startLine,r.endLine))}function SK(e,t,n){let r=new Map,i=[],o=kI(e),s=IK(n);for(let a of t){let c=o.get(a.file)??[];if(c.some(d=>sp(d.startLine,d.endLine,a.startLine,a.endLine)))continue;let l=s.get(a.file)??[],u=wK(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(rp(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(rp(a,"nearest-preceding"));continue}}i.push(rp(a,"unattributed"))}return{definitions:[...r.values()],notes:i}}function xK(e,t,n,r){let i=kI(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=>sp(m.startLine,m.endLine,d.startLine,d.endLine))||o.push(d);o.some(d=>d.file===c)&&s.push(...CK(e,c))}return SK(t,o,s)}function CK(e,t){let n=X(e,t);return n?n.rootNode.namedChildren.filter(RK).map(r=>({file:t,startLine:r.startPosition.row,endLine:r.endPosition.row})).filter(r=>r.endLine>=r.startLine):[]}function RK(e){return e.endPosition.row<e.startPosition.row?!1:!new Set(["import_statement","comment"]).has(e.type)}function vK(e){let t=new Map;for(let n of e)t.set(n.symbolId,n);return[...t.values()]}function kI(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 IK(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 wK(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 rp(e,t){return{file:e.file,startLine:e.startLine,endLine:e.endLine,method:t}}function sp(e,t,n,r){return e<=r&&n<=t}function EK(e,t,n,r,i,o,s,a,c){let l=Math.max(a,o.size,s.size);if(!FK(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)ip(e,n,i,d,u);for(let d of o)ip(e,n,i,d,u);for(let d of s)ip(e,n,i,d,u)}function II(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 DK(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
|
|
775
|
+
FROM mentions m
|
|
776
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
777
|
+
WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
|
|
778
|
+
AND m.role != 1
|
|
779
|
+
GROUP BY m.symbol_id`,...t);return new Map(n.map(r=>[r.symbol_id,r.fan_in]))}function PK(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
|
|
780
|
+
FROM mentions m
|
|
781
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
782
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
783
|
+
WHERE m.symbol_id IN (${t.map(()=>"?").join(",")})
|
|
784
|
+
AND m.role != 1
|
|
785
|
+
AND ref_d.relative_path NOT IN (${n.map(()=>"?").join(",")})
|
|
786
|
+
${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 ip(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 kK(e){return[...e.entries()].map(([t,n])=>({file:t,consumedSymbols:n.size})).sort((t,n)=>n.consumedSymbols-t.consumedSymbols)}function TK(e){return!($n(e.symbol)||e.parentTypeName!==null&&!ge(e.symbol))}function FK(e,t){return ge(e.symbol)||e.isTypeLike?!0:e.parentTypeName===null&&t>0}function ap(e){let[t,n]=Yi(e,":"),r=t||"unknown",i=(o={})=>{let s=o.actionTier??_K(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??LK(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]=Yi(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]=Yi(n,":");if(o==="forbidden-edge"){let[a,c]=Yi(s,":"),l=hl(a),u=hl(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(hl);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=hl(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]=Yi(n,":"),[a,c]=Yi(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 _K(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 LK(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 Yi(e,t){let n=e.indexOf(t);return n<0?[e,""]:[e.slice(0,n),e.slice(n+t.length)]}function hl(e){try{return decodeURIComponent(e)}catch{return e}}function Sl(e,t){let n=AK(e,t)??MK(e,t)??NK(e,t)??OK(e,t);return jK(e,n,t)}function AK(e,t){let n=-1,r=null;for(let i=0;i<=t;i+=1){let o=cp(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(cp(e[i]??"")===r)return{start:n,end:i+1};return{start:n,end:e.length}}function cp(e){let t=e.match(/^\s*(```+|~~~+)/);return t?t[1].startsWith("`")?"`":"~":null}function MK(e,t){if(!yl(e[t]??""))return null;let n=t;for(;n>0&&yl(e[n-1]??"");)n-=1;let r=t+1;for(;r<e.length&&yl(e[r]??"");)r+=1;return{start:n,end:r}}function yl(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.includes("|")}function NK(e,t){let n=t;for(;n>=0;){let o=e[n]??"";if(bl(o)!==null)break;if(lp(o)!==null)return null;n-=1}if(n<0)return null;let r=bl(e[n]??"");if(r===null)return null;let i=n+1;for(;i<e.length;){let o=e[i]??"",s=bl(o);if(s!==null){if(s<=r)break;i+=1;continue}if(lp(o)!==null)break;i+=1}return{start:n,end:i}}function bl(e){let t=e.match(/^(\s*)(?:[-*+]\s+|\d+[.)]\s+)/);return t?t[1].length:null}function OK(e,t){let n=e[t]??"";if(FI(n)||n.trim().length===0)return{start:t,end:t+1};let r=t;for(;r>0&&TI(e[r-1]??"");)r-=1;let i=t+1;for(;i<e.length&&TI(e[i]??"");)i+=1;return{start:r,end:i}}function TI(e){return lp(e)===null}function lp(e){return e.trim().length===0?"blank":FI(e)?"heading":cp(e)?"fence":yl(e)?"table":bl(e)!==null?"list":null}function FI(e){return/^#{1,6}\s+/.test(e.trim())}function jK(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(`
|
|
787
|
+
`).trim();return o.length<=2e3?o:`${o.slice(0,2e3).trimEnd()}...`}function Wr(e,t){return t.filter(n=>e.includes(n))}var BK=/<!--\s*scip-query:\s*snapshot\s*-->/i;function xl(e,t){if((e.config.docs?.snapshotPaths??[]).some(i=>lr(i,t)))return!0;let r=k(e,t);return r.length>0&&BK.test(r)}var Ln={classifyCitation:HK,citationContexts:UK,citationKindLabel:GK,citationRemediation:VK,referenceTargets:WK,hasLineAnchoredCitation:$K};function $K(e){return e.some(t=>(t.lineReferences?.length??0)>0)}function HK(e){let t=e.join(`
|
|
788
|
+
`).toLowerCase(),n=[],r=Wr(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=Wr(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=Wr(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 UK(e,t,n){let r=k(e,t);if(!r&&!tt(e.config.projectRoot,t))return[];let i=r.split(/\r?\n/),o=n.flatMap(qK),s=[];for(let a=0;a<i.length;a+=1){let c=i[a]??"";o.some(l=>c.includes(l))&&s.push(Sl(i,a))}return s}function qK(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 GK(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 VK(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 WK(e,t,n){let r=pl(n),i=new Set;for(let o of t)zK(e,o,r.get(o)??[])&&i.add(o);return i}function zK(e,t,n){if(!KK.test(t)||!tt(e.config.projectRoot,t))return!0;if(n.length===0)return!1;let r=Re(e.config.projectRoot,t,{inputKind:"changed source file"}).split(/\r?\n/),i=JK(r);for(let o of n)for(let s=o.startLine;s<=o.endLine;s+=1)if((r[s]??"").trim()!==""&&!i.has(s))return!0;return!1}var KK=/\.(?:[cm]?[jt]sx?)$/i;function JK(e){let t=new Set,n=!1;for(let r=0;r<e.length;r+=1){let i=e[r].trim();!n&&YK(i)&&(n=!0),n&&(t.add(r),i.endsWith(";")&&(n=!1))}return t}function YK(e){return/^import(?:\s|$)/.test(e)||/^export(?:\s+type)?\s+(?:\*|\{)/.test(e)}var _I=ue({kind:"doc-path-evidence",invalidation:Q("doc-path-evidence"),serialize:d2,deserialize:m2}),Ds=/\.(?:md|mdx|rst|txt)$/i;function XK(e){return/(?:^|\/)(?:docs\/plans|plans|adrs?|rfcs?|decisions|changelogs?|archive|reports?)\//i.test(e)||/(?:^|\/)CHANGELOG\.(?:md|mdx|rst|txt)$/i.test(e)}var QK=3,ZK=/([A-Za-z0-9_@-]+(?:\/[A-Za-z0-9_.@-]+)+\.[A-Za-z0-9]{1,6})(?::([1-9][0-9]*))?\b/g;function e2(e,t={}){let{doc:n,limit:r=20,minCoupling:i=QK,includeSnapshotExcluded:o=!1}=t,s=i2(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&&!AI(e,c)||n!==void 0&&!tt(e.config.projectRoot,c))continue;let l=xl(e,c);if(l&&!o)continue;let{value:u,estimated:d}=t2(e,c,s.changeTimes.get(c)),m=n2(e,c),f=new Map,{resolved:p,broken:g,citations:y}=a2(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||Ds.test(b))continue;let S=(s.changeTimes.get(b)??[]).filter(v=>v>u).length;if(S===0)continue;let x=h.get(b);f.set(b,{file:b,evidence:"reference",coChanges:0,changesSinceDocUpdate:S,...up("reference",m,x?.contexts),citationContexts:x?.contexts,citedLines:x?.lineReferences})}for(let[b,S]of s.coupling.get(c)??[]){if(S<i||!s.tracked.has(b))continue;let x=(s.changeTimes.get(b)??[]).filter(R=>R>u).length;if(x===0)continue;let v=f.get(b);v?(v.evidence="both",v.coChanges=S,Object.assign(v,up("both",m,v.citationContexts))):f.set(b,{file:b,evidence:"co-change",coChanges:S,changesSinceDocUpdate:x,...up("co-change",m)})}if(f.size===0&&g.length===0)continue;let C=[...f.values()].sort((b,S)=>S.changesSinceDocUpdate-b.changesSinceDocUpdate);a.push({doc:c,docLastChangedAt:u,staleness:C.reduce((b,S)=>b+S.changesSinceDocUpdate,0)+g.length*10,subjects:C.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 t2(e,t,n){if(n&&n.length>0)return{value:Math.max(...n),estimated:!1};try{return{value:Math.floor(mn(e.config.projectRoot,t).mtimeMs/1e3),estimated:!0}}catch(r){if(tt(e.config.projectRoot,t))throw r;return{value:0,estimated:!1}}}function n2(e,t){let n=k(e,t).slice(0,6e3);if(!n)return{docIntent:"unknown",reasons:["doc text unavailable"]};let r=`${t}
|
|
789
|
+
${n}`.toLowerCase(),i=Wr(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=Wr(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 up(e,t,n=[]){let r=e==="co-change"||n.length===0?null:Ln.classifyCitation(n);return{actionTier:r2(e,t.docIntent,r?.actionTier),docIntent:t.docIntent,docIntentReasons:t.reasons,...r?{citationKind:r.citationKind,citationKindReasons:r.reasons}:{}}}function r2(e,t,n){return t==="historical-note"?"support":n||(e==="co-change"?"signal":"direct")}function i2(e,t){let n=at(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=>Ds.test(m)),d=l.filter(m=>!Ds.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=>Ds.test(c)),everSeenInHistory:a,historyCommitCount:r.commits.length,tracked:i,trackedBySuffix:MI(i)}}function LI(e,t){if(t.size===0)return[];let n=V(),r=0,i=0,o=0,s=0,a=0,c=0;return E("doc-reference.docs-citing-files",()=>{let l=at(e).trackedFiles()??new Set;r=l.size;let u=MI(l),d=o2(t,u),m=[];for(let f of l){if(!AI(e,f))continue;n&&(i+=1);let p=k(e,f);if(!p&&!tt(e.config.projectRoot,f)){n&&(o+=1);continue}if(!l2(p,d)){n&&(s+=1);continue}let g=NI(e,f,p);if(!g)continue;n&&(a+=1);let y=s2(g.candidates,t,d,l,u);if(y.size===0)continue;let h=[...new Set([...y.values()].flatMap(x=>[...x]))],C=c2(g.contextsByCandidate,h),b=[...y].map(([x,v])=>({file:x,contexts:Cl([...v].flatMap(R=>C.get(R)??[])).slice(0,3),lineReferences:Rl([...v].flatMap(R=>g.lineReferencesByCandidate.get(R)??[]))})).filter(x=>x.contexts.length>0),S=[...y.keys()];if(S.length>0){n&&(c+=1);let x=S.sort();m.push({doc:f,cited:x,citations:b,citedClaims:Cl(b.flatMap(v=>v.contexts)).slice(0,3)})}}return m},()=>({targets:t.size,trackedFiles:r,livingDocs:i,unreadableDocs:o,candidateMisses:s,evidenceDocs:a,citedDocs:c}))}function AI(e,t){return Ds.test(t)&&!XK(t)&&tt(e.config.projectRoot,t)}function MI(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 o2(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 s2(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 a2(e,t,n,r,i){let o=new Set,s=new Set,a=NI(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 C=d.get(p)??[];C.push(...y),d.set(p,Cl(C).slice(0,3))}let h=u.get(g);h&&h.length>0&&m.set(p,Rl([...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 c2(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 NI(e,t,n){let r=n;if(r===void 0&&(r=k(e,t),!r&&!tt(e.config.projectRoot,t)))return null;let i=pe(e,t,r),o=_I.read(e,t,i);if(o)return o;let s=u2(r);return _I.write(e,t,i,s),s}function l2(e,t){for(let n of t)if(e.includes(n))return!0;return!1}function u2(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(ZK)){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,Rl([...i.get(c)??[],l]));let u=Sl(t,o);if(u.length===0)continue;let d=r.get(c)??[];d.push(u),r.set(c,Cl(d).slice(0,3))}}return{candidates:[...n],contextsByCandidate:r,lineReferencesByCandidate:i}}function d2(e){let t={candidates:e.candidates,contextsByCandidate:[...e.contextsByCandidate.entries()],lineReferencesByCandidate:[...e.lineReferencesByCandidate.entries()]};return JSON.stringify(t)}function m2(e){try{let t=JSON.parse(e);if(!Kt(t))return null;let n=Ye(t.candidates),r=p2(t.contextsByCandidate),i=f2(t.lineReferencesByCandidate);return!n||!r?null:{candidates:n,contextsByCandidate:new Map(r),lineReferencesByCandidate:new Map(i??[])}}catch{return null}}function f2(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],Rl(r)])}return t}function p2(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=Ye(n[1]);if(!r)return null;t.push([n[0],r])}return t}function Cl(e){let t=[];for(let n of new Set(e))t.some(r=>g2(r,n))||t.push(n);return t}function Rl(e){return[...new Set(e)].sort((t,n)=>t-n)}function g2(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 h2}from"crypto";var jI=3;function Ps(e,t={}){let{scope:n,maxLoc:r=15,minLoc:i=jI,limit:o,scanLimit:s}=t,a=Kf(e),c=HI(e,{scope:n,maxLoc:r,scanLimit:s}).map(u=>UI(e,u,a,i)).filter(u=>u!==null),l=$I(c);return o?l.slice(0,o):l}function dp(e,t,n={}){let{scope:r,maxLoc:i=15,minLoc:o=jI,scanLimit:s}=n,a=Kf(e),c=HI(e,{scope:r,maxLoc:i,scanLimit:s}).map(u=>UI(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(qI).map(({normalizedBody:u,...d})=>d):[]}function BI(e){let t=an(e);return xt(t).replace(/\s+/g,"")}function $I(e){let t=new Map;for(let r of e){if(r.normalizedBody.length<8)continue;let i=b2(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(qI).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=OI(i)-OI(r);return s!==0?s:r.canonical.file.localeCompare(i.canonical.file)}),n}function HI(e,t){let n=Ae(e,{scope:t.scope}).filter(r=>r.isFunctionLike&&!e.isIgnored(r.relativePath)).filter(r=>!ea(e,r.relativePath,r.startLine,"similar")).filter(r=>j(r)<=t.maxLoc);return n.sort((r,i)=>j(i)-j(r)||r.relativePath.localeCompare(i.relativePath)),de(n,t.scanLimit)}function UI(e,t,n,r){let i=An(e,t);if(!i||y2(i)<r)return null;let o=mp(e,t);return o?{symbol:t.symbol,shortName:I(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:j(t),ageCommits:n?.get(t.relativePath)?.commitsAgo??null,normalizedBody:o}:null}function mp(e,t){let n=An(e,t);return n&&BI(n)||null}function An(e,t){let n=Le(e,t.relativePath);return n.length===0?null:n.slice(t.startLine,t.endLine+1).join(`
|
|
790
|
+
`)}function an(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 y2(e){return an(e).split(/\r?\n/).map(n=>n.trim()).filter(n=>n.length>0).length}function b2(e){return h2("sha256").update(e).digest("hex").slice(0,16)}function qI(e,t){let n=e.ageCommits??-1;return(t.ageCommits??-1)-n||e.file.localeCompare(t.file)||e.startLine-t.startLine}function OI(e){return e.functions.reduce((t,n)=>t+n.loc,0)}var S2=new Set(nn());function x2(e,t={}){let{includeHomonyms:n=!1,limit:r}=t,i=Xi(e,t).filter(o=>o.relationship==="divergent"||n&&o.relationship==="homonym");return r?i.slice(0,r):i}function Xi(e,t={}){let{scope:n,minSimilarity:r=.3,scanLimit:i}=t,o=v2(e,{scope:n,scanLimit:i});return WI(o,{minSimilarity:r,isDelegatePair:V2(e)}).filter(s=>!s.members.some(a=>ea(e,a.file,a.startLine,"twin")))}function WI(e,t={}){let n=t.minSimilarity??.3,r=t.isDelegatePair,i=e.filter(l=>!ZI(l.leaf)&&!A2(l.leaf)&&z(l.file)!=="test"&&!Oe(l.symbol)&&!KI(l.symbol)&&!JI(l.symbol,l.leaf)),{recordsByLeaf:o,recordOrder:s}=E("twin-drift.group-by-leaf",()=>C2(i),()=>({records:i.length})),a=E("twin-drift.cluster-leaf-names",()=>zI([...o.keys()]),()=>({leaves:o.size}));return E("twin-drift.compare-clusters",()=>{let l=[];for(let u of a){let d=R2(u,o,s);if(d.length<2||new Set(d.map(C=>C.file)).size<2)continue;let m=null,f=!1,p=!1,g=new Set;for(let C=0;C<d.length;C+=1)for(let b=C+1;b<d.length;b+=1){let S=d[C],x=d[b];if(S.file===x.file||!j2(S,x)||r?.(S,x,d)||r?.(x,S,d))continue;if(f=!0,g.add(S.symbol),g.add(x.symbol),S.normalizedBody===x.normalizedBody){p=!0;continue}let v=T2(S.tokens,x.tokens);(!m||v>m.similarity)&&(m={a:S,b:x,similarity:v})}if(!f)continue;let y=d.filter(C=>g.has(C.symbol)).sort((C,b)=>C.file.localeCompare(b.file)||C.startLine-b.startLine).map(k2);if(!m){l.push({leaf:VI(u),relationship:p?"identical":"homonym",maxDivergence:0,members:y});continue}let h=m.similarity>=n?"divergent":"homonym";l.push({leaf:VI(u),relationship:h,maxDivergence:Math.round((1-m.similarity)*1e3)/1e3,members:y,...h==="divergent"?{firstDivergentTokens:F2(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 C2(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 R2(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 v2(e,t){let n=E("twin-drift.load-definitions",()=>Ae(e,{scope:t.scope}).filter(o=>I2(o)&&!e.isIgnored(o.relativePath)).filter(o=>!$i(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=de(n,t.scanLimit),i=E("twin-drift.select-candidates",()=>w2(r),()=>({scanned:r.length}));return E("twin-drift.build-records",()=>{let o=[];for(let s of i){let a=E2(e,s);a&&o.push(a)}return o},()=>({candidates:i.length,scanned:r.length}))}function I2(e){return e.isFunctionLike?e.symbol.startsWith("rust-analyzer ")?typeof e.kind=="number"&&S2.has(e.kind):!0:!1}function w2(e){let t=e.filter(o=>o.leaf&&!ZI(o.leaf)&&!Oe(o.symbol)&&!KI(o.symbol)&&!JI(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=zI([...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=>z(a.relativePath)==="test"))for(let a of s)i.add(a)}return e.filter(o=>i.has(o))}function E2(e,t){if(!t.leaf)return null;let n=An(e,t);if(!n||!ge(t.symbol)&&!D2(n,t.leaf))return null;let r=xt(an(n)),i=r.replace(/\s+/g,"");if(!i||i.length<8)return null;let o=r.match(P2)??[];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:j(t),normalizedBody:i,tokens:o,isThinForwarder:XI(r)}}function D2(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 P2=/[A-Za-z_$][A-Za-z0-9_$]*|\d+(?:\.\d+)?|[^\sA-Za-z0-9_$]/g;function k2(e){return{symbol:e.symbol,shortName:e.shortName,file:e.file,startLine:e.startLine,endLine:e.endLine,loc:e.loc}}function T2(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 F2(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 zI(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)_2(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 _2(e,t){return e===t||e.toLowerCase()===t.toLowerCase()?!0:e.length<8||t.length<8||Math.abs(e.length-t.length)>2||L2(e.toLowerCase(),t.toLowerCase())/Math.max(e.length,t.length)<.8?!1:B2(e.toLowerCase(),t.toLowerCase(),2)}function L2(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;return r}function A2(e){return/^[A-Z][A-Z0-9_]*$/.test(e)||/^__[^_].*__$/.test(e)||M2.has(e.toLowerCase())}var M2=new Set(["main","row"]),N2=new Set(["app","component","components","feature","features","impl","index","lib","route","routes","shared","src","tsx","typescript","ui"]);function KI(e){return e.startsWith("rust-analyzer ")&&/\/(?:tests?|benches?)\//.test(e)}var O2=new Set(["default","new","reset"]);function JI(e,t){return e.startsWith("rust-analyzer ")&&O2.has(t.toLowerCase())}function j2(e,t){if(e.leaf.toLowerCase()!==t.leaf.toLowerCase()||e.leaf.length>4)return!0;let n=GI(e);return[...GI(t)].some(r=>n.has(r))}function GI(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&&!N2.has(n)))}function B2(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 YI(e){return XI(xt(an(e)))}function XI(e){let t=e.trim();if(!t||$2.test(t))return!1;let n=q2(t);return n.length===0||n.length>2?!1:U2(n[n.length-1])}var $2=/\b(?:if|else|for|while|switch|try|catch|do)\b/,H2=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[[^[\]]*\])*\((?:[^()]|\([^()]*\))*\)$/;function U2(e){let t=e.trim().replace(/^return\s+/,"").replace(/^await\s+/,"").replace(/;\s*$/,"").trim();return H2.test(t)}function q2(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 G2=3;function V2(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=QI(e,n,r,i,G2,new Set);return t.set(o,a),a}}function QI(e,t,n,r,i,o){if(i<=0||o.has(t.symbol)||(o.add(t.symbol),(qn(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(re(e,t.file).filter(c=>c.sourcePath&&(c.kind!=="namespace"||c.usedMembers.includes(n.leaf))).map(c=>c.sourcePath));if([...a].some(c=>ct(c,n.file)))return!0;for(let c of r)if(!(c.symbol===t.symbol||c.symbol===n.symbol||!c.isThinForwarder)&&[...a].some(l=>ct(l,c.file))&&QI(e,c,n,r,i-1,o))return!0;return!1}function ZI(e){return e.startsWith("<")&&e.endsWith(">")}function VI(e){return[...e].sort()[0]}import{readdirSync as W2}from"fs";import{basename as z2,join as ew}from"path";function K2(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 fp(e,t){let n=J2(e,t.file,t.keys);if(!n.ok)return{name:t.name,file:t.file,status:"unavailable",missing:[],extra:[],unavailableReason:n.reason};let r=tJ(e.config.projectRoot,t.mustEqual),i=K2(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 nw(e,t){return t.map(n=>fp(e,n))}function rw(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=>lr(n.pattern,r));case"registered-commands":return t.has("docs/COMMAND_REFERENCE.md");case"builtin-skills":return[...t].some(r=>r.startsWith("skills/"))}}function iw(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 J2(e,t,n){return n.type==="markdown-list"?eJ(e,t,n.marker):Y2(e,t,n)}function Y2(e,t,n){if(!k(e,t))return{ok:!1,reason:`file not found: ${t}`};let i=N(t);if(!i)return{ok:!1,reason:`unsupported file type for ${n.type} extraction: ${t}`};let o=X(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"?X2(o,n.identifier):Z2(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 ow(e){let t=e.childForFieldName("value");return t?t.type==="as_expression"||t.type==="satisfies_expression"?t.namedChild(0):t:null}function X2(e,t){for(let n of e.rootNode.descendantsOfType("variable_declarator")){if(n.childForFieldName("name")?.text!==t)continue;let i=ow(n);if(i?.type==="object")return Q2(i)}return null}function Q2(e){let t=new Set;for(let n of e.namedChildren)if(n.type==="pair"){let r=n.childForFieldName("key");r&&t.add(sw(r.text))}else n.type==="shorthand_property_identifier"&&t.add(n.text);return[...t].sort()}function Z2(e,t){for(let n of e.rootNode.descendantsOfType("variable_declarator")){if(n.childForFieldName("name")?.text!==t)continue;let i=ow(n);if(i?.type!=="array")continue;let o=new Set;for(let s of i.namedChildren)s.type==="string"&&o.add(sw(s.text));return[...o].sort()}return null}function sw(e){return e.length>=2&&(e[0]==="'"&&e.endsWith("'")||e[0]==='"'&&e.endsWith('"'))?e.slice(1,-1):e}function eJ(e,t,n){let r=k(e,t);if(!r)return{ok:!1,reason:`file not found: ${t}`};let i=aw(r,n);return i===null?{ok:!1,reason:`no <!-- BEGIN GENERATED ${n} --> ... <!-- END GENERATED ${n} --> block in ${t}`}:{ok:!0,keys:cw(i)}}function aw(e,t){let n=U(t),i=new RegExp(`<!--\\s*BEGIN GENERATED ${n}\\s*-->([\\s\\S]*?)<!--\\s*END GENERATED ${n}\\s*-->`).exec(e);return i?i[1]:null}function cw(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 tJ(e,t){switch(t.type){case"top-level-dirs":return tw(ew(e,t.path));case"file-glob":return[...new Set(rl(e,t.pattern).map(n=>z2(n)))].sort();case"registered-commands":return nJ(e);case"builtin-skills":return tw(ew(e,"skills"))}}function tw(e){let t;try{t=W2(e,{withFileTypes:!0})}catch{return[]}return t.filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(n=>n.name).sort()}function nJ(e){let t;try{t=Re(e,"docs/COMMAND_REFERENCE.md",{maxBytes:8*1024*1024,inputKind:"generated command reference"})}catch(r){if(!_e(r))throw r;return[]}let n=aw(t,"COMMAND REFERENCE");return n?cw(n):[]}var Se={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 rJ}from"fs";import{isAbsolute as iJ,join as oJ}from"path";var sJ=".scipquery-baseline.json";function pp(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 Qi(e,t){return t&&iJ(t)?t:oJ(e.config.projectRoot,t??sJ)}function vl(e,t,n={}){let r=Qi(e,n.path);if(!rJ(r))throw new Error(`No baseline found at ${r}. Create one with: scip-query health --write-baseline`);let o=(JSON.parse(O(r,"health baseline")).findings??[]).map(pp),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 ks from"path";function Fs(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=Gr(e,{scope:n}),u=dJ([...aJ(e,c,{scope:n,semantic:o}),...lJ(l.forbiddenEdges),...s?uJ(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 aJ(e,t,n){let r=pJ(e,n.scope),i=[],o=new Set;for(let[a,c]of t){if(Ts(a))continue;let l=r.get(a)??new Set;for(let u of c)Ts(u)||l.has(u)||cJ(e,a,u,n)||(i.push({file:a,dep:u}),o.add(a))}o.size>0&&yJ(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 cJ(e,t,n,r){return xJ(e,t,n)||CJ(e,t,n)||bJ(n)||vJ(e,t,n)||RJ(n)?!0:r.semantic&&SJ(e,t,n)}function lJ(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 uJ(e,t){let n=[];for(let[r,i]of mJ(e)){let o=i.filter(a=>!Ts(a));if(o.length<t)continue;let s=fJ(e,o);for(let a of o)for(let c of e.get(a)??[])Ts(c)||(s.get(c)??0)===1&&ks.dirname(c)!==r&&ks.dirname(c)!==ks.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 dJ(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 mJ(e){let t=new Map;for(let n of e.keys()){let r=ks.dirname(n),i=t.get(r);i||(i=[],t.set(r,i)),i.push(n)}return t}function fJ(e,t){let n=new Map;for(let r of t)for(let i of e.get(r)??[])Ts(i)||n.set(i,(n.get(i)??0)+1);return n}function pJ(e,t){let n=new Map;return gJ(e,n,t),n}function gJ(e,t,n){for(let r of hJ(e,n))lw(e,t,r.from_file,r.to_file)}function hJ(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
|
|
791
|
+
FROM mentions m
|
|
792
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
793
|
+
JOIN documents d1 ON c.document_id = d1.id
|
|
794
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
795
|
+
JOIN (
|
|
796
|
+
SELECT m2.symbol_id, c2.document_id
|
|
797
|
+
FROM mentions m2
|
|
798
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
799
|
+
WHERE m2.role = 1
|
|
800
|
+
GROUP BY m2.symbol_id
|
|
801
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
802
|
+
JOIN documents d2 ON sym_def.document_id = d2.id
|
|
803
|
+
WHERE d1.id != d2.id
|
|
804
|
+
AND m.role != 1
|
|
805
|
+
${e.pathExclusionsFor("d1","d2")}
|
|
806
|
+
${n}`,...r)}function yJ(e,t,n={}){new F(e).scanSourceReferences({paths:n.paths??A(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},i=>{i.target.relativePath!==i.sourceFile&&(e.isIgnored(i.target.relativePath)||lw(e,t,i.sourceFile,i.target.relativePath))})}function lw(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 bJ(e){return e.includes("types")||e.endsWith(".d.ts")}function SJ(e,t,n){let r=Wo(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.isUsed)}function xJ(e,t,n){let r=re(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.some(i=>i.used)}function CJ(e,t,n){let r=re(e,t).filter(i=>i.sourcePath===n);return r.length>0&&r.every(i=>i.isTypeOnly===!0)}function RJ(e){return e.endsWith(".vue")}function vJ(e,t,n){let r=re(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 Ts(e){let t=z(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||IJ(ks.basename(e)))}function IJ(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 uw,extname as dw}from"path";function Il(e,t,n,r,i,o){let s=new Set;EJ(e,t,n,r)&&s.add(i);for(let a of o)a.value&&wJ(s,a.label,a.value);return[...s].slice(0,6)}function wJ(e,t,n){let r=DJ(n);t.endsWith("name")&&PJ(r)&&e.add(`${t} has type-guard boundary shape`);for(let i of r){let o=kJ.get(i);o&&e.add(`${t} has ${o} term: ${i}`)}}function EJ(e,t,n,r){if(n<=0)return!1;let i=Le(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(ao(s)===r)return!0;if(!s.startsWith("//")&&!s.startsWith("*")&&!s.startsWith("/*")&&!s.startsWith("@")&&!s.startsWith("#"))return!1}}return!1}function DJ(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 PJ(e){return e.some(t=>TJ.has(t))&&e.some(t=>FJ.has(t))}var kJ=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"]]),TJ=new Set(["can","has","is","should"]),FJ=new Set(["access","api","auth","collision","expired","input","keyboard","overlap","permission","permissions","policy","projectile","response","route","routes","scope"]);function _s(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new F(e);return _t({candidates:()=>BJ(e,s,n,r),orderCandidates:Zc,scanLimit:o,profile:{name:"passthrough-candidates"},prepare:a=>s.calleeMap(a,{semantic:t?.semantic!==!1}),evaluate:(a,c)=>_J(e,a,c.get(a.symbolId)??[]),orderResults:(a,c)=>a.loc-c.loc||a.file.localeCompare(c.file),limit:i})}function _J(e,t,n){let r=jJ(n);if(r.size!==1||!Eu(e,t.relativePath,t.startLine,t.endLine))return null;let[,i]=[...r.entries()][0],o=LJ(e,t,i),s=MJ(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:j(t),forwardsTo:i.symbol,forwardsToShort:I(i.symbol),forwardsToFile:i.file,actionTier:a,boundaryEvidence:o,publicFacadeEvidence:s,recommendation:AJ(a,o,s)}}function LJ(e,t,n){return Il(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:uw(t.relativePath,dw(t.relativePath))},{label:"callee module",value:uw(n.file,dw(n.file))}])}function AJ(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(OJ);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 MJ(e,t){return Ls(e,t)?Hr(e,t.relativePath)?["exported passthrough is declared on the package public surface"]:be(e,t.symbol,t.relativePath)?["exported passthrough matches configured or framework public entry surface"]:[]:[]}function Ls(e,t){let n=Le(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(`
|
|
807
|
+
`),o=U(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:NJ(n,r)}function NJ(e,t){if(!t)return!1;let n=new RegExp(`^\\s*export\\s*\\{[^}\\n]*\\b${U(t)}\\b`);return e.some(r=>n.test(r))}function OJ(e){return e.includes("public surface")}function jJ(e){let t=e.some(r=>ae(r.symbol))?e.filter(r=>ae(r.symbol)):e,n=new Map;for(let r of t)n.has(r.symbol)||n.set(r.symbol,r);return n}function BJ(e,t,n,r){return t.productionCallableDefinitions({scope:n,minLoc:3,maxLoc:r,requireFunctionLikeSymbol:!0,excludeRustTraitImplMembers:!0}).filter(i=>!mo(e,i))}function As(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=XJ(l,n),m={high:0,medium:1,low:2};return _t({candidates:()=>$J(e,l,u,{minLoc:r,maxLoc:i}),orderCandidates:(f,p)=>j(p)-j(f)||f.relativePath.localeCompare(p.relativePath),scanLimit:a,profile:{name:"stale-abstractions"},prepare:f=>{let p=UJ(f),g=HJ(e,l,f,p,{semantic:c}),y=f.filter(h=>{let C=wl(e,h,g,p);return C.realConsumers.length<=1&&!C.transitivelyReachable&&mw(h,C.realConsumers.length,d)});return{consumerFileMap:g,singletonBackedClassIds:VJ(e,l,u,y,{semantic:c}),candidateIndex:p}},evaluate:(f,p)=>{if(p.singletonBackedClassIds.has(f.symbolId))return null;let g=wl(e,f,p.consumerFileMap,p.candidateIndex);if(g.transitivelyReachable||g.realConsumers.length>1||g.realConsumers.length===0&&g.barrelConsumers>0||!mw(g.definition,g.realConsumers.length,d))return null;let y=qJ(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 $J(e,t,n,r){return n.filter(i=>i.isTypeLike&&j(i)>=r.minLoc).filter(i=>j(i)<=r.maxLoc).filter(i=>!e.isIgnored(i.relativePath)).filter(i=>!i.relativePath.endsWith(".d.ts")).filter(i=>z(i.relativePath)!=="test").filter(i=>!be(e,i.symbol,i.relativePath)).filter(i=>!QJ(i.symbol)).filter(i=>!t.hasSuppressionComment(i))}function gp(e,t,n,r){return _n(Fn(e,t).forDefinitions(n,{semantic:r.semantic,sourceFallback:r.sourceFallback}))}function HJ(e,t,n,r,i){let o=gp(e,t,n,{semantic:!1,sourceFallback:!1}),s=n.filter(l=>{let u=wl(e,l,o,r);return u.realConsumers.length<=1&&!(u.realConsumers.length>0&&hp(l.relativePath))}),a=i.semantic&&s.length>0?Tn(o,gp(e,t,s,{semantic:!0,sourceFallback:!1})):o,c=s.filter(l=>wl(e,l,a,r).realConsumers.length<=1);return Tn(a,gp(e,t,c,{semantic:!1,sourceFallback:!0}))}function UJ(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 wl(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}=ul(e,t,o),l=ZJ(e,t,n,r);return{definition:t,realConsumers:s,barrelConsumers:a+c,transitivelyReachable:l}}function qJ(e,t){let n=pw(e,t.definition.relativePath,t.definition.startLine),r=hp(t.definition.relativePath)?!0:eY(e,t.definition),{confidence:i,reason:o}=tY(t.realConsumers.length,n,r),s=GJ(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:j(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 GJ(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 VJ(e,t,n,r,i){let o=zJ(e,WJ(n),r),s=o.map(l=>l.singleton);if(o.length===0)return new Set;let a=_n(Fn(e,t).forDefinitions(s,{semantic:i.semantic,sourceFallback:!0})),c=new Set;for(let{singleton:l,classId:u}of o)JJ(e,l,a)&&c.add(u);return c}function WJ(e){let t=new Map;for(let n of e){let r=T(n.symbol);r&&t.set(fw(n.relativePath,r),n)}return t}function zJ(e,t,n){let r=[];for(let i of n){let o=KJ(e,t,i);o&&r.push({singleton:o,classId:i.symbolId})}return r}function KJ(e,t,n){if(pw(e,n.relativePath,n.startLine)!=="class")return null;let r=T(n.symbol);if(!r)return null;let i=YJ(e,n.relativePath,r);return i?t.get(fw(n.relativePath,i))??null:null}function JJ(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)&&!jf(e,o,r))}function fw(e,t){return`${e}\0${t}`}function YJ(e,t,n){let r=k(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 XJ(e,t){return new Set(e.scopedDefinitions(t).filter(n=>n.isFunctionLike).map(n=>n.relativePath))}function QJ(e){let t=De(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 hp(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 mw(e,t,n){return!(hp(e.relativePath)&&t>0||t===0&&n.has(e.relativePath))}function ZJ(e,t,n,r){let i=Pu(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 pw(e,t,n){let r=k(e,t);if(!r)return"other";let i=r.split(`
|
|
808
|
+
`),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 eY(e,t){let n=k(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(`
|
|
809
|
+
`);for(let a=0;a<s.length;a++)if(!(a>=t.startLine&&a<=t.endLine)&&o.test(s[a]??""))return!0;return!1}function tY(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 Zi,extname as El}from"path";function Ms(e,t){let{scope:n,maxLoc:r=15,limit:i=30,scanLimit:o}=t??{},s=new F(e),a=aY(s.fileDependencyGraph(n));return _t({candidates:()=>iY(e,s,n,r),orderCandidates:Zc,scanLimit:o,profile:{name:"wrapper-candidates"},prepare:c=>({callerFileMap:nY(e,s,c,{semantic:t?.semantic!==!1}),reverseFanIn:a}),evaluate:(c,l)=>rY(e,s,c,l),orderResults:(c,l)=>l.callerFanIn-c.callerFanIn||l.loc-c.loc,limit:i})}function nY(e,t,n,r){let i=Fn(e,t),o=_n(i.forDefinitions(n,{semantic:!1,sourceFallback:!1})),s=[];r.semantic&&E("wrapper.semantic-candidates",()=>{s=n.filter(m=>yp(e,t,m,o).length<=1)},()=>({symbols:n.length,semanticCandidates:s.length}));let a=s.length===0?new Map:_n(i.forDefinitions(s,{semantic:!0,sourceFallback:!1})),c=a.size===0?o:Tn(o,a),l=new Map(n.map(m=>[m.symbolId,m])),u=new Map;for(let m of n){let f=yp(e,t,m,c);if(f.length>1||(u.set(m.symbolId,m),f.length!==1))continue;let p=f[0],g=gw(e,m.symbolId,p);if(!g)continue;let y=hw(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:Tn(c,_n(i.forDefinitions(d,{semantic:!1,sourceFallback:!0})))}function rY(e,t,n,r){let i=yp(e,t,n,r.callerFileMap);if(i.length!==1)return null;let o=i[0],s=gw(e,n.symbolId,o);if(!s)return null;let a=hw(t,e,o,n.symbol,s);if(a&&ti(a.symbol))return null;let{fanIn:c,source:l}=oY(r.callerFileMap,r.reverseFanIn,o,a);if(l==="function"?c<=3:c<=5)return null;let u=lY(e,n,o,a);return{symbol:n.symbol,shortName:I(n.symbol),file:n.relativePath,startLine:n.startLine,endLine:n.endLine,loc:j(n),singleCaller:a?.symbol??"",singleCallerShort:a?.isFunctionLike?I(a.symbol):Zi(o),callerFanIn:c,actionTier:u.length>0?"signal":"direct",boundaryEvidence:u}}function iY(e,t,n,r){return t.productionCallableDefinitions({scope:n,minLoc:2,maxLoc:r,requireFunctionLikeSymbol:!0,excludeRootedSymbols:!0,excludeRustTraitImplMembers:!0}).filter(i=>!mo(e,i))}function yp(e,t,n,r){let i=Zi(n.relativePath,El(n.relativePath)),o=[...r.get(n.symbolId)??[]].filter(s=>s!==n.relativePath).filter(s=>Zi(s,El(s))!==i).filter(s=>{let a=t.fileKind(s);return a!=="barrel"&&a!=="entry"&&a!=="test"});return ul(e,n,o).realConsumers}function gw(e,t,n){return e.get(`SELECT c.start_line, c.end_line
|
|
810
|
+
FROM mentions m
|
|
811
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
812
|
+
JOIN documents d ON c.document_id = d.id
|
|
813
|
+
WHERE m.symbol_id = ? AND m.role != 1 AND d.relative_path = ?
|
|
814
|
+
LIMIT 1`,t,n)}function hw(e,t,n,r,i){let o=e.definitionsForFile(n),s=sY(t,n,r,i.start_line,i.end_line);return Jt(o,s)}function oY(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:cY(t,n),source:"file"}}function sY(e,t,n,r,i){let o=T(n);if(!o)return r;let s=Rn(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 aY(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 cY(e,t){let n=e.get(t)??0;if(n>0)return n;let r=Zi(t,El(t)),i=0;for(let[o,s]of e)o!==t&&Zi(o,El(o))===r&&s>i&&(i=s);return i}function lY(e,t,n,r){return Il(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):Zi(n)},{label:"wrapper path",value:t.relativePath},{label:"caller path",value:n}])}var uY=25e3,dY=2500,mY=2500;function fY(e){let t=Ur(e);return t.symbols>=uY||t.documents>=dY?mY:void 0}function bp(e,t={}){let{scope:n}=t,r=fY(e),i=[],o=qr(e,{scope:n,...Se.dead,scanLimit:r});for(let s of o.symbols)He(e,s.relativePath)||be(e,s.symbol,s.relativePath)||s.kind==="dead-code"&&i.push(`dead:${s.relativePath}:${s.shortName}`);for(let s of gs(e,{scope:n,...Se.isolated,scanLimit:r}))He(e,s.relativePath)||be(e,s.symbol,s.relativePath)||i.push(`isolated:${s.relativePath}:${s.shortName}`);for(let s of fs(e,{scope:n}))s.kind==="real"&&i.push(`cycle:${pY(s.path)}`);for(let s of hs(e,{scope:n,...Se.similar,scanLimit:r}))i.push(`similar:${[s.symbolA,s.symbolB].sort().join("|")}`);for(let s of Ps(e,{scope:n,...Se.duplicateBodies,scanLimit:r}))i.push(`duplicate-bodies:${s.hash}:${s.functions.map(a=>a.symbol).sort().join("|")}`);for(let s of Cs(e,{scope:n,...Se.extract,scanLimit:r}))i.push(`extract:${s.relativePath}:${s.shortName}`);for(let s of Ms(e,{scope:n,...Se.wrappers,scanLimit:r}))i.push(`wrapper:${s.file}:${s.shortName}`);for(let s of _s(e,{scope:n,...Se.passthroughs,scanLimit:r}))i.push(`passthrough:${s.file}:${s.shortName}`);for(let s of As(e,{scope:n,...Se.stale,scanLimit:r}))i.push(`stale:${s.file}:${s.shortName}`);for(let s of Fs(e,{scope:n,...Se.drift,includePatternDeviations:!1,limit:Number.POSITIVE_INFINITY}).results)s.kind!=="architecture-violation"&&i.push(`drift:${s.kind}:${s.file}:${s.dep}`);return i.push(...il(Gr(e,{scope:n}))),[...new Set(i.map(pp))].sort()}function pY(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 gY(e,t={}){let n=bp(e,{scope:t.scope}),r=Qi(e,t.path);return ft(r,{version:1,findings:n},{spacing:2,trailingNewline:!0}),{path:r,findingCount:n.length}}function Sp(e,t={}){return vl(e,bp(e,{scope:t.scope}),{path:t.path})}function yw(e,t={}){let n=il(Gr(e,{scope:t.scope}));return vl(e,n,{path:t.path,accept:r=>r.startsWith(Ht)})}var hY=5;function Cp(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??pr(e,{base:n}),d={available:u.note!==Is,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(R=>[R.to,R.from])),g=t.baseContentAt??ws(e.config.projectRoot,n,Es(u)),y=RY(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 C=m.calleeMap(h,{semantic:l}),b=h.map(R=>({def:R,callees:sl((C.get(R.symbolId)??[]).map(D=>D.symbol))})),S=Wi(e),x,v=()=>(x??=S.calleeIndex({minCallees:Math.min(3,i),scanLimit:c,semantic:l}),x);for(let{def:R,callees:D}of b){let w=I(R.symbol);if(D.size<i){d.skipped.push({helperShortName:w,helperFile:R.relativePath,reason:`fewer than ${i} meaningful callees \u2014 too small to score`});continue}let P=v(),L=CY(D,P);if(L===0){d.skipped.push({helperShortName:w,helperFile:R.relativePath,reason:"helper callee pattern is all project-wide infrastructure \u2014 too generic to score"});continue}let ie=vY(e,R.symbolId);if(ie.length===0){d.skipped.push({helperShortName:w,helperFile:R.relativePath,reason:"no references yet \u2014 covered by the new-dead check"});continue}d.helpersChecked+=1;let ne=yY({candidateIndex:P,changed:f,helperCallees:D,helperFile:R.relativePath,helperSymbol:R.symbol,minContainment:r,minSiteCoverage:o,migratedFiles:ie});ne.length!==0&&(ne.sort((_,me)=>bw(me.migrationScope)-bw(_.migrationScope)||me.containment-_.containment||me.siteCoverage-_.siteCoverage||_.file.localeCompare(me.file)),d.findings.push({helperSymbol:R.symbol,helperShortName:w,helperFile:R.relativePath,helperShape:"specific-callee-cluster",helperCalleeCount:D.size,specificHelperCalleeCount:L,migratedFiles:ie.sort(),leftovers:ne.slice(0,hY)}))}return d.findings.sort((R,D)=>(D.leftovers[0]?.containment??0)-(R.leftovers[0]?.containment??0)||R.helperFile.localeCompare(D.helperFile)),d.findings=d.findings.slice(0,a),d}function yY(e){let t=[],n=bY(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=fv(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=SY(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 bw(e){return e==="same-scope"?2:e==="unknown"?1:0}function bY(e,t,n){let r=new Set([...xp(t),...Rp(T(e))]);for(let i of n)for(let o of xp(i))r.add(o);return r}function SY(e,t,n){let r=new Set([...xp(n),...Rp(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 xY=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 xp(e){return Rp(e.replace(/\.[^.]+$/,""))}function Rp(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>1&&!xY.has(t))}function CY(e,t){let n=0;for(let r of e)(t.docFreq.get(r)??0)<=t.ubiquityThreshold&&(n+=1);return n}function RY(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${U(i.leaf)}\\b`).test(s)})}function vY(e,t){return e.all(`SELECT DISTINCT ref_d.relative_path
|
|
815
|
+
FROM mentions m
|
|
816
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
817
|
+
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
818
|
+
WHERE m.symbol_id = ?
|
|
819
|
+
AND m.role != 1
|
|
820
|
+
${e.pathExclusionsFor("ref_d")}`,t).map(r=>r.relative_path)}function vp(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=new F(e);return _t({candidates:()=>o.productionCallableDefinitions({scope:n,files:t.files,minLoc:2,excludeRootedSymbols:!0,requireFunctionLikeSymbol:!0}),filterCandidate:s=>IY(s.relativePath),scanLimit:i,profile:{name:"unused-params"},evaluate:s=>{let a=K(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=Rn(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("_")||wY(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 IY(e){let t=N(e);return t==="typescript"||t==="tsx"||t==="javascript"}function wY(e,t,n){return e?e.some(r=>r>t&&r<=n):!1}import{existsSync as EY,readdirSync as DY}from"fs";import{createHash as PY}from"crypto";import{join as Dp}from"path";function wp(e){let t=0,n=0,r=0,i=0,o=0,s=[];for(let l of e)switch(l.state){case"legacy":t+=1;break;case"current":n+=1;break;case"unsupported-older":r+=1,s.push(Ip(l));break;case"unsupported-future":i+=1,s.push(Ip(l));break;case"malformed":o+=1,s.push(Ip(l));break}let a=t+n,c=r+i+o;return{complete:c===0,total:e.length,accepted:a,legacy:t,current:n,unsupportedOlder:r,unsupportedFuture:i,malformed:o,omitted:c,issues:s}}function Gbe(e,t){if(!t.complete)return`${e} coverage is incomplete: accepted ${t.accepted} of ${t.total} record(s); omitted ${t.omitted} (${t.unsupportedOlder} unsupported older, ${t.unsupportedFuture} unsupported future, ${t.malformed} malformed).`}function Ip(e){if(e.state==="legacy"||e.state==="current")throw new Error(`accepted record ${e.path} cannot become a compatibility issue`);return{path:e.path,state:e.state,reason:e.reason??e.state}}var xw=Dp(".scipquery","suppressions"),Sw="scip-query-suppression",Ep=1;function kY(e){return Dp(e,xw)}function TY(e){if(e.id&&e.id.trim()!=="")return`${e.id.trim()}.json`;let t=`${e.check??""}\0${e.file??""}`;return`CHECK-${PY("sha256").update(t).digest("hex").slice(0,12).toUpperCase()}.json`}function FY(e){return TY(e).slice(0,-5)}function _Y(e,t){if(typeof e!="object"||e===null||Array.isArray(e))return{state:"malformed",error:"not a suppression object"};let n=e;if(n.schemaVersion===void 0&&(n.kind!==void 0||n.suppressionIdentity!==void 0||n.writer!==void 0))return{state:"malformed",error:"suppression envelope metadata requires schemaVersion"};if(n.schemaVersion!==void 0){if(!Number.isSafeInteger(n.schemaVersion))return{state:"malformed",error:"schemaVersion must be a positive safe integer"};if(n.schemaVersion!==Ep)return{state:n.schemaVersion>Ep?"unsupported-future":"unsupported-older",error:`unsupported schemaVersion ${String(n.schemaVersion)}`};if(n.kind!==void 0&&n.kind!==Sw)return{state:"malformed",error:`kind must be ${Sw}`}}if(typeof n.reason!="string"||n.reason.trim()==="")return{state:"malformed",error:"missing reason"};if(!n.id&&!n.check)return{state:"malformed",error:"needs an id or a check"};let r=LY(n);if(n.schemaVersion===void 0)return{state:"legacy",suppression:r,record:n,schemaVersion:0};let i=FY(r);return n.suppressionIdentity!==i||t!==void 0&&n.suppressionIdentity!==t?{state:"malformed",error:"suppressionIdentity does not match the suppression target or filename"}:!n.writer||n.writer.tool!=="scip-query"||typeof n.writer.version!="string"||n.writer.version.trim()===""?{state:"malformed",error:"missing valid writer metadata"}:typeof n.createdAt!="string"||!Number.isFinite(Date.parse(n.createdAt))?{state:"malformed",error:"missing valid createdAt timestamp"}:n.updatedAt!==void 0&&(typeof n.updatedAt!="string"||!Number.isFinite(Date.parse(n.updatedAt)))?{state:"malformed",error:"invalid updatedAt timestamp"}:{state:"current",suppression:r,record:n,schemaVersion:Ep}}function Cw(e){let t=kY(e);if(!EY(t))return{suppressions:[],compatibility:wp([]),warnings:[]};let n=[],r=[];for(let o of DY(t).sort()){if(!o.endsWith(".json"))continue;let s=Dp(t,o),a=`${xw}/${o}`,c;try{c=JSON.parse(O(s,"suppression record"))}catch{r.push({path:a,state:"malformed",reason:"malformed JSON"});continue}let l=_Y(c,o.slice(0,-5));if("error"in l){r.push({path:a,state:l.state,reason:l.error});continue}r.push({path:a,state:l.state}),n.push(l.suppression)}let i=wp(r);return{suppressions:n,compatibility:i,warnings:i.issues.map(o=>`${o.path}: ${o.reason} \u2014 ignored`)}}function LY(e){return{...typeof e.id=="string"?{id:e.id}:{},...typeof e.check=="string"?{check:e.check}:{},...typeof e.file=="string"?{file:e.file}:{},reason:e.reason,...typeof e.expiresAt=="string"?{expiresAt:e.expiresAt}:{},...typeof e.createdAt=="string"?{createdAt:e.createdAt}:{}}}var MY=["echo","incomplete-migration","co-change-partner","twin-partner","coverage-contract","architecture","doc-reference","unused-params","new-dead","baseline"];function NY(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=Cw(e.config.projectRoot),p=pr(e,{base:n}),g=Ji(e,{base:n,plan:p}),y=g.changedFiles,h=new Set(y),C=new Set(p.changedFileLines),b=new Set([...h,...C]),S=ws(e.config.projectRoot,n,Es(p,y)),x=d5(e.config.projectRoot,n,p,S),v={base:n,changedFiles:y,changedSymbols:g.changedSymbols.length,checksRun:[],skipped:[],suppressed:[],findings:[],attributionNotes:g.attributionNotes,rootCauseGroups:[],recordCompatibility:{suppressions:f.compatibility},note:g.summary.note};if(y.length===0)return v;let R=(D,w)=>{if(m.has(D)){v.skipped.push({check:D,reason:"skipped via --skip"});return}let P=v.findings.length,L=v.skipped.length,ie=v.checksRun.length;E(`diff-gate.check.${D}`,w,()=>({check:D,changedFiles:y.length,changedSymbols:g.changedSymbols.length,findingsAdded:v.findings.length-P,skippedAdded:v.skipped.length-L,checksRunAdded:v.checksRun.length-ie}))};return R("echo",()=>UY(e,g.changedSymbols,h,x,o,a,l,u,v)),R("incomplete-migration",()=>KY(e,n,p,s,l,u,S,v)),R("co-change-partner",()=>JY(e,b,r,i,d,v)),R("twin-partner",()=>YY(e,g.changedSymbols,h,l,v)),R("coverage-contract",()=>XY(e,b,v)),R("architecture",()=>p5(e,v)),R("doc-reference",()=>n5(e,h,C,p.changedRanges,p.renamedFiles,v)),R("unused-params",()=>s5(e,y,v)),R("new-dead",()=>a5(e,g.changedSymbols,x,v)),c&&R("baseline",()=>f5(e,v)),$Y(v,[...e.config.suppressions??[],...f.suppressions]),v.rootCauseGroups=BY(v.findings),v}function OY(e){return e.checksRun.length===0&&e.note===Is}function jY(e){return e.filter(t=>!t.advisory)}function BY(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=Dw(i.severity,n.severity),i.actionTier=Pw(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||Dl(r.severity)-Dl(n.severity)||n.groupKey.localeCompare(r.groupKey))}function Dw(e,t){return Dl(t)>Dl(e)?t:e}function Dl(e){return e==="error"?2:e==="warning"?1:0}function Pw(e,t){return e?t&&Rw(t)>Rw(e)?t:e:t}function Rw(e){return e==="direct"?2:e==="signal"?1:0}function $Y(e,t){if(t.length===0||e.findings.length===0)return;let n=[];for(let r of e.findings){let i=t.find(o=>HY(o,r));i?e.suppressed.push({finding:r,suppression:i}):n.push(r)}e.findings=n}function HY(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 cn(e,t){e.findings.push({...t,suppressionHint:`scip-query: ignore ${t.check} ${t.id} -- <reason>`})}function UY(e,t,n,r,i,o,s,a,c){c.checksRun.push("echo");for(let l of t.slice(0,i)){if(!ge(l.symbol)||r(l))continue;let u=dp(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=Ne("echo",l.symbol,l.file),C=Ne("echo",l.symbol,l.file,...u.map(S=>`${S.otherSymbol}|${S.otherFile}`).sort()),b=u[0];cn(c,{id:h,legacySuppressionIds:C===h?void 0:[C],groupKey:h,actionTier:"direct",check:"echo",severity:"warning",evidence:"heuristic",confidence:1,file:l.file,symbol:l.symbol,relatedFiles:[...new Set(u.map(S=>S.otherFile))].sort(),sourceAnalyzer:"duplicate-bodies",rootCauseKey:`${l.symbol}:${b.otherSymbol}`,message:Iw(l,u),why:ww(l,u),remediation:Ew("direct",l.shortName,b.otherShort)});continue}let d=ol(e,l.symbol,{minSimilarity:o,limit:5,scanLimit:s,semantic:a,sourceCandidateMode:"target-pruned"}),m=[];for(let h of d){let C=h.fileA===l.file?h.fileB:h.fileA,b=h.fileA===l.file?h.shortNameB:h.shortNameA,S=h.fileA===l.file?h.symbolB:h.symbolA;n.has(C)||m.push({otherFile:C,otherShort:b,otherSymbol:S,similarity:h.similarity,similarityBasis:h.similarityBasis??"callees",sharedEvidence:h.sharedCallees})}if(m.length===0)continue;let f=m[0],p=Ne("echo",l.symbol,l.file,...m.map(h=>`${h.otherSymbol}|${h.otherFile}`).sort()),g=Ne("echo",l.symbol,l.file),y=qY(l,m);cn(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:Iw(l,m),why:ww(l,m),remediation:Ew(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 qY(e,t){return t.some(r=>GY(e.symbol,r))?"direct":"signal"}function GY(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:zY(t.sharedEvidence)?!1:VY(n,r)}function VY(e,t){let n=vw(e),r=vw(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 vw(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 WY=new Set(["bytes","crypto","hex","num","random","secret","to","token"]);function zY(e){return e.length>=3&&e.every(t=>WY.has(t.toLowerCase()))}function Iw(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 ww(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 Ew(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 KY(e,t,n,r,i,o,s,a){let c=Cp(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=Ne("incomplete-migration",l.helperSymbol,l.helperFile,m.join("|")),y=Ne("incomplete-migration",l.helperSymbol,l.helperFile);cn(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 JY(e,t,n,r,i,o){let s=at(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||Zf(f)||Zf(m)||!Pl(`${e.config.projectRoot}/${f}`))continue;let y=`${m}|${f}`;if(a.has(y))continue;a.add(y);let h=Ne("co-change-partner",m,f,String(l.together)),C=Ne("co-change-partner",m,f),b=ep(m,f),S=tp({fileA:m,fileB:f,together:l.together,confidence:g,commitScope:l.commitScope,recency:l.recency,subjectContext:l.subjectContext},b,(c??=np(e))(m,f)),x=[m,f].sort().join("|");o.findings.push({id:C,legacySuppressionIds:h===C?void 0:[h],check:"co-change-partner",severity:"warning",evidence:"change-graph",actionTier:"signal",groupKey:`co-change-partner:${x}`,confidence:g,file:m,relatedFiles:[f],sourceAnalyzer:"co-change",rootCauseKey:x,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,...S?{declaredCouplingSuggestion:S}:{},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: ${QY(l)}.`,`Subject context: ${ZY(l.subjectContext)}.`,...e5(l),`Partner class: ${b.partnerClass} (${b.reasons.join("; ")}).`],remediation:S?`Update ${f} alongside this change, declare the coupling "${S.name}", or confirm the coupling no longer holds.`:`Update ${f} alongside this change, or confirm the coupling no longer holds.`})}}function YY(e,t,n,r,i){i.checksRun.push("twin-partner");let o=Xi(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(!ge(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=Ne("twin-partner",c.symbol,c.file,m.symbol);cn(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 XY(e,t,n){n.checksRun.push("coverage-contract");let r=e.config.coverageContracts??[];for(let i of r){if(!rw(i,t))continue;let o=fp(e,i);if(o.status==="ok")continue;let s=Ne("coverage-contract",i.name,i.file);cn(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:iw(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 QY(e){return`${e.commitScope}/${e.recency}; ${e.focusedTogether} focused, ${e.broadTogether} broad-sweep (${Math.round(e.broadCommitRatio*100)}% broad), ${e.recentTogether} recent, last ${t5(e.lastTogetherAt)}`}function ZY(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 e5(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 t5(e){return e<=0?"unknown":new Date(e*1e3).toISOString().slice(0,10)}var Pp=3;function n5(e,t,n,r,i,o){o.checksRun.push("doc-reference");let s=Ln.referenceTargets(e,t,r);if(s.size===0)return;let a=new Set(i.map(l=>l.from)),c=[];for(let l of LI(e,s))n.has(l.doc)||xl(e,l.doc)||c.push(r5(e,l,a));for(let l of i5(c))cn(o,l)}function r5(e,t,n){let r=t.citedClaims.length>0?t.citedClaims:Ln.citationContexts(e,t.doc,t.cited),i=Ln.classifyCitation(r),o=Ln.hasLineAnchoredCitation(t.citations),s=t.cited.some(d=>n.has(d)||!Pl(`${e.config.projectRoot}/${d}`)),a=!(o||s),c=t.cited[0]??"",l=Ne("doc-reference",t.doc,t.cited.join("|")),u=Ne("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 ${Ln.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:Ln.citationRemediation(i.citationKind,t.doc)}}function i5(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<=Pp?n.push(...i):n.push(o5(r,i));return n}function o5(e,t){let n=[...t].sort((u,d)=>(u.file??"").localeCompare(d.file??"")),r=n.slice(0,Pp).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)=>Dw(u,d.severity),"info"),a=n.reduce((u,d)=>Pw(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:Ne("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 (${Pp}) \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 s5(e,t,n){n.checksRun.push("unused-params");for(let r of vp(e,{files:t,limit:50})){let i=Ne("unused-params",r.symbol,r.file,r.unusedTrailing.join("|")),o=Ne("unused-params",r.symbol,r.file);cn(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 a5(e,t,n,r){r.checksRun.push("new-dead");let i=new F(e),o=li(e.config.projectRoot),s=o.length>1;for(let a of t){if(n(a)||a.fanIn>0||i.fileKind(a.file)==="test"||He(e,a.file)||be(e,a.symbol,a.file)||u5(a.symbol))continue;let c=Ne("new-dead",a.symbol,a.file),l=s&&c5(o,a.file)&&l5(e,a.symbol);cn(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 c5(e,t){return e.some(n=>t===n.relativeDir||t.startsWith(`${n.relativeDir}/`))}function l5(e,t){let n=T(t);return n?(vn(e).get(n)?.length??0)>1:!1}function u5(e){if(he(e)!=="type")return!1;let t=T(e);return t.startsWith("_Assert")||t.startsWith("Assert")}function d5(e,t,n,r){let i=new Map(n.renamedFiles.map(s=>[s.to,s.from])),o=r??ws(e,t,Es(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&&m5(l,c)}}function m5(e,t){return new RegExp(`\\b${U(t)}\\b`).test(e)}function f5(e,t){if(!Pl(Qi(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=Sp(e);for(let r of n.newFindings.filter(i=>!i.startsWith(Ht))){let i=ap(r),o=Ne("baseline",r);cn(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 p5(e,t){if(!lv(e.config.architecture)){t.skipped.push({check:"architecture",reason:"no closed architecture dependency rows, requireCompletePolicy rule, or requireAcyclic rule configured"});return}if(!Pl(Qi(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=yw(e);for(let r of n.newFindings){let i=ap(r),o=Ne("architecture",r);cn(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 Ne(e,...t){return`SQ${AY("sha256").update([e,...t].join("\0")).digest("hex").slice(0,12).toUpperCase()}`}import{dirname as g5,relative as h5,resolve as y5}from"path";var b5=new Set(nn());function S5(e,t){return`tests/generated/twin-ab/${kw(e)}-vs-${kw(t)}.test.ts`}function kw(e){return(e.split(/[/#]/).pop()||e).replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"symbol"}function x5(e,t,n,r){let i=Tw(e,t);if(!i.ok)return i;let o=Tw(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=R5(i.symbol,o.symbol,e.config.projectRoot,r,s);return{ok:!0,a:i.symbol,b:o.symbol,signatureCompatible:s,testSource:a}}function Tw(e,t){let r=Co(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?b5.has(o):ae(r.symbol)))return{ok:!1,reason:`${t} resolves to ${I(r.symbol)}${o!==null?` with SCIP kind ${us(o)}`:""} \u2014 twin-ab compares call outputs, so both referents must be functions or methods.`};if(!Ls(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=xn(Cn(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?C5(c):null}}}function C5(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 Fw(e,t,n){let r=g5(t),i=y5(e,n),s=h5(r,i).replace(/\\/g,"/").replace(/\.tsx?$/,".js");return s.startsWith(".")?s:`./${s}`}function R5(e,t,n,r,i){let o=Fw(n,r,e.file),s=Fw(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`/**
|
|
821
|
+
* Generated by 'scip-query twin-ab'. scip-audit integrity scenario.
|
|
822
|
+
* ("cross-examine same-concept twins"): where one concept is computed in
|
|
823
|
+
* more than one place, feed both the same input and require the same
|
|
824
|
+
* answer. Disagreement between twins means at least one is wrong \u2014
|
|
825
|
+
* determine which before consolidating.
|
|
826
|
+
*
|
|
827
|
+
* Twin A: ${e.shortName} (${e.file}:${e.startLine+1})
|
|
828
|
+
* ${e.signature??"(signature unavailable)"}
|
|
829
|
+
* Twin B: ${t.shortName} (${t.file}:${t.startLine+1})
|
|
830
|
+
* ${t.signature??"(signature unavailable)"}
|
|
831
|
+
* ${a}
|
|
832
|
+
*
|
|
833
|
+
* Fill in the TODO input table below with inputs both twins should agree
|
|
834
|
+
* on, then run this file with vitest.
|
|
835
|
+
*/
|
|
836
|
+
import { describe, expect, it } from 'vitest';
|
|
837
|
+
import { ${e.shortName} as twinA } from '${o}';
|
|
838
|
+
import { ${t.shortName} as twinB } from '${s}';
|
|
839
|
+
|
|
840
|
+
// TODO: fill in shared inputs both twins should agree on \u2014 one arg array per call.
|
|
841
|
+
const inputs: any[][] = [
|
|
842
|
+
// [/* arg1, arg2, ... */],
|
|
843
|
+
];
|
|
844
|
+
|
|
845
|
+
// Cast to a variadic signature so the input table can hold any arg shape \u2014
|
|
846
|
+
// the real twins have fixed, non-rest parameter lists, and TS rejects
|
|
847
|
+
// spreading a generic args array into those (TS2556) even when the array
|
|
848
|
+
// itself is 'any'; casting the callee's signature, not the args, satisfies
|
|
849
|
+
// the checker without weakening the twins' real exported types elsewhere.
|
|
850
|
+
const callA = twinA as (...callArgs: any[]) => any;
|
|
851
|
+
const callB = twinB as (...callArgs: any[]) => any;
|
|
852
|
+
|
|
853
|
+
describe.skipIf(inputs.length === 0)('twin-ab: ${e.shortName} vs ${t.shortName}', () => {
|
|
854
|
+
it.each(inputs)('agrees on input %#', (...args) => {
|
|
855
|
+
expect(callA(...args)).toEqual(callB(...args));
|
|
856
|
+
});
|
|
857
|
+
});
|
|
858
|
+
`}var _w={caller:3,"entry-surface":2,rooted:1},v5=/not\s*yet\s*implement|not\s*implement|unimplement|\bnyi\b|\btodo\b|\bstub\b|not\s*supported|coming\s*soon/i,I5=/^throw\s+new\s+[\w.]*Error\s*\(([\s\S]*)\)\s*;?$/,w5=/^return(\s+(null|undefined|false|0|''|""|``|\[\]|\{\}))?\s*;?$/,E5=/\/\/\s*TODO\b|\/\*\s*TODO\b/i,D5=/(?:=>|\))\s*(?::\s*[^{;=]+)?\s*\{\s*\}\s*;?\s*$/;function P5(e,t={}){let{scope:n,limit:r=30,scanLimit:i,semantic:o=!0}=t,s=new F(e),a=de(s.productionCallableDefinitions({scope:n,minLoc:1,requireFunctionLikeSymbol:!0,excludeTypesFiles:!0}),i),c=[];for(let f of a){let p=T5(e,f);p&&c.push(p)}if(c.length===0)return[];let l=A5(e,c,a),u=c.filter(f=>!l.has(f.def.symbol));if(u.length===0)return[];let d=Fn(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=k5(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:j(f.def),stubKind:f.stubKind,reachability:y,callerFanIn:g,stubText:f.stubText})}return m.sort((f,p)=>_w[p.reachability]-_w[f.reachability]||p.callerFanIn-f.callerFanIn||f.file.localeCompare(p.file)||f.startLine-p.startLine),r?m.slice(0,r):m}function k5(e,t,n){return n>0?"caller":be(e,t.symbol,t.relativePath)?"rooted":He(e,t.relativePath)?"entry-surface":null}function T5(e,t){let n=An(e,t);if(!n)return null;let r=an(n),i=r.trim();if(i==="")return!L5(n)||!Ls(e,t)?null:{def:t,stubKind:"empty-body",stubText:"(empty body)"};let o=ho(r),s=xt(r),a=F5(o,s);if(a.length!==1)return null;let c=a[0];return _5(c)?{def:t,stubKind:"throw-stub",stubText:c.trim()}:E5.test(r)&&w5.test(c.trim())?{def:t,stubKind:"todo-return-default",stubText:i}:null}function F5(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 _5(e){let t=I5.exec(e.trim());return t?v5.test(t[1]??""):!1}function L5(e){return D5.test(e.trimEnd())}function A5(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=N5(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 M5=/\bclass\s+([A-Za-z_$][\w$]*)\s+extends\s+([A-Za-z_$][\w$]*)/g;function N5(e,t){let n=new Map;for(let r of A(e,{includeIgnored:!1})){let i=k(e,r);if(i)for(let o of i.matchAll(M5)){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 O5=/^(?:validate|verify|check|assert)(?:[A-Z].*)?$/,j5=/^(?:is|has)(?:[A-Z].*)?$/,B5=/[{,]\s*(?:ok|success|valid|isValid)\s*:\s*false\b/,kp=/\breturn\b/g,$5=/\bfunction\b|=>|\)\s*(?::\s*[^{;=]+)?\s*\{/,H5=/\.(?:addIssue|push)\s*\(/;function U5(e,t={}){let{scope:n,limit:r=30,scanLimit:i}=t,o=new F(e),s=de(o.productionCallableDefinitions({scope:n,minLoc:1,requireFunctionLikeSymbol:!0,excludeTypesFiles:!0}),i),a=[];for(let c of s){let l=G5(e,c);l&&a.push({symbol:c.symbol,shortName:I(c.symbol),file:c.relativePath,startLine:c.startLine,endLine:c.endLine,loc:j(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 q5(e){return O5.test(e)?"imperative":j5.test(e)?"predicate":null}function G5(e,t){let n=q5(t.leaf);if(!n||Ui(e,t))return null;let r=An(e,t);if(!r||!$5.test(r))return null;let i=K(e,t.relativePath)?.callables.find(s=>s.startLine===t.startLine&&s.endLine===t.endLine);if(n==="predicate"&&i?.paramCount===0)return null;if(YI(r)){let s=z5(e,t);return!s||Mw(s.body,Aw(s.snippet))||Lw(s.body)?null:{nameKind:n,resolvedVia:"one-hop-delegate",delegateTarget:s.shortName}}let o=an(r);return Mw(o,Aw(r))||Lw(o)?null:{nameKind:n,resolvedVia:"direct"}}var V5=new Set(["if","for","while","switch","catch","function"]);function Lw(e){let t=ho(e);for(let n of t.matchAll(/\b([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\s*\(/g))if(!V5.has(n[1]))return!0;return!1}function Aw(e){let t=e.indexOf("=>");return t===-1?!1:!/^\s*\{/.test(e.slice(t+2))}function Mw(e,t){let n=ho(e);if(/\bthrow\b/.test(n)||/\.reject\s*\(/.test(n)||B5.test(n)||H5.test(n))return!0;let r=W5(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 W5(e){let t=[];kp.lastIndex=0;let n;for(;n=kp.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()),kp.lastIndex=o}return t}function z5(e,t){let n=Tt(e,t,{callableOnly:!0,limit:3,semanticEvidence:q}),r=[...new Set(n.map(c=>c.symbol))].filter(c=>c!==t.symbol);if(r.length!==1)return null;let o=Co(e,r[0]).match;if(!o)return null;let s=Z(e,o.relativePath).find(c=>c.symbolId===o.symbolId);if(!s)return null;let a=An(e,s);return a?{body:an(a),snippet:a,shortName:I(s.symbol)}:null}var K5=60;function J5(e,t={}){let{scope:n,limit:r=30,scanLimit:i,rotDays:o=K5}=t,s=de(rt(e,{extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs"]}).filter(u=>z(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=k(e,u);if(!d)continue;let m=Jh(d),f=Q5(d);for(let g of nX(m,f))f.add(g);let p=Y5(m);for(let g of p){if(g.skip){c.push(lX(e,u,g,o));continue}if(g.kind==="describe")continue;let y=Ow(d,g.argsStart),h=m.slice(g.argsStart,g.callEnd),C=d.slice(g.argsStart,g.callEnd);jw(h,f)||a.push({file:u,startLine:Ns(d,g.callStart),endLine:Ns(d,g.callEnd),title:y,severity:/\bawait\b/.test(h)?"low":"high"});let b=sX(h,C);b&&l.push({file:u,startLine:Ns(d,g.callStart),endLine:Ns(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 Tp=/(?<!\.)\b(?:x(it|test|describe)|(it|test|describe)(?:\.\s*(skip|only|todo|each\s*\([^)]*\)))?)\s*\(/g;function Y5(e){let t=[];Tp.lastIndex=0;let n;for(;n=Tp.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=Os(e,a);Tp.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 Os(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 Ns(e,t){let n=0;for(let r=0;r<t&&r<e.length;r+=1)e[r]===`
|
|
859
|
+
`&&(n+=1);return n}function Ow(e,t){let n=e.slice(t,t+400),r=/^\s*(['"`])((?:\\.|(?!\1)[\s\S])*)\1/.exec(n);return r?r[2]:"(anonymous)"}var X5=new Set(["vitest","chai","jest","@jest/globals","assert","node:assert","node:assert/strict","assert/strict","uvu/assert","expect","chai-as-promised"]),Nw=/import\s+(?:\*\s+as\s+(\w+)|\{([^}]*)\}|(\w+))\s+from\s+['"]([^'"]+)['"]/g;function Q5(e){let t=new Set(["expect","assert"]);Nw.lastIndex=0;let n;for(;n=Nw.exec(e);){let[,r,i,o,s]=n;if(!(!s||!X5.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 jw(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 Z5=/\bfunction\s+(\w+)\s*\(/g,eX=/\b(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?\(/g,tX=60;function nX(e,t){let n=new Set;for(let r of[Z5,eX]){r.lastIndex=0;let i;for(;i=r.exec(e);){let o=i[1],s=i.index+i[0].length-1,a=Os(e,s),c=e.indexOf("{",a+1);if(c===-1||c-a>tX)continue;let l=rX(e,c),u=e.slice(c+1,l);jw(u,t)&&n.add(o)}}return n}function rX(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 iX=/\bmock(?:ReturnValue|ResolvedValue)(?:Once)?\s*\(/g,Fp=/\bexpect\s*\(/g,oX=/^\s*\.\s*(?:toBe|toEqual|toStrictEqual)\s*\(/,Bw=/^(?:-?\d+(?:\.\d+)?|(['"`]).+\1)$/;function sX(e,t){let n=aX(e,t,iX);if(n.length===0)return null;let r=cX(e,t);for(let i of r)if(n.includes(i))return i;return null}function aX(e,t,n){let r=[];n.lastIndex=0;let i;for(;i=n.exec(e);){let o=i.index+i[0].length-1,s=Os(e,o),a=t.slice(o+1,s).trim();Bw.test(a)&&r.push(a),n.lastIndex=s+1}return r}function cX(e,t){let n=[];Fp.lastIndex=0;let r;for(;r=Fp.exec(e);){let i=r.index+r[0].length-1,o=Os(e,i),s=e.slice(o+1),a=oX.exec(s);if(Fp.lastIndex=o+1,!a)continue;let c=o+1+a[0].length-1,l=Os(e,c),u=t.slice(c+1,l).trim();Bw.test(u)&&n.push(u)}return n}function lX(e,t,n,r){let i=k(e,t),o=Ow(i,n.argsStart),s=Ns(i,n.callStart),a=uX(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 uX(e,t,n){let r=n+1;try{let i=sn(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 dX=.7,$w=.62,Hw=.45;function mX(e,t={}){let{windowCommits:n=100,limit:r=30,scope:i,scanLimit:o}=t,s=at(e,{historyMode:t.historyMode}).fileAddRecords();if(!s)return{available:!1,windowCommits:n,findings:[]};if(r<=0)return{available:!0,windowCommits:n,findings:[]};let a=CX(s,n);if(a.size===0)return{available:!0,windowCommits:n,findings:[]};let l=fX(e,{limit:r,minSimilarity:t.minSimilarity,scanLimit:o,scope:i,semantic:t.semantic,focusFiles:Number.isFinite(r)?void 0:a}).map(d=>RX(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(vX);return{available:!0,windowCommits:n,findings:u,rootCauseGroups:IX(u)}}function fX(e,t){let n=EX(t.limit),r=[...pX(e,{scope:t.scope,minSimilarity:t.minSimilarity??dX,limit:n,scanLimit:t.scanLimit,semantic:t.semantic,focusFiles:t.focusFiles})],i=Sa(e,{scope:t.scope});return i.react&&r.push(...gX(e,{scope:t.scope,minSimilarity:t.minSimilarity??$w,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles}),...hX(e,{scope:t.scope,minSimilarity:t.minSimilarity??Hw,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles})),i.vue&&r.push(...SX(e,{scope:t.scope,minSimilarity:t.minSimilarity??$w,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles}),...xX(e,{scope:t.scope,minSimilarity:t.minSimilarity??Hw,limit:n,scanLimit:t.scanLimit,focusFiles:t.focusFiles})),r}function pX(e,t){return hs(e,{scope:t.scope,minSimilarity:t.minSimilarity,limit:t.limit,crossFileOnly:!0,scanLimit:t.scanLimit,semantic:t.semantic,focusFiles:t.focusFiles}).filter(n=>!Oe(n.symbolA)&&!Oe(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 gX(e,t){return Tl(e,t,{query:ys,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 Tl(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:DX(...n.evidenceBuckets(r)),sharedCallees:[]}))}function hX(e,t){return Tl(e,t,{query:bs,domain:"react-hook",basis:"react-behavior",symbolA:n=>n.componentA,symbolB:n=>n.componentB,acceptPair:bX,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 yX=new Set(["useCallback","useEffect","useLayoutEffect","useMemo","useMutation","useQueries","useQuery","useQueryClient","useReducer","useRef","useState"]);function bX(e){return e.sharedHooks.some(t=>!yX.has(t))||e.sharedState.length>0||e.sharedHandlers.length>0||e.sharedHandlerVerbs.length>=2}function SX(e,t){return Tl(e,t,{query:Ss,domain:"vue-component",basis:"vue-template",symbolA:n=>kl(n.fileA),symbolB:n=>kl(n.fileB),evidenceBuckets:n=>[["component",n.sharedComponents],["prop",n.sharedProps],["event",n.sharedEvents],["directive",n.sharedDirectives],["slot",n.sharedSlots],["identifier",n.sharedIdentifiers]]})}function xX(e,t){return Tl(e,t,{query:xs,domain:"vue-composable",basis:"vue-behavior",symbolA:n=>kl(n.fileA),symbolB:n=>kl(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 CX(e,t){let n=new Set;for(let[r,i]of e)i.commitsAgo<=t&&n.add(r);return n}function RX(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 vX(e){let t=Uw(e);return{...e,rootCauseKey:t,groupKey:`recent-duplicate:${t}`}}function Uw(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 IX(e){let t=new Map;for(let[n,r]of e.entries()){let i=r.rootCauseKey??Uw(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:wX(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 wX(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 EX(e){return Number.isFinite(e)?e*5:Number.POSITIVE_INFINITY}function DX(...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 kl(e){return(e.split("/").pop()??e).replace(/\.[^.]+$/,"")}var PX=ee("suppression-inventory",{clearGroups:["whole-project"]});function Fl(e){return PX.get(e,()=>kX(e))}function kX(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 rt(e)){let o=k(e,i);if(!(!o||!o.includes("scip-query")))for(let s of o.split(/\r?\n/)){let a=ao(s);if(a===null)continue;r+=1,n.set(i,(n.get(i)??0)+1);let c=TX(a);t[c]+=1}}return{total:r,byCategory:t,byFile:n}}function TX(e){if(!e)return"uncategorized";let t=e.toLowerCase();return t==="dead-code"?"dead":t}function _p(e,t,n={}){let r=H(e,t);if(!r)return null;let i=new F(e),o=FX(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:LX(e,r.symbolId),fanOut:AX(c,r.relativePath)}}function FX(e,t){let n=X(e,t.relativePath);if(n){let r=Ww(n.rootNode,t.startLine,t.endLine);if(r)return{branches:MX(r),estimateBasis:"ast"}}return{branches:Kw(Vw(e,t.relativePath,t.startLine,t.endLine),Gw(e,t.relativePath)),estimateBasis:"regex-fallback"}}function qw(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=X(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"});NX(s.rootNode,a,n)}for(let l of o)c.has(l.symbolId)||n.set(l.symbolId,_X(e,l))}return n}function _X(e,t){return{branches:Kw(Vw(e,t.relativePath,t.startLine,t.endLine),Gw(e,t.relativePath)),estimateBasis:"regex-fallback"}}function Gw(e,t){return e.get("SELECT language FROM documents WHERE relative_path = ?",t)?.language??"unknown"}function Vw(e,t,n,r){try{return Re(e.config.projectRoot,t,{inputKind:"indexed source file"}).split(`
|
|
860
|
+
`).slice(n,r+1).join(`
|
|
861
|
+
`)}catch(i){if(!_e(i))throw i;return""}}function LX(e,t){return e.get(`SELECT COUNT(DISTINCT c.document_id) AS c
|
|
862
|
+
FROM mentions m
|
|
863
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
864
|
+
JOIN (
|
|
865
|
+
SELECT m2.symbol_id, c2.document_id
|
|
866
|
+
FROM mentions m2
|
|
867
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
868
|
+
WHERE m2.role = 1
|
|
869
|
+
GROUP BY m2.symbol_id
|
|
870
|
+
) sym_def ON sym_def.symbol_id = m.symbol_id
|
|
871
|
+
WHERE m.symbol_id = ?
|
|
872
|
+
AND m.role != 1
|
|
873
|
+
AND sym_def.document_id != c.document_id`,t)?.c??0}function AX(e,t){return new Set(e.filter(n=>n.file!==t).map(n=>n.symbol)).size}function MX(e){let t=0;return Lp(e,n=>{t+=zw(n)}),t}function NX(e,t,n){let r=[...t].sort((i,o)=>i.startLine-o.startLine||o.endLine-i.endLine);Lp(e,i=>{let o=zw(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 Lp(e,t){t(e);for(let n of e.namedChildren)Lp(n,t)}function Ww(e,t,n){if(e.startPosition.row>t||e.endPosition.row<n)return null;for(let r of e.namedChildren){let i=Ww(r,t,n);if(i)return i}return e}var OX=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 zw(e){return OX.has(e.type)?1:e.type==="binary_expression"&&e.parent?.type!=="binary_expression"&&(e.text.includes("&&")||e.text.includes("||"))?jX(e.text):0}function jX(e){return(e.match(/&&|\|\|/g)??[]).length}function Kw(e,t){let n=xt(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 Ap(e,t,n={}){let r=H(e,t);if(!r)return null;let i=[{file:r.relativePath,line:r.startLine}],o=Yt(e,r,{semantic:n.semantic,semanticEvidence:q}).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}=BX(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 BX(e,t,n,r){let i=Hi(Tt(e,t,{limit:30,semantic:r.semantic,semanticEvidence:q}).map(a=>({symbol:a.symbol,file:a.file}))),o=Hi($t(e,t,{limit:30,semantic:r.semantic,semanticEvidence:q})),s=o.length>0?o:Hi(n.map(a=>({symbol:a.enclosingSymbol==="(top-level)"?a.file:a.enclosingSymbol,file:a.file})));return{producers:i,consumers:s}}function _l(e,t,n={}){let{direction:r="backward",maxDepth:i=3}=n,o=H(e,t);return o?r==="backward"?$X(e,o,i,{semantic:n.semantic!==!1}):HX(e,o,{semantic:n.semantic!==!1}):null}function $X(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=Tt(e,l,{semantic:r.semantic,semanticEvidence:q});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=Ro(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 HX(e,t,n){let r=new Set,i=[],o=new F(e);for(let s of Yt(e,t,{semantic:n.semantic,semanticEvidence:q})){if(i.length>=30)break;let a=s.enclosingSymbol??Jt(o.definitionsForFile(s.file),s.line)?.symbol??null;if(!a||a===t.symbol)continue;let c=Ro(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 UX(e,t,n={}){let r=n.impactDepth??3,i=n.sliceDepth??3,o=n.semantic,s=!GX(t),a=s?ze("trace",t,()=>bf(e,t,{semantic:o}),R=>({definitions:R.definitions.length,references:R.referencedBy.length})):{definitions:[],referencedBy:[]},c=s?ze("call-graph",t,()=>Pf(e,t,{semantic:o}),R=>({callers:R?.callers.length??0,callees:R?.callees.length??0})):null,l=s?ze("complexity",t,()=>_p(e,t,{semantic:o}),R=>({callees:R?.calleeCount??0})):null,u=s?ze("dataflow",t,()=>Ap(e,t,{semantic:o}),R=>({references:R?.usageSites.length??0,producers:R?.producers.length??0,consumers:R?.consumers.length??0})):null,d=s?ze("backward-slice",t,()=>_l(e,t,{direction:"backward",maxDepth:i,semantic:o}),R=>({maxDepth:i,connectedSymbols:R?.connectedSymbols.length??0})):null,m=s?ze("forward-slice",t,()=>_l(e,t,{direction:"forward",maxDepth:i,semantic:o}),R=>({maxDepth:i,connectedSymbols:R?.connectedSymbols.length??0})):null,f=s?ze("affected",t,()=>Gf(e,t,{maxDepth:r,scope:n.scope}),R=>({maxDepth:r,affectedSymbols:R.length})):[],p=ze("change-surface",t,()=>Vf(e,t,{semantic:o}),R=>({symbols:R?.symbols.length??0,externalConsumers:R?.totalExternalConsumers??0})),g=ze("system",t,()=>Cf(e,t),R=>({files:R.files.length,symbols:R.symbols.length})),y=g.files.length===1,h=ze("deps",t,()=>y?g.dependsOn.map(R=>({relativePath:R})):Sf(e,t),R=>({files:R.length,reusedSystem:y})),C=ze("rdeps",t,()=>y?g.dependedOnBy.map(R=>({relativePath:R})):xf(e,t),R=>({files:R.length,reusedSystem:y})),b=ze("surface",t,()=>Rf(e,t),R=>({consumers:R.length})),S={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||C.length>0,module:g.files.length>0||g.symbols.length>0||b.length>0},x=[];!S.symbol&&!S.file&&!S.module&&x.push("No symbol, file, or module matched target.");let v=p?.file??a.definitions[0]?.relativePath??null;return{target:t,matched:S,history:ze("history",v??t,()=>qX(e,v,n.gitHead)),trace:a,callGraph:c,complexity:l,dataflow:u,backwardSlice:d,forwardSlice:m,affected:f,changeSurface:p,deps:h,rdeps:C,system:g,surface:b,warnings:x}}function ze(e,t,n,r=()=>({})){let i;return E(`plan-context.${e}`,()=>(i=n(),i),()=>({target:t,...r(i)}))}function qX(e,t,n){let r={available:!1,file:t,churn:null,coChangePartners:[],suppressionsInFile:0};if(!t)return r;let i=at(e,n?{head:n}:{}),o=ze("history.churn",t,()=>i.fileChurn(),c=>({files:c?.size??0}));if(!o)return r;let s=ze("history.co-change",t,()=>vs(e,t,{limit:5,...n?{head:n}:{}}),c=>({commits:c.commitsAnalyzed,partners:c.findings.length})),a=ze("history.suppressions",t,()=>Fl(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 GX(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z0-9]+(?::\d+(?:-\d+)?)?$/.test(e)}var VX=new Set(nn());function Mp(e,t){let{scope:n,minLoc:r=10,limit:i=30,scanLimit:o}=t??{},s=new F(e);return _t({candidates:()=>s.productionCallableDefinitions({scope:n,minLoc:r,requireFunctionLikeSymbol:!0,includeSuppressed:!0,sortByLocDesc:typeof o=="number"&&o>0}),scanLimit:o,filterCandidate:WX,profile:{name:"complexity-hotspots"},prepare:a=>{let c=KX(e,a),l=t?.semantic!==!1,u=l?st(e):null;u?.materializeReferences(a,{prefetchCallees:!0});let d=s.crossFileCallerMap(a,{semantic:!1});return{callerMap:u?Tn(d,u.callerMap(a)):d,calleeMap:s.calleeMap(a,{semantic:l}),languageByFile:c,clojureCallableIds:JX(e,a,c),branchEstimates:qw(e,a)}},evaluate:(a,c)=>zX(a,c,r),orderResults:(a,c)=>c.score-a.score||c.loc-a.loc,limit:i})}function WX(e){return e.symbol.startsWith("rust-analyzer ")?typeof e.kind=="number"&&VX.has(e.kind):!0}function zX(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 KX(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
|
|
874
|
+
FROM documents
|
|
875
|
+
WHERE relative_path IN (${r})`,...n);return new Map(i.map(o=>[o.relative_path,o.language?.toLowerCase()??null]))}function JX(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((K(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}import{createHash as YX,randomUUID as XX}from"crypto";function qt(e,t){return`${e}\0${t}`}function gCe(e,t,n,r,i,o={}){let s=new Map(e.map(l=>[qt(l.check,l.findingId),l])),a=[],c=(l,u)=>{let d=n.get(l.findingId),m=u==="resolved"?o.verifiedAgainstByFinding?.get(qt(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(qt(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 hCe(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 QX(e,t,n,r,i=new Set){let o=new Map(e.map(c=>[qt(c.check,c.findingId),c])),s=new Set(t.map(c=>qt(c.check,c.findingId))),a=new Set(n);for(let c of t){let l=qt(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=qt(c.check,c.findingId);s.has(l)||i.has(l)||c.outcome!=="resolved"&&o.set(l,{...c,outcome:"resolved"})}return[...o.values()]}function Np(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)/Yw):null})}return r.sort((i,o)=>i.check.localeCompare(o.check))}var Yw=864e5,ZX=50,eQ=.1,tQ=10;function nQ(e,t,n){return e.filter(r=>r.check===t).sort((r,i)=>i.firstSeen-r.firstSeen).slice(0,n)}function CCe(e,t,n){if(t.length===0)return null;let r=new Map(e.map(s=>[qt(s.check,s.findingId),s])),i=t.map(s=>r.get(qt(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)/Yw)));return`${t.length} finding(s), ${i.length} shown before and unresolved (oldest: ${o} day(s))`}function RCe(e,t){let n=[];for(let r of[...new Set(t)].sort()){let i=nQ(e,r,ZX);i.length<tQ||i.filter(a=>a.outcome==="resolved").length/i.length>=eQ||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 Op(e){return vg(e).map(Ll)}function vCe(e,t,n,r=Date.now(),i=new Set,o=XX(),s){let a=rQ(t),c=[...new Set(n)].sort(),l=new Set([...i].sort()),u=YX("sha256").update(JSON.stringify({checksRun:c,observed:a,observedAt:r,retainedKeys:[...l]})).digest("hex"),d=Ig(e,{observationId:o,fingerprint:u,observedAt:r},m=>QX(m.map(Ll),a,c,r,l),s===void 0?{}:{busyTimeoutMs:s});return{observationId:o,status:d.status,previous:d.previous.map(Ll),current:d.current.map(Ll)}}function rQ(e){let t=new Map;for(let n of e){let r=qt(n.check,n.findingId),i=t.get(r);t.set(r,{check:n.check,findingId:n.findingId,suppressed:n.suppressed||(i?.suppressed??!1)})}return[...t.values()].sort((n,r)=>Jw(n.check,r.check)||Jw(n.findingId,r.findingId))}function Jw(e,t){return e<t?-1:e>t?1:0}function Ll(e){return{check:e.check,findingId:e.findingId,firstSeen:e.firstSeen,lastSeen:e.lastSeen,timesShown:e.timesShown,outcome:e.outcome}}function Mn(e){return e.scoreCount??e.count}function Zw(e){let t=aQ(e),{breakdown:n,pressure:r}=cQ(e),i=Qw(n,"risk"),o=Qw(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:Mn(e.reactHookCandidates),reactLargeComponentPressureFiles:e.reactLargeComponentPressure.count,vueComponentDuplicatePairs:e.vueComponentDuplicates.count,vueComposableCandidatePairs:e.vueComposableCandidates.count,vueComposableCandidateScoreCount:Mn(e.vueComposableCandidates),vueLargeViewPressureFiles:e.vueLargeViewPressure.count,extractionCandidates:e.extractCount,wrappers:e.wrappers.count,wrapperScoreCount:Mn(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:iQ(e),validation:sQ(e),suppressions:e.suppressions,actions:t,pressure:r,topComplexity:e.complexity.top,warnings:e.warnings.length>0?e.warnings:void 0,detectorPrecision:[]}}function iQ(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:oQ(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 oQ(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:ln(n.score*Math.log2(1+r))}}).sort((n,r)=>r.weighted-n.weighted):null}function sQ(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?ln(i/r.size):0,c=s>0?ln(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=ln(f/m.size);l[u]={flaggedFiles:m.size,fixDensity:p,lift:c>0?ln(p/c):null}}return{flaggedFiles:r.size,flaggedFixDensity:a,baselineFixDensity:c,ratio:r.size>0&&c>0?ln(a/c):null,byCategory:l,validationBasis:{method:"subject-regex",commitsScanned:e.gitEvidence?.commitsScanned??0}}}function ln(e){return Math.round(e*100)/100}function eE(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function Al(e,t="existing shared infrastructure discount"){let n=Mn(e);return Math.abs(n-e.count)<.01?"":` (${eE(n)} score-weighted after ${t})`}function js(e,t){let n=Mn(e),r=`${e.count} ${t}`;return Math.abs(n-e.count)<.01?r:`${r} (${eE(n)} score-weighted)`}function aQ(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${Al(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${Al(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${Al(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`+Al({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 Xw={"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 Qw(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 cQ(e){let t=Math.max(e.statsResult.documents,1),n=Math.max(e.statsResult.symbols,1),r=[],i=[],o=(R,D,w)=>{D>0&&r.push({axis:R,points:D,detail:w,kind:Xw[R]??"hygiene"})},s=(R,D,w,P,L,ie,ne)=>{let _=Math.max(P,1);if(w<=_)return;let me=w/_,oe=Math.min(L,Math.ceil(Math.log2(me)*ie));if(oe<=0)return;let Nn=Xw[R]??"hygiene";i.push({axis:R,category:D,kind:Nn,count:w,threshold:ln(_),ratio:ln(me),extraPenalty:oe}),o(R,oe,`${w} ${ne} exceed pressure threshold ${ln(_)} (${ln(me)}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=Mn(e.reactHookCandidates),p=f/t*1e3;o("react-hook-candidates",Math.min(10,Math.round(p)),js(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=Mn(e.vueComposableCandidates),C=h/t*1e3;o("vue-composable-candidates",Math.min(10,Math.round(C)),js(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 S=Mn(e.wrappers);o("wrappers",Math.min(3,S),js(e.wrappers,"wrapper candidate(s)"));let x=Mn(e.passthroughs);o("passthroughs",Math.min(3,x),js(e.passthroughs,"passthrough candidate(s)")),o("stale-abstractions",Math.min(8,e.stale.unused),`${e.stale.unused} unused stale abstraction(s); ${e.stale.singleUse} single-consumer signal(s)`);let v=e.drift.direct/t;if(o("drift",Math.min(5,Math.round(v*50)),`${e.drift.direct} direct drift finding(s); ${e.drift.signal} signal drift finding(s)`),o("complexity",Math.min(5,e.complexity.extremeCount*2),`${e.complexity.extremeCount} extreme complexity hotspot(s)`),e.gitEvidence){let R=e.gitEvidence.hiddenCoupling.scoreCount;o("hidden-coupling",Math.min(5,Math.ceil(R/10)),js({count:e.gitEvidence.hiddenCoupling.pairCount,scoreCount:R},"co-changing pair(s) without a structural link"))}if(s("cycles-pressure","Circular dependencies",e.realCycleCount,3,10,3,"cycle(s)"),s("complexity-pressure","Extreme complexity",e.complexity.extremeCount,3,5,2,"extreme complexity hotspot(s)"),e.gitEvidence){let R=e.gitEvidence.hiddenCoupling.scoreCount;s("hidden-coupling-pressure","Hidden coupling",R,50,10,4,"score-weighted co-changing pair(s)")}return s("similar-pressure","Similar functions",e.similarCount,Math.max(50,n*.01),8,4,"similar function pair(s)"),s("duplicate-bodies-pressure","Duplicate function bodies",e.duplicateBodies.count,Math.max(20,n*.005),8,4,"exact duplicate small-body group(s)"),s("twin-drift-pressure","Drifted twin implementations",e.twinDrift.count,Math.max(20,n*.005),8,4,"drifted twin implementation group(s)"),s("react-component-duplicates-pressure","Duplicated React components",e.reactComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated React component pair(s)"),s("react-hook-candidates-pressure","Duplicated React hook behavior",f,Math.max(10,t*.01),8,4,"duplicated React behavior pair(s)"),s("react-large-component-pressure-pressure","Large React components",e.reactLargeComponentPressure.count,Math.max(10,t*.01),4,2,"large React component pressure file(s)"),s("vue-component-duplicates-pressure","Duplicated Vue components",e.vueComponentDuplicates.count,Math.max(10,t*.01),8,4,"duplicated Vue component pair(s)"),s("vue-composable-candidates-pressure","Duplicated Vue behavior",h,Math.max(10,t*.01),8,4,"duplicated Vue behavior pair(s)"),s("vue-large-view-pressure-pressure","Large Vue views",e.vueLargeViewPressure.count,Math.max(10,t*.01),4,2,"large Vue view pressure file(s)"),s("extract-pressure","Extraction candidates",e.extractCount,Math.max(50,n*.01),4,2,"extraction candidate(s)"),s("wrappers-pressure","Wrapper functions",S,50,4,2,"wrapper candidate(s)"),s("passthroughs-pressure","Passthrough functions",x,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 lQ}from"v8";var uQ=64*1024*1024;function jp(){let e=globalThis.gc;if(!e)return;let t=lQ();t.heap_size_limit-t.used_heap_size<uQ||e()}var dQ=50,mQ=25e3,fQ=2500,tE=2500,nE=50,pQ=10,Ml=["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"],gQ={overview:(e,t,n,r)=>({phase:"overview",statsResult:r,warnings:n.warnings}),dead:(e,t,n)=>({phase:"dead",dead:SQ(e,t,n)}),isolated:(e,t,n)=>({phase:"isolated",isolated:xQ(e,t,n)}),cycles:(e,t,n)=>({phase:"cycles",realCycleCount:CQ(e,t,n)}),similar:(e,t,n)=>({phase:"similar",similarCount:RQ(e,t,n)}),"duplicate-bodies":(e,t,n)=>({phase:"duplicate-bodies",duplicateBodies:IQ(e,t,n)}),"twin-drift":(e,t,n)=>({phase:"twin-drift",twinDrift:wQ(e,t,n)}),"react-component-duplicates":(e,t,n)=>({phase:"react-component-duplicates",reactComponentDuplicates:EQ(e,t,n)}),"react-hook-candidates":(e,t,n)=>({phase:"react-hook-candidates",reactHookCandidates:DQ(e,t,n)}),"react-large-component-pressure":(e,t,n)=>({phase:"react-large-component-pressure",reactLargeComponentPressure:PQ(e,t,n)}),"vue-component-duplicates":(e,t,n)=>({phase:"vue-component-duplicates",vueComponentDuplicates:kQ(e,t,n)}),"vue-composable-candidates":(e,t,n)=>({phase:"vue-composable-candidates",vueComposableCandidates:TQ(e,t,n)}),"vue-large-view-pressure":(e,t,n)=>({phase:"vue-large-view-pressure",vueLargeViewPressure:FQ(e,t,n)}),"extract-candidates":(e,t,n)=>({phase:"extract-candidates",extractCount:vQ(e,t,n)}),"wrapper-candidates":(e,t,n)=>({phase:"wrapper-candidates",wrappers:_Q(e,t,n)}),"passthrough-candidates":(e,t,n)=>({phase:"passthrough-candidates",passthroughs:LQ(e,t,n)}),"stale-abstractions":(e,t,n)=>({phase:"stale-abstractions",stale:AQ(e,t,n)}),drift:(e,t,n)=>({phase:"drift",drift:jQ(e,t,n)}),"complexity-hotspots":(e,t,n)=>({phase:"complexity-hotspots",complexity:BQ(e,t,n)}),"git-evidence":(e,t,n)=>({phase:"git-evidence",gitEvidence:MQ(e,n)}),suppressions:(e,t,n)=>({phase:"suppressions",suppressions:NQ(e,n)}),"coverage-contracts":(e,t,n)=>({phase:"coverage-contracts",coverageContracts:OQ(e,n)})};function Bp(e,t,n={}){return hQ(e,[t],n)[0]}function hQ(e,t,n={}){return yQ(e,n.full!==!1,(r,i)=>{let o={...i,releaseCachesBetweenPhases:!1};return t.map(s=>gQ[s](e,n.scope,o,r))})}function yQ(e,t,n){let r=Ur(e),i=$Q(r,t);try{return n(r,i)}finally{wf(e,{semanticProvider:!0}),jp()}}function $p(e){return Zw(bQ(e))}function bQ(e){let t=we(e,"overview");return{statsResult:t.statsResult,warnings:t.warnings,dead:we(e,"dead").dead,isolated:we(e,"isolated").isolated,realCycleCount:we(e,"cycles").realCycleCount,similarCount:we(e,"similar").similarCount,duplicateBodies:we(e,"duplicate-bodies").duplicateBodies,twinDrift:we(e,"twin-drift").twinDrift,reactComponentDuplicates:we(e,"react-component-duplicates").reactComponentDuplicates,reactHookCandidates:we(e,"react-hook-candidates").reactHookCandidates,reactLargeComponentPressure:we(e,"react-large-component-pressure").reactLargeComponentPressure,vueComponentDuplicates:we(e,"vue-component-duplicates").vueComponentDuplicates,vueComposableCandidates:we(e,"vue-composable-candidates").vueComposableCandidates,vueLargeViewPressure:we(e,"vue-large-view-pressure").vueLargeViewPressure,extractCount:we(e,"extract-candidates").extractCount,wrappers:we(e,"wrapper-candidates").wrappers,passthroughs:we(e,"passthrough-candidates").passthroughs,stale:we(e,"stale-abstractions").stale,drift:we(e,"drift").drift,complexity:we(e,"complexity-hotspots").complexity,gitEvidence:rE(e,"git-evidence")?.gitEvidence??null,suppressions:rE(e,"suppressions")?.suppressions??null,coverageContracts:we(e,"coverage-contracts").coverageContracts}}function rE(e,t){return e.find(n=>n.phase===t)}function we(e,t){let n=e.find(r=>r.phase===t);if(!n)throw new Error(`Missing health phase result: ${t}`);return n}function SQ(e,t,n){return xe(e,n,"dead",()=>{let r=qr(e,{scope:t,...Se.dead,scanLimit:n.candidateScanLimit,semantic:n.semantic});return Nl(qQ(e,r.symbols))})}function xQ(e,t,n){return xe(e,n,"isolated",()=>{let r=gs(e,{scope:t,...Se.isolated,scanLimit:n.candidateScanLimit,semantic:n.semantic});return Nl(GQ(e,r))})}function CQ(e,t,n){return xe(e,n,"cycles",()=>fs(e,{scope:t}).filter(i=>i.kind==="real").length)}function RQ(e,t,n){let r=xe(e,n,"similar",()=>Af(e,{scope:t,...Se.similar,scanLimit:n.candidateScanLimit,semantic:n.semantic}));return Math.min(r,n.candidateResultLimit)}function vQ(e,t,n){return xe(e,n,"extract-candidates",()=>Cs(e,{scope:t,...Se.extract,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic}).length)}function IQ(e,t,n){return xe(e,n,"duplicate-bodies",()=>{let r=Ps(e,{scope:t,...Se.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 wQ(e,t,n){return xe(e,n,"twin-drift",()=>{let r=Xi(e,{scope:t,...Se.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 EQ(e,t,n){return xe(e,n,"react-component-duplicates",()=>{let r=ys(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Hp(r)})}function DQ(e,t,n){return xe(e,n,"react-hook-candidates",()=>{let r=bs(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return sE(r,WQ)})}function PQ(e,t,n){return xe(e,n,"react-large-component-pressure",()=>{let r=Mf(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return VQ(r)})}function kQ(e,t,n){return xe(e,n,"vue-component-duplicates",()=>{let r=Ss(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Hp(r)})}function TQ(e,t,n){return xe(e,n,"vue-composable-candidates",()=>{let r=xs(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return sE(r,zQ)})}function FQ(e,t,n){return xe(e,n,"vue-large-view-pressure",()=>{let r=Nf(e,{scope:t,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit});return Nl(r)})}function _Q(e,t,n){return xe(e,n,"wrapper-candidates",()=>{let r=Ms(e,{scope:t,...Se.wrappers,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return oE(r,KQ)})}function LQ(e,t,n){return xe(e,n,"passthrough-candidates",()=>{let r=_s(e,{scope:t,...Se.passthroughs,limit:n.candidateResultLimit,scanLimit:n.candidateScanLimit,semantic:n.semantic});return oE(r,JQ)})}function AQ(e,t,n){return xe(e,n,"stale-abstractions",()=>{let r=As(e,{scope:t,...Se.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 MQ(e,t){return xe(e,t,"git-evidence",()=>{let n=at(e,{historyMode:t.gitHistoryMode}),r=n.fileChurn();if(!r)return null;let i=n.commitHistory(),o=vs(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:Up(o.findings.reduce((a,c)=>a+iE(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:iE(a),subjectContext:a.subjectContext}))},fileStats:s,commitsScanned:i?.commits.length??0}})}function NQ(e,t){return xe(e,t,"suppressions",()=>{let n=Fl(e);return{total:n.total,byCategory:{...n.byCategory}}})}function OQ(e,t){return xe(e,t,"coverage-contracts",()=>{let n=e.config.coverageContracts??[],i=nw(e,n).filter(o=>o.status!=="ok");return{count:i.length,loc:0,files:[...new Set(i.map(o=>o.file))].sort()}})}function jQ(e,t,n){return xe(e,n,"drift",()=>{let r=Fs(e,{scope:t,...Se.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 BQ(e,t,n){return xe(e,n,"complexity-hotspots",()=>{let r=Mp(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>dQ).length}})}function $Q(e,t){let n=e.symbols>=mQ||e.documents>=fQ,r=t?Number.POSITIVE_INFINITY:nE,i=t?Number.POSITIVE_INFINITY:pQ;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:tE,candidateResultLimit:r,complexityResultLimit:i,semantic:!1,gitHistoryMode:"bounded",releaseCachesBetweenPhases:!0,warnings:[`Large index detected; candidate-style health checks scanned their highest-priority ${tE} symbols and reported their top ${nE} findings. Enable full mode for unbounded candidate counts.`]}}function HQ(e,t){t.releaseCachesBetweenPhases&&(wf(e),jp())}function xe(e,t,n,r){UQ(n);try{return r()}finally{HQ(e,t)}}function UQ(e){process.env.SCIP_QUERY_HEALTH_TRACE==="1"&&console.error(`[health] ${e}`)}function qQ(e,t){return t.filter(n=>!He(e,n.relativePath)&&!be(e,n.symbol,n.relativePath)&&n.kind==="dead-code")}function GQ(e,t){return t.filter(n=>!He(e,n.relativePath)&&!be(e,n.symbol,n.relativePath))}function Nl(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 oE(e,t){return{...Nl(e),scoreCount:Up(e.reduce((r,i)=>r+t(i),0))}}function VQ(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 Hp(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 sE(e,t){return{...Hp(e),scoreCount:Up(e.reduce((r,i)=>r+t(i),0))}}function WQ(e){let t=e.sharedHooks.length>0,n=aE({namedState:e.sharedState,requests:e.sharedRequests,lifecycle:e.sharedEffects,functions:e.sharedHandlers});return t&&n<=2?0:t?.5:cE(e.sharedState,e.sharedHandlers,e.sharedHandlerVerbs)?.25:n>=2?1:.5}function zQ(e){let t=e.sharedComposables.length+e.sharedStores.length>0,n=aE({namedState:e.sharedBindings,requests:e.sharedRequests,lifecycle:e.sharedLifecycle,functions:e.sharedFunctions});return t&&n<=2?0:t?.5:cE(e.sharedBindings,e.sharedFunctions,e.sharedFunctionVerbs)?.25:n>=2?1:.5}function aE(e){return e.requests.length*2+e.lifecycle.length+e.namedState.filter(t=>!uE.has(lE(t))).length+Math.min(e.functions.length,3)}function cE(e,t,n){let r=[...e,...t,...n].map(lE);return r.length>0&&r.every(i=>uE.has(i))}function lE(e){return e.replace(/^handle/,"").replace(/^is/,"").replace(/^has/,"").toLowerCase()}function KQ(e){return e.actionTier==="signal"?.25:1}function JQ(e){return e.actionTier==="signal"?.25:1}function iE(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 Up(e){return Math.round(e*100)/100}var uE=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 YQ(e,t,n,r={}){let i=Lf(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 XQ(e,t={}){let{scope:n,limit:r}=t,i=new F(e),o=o4([...QQ(e,n),...t4(e,i,n)]);return s4(o),r?o.slice(0,r):o}function QQ(e,t){let n=[];for(let r of ZQ(e,t)){if(e.isIgnored(r.barrel_path)||e.isIgnored(r.original_path)||ff(e,r.barrel_path)||k(e,r.barrel_path)&&Pa(e,r.barrel_path).length===0)continue;let i=e4(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,...mE(e,r.barrel_path)})}return n}function ZQ(e,t){let n=t?"AND barrel_d.relative_path LIKE ?":"",r=t?[`%${t}%`]:[];return e.all(`SELECT DISTINCT
|
|
876
|
+
barrel_d.id AS barrel_doc_id,
|
|
877
|
+
barrel_d.relative_path AS barrel_path,
|
|
878
|
+
gs.id AS symbol_id,
|
|
879
|
+
gs.symbol AS symbol,
|
|
880
|
+
orig_d.id AS original_doc_id,
|
|
881
|
+
orig_d.relative_path AS original_path
|
|
882
|
+
FROM mentions m
|
|
883
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
884
|
+
JOIN documents barrel_d ON c.document_id = barrel_d.id
|
|
885
|
+
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
886
|
+
JOIN (
|
|
887
|
+
SELECT m2.symbol_id, c2.document_id
|
|
888
|
+
FROM mentions m2
|
|
889
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
890
|
+
WHERE m2.role = 1
|
|
891
|
+
GROUP BY m2.symbol_id
|
|
892
|
+
) sym_def ON sym_def.symbol_id = gs.id
|
|
893
|
+
JOIN documents orig_d ON sym_def.document_id = orig_d.id
|
|
894
|
+
WHERE m.role != 1
|
|
895
|
+
AND (barrel_d.relative_path LIKE '%/index.ts'
|
|
896
|
+
OR barrel_d.relative_path LIKE '%/index.js'
|
|
897
|
+
OR barrel_d.relative_path = 'index.ts'
|
|
898
|
+
OR barrel_d.relative_path = 'index.js')
|
|
899
|
+
AND orig_d.id != barrel_d.id
|
|
900
|
+
${e.pathExclusionsFor("barrel_d","orig_d")}
|
|
901
|
+
${e.symbolNoiseFor("gs")}
|
|
902
|
+
-- Only function-level symbols (ending with ().), not module-level
|
|
903
|
+
AND gs.symbol LIKE '%().'
|
|
904
|
+
${n}
|
|
905
|
+
ORDER BY barrel_d.relative_path, gs.symbol`,...r)}function e4(e,t){return e.get(`SELECT
|
|
906
|
+
SUM(CASE WHEN uses_barrel = 1 THEN 1 ELSE 0 END) AS barrel_consumers,
|
|
907
|
+
SUM(CASE WHEN uses_barrel = 0 THEN 1 ELSE 0 END) AS direct_consumers
|
|
908
|
+
FROM (
|
|
909
|
+
SELECT
|
|
910
|
+
consumer_d.id AS consumer_doc_id,
|
|
911
|
+
MAX(CASE WHEN EXISTS (
|
|
912
|
+
SELECT 1
|
|
913
|
+
FROM mentions barrel_m
|
|
914
|
+
JOIN chunks barrel_c ON barrel_m.chunk_id = barrel_c.id
|
|
915
|
+
WHERE barrel_c.document_id = consumer_d.id
|
|
916
|
+
AND barrel_m.role != 1
|
|
917
|
+
AND barrel_m.symbol_id IN (
|
|
918
|
+
SELECT m2.symbol_id
|
|
919
|
+
FROM mentions m2
|
|
920
|
+
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
921
|
+
WHERE c2.document_id = ?
|
|
922
|
+
AND m2.role != 1
|
|
923
|
+
)
|
|
924
|
+
) THEN 1 ELSE 0 END) AS uses_barrel
|
|
925
|
+
FROM mentions ref_m
|
|
926
|
+
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
927
|
+
JOIN documents consumer_d ON ref_c.document_id = consumer_d.id
|
|
928
|
+
WHERE ref_m.symbol_id = ?
|
|
929
|
+
AND ref_m.role != 1
|
|
930
|
+
AND consumer_d.id != ?
|
|
931
|
+
AND consumer_d.id != ?
|
|
932
|
+
${e.pathExclusionsFor("consumer_d")}
|
|
933
|
+
GROUP BY consumer_d.id
|
|
934
|
+
)`,t.barrel_doc_id,t.symbol_id,t.barrel_doc_id,t.original_doc_id)}function t4(e,t,n){let r=[];for(let i of n4(e,n))fE(e,i,i)>0||r.push(...r4(e,t,i));return r}function n4(e,t){return A(e,{scope:t,includeIgnored:!1}).filter(n=>Pa(e,n).length>0||Sn(e,n).length>0)}function r4(e,t,n){let r=Pa(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>dE(e,t,n,o.sourcePath,[i4(o.specifier)])),i=Sn(e,n).filter(o=>o.sourcePath&&!e.isIgnored(o.sourcePath)).flatMap(o=>dE(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 dE(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:fE(e,r,n),...mE(e,n)}})}function i4(e){return e.split("::").at(-1)?.split("/").at(-1)?.replace(/\.[^.]+$/,"")??e}function mE(e,t){return Hr(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 fE(e,t,n){let r=new Set;for(let i of A(e,{includeIgnored:!1}))if(i!==n)for(let o of re(e,i))o.sourcePath===t&&r.add(i);return r.size}function o4(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 s4(e){e.sort((t,n)=>n.directConsumers-t.directConsumers||t.barrelFile.localeCompare(n.barrelFile)||t.shortName.localeCompare(n.shortName))}function a4(e,t={}){let{samples:n=50,scope:r,maxDisagreements:i=5}=t,o=new F(e),s=c4(o.productionCallableDefinitions({scope:r,minLoc:2,requireFunctionLikeSymbol:!0}),n),a=l4(e,s);if(s.length===0||!a)return{available:!1,sampleSize:s.length,oracleCoverage:0,scores:[],topDisagreements:[]};let c={references:pE(),callees:pE()},l=[],u=0,d=a==="semantic"?bc(e,s):new Map,m=a==="source"?m4(e,o,s):null;for(let f of s){let p=Ol(f,a==="semantic"?yc(e,f).map(S=>S.file):[...m?.referencesBySymbolId.get(f.symbolId)??[]]),g=Ol(f,a==="semantic"?(d.get(f.symbolId)??[]).map(S=>S.file):[...m?.calleesBySymbolId.get(f.symbolId)??[]]);u+=1;let y=Ol(f,Yt(e,f,{semanticEvidence:q}).map(S=>S.file)),h=Ol(f,(o.calleeMap([f],{semantic:!1}).get(f.symbolId)??[]).map(S=>S.file)),C=qp(a,"references"),b=qp(a,"callees");gE(c.references,f,"references",y,p,C,l),gE(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?Vp(u/s.length):0,oracleKind:a,scores:["references","callees"].map(f=>d4(f,c[f],a)),topDisagreements:l.slice(0,i)}}function pE(){return{comparedSymbols:0,agreed:0,cheapTotal:0,oracleTotal:0,skippedOraclePartial:0}}function c4(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 l4(e,t){let n=t[0];if(!n)return null;if(Gp(e,n))return"source";try{if(st(e).capability("semantic-references",n.relativePath).available)return"semantic"}catch{}return t.some(r=>Gp(e,r))?"source":null}function Ol(e,t){let n=new Set;for(let r of t)r!==e.relativePath&&n.add(r);return n}function gE(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 u4={references:!0,callees:!1};function d4(e,t,n){let r=t.oracleTotal>0?t.agreed/t.oracleTotal:1,i=t.cheapTotal-t.agreed,o=qp(n,e);return{question:e,comparedSymbols:t.comparedSymbols,precision:o&&t.cheapTotal>0?Vp(t.agreed/t.cheapTotal):null,recall:Vp(r),unverified:i,skippedOraclePartial:t.skippedOraclePartial}}function qp(e,t){return e==="semantic"?u4[t]:!1}function Gp(e,t){return N(t.relativePath)==="clojure"&&K(e,t.relativePath)!==null}function m4(e,t,n){let r=new Map,i=new Map,o=n.filter(c=>Gp(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(N(c)!=="clojure")continue;let l=K(e,c);if(l)for(let u of l.fileIdentifiers)for(let d of s.get(u)??[])hE(r,d.symbolId,c)}let a=new Map;for(let c of t.scopedDefinitions()){if(N(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=K(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)??[])hE(i,c.symbolId,d.relativePath)}}return{referencesBySymbolId:r,calleesBySymbolId:i}}function hE(e,t,n){let r=e.get(t);if(r){r.add(n);return}e.set(t,new Set([n]))}function Vp(e){return Math.round(e*1e3)/1e3}var f4=new Set(nn());function p4(e,t={}){let{scope:n,minLoc:r=1,limit:i,scanLimit:o,maxShapeFrequency:s=12}=t,a=t.semantic!==!1,c=y4(e,g4(e,{scope:n,minLoc:r,scanLimit:o}),{semantic:a,maxShapeFrequency:s}),l=S4(c);return i?l.slice(0,i):l}function g4(e,t){let n=Ae(e,{scope:t.scope}).filter(r=>h4(r)&&!e.isIgnored(r.relativePath)).filter(r=>j(r)>=t.minLoc);return typeof t.scanLimit=="number"&&t.scanLimit>0&&n.sort((r,i)=>j(i)-j(r)||r.relativePath.localeCompare(i.relativePath)),de(n,t.scanLimit)}function h4(e){return!e.isFunctionLike||Oe(e.symbol)?!1:e.kind===null||f4.has(e.kind)}function y4(e,t,n){let r=[];for(let s of t){let a=C4(e,s,n);a&&r.push({signature:a,definition:s,fn:b4(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=x4(s.fn.loc),c=(i.get(s.signature)??0)>n.maxShapeFrequency,l=c?mp(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 b4(e){return{symbol:e.symbol,shortName:I(e.symbol),file:e.relativePath,startLine:e.startLine,endLine:e.endLine,loc:j(e)}}function S4(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 x4(e){return e<=5?"<=5":e<=20?"6-20":">20"}function C4(e,t,n){if(n.semantic){let o=nx(e,t);if(o)return o}let r=R4(t.documentation),i=r?w4(r):null;return i||E4(v4(e,t.relativePath,t.startLine,t.endLine,t.leaf),t.leaf)}function R4(e){return xn(Cn(e))}function v4(e,t,n,r,i){let o=k(e,t);if(!o)return null;let s=o.split(/\r?\n/),a=P4(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,I4(u)))return u}if(u&&u.includes("("))return u}return null}function I4(e){let t=e.replace(/\s+/g," ").trim();return!t.includes("(")||yo(t)>0?!1:/[;{]$/.test(t)||/\)\s*(?::\s*[^={]+)?\s*(?:=>|=|throws\b|where\b|$)/i.test(t)||/\)\s*As\s+.+$/i.test(t)}function w4(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 E4(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${U(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=D4(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 D4(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 P4(e,t,n,r){let i=U(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{spawnSync as _4}from"child_process";import{spawn as T4}from"child_process";import{performance as yE}from"perf_hooks";var Wp={probe:1e4,git:3e4,analysis:18e4,install:3e5,indexer:6e5},zr=class extends Error{constructor(n,r,i,o={}){super(i,o.cause===void 0?void 0:{cause:o.cause});this.kind=n;this.label=r;this.name="BoundedProcessError",this.timedOut=o.timedOut??!1,this.reaped=o.reaped??!1,this.stdout=o.stdout??"",this.stderr=o.stderr??"",this.stdoutTruncated=o.stdoutTruncated??!1,this.stderrTruncated=o.stderrTruncated??!1}kind;label;timedOut;reaped;stdout;stderr;stdoutTruncated;stderrTruncated};function jl(e,t){if(!Number.isFinite(e)||e<=0)throw new TypeError(`${t} must be a positive finite number.`)}function bE(e,t,n,r){let i=Math.max(0,r-n);i>0&&e.push(t.subarray(0,i))}function SE(e,t,n){let r=Buffer.concat([...e,t]);e.length=0,e.push(r.subarray(Math.max(0,r.length-n)))}function F4(e,t){if(e.exitCode!==null||e.signalCode!==null||e.pid===void 0)return!1;if(!t)return!0;let n=Nt(e.pid);return n!==null&&wt(t,n)}function xE(e){jl(e.timeoutMs,"timeoutMs"),jl(e.maxStdoutBytes,"maxStdoutBytes"),jl(e.maxStderrBytes,"maxStderrBytes");let t=e.terminationGraceMs??1e3;return jl(t,"terminationGraceMs"),new Promise((n,r)=>{let i=yE.now(),o;try{o=T4(e.command,[...e.args??[]],{cwd:e.cwd,env:e.env,detached:e.detached,stdio:["pipe","pipe","pipe"]})}catch(b){r(new zr("spawn",e.label,`${e.label} could not start.`,{cause:b,reaped:!0}));return}let s=[],a=[],c=0,l=0,u=!1,d=!1,m=null,f=!1,p=null,g=o.pid===void 0?null:Nt(o.pid),y=b=>{m||f||(m=b,o.kill("SIGTERM"),p=setTimeout(()=>{!f&&F4(o,g)&&o.kill("SIGKILL")},t),p.unref())},h=setTimeout(()=>{y({kind:"timeout",timedOut:!0,message:`${e.label} timed out after ${e.timeoutMs}ms.`})},e.timeoutMs);h.unref();let C=()=>{y({kind:"aborted",timedOut:!1,message:`${e.label} was cancelled.`})};e.signal?.addEventListener("abort",C,{once:!0}),e.signal?.aborted&&C(),o.stdout.on("data",b=>{let S=Buffer.isBuffer(b)?b:Buffer.from(b);e.outputLimitBehavior==="truncate-tail"?SE(s,S,e.maxStdoutBytes):bE(s,S,c,e.maxStdoutBytes),c+=S.length,c>e.maxStdoutBytes&&(u=!0,e.outputLimitBehavior!=="truncate-tail"&&y({kind:"stdout-limit",timedOut:!1,message:`${e.label} exceeded stdout limit (${e.maxStdoutBytes} bytes).`}))}),o.stderr.on("data",b=>{let S=Buffer.isBuffer(b)?b:Buffer.from(b);e.outputLimitBehavior==="truncate-tail"?SE(a,S,e.maxStderrBytes):bE(a,S,l,e.maxStderrBytes),l+=S.length,l>e.maxStderrBytes&&(d=!0,e.outputLimitBehavior!=="truncate-tail"&&y({kind:"stderr-limit",timedOut:!1,message:`${e.label} exceeded stderr limit (${e.maxStderrBytes} bytes).`}))}),o.on("error",b=>{if(!f&&!m){if(o.pid===void 0){clearTimeout(h),p&&clearTimeout(p),e.signal?.removeEventListener("abort",C),f=!0,r(new zr("spawn",e.label,`${e.label} could not start: ${b.message}`,{cause:b,reaped:!0}));return}y({kind:"spawn",timedOut:!1,message:`${e.label} failed after start: ${b.message}`})}}),o.on("close",(b,S)=>{if(f)return;f=!0,clearTimeout(h),p&&clearTimeout(p),e.signal?.removeEventListener("abort",C);let x=Buffer.concat(s).toString("utf8"),v=Buffer.concat(a).toString("utf8");if(m){r(new zr(m.kind,e.label,m.message,{timedOut:m.timedOut,reaped:!0,stdout:x,stderr:v,stdoutTruncated:u,stderrTruncated:d}));return}n({status:b,signal:S,stdout:x,stderr:v,timedOut:!1,durationMs:yE.now()-i,stdoutTruncated:u,stderrTruncated:d})}),e.input===void 0?o.stdin.end():o.stdin.end(e.input)})}var Kp="scip-query-isolated-analysis",Jp=1;function CE(e){let t=[...e??[]];return t.includes("--json")?t:["--json",...t]}var Kr=class extends Error{constructor(n,r,i=!0){super(`${n} timed out after ${r}ms.`);this.label=n;this.timeoutMs=r;this.reaped=i;this.name="IsolatedProcessTimeoutError"}label;timeoutMs;reaped;timedOut=!0};function Yve(e,t){cs(JSON.stringify({protocol:Kp,schemaVersion:Jp,producer:{name:"scip-query",version:pt},command:e,result:t}))}function Xve(e){let t=e.timeoutMs??Wp.analysis,n=_4(process.execPath,[...process.execArgv,e.cliPath,e.command,...CE(e.args)],{cwd:process.cwd(),env:e.env??process.env,encoding:"utf8",maxBuffer:e.maxBuffer??10*1024*1024,timeout:t,killSignal:"SIGKILL"});if(n.error&&n.error.code==="ETIMEDOUT")throw new Kr(e.label,t);if(n.status!==0){let r=n.stderr.trim();throw new Error(`${e.label} failed${r?`:
|
|
935
|
+
${r}`:""}`)}return vE(n.stdout,e)}function RE(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function Bl(e){let t=e.timeoutMs??Wp.analysis,n=e.maxBuffer??10*1024*1024;return xE({command:process.execPath,args:[...process.execArgv,e.cliPath,e.command,...CE(e.args)],cwd:process.cwd(),env:e.env??process.env,label:e.label,timeoutMs:t,maxStdoutBytes:n,maxStderrBytes:n}).catch(r=>{throw r instanceof zr&&r.kind==="timeout"?new Kr(e.label,t,r.reaped):r}).then(r=>{let i=r.stderr.trim();if(r.status!==0)throw new Error(`${e.label} failed${i?`:
|
|
936
|
+
${i}`:""}`);return vE(r.stdout,e)})}function vE(e,t){let n;try{n=JSON.parse(e)}catch(r){throw new Error(`${t.label} returned invalid JSON: ${r instanceof Error?r.message:r}`,{cause:r})}if(!G(n))throw new Error(`${t.label} returned a non-object isolated-analysis message.`);if(n.protocol!==Kp)throw new Error(`${t.label} returned protocol ${zp(n.protocol)}; expected ${Kp}.`);if(n.schemaVersion!==Jp)throw new Error(`${t.label} returned unsupported isolated-analysis schemaVersion ${zp(n.schemaVersion)}; expected ${Jp}.`);if(!L4(n.producer))throw new Error(`${t.label} did not identify a scip-query producer version.`);if(n.command!==t.command)throw new Error(`${t.label} returned result for command ${zp(n.command)}; expected ${t.command}.`);if(!Object.hasOwn(n,"result"))throw new Error(`${t.label} omitted the isolated-analysis result.`);return n.result}function L4(e){return G(e)&&e.name==="scip-query"&&typeof e.version=="string"&&e.version.length>0}function zp(e){return typeof e=="string"?JSON.stringify(e):String(e)}async function Yp(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 IE(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 A4}from"child_process";import{existsSync as M4,mkdirSync as N4,renameSync as O4,writeFileSync as j4}from"fs";import{dirname as wE,join as B4}from"path";var $l=3,$4="health-report-cache.json";function Xp(e,t,n,r=G4()){let i=Ge(e);return i?{version:$l,projectFingerprint:i,cliVersion:n,scope:t.scope??null,full:t.full===!0,phaseTimeoutMs:t.phaseTimeoutMs??null,gitHead:r.gitHead(e.config.projectRoot)}:null}function EE(e,t,n=TE()){let r=PE(e),i=kE(t),o=!1;return E("health.report-cache.read",()=>{if(!n.existsSync(r))return null;try{let s=JSON.parse(n.readFile(r));return!H4(s)||s.keyHash!==i?null:(o=!0,s.report)}catch{return null}},()=>({available:!0,hit:o,keyHash:i}))}function DE(e,t,n,r=TE()){let i=PE(e),o={version:$l,keyHash:kE(t),key:t,writtenAt:r.nowIso(),report:n};r.mkdirSync(wE(i),{recursive:!0});let s=`${i}.${process.pid}.${Date.now()}.tmp`;r.writeFileSync(s,JSON.stringify(o)),r.renameSync(s,i)}function PE(e){return B4(wE(e.config.dbPath),$4)}function kE(e){return Ee(JSON.stringify(e))}function H4(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===$l&&typeof t.keyHash=="string"&&U4(t.key)&&typeof t.writtenAt=="string"&&q4(t.report)}function U4(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===$l&&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 q4(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 G4(){return{gitHead(e){let t=A4("git",["rev-parse","HEAD"],{cwd:e,encoding:"utf8",timeout:3e4,killSignal:"SIGKILL"});return t.status===0?t.stdout.trim():null}}}function TE(){return{existsSync:M4,mkdirSync:N4,readFile:e=>O(e,"health report cache"),renameSync:O4,writeFileSync:j4,nowIso:()=>new Date().toISOString()}}var LE="__health-phase",W4="__diff-impact-batch",z4=10,K4=4,J4=8,Y4=25e3,X4=2500,Qp=2500,Q4=4,Z4=12,FE=3e4,AE=new Set(["react-component-duplicates","react-hook-candidates","react-large-component-pressure"]),ME=new Set(["vue-component-duplicates","vue-composable-candidates","vue-large-view-pressure"]),e6=new Set([...ME,"suppressions"]),t6=new Set(["similar","extract-candidates"]),Hl=2,_E=Sr({kind:"health-semantic-prewarm",invalidation:Q("health-semantic-prewarm"),serialize:e=>JSON.stringify(e),deserialize:n6});function n6(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;return n.version!==Hl||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:Hl,definitions:n.definitions,referenceCacheWrites:n.referenceCacheWrites,referenceIncomplete:n.referenceIncomplete,calleeRows:n.calleeRows,warmedAt:n.warmedAt}}catch{return null}}function NE(e){console.log(`Heuristic ${e}: review before acting; these are candidates, not exact compiler facts.
|
|
937
|
+
`)}function r6(e){let t=Ur(e);return t.symbols>=Y4||t.documents>=X4}function OE(e,t,n,r={}){return r6(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 ${Qp} candidates with semantic enrichment disabled. Run "scip-query ${t} --full" for the unbounded semantic pass.`),{scanLimit:Qp,semantic:!1,analysisBudget:{scanLimit:Qp,semanticEnrichment:!1,reason:"large index default budget; pass --full for unbounded semantic analysis"}}):{semantic:!0}}function vIe(e){return e?`analysis budget: scanning up to ${e.scanLimit} candidate(s); semantic enrichment=${e.semanticEnrichment}; ${e.reason}`:null}var i6={env:process.env,projectFingerprint:Ge,semanticEngineFingerprint:c6,readMarker:(e,t,n)=>_E.read(e,t,n),writeMarker:(e,t,n,r)=>_E.write(e,t,n,r),candidateDefinitions:(e,t)=>new F(e).scopedDefinitions(t.scope).filter(n=>$e(n.relativePath)!==null),materializeReferences:(e,t,n)=>st(e).materializeReferences(t,n),materializeCallees:um};function o6(e,t,n=i6){if(t.full!==!0)return gr("default-mode");if((n.env??process.env).SCIP_QUERY_HEALTH_SEMANTIC_PREWARM==="0")return gr("disabled");let r=gr("error");return E("health.semantic-prewarm",()=>{try{r=s6(e,t,n)}catch(i){r=gr("error",{error:i instanceof Error?i.message:String(i)})}return r},()=>l6(r))}function s6(e,t,n){let r=n.projectFingerprint(e);if(!r)return gr("missing-project-fingerprint");let i=a6(t,n.semanticEngineFingerprint(e)),o=n.readMarker(e,i,r);if(o&&o.referenceIncomplete===0)return gr("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 gr("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 gr("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:Hl,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 a6(e,t){return JSON.stringify({version:Hl,cliVersion:pt,semanticEngineFingerprint:t,scope:e.scope??null})}function c6(e){return Ee(JSON.stringify({kind:"health-semantic-prewarm-engine",rust:Tr(e.config.projectRoot)}))}function gr(e,t={}){return{status:"skipped",reason:e,definitions:0,referenceCacheHits:0,referenceCacheWrites:0,referenceMisses:0,referenceIncomplete:0,calleeRows:0,...t}}function l6(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 IIe(e){let t=g6(e),n={...e,phaseTimeoutMs:t??null},r=Pn(m=>{let f=Xp(m,n,pt);if(!f)return null;let p=EE(m,f);return p?(p.detectorPrecision=Np(Op(m),Date.now()),p):null});if(r)return r;let{applicability:i,overview:o}=Pn(m=>({applicability:u6(m,e),overview:Bp(m,"overview",e)})),s=new Map;s.set("overview",o);let a=Ml.filter(m=>m==="overview"?!1:d6(m,i)?!0:(s.set(m,Jr(m)),!1)),c=m6(a);e.full&&Pn(m=>o6(m,e));let l=await Yp(c,h6(c.length),m=>f6(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=$p(Ml.map(m=>s.get(m)));return d.detectorPrecision=Pn(m=>Np(Op(m),Date.now())),Pn(m=>{let f=Xp(m,n,pt);f&&DE(m,f,d)}),d}function u6(e,t){return Sa(e,{scope:t.scope})}function d6(e,t){return AE.has(e)?t.react:ME.has(e)?t.vue:!0}function m6(e){return IE(e,[AE,e6,t6])}function Jr(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 f6(e,t,n){if(e.length===1)return p6(e[0],t,n).then(s=>[s]);let r=e.join(","),i=process.argv[1]??eg(import.meta.url),o=[r];return t.scope&&o.push("--scope",t.scope),t.full&&o.push("--full"),Bl({cliPath:i,command:LE,args:o,label:`Health phases "${r}"`,timeoutMs:n}).catch(s=>{if(t.full||!(s instanceof Kr))throw s;return e.map(a=>jE(a,s.timeoutMs,`timed out after ${s.timeoutMs}ms`))})}function p6(e,t,n){let r=process.argv[1]??eg(import.meta.url),i=[e];return t.scope&&i.push("--scope",t.scope),t.full&&i.push("--full"),Bl({cliPath:r,command:LE,args:i,label:`Health phase "${e}"`,timeoutMs:n}).catch(o=>{if(t.full||!(o instanceof Kr))throw o;return jE(e,o.timeoutMs,`timed out after ${o.timeoutMs}ms`)})}function g6(e,t=process.env){if(e.full)return;let n=t.SCIP_QUERY_HEALTH_PHASE_TIMEOUT_MS;if(!n)return FE;let r=parseInt(n,10);return!Number.isFinite(r)||r<0?FE:r===0?void 0:r}function jE(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{...Jr(e),...r};case"react-hook-candidates":return{...Jr(e),...r};case"react-large-component-pressure":return{...Jr(e),...r};case"vue-component-duplicates":return{...Jr(e),...r};case"vue-composable-candidates":return{...Jr(e),...r};case"vue-large-view-pressure":return{...Jr(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 h6=BE({envKey:"SCIP_QUERY_HEALTH_CONCURRENCY",defaultMinimum:Q4,defaultMaximum:Z4});function wIe(e){if(console.log(`
|
|
938
|
+
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)
|
|
939
|
+
`),console.log(` ${e.overview.documents} files | ${e.overview.symbols} symbols | ${oR(e.overview.indexSizeBytes)}
|
|
940
|
+
`),e.warnings&&e.warnings.length>0){console.log(" Warnings:");for(let n of e.warnings)console.log(` ${n}`);console.log("")}console.log(" Findings:");let t=e.findings;if(t.deadSymbols>0&&console.log(` Dead code: ${t.deadSymbols} symbols (${t.deadLoc} LOC)`),t.isolatedSymbols>0&&console.log(` Isolated symbols: ${t.isolatedSymbols} (${t.isolatedLoc} LOC)`),t.cycles>0&&console.log(` Circular deps: ${t.cycles}`),t.similarPairs>0&&console.log(` Similar pairs: ${t.similarPairs}`),t.twinDriftGroups>0&&console.log(` Drifted twins: ${t.twinDriftGroups} group(s)`),t.reactComponentDuplicatePairs>0&&console.log(` React components: ${t.reactComponentDuplicatePairs} duplicate pair(s)`),t.reactHookCandidatePairs>0&&console.log(` React hook reuse: ${Zp(t.reactHookCandidatePairs,t.reactHookCandidateScoreCount)} candidate pair(s)`),t.reactLargeComponentPressureFiles>0&&console.log(` React large comps: ${t.reactLargeComponentPressureFiles} component(s)`),t.vueComponentDuplicatePairs>0&&console.log(` Vue components: ${t.vueComponentDuplicatePairs} duplicate pair(s)`),t.vueComposableCandidatePairs>0&&console.log(` Vue composables: ${Zp(t.vueComposableCandidatePairs,t.vueComposableCandidateScoreCount)} candidate pair(s)`),t.vueLargeViewPressureFiles>0&&console.log(` Vue large views: ${t.vueLargeViewPressureFiles} file(s)`),t.extractionCandidates>0&&console.log(` Extract candidates: ${t.extractionCandidates}`),t.wrappers>0&&console.log(` Wrapper functions: ${Zp(t.wrappers,t.wrapperScoreCount)}`),t.passthroughs>0&&console.log(` Passthroughs: ${t.passthroughs}`),t.staleTypes>0&&console.log(` Stale abstractions: ${t.staleTypes}`),t.driftedFiles>0&&console.log(` Pattern drift: ${t.driftedFiles} files`),t.complexityHotspotCount>0&&console.log(` Complexity hotspots: ${t.complexityHotspotCount}`),e.actions.length>0){console.log(`
|
|
941
|
+
Prioritized Actions (highest impact + lowest effort first):`);for(let n=0;n<e.actions.length;n++){let r=e.actions[n],i=r.locRecoverable>0?` (~${r.locRecoverable} LOC involved)`:"";console.log(` ${n+1}. [${r.effort} effort / ${r.impact} impact] ${r.description}${i}`)}}if(e.topComplexity.length>0){console.log(`
|
|
942
|
+
Top Complexity Hotspots:`);for(let n of e.topComplexity)console.log(` ${n.score.toFixed(1).padStart(6)} ${n.symbol}`)}if(S6(e),b6(e),e.scoreBreakdown.length>0){console.log(`
|
|
943
|
+
Score Breakdown (100 minus the following):`);for(let n of e.scoreBreakdown)console.log(` -${String(n.points).padStart(2)} ${n.axis}: ${n.detail}`)}e.actions.length===0&&console.log(e.warnings&&e.warnings.length>0?`
|
|
944
|
+
No findings from completed analyses. Review warnings before interpreting this result as clean.`:`
|
|
945
|
+
No issues found. Codebase is clean.`)}function Zp(e,t){return Math.abs(e-t)<.01?String(e):`${e} (${y6(t)} score-weighted)`}function y6(e){return Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}function b6(e){if(e.pressure.length!==0){console.log(`
|
|
946
|
+
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 S6(e){let t=e.axes;if(console.log(`
|
|
947
|
+
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 EIe(e){let t=Pn(i=>{let o=pr(i,{base:e.base});return o.note?{kind:"complete",result:Ji(i,{base:e.base})}:o.changedFiles.length===0?{kind:"complete",result:Ji(i,{base:e.base})}:{kind:"batched",plan:o}});if(t.kind==="complete")return t.result;let n=RE(t.plan.changedFiles,z4),r=await Yp(n,x6(n.length),i=>v6(i,e));return gl(t.plan.changedFiles,r)}var x6=BE({envKey:"SCIP_QUERY_DIFF_IMPACT_CONCURRENCY",defaultMinimum:K4,defaultMaximum:J4});function BE(e){return(t,n=process.env,r=V4)=>C6(t,n,r,e)}function C6(e,t,n,r){let i=t[r.envKey],o=R6(n,r),s=i?parseInt(i,10):o;return!Number.isFinite(s)||s<1?Math.min(o,e):Math.min(s,e)}function R6(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 v6(e,t){let n=process.argv[1]??eg(import.meta.url),r=[];return t.base&&r.push("--base",t.base),Bl({cliPath:n,command:W4,args:r,env:{...process.env,SCIP_QUERY_DIFF_IMPACT_FILES:JSON.stringify(e)},label:"Diff-impact batch"})}function DIe(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:"),tn.list(e.changedSymbols,n=>` ${n.file} ${n.shortName} (fan-in: ${n.fanIn})`)),e.affectedConsumers.length>0&&(console.log(`
|
|
948
|
+
Affected consumer files:`),tn.list(e.affectedConsumers,n=>` ${n.file} (${n.consumedSymbols} symbol(s))`))}var I6="scip-query-result";var w6=1,E6=1;function $E(e){let t=e.resultSchemaVersion??E6;if(!D6(t))throw new Error("CLI result schema version must be a positive safe integer.");let{producerVersion:n,...r}=e;return{kind:I6,schemaVersion:w6,producer:{name:"scip-query",version:n},resultSchemaVersion:t,...r}}function HE(e,t){return JSON.stringify(e,null,t?0:2)}function D6(e){return Number.isSafeInteger(e)&&Number(e)>0}var UE=Symbol("option-value-source"),qE=new Map,GE=new Map;function MIe(e){qE=new Map(e)}function NIe(e){GE=new Map(e)}function $s(e){return(...t)=>{let{args:n,opts:r}=O6(t);Pn(i=>e({db:i,args:n,opts:r}))}}function Ul(e,t){return $s(n=>{let r=OE(n.db,e,Bs(n.opts,"full"),{quiet:Bs(n.opts,"json")});t({...n,budget:r})})}function OIe(e){return $s(t=>eo(t,e,{kind:"list"}))}function jIe(e){return $s(t=>eo(t,e,{kind:"table",headers:e.headers,dashWidths:e.dashWidths}))}function BIe(e){return $s(t=>eo(t,e,{kind:"grouped",key:e.key}))}function P6(e){return $s(t=>tg(t,e))}function $Ie(e){return P6({commandName:e.commandName,query:e.query,emptyMessage:e.emptyMessage,heuristicLabel:e.heuristicLabel,before:e.before,render:(t,n)=>tn.sectionedReport(e.sections(t,n)),toJson:e.toJson,coverage:e.coverage,agentResult:e.agentResult,after:e.after})}function k6(e,t){return Ul(e,n=>tg(n,{...t,commandName:t.commandName??e}))}function HIe(e,t){return k6(e,{commandName:t.commandName??e,query:t.query,emptyMessage:t.emptyMessage,heuristicLabel:t.heuristicLabel,before:t.before,render:(n,r)=>tn.sectionedReport(t.sections(n,r)),toJson:t.toJson,coverage:t.coverage,agentResult:t.agentResult,after:t.after})}function UIe(e,t){return Ul(e,n=>eo(n,{...t,commandName:e},{kind:"list"}))}function qIe(e,t){return Ul(e,n=>eo(n,{...t,commandName:e},{kind:"table",headers:t.headers,dashWidths:t.dashWidths}))}function GIe(e,t){return Ul(e,n=>eo(n,{...t,commandName:e},{kind:"grouped",key:t.key}))}function VIe(e,t){return String(e[t])}function WIe(e,t){let n=e[t];return typeof n=="string"?n:void 0}function zIe(e,t){let n=e[t];return typeof n=="string"?n:void 0}function VE(e,t){let n=e[t];return typeof n=="number"?n:void 0}function Bs(e,t){return!!e[t]}function KIe(e,t){let n=e[t];return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:[]}function JIe(e,t,n){return VE(e,t)??n}function YIe(e,t,n){let r=VE(e,t),i=r!==void 0&&T6(e,t)!=="default";if(Bs(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 T6(e,t){return e[UE]?.(t)}function eo(e,t,n){tg(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"?tn.list(r,o=>t.format(o,i)):n.kind==="table"?tn.table(n.headers,r.map(o=>t.format(o,i)),n.dashWidths):tn.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 tg(e,t){let n=t.query(e);if(Bs(e.opts,"json")){if(!t.commandName)throw new Error("JSON output requires a command name so its result contract can be identified.");_6(t.commandName,e.args,e.opts,t.toJson?t.toJson(n,e):n,{analysisBudget:F6(e),coverage:t.coverage?.(n,e),agentResult:t.agentResult?.(n,e)});return}let r=t.emptyMessage?.(n,e);if(r){tn.empty(r);return}t.heuristicLabel&&NE(t.heuristicLabel),t.before?.(n,e),t.render(n,e),t.after?.(n,e)}function F6(e){return e.budget?.analysisBudget}function _6(e,t,n,r,i={}){let o=qE.get(e),s=GE.get(e),a=i.coverage??A6(s,r,i.analysisBudget);a&&L6(a);let c=$E({producerVersion:pt,command:e,...o?{evidence:o}:{},...i.analysisBudget?{analysisBudget:i.analysisBudget}:{},args:N6(t),options:n,result:r,...a?{coverage:a}:{},...i.agentResult!==void 0?{agentResult:i.agentResult}:{},...i.resultSchemaVersion===void 0?{}:{resultSchemaVersion:i.resultSchemaVersion}});cs(HE(c,Bs(n,"compact")))}function L6(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 A6(e,t,n){if(!e)return;let r=M6(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 M6(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 N6(e){return e.filter(t=>typeof t=="string"||typeof t=="number"||typeof t=="boolean")}function O6(e){if(e.length===0)return{args:[],opts:{}};let t=e[e.length-1];return{args:e.slice(0,-1),opts:j6(t)}}function j6(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,UE,{value:r=>t.getOptionValueSource(r),enumerable:!1}),n)}return e}function QIe(e){return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}export{Jo as a,Wl as b,ag as c,B6 as d,G as e,Hs as f,to as g,Us as h,Gt as i,W6 as j,ug as k,KE as l,Ge as m,r3 as n,A as o,ri as p,Ce as q,je as r,Fe as s,Kg as t,zt as u,ye as v,te as w,O as x,ZD as y,eP as z,pu as A,ui as B,Kt as C,Ye as D,V as E,Lg as F,Ag as G,Mg as H,RD as I,E as J,u3 as K,Bn as L,dP as M,Re as N,yu as O,so as P,U as Q,xt as R,v3 as S,I3 as T,X as U,ST as V,l9 as W,Mh as X,C7 as Y,le as Z,I as _,T as $,Z as aa,Ae as ba,H as ca,Co as da,ree as ea,us as fa,nn as ga,kR as ha,bue as ia,ite as ja,Zy as ka,ote as la,eb as ma,rb as na,VA as oa,ud as pa,hte as qa,KA as ra,JA as sa,yte as ta,bte as ua,sb as va,Va as wa,Yn as xa,In as ya,wt as za,Nt as Aa,Te as Ba,Do as Ca,xi as Da,Ot as Ea,Wa as Fa,ft as Ga,Zn as Ha,za as Ia,Ii as Ja,kr as Ka,Ka as La,ore as Ma,Fre as Na,_re as Oa,GN as Pa,aS as Qa,Md as Ra,Qe as Sa,h3 as Ta,ei as Ua,ND as Va,Bg as Wa,y3 as Xa,Ws as Ya,Vt as Za,ki as _a,Ti as $a,Xt as ab,CS as bb,d0 as cb,sc as db,MS as eb,pc as fb,Noe as gb,Ur as hb,RH as ib,DH as jb,fse as kb,bf as lb,Sf as mb,xf as nb,Cf as ob,Rf as pb,qr as qb,EU as rb,kU as sb,TU as tb,FU as ub,vse as vb,GU as wb,zU as xb,KU as yb,JU as zb,XU as Ab,QU as Bb,ZU as Cb,iv as Db,Gr as Eb,xq as Fb,gs as Gb,vq as Hb,Iq as Ib,Fq as Jb,Mq as Kb,Pf as Lb,ol as Mb,Lf as Nb,hs as Ob,wG as Pb,ys as Qb,bs as Rb,Mf as Sb,Ss as Tb,xs as Ub,Nf as Vb,yV as Wb,Cs as Xb,vW as Yb,Gf as Zb,Vf as _b,nz as $b,vs as ac,pr as bc,wI as cc,e2 as dc,Ps as ec,x2 as fc,Fs as gc,_s as hc,As as ic,Ms as jc,gY as kc,Sp as lc,Cp as mc,vp as nc,wp as oc,Gbe as pc,Sw as qc,Ep as rc,kY as sc,TY as tc,FY as uc,_Y as vc,MY as wc,NY as xc,OY as yc,jY as zc,S5 as Ac,x5 as Bc,P5 as Cc,U5 as Dc,J5 as Ec,mX as Fc,_p as Gc,Ap as Hc,_l as Ic,UX as Jc,Mp as Kc,qt as Lc,gCe as Mc,hCe as Nc,CCe as Oc,RCe as Pc,Op as Qc,vCe as Rc,Ml as Sc,Bp as Tc,hQ as Uc,YQ as Vc,_se as Wc,XQ as Xc,a4 as Yc,p4 as Zc,pt as _c,hx as $c,vc as ad,gm as bd,yx as cd,dm as dd,mm as ed,qse as fd,Gse as gd,Vse as hd,Ic as id,wc as jd,Ix as kd,kc as ld,Ni as md,Mi as nd,kj as od,_c as pd,Gx as qd,_ae as rd,Lae as sd,Aae as td,Mae as ud,Nae as vd,Xo as wd,oC as xd,kB as yd,Jae as zd,Qo as Ad,lC as Bd,Mm as Cd,Nm as Dd,ace as Ed,bce as Fd,Sce as Gd,xce as Hd,Cce as Id,kce as Jd,Tce as Kd,Fce as Ld,_ce as Md,Gce as Nd,Xce as Od,Qce as Pd,Gc as Qd,KC as Rd,JC as Sd,$r as Td,YC as Ud,Qm as Vd,vle as Wd,Zm as Xd,rf as Yd,rR as Zd,Ale as _d,iR as $d,Mle as ae,Nle as be,Ole as ce,Pn as de,jle as ee,oR as fe,Ble as ge,Wp as he,zr as ie,xE as je,sR as ke,kt as le,cs as me,Hle as ne,Yve as oe,Xve as pe,lR as qe,e1 as re,Gle as se,Vle as te,tn as ue,LE as ve,W4 as we,NE as xe,OE as ye,vIe as ze,IIe as Ae,wIe as Be,EIe as Ce,DIe as De,MIe as Ee,NIe as Fe,$s as Ge,Ul as He,OIe as Ie,jIe as Je,BIe as Ke,P6 as Le,$Ie as Me,k6 as Ne,HIe as Oe,UIe as Pe,qIe as Qe,GIe as Re,VIe as Se,WIe as Te,zIe as Ue,VE as Ve,Bs as We,KIe as Xe,JIe as Ye,YIe as Ze,T6 as _e,_6 as $e,O6 as af,j6 as bf,QIe as cf};
|
|
949
|
+
//# sourceMappingURL=chunk-HIB452NU.js.map
|