codebaseiq 0.3.1 → 0.4.0
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 +65 -0
- package/dist/augment-vue-worker.js +1 -1
- package/dist/{chunk-7GAK2F3H.js → chunk-23AD24QZ.js} +12 -12
- package/dist/chunk-24TEZJST.js +2 -0
- package/dist/{chunk-356EZBIP.js → chunk-26EDDGAX.js} +2 -2
- package/dist/{chunk-O2M3VNDY.js → chunk-26EZWQ24.js} +2 -2
- package/dist/{chunk-U33PMPNW.js → chunk-2L3NCI52.js} +2 -2
- package/dist/{chunk-MSI3K7PJ.js → chunk-2QJAVISG.js} +2 -2
- package/dist/{chunk-4LK5OIPW.js → chunk-2ZBZRYX4.js} +2 -2
- package/dist/{chunk-JYRJYXUV.js → chunk-33AXWMO2.js} +2 -2
- package/dist/{chunk-EQNMD62X.js → chunk-37K55EG3.js} +2 -2
- package/dist/{chunk-LCW3PSGL.js → chunk-3EFZ5KQ4.js} +2 -2
- package/dist/{chunk-D7DOB27N.js → chunk-3F23W57G.js} +2 -2
- package/dist/{chunk-BGGB5N53.js → chunk-3GKKCVKK.js} +2 -2
- package/dist/{chunk-MQW6SJ4P.js → chunk-3SYRGMCL.js} +2 -2
- package/dist/{chunk-DWBAESVW.js → chunk-3VDL7GTY.js} +2 -2
- package/dist/{chunk-BFANZRQ5.js → chunk-3XBZ5PKL.js} +2 -2
- package/dist/{chunk-K6FNTQQW.js → chunk-42PXSE74.js} +2 -2
- package/dist/{chunk-ALOEHWJS.js → chunk-4GIERC2P.js} +2 -2
- package/dist/{chunk-W7YLRXZE.js → chunk-4UXDBRIF.js} +2 -2
- package/dist/chunk-4XMZYLW5.js +2 -0
- package/dist/{chunk-JSB43EX6.js → chunk-55NUXP2V.js} +2 -2
- package/dist/chunk-5AJQCOZZ.js +21 -0
- package/dist/{chunk-L37EQYAX.js → chunk-5NUPFZFA.js} +2 -2
- package/dist/{chunk-PIFYOWS4.js → chunk-65QIFIF6.js} +2 -2
- package/dist/{chunk-SUE7SHZL.js → chunk-66Q5VLH6.js} +2 -2
- package/dist/{chunk-KFTHI2R6.js → chunk-6CQPIIS7.js} +2 -2
- package/dist/{chunk-GV2CEZCW.js → chunk-6CTSFS7R.js} +2 -2
- package/dist/{chunk-SB53KPWA.js → chunk-6EBUAKJT.js} +2 -2
- package/dist/chunk-6I55VYFG.js +4 -0
- package/dist/chunk-6NUURWPF.js +3 -0
- package/dist/{chunk-TEMM2FEL.js → chunk-6P5QMOM7.js} +2 -2
- package/dist/{chunk-3LQJRS4I.js → chunk-6S5FE4ZF.js} +2 -2
- package/dist/chunk-74LRKLNC.js +22 -0
- package/dist/{chunk-NNG6M6XD.js → chunk-75A23IID.js} +2 -2
- package/dist/chunk-75VNTSO6.js +7 -0
- package/dist/chunk-7HBBVZJ6.js +3 -0
- package/dist/{chunk-AGGR2BKS.js → chunk-7PPBMBH6.js} +2 -2
- package/dist/{chunk-DECN422G.js → chunk-7WG57A5X.js} +2 -2
- package/dist/{chunk-ILGTMRMZ.js → chunk-7XHZX6FX.js} +2 -2
- package/dist/{chunk-OKAF4OQS.js → chunk-A5HJ3CJW.js} +2 -2
- package/dist/{chunk-JNXI6NQ7.js → chunk-AJ5HVC5Z.js} +2 -2
- package/dist/{chunk-SZ4P7MF7.js → chunk-AYRHOFLV.js} +2 -2
- package/dist/chunk-AZDY3EKD.js +93 -0
- package/dist/{chunk-SA7G6GJX.js → chunk-AZZNG5Z2.js} +2 -2
- package/dist/chunk-BEKCTUPY.js +3 -0
- package/dist/{chunk-PTR3EOXC.js → chunk-BKKX2OU5.js} +2 -2
- package/dist/{chunk-5LL4KEHO.js → chunk-BQKRYKDD.js} +2 -2
- package/dist/{chunk-UIAUPFBJ.js → chunk-BVDQU2XJ.js} +2 -2
- package/dist/chunk-C3PPB2T5.js +5 -0
- package/dist/chunk-CABIZQXQ.js +21 -0
- package/dist/{chunk-M2Y6PCFE.js → chunk-CAH322MC.js} +2 -2
- package/dist/{chunk-EIBGSU2R.js → chunk-CBOOHUK4.js} +2 -2
- package/dist/chunk-CFIICAOM.js +2 -0
- package/dist/{chunk-UMEPSVKT.js → chunk-CPWYEPWQ.js} +2 -2
- package/dist/{chunk-LQHYYIOB.js → chunk-CRT7I7RJ.js} +2 -2
- package/dist/{chunk-IZDPGOZR.js → chunk-CZVSQQDU.js} +2 -2
- package/dist/{chunk-TNJGTQWO.js → chunk-D3KE26FS.js} +2 -2
- package/dist/{chunk-CB5AVJMM.js → chunk-DNRHRVKS.js} +2 -2
- package/dist/{chunk-SGMNWYTH.js → chunk-DOQLO74K.js} +2 -2
- package/dist/{chunk-DDRA3QKN.js → chunk-DP3EJ6XL.js} +2 -2
- package/dist/{chunk-OWJWOEDU.js → chunk-DQZF7MP6.js} +2 -2
- package/dist/{chunk-VSGOIZMQ.js → chunk-DTM4EHD2.js} +2 -2
- package/dist/{chunk-YRKP7PM7.js → chunk-DUM7GR6B.js} +2 -2
- package/dist/{chunk-HNXRVGMY.js → chunk-DZ4QOIRY.js} +2 -2
- package/dist/{chunk-CSPDQLLU.js → chunk-E3R6TJ5T.js} +2 -2
- package/dist/chunk-E4DP45YU.js +3 -0
- package/dist/{chunk-PUVNH4PO.js → chunk-E5U6N5WI.js} +2 -2
- package/dist/chunk-E7T22WET.js +21 -0
- package/dist/{chunk-QEOWONKY.js → chunk-ED7ZAZ5V.js} +2 -2
- package/dist/{chunk-RCIGX23V.js → chunk-EDMG5CSO.js} +2 -2
- package/dist/{chunk-IHSLIIL3.js → chunk-EOSUV7H5.js} +2 -2
- package/dist/{chunk-EHPOTEQX.js → chunk-ESWVTSHU.js} +2 -2
- package/dist/{chunk-57OPIQFM.js → chunk-ETZBIG6K.js} +2 -2
- package/dist/chunk-EYSJHKX6.js +3 -0
- package/dist/{chunk-MC46AL7B.js → chunk-F4AGM7ZE.js} +37 -37
- package/dist/{chunk-EOKVZXNF.js → chunk-FPUJRBHL.js} +55 -55
- package/dist/{chunk-CCIYWXX6.js → chunk-G2UU6PQP.js} +2 -2
- package/dist/{chunk-C6WKPKCF.js → chunk-G3KRXNNT.js} +2 -2
- package/dist/{chunk-TEANKHUU.js → chunk-G3ZBP72R.js} +2 -2
- package/dist/{chunk-ELYMY5S2.js → chunk-GC4I33OD.js} +2 -2
- package/dist/{chunk-NDKOVQFG.js → chunk-GLXEWYQY.js} +2 -2
- package/dist/{chunk-CYJS33YX.js → chunk-GRHNPFHT.js} +2 -2
- package/dist/{chunk-QY7QB7I6.js → chunk-GWESWURK.js} +2 -2
- package/dist/{chunk-R4OJGTMP.js → chunk-GXOFPAIR.js} +2 -2
- package/dist/{chunk-OBC7HSSO.js → chunk-H4FGIFEU.js} +2 -2
- package/dist/{chunk-LKUTSP4G.js → chunk-HOGS6JFP.js} +2 -2
- package/dist/{chunk-RIO3JXHM.js → chunk-HSJLK5MC.js} +2 -2
- package/dist/{chunk-BWL3PMPT.js → chunk-HTPEUJ42.js} +2 -2
- package/dist/{chunk-DJKOXMNG.js → chunk-IBPXUGJV.js} +2 -2
- package/dist/{chunk-2XBJRZEM.js → chunk-ITA3N7G6.js} +2 -2
- package/dist/chunk-JG5OWAEB.js +22 -0
- package/dist/{chunk-LSZYMN2A.js → chunk-JGJKRTTB.js} +2 -2
- package/dist/{chunk-TJWVT4DO.js → chunk-JGXLB7PR.js} +2 -2
- package/dist/{chunk-5TZNHP4T.js → chunk-JKUF2UG6.js} +2 -2
- package/dist/{chunk-CIYA2KZN.js → chunk-JOYASZRF.js} +2 -2
- package/dist/{chunk-U7NUXDQO.js → chunk-K3PFL5QQ.js} +2 -2
- package/dist/{chunk-WK2IQJPK.js → chunk-KAXBWTSX.js} +2 -2
- package/dist/{chunk-5ZI2PPI7.js → chunk-KHHAGHAW.js} +2 -2
- package/dist/{chunk-UW6KD57C.js → chunk-KJLUQVBG.js} +2 -2
- package/dist/{chunk-WWCV4E6J.js → chunk-KOVUXHIZ.js} +2 -2
- package/dist/chunk-KPMMOAV5.js +4 -0
- package/dist/{chunk-2Z7K66D7.js → chunk-LKJZNGMA.js} +2 -2
- package/dist/{chunk-3VJ3OCRE.js → chunk-LMPOC372.js} +2 -2
- package/dist/{chunk-F3QSL4W2.js → chunk-LTPNP6D5.js} +2 -2
- package/dist/{chunk-O2KWU34K.js → chunk-M3IBH6C3.js} +9 -9
- package/dist/{chunk-UJIXCI3L.js → chunk-MAGBSB6E.js} +2 -2
- package/dist/{chunk-QMOZZ2VX.js → chunk-MFMHD36E.js} +2 -2
- package/dist/{chunk-LMTSB3TB.js → chunk-MJX2J5QE.js} +2 -2
- package/dist/{chunk-WO6OFKUC.js → chunk-N26LGGSF.js} +2 -2
- package/dist/{chunk-J7AMBVWF.js → chunk-NB2DAVPP.js} +2 -2
- package/dist/{chunk-MDFT325O.js → chunk-NJDXNYLG.js} +2 -2
- package/dist/{chunk-BRQL7AFJ.js → chunk-NMKQOIYZ.js} +2 -2
- package/dist/{chunk-ICUL7XRT.js → chunk-NRNVMB2R.js} +2 -2
- package/dist/{chunk-JAFDMV5I.js → chunk-O5BWFNIH.js} +2 -2
- package/dist/{chunk-3H2H5ODK.js → chunk-O7PCDZ5B.js} +2 -2
- package/dist/{chunk-KPZGTB2O.js → chunk-OAJYNPRU.js} +2 -2
- package/dist/{chunk-KUKWHP4R.js → chunk-OFUC6R46.js} +2 -2
- package/dist/chunk-OSZ7PW5K.js +5 -0
- package/dist/{chunk-B3UYV66Z.js → chunk-OZ2M2X7A.js} +2 -2
- package/dist/{chunk-6O3KXIDL.js → chunk-OZI44VCR.js} +2 -2
- package/dist/{chunk-XN3EKMLI.js → chunk-PCKIKOUA.js} +2 -2
- package/dist/{chunk-I3OK27P7.js → chunk-PFMQRHC6.js} +2 -2
- package/dist/{chunk-K4S2VH42.js → chunk-PVKSZBX5.js} +2 -2
- package/dist/{chunk-NEWHKGVD.js → chunk-QANCT4MO.js} +2 -2
- package/dist/{chunk-ZNH33XIB.js → chunk-QEWN7BLP.js} +2 -2
- package/dist/{chunk-OQUCBKOI.js → chunk-QFJ46F6F.js} +2 -2
- package/dist/{chunk-2E6OUPCF.js → chunk-QPQWR6CW.js} +2 -2
- package/dist/{chunk-YTJHCGYB.js → chunk-QX4HDF2I.js} +2 -2
- package/dist/{chunk-KLX6NSWT.js → chunk-R2F2CTBA.js} +2 -2
- package/dist/{chunk-2OMXFE64.js → chunk-R7PXHYMY.js} +2 -2
- package/dist/{chunk-F74LZWCE.js → chunk-RGBZDOUO.js} +2 -2
- package/dist/{chunk-362QOSFD.js → chunk-RNPG5P4P.js} +2 -2
- package/dist/{chunk-D62CTZX6.js → chunk-RS6UYNEP.js} +2 -2
- package/dist/{chunk-VGWZ4MOY.js → chunk-RVBRPBLQ.js} +2 -2
- package/dist/{chunk-BGYRF5YX.js → chunk-RWAZCEJD.js} +2 -2
- package/dist/{chunk-Z66XYVLZ.js → chunk-RWDIONS7.js} +2 -2
- package/dist/{chunk-CJTKGAGH.js → chunk-S3CJYDXP.js} +2 -2
- package/dist/{chunk-53ELMZRF.js → chunk-S6UTKCBT.js} +2 -2
- package/dist/chunk-SLLFJXTW.js +27 -0
- package/dist/{chunk-TOTWJZIX.js → chunk-T3KTMLQT.js} +2 -2
- package/dist/{chunk-HJTM3C4Y.js → chunk-TB575ZGO.js} +2 -2
- package/dist/{chunk-YHPG3S2U.js → chunk-TG4GMU73.js} +2 -2
- package/dist/{chunk-N2XDMNVI.js → chunk-THKM7OXM.js} +2 -2
- package/dist/{chunk-GVAF222T.js → chunk-TNLOX4TN.js} +2 -2
- package/dist/{chunk-BPKNP3KZ.js → chunk-UHFZDQZJ.js} +2 -2
- package/dist/{chunk-YT4DVWUV.js → chunk-UUMAM5LM.js} +2 -2
- package/dist/{chunk-TLTSESB4.js → chunk-UUT5P3V7.js} +2 -2
- package/dist/{chunk-W7QDASTN.js → chunk-VEPK6M5C.js} +2 -2
- package/dist/{chunk-XJBK3QDV.js → chunk-VPCHKZ3I.js} +2 -2
- package/dist/{chunk-3ON3A2QV.js → chunk-VZY3XOBU.js} +2 -2
- package/dist/{chunk-XQAVQVIL.js → chunk-W6E6ME7G.js} +2 -2
- package/dist/{chunk-KEJ2HLRW.js → chunk-WGYZBS5S.js} +2 -2
- package/dist/{chunk-5MPBSFZH.js → chunk-WUP24Q4U.js} +2 -2
- package/dist/chunk-WXUHXSLN.js +2 -0
- package/dist/{chunk-F5CJO5JN.js → chunk-X4YZD2MP.js} +2 -2
- package/dist/chunk-XARPGCTL.js +2 -0
- package/dist/{chunk-5FWR5HLG.js → chunk-XDQ6QJF5.js} +20 -20
- package/dist/{chunk-JCMFBF4Z.js → chunk-XRH7R5SX.js} +2 -2
- package/dist/{chunk-T2M5HWBQ.js → chunk-XVJ2E7W7.js} +2 -2
- package/dist/{chunk-AXQCHG77.js → chunk-Y7GFAU5N.js} +2 -2
- package/dist/{chunk-T6MQNNAC.js → chunk-YBDLHFZZ.js} +2 -2
- package/dist/{chunk-ZB4C5TTR.js → chunk-YI3CJPOY.js} +2 -2
- package/dist/chunk-YMAGXBLT.js +3 -0
- package/dist/{chunk-MZNMASFM.js → chunk-YRAGNEBZ.js} +2 -2
- package/dist/chunk-YXZAAQHZ.js +3 -0
- package/dist/chunk-Z2L5H2HF.js +3 -0
- package/dist/{chunk-5CR4U5X2.js → chunk-ZHK7TVAJ.js} +2 -2
- package/dist/chunk-ZJNV27DZ.js +4 -0
- package/dist/{chunk-GQLDYCWS.js → chunk-ZQ6GAIUV.js} +2 -2
- package/dist/{chunk-4GWN76B2.js → chunk-ZQE2QYAC.js} +2 -2
- package/dist/chunk-ZUQ2MDFT.js +2 -0
- package/dist/cli-context-4R2LREXQ.js +3 -0
- package/dist/cli-context-6X7JYARX.js +2 -0
- package/dist/cli-failure-RECEHOM2.js +3 -0
- package/dist/cli-program-MXA3WTAO.js +7 -0
- package/dist/cli.js +1 -1
- package/dist/{code-viewer-AMRXV444.js → code-viewer-C6HE4DFC.js} +2 -2
- package/dist/{code-viewer-EXI5SFFR.js → code-viewer-XHSSAMBX.js} +2 -2
- package/dist/{command-descriptors-ROIOTCCW.js → command-descriptors-NWW34Z54.js} +171 -171
- package/dist/{command-descriptors-H6A4UY72.js → command-descriptors-XHK3PK2I.js} +116 -116
- package/dist/{command-panels-SZONPMLJ.js → command-panels-OXMCJ2QZ.js} +2 -2
- package/dist/direct-navigation-236VXYBZ.js +3 -0
- package/dist/direct-navigation-36YSILY6.js +2 -0
- package/dist/index.js +1 -1
- package/dist/invocation-command-descriptors-35JULLNR.js +3 -0
- package/dist/invocation-command-descriptors-FEWSFUO2.js +2 -0
- package/dist/output-continuation-command-MJBVH3A5.js +2 -0
- package/dist/output-continuation-command-TBXIOPHQ.js +3 -0
- package/dist/project-reindex-5TCGOVSK.js +2 -0
- package/dist/project-reindex-BUNTSYKM.js +3 -0
- package/dist/queries/affected.js +1 -1
- package/dist/queries/anchors.js +1 -1
- package/dist/queries/architecture.js +1 -1
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/context.js +1 -1
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/deep-chains.js +1 -1
- package/dist/queries/dependence-slice.js +1 -1
- package/dist/queries/dependency-depth.js +1 -1
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/entry-map.js +1 -1
- package/dist/queries/evidence.js +1 -1
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.js +1 -1
- package/dist/queries/health.js +1 -1
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.js +1 -1
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/reference-neighborhood.js +1 -1
- package/dist/queries/reference-reachability.js +1 -1
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-chains.js +1 -1
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.js +1 -1
- package/dist/queries/source-inspection.js +1 -1
- package/dist/queries/source-search.js +1 -1
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system-map.js +1 -1
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/trace.js +1 -1
- package/dist/queries/twin-ab.js +1 -1
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/value-flow.js +1 -1
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/reindex-worker.js +1 -1
- package/dist/reindex.js +30 -30
- package/dist/runtime.js +1 -1
- 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/sentinel-ensure-command-3MZCLPQY.js +2 -0
- package/dist/sentinel-ensure-command-LEWHIRLL.js +3 -0
- package/dist/sentinel-worker.js +1 -1
- package/dist/typescript-mailbox-worker.js +1 -1
- package/dist/watch-server.js +6 -6
- package/docs/COMMAND_REFERENCE.md +2 -2
- package/docs/SECURITY_MODEL.md +3 -0
- package/package.json +1 -1
- package/skills/codebaseiq/SKILL.md +15 -3
- package/dist/chunk-2I2UHZET.js +0 -2
- package/dist/chunk-5T44HG5Y.js +0 -88
- package/dist/chunk-5YBDBY5L.js +0 -2
- package/dist/chunk-6EYESTJM.js +0 -3
- package/dist/chunk-6FXXYYQM.js +0 -22
- package/dist/chunk-7UCDGXRW.js +0 -8
- package/dist/chunk-BIADXGC3.js +0 -22
- package/dist/chunk-CLPCFGRT.js +0 -3
- package/dist/chunk-DUKHVPU5.js +0 -4
- package/dist/chunk-G7GVV2TV.js +0 -27
- package/dist/chunk-KUKKLWJD.js +0 -3
- package/dist/chunk-KWRQVLPX.js +0 -3
- package/dist/chunk-MEUHIDI3.js +0 -7
- package/dist/chunk-OP6BUIV6.js +0 -2
- package/dist/chunk-OQ3DK7FW.js +0 -2
- package/dist/chunk-OT5ISJSR.js +0 -2
- package/dist/chunk-SX72EVMY.js +0 -3
- package/dist/chunk-T75DS2E6.js +0 -21
- package/dist/chunk-UC2FD2PS.js +0 -4
- package/dist/chunk-UQYQBLJX.js +0 -5
- package/dist/chunk-V4NGDIEA.js +0 -21
- package/dist/chunk-XUPFA6GH.js +0 -2
- package/dist/chunk-YPBKBYPS.js +0 -21
- package/dist/chunk-ZMA5HWXY.js +0 -3
- package/dist/cli-context-FJL2JHOE.js +0 -3
- package/dist/cli-context-PQNWHMCQ.js +0 -2
- package/dist/cli-program-SCHOHOQE.js +0 -7
- package/dist/direct-navigation-3JOYP2MO.js +0 -3
- package/dist/direct-navigation-SJMJLBY7.js +0 -2
- package/dist/invocation-command-descriptors-GMZX3UAD.js +0 -2
- package/dist/invocation-command-descriptors-HNMKDEF6.js +0 -3
- package/dist/output-continuation-command-5NWVDQT7.js +0 -2
- package/dist/output-continuation-command-RNEHNYPU.js +0 -3
- package/dist/project-reindex-MIW5CYEG.js +0 -3
- package/dist/project-reindex-VQ23LWDA.js +0 -2
- package/dist/sentinel-ensure-command-H66AZ3VE.js +0 -2
- package/dist/sentinel-ensure-command-R4YAUCJB.js +0 -3
package/dist/reindex.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{a as J}from"./chunk-
|
|
2
|
-
VALUES (?, ?, NULL, ?)`),c=i.transaction(u=>{let l=0;for(let p of u){if(o.has(p))continue;let
|
|
3
|
-
`).filter(r=>r&&t.has(pt(r).toLowerCase())).sort()}catch{return null}}function
|
|
1
|
+
import{a as J}from"./chunk-IBPXUGJV.js";import{a as pi,b as fi,c as ln,e as pn,f as gi,h as mi,i as hi,j as yi}from"./chunk-JKUF2UG6.js";import{a as si}from"./chunk-LTPNP6D5.js";import{e as ci,f as di,g as ui,i as li}from"./chunk-ZQ6GAIUV.js";import"./chunk-LMPOC372.js";import{A as rn,B as Zr,C as ei,D as on,G as an,H as ti,I as sn,J as cn,K as ni,L as lt,M as ri,P as ii,Q as dn,S as un,X as oi,Z as ai,a as Lr,b as $,c as Nr,d as ue,e as ie,f as G,g as Re,h as Mr,i as ot,j as Yt,k as V,l as Gr,n as $r,o as Ce,p as Kt,q as at,s as le,t as Le,u as tn,v as Qr,w as Ie,x as Me,y as Pe,z as nn}from"./chunk-SLLFJXTW.js";import"./chunk-NB2DAVPP.js";import"./chunk-ELNRLMC5.js";import"./chunk-DOQLO74K.js";import{a as Ar,b as Oe,c as te,d as ne,e as I,f as nt,g as Jt,h as jr,i as F,j as it}from"./chunk-75A23IID.js";import"./chunk-NMKQOIYZ.js";import"./chunk-YUKYB54I.js";import{a as ut}from"./chunk-6CTSFS7R.js";import"./chunk-TNLOX4TN.js";import"./chunk-RGBZDOUO.js";import{I as Kr,J as Xr,a as st}from"./chunk-NRNVMB2R.js";import{a as j,b as Fe}from"./chunk-23AD24QZ.js";import{a as xe,c as Jr,f as Yr,j as dt,k as Zt,l as en}from"./chunk-YMAGXBLT.js";import{d as ct,e as je}from"./chunk-3LCDIREB.js";import{$ as Qt,A as _,B as z,C,F as D,G as E,H as L,K as Cr,L as tt,P as rt,Q as re,R as Ae,T as Vr,V as Br,W as Ur,X as Wr,Y as qr,_ as Xt,ca as Hr,e as kr,ea as Ne,f as be,g as Wt,h as Dr,ha as zr,i as Fr,k as _r,l as et,m as O,u as _e,v as ee,w as qt,x as Or,y as Ht,z as zt}from"./chunk-6I55VYFG.js";import{createHash as Dp}from"crypto";import{existsSync as N,mkdirSync as $t,readdirSync as Is,renameSync as Ps,rmSync as ke,statSync as Fp}from"fs";import{basename as Gt,dirname as S,extname as _p,join as A,resolve as gs}from"path";import{execFileSync as js}from"child_process";import{constants as Ns,copyFileSync as Si,statSync as Ms}from"fs";import{platform as Gs}from"os";var $s=Object.freeze({size:e=>Ms(e).size,clone:Bs,copy:(e,t)=>Si(e,t)}),Vs=new Set(["ENOSYS","ENOTSUP","EOPNOTSUPP","EINVAL","EXDEV","ENOTTY"]);function pe(e,t,n=$s){let r=n.size(e);try{return n.clone(e,t),{method:"reflink",bytes:r}}catch(i){if(!Ws(i))throw i}return n.copy(e,t),{method:"copy",bytes:r}}function Bs(e,t){if(Gs()!=="darwin"){Si(e,t,Ns.COPYFILE_FICLONE_FORCE);return}try{js("/bin/cp",["-c",e,t],{timeout:6e4,maxBuffer:64*1024,stdio:["ignore","ignore","pipe"],windowsHide:!0})}catch(n){throw Us(n)}}function Us(e){let t=e?.stderr,n=Buffer.isBuffer(t)?t.toString("utf8"):t??"";return/operation not supported|not supported/i.test(n)?Object.assign(e instanceof Error?e:new Error(String(e)),{code:"ENOTSUP"}):/cross-device link/i.test(n)?Object.assign(e instanceof Error?e:new Error(String(e)),{code:"EXDEV"}):e}function Ws(e){let t=e?.code;return t!==void 0&&Vs.has(t)}function bi(){return{reflinkedBytes:0,fallbackCopiedBytes:0}}function fe(e,t){t.method==="reflink"?e.reflinkedBytes+=t.bytes:e.fallbackCopiedBytes+=t.bytes}import qs from"better-sqlite3";import{execFileSync as Hs}from"child_process";import{existsSync as zs,readdirSync as Js}from"fs";import{extname as pt,join as Ys}from"path";function oe(e={}){return{id:"auxiliary-documents",facts:["auxiliary-document"],run:t=>Ri({projectRoot:t.projectRoot,dbPath:t.dbPath,extensions:e.extensions,onStatus:t.onStatus})}}function Ri(e){let t=new Set((e.extensions??Kr).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!zs(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let n=si(e.projectRoot),r=Ks(e.projectRoot,t).filter(o=>!n.isIgnored(o)),i=new qs(j(e.dbPath));try{let o=Qs(i,r),a=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
|
|
2
|
+
VALUES (?, ?, NULL, ?)`),c=i.transaction(u=>{let l=0;for(let p of u){if(o.has(p))continue;let f=Yr(e.projectRoot,p,{inputKind:"auxiliary source file"}),g=a.run(Zs(p),p,f);l+=Number(g.changes)}return l})(r),d={scanned:r.length,inserted:c,existing:r.length-c};return e.onStatus?.(`Augmented SQLite documents with ${c} auxiliary source file${c===1?"":"s"} (${d.existing} already present).`),d}finally{i.close()}}function Ks(e,t){let n=Xs(e,t);if(n)return n;let r=[],i=o=>{let a=o?Ys(e,o):e,s;try{s=Js(a,{withFileTypes:!0})}catch{return}for(let c of s){if(Xr.has(c.name))continue;let d=o?`${o}/${c.name}`:c.name;if(c.isDirectory()){i(d);continue}t.has(pt(c.name).toLowerCase())&&r.push(d)}};return i(""),r.sort()}function Xs(e,t){try{return Hs("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"],windowsHide:!0,timeout:3e4,killSignal:"SIGKILL"}).split(`
|
|
3
|
+
`).filter(r=>r&&t.has(pt(r).toLowerCase())).sort()}catch{return null}}function Qs(e,t){let n=new Set,r=500;for(let i=0;i<t.length;i+=r){let o=t.slice(i,i+r),a=e.prepare(`SELECT relative_path FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let s of a)n.add(s.relative_path)}return n}function Zs(e){return pt(e).toLowerCase()===".vue"?"vue":pt(e).replace(/^\./,"").toLowerCase()||"source"}import{dirname as ec,join as tc}from"path";function xi(e={}){return{id:"runtime-boundaries",facts:["runtime-boundary-observation","runtime-boundary-link"],run:({projectRoot:t,dbPath:n,onStatus:r})=>{let i=new J({projectRoot:t,dbPath:n,indexPath:e.indexPath??tc(ec(n),"index.scip")}),o,a=!1,s=!1;try{let d=e.reuseExisting||e.affectedFiles?li(i):null;e.reuseExisting&&d?.extractorVersion===ci?(o=d,a=!0):(o=di(i,{...d?{previousGraph:d}:{},...e.affectedFiles?{affectedFiles:e.affectedFiles}:{}}),s=(o.coverage.filesReused??0)>0)}finally{i.close()}a||ui(n,o);let c={reused:a,incrementallyUpdated:s,observations:o.observations.length,links:o.links.length,frontiers:o.frontiers.length,filesScanned:o.coverage.filesScanned,errors:o.coverage.extractionErrors.length,phases:o.coverage.phases};return r?.(c.reused?`Reused ${c.observations} cached runtime-boundary observation(s) and ${c.links} link(s).`:c.incrementallyUpdated?`Incrementally refreshed runtime-boundary observations (${c.filesScanned-(o.coverage.filesReused??0)} file(s) extracted, ${o.coverage.filesReused??0} reused) and rebuilt ${c.links} link(s).`:`Extracted ${c.observations} runtime-boundary observation(s), ${c.links} link(s), and ${c.frontiers} unresolved frontier(s).`),!a&&o.coverage.phases&&r?.(`Runtime-boundary phases: ${o.coverage.phases.map(d=>`${d.id} ${d.durationMs.toFixed(0)}ms`).join(", ")}.`),c}}}import{createHash as rc}from"crypto";import{existsSync as ic}from"fs";import{dirname as oc,join as Pi}from"path";function fn(e){let t=new Set;for(let n of e.uncertainty)t.add(n);e.projectIdentityChanged&&t.add("project-identity-changed");for(let n of e.changes)n.kind==="added"&&t.add("file-added"),n.kind==="deleted"&&t.add("file-deleted"),n.inputKind==="config"&&t.add("configuration-changed"),n.inputKind==="ambient"&&t.add("ambient-declaration-changed"),n.inputKind==="other"&&t.add("unclassified-input");return{fullProject:t.size>0,reasons:[...t].sort()}}function ft(e,t,n){let r=e.changes.map(s=>s.path).sort();if(r.length===0&&!e.projectIdentityChanged&&e.uncertainty.length===0)return{mode:"none",changedFiles:r,affectedFiles:[],reasons:[]};let i=new Set(n),o=fn(e),a=new Set(o.reasons);return r.some(s=>!i.has(s))&&a.add("changed-file-outside-project"),t===null?(a.add("dependency-graph-unavailable"),Ii(r,i,a)):a.size>0?Ii(r,i,a):{mode:"closure",changedFiles:r,affectedFiles:nc(r,t,i),reasons:[]}}function Ii(e,t,n){return{mode:"full-project",changedFiles:e,affectedFiles:[...t].sort(),reasons:[...n].sort()}}function nc(e,t,n){let r=new Map;for(let[a,s]of t)if(n.has(a))for(let c of s){if(!n.has(c))continue;let d=r.get(c)??new Set;d.add(a),r.set(c,d)}let i=new Set(e),o=[...e];for(let a=0;a<o.length;a+=1){let s=o[a];if(s!==void 0)for(let c of r.get(s)??[])i.has(c)||(i.add(c),o.push(c))}return[...i].sort()}var ac="<global-symbols>";function sc(e){let t=[];for(let n of e.all(`
|
|
4
4
|
SELECT relative_path, language, position_encoding, text
|
|
5
5
|
FROM documents
|
|
6
6
|
`))t.push({relativePath:n.relative_path,kind:"document",values:[n.language,n.position_encoding,n.text]});for(let n of e.all(`
|
|
@@ -56,8 +56,8 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
56
56
|
) AND NOT EXISTS (
|
|
57
57
|
SELECT 1 FROM mentions m WHERE m.symbol_id = g.id
|
|
58
58
|
)
|
|
59
|
-
`))t.push({relativePath:
|
|
60
|
-
`);n.set(r,o.digest("hex"))}return n}function cc(e,t){let n=[],r=[],i=[],o=[],a=new Set([...e.keys(),...t.keys()]);for(let s of[...a].sort()){let c=e.get(s),d=t.get(s);c===void 0?n.push(s):d===void 0?i.push(s):c!==d?r.push(s):o.push(s)}return{addedFiles:n,modifiedFiles:r,deletedFiles:i,changedFiles:[...n,...r,...i].sort(),unchangedFiles:o}}function mn(e,t,n){let r=new Set(e.affectedFiles),i=new Set(t.changedFiles),o=e.mode==="full-project"?[]:t.changedFiles.filter(c=>!r.has(c)),a=e.affectedFiles.filter(c=>!i.has(c)).sort(),s=t.changedFiles.length-o.length;return{passed:o.length===0,recall:t.changedFiles.length===0?1:s/t.changedFiles.length,affectedRatio:n===0?0:e.affectedFiles.length/n,predictedFiles:[...e.affectedFiles].sort(),actualFiles:[...t.changedFiles],missingFiles:o,extraFiles:a}}function hn(e,t=gc){let n=t.wallNow===void 0&&t.monotonicNow===void 0,r=t.monotonicNow??t.now,i=t.wallNow??t.now,o=r(),a=(d,u)=>{let l=r();return wi(e.refreshResult,d,n?l:i(),Math.max(0,l-o),u)};if(!t.databaseExists(e.previousDbPath))return a("prior-index-unavailable");if(!t.databaseExists(e.candidateDbPath))return a("candidate-index-unavailable");let s=null,c=null;try{s=t.openDatabase(e.projectRoot,e.previousDbPath,e.previousIndexPath),c=t.openDatabase(e.projectRoot,e.candidateDbPath,e.candidateIndexPath);let d=[...new Set([...t.indexedPaths(s),...t.indexedPaths(c)])].sort(),u=Ze(e.previousSnapshot,e.currentSnapshot),l=new Set(d),p=u.changes.length>0&&!fn(u).fullProject&&u.changes.every(b=>l.has(b.path)),g=ft(u,p?t.dependencyGraph(s):new Map,d),f=cc(t.factDigests(s),t.factDigests(c)),h=r();return{version:1,status:"evaluated",refreshResult:e.refreshResult,recordedAt:new Date(n?h:i()).toISOString(),durationMs:Math.max(0,h-o),manifest:u,plan:g,comparison:f,evaluation:mn(g,f,d.length)}}catch(d){return a("oracle-error",d instanceof Error?d.message:String(d))}finally{Pi(s),Pi(c)}}function vi(e,t,n,r=Date.now()){return wi(e,t,r,0,n)}function dc(e){let t=ic(e);return{latestPath:Ii(t,"affected-shadow-latest.json"),historyPath:Ii(t,"affected-shadow.jsonl")}}function Ei(e,t,n=mc){let r=dc(e);return n.appendHistory(r.historyPath,t),n.writeLatest(r.latestPath,t),r}var uc=8*1024*1024,lc=li;function pc(e){let t={historyVersion:1,sourceVersion:e.version,refreshResult:e.refreshResult,recordedAt:e.recordedAt,durationMs:e.durationMs};return e.status==="unavailable"?{...t,status:"unavailable",reason:e.reason,...e.error?{error:e.error}:{}}:{...t,status:"evaluated",mode:e.plan.mode,passed:e.evaluation.passed,recall:e.evaluation.recall,affectedRatio:e.evaluation.affectedRatio,predictedFileCount:e.evaluation.predictedFiles.length,actualFileCount:e.evaluation.actualFiles.length,missingFileCount:e.evaluation.missingFiles.length,fallbackReasons:[...e.plan.reasons]}}function fc(e,t,n=uc){pi(e,pc(t),{maxSegmentBytes:n,previousSuffix:lc})}function gn(e,t=[]){let n=[];for(let r of t)n.push(r);return n.push(e.symbol,e.display_name,e.kind,e.documentation,e.signature_hex,e.enclosing_symbol,e.relationships_hex),n}var gc={now:()=>Date.now(),wallNow:()=>Date.now(),monotonicNow:I,databaseExists:e=>rc(e),openDatabase:(e,t,n)=>new J({projectRoot:e,dbPath:t,indexPath:n}),indexedPaths:e=>at(e),dependencyGraph:e=>ut(e),factDigests:e=>ac(e)},mc={appendHistory:fc,writeLatest:(e,t)=>ie(e,t,{spacing:2,trailingNewline:!0})};function wi(e,t,n,r,i){return{version:1,status:"unavailable",refreshResult:e,recordedAt:new Date(n).toISOString(),durationMs:r,reason:t,...i?{error:i}:{}}}function Pi(e){try{e?.close()}catch{}}import{readdirSync as hc}from"fs";import{isAbsolute as Ti,join as yc,resolve as Sc}from"path";var gt="@sourcegraph/scip-typescript@0.4.0",ki="scip-python-plus@0.7.5",Di="github.com/sourcegraph/scip-go@v0.2.7",Fi="scip-dotnet@0.2.14",bc="scip_dart@1.6.2",Rc=3,xc=new Set(["bin","obj","node_modules"]),Oi={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n,projectPath:r})=>r?{binary:n,args:["index","--output",e,"--no-progress-bar",r]}:t?{binary:n,args:["index","--pnpm-workspaces","--output",e,"--no-progress-bar"]}:{binary:n,args:["index","--output",e,"--no-progress-bar"]},markerFiles:[...O.typescript],installMethods:[{label:"npm",identity:gt,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",gt]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--no-progress-bar"]}),markerFiles:[...O.javascript],installMethods:[{label:"npm",identity:gt,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",gt]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:[...O.java],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:[...O.scala],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:[...O.kotlin],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:Ie.language,indexerBinary:Ie.indexerBinary,checkCommand:`${Ie.indexerBinary} --version`,indexArgs:({outputPath:e})=>({binary:Ie.indexerBinary,args:["scip",".","--output",e]}),markerFiles:[...O.rust],installMethods:[],installUrl:Ie.installUrl},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--project-name","project"]}),markerFiles:[...O.python],installMethods:[{label:"npm",identity:ki,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",ki]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},clojure:{language:"clojure",indexerBinary:"scip-clojure",projectLocalBinaries:["node_modules/.bin/scip-clojure"],checkCommand:"scip-clojure -h",indexArgs:({projectRoot:e,outputPath:t,indexerBinary:n,configPath:r})=>{let i=["-root",e,"-output",t];return r&&i.push("-config",Ti(r)?r:Sc(e,r)),{binary:n,args:i}},markerFiles:[...O.clojure],installMethods:[],installUrl:"https://github.com/PlunderStruck/scip-clojure"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:[...O.ruby],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:[...O.go],installMethods:[{label:"go install",identity:Di,destination:"Go bin directory (GOBIN or GOPATH/bin)",prerequisite:"go",binary:"go",args:["install",Di]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:[...O.cpp],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:[...O.c],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",_i(e,[".sln",".slnx",".csproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:[...O.csharp],installMethods:[{label:"dotnet",identity:Fi,destination:"dotnet global tool directory",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet","--version","0.2.14"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",_i(e,[".sln",".slnx",".vbproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:[...O.vb],installMethods:[{label:"dotnet",identity:Fi,destination:"dotnet global tool directory",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet","--version","0.2.14"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:t})=>({binary:e,args:["--output",t]}),markerFiles:[...O.dart],installMethods:[{label:"dart pub",identity:bc,destination:"Dart pub global cache",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart","1.6.2"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({indexerBinary:e})=>Ti(e)?{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",e]}:{binary:e,args:[]},defaultOutputPath:"index.scip",markerFiles:[...O.php],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function Ai(e){if(!(e.projectPath||e.pnpmWorkspaces)){if(e.language==="typescript")return"{}";if(e.language==="javascript")return'{"compilerOptions":{"allowJs":true}}'}}function mt(e){return Oi[e]}function _i(e,t){let n=[e];for(let r=0;r<=Rc&&n.length>0;r++){let i=[],o=[];for(let a of n){let s;try{s=hc(a,{withFileTypes:!0})}catch{continue}for(let c of s){let d=yc(a,c.name);c.isDirectory()?!c.name.startsWith(".")&&!xc.has(c.name)&&o.push(d):i.push(d)}}for(let a of t){let s=i.filter(c=>c.endsWith(a)).sort()[0];if(s)return s}n=o.sort()}return null}import{writeFileSync as yn}from"fs";import{create as ve}from"@bufbuild/protobuf";import{deserializeSCIP as Sn,serializeSCIP as bn,DocumentSchema as Ec,IndexSchema as Li,MetadataSchema as ji,SymbolInformationSchema as wc}from"@c4312/scip";import{create as Ci}from"@bufbuild/protobuf";import{DocumentSchema as Ic,IndexSchema as Pc,SymbolRole as vc}from"@c4312/scip";function ht(e){let t=new Set,n=new Map;for(let a of e.documents){n.set(a,Dr(a.relativePath));for(let s of a.symbols)s.symbol&&t.add(s.symbol)}for(let a of e.externalSymbols)a.symbol&&t.add(a.symbol);let r=0,i=0,o=[];for(let a of e.documents){let s=n.get(a),c=a.occurrences.filter(d=>(d.symbolRoles&vc.Definition)===0||t.has(d.symbol)?!0:(r+=1,!1));if(s===a.relativePath&&c.length===a.occurrences.length){o.push(a);continue}i+=1,o.push(Ci(Ic,{language:a.language,relativePath:s,occurrences:c,symbols:a.symbols,text:a.text,positionEncoding:a.positionEncoding}))}return{index:i===0?e:Ci(Pc,{metadata:e.metadata,documents:o,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:r,touchedDocuments:i}}function Rn(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=kc(e),n=Dc(e.flatMap(i=>i.documents??[])),r=Gi(e.flatMap(i=>i.externalSymbols??[]));return ve(Li,{metadata:t,documents:n,externalSymbols:r})}function xn(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Sn(D(i,{inputKind:"SCIP merge input",maxBytes:C}))),r=Rn(n);return yn(t,Buffer.from(bn(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Ni(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Sn(D(i,{inputKind:"SCIP merge input",maxBytes:C}))),r=ht(Rn(n));return yn(t,Buffer.from(bn(r.index))),{documentCount:r.index.documents.length,externalSymbolCount:r.index.externalSymbols.length,inputCount:e.length,removedDefinitionOccurrences:r.removedDefinitionOccurrences,touchedDocuments:r.touchedDocuments}}function Tc(e,t,n){let r=e.metadata;if(!r)throw new Error("Cannot rebase a SCIP index without metadata");if(!be(r.projectRoot,t))throw new Error(`Cannot rebase SCIP project root: expected ${t}, got ${r.projectRoot}`);return ve(Li,{metadata:ve(ji,{...r,projectRoot:n}),documents:e.documents,externalSymbols:e.externalSymbols})}function Mi(e,t,n){let r=Sn(D(e,{inputKind:"SCIP normalization input",maxBytes:C})),i=Tc(r,t,n);yn(e,Buffer.from(bn(i)))}function kc(e){let t=e[0]?.metadata;if(!t)return;let n=t.projectRoot;for(let i of e.slice(1)){let o=i.metadata?.projectRoot;if(n&&o&&!be(o,n))throw new Error(`Cannot merge SCIP indexes with different project roots: ${n} vs ${o}`)}let r=n&&kr(n);return r===n?t:ve(ji,{...t,projectRoot:r})}function Dc(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,ve(Ec,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:Fc([...r.occurrences,...n.occurrences]),symbols:Gi([...r.symbols,...n.symbols]),text:Oc(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function Fc(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 Gi(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,ve(wc,{symbol:r.symbol,documentation:Ac([...r.documentation,...n.documentation]),relationships:_c([...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 _c(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 Oc(e,t){return e?t?e.length>=t.length?e:t:e:t}function Ac(e){return[...new Set(e)]}import{createHash as Cc}from"crypto";import{existsSync as $i,rmSync as Vi}from"fs";import{resolve as Lc}from"path";import Wi from"better-sqlite3";var jc={documents:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"language",type:"TEXT",notnull:0,pk:0},{name:"relative_path",type:"TEXT",notnull:1,pk:0},{name:"position_encoding",type:"TEXT",notnull:0,pk:0},{name:"text",type:"TEXT",notnull:0,pk:0}],chunks:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"chunk_index",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"occurrences",type:"BLOB",notnull:1,pk:0}],global_symbols:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"symbol",type:"TEXT",notnull:1,pk:0},{name:"display_name",type:"TEXT",notnull:0,pk:0},{name:"kind",type:"INTEGER",notnull:0,pk:0},{name:"documentation",type:"TEXT",notnull:0,pk:0},{name:"signature",type:"BLOB",notnull:0,pk:0},{name:"enclosing_symbol",type:"TEXT",notnull:0,pk:0},{name:"relationships",type:"BLOB",notnull:0,pk:0}],mentions:[{name:"chunk_id",type:"INTEGER",notnull:1,pk:1},{name:"symbol_id",type:"INTEGER",notnull:1,pk:2},{name:"role",type:"INTEGER",notnull:1,pk:3}],defn_enclosing_ranges:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"symbol_id",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"start_char",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"end_char",type:"INTEGER",notnull:1,pk:0}]},Nc={idx_chunks_line_range:{table:"chunks",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_document:{table:"defn_enclosing_ranges",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_symbol_id:{table:"defn_enclosing_ranges",columns:["symbol_id"]},idx_mentions_symbol_id_role:{table:"mentions",columns:["symbol_id","role"]}};function qi(e){let t=I(),n=Mc(e.affectedFiles);if(Gc(e.previousDbPath,e.miniDbPath,e.candidateDbPath),Vi(e.candidateDbPath,{force:!0}),!$i(e.previousDbPath))throw new Error("previous SQLite generation is unavailable");if(!$i(e.miniDbPath))throw new Error("incremental SQLite mini database is unavailable");Bi(e.previousDbPath,"previous SQLite generation",!1),Bi(e.miniDbPath,"incremental SQLite mini database");let r=pe(e.previousDbPath,e.candidateDbPath);e.writeTelemetry&&fe(e.writeTelemetry,r);let i=null;try{i=new Wi(j(e.candidateDbPath),{fileMustExist:!0}),i.pragma("busy_timeout = 5000"),i.pragma("foreign_keys = ON"),i.prepare("ATTACH DATABASE ? AS incremental").run(j(e.miniDbPath)),In(i,"main","candidate SQLite generation"),In(i,"incremental","incremental SQLite mini database"),$c(i,n),Vc(i,n.length);let o=Pn(i,"main",!0),a=ae(i,"SELECT COUNT(*) AS value FROM main.documents");i.transaction(()=>{Bc(i),Uc(i),Wc(i),e.onStage?.("after-delete"),qc(i),e.onStage?.("after-symbol-reconciliation"),Hc(i),e.onStage?.("after-insert"),zc(i),Jc(i,n.length,a),e.onStage?.("before-commit")}).immediate(),Hi(i,"main","candidate SQLite generation");let d=[...Yc(i)].filter(([u,l])=>o.get(u)!==l).map(([u])=>u).sort();return i.exec("DETACH DATABASE incremental"),i.close(),i=null,{candidateDbPath:e.candidateDbPath,affectedDocumentCount:n.length,changedDocumentPaths:d,durationMs:I()-t}}catch(o){try{i?.close()}finally{Vi(e.candidateDbPath,{force:!0})}throw new Error(`Incremental SQLite publication rejected: ${o instanceof Error?o.message:String(o)}`,{cause:o})}}function Mc(e){if(e.length===0)throw new Error("incremental SQLite publication requires affected documents");let t=[...e].sort();for(let n of t)if(!n||n.startsWith("/")||n.includes("\\")||n.split("/").includes(".."))throw new Error(`invalid affected document path: ${n}`);if(new Set(t).size!==t.length)throw new Error("incremental SQLite publication contains duplicate affected documents");return t}function Gc(e,t,n){let r=[e,t,n].map(i=>Lc(i));if(new Set(r).size!==r.length)throw new Error("previous, mini, and candidate SQLite paths must be distinct")}function Bi(e,t,n=!0){let r=new Wi(j(e),{readonly:!0,fileMustExist:!0});try{In(r,"main",t),n&&Hi(r,"main",t)}finally{r.close()}}function In(e,t,n){for(let[r,i]of Object.entries(jc)){let a=e.prepare(`PRAGMA ${t}.table_info('${r}')`).all().map(({name:s,type:c,notnull:d,pk:u})=>({name:s,type:c.toUpperCase(),notnull:d,pk:u}));if(JSON.stringify(a)!==JSON.stringify(i))throw new Error(`${n} schema changed for table ${r}`)}for(let[r,i]of Object.entries(Nc)){let o=e.prepare(`SELECT tbl_name FROM ${t}.sqlite_master WHERE type = 'index' AND name = ?`).get(r),a=e.prepare(`PRAGMA ${t}.index_info('${r}')`).all().map(s=>s.name);if(o?.tbl_name!==i.table||JSON.stringify(a)!==JSON.stringify(i.columns))throw new Error(`${n} schema changed for index ${r}`)}Ui(e,t,"documents",["relative_path"],n),Ui(e,t,"global_symbols",["symbol"],n)}function Ui(e,t,n,r,i){if(!e.prepare(`PRAGMA ${t}.index_list('${n}')`).all().some(s=>{if(s.unique!==1)return!1;let c=e.prepare(`PRAGMA ${t}.index_info('${s.name}')`).all().map(d=>d.name);return JSON.stringify(c)===JSON.stringify(r)}))throw new Error(`${i} lost the unique ${n}(${r.join(", ")}) constraint`)}function Hi(e,t,n){let r=e.prepare(`PRAGMA ${t}.integrity_check`).pluck().get();if(r!=="ok")throw new Error(`${n} failed integrity_check: ${String(r)}`);if(e.prepare(`PRAGMA ${t}.foreign_key_check`).all().length>0)throw new Error(`${n} failed foreign_key_check`)}function $c(e,t){e.exec("CREATE TEMP TABLE incremental_affected_paths (relative_path TEXT PRIMARY KEY) WITHOUT ROWID");let n=e.prepare("INSERT INTO temp.incremental_affected_paths(relative_path) VALUES (?)");e.transaction(i=>{for(let o of i)n.run(o)})(t)}function Vc(e,t){let n=ae(e,"SELECT COUNT(*) AS value FROM incremental.documents"),r=ae(e,`SELECT COUNT(*) AS value
|
|
59
|
+
`))t.push({relativePath:ac,kind:"global-symbol",values:gn(n)});return cc(t)}function cc(e){let t=new Map;for(let r of e){let i=JSON.stringify([r.kind,r.values]),o=t.get(r.relativePath)??[];o.push(i),t.set(r.relativePath,o)}let n=new Map;for(let[r,i]of[...t].sort(([o],[a])=>o.localeCompare(a))){let o=rc("sha256");for(let a of i.sort())o.update(String(Buffer.byteLength(a))),o.update(":"),o.update(a),o.update(`
|
|
60
|
+
`);n.set(r,o.digest("hex"))}return n}function dc(e,t){let n=[],r=[],i=[],o=[],a=new Set([...e.keys(),...t.keys()]);for(let s of[...a].sort()){let c=e.get(s),d=t.get(s);c===void 0?n.push(s):d===void 0?i.push(s):c!==d?r.push(s):o.push(s)}return{addedFiles:n,modifiedFiles:r,deletedFiles:i,changedFiles:[...n,...r,...i].sort(),unchangedFiles:o}}function mn(e,t,n){let r=new Set(e.affectedFiles),i=new Set(t.changedFiles),o=e.mode==="full-project"?[]:t.changedFiles.filter(c=>!r.has(c)),a=e.affectedFiles.filter(c=>!i.has(c)).sort(),s=t.changedFiles.length-o.length;return{passed:o.length===0,recall:t.changedFiles.length===0?1:s/t.changedFiles.length,affectedRatio:n===0?0:e.affectedFiles.length/n,predictedFiles:[...e.affectedFiles].sort(),actualFiles:[...t.changedFiles],missingFiles:o,extraFiles:a}}function hn(e,t=mc){let n=t.wallNow===void 0&&t.monotonicNow===void 0,r=t.monotonicNow??t.now,i=t.wallNow??t.now,o=r(),a=(d,u)=>{let l=r();return Ti(e.refreshResult,d,n?l:i(),Math.max(0,l-o),u)};if(!t.databaseExists(e.previousDbPath))return a("prior-index-unavailable");if(!t.databaseExists(e.candidateDbPath))return a("candidate-index-unavailable");let s=null,c=null;try{s=t.openDatabase(e.projectRoot,e.previousDbPath,e.previousIndexPath),c=t.openDatabase(e.projectRoot,e.candidateDbPath,e.candidateIndexPath);let d=[...new Set([...t.indexedPaths(s),...t.indexedPaths(c)])].sort(),u=et(e.previousSnapshot,e.currentSnapshot),l=new Set(d),p=u.changes.length>0&&!fn(u).fullProject&&u.changes.every(b=>l.has(b.path)),f=ft(u,p?t.dependencyGraph(s):new Map,d),g=dc(t.factDigests(s),t.factDigests(c)),h=r();return{version:1,status:"evaluated",refreshResult:e.refreshResult,recordedAt:new Date(n?h:i()).toISOString(),durationMs:Math.max(0,h-o),manifest:u,plan:f,comparison:g,evaluation:mn(f,g,d.length)}}catch(d){return a("oracle-error",d instanceof Error?d.message:String(d))}finally{vi(s),vi(c)}}function Ei(e,t,n,r=Date.now()){return Ti(e,t,r,0,n)}function uc(e){let t=oc(e);return{latestPath:Pi(t,"affected-shadow-latest.json"),historyPath:Pi(t,"affected-shadow.jsonl")}}function wi(e,t,n=hc){let r=uc(e);return n.appendHistory(r.historyPath,t),n.writeLatest(r.latestPath,t),r}var lc=8*1024*1024,pc=pi;function fc(e){let t={historyVersion:1,sourceVersion:e.version,refreshResult:e.refreshResult,recordedAt:e.recordedAt,durationMs:e.durationMs};return e.status==="unavailable"?{...t,status:"unavailable",reason:e.reason,...e.error?{error:e.error}:{}}:{...t,status:"evaluated",mode:e.plan.mode,passed:e.evaluation.passed,recall:e.evaluation.recall,affectedRatio:e.evaluation.affectedRatio,predictedFileCount:e.evaluation.predictedFiles.length,actualFileCount:e.evaluation.actualFiles.length,missingFileCount:e.evaluation.missingFiles.length,fallbackReasons:[...e.plan.reasons]}}function gc(e,t,n=lc){fi(e,fc(t),{maxSegmentBytes:n,previousSuffix:pc})}function gn(e,t=[]){let n=[];for(let r of t)n.push(r);return n.push(e.symbol,e.display_name,e.kind,e.documentation,e.signature_hex,e.enclosing_symbol,e.relationships_hex),n}var mc={now:()=>Date.now(),wallNow:()=>Date.now(),monotonicNow:I,databaseExists:e=>ic(e),openDatabase:(e,t,n)=>new J({projectRoot:e,dbPath:t,indexPath:n}),indexedPaths:e=>st(e),dependencyGraph:e=>ut(e),factDigests:e=>sc(e)},hc={appendHistory:gc,writeLatest:(e,t)=>ie(e,t,{spacing:2,trailingNewline:!0})};function Ti(e,t,n,r,i){return{version:1,status:"unavailable",refreshResult:e,recordedAt:new Date(n).toISOString(),durationMs:r,reason:t,...i?{error:i}:{}}}function vi(e){try{e?.close()}catch{}}import{readdirSync as yc}from"fs";import{isAbsolute as ki,join as Sc,resolve as bc}from"path";var gt="@sourcegraph/scip-typescript@0.4.0",Di="scip-python-plus@0.7.5",Fi="github.com/sourcegraph/scip-go@v0.2.7",_i="scip-dotnet@0.2.14",Rc="scip_dart@1.6.2",xc=3,Ic=new Set(["bin","obj","node_modules"]),Ai={typescript:{language:"typescript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,pnpmWorkspaces:t,indexerBinary:n,projectPath:r})=>r?{binary:n,args:["index","--output",e,"--no-progress-bar",r]}:t?{binary:n,args:["index","--pnpm-workspaces","--output",e,"--no-progress-bar"]}:{binary:n,args:["index","--output",e,"--no-progress-bar"]},markerFiles:[...O.typescript],installMethods:[{label:"npm",identity:gt,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",gt]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},javascript:{language:"javascript",indexerBinary:"scip-typescript",checkCommand:"npx scip-typescript --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--no-progress-bar"]}),markerFiles:[...O.javascript],installMethods:[{label:"npm",identity:gt,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",gt]}],installUrl:"https://github.com/sourcegraph/scip-typescript",bundledNpmPackage:"@sourcegraph/scip-typescript"},java:{language:"java",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:[...O.java],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},scala:{language:"scala",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:[...O.scala],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},kotlin:{language:"kotlin",indexerBinary:"scip-java",checkCommand:"scip-java --version",indexArgs:({outputPath:e})=>({binary:"scip-java",args:["index","--output",e]}),markerFiles:[...O.kotlin],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:Ie.language,indexerBinary:Ie.indexerBinary,checkCommand:`${Ie.indexerBinary} --version`,indexArgs:({outputPath:e})=>({binary:Ie.indexerBinary,args:["scip",".","--output",e]}),markerFiles:[...O.rust],installMethods:[],installUrl:Ie.installUrl},python:{language:"python",indexerBinary:"scip-python-plus",binaryAliases:["scip-python"],checkCommand:"scip-python-plus --version",indexArgs:({outputPath:e,indexerBinary:t})=>({binary:t,args:["index","--output",e,"--project-name","project","--project-version","0"]}),markerFiles:[...O.python],installMethods:[{label:"npm",identity:Di,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",Di]}],installUrl:"https://github.com/PlunderStruck/scip-python",bundledNpmPackage:"scip-python-plus"},clojure:{language:"clojure",indexerBinary:"scip-clojure",projectLocalBinaries:["node_modules/.bin/scip-clojure"],checkCommand:"scip-clojure -h",indexArgs:({projectRoot:e,outputPath:t,indexerBinary:n,configPath:r})=>{let i=["-root",e,"-output",t];return r&&i.push("-config",ki(r)?r:bc(e,r)),{binary:n,args:i}},markerFiles:[...O.clojure],installMethods:[],installUrl:"https://github.com/PlunderStruck/scip-clojure"},ruby:{language:"ruby",indexerBinary:"scip-ruby",checkCommand:"scip-ruby --version",indexArgs:({indexerBinary:e})=>({binary:e,args:["--dir","."]}),defaultOutputPath:"index.scip",markerFiles:[...O.ruby],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-ruby/releases"},go:{language:"go",indexerBinary:"scip-go",checkCommand:"scip-go --version",indexArgs:({outputPath:e})=>({binary:"scip-go",args:["--output",e]}),markerFiles:[...O.go],installMethods:[{label:"go install",identity:Fi,destination:"Go bin directory (GOBIN or GOPATH/bin)",prerequisite:"go",binary:"go",args:["install",Fi]}],installUrl:"https://github.com/sourcegraph/scip-go"},cpp:{language:"cpp",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:[...O.cpp],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},c:{language:"c",indexerBinary:"scip-clang",checkCommand:"scip-clang --version",indexArgs:({outputPath:e})=>({binary:"scip-clang",args:["--compdb-path","compile_commands.json","--index-output-path",e]}),markerFiles:[...O.c],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-clang/releases"},csharp:{language:"csharp",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",Oi(e,[".sln",".slnx",".csproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:[...O.csharp],installMethods:[{label:"dotnet",identity:_i,destination:"dotnet global tool directory",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet","--version","0.2.14"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},vb:{language:"vb",indexerBinary:"scip-dotnet",checkCommand:"scip-dotnet --version",indexArgs:({projectRoot:e,outputPath:t})=>({binary:"scip-dotnet",args:["index",Oi(e,[".sln",".slnx",".vbproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:[...O.vb],installMethods:[{label:"dotnet",identity:_i,destination:"dotnet global tool directory",prerequisite:"dotnet",binary:"dotnet",args:["tool","install","--global","scip-dotnet","--version","0.2.14"]}],installUrl:"https://github.com/sourcegraph/scip-dotnet/releases"},dart:{language:"dart",indexerBinary:"scip-dart",checkCommand:"scip-dart --version",indexArgs:({indexerBinary:e,outputPath:t})=>({binary:e,args:["--output",t]}),markerFiles:[...O.dart],installMethods:[{label:"dart pub",identity:Rc,destination:"Dart pub global cache",prerequisite:"dart",binary:"dart",args:["pub","global","activate","scip_dart","1.6.2"]}],installUrl:"https://github.com/Workiva/scip-dart/releases"},php:{language:"php",indexerBinary:"scip-php",projectLocalBinaries:["vendor/davidrjenni/scip-php/bin/scip-php","vendor/bin/scip-php"],checkCommand:"scip-php --version",indexArgs:({indexerBinary:e})=>ki(e)?{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",e]}:{binary:e,args:[]},defaultOutputPath:"index.scip",markerFiles:[...O.php],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function Ci(e){if(!(e.projectPath||e.pnpmWorkspaces)){if(e.language==="typescript")return"{}";if(e.language==="javascript")return'{"compilerOptions":{"allowJs":true}}'}}function mt(e){return Ai[e]}function Oi(e,t){let n=[e];for(let r=0;r<=xc&&n.length>0;r++){let i=[],o=[];for(let a of n){let s;try{s=yc(a,{withFileTypes:!0})}catch{continue}for(let c of s){let d=Sc(a,c.name);c.isDirectory()?!c.name.startsWith(".")&&!Ic.has(c.name)&&o.push(d):i.push(d)}}for(let a of t){let s=i.filter(c=>c.endsWith(a)).sort()[0];if(s)return s}n=o.sort()}return null}import{writeFileSync as yn}from"fs";import{create as ve}from"@bufbuild/protobuf";import{deserializeSCIP as Sn,serializeSCIP as bn,DocumentSchema as wc,IndexSchema as ji,MetadataSchema as Ni,SymbolInformationSchema as Tc}from"@c4312/scip";import{create as Li}from"@bufbuild/protobuf";import{DocumentSchema as Pc,IndexSchema as vc,SymbolRole as Ec}from"@c4312/scip";function ht(e){let t=new Set,n=new Map;for(let a of e.documents){n.set(a,Dr(a.relativePath));for(let s of a.symbols)s.symbol&&t.add(s.symbol)}for(let a of e.externalSymbols)a.symbol&&t.add(a.symbol);let r=0,i=0,o=[];for(let a of e.documents){let s=n.get(a),c=a.occurrences.filter(d=>(d.symbolRoles&Ec.Definition)===0||t.has(d.symbol)?!0:(r+=1,!1));if(s===a.relativePath&&c.length===a.occurrences.length){o.push(a);continue}i+=1,o.push(Li(Pc,{language:a.language,relativePath:s,occurrences:c,symbols:a.symbols,text:a.text,positionEncoding:a.positionEncoding}))}return{index:i===0?e:Li(vc,{metadata:e.metadata,documents:o,externalSymbols:e.externalSymbols}),removedDefinitionOccurrences:r,touchedDocuments:i}}function Rn(e){if(e.length===0)throw new Error("Cannot merge zero SCIP indexes");if(e.length===1)return e[0];let t=Dc(e),n=Fc(e.flatMap(i=>i.documents??[])),r=$i(e.flatMap(i=>i.externalSymbols??[]));return ve(ji,{metadata:t,documents:n,externalSymbols:r})}function xn(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Sn(D(i,{inputKind:"SCIP merge input",maxBytes:C}))),r=Rn(n);return yn(t,Buffer.from(bn(r))),{documentCount:r.documents.length,externalSymbolCount:r.externalSymbols.length,inputCount:e.length}}function Mi(e,t){if(e.length===0)throw new Error("Cannot merge zero SCIP files");let n=e.map(i=>Sn(D(i,{inputKind:"SCIP merge input",maxBytes:C}))),r=ht(Rn(n));return yn(t,Buffer.from(bn(r.index))),{documentCount:r.index.documents.length,externalSymbolCount:r.index.externalSymbols.length,inputCount:e.length,removedDefinitionOccurrences:r.removedDefinitionOccurrences,touchedDocuments:r.touchedDocuments}}function kc(e,t,n){let r=e.metadata;if(!r)throw new Error("Cannot rebase a SCIP index without metadata");if(!be(r.projectRoot,t))throw new Error(`Cannot rebase SCIP project root: expected ${t}, got ${r.projectRoot}`);return ve(ji,{metadata:ve(Ni,{...r,projectRoot:n}),documents:e.documents,externalSymbols:e.externalSymbols})}function Gi(e,t,n){let r=Sn(D(e,{inputKind:"SCIP normalization input",maxBytes:C})),i=kc(r,t,n);yn(e,Buffer.from(bn(i)))}function Dc(e){let t=e[0]?.metadata;if(!t)return;let n=t.projectRoot;for(let i of e.slice(1)){let o=i.metadata?.projectRoot;if(n&&o&&!be(o,n))throw new Error(`Cannot merge SCIP indexes with different project roots: ${n} vs ${o}`)}let r=n&&kr(n);return r===n?t:ve(Ni,{...t,projectRoot:r})}function Fc(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,ve(wc,{language:r.language||n.language,relativePath:r.relativePath||n.relativePath,occurrences:_c([...r.occurrences,...n.occurrences]),symbols:$i([...r.symbols,...n.symbols]),text:Ac(r.text,n.text),positionEncoding:r.positionEncoding||n.positionEncoding}))}return[...t.values()]}function _c(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 $i(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,ve(Tc,{symbol:r.symbol,documentation:Cc([...r.documentation,...n.documentation]),relationships:Oc([...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 Oc(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 Ac(e,t){return e?t?e.length>=t.length?e:t:e:t}function Cc(e){return[...new Set(e)]}import{createHash as Lc}from"crypto";import{existsSync as Vi,rmSync as Bi}from"fs";import{resolve as jc}from"path";import qi from"better-sqlite3";var Nc={documents:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"language",type:"TEXT",notnull:0,pk:0},{name:"relative_path",type:"TEXT",notnull:1,pk:0},{name:"position_encoding",type:"TEXT",notnull:0,pk:0},{name:"text",type:"TEXT",notnull:0,pk:0}],chunks:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"chunk_index",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"occurrences",type:"BLOB",notnull:1,pk:0}],global_symbols:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"symbol",type:"TEXT",notnull:1,pk:0},{name:"display_name",type:"TEXT",notnull:0,pk:0},{name:"kind",type:"INTEGER",notnull:0,pk:0},{name:"documentation",type:"TEXT",notnull:0,pk:0},{name:"signature",type:"BLOB",notnull:0,pk:0},{name:"enclosing_symbol",type:"TEXT",notnull:0,pk:0},{name:"relationships",type:"BLOB",notnull:0,pk:0}],mentions:[{name:"chunk_id",type:"INTEGER",notnull:1,pk:1},{name:"symbol_id",type:"INTEGER",notnull:1,pk:2},{name:"role",type:"INTEGER",notnull:1,pk:3}],defn_enclosing_ranges:[{name:"id",type:"INTEGER",notnull:0,pk:1},{name:"document_id",type:"INTEGER",notnull:1,pk:0},{name:"symbol_id",type:"INTEGER",notnull:1,pk:0},{name:"start_line",type:"INTEGER",notnull:1,pk:0},{name:"start_char",type:"INTEGER",notnull:1,pk:0},{name:"end_line",type:"INTEGER",notnull:1,pk:0},{name:"end_char",type:"INTEGER",notnull:1,pk:0}]},Mc={idx_chunks_line_range:{table:"chunks",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_document:{table:"defn_enclosing_ranges",columns:["document_id","start_line","end_line"]},idx_defn_enclosing_ranges_symbol_id:{table:"defn_enclosing_ranges",columns:["symbol_id"]},idx_mentions_symbol_id_role:{table:"mentions",columns:["symbol_id","role"]}};function Hi(e){let t=I(),n=Gc(e.affectedFiles);if($c(e.previousDbPath,e.miniDbPath,e.candidateDbPath),Bi(e.candidateDbPath,{force:!0}),!Vi(e.previousDbPath))throw new Error("previous SQLite generation is unavailable");if(!Vi(e.miniDbPath))throw new Error("incremental SQLite mini database is unavailable");Ui(e.previousDbPath,"previous SQLite generation",!1),Ui(e.miniDbPath,"incremental SQLite mini database");let r=pe(e.previousDbPath,e.candidateDbPath);e.writeTelemetry&&fe(e.writeTelemetry,r);let i=null;try{i=new qi(j(e.candidateDbPath),{fileMustExist:!0}),i.pragma("busy_timeout = 5000"),i.pragma("foreign_keys = ON"),i.prepare("ATTACH DATABASE ? AS incremental").run(j(e.miniDbPath)),In(i,"main","candidate SQLite generation"),In(i,"incremental","incremental SQLite mini database"),Vc(i,n),Bc(i,n.length);let o=Pn(i,"main",!0),a=ae(i,"SELECT COUNT(*) AS value FROM main.documents");i.transaction(()=>{Uc(i),Wc(i),qc(i),e.onStage?.("after-delete"),Hc(i),e.onStage?.("after-symbol-reconciliation"),zc(i),e.onStage?.("after-insert"),Jc(i),Yc(i,n.length,a),e.onStage?.("before-commit")}).immediate(),zi(i,"main","candidate SQLite generation");let d=[...Kc(i)].filter(([u,l])=>o.get(u)!==l).map(([u])=>u).sort();return i.exec("DETACH DATABASE incremental"),i.close(),i=null,{candidateDbPath:e.candidateDbPath,affectedDocumentCount:n.length,changedDocumentPaths:d,durationMs:I()-t}}catch(o){try{i?.close()}finally{Bi(e.candidateDbPath,{force:!0})}throw new Error(`Incremental SQLite publication rejected: ${o instanceof Error?o.message:String(o)}`,{cause:o})}}function Gc(e){if(e.length===0)throw new Error("incremental SQLite publication requires affected documents");let t=[...e].sort();for(let n of t)if(!n||n.startsWith("/")||n.includes("\\")||n.split("/").includes(".."))throw new Error(`invalid affected document path: ${n}`);if(new Set(t).size!==t.length)throw new Error("incremental SQLite publication contains duplicate affected documents");return t}function $c(e,t,n){let r=[e,t,n].map(i=>jc(i));if(new Set(r).size!==r.length)throw new Error("previous, mini, and candidate SQLite paths must be distinct")}function Ui(e,t,n=!0){let r=new qi(j(e),{readonly:!0,fileMustExist:!0});try{In(r,"main",t),n&&zi(r,"main",t)}finally{r.close()}}function In(e,t,n){for(let[r,i]of Object.entries(Nc)){let a=e.prepare(`PRAGMA ${t}.table_info('${r}')`).all().map(({name:s,type:c,notnull:d,pk:u})=>({name:s,type:c.toUpperCase(),notnull:d,pk:u}));if(JSON.stringify(a)!==JSON.stringify(i))throw new Error(`${n} schema changed for table ${r}`)}for(let[r,i]of Object.entries(Mc)){let o=e.prepare(`SELECT tbl_name FROM ${t}.sqlite_master WHERE type = 'index' AND name = ?`).get(r),a=e.prepare(`PRAGMA ${t}.index_info('${r}')`).all().map(s=>s.name);if(o?.tbl_name!==i.table||JSON.stringify(a)!==JSON.stringify(i.columns))throw new Error(`${n} schema changed for index ${r}`)}Wi(e,t,"documents",["relative_path"],n),Wi(e,t,"global_symbols",["symbol"],n)}function Wi(e,t,n,r,i){if(!e.prepare(`PRAGMA ${t}.index_list('${n}')`).all().some(s=>{if(s.unique!==1)return!1;let c=e.prepare(`PRAGMA ${t}.index_info('${s.name}')`).all().map(d=>d.name);return JSON.stringify(c)===JSON.stringify(r)}))throw new Error(`${i} lost the unique ${n}(${r.join(", ")}) constraint`)}function zi(e,t,n){let r=e.prepare(`PRAGMA ${t}.integrity_check`).pluck().get();if(r!=="ok")throw new Error(`${n} failed integrity_check: ${String(r)}`);if(e.prepare(`PRAGMA ${t}.foreign_key_check`).all().length>0)throw new Error(`${n} failed foreign_key_check`)}function Vc(e,t){e.exec("CREATE TEMP TABLE incremental_affected_paths (relative_path TEXT PRIMARY KEY) WITHOUT ROWID");let n=e.prepare("INSERT INTO temp.incremental_affected_paths(relative_path) VALUES (?)");e.transaction(i=>{for(let o of i)n.run(o)})(t)}function Bc(e,t){let n=ae(e,"SELECT COUNT(*) AS value FROM incremental.documents"),r=ae(e,`SELECT COUNT(*) AS value
|
|
61
61
|
FROM main.documents d
|
|
62
62
|
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`),i=e.prepare(`SELECT p.relative_path
|
|
63
63
|
FROM temp.incremental_affected_paths p
|
|
@@ -67,7 +67,7 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
67
67
|
FROM incremental.documents d
|
|
68
68
|
LEFT JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
69
69
|
WHERE p.relative_path IS NULL
|
|
70
|
-
LIMIT 1`).pluck().get();if(n!==t||r!==t||i!==void 0||o!==void 0)throw new Error("incremental SQLite mini database does not exactly match the affected document set")}function
|
|
70
|
+
LIMIT 1`).pluck().get();if(n!==t||r!==t||i!==void 0||o!==void 0)throw new Error("incremental SQLite mini database does not exactly match the affected document set")}function Uc(e){e.exec(`
|
|
71
71
|
CREATE TEMP TABLE incremental_old_defined_symbols (symbol TEXT PRIMARY KEY) WITHOUT ROWID;
|
|
72
72
|
INSERT OR IGNORE INTO temp.incremental_old_defined_symbols(symbol)
|
|
73
73
|
SELECT g.symbol
|
|
@@ -94,7 +94,7 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
94
94
|
FROM incremental.mentions m
|
|
95
95
|
JOIN incremental.global_symbols g ON g.id = m.symbol_id
|
|
96
96
|
WHERE m.role = 1;
|
|
97
|
-
`)}function
|
|
97
|
+
`)}function Wc(e){let t=e.prepare(`WITH changed_symbols AS (
|
|
98
98
|
SELECT symbol FROM temp.incremental_old_defined_symbols
|
|
99
99
|
UNION
|
|
100
100
|
SELECT symbol FROM temp.incremental_new_defined_symbols
|
|
@@ -117,7 +117,7 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
117
117
|
SELECT u.symbol
|
|
118
118
|
FROM unaffected_definitions u
|
|
119
119
|
JOIN changed_symbols c ON c.symbol = u.symbol
|
|
120
|
-
LIMIT 1`).pluck().get();if(typeof t=="string")throw new Error(`symbol definition is shared by affected and unaffected documents: ${t}`)}function
|
|
120
|
+
LIMIT 1`).pluck().get();if(typeof t=="string")throw new Error(`symbol definition is shared by affected and unaffected documents: ${t}`)}function qc(e){e.exec(`
|
|
121
121
|
DELETE FROM main.mentions
|
|
122
122
|
WHERE chunk_id IN (
|
|
123
123
|
SELECT c.id
|
|
@@ -139,7 +139,7 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
139
139
|
);
|
|
140
140
|
DELETE FROM main.documents
|
|
141
141
|
WHERE relative_path IN (SELECT relative_path FROM temp.incremental_affected_paths);
|
|
142
|
-
`)}function
|
|
142
|
+
`)}function Hc(e){e.exec(`
|
|
143
143
|
UPDATE main.global_symbols
|
|
144
144
|
SET display_name = NULL,
|
|
145
145
|
kind = NULL,
|
|
@@ -181,7 +181,7 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
181
181
|
WHERE source.symbol = main.global_symbols.symbol
|
|
182
182
|
)
|
|
183
183
|
WHERE symbol IN (SELECT symbol FROM temp.incremental_new_defined_symbols);
|
|
184
|
-
`)}function
|
|
184
|
+
`)}function zc(e){let t=ae(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.documents"),n=ae(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.chunks"),r=ae(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.defn_enclosing_ranges");e.prepare(`INSERT INTO main.documents(id, language, relative_path, position_encoding, text)
|
|
185
185
|
SELECT id + ?, language, relative_path, position_encoding, text
|
|
186
186
|
FROM incremental.documents`).run(t),e.prepare(`INSERT INTO main.chunks(id, document_id, chunk_index, start_line, end_line, occurrences)
|
|
187
187
|
SELECT id + ?, document_id + ?, chunk_index, start_line, end_line, occurrences
|
|
@@ -196,15 +196,15 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
196
196
|
r.start_line, r.start_char, r.end_line, r.end_char
|
|
197
197
|
FROM incremental.defn_enclosing_ranges r
|
|
198
198
|
JOIN incremental.global_symbols source ON source.id = r.symbol_id
|
|
199
|
-
JOIN main.global_symbols target ON target.symbol = source.symbol`).run(r,t)}function
|
|
199
|
+
JOIN main.global_symbols target ON target.symbol = source.symbol`).run(r,t)}function Jc(e){e.exec(`
|
|
200
200
|
DELETE FROM main.global_symbols
|
|
201
201
|
WHERE NOT EXISTS (SELECT 1 FROM main.mentions m WHERE m.symbol_id = main.global_symbols.id)
|
|
202
202
|
AND NOT EXISTS (
|
|
203
203
|
SELECT 1 FROM main.defn_enclosing_ranges r WHERE r.symbol_id = main.global_symbols.id
|
|
204
204
|
);
|
|
205
|
-
`)}function
|
|
205
|
+
`)}function Yc(e,t,n){let r=ae(e,"SELECT COUNT(*) AS value FROM main.documents"),i=ae(e,`SELECT COUNT(*) AS value
|
|
206
206
|
FROM main.documents d
|
|
207
|
-
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`);if(r!==n||i!==t)throw new Error("candidate SQLite document counts changed unexpectedly");let o=e.prepare("SELECT relative_path FROM main.documents GROUP BY relative_path HAVING COUNT(*) > 1 LIMIT 1").pluck().get(),a=e.prepare("SELECT symbol FROM main.global_symbols GROUP BY symbol HAVING COUNT(*) > 1 LIMIT 1").pluck().get();if(o!==void 0||a!==void 0)throw new Error("candidate SQLite generation contains duplicate document paths or symbols")}function
|
|
207
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`);if(r!==n||i!==t)throw new Error("candidate SQLite document counts changed unexpectedly");let o=e.prepare("SELECT relative_path FROM main.documents GROUP BY relative_path HAVING COUNT(*) > 1 LIMIT 1").pluck().get(),a=e.prepare("SELECT symbol FROM main.global_symbols GROUP BY symbol HAVING COUNT(*) > 1 LIMIT 1").pluck().get();if(o!==void 0||a!==void 0)throw new Error("candidate SQLite generation contains duplicate document paths or symbols")}function Kc(e){let t=Pn(e,"main",!0),n=Pn(e,"incremental",!1);if(JSON.stringify([...t])!==JSON.stringify([...n]))throw new Error("candidate SQLite affected document facts differ from the mini database");return t}function Pn(e,t,n){let r=n?"JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path":"",i=e.prepare(`SELECT d.relative_path, d.language, d.position_encoding, d.text
|
|
208
208
|
FROM ${t}.documents d
|
|
209
209
|
${r}
|
|
210
210
|
ORDER BY d.relative_path`).all(),o=e.prepare(`SELECT d.relative_path, c.chunk_index, c.start_line, c.end_line, hex(c.occurrences) AS occurrences
|
|
@@ -226,10 +226,10 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
226
226
|
JOIN ${t}.documents d ON d.id = c.document_id
|
|
227
227
|
JOIN ${t}.global_symbols g ON g.id = m.symbol_id
|
|
228
228
|
${r}
|
|
229
|
-
ORDER BY d.relative_path, c.chunk_index, m.role, g.symbol`).all(),c=new Map;for(let[u,l]of Object.entries({documents:i,chunks:o,definitions:a,mentions:s}))for(let p of l){let
|
|
230
|
-
`);d.set(u,p.digest("hex"))}return d}function ae(e,t){return e.prepare(t).get().value}import
|
|
231
|
-
`)}function
|
|
232
|
-
`;)n+=1;continue}if(o==="/"&&e[n+1]==="*"){for(n+=2;n<i&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}t+=o,n+=1}return t}function Dn(e){try{let t=E(e,{maxBytes:_,inputKind:"TypeScript project manifest"}),n=JSON.parse(
|
|
229
|
+
ORDER BY d.relative_path, c.chunk_index, m.role, g.symbol`).all(),c=new Map;for(let[u,l]of Object.entries({documents:i,chunks:o,definitions:a,mentions:s}))for(let p of l){let f=JSON.stringify([u,p]),g=c.get(p.relative_path)??[];g.push(f),c.set(p.relative_path,g)}let d=new Map;for(let[u,l]of[...c].sort(([p],[f])=>p.localeCompare(f))){let p=Lc("sha256");for(let f of l.sort())p.update(f).update(`
|
|
230
|
+
`);d.set(u,p.digest("hex"))}return d}function ae(e,t){return e.prepare(t).get().value}import Xc from"better-sqlite3";var yt="idx_mentions_definitions",Qc=["symbol_id","chunk_id"];function vn(e){let t=new Xc(j(e)),n=[],r=[],i=[];try{return t.transaction(()=>{Zc(t,n),St(t,"idx_global_symbols_symbol")?.join("\0")==="symbol"&&Ji(t,"global_symbols").some(s=>s.name!=="idx_global_symbols_symbol"&&s.unique&&s.columns.join("\0")==="symbol")?(t.exec('DROP INDEX "idx_global_symbols_symbol"'),r.push("idx_global_symbols_symbol")):St(t,"idx_global_symbols_symbol")&&i.push("idx_global_symbols_symbol");let o=St(t,"idx_chunks_doc_id"),a=Ji(t,"chunks").some(s=>s.name!=="idx_chunks_doc_id"&&s.columns.length>1&&s.columns[0]==="document_id");o?.join("\0")==="document_id"&&a?(t.exec('DROP INDEX "idx_chunks_doc_id"'),r.push("idx_chunks_doc_id")):o&&i.push("idx_chunks_doc_id"),t.exec("ANALYZE")})(),{added:n,removed:r,retained:i,analyzed:!0}}catch(o){if(o.code==="SQLITE_NOTADB")return{added:[],removed:[],retained:[],analyzed:!1,skippedReason:"not-a-sqlite-database"};throw o}finally{t.close()}}function Zc(e,t){let n=Yi(e,yt);if(n){let r=n.columns.join("\0")===Qc.join("\0"),i=/\bWHERE\s+role\s*=\s*1\b/iu.test(n.sql??"");if(!r||!i||n.table!=="mentions")throw new Error(`${yt} exists with an incompatible definition`);return}e.exec(`CREATE INDEX "${yt}" ON mentions(symbol_id, chunk_id) WHERE role = 1`),t.push(yt)}function Ji(e,t){return e.prepare(`PRAGMA index_list('${t.replaceAll("'","''")}')`).all().map(n=>({name:n.name,unique:n.unique===1,columns:St(e,n.name)??[]}))}function St(e,t){return Yi(e,t)?.columns??null}function Yi(e,t){let n=e.prepare("SELECT tbl_name, sql FROM sqlite_master WHERE type = 'index' AND name = ?").get(t);if(!n)return null;let r=e.prepare(`PRAGMA index_info('${t.replaceAll("'","''")}')`).all().map(i=>i.name);return{table:n.tbl_name,sql:n.sql,columns:r}}import{writeFileSync as ed}from"fs";function U(e,t){let n=performance.now(),r=e.run(t);return{stageId:e.id,facts:e.facts,durationMs:performance.now()-n,result:r}}function Xi(e){let t=e.readFingerprint(),n=Zi(e.cachePath,t);if(n)return e.onCacheHit?.(n.result),n.result;let r=e.compute();return eo(e.cachePath,e.readFingerprint(),r),r}async function Qi(e){let t=e.readFingerprint(),n=Zi(e.cachePath,t);if(n)return e.onCacheHit?.(n.result),n.result;let r=await e.compute();return eo(e.cachePath,e.readFingerprint(),r),r}function Zi(e,t){try{let n=JSON.parse(E(e,{maxBytes:_,inputKind:"post-index augmentation cache"}));return Ki(n.fingerprint)===Ki(t)?{result:n.result}:null}catch{return null}}function eo(e,t,n){ed(e,`${JSON.stringify({updatedAt:new Date().toISOString(),fingerprint:t,result:n},null,2)}
|
|
231
|
+
`)}function Ki(e){return JSON.stringify(e)}import{createHash as td}from"crypto";import{existsSync as En,readdirSync as nd}from"fs";import{dirname as wn,join as bt,relative as rd,resolve as Tn,sep as to}from"path";function no(e,t){let n=t.includes("."),r={};for(let o of t)r[o]=[];let i=[];for(let o of e){let a=ao(o.path,t);a?r[a].push(o):n?r["."].push(o):i.push(o)}return{files:r,shared:i}}function ro(e,t){let n=new Map;for(let i of e){let o=t[i]?.packageName;o&&n.set(o,i)}let r=new Map;for(let i of e)r.set(i,new Set);for(let i of e){let o=t[i],a=r.get(i);if(!o||o.parseFailed){for(let s of e)s!==i&&a.add(s);continue}for(let s of o.dependencyNames){let c=n.get(s);c&&c!==i&&a.add(c)}for(let s of[...o.pathsTargets,...o.referencesPaths]){let c=ao(s,e);c&&c!==i&&a.add(c)}}return id(e,r)}function io(e,t,n){let r={};for(let i of e){let o=new Map;for(let a of t.files[i]??[])o.set(a.path,a);for(let a of n[i]??[])for(let s of t.files[a]??[])o.set(s.path,s);for(let a of t.shared)o.set(a.path,a);r[i]={files:[...o.values()].sort((a,s)=>a.path.localeCompare(s.path))}}return r}function kn(e){if(e===".")return"root";let t=td("sha256").update(e).digest("hex").slice(0,8);return`${e.split("/").join("__")}-${t}`}function oo(e,t){let n=Tn(e),r={};for(let i of t)r[i]=od(n,i);return r}function ao(e,t){let n;for(let r of t)r!=="."&&(e===r||e.startsWith(`${r}/`))&&(!n||r.length>n.length)&&(n=r);return n}function id(e,t){let n={};for(let r of e){let i=new Set,o=[...t.get(r)??[]];for(;o.length>0;){let a=o.pop();if(!(a===r||i.has(a))){i.add(a);for(let s of t.get(a)??[])s!==r&&!i.has(s)&&o.push(s)}}n[r]=[...i].sort((a,s)=>a.localeCompare(s))}return n}function od(e,t){let n=t==="."?e:bt(e,t),r=ad(n),i=sd(n),o=i?cd(i,e):{pathsTargets:[],referencesPaths:[],failed:!1};return{packageName:r.name,dependencyNames:r.dependencyNames,pathsTargets:o.pathsTargets,referencesPaths:o.referencesPaths,parseFailed:r.failed||o.failed}}function ad(e){let t=bt(e,"package.json");if(!En(t))return{name:void 0,dependencyNames:[],failed:!1};let n=Dn(t);if(!n.ok)return{name:void 0,dependencyNames:[],failed:!0};let r=typeof n.value.name=="string"?n.value.name:void 0,i=new Set;for(let o of["dependencies","devDependencies","peerDependencies"]){let a=n.value[o];if(a&&typeof a=="object"&&!Array.isArray(a))for(let s of Object.keys(a))i.add(s)}return{name:r,dependencyNames:[...i],failed:!1}}function sd(e){let t=bt(e,"tsconfig.json");if(En(t))return t;let n;try{n=nd(e).filter(r=>/^tsconfig.*\.json$/.test(r))}catch{return}return n.sort((r,i)=>r.localeCompare(i)),n.length>0?bt(e,n[0]):void 0}function cd(e,t){let n=Dn(e);if(!n.ok)return{pathsTargets:[],referencesPaths:[],failed:!0};let r=dd(n.value,e,t),i=so(e,n.value,t,0);return{pathsTargets:i.pathsTargets,referencesPaths:r,failed:i.failed}}function dd(e,t,n){let r=e.references;if(!Array.isArray(r))return[];let i=wn(t),o=new Set;for(let a of r){if(!a||typeof a!="object")continue;let s=a.path;if(typeof s!="string"||s.trim()==="")continue;let c=co(s,i,n);c&&o.add(c)}return[...o]}function so(e,t,n,r){let i=ud(t);if(i)return{pathsTargets:ld(i,wn(e),n),failed:!1};if(r>=5)return{pathsTargets:[],failed:!1};let o=pd(t.extends,e,n);if(!o)return{pathsTargets:[],failed:!1};let a=Dn(o);return a.ok?so(o,a.value,n,r+1):{pathsTargets:[],failed:!0}}function ud(e){let t=e.compilerOptions;if(!t||typeof t!="object"||Array.isArray(t))return;let n=t.paths;return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function ld(e,t,n){let r=new Set;for(let i of Object.values(e))if(Array.isArray(i))for(let o of i){if(typeof o!="string")continue;let a=co(o,t,n);a&&r.add(a)}return[...r]}function pd(e,t,n){let r=Array.isArray(e)?e.at(-1):e;if(typeof r!="string"||r.trim()===""||!r.startsWith(".")&&!r.startsWith("/"))return;let i=Tn(wn(t),r);if(i.endsWith(".json")||(i=`${i}.json`),!i.split(to).includes("node_modules")&&Wt(n,i)&&En(i))return i}function co(e,t,n){let r=e.replace(/\/?\*+$/,""),i=Tn(t,r===""?".":r);if(!Wt(n,i))return;let a=rd(n,i).split(to).join("/");return a===""?".":a}function fd(e){let t="",n=0,r=!1,i=e.length;for(;n<i;){let o=e[n];if(r){if(t+=o,o==="\\"&&n+1<i){t+=e[n+1],n+=2;continue}o==='"'&&(r=!1),n+=1;continue}if(o==='"'){r=!0,t+=o,n+=1;continue}if(o==="/"&&e[n+1]==="/"){for(n+=2;n<i&&e[n]!==`
|
|
232
|
+
`;)n+=1;continue}if(o==="/"&&e[n+1]==="*"){for(n+=2;n<i&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}t+=o,n+=1}return t}function Dn(e){try{let t=E(e,{maxBytes:_,inputKind:"TypeScript project manifest"}),n=JSON.parse(fd(t));return n&&typeof n=="object"&&!Array.isArray(n)?{ok:!0,value:n}:{ok:!1}}catch{return{ok:!1}}}import{writeFileSync as Dd}from"fs";import{deserializeSCIP as Fd,PositionEncoding as Rt,serializeSCIP as _d}from"@c4312/scip";import{rmSync as md}from"fs";import hd from"better-sqlite3";var yd=200,Sd=[`CREATE TABLE documents (
|
|
233
233
|
id INTEGER PRIMARY KEY,
|
|
234
234
|
language TEXT,
|
|
235
235
|
relative_path TEXT NOT NULL UNIQUE,
|
|
@@ -269,11 +269,11 @@ import{a as J}from"./chunk-DJKOXMNG.js";import{a as li,b as pi,c as ln,e as pn,f
|
|
|
269
269
|
end_char INTEGER NOT NULL,
|
|
270
270
|
FOREIGN KEY (document_id) REFERENCES documents(id),
|
|
271
271
|
FOREIGN KEY (symbol_id) REFERENCES global_symbols(id)
|
|
272
|
-
)`],
|
|
273
|
-
`)||null,i.enclosingSymbol||null).lastInsertRowid);return n.set(i.symbol,a),a};return{declared:r,referenced:i=>r({symbol:i,displayName:null,kind:null,documentation:[],enclosingSymbol:null})}}function
|
|
274
|
-
VALUES (?, ?, ?, ?, ?, ?)`);for(let i of n.occurrences){if((i.roles&1)===0||lt(i.symbol)||!i.enclosingRange)continue;let[o,a,s,c]=Td(i,n.relativePath);r.run(n.id,t.referenced(i.symbol),o,a,s,c)}}function Pd(e,t,n){let r=e.prepare("INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences) VALUES (?, ?, ?, ?, ?)"),i=e.prepare("INSERT INTO mentions (chunk_id, symbol_id, role) VALUES (?, ?, ?)");wd(n.occurrences).forEach((o,a)=>{let s=Number(r.run(n.id,a,o.startLine,o.endLine,ni(o.occurrences)).lastInsertRowid),c=new Map;for(let d of o.occurrences){if(lt(d.symbol))continue;let u=c.get(d.symbol)??new Set;u.add(d.roles),c.set(d.symbol,u)}for(let[d,u]of c){let l=t.referenced(d);for(let p of u)i.run(s,l,p)}})}function vd(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,{...r,documentation:[...r.documentation,...n.documentation.filter(i=>!r.documentation.includes(i))]})}return[...t.values()].sort((n,r)=>lo(n.symbol,r.symbol))}function Ed(e){let t=[...e].sort((r,i)=>co(r.range,i.range)||lo(r.symbol,i.symbol)),n=[];for(let r of t){let i=n.at(-1);i&&i.symbol===r.symbol&&co(i.range,r.range)===0?n[n.length-1]={...i,roles:i.roles|r.roles}:n.push(r)}return n}function wd(e){let t=[],n=0;for(;n<e.length;){let r=Math.min(e.length,n+hd);for(;r<e.length&&e[r-1].range[0]===e[r].range[0];)r+=1;t.push({startLine:e[n].range[0],endLine:e[r-1].range[0],occurrences:e.slice(n,r)}),n=r}return t}function Td(e,t){let n=e.enclosingRange,[r,i,o,a]=n;if(!(r>=0&&i>=0&&(o>r&&a>=0||o===r&&a>=i)))throw new Error(`bad enclosing range ${JSON.stringify(n)} for symbol ${e.symbol} in document ${t}`);return n}function co(e,t){return e[0]-t[0]||e[1]-t[1]||e[2]-t[2]||e[3]-t[3]}function lo(e,t){return e<t?-1:e>t?1:0}var _d={[Rt.UnspecifiedPositionEncoding]:null,[Rt.UTF8CodeUnitOffsetFromLineStart]:"UTF-8",[Rt.UTF16CodeUnitOffsetFromLineStart]:"UTF-16",[Rt.UTF32CodeUnitOffsetFromLineStart]:"UTF-32"};function fo(e,t,n){let r=Dd(D(e,{inputKind:"SCIP index store input",maxBytes:C})),i={removedDefinitionOccurrences:0,touchedDocuments:0};if(n.sanitize){let o=ht(r);o.touchedDocuments>0&&(kd(e,Buffer.from(Fd(o.index))),r=o.index),i={removedDefinitionOccurrences:o.removedDefinitionOccurrences,touchedDocuments:o.touchedDocuments}}return uo(t,r.documents.map(Od)),i}function Od(e){let t=_d[e.positionEncoding];if(t===void 0)throw new Error(`unknown position encoding ${e.positionEncoding} in ${e.relativePath}`);return{relativePath:e.relativePath,language:e.language||null,positionEncoding:t,text:e.text||null,symbols:e.symbols.map(n=>({symbol:n.symbol,displayName:n.displayName||null,kind:n.kind||null,documentation:n.documentation,enclosingSymbol:n.enclosingSymbol||null})),occurrences:e.occurrences.flatMap(n=>{let r=po(n.range);return r?[{symbol:n.symbol,roles:n.symbolRoles,range:r,enclosingRange:po(n.enclosingRange)}]:[]})}}function po(e){return e.length===3?[e[0],e[1],e[0],e[2]]:e.length===4?[e[0],e[1],e[2],e[3]]:null}import{createHash as ia,randomUUID as fu}from"crypto";import{existsSync as ce,lstatSync as Kn,mkdirSync as we,readdirSync as oa,realpathSync as aa,renameSync as he,rmSync as se,statSync as Dt}from"fs";import{dirname as Xn,join as m,resolve as Qn}from"path";import{setTimeout as gu}from"timers/promises";import{pathToFileURL as ea}from"url";import{deserializeSCIP as sa}from"@c4312/scip";import mu from"better-sqlite3";import{lstatSync as Hd,readdirSync as zd}from"fs";import{join as Jd,relative as Yd,resolve as Mn,sep as Kd}from"path";import{createHash as Ad}from"crypto";import{existsSync as Me,mkdirSync as Cd,readdirSync as go,renameSync as Ld,rmSync as mo,writeFileSync as jd}from"fs";import{join as Y}from"path";import{create as yo,fromBinary as So,toBinary as Nd}from"@bufbuild/protobuf";import{deserializeSCIP as xt,DocumentSchema as _n,IndexSchema as bo,serializeSCIP as Ro}from"@c4312/scip";var It=1,Ge="typescript-scip-fragments";function xo(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 a=ge(o.relativePath);if(t.has(a))throw new Error(`duplicate TypeScript fragment replacement: ${a}`);if(t.add(a),o.bytes===null)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${a}`);let s=So(_n,o.bytes);if(s.relativePath!==a)throw new Error(`TypeScript fragment path mismatch: expected ${a}, got ${s.relativePath}`);n.push(s)}let r=Ro(yo(bo,{documents:n,externalSymbols:[]})),i=xt(r);if(i.documents.length!==n.length||i.externalSymbols.length!==0)throw new Error("affected TypeScript SCIP index failed structural verification");return r}function $e(e){let t=Y(e,Ge);return{rootDir:t,blobDir:Y(t,"blobs"),generationDir:Y(t,"generations")}}function Md(e){let t=xt(e.indexBytes);Co(t.metadata,Lo(e)),Ao(t.externalSymbols);let n=new Set,r=[];for(let o of t.documents){let a=ge(o.relativePath);if(n.has(a))throw new Error(`duplicate TypeScript SCIP document path: ${a}`);n.add(a);let s=Nd(_n,o),c=e.documentIdentities.get(a)??(e.allowUntrackedDocuments?me(JSON.stringify({version:1,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,untrackedDocument:a,contentHash:me(s)})):null);if(!c)throw new Error(`missing TypeScript document identity: ${a}`);r.push(Do(e.cacheDir,{relativePath:a,bytes:s,occurrences:o.occurrences.length,symbols:o.symbols.length,referenceFragments:[]},c))}let i=Fo(e,r);return _o(e.cacheDir,i),i}function Io(e){let t=$e(e.cacheDir);if(!Me(An(t,e.generationIdentity)))return Md(e);let n=vo({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 Po(e){let t=vo({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 a=ge(o.relativePath);if(r.has(a))throw new Error(`duplicate TypeScript fragment replacement: ${a}`);if(r.add(a),!n.has(a))throw new Error(`TypeScript fragment replacement has no prior document: ${a}`);let s=e.documentIdentities.get(a);if(!s)throw new Error(`missing TypeScript document identity: ${a}`);o.bytes===null?n.delete(a):n.set(a,Do(e.cacheDir,o,s))}if(r.size===0)throw new Error("TypeScript fragment generation requires at least one replacement");let i=Fo(e,[...n.values()]);return _o(e.cacheDir,i),i}function vo(e){let t=$e(e.cacheDir),n=An(t,e.generationIdentity),r;try{r=On(E(n,{maxBytes:_,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 a=Y(t.blobDir,`${o.blobHash}.scipdoc`),s=D(a,{maxBytes:z,inputKind:"TypeScript fragment blob"});if(s.byteLength!==o.byteLength||me(s)!==o.blobHash)throw new Error(`TypeScript fragment blob is corrupt: ${o.relativePath}`);i.set(o.relativePath,s)}return{manifest:r,fragments:i}}function Eo(e){let t=To(e);return Fn(t.baseIndex,t.completeDocuments,"assembled")}function wo(e){let t=To(e);return Gd(t.deletedAffectedPaths),{completeIndexBytes:Fn(t.baseIndex,t.completeDocuments,"assembled"),affectedIndexBytes:Fn(t.baseIndex,t.affectedDocuments,"affected")}}function To(e){let t=xt(e.baseIndexBytes);Co(t.metadata,Lo(e)),Ao(t.externalSymbols);let n=new Map;for(let s of e.fragments){let c=ge(s.relativePath);if(n.has(c))throw new Error(`duplicate TypeScript fragment replacement: ${c}`);n.set(c,s)}if(n.size===0)throw new Error("TypeScript index assembly requires at least one replacement");let r=new Set,i=[],o=[],a=[];for(let s of t.documents){let c=ge(s.relativePath);if(r.has(c))throw new Error(`duplicate TypeScript SCIP document path: ${c}`);r.add(c);let d=n.get(c);if(!d){i.push(s);continue}if(n.delete(c),d.bytes===null){a.push(c);continue}let u=So(_n,d.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:a}}function Fn(e,t,n){let r=Ro(yo(bo,{metadata:e.metadata,documents:t,externalSymbols:[]})),i=xt(r);if(i.documents.length!==t.length||i.externalSymbols.length!==0)throw new Error(`${n} TypeScript SCIP index failed structural verification`);return r}function Gd(e){if(e.length>0)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${e[0]}`)}function ko(e,t){let n=$e(e);if(!Me(n.generationDir))return;let r=new Set(t.map(a=>Oo(a))),i=go(n.generationDir).filter(a=>a.endsWith(".json")),o=new Set;for(let a of i.filter(s=>r.has(s))){let s=On(E(Y(n.generationDir,a),{maxBytes:_,inputKind:"TypeScript fragment manifest"}));for(let c of s.documents)o.add(`${c.blobHash}.scipdoc`)}for(let a of i)r.has(a)||mo(Y(n.generationDir,a),{force:!0});if(Me(n.blobDir))for(let a of go(n.blobDir))o.has(a)||mo(Y(n.blobDir,a),{force:!0})}function Do(e,t,n){if(t.bytes===null)throw new Error(`cannot persist an empty TypeScript fragment: ${t.relativePath}`);let r=ge(t.relativePath),i=Buffer.from(t.bytes),o=me(i),a=$e(e);Cd(a.blobDir,{recursive:!0});let s=Y(a.blobDir,`${o}.scipdoc`);if(Me(s)){let c=D(s,{maxBytes:z,inputKind:"TypeScript fragment blob"});if(c.byteLength!==i.byteLength||me(c)!==o)throw new Error(`existing TypeScript fragment blob is corrupt: ${r}`)}else{let c=`${s}.${process.pid}.${Date.now()}.tmp`;jd(c,i),Ld(c,s)}return{relativePath:r,blobHash:o,byteLength:i.byteLength,documentIdentity:n}}function Fo(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:It,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,createdAt:(e.now??(()=>new Date))().toISOString(),documents:n}}function _o(e,t){let n=$e(e),r=An(n,t.generationIdentity);if(Me(r)){let i=On(E(r,{maxBytes:_,inputKind:"TypeScript fragment manifest"}));if(ho(i)!==ho(t))throw new Error(`TypeScript fragment generation is immutable: ${t.generationIdentity}`);return}ie(r,t,{spacing:2,trailingNewline:!0})}function ho(e){return me(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,documents:e.documents}))}function On(e){let t=JSON.parse(e);if(t.version!==It||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(ge(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript fragment record");n.add(r.relativePath)}return t}function An(e,t){return Y(e.generationDir,Oo(t))}function Oo(e){if(!e)throw new Error("TypeScript fragment generation identity must be non-empty");return`${me(e)}.json`}function Ao(e){if(e.length>0)throw new Error("scip-typescript emitted external symbols; incremental document assembly is unsupported")}function Co(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 Lo(e){let t=e.packageVersion??e.runtime?.packageVersion;if(!t)throw new Error("scip-typescript package version is unavailable");return t}function ge(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 me(e){return Ad("sha256").update(e).digest("hex")}import{createHash as $d}from"crypto";import{existsSync as Ve,mkdirSync as Vd,readdirSync as Cn,renameSync as Bd,rmSync as jo,writeFileSync as Ud}from"fs";import{join as B}from"path";var Pt=1,Mo=64*1024*1024,Ue="typescript-scip-overlays";function Go(e){let t=Bo(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 a=Nn(o.relativePath);if(r.has(a))throw new Error(`duplicate TypeScript overlay: ${a}`);r.add(a),n.set(a,Wd(e.cacheDir,o))}if(r.size===0)throw new Error("TypeScript overlay generation requires affected documents");let i={version:Pt,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,a)=>o.relativePath.localeCompare(a.relativePath))};return qd(e.cacheDir,i),i}function $o(e){let t=Bo(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=D(B(We(e.cacheDir),"blobs",`${r.blobHash}.scipdoc`),{maxBytes:z,inputKind:"TypeScript overlay blob"});if(i.byteLength!==r.byteLength||Be(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 Eo({packageVersion:e.packageVersion,baseIndexBytes:e.baseIndexBytes,fragments:n})}function Vo(e,t){let n=We(e),r=B(n,"generations");if(!Ve(r))return;let i=new Set(t.map(jn)),o=new Set;for(let s of Cn(r).filter(c=>i.has(c))){let c=Ln(E(B(r,s),{maxBytes:_,inputKind:"TypeScript overlay manifest"}));for(let d of c.overlays)d.blobHash&&o.add(`${d.blobHash}.scipdoc`)}for(let s of Cn(r))i.has(s)||jo(B(r,s),{force:!0});let a=B(n,"blobs");if(Ve(a))for(let s of Cn(a))o.has(s)||jo(B(a,s),{force:!0})}function Bo(e,t){let n=B(We(e),"generations",jn(t));if(!Ve(n))return null;let r=Ln(E(n,{maxBytes:_,inputKind:"TypeScript overlay manifest"}));if(r.generationIdentity!==t)throw new Error("TypeScript overlay generation identity does not match its path");return r}function Wd(e,t){let n=Nn(t.relativePath);if(t.bytes===null)return{relativePath:n,blobHash:null,byteLength:0};let r=Buffer.from(t.bytes),i=Be(r),o=B(We(e),"blobs");Vd(o,{recursive:!0});let a=B(o,`${i}.scipdoc`);if(Ve(a)){let s=D(a,{maxBytes:z,inputKind:"TypeScript overlay blob"});if(s.byteLength!==r.byteLength||Be(s)!==i)throw new Error(`existing TypeScript overlay blob is corrupt: ${n}`)}else{let s=`${a}.${process.pid}.${Date.now()}.tmp`;Ud(s,r),Bd(s,a)}return{relativePath:n,blobHash:i,byteLength:r.byteLength}}function qd(e,t){let n=B(We(e),"generations",jn(t.generationIdentity));if(Ve(n)){let r=Ln(E(n,{maxBytes:_,inputKind:"TypeScript overlay manifest"}));if(No(r)!==No(t))throw new Error(`TypeScript overlay generation is immutable: ${t.generationIdentity}`);return}ie(n,t,{spacing:2,trailingNewline:!0})}function Ln(e){let t=JSON.parse(e);if(t.version!==Pt||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(Nn(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript overlay record");n.add(r.relativePath)}return t}function We(e){return B(e,Ue)}function jn(e){if(!e)throw new Error("TypeScript overlay generation identity must be non-empty");return`${Be(e)}.json`}function No(e){return Be(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,baseGenerationIdentity:e.baseGenerationIdentity,generationIdentity:e.generationIdentity,overlays:e.overlays}))}function Nn(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 Be(e){return $d("sha256").update(e).digest("hex")}var qe=1,Gn="language-indexes",Uo=["index.db","index.scip","meta.json"],Wo=[Gn,Ge,Ue];function vt(e){let t=[];for(let n of Uo)Xd(e,n),t.push(n);for(let n of Wo)qo(e,n,t);return{version:qe,files:t.sort()}}function Et(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(!Uo.includes(e)&&!Wo.includes(n))throw new Error(`index artifact path is not shareable: ${e}`);return e}function W(e,t){let n=Et(t),r=Mn(e),i=Mn(r,...n.split("/"));if(i!==r&&!i.startsWith(`${r}${Kd}`))throw new Error(`index artifact escapes cache: ${t}`);return i}function qo(e,t,n){let r=Jd(e,t),i;try{i=zd(r,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let o of i){let a=`${t}/${o.name}`;if(o.isSymbolicLink())throw new Error(`index artifact cannot be a symlink: ${a}`);o.isDirectory()?qo(e,a,n):o.isFile()&&n.push(Et(a))}}function Xd(e,t){let n=W(e,t),r;try{r=Hd(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(Yd(Mn(e),n).startsWith(".."))throw new Error(`index artifact escapes cache: ${t}`)}import{createHash as Wn}from"crypto";import{closeSync as Qd,existsSync as w,mkdirSync as Zd,openSync as eu,readSync as tu,readdirSync as qn,renameSync as Un,rmSync as He,statSync as Ee}from"fs";import{basename as Yo,dirname as q,join as R,relative as Ho}from"path";var nu=Object.freeze({maxGenerations:2,maxLogicalBytes:2*1024*1024*1024});function Tt(e){let t=V(e.outputDb),n=au(e);e.onStage?.("after-recovery-retained");let r=e.preserveOutputScip?e.outputScip:e.tempOutputScip,i=Yn({generationRoot:t,databasePath:e.tempOutputDb,indexPath:w(r)?r:void 0,metadataPath:w(e.tempMetaPath)?e.tempMetaPath:void 0}),o=(e.now??(()=>new Date))().toISOString(),a={version:Re,currentGeneration:i.identity,artifactSet:"immutable-v1",...n?{previousGeneration:n}:{},...e.publication?{publication:e.publication}:{},publishedAt:o},s=G(R(t,"state.json"),a,{spacing:2,trailingNewline:!0});e.onStage?.("after-pointer-handoff"),e.preserveOutputScip||Bn(e.tempOutputScip,e.outputScip),e.onStage?.("after-scip-handoff"),Bn(e.tempOutputDb,e.outputDb),e.onStage?.("after-database-handoff"),Bn(e.tempMetaPath,e.metaPath),e.onStage?.("after-metadata-handoff");let c=i.identity,d={...a,stableMirrors:Jn(e.outputDb,e.outputScip)};G(R(t,"state.json"),d,{spacing:2,trailingNewline:!0});let u=Ko(e.outputDb,{now:e.now}),l=Ae(i.directorySync,s.directorySync);return{currentGeneration:c,...n?{previousGeneration:n}:{},retention:u,achievedDurability:l==="synced"?"directory-durable":"file-flushed",directorySync:l}}function Hn(e,t,n,r=()=>new Date){if(!w(e))return null;let i=Ce(e),o=R(V(e),"state.json");if(i?.artifactSet==="immutable-v1"&&Kt(e,i.currentGeneration))return i;let a=V(e),s=!i&&w(o)?cu(n,e,t):void 0;if(s&&!ot(a,s))return null;let c=Yn({generationRoot:a,databasePath:e,indexPath:w(t)?t:void 0,metadataPath:w(n)?n:void 0,forcedIdentity:i?.currentGeneration??s}),d={version:Re,currentGeneration:c.identity,artifactSet:"immutable-v1",stableMirrors:Jn(e,t),...i?.previousGeneration?{previousGeneration:i.previousGeneration}:{},...i?.publication?{publication:i.publication}:{},publishedAt:i?.publishedAt??r().toISOString()};return G(R(a,"state.json"),d,{spacing:2,trailingNewline:!0}),d}function zn(e,t,n=()=>new Date){if(!w(e)||!w(t))throw new Error("metadata-only generation refresh requires stable database and metadata files");let r=Ce(e),i=V(e),o=Yn({generationRoot:i,databasePath:e,indexPath:w(R(q(e),"index.scip"))?R(q(e),"index.scip"):void 0,metadataPath:t}),a=r&&r.currentGeneration!==o.identity?Qo(e,r.currentGeneration):void 0,s={version:Re,currentGeneration:o.identity,artifactSet:"immutable-v1",stableMirrors:Jn(e,R(q(e),"index.scip")),...a?{previousGeneration:a}:{},...r?.publication?{publication:r.publication}:{},publishedAt:n().toISOString()};return G(R(V(e),"state.json"),s,{spacing:2,trailingNewline:!0}),Ko(e,{now:n}),s}function Ko(e,t={}){let n=ru(t.limits),i=(t.now??(()=>new Date))().toISOString(),o=ue(Gr(e),{waitMs:0});if(!o)return{state:"deferred",generationCount:0,logicalBytes:0,protectedGenerations:0,activeReaderLeases:0,staleReaderLeasesRemoved:0,malformedReaderLeases:0,removedGenerations:0,removedLogicalBytes:0,limits:n,at:i,reason:"another process owns local generation retention"};try{let a=Ce(e),s=iu(e),c=$r(e,s.map(b=>b.identity),{isProcessAlive:t.isProcessAlive??ne,readProcessIdentity:t.readProcessIdentity??te}),d=new Set(c.protectedGenerations);a?.currentGeneration&&d.add(a.currentGeneration),a?.previousGeneration?.generationIdentity&&d.add(a.previousGeneration.generationIdentity);let u=s.length,l=s.reduce((b,y)=>b+y.logicalBytes,0),p=0,g=0;for(let b of s){if(u<=n.maxGenerations&&l<=n.maxLogicalBytes)break;d.has(b.identity)||(t.onBeforeRemove?.(b.identity),He(b.path,{recursive:!0,force:!0}),u-=1,l-=b.logicalBytes,p+=1,g+=b.logicalBytes)}let f=u>n.maxGenerations||l>n.maxLogicalBytes,h={state:f?"protected":p>0?"collected":"within-bounds",generationCount:u,logicalBytes:l,protectedGenerations:d.size,activeReaderLeases:c.activeLeases,staleReaderLeasesRemoved:c.staleLeasesRemoved,malformedReaderLeases:c.malformedLeases,removedGenerations:p,removedLogicalBytes:g,limits:n,at:i,...f?{reason:c.malformedLeases>0?"malformed reader ownership evidence fails closed":"retention bounds cannot be met without deleting a protected generation"}:{}};return zo(e,h),h}catch(a){let s={state:"error",generationCount:0,logicalBytes:0,protectedGenerations:0,activeReaderLeases:0,staleReaderLeasesRemoved:0,malformedReaderLeases:0,removedGenerations:0,removedLogicalBytes:0,limits:n,at:i,reason:a instanceof Error?a.message:String(a)};try{zo(e,s)}catch{}return s}finally{o.release()}}function ru(e={}){let t={...nu,...e};if(!Number.isSafeInteger(t.maxGenerations)||t.maxGenerations<2)throw new Error("Local SQLite generation retention must keep at least current and previous generations.");if(!Number.isSafeInteger(t.maxLogicalBytes)||t.maxLogicalBytes<=0)throw new Error("Local SQLite generation byte retention must be a positive safe integer.");return t}function iu(e){let t=V(e);return w(t)?qn(t,{withFileTypes:!0}).filter(n=>n.isDirectory()&&/^[a-f0-9]{64}$/.test(n.name)).map(n=>{let r=R(t,n.name),i=ot(t,n.name),o=i?i.database.size+(i.index?.size??0)+(i.metadata?.size??0):Xo(r);return{identity:n.name,path:r,logicalBytes:o,modifiedAtMs:Ee(r).mtimeMs}}).sort((n,r)=>n.modifiedAtMs-r.modifiedAtMs||n.identity.localeCompare(r.identity)):[]}function Xo(e){let t=0;for(let n of qn(e,{withFileTypes:!0})){let r=R(e,n.name);n.isDirectory()?t+=Xo(r):n.isFile()&&(t+=Ee(r).size)}return t}function zo(e,t){ie(R(V(e),"gc.json"),t,{spacing:2,trailingNewline:!0})}function H(e,t=R(q(e),"meta.json")){let n=R(V(e),"state.json");if(!w(n))return{state:"legacy",statePath:n};let r=Ce(e);if(!r)return{state:"invalid",statePath:n,reason:"generation state is malformed"};try{let i=Kt(e,r.currentGeneration),o=i!==null,a=i?ou(e,t,i,r):!1,s=r.previousGeneration?w(R(q(e),r.previousGeneration.databasePath)):!0;return!a||!o||!s?{state:"drifted",statePath:n,currentMatches:a,recoveryExists:s,generation:r,reason:o?a?"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:a,recoveryExists:s,generation:r}}catch(i){return{state:"drifted",statePath:n,currentMatches:!1,recoveryExists:!1,generation:r,reason:i instanceof Error?i.message:String(i)}}}function ou(e,t,n,r){if(r.stableMirrors&&(r.stableMirrors.databaseFileIdentity!==Le(e)||r.stableMirrors.indexFileIdentity!==void 0&&r.stableMirrors.indexFileIdentity!==Le(R(q(e),"index.scip")))||!Jo(e,n.database))return!1;let i=R(q(e),"index.scip");if(n.index&&!Jo(i,n.index))return!1;if(!n.metadata)return!w(t);if(!w(t))return!1;let o=R(V(e),n.identity,n.metadata.file);return w(o)&&le(L(t,"reindex metadata"))===le(L(o,"immutable reindex metadata"))}function Jo(e,t){return w(e)&&Ee(e).isFile()&&Ee(e).size===t.size}function au(e){let t=Hn(e.outputDb,e.outputScip,e.metaPath);return t?Qo(e.outputDb,t.currentGeneration):void 0}function Jn(e,t){return{databaseFileIdentity:Le(e),...w(t)?{indexFileIdentity:Le(t)}:{}}}function Qo(e,t){let n=R(V(e),t),r=R(n,Yo(e)),i=R(n,"meta.json");return{generationIdentity:t,databasePath:Ho(q(e),r),...w(i)?{metadataPath:Ho(q(e),i)}:{}}}function su(e){if(w(e)){for(let t of qn(e,{withFileTypes:!0}))if(t.isDirectory()&&t.name.endsWith(".tmp"))try{He(R(e,t.name),{recursive:!0,force:!0})}catch{}}}function cu(e,t,n=R(q(t),"index.scip")){let r=Wn("sha256").update("sqlite-generation-artifacts-v1\0");return r.update(wt(t)),w(n)&&r.update(`\0${wt(n)}`),w(e)&&r.update(`\0${le(L(e,"reindex metadata"))}`),r.digest("hex")}function Yn(e){let t=$n(e.databasePath),n=e.indexPath?$n(e.indexPath):void 0,r=e.metadataPath?$n(e.metadataPath):void 0,i=e.forcedIdentity??du(t,n,e.metadataPath),o=R(e.generationRoot,i),a=R(o,Yt);if(w(a)){let d=ot(e.generationRoot,i);if(d&&Zo(o,d.database,t)&&lu(o,d.index,n)&&pu(o,d.metadata,e.metadataPath))return{identity:i,directorySync:re(e.generationRoot)};throw new Error(`SQLite generation ${i} already exists with different or corrupt artifacts.`)}let s=[nt(e.generationRoot)];su(e.generationRoot);let c=`${o}.${process.pid}.${Date.now()}.tmp`;He(c,{recursive:!0,force:!0}),Zd(c,{recursive:!0});try{s.push(Vn(e.databasePath,R(c,t.file))),n&&e.indexPath&&s.push(Vn(e.indexPath,R(c,n.file))),r&&e.metadataPath&&s.push(Vn(e.metadataPath,R(c,r.file)));let d=G(R(c,Yt),{version:Mr,identity:i,database:t,...n?{index:n}:{},...r?{metadata:r}:{}},{spacing:2,trailingNewline:!0});d.directorySync!=="not-requested"&&s.push(d.directorySync),s.push(re(c)),F(()=>Un(c,o)),s.push(re(e.generationRoot))}finally{try{He(c,{recursive:!0,force:!0})}catch{}}return{identity:i,directorySync:Ae(...s)}}function du(e,t,n){let r=Wn("sha256").update("sqlite-generation-artifacts-v1\0");return r.update(e.sha256),t&&r.update(`\0${t.sha256}`),n&&r.update(`\0${le(L(n,"reindex metadata"))}`),r.digest("hex")}function $n(e){return{file:Yo(e),size:Ee(e).size,sha256:wt(e)}}function wt(e){let t=Wn("sha256"),n=eu(e,"r"),r=Buffer.allocUnsafe(1024*1024);try{for(;;){let i=uu(n,r);if(i===0)break;t.update(r.subarray(0,i))}}finally{Qd(n)}return t.digest("hex")}function uu(e,t){let n=0;for(;n<t.length;){let r=tu(e,t,n,t.length-n,null);if(n+=r,r===0)break}return n}function Vn(e,t){return rt(e,t,{mode:292})}function Zo(e,t,n){let r=R(e,t.file);return t.file===n.file&&t.size===n.size&&t.sha256===n.sha256&&w(r)&&Ee(r).size===t.size&&wt(r)===t.sha256}function lu(e,t,n){return!t||!n?t===n:Zo(e,t,n)}function pu(e,t,n){if(!t||!n)return t===void 0&&n===void 0;let r=R(e,t.file);return w(r)&&le(L(r,"stored reindex metadata"))===le(L(n,"candidate reindex metadata"))}function Bn(e,t){F(()=>He(`${t}.tmp-replace`,{force:!0})),F(()=>Un(e,`${t}.tmp-replace`)),F(()=>Un(`${t}.tmp-replace`,t))}var Zn=1,ta="CODEBASEIQ_SHARED_CACHE",hu=2,kt=JSON.stringify({cliVersion:Vr,artifactCatalogVersion:qe,postIndexAugmentationSchemaVersion:hu,sqliteGenerationStoreVersion:Re,typescriptFragmentStoreVersion:It,typescriptOverlayStoreVersion:Pt}),er="manifest.json",yu="shared-cache.json",tr=[Gn,Ge,Ue];function Ft(e,t){if(!e.clean||!e.treeOid)return;let n=Sa(JSON.stringify({version:Zn,repositoryId:e.repositoryId,treeOid:e.treeOid,fingerprint:t,producerIdentity:kt}));return{repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,fingerprint:t,producerIdentity:kt,generationId:n,repositoryCacheDir:Wr(e.repositoryId)}}function ca(e,t,n){if(process.env[ta]==="0")return`${ta}=0`;if(!qr(n))return"explicit cache or database override";if(Qt(Xn(t))!==Qt(Ur(e))||t!==m(Xn(t),"index.db"))return"index database is outside the managed worktree cache"}function K(e,t=!0){let n=rr(e),r;try{r=ga(E(m(n,er),{inputKind:"shared-generation manifest",maxBytes:_}))}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=W(n,i.path),a=Dt(o);if(!a.isFile()||a.size!==i.size||et(o,{inputKind:"shared-generation artifact",maxBytes:C})!==i.sha256)return null}}catch{return null}return r}function da(e,t,n){if(!e.treeOid)return null;let r=en(t,n),i=m(Br(),"repositories",e.repositoryId),o;try{let c=Kn(i);if(!c.isDirectory()||c.isSymbolicLink())return null;o=aa(i)}catch{return null}let a=m(o,"generations"),s=[];try{for(let c of oa(a)){if(!/^[a-f0-9]{64}$/.test(c))continue;let d=m(a,c),u;try{u=Kn(d)}catch{continue}if(!(!u.isDirectory()||u.isSymbolicLink()))try{let l=ga(E(m(d,er),{inputKind:"shared-generation baseline manifest",maxBytes:_}));l.generationId===c&&l.repositoryId===e.repositoryId&&l.treeOid===e.treeOid&&l.producerIdentity===kt&&xu(l.fingerprint,r)&&s.push(l)}catch{continue}}}catch{return null}s.sort((c,d)=>Date.parse(d.createdAt)-Date.parse(c.createdAt)||c.generationId.localeCompare(d.generationId));for(let c of s){let d={repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,fingerprint:c.fingerprint,producerIdentity:c.producerIdentity,generationId:c.generationId,repositoryCacheDir:o},u=K(d);if(u)return{snapshot:d,manifest:u}}return null}function ua(e){let t=ue(m(e.snapshot.repositoryCacheDir,"locks",`${e.snapshot.generationId}.publish.lock`));if(!t)throw new Error(`shared generation publication is already in progress for ${e.snapshot.generationId}`);try{return Su(e)}finally{t.release()}}function Su(e){let t=K(e.snapshot);if(t)return na(e.snapshot,t);if(!ya(e.sourceCacheDir,e.sourceProjectRoot,e.snapshot.fingerprint))throw new Error("source index is incomplete, incompatible, or corrupt");let n=ra(e.sourceCacheDir);if(!n)throw new Error("source index artifacts are incomplete");let r=vt(e.sourceCacheDir),i=m(e.snapshot.repositoryCacheDir,"generations"),o=[nt(i)],a=Fe(m(i,`.tmp-${process.pid}-`));try{let s=[];for(let f of r.files){let h=W(e.sourceCacheDir,f),b=W(a,f);o.push(Je(h,b,292)),e.onPublicationStage?.("after-artifact-flushed",f);let y=Dt(b).size;s.push({path:f,size:y,sha256:et(b,{inputKind:"staged shared-generation artifact",maxBytes:C})})}let c=sa(D(m(a,"index.scip"),{inputKind:"staged shared SCIP index",maxBytes:C})).metadata?.projectRoot;if(!c)throw new Error("shared SCIP generation has no project root metadata");let d=ir(e.sourceProjectRoot);if(!be(c,d))throw new Error("shared SCIP generation root does not match its source worktree");if(ra(e.sourceCacheDir)!==n||e.sourceStillValid&&!e.sourceStillValid())throw new Error("source index changed while staging a shared generation");let u={version:Zn,artifactCatalogVersion:qe,generationId:e.snapshot.generationId,repositoryId:e.snapshot.repositoryId,treeOid:e.snapshot.treeOid,fingerprint:e.snapshot.fingerprint,producerIdentity:e.snapshot.producerIdentity,sourceProjectRoot:e.sourceProjectRoot,scipProjectRoot:c,createdAt:(e.now??(()=>new Date))().toISOString(),artifacts:s.sort((f,h)=>f.path.localeCompare(h.path))},l=G(m(a,er),u,{spacing:2,trailingNewline:!0});l.directorySync!=="not-requested"&&o.push(l.directorySync),e.onPublicationStage?.("after-manifest-flushed"),o.push(re(a)),e.onPublicationStage?.("after-staging-directory-synced");let p=rr(e.snapshot);try{if(ce(p)&&!K(e.snapshot)){let f=`${p}.corrupt-${process.pid}-${Date.now()}`;F(()=>he(p,f)),se(f,{recursive:!0,force:!0})}F(()=>he(a,p))}catch(f){let h=K(e.snapshot);if(h)return na(e.snapshot,h);throw f}e.onPublicationStage?.("after-generation-renamed"),o.push(re(i)),e.onPublicationStage?.("after-generations-directory-synced");let g=Ae(...o);return{kind:"published",manifest:u,achievedDurability:g==="synced"?"directory-durable":"file-flushed",directorySync:g}}finally{se(a,{recursive:!0,force:!0})}}function na(e,t){let n=re(m(e.repositoryCacheDir,"generations"));return{kind:"existing",manifest:t,achievedDurability:n==="synced"?"directory-durable":"file-flushed",directorySync:n}}function _t(e){let t=rr(e.snapshot);we(e.targetCacheDir,{recursive:!0});let n=ue(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=Fe(m(e.targetCacheDir,".shared-hydrate-")),Eu(e.manifest,e.snapshot);for(let c of e.manifest.artifacts){let d=W(t,c.path),u=W(r,c.path);if(Je(d,u),Dt(u).size!==c.size||et(u,{inputKind:"hydrated shared-generation artifact",maxBytes:C})!==c.sha256)throw new Error(`shared artifact is corrupt: ${c.path}`)}let a=ir(e.targetProjectRoot);if(a!==e.manifest.scipProjectRoot)for(let c of e.manifest.artifacts)c.path.endsWith(".scip")&&Mi(W(r,c.path),e.manifest.scipProjectRoot,a);if(!ya(r,e.targetProjectRoot,e.snapshot.fingerprint,!1))throw new Error("staged shared generation failed completeness or integrity validation");i=Iu(e.targetCacheDir,r),o=!0,Pu(r,e.targetCacheDir,i),Tt({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 s=H(m(e.targetCacheDir,"index.db"),m(e.targetCacheDir,"meta.json"));if(s.state==="invalid"||s.state==="drifted")throw new Error(`hydrated SQLite generation failed validation: ${s.reason}`);e.persistLease!==!1&&nr(e.snapshot,e.targetCacheDir,e.action??"attached",e.now)}catch(a){throw o&&i&&vu(e.targetCacheDir,i),a}finally{r&&se(r,{recursive:!0,force:!0}),n.release()}}async function la(e,t={}){let n=t.timeoutMs??3e4,r=t.pollMs??100,i=t.now??I,o=i()+n,a=m(e.repositoryCacheDir,"locks"),s=m(a,`${e.generationId}.lock`),c=d=>{if(!d||typeof d!="object"||Array.isArray(d))return null;let u=d.pid;return typeof u=="number"&&Number.isSafeInteger(u)&&u>0?{pid:u}:null};for(;i()<=o;){if(K(e))return{kind:"generation-ready"};let d=tt(s,{kind:"shared-generation-build",detail:{generationId:e.generationId},parseLegacy:c});if(d.kind==="acquired")return{kind:"owner",release:()=>d.lock.release()};let u=o-i();if(u<=0)break;await gu(Math.min(r,u))}return K(e)?{kind:"generation-ready"}:{kind:"timeout"}}function nr(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:fa(i)};return ma(e.repositoryCacheDir,o,!0),o}function pa(e,t,n=void 0){let r={version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,localCacheDir:t,baseGenerationId:e.generationId,lastAction:"overlay",lastReason:`private cache forked from shared baseline ${e.generationId}`,lastSeenAt:(n??(()=>new Date))().toISOString()},i={...r,ownershipChecksum:fa(r)};return ma(e.repositoryCacheDir,i,!0),i}function fa(e){return Sa(JSON.stringify({version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:Qn(e.projectRoot),localCacheDir:Qn(e.localCacheDir)}))}function ga(e){let t=JSON.parse(e);if(t.version!==Zn||t.artifactCatalogVersion!==qe||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!==kt||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(Et(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 Je(e,t,n=384){return rt(e,t,{mode:n})}function bu(e,t,n){we(e,{recursive:!0}),G(m(e,yu),{version:1,repositoryId:t,worktreeId:n},{spacing:2,trailingNewline:!0})}function ra(e){try{let t=vt(e),n=ia("sha256");for(let r of t.files){let i=W(e,r),o=Dt(i).size;n.update(r).update("\0").update(String(o)).update("\0"),Cr(i,{inputKind:"source-generation artifact",maxBytes:C},a=>n.update(a)),n.update("\0")}return n.digest("hex")}catch{return null}}function Ru(e){try{let t=ee(E(m(e,"meta.json"),{inputKind:"reindex metadata",maxBytes:_}));return(t.kind==="legacy"||t.kind==="supported")&&t.capabilities.publishableGeneration?t.metadata:void 0}catch{return}}function xu(e,t){let n=en(e.languages,e);return JSON.stringify(n)===JSON.stringify(t)}function rr(e){return m(e.repositoryCacheDir,"generations",e.generationId)}function ma(e,t,n){let r=Nr(e,{waitMs:5e3});if(!r)throw new Error("repository cache cleanup is busy");try{if(n){let o=t.activeGenerationId??t.baseGenerationId;if(!o||!ce(m(e,"generations",o)))throw new Error("shared generation disappeared before its lease was attached")}let i=m(e,"worktrees");we(i,{recursive:!0}),G(m(i,`${t.worktreeId}.json`),t,{spacing:2,trailingNewline:!0}),bu(t.localCacheDir,t.repositoryId,t.worktreeId)}finally{r.release()}}function Iu(e,t){let n=m(t,".rollback"),r=new Map,i=new Map;we(n,{recursive:!0});for(let s of["index.scip","index.db","meta.json"]){let c=m(e,s),d=ce(c);r.set(s,d),d&&Je(c,m(n,"stable",s))}for(let s of tr){let c=m(e,s),d=ce(c);if(d){let u=Kn(c);if(!u.isDirectory()||u.isSymbolicLink())throw new Error(`managed artifact path is not a directory: ${s}`)}i.set(s,d)}let o=m(e,it),a=ce(o);return a&&ha(o,m(n,"sqlite-generations")),{root:n,stableFiles:r,managedDirectories:i,generationStoreExisted:a}}function Pu(e,t,n){for(let r of tr){let i=m(t,r);if(n.managedDirectories.get(r)){let a=m(n.root,"managed",r);we(Xn(a),{recursive:!0}),F(()=>he(i,a))}let o=m(e,r);ce(o)&&F(()=>he(o,i))}}function vu(e,t){for(let i of tr){let o=m(e,i),a=m(t.root,"managed",i);t.managedDirectories.get(i)?ce(a)&&(se(o,{recursive:!0,force:!0}),F(()=>he(a,o))):se(o,{recursive:!0,force:!0})}for(let[i,o]of t.stableFiles){let a=m(e,i);if(!o){se(a,{force:!0});continue}let s=`${a}.shared-restore-${fu()}`;Je(m(t.root,"stable",i),s),F(()=>se(a,{force:!0})),F(()=>he(s,a))}let n=m(e,it);se(n,{recursive:!0,force:!0});let r=m(t.root,"sqlite-generations");t.generationStoreExisted&&ce(r)&&F(()=>he(r,n))}function ha(e,t){we(t,{recursive:!0});for(let n of oa(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()?ha(r,i):n.isFile()&&Je(r,i)}}function Eu(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 ya(e,t,n,r=!0,i=!0){try{let o=Ru(e);if(!o||JSON.stringify(o.fingerprint)!==JSON.stringify(n)||JSON.stringify([...o.indexedLanguages??[]].sort())!==JSON.stringify([...n.languages].sort()))return ze("source validation rejected metadata"),!1;let a=vt(e),s=H(m(e,"index.db"),m(e,"meta.json"));if(r?s.state!=="current":s.state==="invalid"||s.state==="drifted")return ze(`source validation rejected SQLite generation state ${s.state}`),!1;let c=new mu(j(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 d=ir(t),l=(i?a.files.filter(p=>p.endsWith(".scip")):["index.scip"]).every(p=>{let g=sa(D(W(e,p),{inputKind:"shared SCIP validation artifact",maxBytes:C})).metadata?.projectRoot,f=g!==void 0&&be(g,d);return f||ze(`source validation rejected SCIP root for ${p}: ${String(g)}`),f});return l||ze("source validation rejected SCIP project roots"),l}catch(o){return ze(`source validation failed: ${o instanceof Error?o.message:String(o)}`),!1}}function ze(e){process.env.CODEBASEIQ_DEBUG&&console.error(`shared-cache: ${e}`)}function ir(e){try{return ea(aa(e)).href}catch{return ea(Qn(e)).href}}function Sa(e){return ia("sha256").update(e).digest("hex")}import{createHash as Wu}from"crypto";import{existsSync as ar,statSync as qu,writeFileSync as sr}from"fs";import{join as Hu}from"path";import{createRequire as wu}from"module";import{dirname as Tu,isAbsolute as Wm,relative as qm,resolve as Hm,sep as zm}from"path";var ba=wu(import.meta.url),ku=1,Ra="0.4.0";function or(){let e=Du();return e.available?{available:!0,packageVersion:e.packageVersion,typescriptVersion:e.typescriptVersion,producerIdentity:e.producerIdentity}:e}function Du(){try{let e=ba.resolve("@sourcegraph/scip-typescript/package.json"),t=JSON.parse(L(e,"scip-typescript package manifest"));if(t.version!==Ra)return{available:!1,reason:`unsupported scip-typescript version ${String(t.version??"unknown")}; expected ${Ra}`};let n=Tu(e),r=ba.resolve("typescript/package.json",{paths:[n]}),i=JSON.parse(L(r,"TypeScript package manifest"));return typeof i.version!="string"||!i.version?{available:!1,reason:"scip-typescript TypeScript compiler version is unavailable"}:{available:!0,packageRoot:n,packageVersion:t.version,typescriptVersion:i.version,producerIdentity:Fu(t.version,i.version)}}catch(e){return{available:!1,reason:`scip-typescript document producer unavailable: ${e instanceof Error?e.message:String(e)}`}}}function Fu(e,t){return`scip-typescript:${e}:typescript:${t}:document-adapter:${ku}`}import{createHash as _u}from"crypto";import{dirname as Ou,join as xa}from"path";var Ot=4;var Au="typescript-index";function Ia(e){let t=xa(e,Au),n=ei(t);return{...n,requestDir:n.legacyRequestDir}}function Pa(e){try{let t=Or(ee(L(xa(Ou(e),"meta.json"),"reindex metadata")));return t?_u("sha256").update(t).digest("hex"):null}catch{return null}}import{randomUUID as Cu}from"crypto";import{existsSync as Lu}from"fs";var ju=12e4,Nu=5,At=class{projectRoot;cacheDir;baseGeneration;timeoutMs;runtime;mailboxLimits;constructor(t,n={}){this.projectRoot=Hr(t.projectRoot),this.cacheDir=t.cacheDir,this.baseGeneration=t.baseGeneration,this.timeoutMs=n.timeoutMs??Bu(),this.runtime=n.runtime??Uu,this.mailboxLimits=n.mailboxLimits??{}}request(t){let n=ri(this.cacheDir),r=Ia(this.cacheDir),i=dn(n.statePath);if(!va(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript index service is not running.");let o=this.runtime.now(),a=o+this.timeoutMs,s=(this.runtime.monotonicNow??I)()+this.timeoutMs,c=sn("typescript-index-v4",{baseGeneration:this.baseGeneration,request:t}),d=cn(c),u=ti(r,{mailboxVersion:an,operationKey:c,clientId:this.runtime.randomId(),enqueuedAtMs:o,deadlineAtMs:a,protocolVersion:Ot,id:d,baseGeneration:this.baseGeneration,request:t},{nowMs:o,limits:this.mailboxLimits});for(;(this.runtime.monotonicNow??I)()<=s;){if(Lu(u.responsePath))return Mu(E(u.responsePath,{maxBytes:this.mailboxLimits.maxItemBytes??64*1024*1024,inputKind:"TypeScript index mailbox response"}),d,c,this.baseGeneration,t.producerIdentity,t.affectedFiles);let l=dn(n.statePath);if(!va(l,this.projectRoot,this.runtime))throw new Error("TypeScript index service stopped while processing a request.");this.runtime.sleep(Nu)}throw new Error(`TypeScript index service timed out after ${this.timeoutMs}ms.`)}};function va(e,t,n){let r=e?.processIdentity?n.readProcessIdentity?.(e.pid):null;return e!==null&&e.projectRoot===t&&e.typescriptIndex?.protocolVersion===Ot&&n.isProcessAlive(e.pid)&&(!e.processIdentity||r!=null&&Oe(e.processIdentity,r))}function Mu(e,t,n,r,i,o){let a=JSON.parse(e);if(a.protocolVersion!==Ot||a.id!==t||a.operationKey!==n||a.ok===!0&&a.baseGeneration!==r)throw new Error("TypeScript index service wrote an incompatible response.");if(a.ok!==!0)throw new Error(typeof a.error=="string"?a.error:"TypeScript index service request failed.");let s=Gu(a.response,i),c=[...new Set(o)].sort(),d=s.fragments.map(u=>u.relativePath).sort();if(JSON.stringify(d)!==JSON.stringify(c))throw new Error("TypeScript index service omitted or added an affected document.");return s}function Gu(e,t){if(!e||typeof e!="object")throw new Error("TypeScript index service wrote an invalid response.");let n=e;if(n.producerIdentity!==t||typeof n.cold!="boolean"||typeof n.durationMs!="number"||!Number.isFinite(n.durationMs)||!Array.isArray(n.fragments))throw new Error("TypeScript index service wrote an invalid response.");let r=new Set,i=n.fragments.map(o=>{if(!o||typeof o.relativePath!="string"||o.bytesBase64!==null&&typeof o.bytesBase64!="string"||typeof o.occurrences!="number"||!Number.isInteger(o.occurrences)||o.occurrences<0||typeof o.symbols!="number"||!Number.isInteger(o.symbols)||o.symbols<0||!Array.isArray(o.referenceFragments)||!o.referenceFragments.every($u)||r.has(o.relativePath))throw new Error("TypeScript index service wrote an invalid fragment.");r.add(o.relativePath);let a=o.bytesBase64===null?null:Vu(o.bytesBase64);return{relativePath:o.relativePath,bytes:a,occurrences:o.occurrences,symbols:o.symbols,referenceFragments:o.referenceFragments}});return{producerIdentity:n.producerIdentity,cold:n.cold,durationMs:n.durationMs,fragments:i}}function $u(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.targetSymbol=="string"&&!!t.location&&typeof t.location.file=="string"&&Number.isInteger(t.location.line)&&Number.isInteger(t.location.column)}function Vu(e){let t=Buffer.from(e,"base64");if(t.toString("base64")!==e)throw new Error("TypeScript index service wrote invalid base64.");return t}function Bu(){let e=Number(process.env.SCIP_TYPESCRIPT_INDEX_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:ju}var Uu={now:Date.now,monotonicNow:I,randomId:Cu,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:ne,readProcessIdentity:te};function zu(e){let t=e.projectMode==="workspace"?e.workspaceProjects??[]:["."];if(t.length===0)return{eligible:!1,reason:"workspace project roots unavailable"};if(t.length===1&&t[0]==="."&&!e.rootTsconfigExists)return{eligible:!1,reason:"root tsconfig unavailable"};if(!e.previousSnapshot)return{eligible:!1,reason:"prior project snapshot unavailable"};if(e.graph===null)return{eligible:!1,reason:"dependency graph unavailable"};if(e.projectFiles.length===0)return{eligible:!1,reason:"prior TypeScript documents unavailable"};let n=Ze(e.previousSnapshot,e.currentSnapshot);if(n.changes.length===0)return{eligible:!1,reason:"no changed project inputs"};if(n.changes.some(u=>u.kind!=="modified"||u.inputKind!=="source"||!un(u.path)))return{eligible:!1,reason:"change is not a modified TypeScript source file"};let r=ft(n,e.graph,e.projectFiles);if(r.mode!=="closure"||r.affectedFiles.length===0)return{eligible:!1,reason:r.reasons.length>0?`affected set widened: ${r.reasons.join(", ")}`:"empty affected set"};let i=Ju(r,t,e.graph);if(!i)return{eligible:!1,reason:"affected files cross or ambiguously match TypeScript projects"};let o=Ea(e.currentSnapshot,e.projectFiles,e.producerIdentity),a=Ea(e.previousSnapshot,e.projectFiles,e.producerIdentity);if(o!==a)return{eligible:!1,reason:"TypeScript fragment project identity changed"};let s=Ta(e.previousSnapshot,e.projectFiles,e.graph,e.producerIdentity,e.projectFiles);if(!s)return{eligible:!1,reason:"prior document identity unavailable"};let c=Ta(e.currentSnapshot,e.projectFiles,e.graph,e.producerIdentity,r.affectedFiles);if(!c)return{eligible:!1,reason:"next document identity unavailable"};let d=i.length===1?i[0]:void 0;return{eligible:!0,manifest:n,plan:r,projectIdentity:o,previousFragmentGeneration:wa(e.previousSnapshot,e.producerIdentity),nextFragmentGeneration:wa(e.currentSnapshot,e.producerIdentity),previousDocumentIdentities:s,nextDocumentIdentities:c,projects:i,...d?{tsconfigPath:d.tsconfigPath,projectArgument:d.projectArgument}:{}}}function Ju(e,t,n){let r=new Map;for(let o of e.affectedFiles){let a=Yu(o,t);if(!a)return null;let s=r.get(a)??[];s.push(o),r.set(a,s)}let i=[];for(let[o,a]of[...r].sort(([s],[c])=>s.localeCompare(c))){let s=new Set(a),c=e.changedFiles.filter(d=>s.has(d)||a.some(u=>Ku(u,d,n)));if(c.length===0)return null;i.push({projectArgument:o,tsconfigPath:o==="."?"tsconfig.json":`${o}/tsconfig.json`,modifiedFiles:c,affectedFiles:[...a].sort()})}return i}function Yu(e,t){let n=t.filter(o=>o==="."||e===o||e.startsWith(`${o}/`));if(n.length===0)return null;let r=[...new Set(n)].sort((o,a)=>Ct(a)-Ct(o)||o.localeCompare(a)),i=r[0];return r[1]&&Ct(r[1])===Ct(i)?null:i}function Ct(e){return e==="."?0:e.split("/").filter(Boolean).length}function Ku(e,t,n){let r=new Set,i=[e];for(let o=0;o<i.length;o+=1){let a=i[o];if(!(!a||r.has(a))){r.add(a);for(let s of n.get(a)??[]){if(s===t)return!0;r.has(s)||i.push(s)}}}return!1}function ka(e){let t=I();try{if(!ar(e.previousDbPath)||!ar(e.previousShardPath))throw new Error("prior TypeScript graph or language shard unavailable");let n=performance.now(),r=or();if(!r.available)throw new Error(r.reason);let i=performance.now()-n;n=performance.now();let o=new J({projectRoot:e.projectRoot,dbPath:e.previousDbPath,indexPath:e.previousIndexPath}),a,s;try{a=at(o,{includeIgnored:!1}).filter(un).sort(),s=ut(o)}finally{o.close()}let c=performance.now()-n,d=zu({projectMode:e.projectMode,workspaceProjects:e.projectMode==="workspace"?xe(e.projectRoot,e.currentSnapshot.typescriptProjects):void 0,previousSnapshot:e.previousSnapshot,currentSnapshot:e.currentSnapshot,projectFiles:a,graph:s,producerIdentity:r.producerIdentity,rootTsconfigExists:ar(Hu(e.projectRoot,"tsconfig.json"))});if(!d.eligible)throw new Error(d.reason);let u=Pa(e.previousDbPath);if(!u)throw new Error("published TypeScript base generation unavailable");n=performance.now();let l=new At({projectRoot:e.projectRoot,cacheDir:e.cacheDir,baseGeneration:u}),p=d.projects.map(v=>l.request({kind:"emit-documents",tsconfigPath:v.tsconfigPath,projectArgument:v.projectArgument,projectIdentity:d.projectIdentity,producerIdentity:r.producerIdentity,modifiedFiles:v.modifiedFiles,affectedFiles:v.affectedFiles})),g=p.flatMap(v=>v.fragments),f=performance.now()-n,h=qu(e.previousShardPath).size>=Mo;n=performance.now();let b=h?null:D(e.previousShardPath,{inputKind:"TypeScript base SCIP shard",maxBytes:C}),y=h?{completeIndexBytes:null,affectedIndexBytes:xo(g)}:wo({packageVersion:r.packageVersion,baseIndexBytes:b,fragments:g}),x=performance.now()-n;n=performance.now(),h?Go({cacheDir:e.cacheDir,previousGenerationIdentity:d.previousFragmentGeneration,nextGenerationIdentity:d.nextFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:d.projectIdentity,baseShardCurrent:e.baseShardCurrent,fragments:g}):(Io({cacheDir:e.cacheDir,packageVersion:r.packageVersion,indexBytes:b,producerIdentity:r.producerIdentity,projectIdentity:d.projectIdentity,generationIdentity:d.previousFragmentGeneration,documentIdentities:d.previousDocumentIdentities,allowUntrackedDocuments:!0}),Po({cacheDir:e.cacheDir,previousGenerationIdentity:d.previousFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:d.projectIdentity,generationIdentity:d.nextFragmentGeneration,fragments:g,documentIdentities:d.nextDocumentIdentities}));let P=performance.now()-n;n=performance.now(),y.completeIndexBytes&&sr(e.candidateShardPath,y.completeIndexBytes),sr(e.candidateAffectedScipPath,y.affectedIndexBytes);let k=performance.now()-n,T={scipPath:h?e.previousShardPath:e.candidateShardPath,candidateScipPath:e.candidateShardPath,affectedScipPath:e.candidateAffectedScipPath,completeScipUpdated:!h,durationMs:I()-t,cold:p.some(v=>v.cold),changedFiles:d.plan.changedFiles,affectedFiles:d.plan.affectedFiles,producerIdentity:r.producerIdentity,previousFragmentGeneration:d.previousFragmentGeneration,nextFragmentGeneration:d.nextFragmentGeneration,manifest:d.manifest,plan:d.plan,projectFileCount:a.length,referenceFragmentsByFile:new Map(g.map(v=>[v.relativePath,v.referenceFragments])),timings:{runtimeMs:i,graphMs:c,requestMs:f,serviceMs:p.reduce((v,ye)=>v+ye.durationMs,0),assemblyMs:x,fragmentStoreMs:P,writeMs:k}};return e.onStatus(`Incremental TypeScript index emitted ${T.affectedFiles.length} affected document(s) across ${d.projects.length} project(s) in ${(T.durationMs/1e3).toFixed(3)}s (${T.cold?"cold":"warm"} service; ${h?"whole SCIP deferred":"whole SCIP current"}; runtime ${i.toFixed(0)}ms, graph ${c.toFixed(0)}ms, request ${f.toFixed(0)}ms, assembly ${x.toFixed(0)}ms, fragments ${P.toFixed(0)}ms, write ${k.toFixed(0)}ms).`),T}catch(n){return e.onStatus(`Incremental TypeScript index unavailable: ${n instanceof Error?n.message:String(n)}. Falling back to the whole-project indexer.`),null}}function Da(e){let t=or();if(!t.available)throw new Error(t.reason);let n=$o({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,baseIndexBytes:D(e.baseShardPath,{inputKind:"TypeScript base SCIP shard",maxBytes:C}),packageVersion:t.packageVersion});sr(e.candidateShardPath,n)}function Ea(e,t,n){let r=e.files.filter(i=>Fr(i.path,e.languages)!=="source").map(i=>({path:i.path,size:i.size,hash:i.hash})).sort((i,o)=>i.path.localeCompare(o.path));return cr(JSON.stringify({version:1,producerIdentity:n,pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:[...e.typescriptProjects].sort(),projectFiles:[...t].sort(),nonSourceInputs:r}))}function wa(e,t){return cr(JSON.stringify({version:1,producerIdentity:t,snapshot:e}))}function Ta(e,t,n,r,i){let o=new Set(e.files.map(c=>c.path)),a=ii({projectFiles:t.filter(c=>o.has(c)),snapshot:e,graph:n,engineIdentity:r}),s=new Map;for(let c of i){let d=a.identityFor(c,"typescript-scip-document-v1");if(d.key){s.set(c,d.key);continue}if(o.has(c))return null;s.set(c,cr(JSON.stringify({version:1,producerIdentity:r,generatedDocument:c})))}return s}function cr(e){return Wu("sha256").update(e).digest("hex")}import{closeSync as Xu,existsSync as Lt,fstatSync as Qu,lstatSync as Zu,openSync as el,renameSync as lr,rmSync as jt,statSync as tl,writeSync as nl}from"fs";import{cpus as rl}from"os";import{join as pr}from"path";var dr=Symbol("no-error");async function Fa(e,t,n){if(e.length===0)return[];let r=new Array(e.length),i=Number.isFinite(t)?Math.max(1,Math.floor(t)):1,o=Math.min(e.length,i),a=0,s=dr,c=!0,d=Array.from({length:o},async()=>{for(;c&&a<e.length;){let u=a++;try{r[u]=await n(e[u])}catch(l){s===dr&&(s=l),c=!1}}});if(await Promise.all(d),s!==dr)throw s;return r}function il(e,t){if(e.temporaryRootConfigContent===void 0)return null;let n=pr(t,"tsconfig.json"),r=Buffer.from(e.temporaryRootConfigContent,"utf8"),i;try{i=el(n,"wx",384)}catch(o){if(o.code==="EEXIST")return null;throw o}try{nl(i,r);let o=Qu(i);return{path:n,content:r,device:o.dev,inode:o.ino}}finally{Xu(i)}}function ol(e){if(e)try{let t=Zu(e.path);if(!t.isFile()||t.dev!==e.device||t.ino!==e.inode||t.size!==e.content.byteLength)return;let n;try{n=D(e.path,{maxBytes:e.content.byteLength,inputKind:"temporary TypeScript index configuration"})}catch{return}if(!n.equals(e.content))return;jt(e.path)}catch(t){if(t.code!=="ENOENT")throw t}}function al(e,t,n){if(!e.defaultOutputPath)return;let r=pr(t,e.defaultOutputPath);n!==r&&Lt(r)&&lr(r,n)}function sl(e,t,n){if(!e.defaultOutputPath)return null;let r=pr(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return jt(i,{force:!0}),Lt(r)?(lr(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function cl(e){e&&(jt(e.defaultOutputPath,{force:!0}),e.backupPath&&Lt(e.backupPath)&&lr(e.backupPath,e.defaultOutputPath))}function dl(e,t){if(e<=1)return 1;let n=Number(process.env.CODEBASEIQ_INDEXER_CONCURRENCY??0),r=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,rl().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function Oa(e,t,n,r,i){$(i,"Reindex cancelled by its owner.");let o=e.filter(u=>u.config.defaultOutputPath),a=e.filter(u=>!u.config.defaultOutputPath),s=[],c=dl(a.length,r),d=await Fa(a,c,u=>ur(u,t,n,i));if(c>1){let u=new Map;for(let l of d.filter(p=>p.result.skipped&&p.retryable)){let p=a.find(g=>g.id===l.result.id);p&&(n(`Retrying ${p.label} indexer serially after parallel failure...`),$(i,"Reindex cancelled by its owner."),u.set(p.id,(await ur(p,t,n,i)).result))}s.push(...d.map(({result:l})=>u.get(l.id)??l))}else s.push(...d.map(({result:u})=>u));for(let u of o)$(i,"Reindex cancelled by its owner."),s.push((await ur(u,t,n,i)).result);return s.sort((u,l)=>e.findIndex(p=>p.id===u.id)-e.findIndex(p=>p.id===l.id))}async function ur(e,t,n,r){$(r,"Reindex cancelled by its owner."),n(`Indexing ${e.label} with ${e.resolvedBinary}...`),jt(e.scipPath,{force:!0});let i=sl(e.config,t,e.scipPath),o=il(e,t),a=[e.binary,...e.args].join(" "),s=I();try{e.trustedProjectTool&&Zr(t,e.trustedProjectTool);let d=Xr(e.binary,e.args),u=await hi({command:d.binary,args:d.args,label:`${e.label} indexer`,cwd:t,env:e.env,timeoutMs:ul(),maxStdoutBytes:50*1024*1024,maxStderrBytes:50*1024*1024,signal:r});if(u.status!==0){let l=u.stderr.trim();throw new Error(`${e.resolvedBinary} exited with status ${u.status}${l?`:
|
|
275
|
-
${l}`:""}`)}
|
|
276
|
-
`)
|
|
272
|
+
)`],bd=["CREATE INDEX idx_chunks_line_range ON chunks(document_id, start_line, end_line)","CREATE INDEX idx_mentions_symbol_id_role ON mentions(symbol_id, role)","CREATE INDEX idx_defn_enclosing_ranges_symbol_id ON defn_enclosing_ranges(symbol_id)","CREATE INDEX idx_defn_enclosing_ranges_document ON defn_enclosing_ranges(document_id, start_line, end_line)","CREATE INDEX idx_chunks_doc_id ON chunks(document_id)","CREATE INDEX idx_global_symbols_symbol ON global_symbols(symbol)"];function lo(e,t){md(e,{force:!0});let n=new hd(j(e));try{n.pragma("journal_mode = WAL"),n.pragma("synchronous = NORMAL"),n.pragma("temp_store = MEMORY"),n.pragma("foreign_keys = ON");for(let r of Sd)n.exec(r);n.transaction(()=>Rd(n,t)).immediate(),n.transaction(()=>{for(let r of bd)n.exec(r)}).immediate()}finally{n.close()}}function Rd(e,t){let n=xd(e);for(let r of Id(e,n,t))Pd(e,n,r),vd(e,n,r)}function xd(e){let t=e.prepare("INSERT INTO global_symbols (symbol, display_name, kind, documentation, enclosing_symbol) VALUES (?, ?, ?, ?, ?)"),n=new Map,r=i=>{let o=n.get(i.symbol);if(o!==void 0)return o;let a=Number(t.run(i.symbol,i.displayName||null,i.kind||null,i.documentation.join(`
|
|
273
|
+
`)||null,i.enclosingSymbol||null).lastInsertRowid);return n.set(i.symbol,a),a};return{declared:r,referenced:i=>r({symbol:i,displayName:null,kind:null,documentation:[],enclosingSymbol:null})}}function Id(e,t,n){let r=e.prepare("INSERT INTO documents (language, relative_path, position_encoding, text) VALUES (?, ?, ?, ?)"),i=[],o=new Set;for(let a of n){if(!a.relativePath)throw new Error("document relative path must not be empty");if(o.has(a.relativePath))continue;o.add(a.relativePath);let s=Number(r.run(a.language||null,a.relativePath,a.positionEncoding,a.text||null).lastInsertRowid);for(let c of Ed(a.symbols)){if(!c.symbol)throw new Error(`empty symbol in symbol information for document ${a.relativePath}`);lt(c.symbol)||t.declared(c)}i.push({id:s,relativePath:a.relativePath,occurrences:wd(a.occurrences)})}return i}function Pd(e,t,n){let r=e.prepare(`INSERT INTO defn_enclosing_ranges (document_id, symbol_id, start_line, start_char, end_line, end_char)
|
|
274
|
+
VALUES (?, ?, ?, ?, ?, ?)`);for(let i of n.occurrences){if((i.roles&1)===0||lt(i.symbol)||!i.enclosingRange)continue;let[o,a,s,c]=kd(i,n.relativePath);r.run(n.id,t.referenced(i.symbol),o,a,s,c)}}function vd(e,t,n){let r=e.prepare("INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences) VALUES (?, ?, ?, ?, ?)"),i=e.prepare("INSERT INTO mentions (chunk_id, symbol_id, role) VALUES (?, ?, ?)");Td(n.occurrences).forEach((o,a)=>{let s=Number(r.run(n.id,a,o.startLine,o.endLine,ri(o.occurrences)).lastInsertRowid),c=new Map;for(let d of o.occurrences){if(lt(d.symbol))continue;let u=c.get(d.symbol)??new Set;u.add(d.roles),c.set(d.symbol,u)}for(let[d,u]of c){let l=t.referenced(d);for(let p of u)i.run(s,l,p)}})}function Ed(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,{...r,documentation:[...r.documentation,...n.documentation.filter(i=>!r.documentation.includes(i))]})}return[...t.values()].sort((n,r)=>po(n.symbol,r.symbol))}function wd(e){let t=[...e].sort((r,i)=>uo(r.range,i.range)||po(r.symbol,i.symbol)),n=[];for(let r of t){let i=n.at(-1);i&&i.symbol===r.symbol&&uo(i.range,r.range)===0?n[n.length-1]={...i,roles:i.roles|r.roles}:n.push(r)}return n}function Td(e){let t=[],n=0;for(;n<e.length;){let r=Math.min(e.length,n+yd);for(;r<e.length&&e[r-1].range[0]===e[r].range[0];)r+=1;t.push({startLine:e[n].range[0],endLine:e[r-1].range[0],occurrences:e.slice(n,r)}),n=r}return t}function kd(e,t){let n=e.enclosingRange,[r,i,o,a]=n;if(!(r>=0&&i>=0&&(o>r&&a>=0||o===r&&a>=i)))throw new Error(`bad enclosing range ${JSON.stringify(n)} for symbol ${e.symbol} in document ${t}`);return n}function uo(e,t){return e[0]-t[0]||e[1]-t[1]||e[2]-t[2]||e[3]-t[3]}function po(e,t){return e<t?-1:e>t?1:0}var Od={[Rt.UnspecifiedPositionEncoding]:null,[Rt.UTF8CodeUnitOffsetFromLineStart]:"UTF-8",[Rt.UTF16CodeUnitOffsetFromLineStart]:"UTF-16",[Rt.UTF32CodeUnitOffsetFromLineStart]:"UTF-32"};function go(e,t,n){let r=Fd(D(e,{inputKind:"SCIP index store input",maxBytes:C})),i={removedDefinitionOccurrences:0,touchedDocuments:0};if(n.sanitize){let o=ht(r);o.touchedDocuments>0&&(Dd(e,Buffer.from(_d(o.index))),r=o.index),i={removedDefinitionOccurrences:o.removedDefinitionOccurrences,touchedDocuments:o.touchedDocuments}}return lo(t,r.documents.map(Ad)),i}function Ad(e){let t=Od[e.positionEncoding];if(t===void 0)throw new Error(`unknown position encoding ${e.positionEncoding} in ${e.relativePath}`);return{relativePath:e.relativePath,language:e.language||null,positionEncoding:t,text:e.text||null,symbols:e.symbols.map(n=>({symbol:n.symbol,displayName:n.displayName||null,kind:n.kind||null,documentation:n.documentation,enclosingSymbol:n.enclosingSymbol||null})),occurrences:e.occurrences.flatMap(n=>{let r=fo(n.range);return r?[{symbol:n.symbol,roles:n.symbolRoles,range:r,enclosingRange:fo(n.enclosingRange)}]:[]})}}function fo(e){return e.length===3?[e[0],e[1],e[0],e[2]]:e.length===4?[e[0],e[1],e[2],e[3]]:null}import{createHash as oa,randomUUID as gu}from"crypto";import{existsSync as ce,lstatSync as Kn,mkdirSync as we,readdirSync as aa,realpathSync as sa,renameSync as he,rmSync as se,statSync as Dt}from"fs";import{dirname as Xn,join as m,resolve as Qn}from"path";import{setTimeout as mu}from"timers/promises";import{pathToFileURL as ta}from"url";import{deserializeSCIP as ca}from"@c4312/scip";import hu from"better-sqlite3";import{lstatSync as zd,readdirSync as Jd}from"fs";import{join as Yd,relative as Kd,resolve as Mn,sep as Xd}from"path";import{createHash as Cd}from"crypto";import{existsSync as Ge,mkdirSync as Ld,readdirSync as mo,renameSync as jd,rmSync as ho,writeFileSync as Nd}from"fs";import{join as Y}from"path";import{create as So,fromBinary as bo,toBinary as Md}from"@bufbuild/protobuf";import{deserializeSCIP as xt,DocumentSchema as _n,IndexSchema as Ro,serializeSCIP as xo}from"@c4312/scip";var It=1,$e="typescript-scip-fragments";function Io(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 a=ge(o.relativePath);if(t.has(a))throw new Error(`duplicate TypeScript fragment replacement: ${a}`);if(t.add(a),o.bytes===null)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${a}`);let s=bo(_n,o.bytes);if(s.relativePath!==a)throw new Error(`TypeScript fragment path mismatch: expected ${a}, got ${s.relativePath}`);n.push(s)}let r=xo(So(Ro,{documents:n,externalSymbols:[]})),i=xt(r);if(i.documents.length!==n.length||i.externalSymbols.length!==0)throw new Error("affected TypeScript SCIP index failed structural verification");return r}function Ve(e){let t=Y(e,$e);return{rootDir:t,blobDir:Y(t,"blobs"),generationDir:Y(t,"generations")}}function Gd(e){let t=xt(e.indexBytes);Lo(t.metadata,jo(e)),Co(t.externalSymbols);let n=new Set,r=[];for(let o of t.documents){let a=ge(o.relativePath);if(n.has(a))throw new Error(`duplicate TypeScript SCIP document path: ${a}`);n.add(a);let s=Md(_n,o),c=e.documentIdentities.get(a)??(e.allowUntrackedDocuments?me(JSON.stringify({version:1,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,untrackedDocument:a,contentHash:me(s)})):null);if(!c)throw new Error(`missing TypeScript document identity: ${a}`);r.push(Fo(e.cacheDir,{relativePath:a,bytes:s,occurrences:o.occurrences.length,symbols:o.symbols.length,referenceFragments:[]},c))}let i=_o(e,r);return Oo(e.cacheDir,i),i}function Po(e){let t=Ve(e.cacheDir);if(!Ge(An(t,e.generationIdentity)))return Gd(e);let n=Eo({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 vo(e){let t=Eo({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 a=ge(o.relativePath);if(r.has(a))throw new Error(`duplicate TypeScript fragment replacement: ${a}`);if(r.add(a),!n.has(a))throw new Error(`TypeScript fragment replacement has no prior document: ${a}`);let s=e.documentIdentities.get(a);if(!s)throw new Error(`missing TypeScript document identity: ${a}`);o.bytes===null?n.delete(a):n.set(a,Fo(e.cacheDir,o,s))}if(r.size===0)throw new Error("TypeScript fragment generation requires at least one replacement");let i=_o(e,[...n.values()]);return Oo(e.cacheDir,i),i}function Eo(e){let t=Ve(e.cacheDir),n=An(t,e.generationIdentity),r;try{r=On(E(n,{maxBytes:_,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 a=Y(t.blobDir,`${o.blobHash}.scipdoc`),s=D(a,{maxBytes:z,inputKind:"TypeScript fragment blob"});if(s.byteLength!==o.byteLength||me(s)!==o.blobHash)throw new Error(`TypeScript fragment blob is corrupt: ${o.relativePath}`);i.set(o.relativePath,s)}return{manifest:r,fragments:i}}function wo(e){let t=ko(e);return Fn(t.baseIndex,t.completeDocuments,"assembled")}function To(e){let t=ko(e);return $d(t.deletedAffectedPaths),{completeIndexBytes:Fn(t.baseIndex,t.completeDocuments,"assembled"),affectedIndexBytes:Fn(t.baseIndex,t.affectedDocuments,"affected")}}function ko(e){let t=xt(e.baseIndexBytes);Lo(t.metadata,jo(e)),Co(t.externalSymbols);let n=new Map;for(let s of e.fragments){let c=ge(s.relativePath);if(n.has(c))throw new Error(`duplicate TypeScript fragment replacement: ${c}`);n.set(c,s)}if(n.size===0)throw new Error("TypeScript index assembly requires at least one replacement");let r=new Set,i=[],o=[],a=[];for(let s of t.documents){let c=ge(s.relativePath);if(r.has(c))throw new Error(`duplicate TypeScript SCIP document path: ${c}`);r.add(c);let d=n.get(c);if(!d){i.push(s);continue}if(n.delete(c),d.bytes===null){a.push(c);continue}let u=bo(_n,d.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:a}}function Fn(e,t,n){let r=xo(So(Ro,{metadata:e.metadata,documents:t,externalSymbols:[]})),i=xt(r);if(i.documents.length!==t.length||i.externalSymbols.length!==0)throw new Error(`${n} TypeScript SCIP index failed structural verification`);return r}function $d(e){if(e.length>0)throw new Error(`affected TypeScript mini index cannot contain a deleted document: ${e[0]}`)}function Do(e,t){let n=Ve(e);if(!Ge(n.generationDir))return;let r=new Set(t.map(a=>Ao(a))),i=mo(n.generationDir).filter(a=>a.endsWith(".json")),o=new Set;for(let a of i.filter(s=>r.has(s))){let s=On(E(Y(n.generationDir,a),{maxBytes:_,inputKind:"TypeScript fragment manifest"}));for(let c of s.documents)o.add(`${c.blobHash}.scipdoc`)}for(let a of i)r.has(a)||ho(Y(n.generationDir,a),{force:!0});if(Ge(n.blobDir))for(let a of mo(n.blobDir))o.has(a)||ho(Y(n.blobDir,a),{force:!0})}function Fo(e,t,n){if(t.bytes===null)throw new Error(`cannot persist an empty TypeScript fragment: ${t.relativePath}`);let r=ge(t.relativePath),i=Buffer.from(t.bytes),o=me(i),a=Ve(e);Ld(a.blobDir,{recursive:!0});let s=Y(a.blobDir,`${o}.scipdoc`);if(Ge(s)){let c=D(s,{maxBytes:z,inputKind:"TypeScript fragment blob"});if(c.byteLength!==i.byteLength||me(c)!==o)throw new Error(`existing TypeScript fragment blob is corrupt: ${r}`)}else{let c=`${s}.${process.pid}.${Date.now()}.tmp`;Nd(c,i),jd(c,s)}return{relativePath:r,blobHash:o,byteLength:i.byteLength,documentIdentity:n}}function _o(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:It,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,createdAt:(e.now??(()=>new Date))().toISOString(),documents:n}}function Oo(e,t){let n=Ve(e),r=An(n,t.generationIdentity);if(Ge(r)){let i=On(E(r,{maxBytes:_,inputKind:"TypeScript fragment manifest"}));if(yo(i)!==yo(t))throw new Error(`TypeScript fragment generation is immutable: ${t.generationIdentity}`);return}ie(r,t,{spacing:2,trailingNewline:!0})}function yo(e){return me(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,generationIdentity:e.generationIdentity,documents:e.documents}))}function On(e){let t=JSON.parse(e);if(t.version!==It||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(ge(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript fragment record");n.add(r.relativePath)}return t}function An(e,t){return Y(e.generationDir,Ao(t))}function Ao(e){if(!e)throw new Error("TypeScript fragment generation identity must be non-empty");return`${me(e)}.json`}function Co(e){if(e.length>0)throw new Error("scip-typescript emitted external symbols; incremental document assembly is unsupported")}function Lo(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 jo(e){let t=e.packageVersion??e.runtime?.packageVersion;if(!t)throw new Error("scip-typescript package version is unavailable");return t}function ge(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 me(e){return Cd("sha256").update(e).digest("hex")}import{createHash as Vd}from"crypto";import{existsSync as Be,mkdirSync as Bd,readdirSync as Cn,renameSync as Ud,rmSync as No,writeFileSync as Wd}from"fs";import{join as B}from"path";var Pt=1,Go=64*1024*1024,We="typescript-scip-overlays";function $o(e){let t=Uo(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 a=Nn(o.relativePath);if(r.has(a))throw new Error(`duplicate TypeScript overlay: ${a}`);r.add(a),n.set(a,qd(e.cacheDir,o))}if(r.size===0)throw new Error("TypeScript overlay generation requires affected documents");let i={version:Pt,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,a)=>o.relativePath.localeCompare(a.relativePath))};return Hd(e.cacheDir,i),i}function Vo(e){let t=Uo(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=D(B(qe(e.cacheDir),"blobs",`${r.blobHash}.scipdoc`),{maxBytes:z,inputKind:"TypeScript overlay blob"});if(i.byteLength!==r.byteLength||Ue(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 wo({packageVersion:e.packageVersion,baseIndexBytes:e.baseIndexBytes,fragments:n})}function Bo(e,t){let n=qe(e),r=B(n,"generations");if(!Be(r))return;let i=new Set(t.map(jn)),o=new Set;for(let s of Cn(r).filter(c=>i.has(c))){let c=Ln(E(B(r,s),{maxBytes:_,inputKind:"TypeScript overlay manifest"}));for(let d of c.overlays)d.blobHash&&o.add(`${d.blobHash}.scipdoc`)}for(let s of Cn(r))i.has(s)||No(B(r,s),{force:!0});let a=B(n,"blobs");if(Be(a))for(let s of Cn(a))o.has(s)||No(B(a,s),{force:!0})}function Uo(e,t){let n=B(qe(e),"generations",jn(t));if(!Be(n))return null;let r=Ln(E(n,{maxBytes:_,inputKind:"TypeScript overlay manifest"}));if(r.generationIdentity!==t)throw new Error("TypeScript overlay generation identity does not match its path");return r}function qd(e,t){let n=Nn(t.relativePath);if(t.bytes===null)return{relativePath:n,blobHash:null,byteLength:0};let r=Buffer.from(t.bytes),i=Ue(r),o=B(qe(e),"blobs");Bd(o,{recursive:!0});let a=B(o,`${i}.scipdoc`);if(Be(a)){let s=D(a,{maxBytes:z,inputKind:"TypeScript overlay blob"});if(s.byteLength!==r.byteLength||Ue(s)!==i)throw new Error(`existing TypeScript overlay blob is corrupt: ${n}`)}else{let s=`${a}.${process.pid}.${Date.now()}.tmp`;Wd(s,r),Ud(s,a)}return{relativePath:n,blobHash:i,byteLength:r.byteLength}}function Hd(e,t){let n=B(qe(e),"generations",jn(t.generationIdentity));if(Be(n)){let r=Ln(E(n,{maxBytes:_,inputKind:"TypeScript overlay manifest"}));if(Mo(r)!==Mo(t))throw new Error(`TypeScript overlay generation is immutable: ${t.generationIdentity}`);return}ie(n,t,{spacing:2,trailingNewline:!0})}function Ln(e){let t=JSON.parse(e);if(t.version!==Pt||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(Nn(r.relativePath),n.has(r.relativePath))throw new Error("duplicate TypeScript overlay record");n.add(r.relativePath)}return t}function qe(e){return B(e,We)}function jn(e){if(!e)throw new Error("TypeScript overlay generation identity must be non-empty");return`${Ue(e)}.json`}function Mo(e){return Ue(JSON.stringify({version:e.version,producerIdentity:e.producerIdentity,projectIdentity:e.projectIdentity,baseGenerationIdentity:e.baseGenerationIdentity,generationIdentity:e.generationIdentity,overlays:e.overlays}))}function Nn(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 Ue(e){return Vd("sha256").update(e).digest("hex")}var He=1,Gn="language-indexes",Wo=["index.db","index.scip","meta.json"],qo=[Gn,$e,We];function vt(e){let t=[];for(let n of Wo)Qd(e,n),t.push(n);for(let n of qo)Ho(e,n,t);return{version:He,files:t.sort()}}function Et(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(!Wo.includes(e)&&!qo.includes(n))throw new Error(`index artifact path is not shareable: ${e}`);return e}function W(e,t){let n=Et(t),r=Mn(e),i=Mn(r,...n.split("/"));if(i!==r&&!i.startsWith(`${r}${Xd}`))throw new Error(`index artifact escapes cache: ${t}`);return i}function Ho(e,t,n){let r=Yd(e,t),i;try{i=Jd(r,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let o of i){let a=`${t}/${o.name}`;if(o.isSymbolicLink())throw new Error(`index artifact cannot be a symlink: ${a}`);o.isDirectory()?Ho(e,a,n):o.isFile()&&n.push(Et(a))}}function Qd(e,t){let n=W(e,t),r;try{r=zd(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(Kd(Mn(e),n).startsWith(".."))throw new Error(`index artifact escapes cache: ${t}`)}import{createHash as Wn}from"crypto";import{closeSync as Zd,existsSync as w,mkdirSync as eu,openSync as tu,readSync as nu,readdirSync as qn,renameSync as Un,rmSync as ze,statSync as Ee}from"fs";import{basename as Ko,dirname as q,join as R,relative as zo}from"path";var ru=Object.freeze({maxGenerations:2,maxLogicalBytes:2*1024*1024*1024});function Tt(e){let t=V(e.outputDb),n=su(e);e.onStage?.("after-recovery-retained");let r=e.preserveOutputScip?e.outputScip:e.tempOutputScip,i=Yn({generationRoot:t,databasePath:e.tempOutputDb,indexPath:w(r)?r:void 0,metadataPath:w(e.tempMetaPath)?e.tempMetaPath:void 0}),o=(e.now??(()=>new Date))().toISOString(),a={version:Re,currentGeneration:i.identity,artifactSet:"immutable-v1",...n?{previousGeneration:n}:{},...e.publication?{publication:e.publication}:{},publishedAt:o},s=G(R(t,"state.json"),a,{spacing:2,trailingNewline:!0});e.onStage?.("after-pointer-handoff"),e.preserveOutputScip||Bn(e.tempOutputScip,e.outputScip),e.onStage?.("after-scip-handoff"),Bn(e.tempOutputDb,e.outputDb),e.onStage?.("after-database-handoff"),Bn(e.tempMetaPath,e.metaPath),e.onStage?.("after-metadata-handoff");let c=i.identity,d={...a,stableMirrors:Jn(e.outputDb,e.outputScip)};G(R(t,"state.json"),d,{spacing:2,trailingNewline:!0});let u=Xo(e.outputDb,{now:e.now}),l=Ae(i.directorySync,s.directorySync);return{currentGeneration:c,...n?{previousGeneration:n}:{},retention:u,achievedDurability:l==="synced"?"directory-durable":"file-flushed",directorySync:l}}function Hn(e,t,n,r=()=>new Date){if(!w(e))return null;let i=Ce(e),o=R(V(e),"state.json");if(i?.artifactSet==="immutable-v1"&&Kt(e,i.currentGeneration))return i;let a=V(e),s=!i&&w(o)?du(n,e,t):void 0;if(s&&!at(a,s))return null;let c=Yn({generationRoot:a,databasePath:e,indexPath:w(t)?t:void 0,metadataPath:w(n)?n:void 0,forcedIdentity:i?.currentGeneration??s}),d={version:Re,currentGeneration:c.identity,artifactSet:"immutable-v1",stableMirrors:Jn(e,t),...i?.previousGeneration?{previousGeneration:i.previousGeneration}:{},...i?.publication?{publication:i.publication}:{},publishedAt:i?.publishedAt??r().toISOString()};return G(R(a,"state.json"),d,{spacing:2,trailingNewline:!0}),d}function zn(e,t,n=()=>new Date){if(!w(e)||!w(t))throw new Error("metadata-only generation refresh requires stable database and metadata files");let r=Ce(e),i=V(e),o=Yn({generationRoot:i,databasePath:e,indexPath:w(R(q(e),"index.scip"))?R(q(e),"index.scip"):void 0,metadataPath:t}),a=r&&r.currentGeneration!==o.identity?Zo(e,r.currentGeneration):void 0,s={version:Re,currentGeneration:o.identity,artifactSet:"immutable-v1",stableMirrors:Jn(e,R(q(e),"index.scip")),...a?{previousGeneration:a}:{},...r?.publication?{publication:r.publication}:{},publishedAt:n().toISOString()};return G(R(V(e),"state.json"),s,{spacing:2,trailingNewline:!0}),Xo(e,{now:n}),s}function Xo(e,t={}){let n=iu(t.limits),i=(t.now??(()=>new Date))().toISOString(),o=ue(Gr(e),{waitMs:0});if(!o)return{state:"deferred",generationCount:0,logicalBytes:0,protectedGenerations:0,activeReaderLeases:0,staleReaderLeasesRemoved:0,malformedReaderLeases:0,removedGenerations:0,removedLogicalBytes:0,limits:n,at:i,reason:"another process owns local generation retention"};try{let a=Ce(e),s=ou(e),c=$r(e,s.map(b=>b.identity),{isProcessAlive:t.isProcessAlive??ne,readProcessIdentity:t.readProcessIdentity??te}),d=new Set(c.protectedGenerations);a?.currentGeneration&&d.add(a.currentGeneration),a?.previousGeneration?.generationIdentity&&d.add(a.previousGeneration.generationIdentity);let u=s.length,l=s.reduce((b,y)=>b+y.logicalBytes,0),p=0,f=0;for(let b of s){if(u<=n.maxGenerations&&l<=n.maxLogicalBytes)break;d.has(b.identity)||(t.onBeforeRemove?.(b.identity),ze(b.path,{recursive:!0,force:!0}),u-=1,l-=b.logicalBytes,p+=1,f+=b.logicalBytes)}let g=u>n.maxGenerations||l>n.maxLogicalBytes,h={state:g?"protected":p>0?"collected":"within-bounds",generationCount:u,logicalBytes:l,protectedGenerations:d.size,activeReaderLeases:c.activeLeases,staleReaderLeasesRemoved:c.staleLeasesRemoved,malformedReaderLeases:c.malformedLeases,removedGenerations:p,removedLogicalBytes:f,limits:n,at:i,...g?{reason:c.malformedLeases>0?"malformed reader ownership evidence fails closed":"retention bounds cannot be met without deleting a protected generation"}:{}};return Jo(e,h),h}catch(a){let s={state:"error",generationCount:0,logicalBytes:0,protectedGenerations:0,activeReaderLeases:0,staleReaderLeasesRemoved:0,malformedReaderLeases:0,removedGenerations:0,removedLogicalBytes:0,limits:n,at:i,reason:a instanceof Error?a.message:String(a)};try{Jo(e,s)}catch{}return s}finally{o.release()}}function iu(e={}){let t={...ru,...e};if(!Number.isSafeInteger(t.maxGenerations)||t.maxGenerations<2)throw new Error("Local SQLite generation retention must keep at least current and previous generations.");if(!Number.isSafeInteger(t.maxLogicalBytes)||t.maxLogicalBytes<=0)throw new Error("Local SQLite generation byte retention must be a positive safe integer.");return t}function ou(e){let t=V(e);return w(t)?qn(t,{withFileTypes:!0}).filter(n=>n.isDirectory()&&/^[a-f0-9]{64}$/.test(n.name)).map(n=>{let r=R(t,n.name),i=at(t,n.name),o=i?i.database.size+(i.index?.size??0)+(i.metadata?.size??0):Qo(r);return{identity:n.name,path:r,logicalBytes:o,modifiedAtMs:Ee(r).mtimeMs}}).sort((n,r)=>n.modifiedAtMs-r.modifiedAtMs||n.identity.localeCompare(r.identity)):[]}function Qo(e){let t=0;for(let n of qn(e,{withFileTypes:!0})){let r=R(e,n.name);n.isDirectory()?t+=Qo(r):n.isFile()&&(t+=Ee(r).size)}return t}function Jo(e,t){ie(R(V(e),"gc.json"),t,{spacing:2,trailingNewline:!0})}function H(e,t=R(q(e),"meta.json")){let n=R(V(e),"state.json");if(!w(n))return{state:"legacy",statePath:n};let r=Ce(e);if(!r)return{state:"invalid",statePath:n,reason:"generation state is malformed"};try{let i=Kt(e,r.currentGeneration),o=i!==null,a=i?au(e,t,i,r):!1,s=r.previousGeneration?w(R(q(e),r.previousGeneration.databasePath)):!0;return!a||!o||!s?{state:"drifted",statePath:n,currentMatches:a,recoveryExists:s,generation:r,reason:o?a?"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:a,recoveryExists:s,generation:r}}catch(i){return{state:"drifted",statePath:n,currentMatches:!1,recoveryExists:!1,generation:r,reason:i instanceof Error?i.message:String(i)}}}function au(e,t,n,r){if(r.stableMirrors&&(r.stableMirrors.databaseFileIdentity!==Le(e)||r.stableMirrors.indexFileIdentity!==void 0&&r.stableMirrors.indexFileIdentity!==Le(R(q(e),"index.scip")))||!Yo(e,n.database))return!1;let i=R(q(e),"index.scip");if(n.index&&!Yo(i,n.index))return!1;if(!n.metadata)return!w(t);if(!w(t))return!1;let o=R(V(e),n.identity,n.metadata.file);return w(o)&&le(L(t,"reindex metadata"))===le(L(o,"immutable reindex metadata"))}function Yo(e,t){return w(e)&&Ee(e).isFile()&&Ee(e).size===t.size}function su(e){let t=Hn(e.outputDb,e.outputScip,e.metaPath);return t?Zo(e.outputDb,t.currentGeneration):void 0}function Jn(e,t){return{databaseFileIdentity:Le(e),...w(t)?{indexFileIdentity:Le(t)}:{}}}function Zo(e,t){let n=R(V(e),t),r=R(n,Ko(e)),i=R(n,"meta.json");return{generationIdentity:t,databasePath:zo(q(e),r),...w(i)?{metadataPath:zo(q(e),i)}:{}}}function cu(e){if(w(e)){for(let t of qn(e,{withFileTypes:!0}))if(t.isDirectory()&&t.name.endsWith(".tmp"))try{ze(R(e,t.name),{recursive:!0,force:!0})}catch{}}}function du(e,t,n=R(q(t),"index.scip")){let r=Wn("sha256").update("sqlite-generation-artifacts-v1\0");return r.update(wt(t)),w(n)&&r.update(`\0${wt(n)}`),w(e)&&r.update(`\0${le(L(e,"reindex metadata"))}`),r.digest("hex")}function Yn(e){let t=$n(e.databasePath),n=e.indexPath?$n(e.indexPath):void 0,r=e.metadataPath?$n(e.metadataPath):void 0,i=e.forcedIdentity??uu(t,n,e.metadataPath),o=R(e.generationRoot,i),a=R(o,Yt);if(w(a)){let d=at(e.generationRoot,i);if(d&&ea(o,d.database,t)&&pu(o,d.index,n)&&fu(o,d.metadata,e.metadataPath))return{identity:i,directorySync:re(e.generationRoot)};throw new Error(`SQLite generation ${i} already exists with different or corrupt artifacts.`)}let s=[rt(e.generationRoot)];cu(e.generationRoot);let c=`${o}.${process.pid}.${Date.now()}.tmp`;ze(c,{recursive:!0,force:!0}),eu(c,{recursive:!0});try{s.push(Vn(e.databasePath,R(c,t.file))),n&&e.indexPath&&s.push(Vn(e.indexPath,R(c,n.file))),r&&e.metadataPath&&s.push(Vn(e.metadataPath,R(c,r.file)));let d=G(R(c,Yt),{version:Mr,identity:i,database:t,...n?{index:n}:{},...r?{metadata:r}:{}},{spacing:2,trailingNewline:!0});d.directorySync!=="not-requested"&&s.push(d.directorySync),s.push(re(c)),F(()=>Un(c,o)),s.push(re(e.generationRoot))}finally{try{ze(c,{recursive:!0,force:!0})}catch{}}return{identity:i,directorySync:Ae(...s)}}function uu(e,t,n){let r=Wn("sha256").update("sqlite-generation-artifacts-v1\0");return r.update(e.sha256),t&&r.update(`\0${t.sha256}`),n&&r.update(`\0${le(L(n,"reindex metadata"))}`),r.digest("hex")}function $n(e){return{file:Ko(e),size:Ee(e).size,sha256:wt(e)}}function wt(e){let t=Wn("sha256"),n=tu(e,"r"),r=Buffer.allocUnsafe(1024*1024);try{for(;;){let i=lu(n,r);if(i===0)break;t.update(r.subarray(0,i))}}finally{Zd(n)}return t.digest("hex")}function lu(e,t){let n=0;for(;n<t.length;){let r=nu(e,t,n,t.length-n,null);if(n+=r,r===0)break}return n}function Vn(e,t){return it(e,t,{mode:292})}function ea(e,t,n){let r=R(e,t.file);return t.file===n.file&&t.size===n.size&&t.sha256===n.sha256&&w(r)&&Ee(r).size===t.size&&wt(r)===t.sha256}function pu(e,t,n){return!t||!n?t===n:ea(e,t,n)}function fu(e,t,n){if(!t||!n)return t===void 0&&n===void 0;let r=R(e,t.file);return w(r)&&le(L(r,"stored reindex metadata"))===le(L(n,"candidate reindex metadata"))}function Bn(e,t){F(()=>ze(`${t}.tmp-replace`,{force:!0})),F(()=>Un(e,`${t}.tmp-replace`)),F(()=>Un(`${t}.tmp-replace`,t))}var Zn=1,na="CODEBASEIQ_SHARED_CACHE",yu=2,kt=JSON.stringify({cliVersion:Vr,artifactCatalogVersion:He,postIndexAugmentationSchemaVersion:yu,sqliteGenerationStoreVersion:Re,typescriptFragmentStoreVersion:It,typescriptOverlayStoreVersion:Pt}),er="manifest.json",Su="shared-cache.json",tr=[Gn,$e,We];function Ft(e,t){if(!e.clean||!e.treeOid)return;let n=ba(JSON.stringify({version:Zn,repositoryId:e.repositoryId,treeOid:e.treeOid,fingerprint:t,producerIdentity:kt}));return{repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,fingerprint:t,producerIdentity:kt,generationId:n,repositoryCacheDir:Wr(e.repositoryId)}}function da(e,t,n){if(process.env[na]==="0")return`${na}=0`;if(!qr(n))return"explicit cache or database override";if(Qt(Xn(t))!==Qt(Ur(e))||t!==m(Xn(t),"index.db"))return"index database is outside the managed worktree cache"}function K(e,t=!0){let n=rr(e),r;try{r=ma(E(m(n,er),{inputKind:"shared-generation manifest",maxBytes:_}))}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=W(n,i.path),a=Dt(o);if(!a.isFile()||a.size!==i.size||tt(o,{inputKind:"shared-generation artifact",maxBytes:C})!==i.sha256)return null}}catch{return null}return r}var bu=100;function ua(e,t,n){if(!e.treeOid)return null;let r=en(t,n),i=m(Br(),"repositories",e.repositoryId),o;try{let u=Kn(i);if(!u.isDirectory()||u.isSymbolicLink())return null;o=sa(i)}catch{return null}let a=m(o,"generations"),s=[],c=e.headCommit?Hr(e.projectRoot,`${e.headCommit}^`,bu):[],d=new Map;for(let u of[e.treeOid,...c])d.has(u)||d.set(u,d.size);try{for(let u of aa(a)){if(!/^[a-f0-9]{64}$/.test(u))continue;let l=m(a,u),p;try{p=Kn(l)}catch{continue}if(!(!p.isDirectory()||p.isSymbolicLink()))try{let f=ma(E(m(l,er),{inputKind:"shared-generation baseline manifest",maxBytes:_}));f.generationId===u&&f.repositoryId===e.repositoryId&&d.has(f.treeOid)&&f.producerIdentity===kt&&Pu(f.fingerprint,r)&&s.push(f)}catch{continue}}}catch{return null}s.sort((u,l)=>{let p=d.get(u.treeOid)-d.get(l.treeOid),f=Date.parse(l.createdAt)-Date.parse(u.createdAt);return p||f||u.generationId.localeCompare(l.generationId)});for(let u of s){let l={repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:u.treeOid,fingerprint:u.fingerprint,producerIdentity:u.producerIdentity,generationId:u.generationId,repositoryCacheDir:o},p=K(l);if(p)return{snapshot:l,manifest:p}}return null}function la(e){let t=ue(m(e.snapshot.repositoryCacheDir,"locks",`${e.snapshot.generationId}.publish.lock`));if(!t)throw new Error(`shared generation publication is already in progress for ${e.snapshot.generationId}`);try{return Ru(e)}finally{t.release()}}function Ru(e){let t=K(e.snapshot);if(t)return ra(e.snapshot,t);if(!Sa(e.sourceCacheDir,e.sourceProjectRoot,e.snapshot.fingerprint))throw new Error("source index is incomplete, incompatible, or corrupt");let n=ia(e.sourceCacheDir);if(!n)throw new Error("source index artifacts are incomplete");let r=vt(e.sourceCacheDir),i=m(e.snapshot.repositoryCacheDir,"generations"),o=[rt(i)],a=Fe(m(i,`.tmp-${process.pid}-`));try{let s=[];for(let g of r.files){let h=W(e.sourceCacheDir,g),b=W(a,g);o.push(Ye(h,b,292)),e.onPublicationStage?.("after-artifact-flushed",g);let y=Dt(b).size;s.push({path:g,size:y,sha256:tt(b,{inputKind:"staged shared-generation artifact",maxBytes:C})})}let c=ca(D(m(a,"index.scip"),{inputKind:"staged shared SCIP index",maxBytes:C})).metadata?.projectRoot;if(!c)throw new Error("shared SCIP generation has no project root metadata");let d=ir(e.sourceProjectRoot);if(!be(c,d))throw new Error("shared SCIP generation root does not match its source worktree");if(ia(e.sourceCacheDir)!==n||e.sourceStillValid&&!e.sourceStillValid())throw new Error("source index changed while staging a shared generation");let u={version:Zn,artifactCatalogVersion:He,generationId:e.snapshot.generationId,repositoryId:e.snapshot.repositoryId,treeOid:e.snapshot.treeOid,fingerprint:e.snapshot.fingerprint,producerIdentity:e.snapshot.producerIdentity,sourceProjectRoot:e.sourceProjectRoot,scipProjectRoot:c,createdAt:(e.now??(()=>new Date))().toISOString(),artifacts:s.sort((g,h)=>g.path.localeCompare(h.path))},l=G(m(a,er),u,{spacing:2,trailingNewline:!0});l.directorySync!=="not-requested"&&o.push(l.directorySync),e.onPublicationStage?.("after-manifest-flushed"),o.push(re(a)),e.onPublicationStage?.("after-staging-directory-synced");let p=rr(e.snapshot);try{if(ce(p)&&!K(e.snapshot)){let g=`${p}.corrupt-${process.pid}-${Date.now()}`;F(()=>he(p,g)),se(g,{recursive:!0,force:!0})}F(()=>he(a,p))}catch(g){let h=K(e.snapshot);if(h)return ra(e.snapshot,h);throw g}e.onPublicationStage?.("after-generation-renamed"),o.push(re(i)),e.onPublicationStage?.("after-generations-directory-synced");let f=Ae(...o);return{kind:"published",manifest:u,achievedDurability:f==="synced"?"directory-durable":"file-flushed",directorySync:f}}finally{se(a,{recursive:!0,force:!0})}}function ra(e,t){let n=re(m(e.repositoryCacheDir,"generations"));return{kind:"existing",manifest:t,achievedDurability:n==="synced"?"directory-durable":"file-flushed",directorySync:n}}function _t(e){let t=rr(e.snapshot);we(e.targetCacheDir,{recursive:!0});let n=ue(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=Fe(m(e.targetCacheDir,".shared-hydrate-")),Tu(e.manifest,e.snapshot);for(let c of e.manifest.artifacts){let d=W(t,c.path),u=W(r,c.path);if(Ye(d,u),Dt(u).size!==c.size||tt(u,{inputKind:"hydrated shared-generation artifact",maxBytes:C})!==c.sha256)throw new Error(`shared artifact is corrupt: ${c.path}`)}let a=ir(e.targetProjectRoot);if(a!==e.manifest.scipProjectRoot)for(let c of e.manifest.artifacts)c.path.endsWith(".scip")&&Gi(W(r,c.path),e.manifest.scipProjectRoot,a);if(!Sa(r,e.targetProjectRoot,e.snapshot.fingerprint,!1))throw new Error("staged shared generation failed completeness or integrity validation");i=vu(e.targetCacheDir,r),o=!0,Eu(r,e.targetCacheDir,i),Tt({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 s=H(m(e.targetCacheDir,"index.db"),m(e.targetCacheDir,"meta.json"));if(s.state==="invalid"||s.state==="drifted")throw new Error(`hydrated SQLite generation failed validation: ${s.reason}`);e.persistLease!==!1&&nr(e.snapshot,e.targetCacheDir,e.action??"attached",e.now)}catch(a){throw o&&i&&wu(e.targetCacheDir,i),a}finally{r&&se(r,{recursive:!0,force:!0}),n.release()}}async function pa(e,t={}){let n=t.timeoutMs??3e4,r=t.pollMs??100,i=t.now??I,o=i()+n,a=m(e.repositoryCacheDir,"locks"),s=m(a,`${e.generationId}.lock`),c=d=>{if(!d||typeof d!="object"||Array.isArray(d))return null;let u=d.pid;return typeof u=="number"&&Number.isSafeInteger(u)&&u>0?{pid:u}:null};for(;i()<=o;){if(K(e))return{kind:"generation-ready"};let d=nt(s,{kind:"shared-generation-build",detail:{generationId:e.generationId},parseLegacy:c});if(d.kind==="acquired")return{kind:"owner",release:()=>d.lock.release()};let u=o-i();if(u<=0)break;await mu(Math.min(r,u))}return K(e)?{kind:"generation-ready"}:{kind:"timeout"}}function nr(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:ga(i)};return ha(e.repositoryCacheDir,o,!0),o}function fa(e,t,n=void 0){let r={version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:e.projectRoot,treeOid:e.treeOid,localCacheDir:t,baseGenerationId:e.generationId,lastAction:"overlay",lastReason:`private cache forked from shared baseline ${e.generationId}`,lastSeenAt:(n??(()=>new Date))().toISOString()},i={...r,ownershipChecksum:ga(r)};return ha(e.repositoryCacheDir,i,!0),i}function ga(e){return ba(JSON.stringify({version:1,repositoryId:e.repositoryId,worktreeId:e.worktreeId,projectRoot:Qn(e.projectRoot),localCacheDir:Qn(e.localCacheDir)}))}function ma(e){let t=JSON.parse(e);if(t.version!==Zn||t.artifactCatalogVersion!==He||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!==kt||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(Et(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 Ye(e,t,n=384){return it(e,t,{mode:n})}function xu(e,t,n){we(e,{recursive:!0}),G(m(e,Su),{version:1,repositoryId:t,worktreeId:n},{spacing:2,trailingNewline:!0})}function ia(e){try{let t=vt(e),n=oa("sha256");for(let r of t.files){let i=W(e,r),o=Dt(i).size;n.update(r).update("\0").update(String(o)).update("\0"),Cr(i,{inputKind:"source-generation artifact",maxBytes:C},a=>n.update(a)),n.update("\0")}return n.digest("hex")}catch{return null}}function Iu(e){try{let t=ee(E(m(e,"meta.json"),{inputKind:"reindex metadata",maxBytes:_}));return(t.kind==="legacy"||t.kind==="supported")&&t.capabilities.publishableGeneration?t.metadata:void 0}catch{return}}function Pu(e,t){let n=en(e.languages,e);return JSON.stringify(n)===JSON.stringify(t)}function rr(e){return m(e.repositoryCacheDir,"generations",e.generationId)}function ha(e,t,n){let r=Nr(e,{waitMs:5e3});if(!r)throw new Error("repository cache cleanup is busy");try{if(n){let o=t.activeGenerationId??t.baseGenerationId;if(!o||!ce(m(e,"generations",o)))throw new Error("shared generation disappeared before its lease was attached")}let i=m(e,"worktrees");we(i,{recursive:!0}),G(m(i,`${t.worktreeId}.json`),t,{spacing:2,trailingNewline:!0}),xu(t.localCacheDir,t.repositoryId,t.worktreeId)}finally{r.release()}}function vu(e,t){let n=m(t,".rollback"),r=new Map,i=new Map;we(n,{recursive:!0});for(let s of["index.scip","index.db","meta.json"]){let c=m(e,s),d=ce(c);r.set(s,d),d&&Ye(c,m(n,"stable",s))}for(let s of tr){let c=m(e,s),d=ce(c);if(d){let u=Kn(c);if(!u.isDirectory()||u.isSymbolicLink())throw new Error(`managed artifact path is not a directory: ${s}`)}i.set(s,d)}let o=m(e,ot),a=ce(o);return a&&ya(o,m(n,"sqlite-generations")),{root:n,stableFiles:r,managedDirectories:i,generationStoreExisted:a}}function Eu(e,t,n){for(let r of tr){let i=m(t,r);if(n.managedDirectories.get(r)){let a=m(n.root,"managed",r);we(Xn(a),{recursive:!0}),F(()=>he(i,a))}let o=m(e,r);ce(o)&&F(()=>he(o,i))}}function wu(e,t){for(let i of tr){let o=m(e,i),a=m(t.root,"managed",i);t.managedDirectories.get(i)?ce(a)&&(se(o,{recursive:!0,force:!0}),F(()=>he(a,o))):se(o,{recursive:!0,force:!0})}for(let[i,o]of t.stableFiles){let a=m(e,i);if(!o){se(a,{force:!0});continue}let s=`${a}.shared-restore-${gu()}`;Ye(m(t.root,"stable",i),s),F(()=>se(a,{force:!0})),F(()=>he(s,a))}let n=m(e,ot);se(n,{recursive:!0,force:!0});let r=m(t.root,"sqlite-generations");t.generationStoreExisted&&ce(r)&&F(()=>he(r,n))}function ya(e,t){we(t,{recursive:!0});for(let n of aa(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()?ya(r,i):n.isFile()&&Ye(r,i)}}function Tu(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 Sa(e,t,n,r=!0,i=!0){try{let o=Iu(e);if(!o||JSON.stringify(o.fingerprint)!==JSON.stringify(n)||JSON.stringify([...o.indexedLanguages??[]].sort())!==JSON.stringify([...n.languages].sort()))return Je("source validation rejected metadata"),!1;let a=vt(e),s=H(m(e,"index.db"),m(e,"meta.json"));if(r?s.state!=="current":s.state==="invalid"||s.state==="drifted")return Je(`source validation rejected SQLite generation state ${s.state}`),!1;let c=new hu(j(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 d=ir(t),l=(i?a.files.filter(p=>p.endsWith(".scip")):["index.scip"]).every(p=>{let f=ca(D(W(e,p),{inputKind:"shared SCIP validation artifact",maxBytes:C})).metadata?.projectRoot,g=f!==void 0&&be(f,d);return g||Je(`source validation rejected SCIP root for ${p}: ${String(f)}`),g});return l||Je("source validation rejected SCIP project roots"),l}catch(o){return Je(`source validation failed: ${o instanceof Error?o.message:String(o)}`),!1}}function Je(e){process.env.CODEBASEIQ_DEBUG&&console.error(`shared-cache: ${e}`)}function ir(e){try{return ta(sa(e)).href}catch{return ta(Qn(e)).href}}function ba(e){return oa("sha256").update(e).digest("hex")}import{createHash as Hu}from"crypto";import{existsSync as ar,statSync as zu,writeFileSync as sr}from"fs";import{join as Ju}from"path";import{createRequire as ku}from"module";import{dirname as Du,isAbsolute as Ym,relative as Km,resolve as Xm,sep as Qm}from"path";var Ra=ku(import.meta.url),Fu=1,xa="0.4.0";function or(){let e=_u();return e.available?{available:!0,packageVersion:e.packageVersion,typescriptVersion:e.typescriptVersion,producerIdentity:e.producerIdentity}:e}function _u(){try{let e=Ra.resolve("@sourcegraph/scip-typescript/package.json"),t=JSON.parse(L(e,"scip-typescript package manifest"));if(t.version!==xa)return{available:!1,reason:`unsupported scip-typescript version ${String(t.version??"unknown")}; expected ${xa}`};let n=Du(e),r=Ra.resolve("typescript/package.json",{paths:[n]}),i=JSON.parse(L(r,"TypeScript package manifest"));return typeof i.version!="string"||!i.version?{available:!1,reason:"scip-typescript TypeScript compiler version is unavailable"}:{available:!0,packageRoot:n,packageVersion:t.version,typescriptVersion:i.version,producerIdentity:Ou(t.version,i.version)}}catch(e){return{available:!1,reason:`scip-typescript document producer unavailable: ${e instanceof Error?e.message:String(e)}`}}}function Ou(e,t){return`scip-typescript:${e}:typescript:${t}:document-adapter:${Fu}`}import{createHash as Au}from"crypto";import{dirname as Cu,join as Ia}from"path";var Ot=4;var Lu="typescript-index";function Pa(e){let t=Ia(e,Lu),n=ti(t);return{...n,requestDir:n.legacyRequestDir}}function va(e){try{let t=Or(ee(L(Ia(Cu(e),"meta.json"),"reindex metadata")));return t?Au("sha256").update(t).digest("hex"):null}catch{return null}}import{randomUUID as ju}from"crypto";import{existsSync as Nu}from"fs";var Mu=12e4,Gu=5,At=class{projectRoot;cacheDir;baseGeneration;timeoutMs;runtime;mailboxLimits;constructor(t,n={}){this.projectRoot=zr(t.projectRoot),this.cacheDir=t.cacheDir,this.baseGeneration=t.baseGeneration,this.timeoutMs=n.timeoutMs??Wu(),this.runtime=n.runtime??qu,this.mailboxLimits=n.mailboxLimits??{}}request(t){let n=ii(this.cacheDir),r=Pa(this.cacheDir),i=dn(n.statePath);if(!Ea(i,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript index service is not running.");let o=this.runtime.now(),a=o+this.timeoutMs,s=(this.runtime.monotonicNow??I)()+this.timeoutMs,c=sn("typescript-index-v4",{baseGeneration:this.baseGeneration,request:t}),d=cn(c),u=ni(r,{mailboxVersion:an,operationKey:c,clientId:this.runtime.randomId(),enqueuedAtMs:o,deadlineAtMs:a,protocolVersion:Ot,id:d,baseGeneration:this.baseGeneration,request:t},{nowMs:o,limits:this.mailboxLimits});for(;(this.runtime.monotonicNow??I)()<=s;){if(Nu(u.responsePath))return $u(E(u.responsePath,{maxBytes:this.mailboxLimits.maxItemBytes??64*1024*1024,inputKind:"TypeScript index mailbox response"}),d,c,this.baseGeneration,t.producerIdentity,t.affectedFiles);let l=dn(n.statePath);if(!Ea(l,this.projectRoot,this.runtime))throw new Error("TypeScript index service stopped while processing a request.");this.runtime.sleep(Gu)}throw new Error(`TypeScript index service timed out after ${this.timeoutMs}ms.`)}};function Ea(e,t,n){let r=e?.processIdentity?n.readProcessIdentity?.(e.pid):null;return e!==null&&e.projectRoot===t&&e.typescriptIndex?.protocolVersion===Ot&&n.isProcessAlive(e.pid)&&(!e.processIdentity||r!=null&&Oe(e.processIdentity,r))}function $u(e,t,n,r,i,o){let a=JSON.parse(e);if(a.protocolVersion!==Ot||a.id!==t||a.operationKey!==n||a.ok===!0&&a.baseGeneration!==r)throw new Error("TypeScript index service wrote an incompatible response.");if(a.ok!==!0)throw new Error(typeof a.error=="string"?a.error:"TypeScript index service request failed.");let s=Vu(a.response,i),c=[...new Set(o)].sort(),d=s.fragments.map(u=>u.relativePath).sort();if(JSON.stringify(d)!==JSON.stringify(c))throw new Error("TypeScript index service omitted or added an affected document.");return s}function Vu(e,t){if(!e||typeof e!="object")throw new Error("TypeScript index service wrote an invalid response.");let n=e;if(n.producerIdentity!==t||typeof n.cold!="boolean"||typeof n.durationMs!="number"||!Number.isFinite(n.durationMs)||!Array.isArray(n.fragments))throw new Error("TypeScript index service wrote an invalid response.");let r=new Set,i=n.fragments.map(o=>{if(!o||typeof o.relativePath!="string"||o.bytesBase64!==null&&typeof o.bytesBase64!="string"||typeof o.occurrences!="number"||!Number.isInteger(o.occurrences)||o.occurrences<0||typeof o.symbols!="number"||!Number.isInteger(o.symbols)||o.symbols<0||!Array.isArray(o.referenceFragments)||!o.referenceFragments.every(Bu)||r.has(o.relativePath))throw new Error("TypeScript index service wrote an invalid fragment.");r.add(o.relativePath);let a=o.bytesBase64===null?null:Uu(o.bytesBase64);return{relativePath:o.relativePath,bytes:a,occurrences:o.occurrences,symbols:o.symbols,referenceFragments:o.referenceFragments}});return{producerIdentity:n.producerIdentity,cold:n.cold,durationMs:n.durationMs,fragments:i}}function Bu(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.targetSymbol=="string"&&!!t.location&&typeof t.location.file=="string"&&Number.isInteger(t.location.line)&&Number.isInteger(t.location.column)}function Uu(e){let t=Buffer.from(e,"base64");if(t.toString("base64")!==e)throw new Error("TypeScript index service wrote invalid base64.");return t}function Wu(){let e=Number(process.env.SCIP_TYPESCRIPT_INDEX_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:Mu}var qu={now:Date.now,monotonicNow:I,randomId:ju,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:ne,readProcessIdentity:te};function Yu(e){let t=e.projectMode==="workspace"?e.workspaceProjects??[]:["."];if(t.length===0)return{eligible:!1,reason:"workspace project roots unavailable"};if(t.length===1&&t[0]==="."&&!e.rootTsconfigExists)return{eligible:!1,reason:"root tsconfig unavailable"};if(!e.previousSnapshot)return{eligible:!1,reason:"prior project snapshot unavailable"};if(e.graph===null)return{eligible:!1,reason:"dependency graph unavailable"};if(e.projectFiles.length===0)return{eligible:!1,reason:"prior TypeScript documents unavailable"};let n=et(e.previousSnapshot,e.currentSnapshot);if(n.changes.length===0)return{eligible:!1,reason:"no changed project inputs"};if(n.changes.some(u=>u.kind!=="modified"||u.inputKind!=="source"||!un(u.path)))return{eligible:!1,reason:"change is not a modified TypeScript source file"};let r=ft(n,e.graph,e.projectFiles);if(r.mode!=="closure"||r.affectedFiles.length===0)return{eligible:!1,reason:r.reasons.length>0?`affected set widened: ${r.reasons.join(", ")}`:"empty affected set"};let i=Ku(r,t,e.graph);if(!i)return{eligible:!1,reason:"affected files cross or ambiguously match TypeScript projects"};let o=wa(e.currentSnapshot,e.projectFiles,e.producerIdentity),a=wa(e.previousSnapshot,e.projectFiles,e.producerIdentity);if(o!==a)return{eligible:!1,reason:"TypeScript fragment project identity changed"};let s=ka(e.previousSnapshot,e.projectFiles,e.graph,e.producerIdentity,e.projectFiles);if(!s)return{eligible:!1,reason:"prior document identity unavailable"};let c=ka(e.currentSnapshot,e.projectFiles,e.graph,e.producerIdentity,r.affectedFiles);if(!c)return{eligible:!1,reason:"next document identity unavailable"};let d=i.length===1?i[0]:void 0;return{eligible:!0,manifest:n,plan:r,projectIdentity:o,previousFragmentGeneration:Ta(e.previousSnapshot,e.producerIdentity),nextFragmentGeneration:Ta(e.currentSnapshot,e.producerIdentity),previousDocumentIdentities:s,nextDocumentIdentities:c,projects:i,...d?{tsconfigPath:d.tsconfigPath,projectArgument:d.projectArgument}:{}}}function Ku(e,t,n){let r=new Map;for(let o of e.affectedFiles){let a=Xu(o,t);if(!a)return null;let s=r.get(a)??[];s.push(o),r.set(a,s)}let i=[];for(let[o,a]of[...r].sort(([s],[c])=>s.localeCompare(c))){let s=new Set(a),c=e.changedFiles.filter(d=>s.has(d)||a.some(u=>Qu(u,d,n)));if(c.length===0)return null;i.push({projectArgument:o,tsconfigPath:o==="."?"tsconfig.json":`${o}/tsconfig.json`,modifiedFiles:c,affectedFiles:[...a].sort()})}return i}function Xu(e,t){let n=t.filter(o=>o==="."||e===o||e.startsWith(`${o}/`));if(n.length===0)return null;let r=[...new Set(n)].sort((o,a)=>Ct(a)-Ct(o)||o.localeCompare(a)),i=r[0];return r[1]&&Ct(r[1])===Ct(i)?null:i}function Ct(e){return e==="."?0:e.split("/").filter(Boolean).length}function Qu(e,t,n){let r=new Set,i=[e];for(let o=0;o<i.length;o+=1){let a=i[o];if(!(!a||r.has(a))){r.add(a);for(let s of n.get(a)??[]){if(s===t)return!0;r.has(s)||i.push(s)}}}return!1}function Da(e){let t=I();try{if(!ar(e.previousDbPath)||!ar(e.previousShardPath))throw new Error("prior TypeScript graph or language shard unavailable");let n=performance.now(),r=or();if(!r.available)throw new Error(r.reason);let i=performance.now()-n;n=performance.now();let o=new J({projectRoot:e.projectRoot,dbPath:e.previousDbPath,indexPath:e.previousIndexPath}),a,s;try{a=st(o,{includeIgnored:!1}).filter(un).sort(),s=ut(o)}finally{o.close()}let c=performance.now()-n,d=Yu({projectMode:e.projectMode,workspaceProjects:e.projectMode==="workspace"?xe(e.projectRoot,e.currentSnapshot.typescriptProjects):void 0,previousSnapshot:e.previousSnapshot,currentSnapshot:e.currentSnapshot,projectFiles:a,graph:s,producerIdentity:r.producerIdentity,rootTsconfigExists:ar(Ju(e.projectRoot,"tsconfig.json"))});if(!d.eligible)throw new Error(d.reason);let u=va(e.previousDbPath);if(!u)throw new Error("published TypeScript base generation unavailable");n=performance.now();let l=new At({projectRoot:e.projectRoot,cacheDir:e.cacheDir,baseGeneration:u}),p=d.projects.map(v=>l.request({kind:"emit-documents",tsconfigPath:v.tsconfigPath,projectArgument:v.projectArgument,projectIdentity:d.projectIdentity,producerIdentity:r.producerIdentity,modifiedFiles:v.modifiedFiles,affectedFiles:v.affectedFiles})),f=p.flatMap(v=>v.fragments),g=performance.now()-n,h=zu(e.previousShardPath).size>=Go;n=performance.now();let b=h?null:D(e.previousShardPath,{inputKind:"TypeScript base SCIP shard",maxBytes:C}),y=h?{completeIndexBytes:null,affectedIndexBytes:Io(f)}:To({packageVersion:r.packageVersion,baseIndexBytes:b,fragments:f}),x=performance.now()-n;n=performance.now(),h?$o({cacheDir:e.cacheDir,previousGenerationIdentity:d.previousFragmentGeneration,nextGenerationIdentity:d.nextFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:d.projectIdentity,baseShardCurrent:e.baseShardCurrent,fragments:f}):(Po({cacheDir:e.cacheDir,packageVersion:r.packageVersion,indexBytes:b,producerIdentity:r.producerIdentity,projectIdentity:d.projectIdentity,generationIdentity:d.previousFragmentGeneration,documentIdentities:d.previousDocumentIdentities,allowUntrackedDocuments:!0}),vo({cacheDir:e.cacheDir,previousGenerationIdentity:d.previousFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:d.projectIdentity,generationIdentity:d.nextFragmentGeneration,fragments:f,documentIdentities:d.nextDocumentIdentities}));let P=performance.now()-n;n=performance.now(),y.completeIndexBytes&&sr(e.candidateShardPath,y.completeIndexBytes),sr(e.candidateAffectedScipPath,y.affectedIndexBytes);let k=performance.now()-n,T={scipPath:h?e.previousShardPath:e.candidateShardPath,candidateScipPath:e.candidateShardPath,affectedScipPath:e.candidateAffectedScipPath,completeScipUpdated:!h,durationMs:I()-t,cold:p.some(v=>v.cold),changedFiles:d.plan.changedFiles,affectedFiles:d.plan.affectedFiles,producerIdentity:r.producerIdentity,previousFragmentGeneration:d.previousFragmentGeneration,nextFragmentGeneration:d.nextFragmentGeneration,manifest:d.manifest,plan:d.plan,projectFileCount:a.length,referenceFragmentsByFile:new Map(f.map(v=>[v.relativePath,v.referenceFragments])),timings:{runtimeMs:i,graphMs:c,requestMs:g,serviceMs:p.reduce((v,ye)=>v+ye.durationMs,0),assemblyMs:x,fragmentStoreMs:P,writeMs:k}};return e.onStatus(`Incremental TypeScript index emitted ${T.affectedFiles.length} affected document(s) across ${d.projects.length} project(s) in ${(T.durationMs/1e3).toFixed(3)}s (${T.cold?"cold":"warm"} service; ${h?"whole SCIP deferred":"whole SCIP current"}; runtime ${i.toFixed(0)}ms, graph ${c.toFixed(0)}ms, request ${g.toFixed(0)}ms, assembly ${x.toFixed(0)}ms, fragments ${P.toFixed(0)}ms, write ${k.toFixed(0)}ms).`),T}catch(n){return e.onStatus(`Incremental TypeScript index unavailable: ${n instanceof Error?n.message:String(n)}. Falling back to the whole-project indexer.`),null}}function Fa(e){let t=or();if(!t.available)throw new Error(t.reason);let n=Vo({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,baseIndexBytes:D(e.baseShardPath,{inputKind:"TypeScript base SCIP shard",maxBytes:C}),packageVersion:t.packageVersion});sr(e.candidateShardPath,n)}function wa(e,t,n){let r=e.files.filter(i=>Fr(i.path,e.languages)!=="source").map(i=>({path:i.path,size:i.size,hash:i.hash})).sort((i,o)=>i.path.localeCompare(o.path));return cr(JSON.stringify({version:1,producerIdentity:n,pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:[...e.typescriptProjects].sort(),projectFiles:[...t].sort(),nonSourceInputs:r}))}function Ta(e,t){return cr(JSON.stringify({version:1,producerIdentity:t,snapshot:e}))}function ka(e,t,n,r,i){let o=new Set(e.files.map(c=>c.path)),a=oi({projectFiles:t.filter(c=>o.has(c)),snapshot:e,graph:n,engineIdentity:r}),s=new Map;for(let c of i){let d=a.identityFor(c,"typescript-scip-document-v1");if(d.key){s.set(c,d.key);continue}if(o.has(c))return null;s.set(c,cr(JSON.stringify({version:1,producerIdentity:r,generatedDocument:c})))}return s}function cr(e){return Hu("sha256").update(e).digest("hex")}import{closeSync as Zu,existsSync as Lt,fstatSync as el,lstatSync as tl,openSync as nl,renameSync as lr,rmSync as jt,statSync as rl,writeSync as il}from"fs";import{cpus as ol}from"os";import{join as pr}from"path";var dr=Symbol("no-error");async function _a(e,t,n){if(e.length===0)return[];let r=new Array(e.length),i=Number.isFinite(t)?Math.max(1,Math.floor(t)):1,o=Math.min(e.length,i),a=0,s=dr,c=!0,d=Array.from({length:o},async()=>{for(;c&&a<e.length;){let u=a++;try{r[u]=await n(e[u])}catch(l){s===dr&&(s=l),c=!1}}});if(await Promise.all(d),s!==dr)throw s;return r}function al(e,t){if(e.temporaryRootConfigContent===void 0)return null;let n=pr(t,"tsconfig.json"),r=Buffer.from(e.temporaryRootConfigContent,"utf8"),i;try{i=nl(n,"wx",384)}catch(o){if(o.code==="EEXIST")return null;throw o}try{il(i,r);let o=el(i);return{path:n,content:r,device:o.dev,inode:o.ino}}finally{Zu(i)}}function sl(e){if(e)try{let t=tl(e.path);if(!t.isFile()||t.dev!==e.device||t.ino!==e.inode||t.size!==e.content.byteLength)return;let n;try{n=D(e.path,{maxBytes:e.content.byteLength,inputKind:"temporary TypeScript index configuration"})}catch{return}if(!n.equals(e.content))return;jt(e.path)}catch(t){if(t.code!=="ENOENT")throw t}}function cl(e,t,n){if(!e.defaultOutputPath)return;let r=pr(t,e.defaultOutputPath);n!==r&&Lt(r)&&lr(r,n)}function dl(e,t,n){if(!e.defaultOutputPath)return null;let r=pr(t,e.defaultOutputPath);if(r===n)return null;let i=`${n}.default-output-backup`;return jt(i,{force:!0}),Lt(r)?(lr(r,i),{defaultOutputPath:r,backupPath:i}):{defaultOutputPath:r,backupPath:null}}function ul(e){e&&(jt(e.defaultOutputPath,{force:!0}),e.backupPath&&Lt(e.backupPath)&&lr(e.backupPath,e.defaultOutputPath))}function ll(e,t){if(e<=1)return 1;let n=Number(process.env.CODEBASEIQ_INDEXER_CONCURRENCY??0),r=Number.isFinite(t)&&t&&t>0?t:Number.isFinite(n)&&n>0?n:Math.min(8,Math.max(1,ol().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function Aa(e,t,n,r,i){$(i,"Reindex cancelled by its owner.");let o=e.filter(u=>u.config.defaultOutputPath),a=e.filter(u=>!u.config.defaultOutputPath),s=[],c=ll(a.length,r),d=await _a(a,c,u=>ur(u,t,n,i));if(c>1){let u=new Map;for(let l of d.filter(p=>p.result.skipped&&p.retryable)){let p=a.find(f=>f.id===l.result.id);p&&(n(`Retrying ${p.label} indexer serially after parallel failure...`),$(i,"Reindex cancelled by its owner."),u.set(p.id,(await ur(p,t,n,i)).result))}s.push(...d.map(({result:l})=>u.get(l.id)??l))}else s.push(...d.map(({result:u})=>u));for(let u of o)$(i,"Reindex cancelled by its owner."),s.push((await ur(u,t,n,i)).result);return s.sort((u,l)=>e.findIndex(p=>p.id===u.id)-e.findIndex(p=>p.id===l.id))}async function ur(e,t,n,r){$(r,"Reindex cancelled by its owner."),n(`Indexing ${e.label} with ${e.resolvedBinary}...`),jt(e.scipPath,{force:!0});let i=dl(e.config,t,e.scipPath),o=al(e,t),a=[e.binary,...e.args].join(" "),s=I();try{e.trustedProjectTool&&ei(t,e.trustedProjectTool);let d=Qr(e.binary,e.args),u=await yi({command:d.binary,args:d.args,label:`${e.label} indexer`,cwd:t,env:e.env,timeoutMs:fl(),maxStdoutBytes:50*1024*1024,maxStderrBytes:50*1024*1024,signal:r});if(u.status!==0){let l=u.stderr.trim();throw new Error(`${e.resolvedBinary} exited with status ${u.status}${l?`:
|
|
275
|
+
${l}`:""}`)}cl(e.config,t,e.scipPath)}catch(d){if(r?.aborted)throw Lr(r,"Reindex cancelled by its owner.");let u=d instanceof Error?d.message:String(d),l=`${e.resolvedBinary} indexer failed: ${pl(u)}`,p=e.label===e.language?l:`${e.label}: ${l}`;return n(`Skipping ${e.label}: ${l}`),{result:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:I()-s,command:a,skipped:{language:e.language,reason:p}},retryable:gl(d)}}finally{ul(i),sl(o)}if(!Lt(e.scipPath)){let d=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`,u=e.label===e.language?d:`${e.label}: ${d}`;return n(`Skipping ${e.label}: ${d}`),{result:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:I()-s,command:a,skipped:{language:e.language,reason:u}},retryable:!1}}let c;try{c=rl(e.scipPath).size}catch{c=void 0}return{result:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:I()-s,command:a,outputBytes:c},retryable:!1}}function pl(e){let[t="",...n]=e.split(`
|
|
276
|
+
`),r=n.map(o=>o.trim()).filter(Boolean);if(r.length===0)return t;let i=r.find(o=>/^(?:error:\s*)?[A-Z]\w*Error\b/.test(o))??r[r.length-1];return`${t} ${i}`}function fl(){let e=Number(process.env.CODEBASEIQ_INDEXER_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):mi.indexer}function gl(e){return e instanceof hi?e.kind==="spawn"&&Oa(e.cause):Oa(e)}function Oa(e){let t=e?.code;return t==="EAGAIN"||t==="ENOMEM"||t==="EMFILE"||t==="ENFILE"||t==="ETXTBSY"}import{execFileSync as La}from"child_process";import{homedir as Ca,platform as ml}from"os";import{delimiter as hl,join as Nt}from"path";function gr(e,t){let n=e.installMethods,r=Me(e);if(!n?.length)return t(`No auto-install method available for ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let i of n){if(!i.identity||!i.destination){t(`Refusing ${i.label} installation for ${r}: the installer descriptor lacks an immutable identity or destination.`);continue}if(!tn(i.prerequisite))continue;let o=yl(i);t(`Installing immutable ${i.identity} via ${i.label} into ${o}; expected executable: ${r}.`);try{La(i.binary,i.args,{stdio:"inherit",windowsHide:!0,timeout:3e5,env:process.env,shell:ml()==="win32"});let a=Pe(e);if(a){let s=a===e.indexerBinary?"":` (using ${a})`;return t(`Successfully installed ${i.identity} via ${i.label}${s}; resolved executable: ${a}.`),!0}t(`${i.label} command completed but ${r} was not found on PATH`)}catch(a){let s=a instanceof Error?a.message:String(a);t(`${i.label} install failed: ${s}`)}}return t(`Could not auto-install ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function yl(e){if(e.binary==="npm")return fr("npm",["root","-g"])??e.destination;if(e.binary==="go"){let t=fr("go",["env","GOBIN"]);if(t)return t;let n=fr("go",["env","GOPATH"]);if(n)return Nt(n.split(hl)[0],"bin")}return e.binary==="dotnet"?Nt(process.env.DOTNET_CLI_HOME??Ca(),".dotnet","tools"):e.binary==="dart"?Nt(process.env.PUB_CACHE??Nt(Ca(),".pub-cache"),"bin"):e.destination}function fr(e,t){try{return La(e,t,{stdio:["ignore","pipe","ignore"],windowsHide:!0,encoding:"utf8",timeout:1e4,killSignal:"SIGKILL",env:process.env}).trim()||null}catch{return null}}import is from"better-sqlite3";import{existsSync as os}from"fs";import{dirname as as,join as ss,resolve as cs}from"path";import{randomUUID as bl}from"crypto";import{mkdtempSync as Rl,rmSync as xl,statSync as Na}from"fs";import{tmpdir as Il}from"os";import{join as Ma}from"path";import{Worker as Pl}from"worker_threads";function Sl(){return{"missing-source-file":0,"missing-service-script":0,"no-definition":0,"same-file-definition":0,"unindexed-definition":0}}function Te(){return{skippedReferences:0,skippedReferenceReasons:Sl(),skippedReferenceSamples:[]}}function Mt(e,t){e.skippedReferences+=t.skippedReferences;for(let n of Object.keys(e.skippedReferenceReasons)){e.skippedReferenceReasons[n]+=t.skippedReferenceReasons[n];for(let r of t.skippedReferenceSamples.filter(i=>i.reason===n))e.skippedReferenceSamples.filter(o=>o.reason===n&&o.sourceFile===r.sourceFile).length<2&&e.skippedReferenceSamples.push(r)}}var vl=3e5,Ga=64*1024*1024,El={createResultDirectory:()=>Rl(Ma(Il(),"codebaseiq-vue-workers-")),spawn:(e,t)=>new Pl(e,{workerData:t}),resultSize:e=>Na(e).size,readResult:e=>E(e,{maxBytes:Ga,inputKind:"Vue worker result"}),removeResultDirectory:e=>xl(e,{recursive:!0,force:!0})};function $a(e){return e.length>=8&&Ba(e.length)>1}async function Va(e,t=El){let n=Ba(e.vueFiles.length),r=Ml(e.vueFiles),i=$l(r,n),o=new URL("./augment-vue-worker.js",import.meta.url),a=e.timeoutMs??jl(),s=e.maxResultBytes??Nl();ja("timeoutMs",a),ja("maxResultBytes",s);let c=bl(),d=t.createResultDirectory(),u=[],l,p,f;try{for(let h=0;h<i.length;h++){let b=h,y=i[h]??[],x=y.map(T=>T.taskId),P=Ma(d,`${b}.json`),k=t.spawn(o,{projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,tasks:y,resultPath:P,runId:c,workerId:b,taskIds:x});u.push({workerId:b,taskIds:x,resultPath:P,handle:k,completion:wl(k,b)})}await Tl(u,a);let g=u.sort((h,b)=>h.workerId-b.workerId).map(h=>Dl(h,c,s,t));f={occurrences:g.flatMap(h=>h.occurrences),...Te()};for(let h of g)Mt(f,h)}catch(g){l=g}finally{let g=await kl(u);if(g.length===0)try{t.removeResultDirectory(d)}catch(h){g.push(h)}if(g.length>0){let h=l===void 0?g:[l,...g];p=new AggregateError(h,`Vue worker cleanup failed: ${Ll(h[0])}`)}}if(p)throw p;if(l!==void 0)throw l;if(!f)throw new Error("Vue workers completed without producing a merged result.");return f}function wl(e,t){return new Promise((n,r)=>{let i=!1,o=c=>{i||(i=!0,e.off("error",a),e.off("exit",s),c?r(c):n())},a=c=>{o(new Error(`Vue reference worker ${t} failed: ${c.message}`,{cause:c}))},s=c=>{o(c===0?void 0:new Error(`Vue reference worker ${t} exited with code ${c}`))};e.once("error",a),e.once("exit",s)})}async function Tl(e,t){let n;try{await Promise.race([Promise.all(e.map(r=>r.completion)),new Promise((r,i)=>{n=setTimeout(()=>i(new Error(`Vue reference workers timed out after ${(t/1e3).toFixed(3)}s`)),t),n.unref()})])}finally{n&&clearTimeout(n)}}async function kl(e){return(await Promise.allSettled(e.map(async n=>n.handle.terminate()))).flatMap(n=>n.status==="rejected"?[n.reason]:[])}function Dl(e,t,n,r){let i=r.resultSize(e.resultPath);if(!Number.isSafeInteger(i)||i<0||i>n)throw new Error(`Vue reference worker ${e.workerId} result is ${i} bytes; limit is ${n} bytes`);let o;try{o=JSON.parse(r.readResult(e.resultPath))}catch(a){throw new Error(`Vue reference worker ${e.workerId} produced invalid JSON`,{cause:a})}if(!Ke(o)||o.version!==1||o.runId!==t||o.workerId!==e.workerId)throw new Error(`Vue reference worker ${e.workerId} result identity does not match its assignment`);if(!Cl(o.taskIds,e.taskIds))throw new Error(`Vue reference worker ${e.workerId} result task identities do not match its assignment`);if(o.ok===!1)throw typeof o.error!="string"?new Error(`Vue reference worker ${e.workerId} failure payload is malformed`):new Error(`Vue reference worker ${e.workerId} failed: ${o.error}`);if(o.ok!==!0||!Fl(o.result))throw new Error(`Vue reference worker ${e.workerId} success payload is malformed`);return o.result}function Fl(e){if(!Ke(e)||!Array.isArray(e.occurrences)||!e.occurrences.every(_l)||!X(e.skippedReferences)||!Ke(e.skippedReferenceReasons))return!1;for(let t of["missing-source-file","missing-service-script","no-definition","same-file-definition","unindexed-definition"])if(!X(e.skippedReferenceReasons[t]))return!1;return Array.isArray(e.skippedReferenceSamples)&&e.skippedReferenceSamples.every(Ol)}function _l(e){return Ke(e)&&typeof e.sourceFile=="string"&&X(e.sourceLine)&&X(e.sourceStartChar)&&X(e.sourceEndChar)&&typeof e.sourceToken=="string"&&typeof e.definitionFile=="string"&&X(e.symbolId)}function Ol(e){return Ke(e)&&typeof e.sourceFile=="string"&&X(e.sourceLine)&&X(e.sourceStartChar)&&X(e.sourceEndChar)&&typeof e.token=="string"&&Al(e.reason)}function Al(e){return e==="missing-source-file"||e==="missing-service-script"||e==="no-definition"||e==="same-file-definition"||e==="unindexed-definition"}function X(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function Ke(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Cl(e,t){return Array.isArray(e)&&e.length===t.length&&e.every((n,r)=>typeof n=="string"&&n===t[r])}function ja(e,t){if(!Number.isSafeInteger(t)||t<=0)throw new TypeError(`${e} must be a positive safe integer.`)}function Ll(e){return e instanceof Error?e.message:String(e)}function Ba(e){let t=Number(process.env.CODEBASEIQ_AUGMENT_VUE_WORKERS??0),n=Number.isFinite(t)&&t>0?t:1;return Math.max(1,Math.min(e,n))}function jl(){let e=Number(process.env.CODEBASEIQ_AUGMENT_VUE_WORKER_TIMEOUT_MS??0);return Number.isFinite(e)&&e>0?e:vl}function Nl(){let e=Number(process.env.CODEBASEIQ_AUGMENT_VUE_WORKER_RESULT_MAX_BYTES??0);return Number.isSafeInteger(e)&&e>0?e:Ga}function Ml(e){let t=Gl(),n=[];for(let r of e){let i=Ua(r),o=Math.max(1,Math.ceil(i/t));for(let a=0;a<o;a++)n.push({taskId:`${n.length}:${r}:${a}`,fileName:r,startOffset:Math.floor(i*a/o),endOffset:a===o-1?Number.POSITIVE_INFINITY:Math.floor(i*(a+1)/o),countFileSkip:a===0})}return n}function Gl(){return Number.POSITIVE_INFINITY}function $l(e,t){let n=Array.from({length:t},()=>({tasks:[],weight:0})),r=e.map(i=>({task:i,weight:Vl(i)})).sort((i,o)=>o.weight-i.weight);for(let i of r){let o=n.reduce((a,s)=>s.weight<a.weight?s:a);o.tasks.push(i.task),o.weight+=i.weight}return n.map(i=>i.tasks).filter(i=>i.length>0)}function Vl(e){return Number.isFinite(e.endOffset)?Math.max(1,e.endOffset-e.startOffset):Math.max(1,Ua(e.fileName)-e.startOffset)}function Ua(e){try{return Na(e).size}catch{return 1}}import{createRequire as Bl}from"module";import{existsSync as Ul}from"fs";import{dirname as Wa,extname as Wl,join as qa,relative as ql,resolve as Hl}from"path";import{pathToFileURL as zl}from"url";function Jl(e){e.transaction(()=>{e.prepare(`
|
|
277
277
|
DELETE FROM mentions
|
|
278
278
|
WHERE chunk_id IN (
|
|
279
279
|
SELECT c.id
|
|
@@ -293,7 +293,7 @@ ${l}`:""}`)}al(e.config,t,e.scipPath)}catch(d){if(r?.aborted)throw Lr(r,"Reindex
|
|
|
293
293
|
FROM documents
|
|
294
294
|
WHERE language = 'vue' OR relative_path LIKE '%.vue'
|
|
295
295
|
ORDER BY relative_path
|
|
296
|
-
`).all().map(r=>
|
|
296
|
+
`).all().map(r=>Hl(t,r.relativePath))}function Ha(e,t){let{vueCore:n,ts:r,volarTs:i}=Yl(e),{parsed:o,vueOptions:a}=Kl(n,r,t),s=Wa(t),c=n.createVueLanguagePlugin(r,o.options,a,f=>f),d=Xl(n,r,c),u=Ql(s,o),{languageServiceHost:l}=i.createLanguageServiceHost(r,r.sys,d,f=>f,u),p=r.createLanguageService(l);return{ts:r,language:d,languageService:p,fileNames:o.fileNames,configDir:s}}function Yl(e){let t=Bl(zl(qa(e,"package.json")).href);return{vueCore:mr(t,"@vue/language-core",e),ts:mr(t,"typescript",e),volarTs:mr(t,"@volar/typescript",e)}}function Kl(e,t,n){let r=t.readConfigFile(n,t.sys.readFile);if(r.error||!r.config)throw new Error(`Failed to read ${n}`);let o=e.createParsedCommandLine(t,t.sys,n).vueOptions;return typeof e.createGlobalTypesWriter=="function"&&(o.globalTypesPath=e.createGlobalTypesWriter(o,t.sys.writeFile)),{parsed:t.parseJsonConfigFileContent(r.config,t.sys,Wa(n),void 0,n,void 0,e.getAllExtensions(o).map(a=>({extension:a.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function Xl(e,t,n){let r={},i=e.createLanguage([n],new Map,o=>{if(!Ul(o))return;let a=E(o,{maxBytes:z,inputKind:"Vue language-service source file"});r.current?.scripts.set(o,t.ScriptSnapshot.fromString(a),n.getLanguageId(o)??ip(o))});return r.current=i,i}function Ql(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function mr(e,t,n){try{return e(t)}catch(r){throw(typeof r=="object"&&r!==null&&"code"in r?r.code:null)==="MODULE_NOT_FOUND"?new Error(`Vue augmentation requires ${t} to be installed in ${n}. Install Vue/Volar dependencies for that project, then rerun augment-vue.`,{cause:r}):r}}function za(e,t,n){let r=Zl(e);return i=>{if(!i.name)return null;let o=Q(t,i.fileName),a=n.get(i.fileName);if(!a)return null;let s=n.positionAt(a,i.textSpan.start),c=r.get(o);if(!c)return null;let d=c.starts.find(l=>l.line===s.line&&l.displayName===i.name);if(d)return d.symbolId;let u=c.containingByLine.get(s.line);return u&&u.displayName===i.name?u.symbolId:ep(c.starts,s.line,2,i.name)}}function Zl(e){let t=e.prepare(`
|
|
297
297
|
SELECT
|
|
298
298
|
d.relative_path AS relativePath,
|
|
299
299
|
der.start_line AS startLine,
|
|
@@ -304,22 +304,22 @@ ${l}`:""}`)}al(e.config,t,e.scipPath)}catch(d){if(r?.aborted)throw Lr(r,"Reindex
|
|
|
304
304
|
JOIN documents d ON d.id = der.document_id
|
|
305
305
|
JOIN global_symbols gs ON gs.id = der.symbol_id
|
|
306
306
|
ORDER BY d.relative_path, (der.end_line - der.start_line) DESC
|
|
307
|
-
`).all(),n=new Map;for(let r of t){let i=n.get(r.relativePath);i||(i={containingByLine:new Map,starts:[]},n.set(r.relativePath,i)),i.starts.push({line:r.startLine,symbolId:r.symbolId,displayName:r.displayName});for(let o=r.startLine;o<=r.endLine;o++)i.containingByLine.set(o,{symbolId:r.symbolId,displayName:r.displayName})}for(let r of n.values())r.starts.sort((i,o)=>i.line-o.line);return n}function
|
|
307
|
+
`).all(),n=new Map;for(let r of t){let i=n.get(r.relativePath);i||(i={containingByLine:new Map,starts:[]},n.set(r.relativePath,i)),i.starts.push({line:r.startLine,symbolId:r.symbolId,displayName:r.displayName});for(let o=r.startLine;o<=r.endLine;o++)i.containingByLine.set(o,{symbolId:r.symbolId,displayName:r.displayName})}for(let r of n.values())r.starts.sort((i,o)=>i.line-o.line);return n}function ep(e,t,n,r){let i=0,o=e.length-1;for(;i<=o;){let s=Math.floor((i+o)/2);e[s].line<t?i=s+1:o=s-1}let a=null;for(let s of[o,i]){let c=e[s];if(!c||c.displayName!==r)continue;let d=Math.abs(c.line-t);d>n||(!a||d<a.distance)&&(a={distance:d,symbolId:c.symbolId})}return a?.symbolId??null}function yr(e,t,n){let r=sp(t),i=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),o=e.prepare(`
|
|
308
308
|
INSERT OR IGNORE INTO global_symbols (symbol, display_name, kind, documentation)
|
|
309
309
|
VALUES (?, ?, ?, ?)
|
|
310
|
-
`),a=0,s=new Map;return e.transaction(()=>{for(let d of n){let u=Q(t,d),l=
|
|
310
|
+
`),a=0,s=new Map;return e.transaction(()=>{for(let d of n){let u=Q(t,d),l=ns(r.name,r.version,u);o.run(l,"default",7,`Vue component|${u}`);let p=cp(i,r,t,d);p&&(a++,s.set(d,p))}})(),{get(d){return s.get(d)??null},syntheticSymbols:a}}function Ja(e,t,n,r,i){return e.transaction(()=>(Jl(e),tp(e,t,n,r),np(e,i)))()}function tp(e,t,n,r){let i=e.prepare("SELECT id FROM documents WHERE relative_path = ?"),o=e.prepare(`
|
|
311
311
|
INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
|
|
312
312
|
VALUES (?, ?, ?, ?, X'00')
|
|
313
313
|
`),a=e.prepare(`
|
|
314
314
|
INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
|
|
315
315
|
VALUES (?, ?, 1)
|
|
316
|
-
`);for(let s of n){let c=r.get(s);if(!c)continue;let d=Q(t,s),u=i.get(d);if(!u)continue;let l=o.run(u.id,-1,0,0);a.run(Number(l.lastInsertRowid),c)}}function
|
|
316
|
+
`);for(let s of n){let c=r.get(s);if(!c)continue;let d=Q(t,s),u=i.get(d);if(!u)continue;let l=o.run(u.id,-1,0,0);a.run(Number(l.lastInsertRowid),c)}}function Ya(e,t,n,r,i){if(e.fileName.endsWith(".vue")){let o=r.language.scripts.get(e.fileName),a=o?.generated?.languagePlugin.typescript?.getServiceScript(o.generated.root)?.code;if(o&&a){let s=r.language.maps.get(a,o);if(Sr(s,e.textSpan.start)!==null)return n.get(e.fileName)}return e.fileName.startsWith(i)?n.get(e.fileName):null}return t(e)}function Ka(e){let t=new Set,n=[];for(let r of e){let i=Xa(r);t.has(i)||(t.add(i),n.push(r))}return n}function Xa(e){return[e.sourceFile,e.sourceLine,e.sourceStartChar,e.sourceEndChar,e.symbolId].join(":")}function np(e,t){let n=ap(e,[...new Set(t.map(c=>c.sourceFile))]),r=e.prepare(`
|
|
317
317
|
INSERT INTO chunks (document_id, chunk_index, start_line, end_line, occurrences)
|
|
318
318
|
VALUES (?, ?, ?, ?, X'00')
|
|
319
319
|
`),i=e.prepare(`
|
|
320
320
|
INSERT OR IGNORE INTO mentions (chunk_id, symbol_id, role)
|
|
321
321
|
VALUES (?, ?, 0)
|
|
322
|
-
`),o=new Set,a=0,s=0;for(let c of t){let d=
|
|
322
|
+
`),o=new Set,a=0,s=0;for(let c of t){let d=Xa(c);if(o.has(d))continue;o.add(d);let u=n.get(c.sourceFile);if(!u)continue;let l=r.run(u,s++,c.sourceLine,c.sourceLine),p=i.run(Number(l.lastInsertRowid),c.symbolId);a+=Number(p.changes)}return a}function*Qa(e){let t=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,n=new Set(["script","setup","template","style","lang","scoped","true","false","null","undefined","const","let","var","import","from","export","return","if","else","for","while","function","class","type","interface","as","await","async"]),r;for(;r=t.exec(e);){let i=r[0];n.has(i)||(yield{text:i,start:r.index,end:r.index+i.length})}}function Za(e,t){for(let[n]of e.toGeneratedLocation(t,r=>!!r.navigation))return n;return null}function Sr(e,t){let n=e;for(let[r]of n.toSourceLocation(t,i=>!!i.navigation))return r;return null}function rp(e,t){let n=0,r=e.lineStarts.length-1;for(;n<=r;){let o=Math.floor((n+r)/2);e.lineStarts[o]<=t?n=o+1:r=o-1}let i=Math.max(0,r);return{line:i,character:t-e.lineStarts[i]}}function es(e,t){return Q(e,t).startsWith("node_modules/")}function Q(e,t){return ql(e,t).replaceAll("\\","/")}function ip(e){switch(Wl(e)){case".vue":return"vue";case".tsx":return"typescriptreact";case".ts":case".mts":case".cts":return"typescript";case".jsx":return"javascriptreact";case".js":case".mjs":case".cjs":return"javascript";case".json":return"json";default:return"typescript"}}function ts(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let n=E(t,{maxBytes:z,inputKind:"Vue source file"}),r={text:n,lineStarts:op(n)};return e.set(t,r),r}catch{return e.set(t,null),null}},positionAt:rp}}function op(e){let t=[0];for(let n=0;n<e.length;n++)e.charCodeAt(n)===10&&t.push(n+1);return t}function ap(e,t){let n=new Map,r=500;for(let i=0;i<t.length;i+=r){let o=t.slice(i,i+r),a=e.prepare(`SELECT id, relative_path AS relativePath FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let s of a)n.set(s.relativePath,s.id)}return n}function sp(e){try{let t=JSON.parse(E(qa(e,"package.json"),{maxBytes:_,inputKind:"project package manifest"}));return{name:t.name??"workspace",version:t.version??"0.0.0"}}catch{return{name:"workspace",version:"0.0.0"}}}function cp(e,t,n,r){let i=Q(n,r),o=ns(t.name,t.version,i);return e.get(o)?.id??null}function ns(e,t,n){let r=n.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${r}/default.`}function ds(e){return{id:"vue-resolved-references",facts:["synthetic-symbol","source-mapped-occurrence","definition-mention","replacement-chunk","fingerprint-cache"],run:t=>pp({projectRoot:t.projectRoot,dbPath:t.dbPath,tsconfig:e.tsconfig,onStatus:t.onStatus})}}function up(e){return U(oe(),{projectRoot:e.projectRoot,dbPath:e.dbPath}),U(ds({tsconfig:e.tsconfig}),{projectRoot:e.projectRoot,dbPath:e.dbPath,onStatus:e.onStatus}).result}async function lp(e){return U(oe(),{projectRoot:e.projectRoot,dbPath:e.dbPath}),fp(e)}function pp(e){let t=cs(e.projectRoot,e.tsconfig);if(!os(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new is(j(e.dbPath));try{let r=hr(n,e.projectRoot),i=ss(as(e.dbPath),"augment-vue-meta.json");return Xi({cachePath:i,readFingerprint:()=>ps(n,e.projectRoot,e.tsconfig),compute:()=>gp({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:r,onStatus:e.onStatus}),onCacheHit:o=>e.onStatus?.(`Vue references unchanged; reused ${o.resolvedReferences} cached resolved references.`)})}finally{n.close()}}async function fp(e){let t=cs(e.projectRoot,e.tsconfig);if(!os(t))throw new Error(`Vue tsconfig not found at ${t}`);let n=new is(j(e.dbPath));try{let r=hr(n,e.projectRoot),i=ss(as(e.dbPath),"augment-vue-meta.json");return await Qi({cachePath:i,readFingerprint:()=>ps(n,e.projectRoot,e.tsconfig),compute:()=>mp({db:n,projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,configPath:t,vueFiles:r,onStatus:e.onStatus}),onCacheHit:o=>e.onStatus?.(`Vue references unchanged; reused ${o.resolvedReferences} cached resolved references.`)})}finally{n.close()}}function gp(e){let t=yr(e.db,e.projectRoot,e.vueFiles),n=ls(e,t);return us(e,t,n)}async function mp(e){let t=yr(e.db,e.projectRoot,e.vueFiles),n=$a(e.vueFiles)?await Va({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles}):ls(e,t);return us(e,t,n)}function us(e,t,n){let r=Ka(n.occurrences),i=Ja(e.db,e.projectRoot,e.vueFiles,t,r),o={vueFiles:e.vueFiles.length,resolvedReferences:r.length,resolvedReferenceSamples:vp(e.db,r,20),insertedMentions:i,skippedReferences:n.skippedReferences,skippedReferenceReasons:n.skippedReferenceReasons,skippedReferenceSamples:Pp(n.skippedReferenceSamples,20),syntheticSymbols:t.syntheticSymbols};return e.onStatus?.(`Resolved ${o.resolvedReferences} Vue references with Volar; inserted ${o.insertedMentions} mentions.`),o}function ls(e,t){let n=hp({db:e.db,projectRoot:e.projectRoot,configPath:e.configPath,vueSymbolLookup:t});return yp({...n,vueFiles:n.context.fileNames.filter(r=>r.endsWith(".vue"))})}function ps(e,t,n){let r=e.prepare(`
|
|
323
323
|
SELECT
|
|
324
324
|
(SELECT COUNT(*) FROM documents) AS documents,
|
|
325
325
|
(SELECT COUNT(*) FROM global_symbols) AS symbols,
|
|
@@ -328,10 +328,10 @@ ${l}`:""}`)}al(e.config,t,e.scipPath)}catch(d){if(r?.aborted)throw Lr(r,"Reindex
|
|
|
328
328
|
(SELECT COUNT(*) FROM defn_enclosing_ranges) AS ranges,
|
|
329
329
|
(SELECT MAX(id) FROM chunks) AS maxChunkId,
|
|
330
330
|
(SELECT MAX(id) FROM global_symbols) AS maxSymbolId
|
|
331
|
-
`).get();return{version:3,tsconfig:n,files:dt(t),db:r}}function
|
|
332
|
-
`,t-1)+1,r=e.slice(n,t);return/\bfrom\s+['"][^'"]*$/.test(r)||/\bimport\s*\(\s*['"][^'"]*$/.test(r)}function Sp(e,t,n){return n===e?"same-file-definition":n.endsWith(".vue")&&t!==n.split("/").at(-1)?.replace(/\.vue$/,"")?"unindexed-definition":null}function ns(e,t,n){let r=Te();return t.countFileSkip&&(r.skippedReferences=1,r.skippedReferenceReasons[n]=1,r.skippedReferenceSamples.push({sourceFile:Q(e,t.fileName),sourceLine:0,sourceStartChar:0,sourceEndChar:0,token:"",reason:n})),{occurrences:[],...r}}function br(e,t,n,r,i,o){if(e.skippedReferences++,e.skippedReferenceReasons[o]++,e.skippedReferenceSamples.filter(s=>s.reason===o&&s.sourceFile===r).length>=2)return;let a=t.positionAt(n,i.start);e.skippedReferenceSamples.push({sourceFile:r,sourceLine:a.line,sourceStartChar:a.character,sourceEndChar:a.character+i.text.length,token:i.text,reason:o})}function Rr(e,t){let n=new Map;for(let o of e){let a=n.get(o.sourceFile)??[];a.push(o),n.set(o.sourceFile,a)}let r=[...n.keys()].sort(),i=[];for(let o=0;i.length<t;o++){let a=!1;for(let s of r){let c=n.get(s)?.[o];if(c&&(i.push(c),a=!0,i.length===t))break}if(!a)break}return i}function bp(e,t){let n=Rr(e.filter(o=>o.sourceFile!==o.definitionFile),Math.ceil(t/2)),r=new Set(n.map(o=>`${o.sourceFile}:${o.sourceLine}:${o.sourceStartChar}:${o.sourceEndChar}:${o.symbolId}`)),i=Rr(e.filter(o=>!r.has(`${o.sourceFile}:${o.sourceLine}:${o.sourceStartChar}:${o.sourceEndChar}:${o.symbolId}`)),t-n.length);return[...n,...i]}function Rp(e,t){let n=[...new Set(e.map(i=>i.reason))].sort(),r=[];for(let[i,o]of n.entries()){let a=n.length-i,s=Math.ceil((t-r.length)/a);r.push(...Rr(e.filter(c=>c.reason===o),s))}return r.slice(0,t)}function xp(e,t,n){let r=e.prepare("SELECT symbol FROM global_symbols WHERE id = ?");return bp(t,n).map(({symbolId:i,...o})=>({...o,definitionSymbol:r.get(i)?.symbol??`symbol-id:${i}`}))}function Ip(e,t,n,r,i,o){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let a of vp(t.context.languageService,t.fileName,r+1,t.map,n,t.tokenContext.tokenByStart)){if(t.tokenContext.processedStarts.has(a))continue;let s=t.tokenContext.tokenByStart.get(a);s&&(ps(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i,o),t.tokenContext.processedStarts.add(a))}}function ps(e,t,n,r,i,o,a){let s=t.positionAt(n,i.start);e.push({sourceFile:r,sourceLine:s.line,sourceStartChar:s.character,sourceEndChar:s.character+i.text.length,sourceToken:i.text,definitionFile:o,symbolId:a})}function Pp(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function vp(e,t,n,r,i,o){let a=e.getDocumentHighlights?.(t,n,[t])??[],s=[];for(let c of a)if(c.fileName===t)for(let d of c.highlightSpans){let u=Ep(r,d.textSpan.start,o,i.text);u!==null&&s.push(u)}return s}function Ep(e,t,n,r){let i=n.get(t);if(i?.text===r)return i.start;let o=Sr(e,t);if(o===null)return null;let a=n.get(o);return a?.text===r?a.start:null}async function fS(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log}=e,i=e.skipAutoInstall===!0||e.installMissing!==!0,o=_p(e),a=Date.now(),s=I();$t(S(o.outputScip),{recursive:!0}),$t(S(o.outputDb),{recursive:!0});let c=e.languages??ln(t);if(c.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");r(`Detected languages: ${c.join(", ")}`);let d=st("reindex.fingerprint",()=>Zt(t,c,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath}),{languages:c.length}),u,l;if(e.skipIfUnchanged!==!1&&!ca(t,o.outputDb)&&fs(o.outputScip)===fs(A(S(o.outputDb),"index.scip"))){let y=ct(t);if(u=y?.clean?Ft(y,d):void 0,y&&!y.clean&&!Fp(o)){let x=da(y,c,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath});if(x)try{_t({snapshot:x.snapshot,manifest:x.manifest,targetCacheDir:S(o.outputDb),targetProjectRoot:t,persistLease:!1}),pa(x.snapshot,S(o.outputDb)),r(`Forked shared baseline ${x.snapshot.generationId.slice(0,12)} for dirty worktree reindex`)}catch(P){r(`Shared baseline fork failed; continuing locally: ${de(P)}`)}}else if(u){let x=K(u);if(x){if(!Dp(o,d))try{_t({snapshot:u,manifest:x,targetCacheDir:S(o.outputDb),targetProjectRoot:t}),r(`Attached shared generation ${u.generationId.slice(0,12)}`)}catch(P){r(`Shared generation attach failed; continuing locally: ${de(P)}`)}}else{let P=await la(u);if(P.kind==="owner")l=P.release;else if(P.kind==="generation-ready"){let k=K(u);if(k)try{_t({snapshot:u,manifest:k,targetCacheDir:S(o.outputDb),targetProjectRoot:t,action:"waited"}),r(`Attached shared generation ${u.generationId.slice(0,12)} after waiting`)}catch(T){r(`Shared generation attach failed after waiting; continuing locally: ${de(T)}`)}}else r("Shared generation build lock timed out; continuing with an isolated local reindex")}}}let g=ue(A(S(o.outputDb),"cache-lifecycle.lock"),{waitMs:3e4});if(!g)throw l?.(),new Error(`Could not acquire codebaseiq cache lifecycle lock for ${S(o.outputDb)}.`);let f;try{f=await je("reindex.lock",()=>rf(A(S(o.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),{languages:c.length})}catch(y){throw g.release(),l?.(),y}let h=null,b=Si();try{Hn(o.outputDb,o.outputScip,o.metaPath);let y=Lp(S(o.outputDb));y.removed>0&&r(`Removed ${y.removed} abandoned reindex workspace(s)`);for(let Se of y.errors)r(`Could not remove abandoned reindex workspace: ${Se}`);let x=null,P=st("reindex.reuse-check",()=>(x=Op({opts:e,paths:o,languages:c,fingerprint:d,start:a,monotonicStart:s,onStatus:r}),x),()=>({languages:c.length,reused:x!==null}));if(P){gs({snapshot:u,paths:o,projectRoot:t,fingerprint:d,onStatus:r});let Se=pn(o.outputDb,P);return Se.state==="failed"&&r(`Warning: reindex succeeded, but activity telemetry was not recorded: ${Se.reason}`),Xt(t,S(o.outputDb)),P}let k=Cp(o);h=k.runDir;let T,v=await je("reindex.fresh",async()=>(T=await jp({opts:e,languages:c,projectRoot:t,paths:o,tempPaths:k,fingerprint:d,start:a,monotonicStart:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r,writeTelemetry:b}),T),()=>({languages:c.length,reused:T?.reused,skipped:T?.skipped.length}));gs({snapshot:u,paths:o,projectRoot:t,fingerprint:d,onStatus:r});let ye=pn(o.outputDb,v);return ye.state==="failed"&&r(`Warning: reindex succeeded, but activity telemetry was not recorded: ${ye.reason}`),Xt(t,S(o.outputDb)),v}catch(y){let x=Ut({trigger:e.trigger,result:"failed",start:a,monotonicStart:s,error:y instanceof Error?y.message:String(y)});Cs(o.metaPath,x);let P=fi(o.outputDb,x);throw P.state==="failed"&&r(`Warning: failed reindex activity telemetry was not recorded: ${P.reason}`),y}finally{if(h){let y=h;try{F(()=>ke(y,{recursive:!0,force:!0}))}catch(x){r(`Warning: temporary reindex workspace was left behind: ${de(x)}`)}}f(),g.release(),l?.()}}function gs(e){if(e.snapshot)try{let t=ct(e.projectRoot),n=t?Ft(t,e.fingerprint):void 0;if(!n||n.generationId!==e.snapshot.generationId){e.onStatus("Skipped shared generation publication because the worktree changed during indexing");return}let r=ua({snapshot:e.snapshot,sourceCacheDir:S(e.paths.outputDb),sourceProjectRoot:e.projectRoot,sourceStillValid:()=>{let i=ct(e.projectRoot);return(i?Ft(i,e.fingerprint):void 0)?.generationId===e.snapshot?.generationId}});nr(e.snapshot,S(e.paths.outputDb),"built"),e.onStatus(r.kind==="published"?`Published shared generation ${e.snapshot.generationId.slice(0,12)} (${r.achievedDurability})`:`Shared generation ${e.snapshot.generationId.slice(0,12)} was already available (${r.achievedDurability})`)}catch(t){e.onStatus(`Shared generation publication failed; local index remains valid: ${de(t)}`)}}function Dp(e,t){if(!N(e.outputScip)||!N(e.outputDb)||!As(e.metaPath,t))return!1;let n=H(e.outputDb,e.metaPath);return n.state!=="invalid"&&n.state!=="drifted"}function Fp(e){if(!N(e.outputScip)||!N(e.outputDb)||!De(e.metaPath))return!1;let t=H(e.outputDb,e.metaPath);return t.state!=="invalid"&&t.state!=="drifted"}function de(e){return e instanceof Error?e.message:String(e)}function Pr(e,t,n,r,i,o){try{U(Ri({indexPath:n,reuseExisting:i,affectedFiles:o}),{projectRoot:e,dbPath:t,onStatus:r})}catch(a){r(`Runtime-boundary extraction unavailable: ${a instanceof Error?a.message:String(a)}.`)}}function _p(e){let t=e.outputScip??A(e.projectRoot,"index.scip"),n=e.outputDb??A(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:A(S(n),"meta.json")}}function Op(e){let t=H(e.paths.outputDb,e.paths.metaPath);if(e.opts.skipIfUnchanged===!1||!N(e.paths.outputScip)||!N(e.paths.outputDb)||!As(e.paths.metaPath,e.fingerprint)||t.state==="invalid"||t.state==="drifted")return null;U(oe(),{projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),Pr(e.opts.projectRoot,e.paths.outputDb,e.paths.outputScip,e.onStatus,!0),H(e.paths.outputDb,e.paths.metaPath).state==="drifted"&&(zn(e.paths.outputDb,e.paths.metaPath),e.onStatus("Published refreshed SQLite generation after post-index augmentation"));let n=I()-e.monotonicStart,r=Ut({trigger:e.opts.trigger,result:"reused",start:e.start,monotonicStart:e.monotonicStart,languages:e.languages,skipped:[]});return Cs(e.paths.metaPath,r),e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[],lastRefresh:r,shards:Ap(e.paths,e.opts.projectRoot,e.languages,e.opts)}}function Ap(e,t,n,r){let i=_s(t,n,r);return n.map(o=>({id:o,language:o,reused:!0,fingerprint:Ke(i[o]),outputBytes:Xe(Er(e.outputDb,o)),durationMs:0}))}function Cp(e){let t=Fe(A(S(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:A(t,Gt(e.outputScip)),tempOutputDb:A(t,Gt(e.outputDb)),tempMetaPath:A(t,Gt(e.metaPath))}}function Lp(e){let t=[],n;try{n=xs(e,{withFileTypes:!0})}catch(i){return{removed:0,errors:[de(i)]}}let r=0;for(let i of n)if(!(!i.name.startsWith("reindex-")||!i.isDirectory()))try{ke(A(e,i.name),{recursive:!0,force:!0}),r+=1}catch(o){t.push(`${i.name}: ${de(o)}`)}return{removed:r,errors:t}}async function jp(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},n,r=await je("reindex.language-indexers",async()=>(n=await Mp(e,t),n),()=>({languages:e.languages.length,indexed:n?.indexedOutputs.length,reused:n?.reusedLanguages.length,skipped:n?.skippedLanguages.length})),{indexedOutputs:i,skippedLanguages:o,reusedLanguages:a,languageFingerprints:s,shards:c,typescriptProjectShardContext:d,incrementalTypeScript:u}=r;if(a.length>0&&e.onStatus(`Reused ${a.length} cached language shard(s): ${a.join(", ")}`),Np({run:e,indexedOutputs:i,skippedLanguages:o,reusedLanguages:a})){let g=st("reindex.publish",()=>zp(e,i,o,a,s,d),{mode:"metadata-only",languages:i.length,reused:a.length}),f=g.durationMs;return e.onStatus(`All language shards unchanged; reused existing SQLite index in ${(f/1e3).toFixed(1)}s`),{languages:i.map(h=>h.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:f,reused:!0,skipped:o,lastRefresh:g,shards:c,writeTelemetry:e.writeTelemetry}}let l=await je("reindex.publish",()=>Hp(e,t,i,o,a,s,d,u),{mode:u?"incremental-or-fallback":"full",languages:i.length,reused:a.length,skipped:o.length}),p=l.durationMs;return e.onStatus(`Done in ${(p/1e3).toFixed(1)}s`),{languages:i.map(g=>g.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:p,reused:!1,skipped:o,lastRefresh:l,shards:c,writeTelemetry:e.writeTelemetry}}function Np(e){if(e.run.opts.skipIfUnchanged===!1||e.skippedLanguages.length>0||!N(e.run.paths.outputScip)||!N(e.run.paths.outputDb))return!1;let t=H(e.run.paths.outputDb,e.run.paths.metaPath);if(t.state==="invalid"||t.state==="drifted")return!1;let n=new Set(e.reusedLanguages),r=new Set(e.indexedOutputs.map(i=>i.language));return e.run.languages.length>0&&r.size===e.run.languages.length&&e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(i=>n.has(i)&&r.has(i))}async function Mp(e,t){let n=Up({paths:e.paths,projectRoot:e.projectRoot,languages:e.languages,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,clojureConfigPath:e.opts.clojureConfigPath}),r=[],i=new Set;for(let[M,Tr]of n)Tr.reused&&(r.push({language:M,scipPath:Tr.scipPath}),i.add(M));for(let M of i)e.onStatus(`Reusing cached ${M} SCIP shard (language inputs unchanged).`);let o=n.get("typescript"),a=H(e.paths.outputDb,e.paths.metaPath),s=De(e.paths.metaPath),c=(a.state==="legacy"||a.state==="current")&&s!==null&&zt(s),d=s?.scipCompanion!=="deferred"&&(a.state!=="current"||a.generation.publication?.scipCompanion!=="deferred"),u=o&&!o.reused&&c?ka({projectRoot:e.projectRoot,cacheDir:S(e.paths.outputDb),previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,previousShardPath:o.scipPath,candidateShardPath:Qe(e.tempPaths.tempOutputScip,"typescript-incremental",0),candidateAffectedScipPath:Qe(e.tempPaths.tempOutputScip,"typescript-affected",0),baseShardCurrent:d,previousSnapshot:vr(e.paths.metaPath),currentSnapshot:e.fingerprint,projectMode:e.opts.typescriptProjectMode,onStatus:e.onStatus}):null,l=new Set(u?["typescript"]:[]),p=u?void 0:Gp(e,n),{preparedRuns:g,skippedLanguages:f,languageOutputScipPaths:h}=Kp({languages:e.languages.filter(M=>!i.has(M)&&!l.has(M)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,trustProjectTools:e.opts.trustProjectTools===!0,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,preDiscoveredTypeScriptProjects:p?.allProjects,clojureConfigPath:e.opts.clojureConfigPath,onStatus:e.onStatus}),b=p?g.filter(M=>M.language!=="typescript"||p.missedProjectIds.has(M.id)):g,y=await Oa(b,e.projectRoot,e.onStatus,e.opts.indexerConcurrency,e.opts.signal),x=[];if(p){Vp(e.paths.outputDb,y,e.writeTelemetry);let M=h.typescript??e.tempPaths.tempOutputScip;x=Bp({outputDb:e.paths.outputDb,tempOutputScip:e.tempPaths.tempOutputScip,outputScipPath:M,reusedProjects:p.reusedProjects,writeTelemetry:e.writeTelemetry})}let P=[...y,...x],{indexedOutputs:k}=Qp(P,f),T=u?[{language:"typescript",scipPath:u.scipPath}]:[],v=[...r,...T,...k];Zp(v,f,e.languages,e.opts.allowPartial,e.onStatus);let ye=u?[{id:"typescript",language:"typescript",label:"typescript (incremental documents)",scipPath:u.scipPath,outputScipPath:u.scipPath,durationMs:u.durationMs,command:"watch-service:typescript-index",outputBytes:Xe(u.scipPath)??void 0}]:[],Se=Wp(n,[...y,...ye],p?{outputDb:e.paths.outputDb,classification:p.classification}:void 0);return{indexedOutputs:v,skippedLanguages:f,reusedLanguages:[...i],languageFingerprints:qp(n,e.languages),shards:Se,typescriptProjectShardContext:p?{projects:p.allProjects,fingerprints:p.fingerprints}:void 0,incrementalTypeScript:u??void 0}}function Gp(e,t){let n=t.get("typescript");if(!n||n.reused||e.opts.typescriptProjectMode!=="workspace")return;let r=xe(e.projectRoot,e.opts.typescriptProjects);if(r.length===0)return;let i=io(e.projectRoot,r),o=to(n.fingerprint.files,r),a=no(r,i),s=ro(r,o,a),c=De(e.paths.metaPath),u=$p(c,s,f=>N(Bt(e.paths.outputDb,f))),l=[...u.entries()].filter(([,f])=>f.reused).map(([f])=>f),p=new Set(l),g=new Set(r.filter(f=>!p.has(f)).map(f=>`typescript:${f}`));return{allProjects:r,fingerprints:s,classification:u,reusedProjects:l,missedProjectIds:g}}function $p(e,t,n){let r=new Map;for(let i of Object.keys(t)){let o=t[i];if(!e){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:o});continue}let a=e.version===_e&&Ht(e).typescriptProjectShardReuse?e.typescriptProjectShards?.[i]:void 0;if(!a){r.set(i,{reused:!1,reason:"no cached fingerprint for this project",fingerprint:o});continue}if(!n(i)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:o});continue}if(Z(a)!==Z(o)){r.set(i,{reused:!1,reason:"project inputs changed since last index",fingerprint:o});continue}r.set(i,{reused:!0,fingerprint:o})}return r}function Vp(e,t,n){for(let r of t){if(r.skipped||!r.id.startsWith("typescript:"))continue;let i=r.id.slice(11),o=Bt(e,i);$t(S(o),{recursive:!0}),fe(n,pe(r.scipPath,o))}}function Bp(e){return e.reusedProjects.map((t,n)=>{let r=Bt(e.outputDb,t),i=Qe(e.tempOutputScip,"typescript-project-cached",n);return fe(e.writeTelemetry,pe(r,i)),{id:`typescript:${t}`,language:"typescript",label:`typescript (${t})`,scipPath:i,outputScipPath:e.outputScipPath,durationMs:0,command:"cached",outputBytes:Xe(i)??void 0}})}function Up(e){let t=De(e.paths.metaPath),n=_s(e.projectRoot,e.languages,e),r=new Map;for(let i of e.languages){let o=Er(e.paths.outputDb,i),a=n[i];if(!t){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:a,scipPath:o});continue}if(t.version!==_e){r.set(i,{reused:!1,reason:`metadata version ${String(t.version??"unknown")} predates per-language shard caching`,fingerprint:a,scipPath:o});continue}if(i==="typescript"&&t.scipCompanion==="deferred"){r.set(i,{reused:!1,reason:"whole TypeScript SCIP companion is deferred behind changed-document overlays",fingerprint:a,scipPath:o});continue}if(!Ht(t).languageShardReuse||!t.languageFingerprints){r.set(i,{reused:!1,reason:"no per-language fingerprints recorded in metadata",fingerprint:a,scipPath:o});continue}let s=t.languageFingerprints[i];if(!s){r.set(i,{reused:!1,reason:"no cached fingerprint for this language",fingerprint:a,scipPath:o});continue}if(!N(o)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:a,scipPath:o});continue}if(Z(s)!==Z(a)){r.set(i,{reused:!1,reason:"language inputs changed since last index",fingerprint:a,scipPath:o});continue}r.set(i,{reused:!0,fingerprint:a,scipPath:o})}return r}function Wp(e,t,n){let r=[];for(let[i,o]of e)o.reused&&r.push({id:i,language:i,reused:!0,fingerprint:Ke(o.fingerprint),outputBytes:Xe(o.scipPath),durationMs:0});for(let i of t){let o=e.get(i.language),a=n&&i.id.startsWith("typescript:")?i.id.slice(11):null,s=a?n.classification.get(a):void 0;r.push({id:i.id,language:i.language,reused:!1,missReason:s?.reason??o?.reason??i.skipped?.reason,fingerprint:s?Ke(s.fingerprint):o?Ke(o.fingerprint):"unknown",outputBytes:i.outputBytes??null,durationMs:i.durationMs,command:i.command})}if(n)for(let[i,o]of n.classification)o.reused&&r.push({id:`typescript:${i}`,language:"typescript",reused:!0,fingerprint:Ke(o.fingerprint),outputBytes:Xe(Bt(n.outputDb,i)),durationMs:0});return r}function Ke(e){return wp("sha256").update(Z(e)).digest("hex").slice(0,16)}function Xe(e){try{return Tp(e).size}catch{return null}}function qp(e,t){let n={};for(let r of t){let i=e.get(r);i&&(n[r]=i.fingerprint)}return n}async function Hp(e,t,n,r,i,o,a,s){$(e.opts.signal,"Reindex cancelled by its owner.");let c=!s||s.completeScipUpdated,d=!1;c&&(ms(e.paths.outputDb,n,e.writeTelemetry),d=hs(n,e.tempPaths.tempOutputScip,e.onStatus));let u=await ef({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,incrementalTypeScript:s,completeScipAvailable:c,completeScipSanitized:d,materializeFullFallback:async()=>{if($(e.opts.signal,"Reindex cancelled by its owner."),!s||s.completeScipUpdated)return d;e.onStatus("Materializing the deferred whole TypeScript SCIP companion for full conversion..."),Da({cacheDir:S(e.paths.outputDb),generationIdentity:s.nextFragmentGeneration,baseShardPath:s.scipPath,candidateShardPath:s.candidateScipPath});let k=n.map(T=>T.language==="typescript"?{language:T.language,scipPath:s.candidateScipPath}:T);return ms(e.paths.outputDb,k,e.writeTelemetry),d=hs(k,e.tempPaths.tempOutputScip,e.onStatus),d}});$(e.opts.signal,"Reindex cancelled by its owner."),U(oe(),{projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),Pr(e.projectRoot,e.tempPaths.tempOutputDb,e.tempPaths.tempOutputScip,e.onStatus,!1,s?.affectedFiles);let l=vn(e.tempPaths.tempOutputDb);if(l.added.length>0&&e.onStatus(`Added SQLite query indexes: ${l.added.join(", ")}`),l.removed.length>0&&e.onStatus(`Removed redundant SQLite indexes: ${l.removed.join(", ")}`),u.mode==="incremental"&&s){let k=null,T=null;try{k=new J({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,indexPath:e.tempPaths.tempOutputScip}),T=new J({projectRoot:e.projectRoot,dbPath:e.paths.outputDb,indexPath:e.paths.outputScip});let v=oi(k,e.fingerprint,s.referenceFragmentsByFile,T);e.onStatus(`Cached exact TypeScript reference fragments for ${v} affected document(s).`)}catch(v){e.onStatus(`Exact TypeScript reference fragment prefill unavailable: ${v instanceof Error?v.message:String(v)}.`)}finally{k?.close(),T?.close()}}let p=vr(e.paths.metaPath),g=u.mode==="incremental"&&s?nf(s,u.changedDocumentPaths):hn({projectRoot:e.projectRoot,previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.tempPaths.tempOutputDb,candidateIndexPath:e.tempPaths.tempOutputScip,previousSnapshot:p,currentSnapshot:e.fingerprint,refreshResult:"rebuilt"}),f=Ut({trigger:e.opts.trigger,result:"rebuilt",start:e.start,monotonicStart:e.monotonicStart,languages:n.map(k=>k.language),skipped:[...r]}),h=u.mode==="incremental"&&u.scipCompanion==="deferred",b={...o};h&&delete b.typescript;let{metadata:y,pruneProjects:x}=vs({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,languageFingerprints:b,typescriptProjectShardContext:a,lastRefresh:f});y.scipCompanion=h?"deferred":"current",Es(e.paths.outputDb,x),wr(e.tempPaths.tempMetaPath,y);let P=Tt({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath,preserveOutputScip:u.mode==="incremental"&&u.scipCompanion==="deferred",publication:u.mode==="incremental"?{mode:"incremental",validation:"passed",converterDurationMs:u.converterDurationMs,affectedDocumentCount:s?.affectedFiles.length,changedDocumentCount:u.changedDocumentPaths.length,producerDurationMs:s?.timings.serviceMs,materializationDurationMs:s?.durationMs,patchDurationMs:u.patchDurationMs,scipCompanion:u.scipCompanion,...u.scipCompanion==="deferred"&&s?{typescriptOverlayGeneration:s.nextFragmentGeneration}:{}}:{mode:"full",validation:"passed",converterDurationMs:u.converterDurationMs,scipCompanion:"current",...u.fallbackReason?{fallbackReason:u.fallbackReason}:{}}});return P.achievedDurability==="file-flushed"&&e.onStatus(`Published local generation ${P.currentGeneration.slice(0,12)} (file-flushed; directory sync unsupported)`),Vo(S(e.paths.outputDb),u.mode==="incremental"&&u.scipCompanion==="deferred"?[s.nextFragmentGeneration]:[]),ko(S(e.paths.outputDb),s?.completeScipUpdated?[s.nextFragmentGeneration]:[]),Ps(e.paths.outputDb,g,e.onStatus),f}function zp(e,t,n,r,i,o){let a=vr(e.paths.metaPath),s=null;try{fe(e.writeTelemetry,pe(e.paths.outputDb,e.tempPaths.tempOutputDb))}catch(p){s=vi("reused","oracle-error",`Could not snapshot the prior database: ${p instanceof Error?p.message:String(p)}`)}U(oe(),{projectRoot:e.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),Pr(e.projectRoot,e.paths.outputDb,e.paths.outputScip,e.onStatus,!0);let c=vn(e.paths.outputDb);c.added.length>0&&e.onStatus(`Added SQLite query indexes: ${c.added.join(", ")}`),c.removed.length>0&&e.onStatus(`Removed redundant SQLite indexes: ${c.removed.join(", ")}`),s??=hn({projectRoot:e.projectRoot,previousDbPath:e.tempPaths.tempOutputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.paths.outputDb,candidateIndexPath:e.paths.outputScip,previousSnapshot:a,currentSnapshot:e.fingerprint,refreshResult:"reused"});let d=Ut({trigger:e.opts.trigger,result:"reused",start:e.start,monotonicStart:e.monotonicStart,languages:t.map(p=>p.language),skipped:[...n]}),{metadata:u,pruneProjects:l}=vs({run:e,indexedOutputs:t,skippedLanguages:n,reusedLanguages:r,languageFingerprints:i,typescriptProjectShardContext:o,lastRefresh:d});return Es(e.paths.outputDb,l),wr(e.paths.metaPath,u),zn(e.paths.outputDb,e.paths.metaPath),Ps(e.paths.outputDb,s,e.onStatus),d}function vr(e){return _r(De(e)?.fingerprint)}function Ps(e,t,n){try{Ei(e,t),t.status==="evaluated"?n(`Affected-set shadow: ${(t.evaluation.recall*100).toFixed(1)}% recall; ${t.plan.affectedFiles.length} predicted, ${t.comparison.changedFiles.length} changed.`):n(`Affected-set shadow unavailable: ${t.reason}.`)}catch(r){n(`Affected-set shadow telemetry unavailable: ${r instanceof Error?r.message:String(r)}`)}}function vs(e){let t=Jp({mode:e.run.opts.typescriptProjectMode,skippedLanguages:e.skippedLanguages,reusedLanguages:e.reusedLanguages,context:e.typescriptProjectShardContext,metaPath:e.run.paths.metaPath});return{metadata:{version:_e,status:e.skippedLanguages.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.run.fingerprint,sqliteLayoutVersion:2,languageFingerprints:e.languageFingerprints,typescriptProjectShards:t.field,requestedLanguages:e.run.languages,indexedLanguages:e.indexedOutputs.map(n=>n.language),skipped:[...e.skippedLanguages],lastRefresh:e.lastRefresh},pruneProjects:t.pruneProjects}}function Jp(e){if(e.mode!=="workspace")return{field:void 0,pruneProjects:null};if(e.skippedLanguages.some(t=>t.language==="typescript"))return{field:void 0,pruneProjects:null};if(e.reusedLanguages.includes("typescript")){let t=De(e.metaPath),n=t?.version===_e?t.typescriptProjectShards:void 0;return{field:n,pruneProjects:n?Object.keys(n):[]}}return e.context?{field:e.context.fingerprints,pruneProjects:e.context.projects}:{field:void 0,pruneProjects:[]}}function Es(e,t){let n=Os(e);if(t===null){F(()=>ke(n,{recursive:!0,force:!0}));return}let r;try{r=xs(n)}catch{return}for(let i of Yp(r,t))F(()=>ke(A(n,i),{force:!0}))}function Yp(e,t){let n=new Set(t.map(r=>`${kn(r)}.scip`));return e.filter(r=>!n.has(r))}function ms(e,t,n){for(let r of t){let i=Er(e,r.language);$t(S(i),{recursive:!0}),r.scipPath!==i&&fe(n,pe(r.scipPath,i))}}function Kp(e){let t=[],n=[],r=e.languages.map((o,a)=>({language:o,scipPath:e.languages.length>1?Qe(e.tempOutputScip,o,a):e.tempOutputScip})),i=Object.fromEntries(r.map(({language:o,scipPath:a})=>[o,a]));for(let{language:o,scipPath:a}of r){let s=Xp({...e,language:o,scipPath:a});for(let c of s)"skipped"in c?ws(n,c.skipped):t.push(c.prepared)}return{preparedRuns:t,skippedLanguages:n,languageOutputScipPaths:i}}function Xp(e){if(e.language!=="typescript"||e.typescriptProjectMode!=="workspace")return[xr({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})];let t=e.preDiscoveredTypeScriptProjects??xe(e.projectRoot,e.typescriptProjects);return t.length===0?[xr({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})]:(e.onStatus(`Indexing TypeScript workspace as ${t.length} project shard(s).`),t.map((n,r)=>xr({...e,id:`typescript:${n}`,label:`typescript (${n})`,scipPath:Qe(e.tempOutputScip,"typescript-project",r),outputScipPath:e.scipPath,pnpmWorkspaces:!1,projectPath:n})))}function xr(e){let t=mt(e.language),n=Ne(t),r=rn(t,e.projectRoot),i=e.trustProjectTools&&r?Qr(t,e.projectRoot):null,o=Pe(t);if(!i&&!o&&r){let u=`${n} is available only as repository-local code at ${r}. Review that exact tool and rerun with --trust-project-tools.`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}if(!i&&!o&&!nn(t)){if(e.skipAutoInstall){let u=`${n} not found on PATH. To install the reviewed version, run: codebaseiq reindex --install-missing${t.installUrl?` (manual source: ${t.installUrl})`:""}`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!gr(t,e.onStatus)){let u=`${n} could not be auto-installed. ${t.installUrl?`Install manually from ${t.installUrl}`:`Install ${n} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}}let a=i?.canonicalPath??Pe(t);if(!a){let u=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}let{binary:s,args:c}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:a,projectPath:e.projectPath,configPath:e.language==="clojure"?e.clojureConfigPath:void 0}),d=Ai({language:e.language,projectPath:e.projectPath,pnpmWorkspaces:e.pnpmWorkspaces});if(i&&!i.executable){let u=`${i.relativePath} is not executable; refusing project-local indexer.`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}return i&&e.onStatus(`Trusted project-local ${e.language} indexer ${i.relativePath} (${i.sha256.slice(0,12)}\u2026, ${i.canonicalPath}).`),{prepared:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,config:t,resolvedBinary:a,binary:s,args:c,env:on(t,e.env,a),...d===void 0?{}:{temporaryRootConfigContent:d},...i?{trustedProjectTool:i}:{}}}}function Qp(e,t){let n=new Map;for(let i of e)if(i.skipped)ws(t,i.skipped);else{let o=`${i.language}\0${i.outputScipPath}`,a=n.get(o)??{language:i.language,outputScipPath:i.outputScipPath,scipPaths:[]};a.scipPaths.push(i.scipPath),n.set(o,a)}let r=[];for(let i of n.values())if(i.scipPaths.length>1)xn(i.scipPaths,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath});else{let o=i.scipPaths[0];o!==i.outputScipPath&&Is(o,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath})}return{indexedOutputs:r}}function ws(e,t){let n=e.find(r=>r.language===t.language);if(!n){e.push(t);return}n.reason.includes(t.reason)||(n.reason=`${n.reason}; ${t.reason}`)}function Zp(e,t,n,r,i){if(e.length===0){let o=t.map(a=>` - ${a.language}: ${a.reason}`).join(`
|
|
331
|
+
`).get();return{version:3,tsconfig:n,files:dt(t),db:r}}function hp(e){let t=ts();return{projectRoot:e.projectRoot,context:Ha(e.projectRoot,e.configPath),symbolLookup:za(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function yp(e){let t=[],n=Te(),r=e.tasks??e.vueFiles.map(i=>({fileName:i,startOffset:0,endOffset:Number.POSITIVE_INFINITY,countFileSkip:!0}));for(let i of r){let o=Sp(e,i);t.push(...o.occurrences),Mt(n,o)}return{occurrences:t,...n}}function Sp(e,t){let n=e.sourceReader.get(t.fileName);if(!n)return rs(e.projectRoot,t,"missing-source-file");let r=e.context.language.scripts.get(t.fileName),i=r?.generated?.languagePlugin.typescript?.getServiceScript(r.generated.root)?.code;if(!r||!i)return rs(e.projectRoot,t,"missing-service-script");let o=e.context.language.maps.get(i,r),a=Q(e.projectRoot,t.fileName),s=[...Qa(n.text)],c={tokens:s.filter(d=>d.start>=t.startOffset&&d.start<t.endOffset),tokenByStart:new Map(s.map(d=>[d.start,d])),tokenTextCounts:wp(s),processedStarts:new Set};return bp({...e,fileName:t.fileName,sourceInfo:n,sourceFile:a,map:o,tokenContext:c})}function bp(e){let t=[],n=Te();for(let r of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(r.start)||Rp(e.sourceInfo.text,r.start))continue;let i=Za(e.map,r.start);if(i===null)continue;let a=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(u=>!es(e.projectRoot,u.fileName));if(!a){br(n,e.sourceReader,e.sourceInfo,e.sourceFile,r,"no-definition");continue}let s=Q(e.projectRoot,a.fileName),c=xp(e.sourceFile,r.text,s);if(c){br(n,e.sourceReader,e.sourceInfo,e.sourceFile,r,c);continue}let d=Ya(a,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(d===null){br(n,e.sourceReader,e.sourceInfo,e.sourceFile,r,"unindexed-definition");continue}fs(t,e.sourceReader,e.sourceInfo,e.sourceFile,r,s,d),e.tokenContext.processedStarts.add(r.start),Ep(t,e,r,i,s,d)}return{occurrences:t,...n}}function Rp(e,t){let n=e.lastIndexOf(`
|
|
332
|
+
`,t-1)+1,r=e.slice(n,t);return/\bfrom\s+['"][^'"]*$/.test(r)||/\bimport\s*\(\s*['"][^'"]*$/.test(r)}function xp(e,t,n){return n===e?"same-file-definition":n.endsWith(".vue")&&t!==n.split("/").at(-1)?.replace(/\.vue$/,"")?"unindexed-definition":null}function rs(e,t,n){let r=Te();return t.countFileSkip&&(r.skippedReferences=1,r.skippedReferenceReasons[n]=1,r.skippedReferenceSamples.push({sourceFile:Q(e,t.fileName),sourceLine:0,sourceStartChar:0,sourceEndChar:0,token:"",reason:n})),{occurrences:[],...r}}function br(e,t,n,r,i,o){if(e.skippedReferences++,e.skippedReferenceReasons[o]++,e.skippedReferenceSamples.filter(s=>s.reason===o&&s.sourceFile===r).length>=2)return;let a=t.positionAt(n,i.start);e.skippedReferenceSamples.push({sourceFile:r,sourceLine:a.line,sourceStartChar:a.character,sourceEndChar:a.character+i.text.length,token:i.text,reason:o})}function Rr(e,t){let n=new Map;for(let o of e){let a=n.get(o.sourceFile)??[];a.push(o),n.set(o.sourceFile,a)}let r=[...n.keys()].sort(),i=[];for(let o=0;i.length<t;o++){let a=!1;for(let s of r){let c=n.get(s)?.[o];if(c&&(i.push(c),a=!0,i.length===t))break}if(!a)break}return i}function Ip(e,t){let n=Rr(e.filter(o=>o.sourceFile!==o.definitionFile),Math.ceil(t/2)),r=new Set(n.map(o=>`${o.sourceFile}:${o.sourceLine}:${o.sourceStartChar}:${o.sourceEndChar}:${o.symbolId}`)),i=Rr(e.filter(o=>!r.has(`${o.sourceFile}:${o.sourceLine}:${o.sourceStartChar}:${o.sourceEndChar}:${o.symbolId}`)),t-n.length);return[...n,...i]}function Pp(e,t){let n=[...new Set(e.map(i=>i.reason))].sort(),r=[];for(let[i,o]of n.entries()){let a=n.length-i,s=Math.ceil((t-r.length)/a);r.push(...Rr(e.filter(c=>c.reason===o),s))}return r.slice(0,t)}function vp(e,t,n){let r=e.prepare("SELECT symbol FROM global_symbols WHERE id = ?");return Ip(t,n).map(({symbolId:i,...o})=>({...o,definitionSymbol:r.get(i)?.symbol??`symbol-id:${i}`}))}function Ep(e,t,n,r,i,o){if(!((t.tokenContext.tokenTextCounts.get(n.text)??0)<=1))for(let a of Tp(t.context.languageService,t.fileName,r+1,t.map,n,t.tokenContext.tokenByStart)){if(t.tokenContext.processedStarts.has(a))continue;let s=t.tokenContext.tokenByStart.get(a);s&&(fs(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i,o),t.tokenContext.processedStarts.add(a))}}function fs(e,t,n,r,i,o,a){let s=t.positionAt(n,i.start);e.push({sourceFile:r,sourceLine:s.line,sourceStartChar:s.character,sourceEndChar:s.character+i.text.length,sourceToken:i.text,definitionFile:o,symbolId:a})}function wp(e){let t=new Map;for(let n of e)t.set(n.text,(t.get(n.text)??0)+1);return t}function Tp(e,t,n,r,i,o){let a=e.getDocumentHighlights?.(t,n,[t])??[],s=[];for(let c of a)if(c.fileName===t)for(let d of c.highlightSpans){let u=kp(r,d.textSpan.start,o,i.text);u!==null&&s.push(u)}return s}function kp(e,t,n,r){let i=n.get(t);if(i?.text===r)return i.start;let o=Sr(e,t);if(o===null)return null;let a=n.get(o);return a?.text===r?a.start:null}async function SS(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log}=e,i=e.skipAutoInstall===!0||e.installMissing!==!0,o=Cp(e),a=Date.now(),s=I();$t(S(o.outputScip),{recursive:!0}),$t(S(o.outputDb),{recursive:!0});let c=e.languages??ln(t);if(c.length===0)throw new Error("No supported languages detected in this project. Looked for: tsconfig.json, Cargo.toml, go.mod, pyproject.toml, etc.");r(`Detected languages: ${c.join(", ")}`);let d=ct("reindex.fingerprint",()=>Zt(t,c,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath}),{languages:c.length}),u,l;if(e.skipIfUnchanged!==!1&&!da(t,o.outputDb)&&gs(o.outputScip)===gs(A(S(o.outputDb),"index.scip"))){let y=Ne(t);if(u=y?.clean?Ft(y,d):void 0,y&&!y.clean&&!Ap(o)){let x=ua(y,c,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath});if(x)try{_t({snapshot:x.snapshot,manifest:x.manifest,targetCacheDir:S(o.outputDb),targetProjectRoot:t,persistLease:!1}),fa(x.snapshot,S(o.outputDb)),r(`Forked shared baseline ${x.snapshot.generationId.slice(0,12)} for dirty worktree reindex`)}catch(P){r(`Shared baseline fork failed; continuing locally: ${de(P)}`)}}else if(u){let x=K(u);if(x){if(!Op(o,d))try{_t({snapshot:u,manifest:x,targetCacheDir:S(o.outputDb),targetProjectRoot:t}),r(`Attached shared generation ${u.generationId.slice(0,12)}`)}catch(P){r(`Shared generation attach failed; continuing locally: ${de(P)}`)}}else{let P=await pa(u);if(P.kind==="owner")l=P.release;else if(P.kind==="generation-ready"){let k=K(u);if(k)try{_t({snapshot:u,manifest:k,targetCacheDir:S(o.outputDb),targetProjectRoot:t,action:"waited"}),r(`Attached shared generation ${u.generationId.slice(0,12)} after waiting`)}catch(T){r(`Shared generation attach failed after waiting; continuing locally: ${de(T)}`)}}else r("Shared generation build lock timed out; continuing with an isolated local reindex")}}}let f=ue(A(S(o.outputDb),"cache-lifecycle.lock"),{waitMs:3e4});if(!f)throw l?.(),new Error(`Could not acquire codebaseiq cache lifecycle lock for ${S(o.outputDb)}.`);let g;try{g=await je("reindex.lock",()=>sf(A(S(o.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),{languages:c.length})}catch(y){throw f.release(),l?.(),y}let h=null,b=bi();try{Hn(o.outputDb,o.outputScip,o.metaPath);let y=Mp(S(o.outputDb));y.removed>0&&r(`Removed ${y.removed} abandoned reindex workspace(s)`);for(let Se of y.errors)r(`Could not remove abandoned reindex workspace: ${Se}`);let x=null,P=ct("reindex.reuse-check",()=>(x=Lp({opts:e,paths:o,languages:c,fingerprint:d,start:a,monotonicStart:s,onStatus:r}),x),()=>({languages:c.length,reused:x!==null}));if(P){ms({snapshot:u,paths:o,projectRoot:t,fingerprint:d,onStatus:r});let Se=pn(o.outputDb,P);return Se.state==="failed"&&r(`Warning: reindex succeeded, but activity telemetry was not recorded: ${Se.reason}`),Xt(t,S(o.outputDb)),P}let k=Np(o);h=k.runDir;let T,v=await je("reindex.fresh",async()=>(T=await Gp({opts:e,languages:c,projectRoot:t,paths:o,tempPaths:k,fingerprint:d,start:a,monotonicStart:s,maxHeapMb:n,skipAutoInstall:i,onStatus:r,writeTelemetry:b}),T),()=>({languages:c.length,reused:T?.reused,skipped:T?.skipped.length}));ms({snapshot:u,paths:o,projectRoot:t,fingerprint:d,onStatus:r});let ye=pn(o.outputDb,v);return ye.state==="failed"&&r(`Warning: reindex succeeded, but activity telemetry was not recorded: ${ye.reason}`),Xt(t,S(o.outputDb)),v}catch(y){let x=Ut({trigger:e.trigger,result:"failed",start:a,monotonicStart:s,error:y instanceof Error?y.message:String(y)});Ls(o.metaPath,x);let P=gi(o.outputDb,x);throw P.state==="failed"&&r(`Warning: failed reindex activity telemetry was not recorded: ${P.reason}`),y}finally{if(h){let y=h;try{F(()=>ke(y,{recursive:!0,force:!0}))}catch(x){r(`Warning: temporary reindex workspace was left behind: ${de(x)}`)}}g(),f.release(),l?.()}}function ms(e){if(e.snapshot)try{let t=Ne(e.projectRoot),n=t?Ft(t,e.fingerprint):void 0;if(!n||n.generationId!==e.snapshot.generationId){e.onStatus("Skipped shared generation publication because the worktree changed during indexing");return}let r=la({snapshot:e.snapshot,sourceCacheDir:S(e.paths.outputDb),sourceProjectRoot:e.projectRoot,sourceStillValid:()=>{let i=Ne(e.projectRoot);return(i?Ft(i,e.fingerprint):void 0)?.generationId===e.snapshot?.generationId}});nr(e.snapshot,S(e.paths.outputDb),"built"),e.onStatus(r.kind==="published"?`Published shared generation ${e.snapshot.generationId.slice(0,12)} (${r.achievedDurability})`:`Shared generation ${e.snapshot.generationId.slice(0,12)} was already available (${r.achievedDurability})`)}catch(t){e.onStatus(`Shared generation publication failed; local index remains valid: ${de(t)}`)}}function Op(e,t){if(!N(e.outputScip)||!N(e.outputDb)||!Cs(e.metaPath,t))return!1;let n=H(e.outputDb,e.metaPath);return n.state!=="invalid"&&n.state!=="drifted"}function Ap(e){if(!N(e.outputScip)||!N(e.outputDb)||!De(e.metaPath))return!1;let t=H(e.outputDb,e.metaPath);return t.state!=="invalid"&&t.state!=="drifted"}function de(e){return e instanceof Error?e.message:String(e)}function Pr(e,t,n,r,i,o){try{U(xi({indexPath:n,reuseExisting:i,affectedFiles:o}),{projectRoot:e,dbPath:t,onStatus:r})}catch(a){r(`Runtime-boundary extraction unavailable: ${a instanceof Error?a.message:String(a)}.`)}}function Cp(e){let t=e.outputScip??A(e.projectRoot,"index.scip"),n=e.outputDb??A(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:A(S(n),"meta.json")}}function Lp(e){let t=H(e.paths.outputDb,e.paths.metaPath);if(e.opts.skipIfUnchanged===!1||!N(e.paths.outputScip)||!N(e.paths.outputDb)||!Cs(e.paths.metaPath,e.fingerprint)||t.state==="invalid"||t.state==="drifted")return null;U(oe(),{projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),Pr(e.opts.projectRoot,e.paths.outputDb,e.paths.outputScip,e.onStatus,!0),H(e.paths.outputDb,e.paths.metaPath).state==="drifted"&&(zn(e.paths.outputDb,e.paths.metaPath),e.onStatus("Published refreshed SQLite generation after post-index augmentation"));let n=I()-e.monotonicStart,r=Ut({trigger:e.opts.trigger,result:"reused",start:e.start,monotonicStart:e.monotonicStart,languages:e.languages,skipped:[]});return Ls(e.paths.metaPath,r),e.onStatus(`Index unchanged; reused existing SQLite index in ${(n/1e3).toFixed(1)}s`),{languages:e.languages,indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:n,reused:!0,skipped:[],lastRefresh:r,shards:jp(e.paths,e.opts.projectRoot,e.languages,e.opts)}}function jp(e,t,n,r){let i=Os(t,n,r);return n.map(o=>({id:o,language:o,reused:!0,fingerprint:Xe(i[o]),outputBytes:Qe(Er(e.outputDb,o)),durationMs:0}))}function Np(e){let t=Fe(A(S(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:A(t,Gt(e.outputScip)),tempOutputDb:A(t,Gt(e.outputDb)),tempMetaPath:A(t,Gt(e.metaPath))}}function Mp(e){let t=[],n;try{n=Is(e,{withFileTypes:!0})}catch(i){return{removed:0,errors:[de(i)]}}let r=0;for(let i of n)if(!(!i.name.startsWith("reindex-")||!i.isDirectory()))try{ke(A(e,i.name),{recursive:!0,force:!0}),r+=1}catch(o){t.push(`${i.name}: ${de(o)}`)}return{removed:r,errors:t}}async function Gp(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},n,r=await je("reindex.language-indexers",async()=>(n=await Vp(e,t),n),()=>({languages:e.languages.length,indexed:n?.indexedOutputs.length,reused:n?.reusedLanguages.length,skipped:n?.skippedLanguages.length})),{indexedOutputs:i,skippedLanguages:o,reusedLanguages:a,languageFingerprints:s,shards:c,typescriptProjectShardContext:d,incrementalTypeScript:u}=r;if(a.length>0&&e.onStatus(`Reused ${a.length} cached language shard(s): ${a.join(", ")}`),$p({run:e,indexedOutputs:i,skippedLanguages:o,reusedLanguages:a})){let f=ct("reindex.publish",()=>Kp(e,i,o,a,s,d),{mode:"metadata-only",languages:i.length,reused:a.length}),g=f.durationMs;return e.onStatus(`All language shards unchanged; reused existing SQLite index in ${(g/1e3).toFixed(1)}s`),{languages:i.map(h=>h.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:g,reused:!0,skipped:o,lastRefresh:f,shards:c,writeTelemetry:e.writeTelemetry}}let l=await je("reindex.publish",()=>Yp(e,t,i,o,a,s,d,u),{mode:u?"incremental-or-fallback":"full",languages:i.length,reused:a.length,skipped:o.length}),p=l.durationMs;return e.onStatus(`Done in ${(p/1e3).toFixed(1)}s`),{languages:i.map(f=>f.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:p,reused:!1,skipped:o,lastRefresh:l,shards:c,writeTelemetry:e.writeTelemetry}}function $p(e){if(e.run.opts.skipIfUnchanged===!1||e.skippedLanguages.length>0||!N(e.run.paths.outputScip)||!N(e.run.paths.outputDb))return!1;let t=H(e.run.paths.outputDb,e.run.paths.metaPath);if(t.state==="invalid"||t.state==="drifted")return!1;let n=new Set(e.reusedLanguages),r=new Set(e.indexedOutputs.map(i=>i.language));return e.run.languages.length>0&&r.size===e.run.languages.length&&e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(i=>n.has(i)&&r.has(i))}async function Vp(e,t){let n=Hp({paths:e.paths,projectRoot:e.projectRoot,languages:e.languages,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,clojureConfigPath:e.opts.clojureConfigPath}),r=[],i=new Set;for(let[M,Tr]of n)Tr.reused&&(r.push({language:M,scipPath:Tr.scipPath}),i.add(M));for(let M of i)e.onStatus(`Reusing cached ${M} SCIP shard (language inputs unchanged).`);let o=n.get("typescript"),a=H(e.paths.outputDb,e.paths.metaPath),s=De(e.paths.metaPath),c=(a.state==="legacy"||a.state==="current")&&s!==null&&zt(s),d=s?.scipCompanion!=="deferred"&&(a.state!=="current"||a.generation.publication?.scipCompanion!=="deferred"),u=o&&!o.reused&&c?Da({projectRoot:e.projectRoot,cacheDir:S(e.paths.outputDb),previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,previousShardPath:o.scipPath,candidateShardPath:Ze(e.tempPaths.tempOutputScip,"typescript-incremental",0),candidateAffectedScipPath:Ze(e.tempPaths.tempOutputScip,"typescript-affected",0),baseShardCurrent:d,previousSnapshot:vr(e.paths.metaPath),currentSnapshot:e.fingerprint,projectMode:e.opts.typescriptProjectMode,onStatus:e.onStatus}):null,l=new Set(u?["typescript"]:[]),p=u?void 0:Bp(e,n),{preparedRuns:f,skippedLanguages:g,languageOutputScipPaths:h}=Zp({languages:e.languages.filter(M=>!i.has(M)&&!l.has(M)),tempOutputScip:e.tempPaths.tempOutputScip,projectRoot:e.projectRoot,env:t,skipAutoInstall:e.skipAutoInstall,trustProjectTools:e.opts.trustProjectTools===!0,pnpmWorkspaces:e.opts.pnpmWorkspaces,typescriptProjectMode:e.opts.typescriptProjectMode,typescriptProjects:e.opts.typescriptProjects,preDiscoveredTypeScriptProjects:p?.allProjects,clojureConfigPath:e.opts.clojureConfigPath,onStatus:e.onStatus}),b=p?f.filter(M=>M.language!=="typescript"||p.missedProjectIds.has(M.id)):f,y=await Aa(b,e.projectRoot,e.onStatus,e.opts.indexerConcurrency,e.opts.signal),x=[];if(p){Wp(e.paths.outputDb,y,e.writeTelemetry);let M=h.typescript??e.tempPaths.tempOutputScip;x=qp({outputDb:e.paths.outputDb,tempOutputScip:e.tempPaths.tempOutputScip,outputScipPath:M,reusedProjects:p.reusedProjects,writeTelemetry:e.writeTelemetry})}let P=[...y,...x],{indexedOutputs:k}=tf(P,g),T=u?[{language:"typescript",scipPath:u.scipPath}]:[],v=[...r,...T,...k];nf(v,g,e.languages,e.opts.allowPartial,e.onStatus);let ye=u?[{id:"typescript",language:"typescript",label:"typescript (incremental documents)",scipPath:u.scipPath,outputScipPath:u.scipPath,durationMs:u.durationMs,command:"watch-service:typescript-index",outputBytes:Qe(u.scipPath)??void 0}]:[],Se=zp(n,[...y,...ye],p?{outputDb:e.paths.outputDb,classification:p.classification}:void 0);return{indexedOutputs:v,skippedLanguages:g,reusedLanguages:[...i],languageFingerprints:Jp(n,e.languages),shards:Se,typescriptProjectShardContext:p?{projects:p.allProjects,fingerprints:p.fingerprints}:void 0,incrementalTypeScript:u??void 0}}function Bp(e,t){let n=t.get("typescript");if(!n||n.reused||e.opts.typescriptProjectMode!=="workspace")return;let r=xe(e.projectRoot,e.opts.typescriptProjects);if(r.length===0)return;let i=oo(e.projectRoot,r),o=no(n.fingerprint.files,r),a=ro(r,i),s=io(r,o,a),c=De(e.paths.metaPath),u=Up(c,s,g=>N(Bt(e.paths.outputDb,g))),l=[...u.entries()].filter(([,g])=>g.reused).map(([g])=>g),p=new Set(l),f=new Set(r.filter(g=>!p.has(g)).map(g=>`typescript:${g}`));return{allProjects:r,fingerprints:s,classification:u,reusedProjects:l,missedProjectIds:f}}function Up(e,t,n){let r=new Map;for(let i of Object.keys(t)){let o=t[i];if(!e){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:o});continue}let a=e.version===_e&&Ht(e).typescriptProjectShardReuse?e.typescriptProjectShards?.[i]:void 0;if(!a){r.set(i,{reused:!1,reason:"no cached fingerprint for this project",fingerprint:o});continue}if(!n(i)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:o});continue}if(Z(a)!==Z(o)){r.set(i,{reused:!1,reason:"project inputs changed since last index",fingerprint:o});continue}r.set(i,{reused:!0,fingerprint:o})}return r}function Wp(e,t,n){for(let r of t){if(r.skipped||!r.id.startsWith("typescript:"))continue;let i=r.id.slice(11),o=Bt(e,i);$t(S(o),{recursive:!0}),fe(n,pe(r.scipPath,o))}}function qp(e){return e.reusedProjects.map((t,n)=>{let r=Bt(e.outputDb,t),i=Ze(e.tempOutputScip,"typescript-project-cached",n);return fe(e.writeTelemetry,pe(r,i)),{id:`typescript:${t}`,language:"typescript",label:`typescript (${t})`,scipPath:i,outputScipPath:e.outputScipPath,durationMs:0,command:"cached",outputBytes:Qe(i)??void 0}})}function Hp(e){let t=De(e.paths.metaPath),n=Os(e.projectRoot,e.languages,e),r=new Map;for(let i of e.languages){let o=Er(e.paths.outputDb,i),a=n[i];if(!t){r.set(i,{reused:!1,reason:"no reindex metadata found",fingerprint:a,scipPath:o});continue}if(t.version!==_e){r.set(i,{reused:!1,reason:`metadata version ${String(t.version??"unknown")} predates per-language shard caching`,fingerprint:a,scipPath:o});continue}if(i==="typescript"&&t.scipCompanion==="deferred"){r.set(i,{reused:!1,reason:"whole TypeScript SCIP companion is deferred behind changed-document overlays",fingerprint:a,scipPath:o});continue}if(!Ht(t).languageShardReuse||!t.languageFingerprints){r.set(i,{reused:!1,reason:"no per-language fingerprints recorded in metadata",fingerprint:a,scipPath:o});continue}let s=t.languageFingerprints[i];if(!s){r.set(i,{reused:!1,reason:"no cached fingerprint for this language",fingerprint:a,scipPath:o});continue}if(!N(o)){r.set(i,{reused:!1,reason:"cached shard file missing on disk",fingerprint:a,scipPath:o});continue}if(Z(s)!==Z(a)){r.set(i,{reused:!1,reason:"language inputs changed since last index",fingerprint:a,scipPath:o});continue}r.set(i,{reused:!0,fingerprint:a,scipPath:o})}return r}function zp(e,t,n){let r=[];for(let[i,o]of e)o.reused&&r.push({id:i,language:i,reused:!0,fingerprint:Xe(o.fingerprint),outputBytes:Qe(o.scipPath),durationMs:0});for(let i of t){let o=e.get(i.language),a=n&&i.id.startsWith("typescript:")?i.id.slice(11):null,s=a?n.classification.get(a):void 0;r.push({id:i.id,language:i.language,reused:!1,missReason:s?.reason??o?.reason??i.skipped?.reason,fingerprint:s?Xe(s.fingerprint):o?Xe(o.fingerprint):"unknown",outputBytes:i.outputBytes??null,durationMs:i.durationMs,command:i.command})}if(n)for(let[i,o]of n.classification)o.reused&&r.push({id:`typescript:${i}`,language:"typescript",reused:!0,fingerprint:Xe(o.fingerprint),outputBytes:Qe(Bt(n.outputDb,i)),durationMs:0});return r}function Xe(e){return Dp("sha256").update(Z(e)).digest("hex").slice(0,16)}function Qe(e){try{return Fp(e).size}catch{return null}}function Jp(e,t){let n={};for(let r of t){let i=e.get(r);i&&(n[r]=i.fingerprint)}return n}async function Yp(e,t,n,r,i,o,a,s){$(e.opts.signal,"Reindex cancelled by its owner.");let c=!s||s.completeScipUpdated,d=!1;c&&(hs(e.paths.outputDb,n,e.writeTelemetry),d=ys(n,e.tempPaths.tempOutputScip,e.onStatus));let u=await rf({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,incrementalTypeScript:s,completeScipAvailable:c,completeScipSanitized:d,materializeFullFallback:async()=>{if($(e.opts.signal,"Reindex cancelled by its owner."),!s||s.completeScipUpdated)return d;e.onStatus("Materializing the deferred whole TypeScript SCIP companion for full conversion..."),Fa({cacheDir:S(e.paths.outputDb),generationIdentity:s.nextFragmentGeneration,baseShardPath:s.scipPath,candidateShardPath:s.candidateScipPath});let k=n.map(T=>T.language==="typescript"?{language:T.language,scipPath:s.candidateScipPath}:T);return hs(e.paths.outputDb,k,e.writeTelemetry),d=ys(k,e.tempPaths.tempOutputScip,e.onStatus),d}});$(e.opts.signal,"Reindex cancelled by its owner."),U(oe(),{projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),Pr(e.projectRoot,e.tempPaths.tempOutputDb,e.tempPaths.tempOutputScip,e.onStatus,!1,s?.affectedFiles);let l=vn(e.tempPaths.tempOutputDb);if(l.added.length>0&&e.onStatus(`Added SQLite query indexes: ${l.added.join(", ")}`),l.removed.length>0&&e.onStatus(`Removed redundant SQLite indexes: ${l.removed.join(", ")}`),u.mode==="incremental"&&s){let k=null,T=null;try{k=new J({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,indexPath:e.tempPaths.tempOutputScip}),T=new J({projectRoot:e.projectRoot,dbPath:e.paths.outputDb,indexPath:e.paths.outputScip});let v=ai(k,e.fingerprint,s.referenceFragmentsByFile,T);e.onStatus(`Cached exact TypeScript reference fragments for ${v} affected document(s).`)}catch(v){e.onStatus(`Exact TypeScript reference fragment prefill unavailable: ${v instanceof Error?v.message:String(v)}.`)}finally{k?.close(),T?.close()}}let p=vr(e.paths.metaPath),f=u.mode==="incremental"&&s?af(s,u.changedDocumentPaths):hn({projectRoot:e.projectRoot,previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.tempPaths.tempOutputDb,candidateIndexPath:e.tempPaths.tempOutputScip,previousSnapshot:p,currentSnapshot:e.fingerprint,refreshResult:"rebuilt"}),g=Ut({trigger:e.opts.trigger,result:"rebuilt",start:e.start,monotonicStart:e.monotonicStart,languages:n.map(k=>k.language),skipped:[...r]}),h=u.mode==="incremental"&&u.scipCompanion==="deferred",b={...o};h&&delete b.typescript;let{metadata:y,pruneProjects:x}=Es({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:i,languageFingerprints:b,typescriptProjectShardContext:a,lastRefresh:g});y.scipCompanion=h?"deferred":"current",ws(e.paths.outputDb,x),wr(e.tempPaths.tempMetaPath,y);let P=Tt({tempOutputScip:e.tempPaths.tempOutputScip,tempOutputDb:e.tempPaths.tempOutputDb,tempMetaPath:e.tempPaths.tempMetaPath,outputScip:e.paths.outputScip,outputDb:e.paths.outputDb,metaPath:e.paths.metaPath,preserveOutputScip:u.mode==="incremental"&&u.scipCompanion==="deferred",publication:u.mode==="incremental"?{mode:"incremental",validation:"passed",converterDurationMs:u.converterDurationMs,affectedDocumentCount:s?.affectedFiles.length,changedDocumentCount:u.changedDocumentPaths.length,producerDurationMs:s?.timings.serviceMs,materializationDurationMs:s?.durationMs,patchDurationMs:u.patchDurationMs,scipCompanion:u.scipCompanion,...u.scipCompanion==="deferred"&&s?{typescriptOverlayGeneration:s.nextFragmentGeneration}:{}}:{mode:"full",validation:"passed",converterDurationMs:u.converterDurationMs,scipCompanion:"current",...u.fallbackReason?{fallbackReason:u.fallbackReason}:{}}});return P.achievedDurability==="file-flushed"&&e.onStatus(`Published local generation ${P.currentGeneration.slice(0,12)} (file-flushed; directory sync unsupported)`),Bo(S(e.paths.outputDb),u.mode==="incremental"&&u.scipCompanion==="deferred"?[s.nextFragmentGeneration]:[]),Do(S(e.paths.outputDb),s?.completeScipUpdated?[s.nextFragmentGeneration]:[]),vs(e.paths.outputDb,f,e.onStatus),g}function Kp(e,t,n,r,i,o){let a=vr(e.paths.metaPath),s=null;try{fe(e.writeTelemetry,pe(e.paths.outputDb,e.tempPaths.tempOutputDb))}catch(p){s=Ei("reused","oracle-error",`Could not snapshot the prior database: ${p instanceof Error?p.message:String(p)}`)}U(oe(),{projectRoot:e.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),Pr(e.projectRoot,e.paths.outputDb,e.paths.outputScip,e.onStatus,!0);let c=vn(e.paths.outputDb);c.added.length>0&&e.onStatus(`Added SQLite query indexes: ${c.added.join(", ")}`),c.removed.length>0&&e.onStatus(`Removed redundant SQLite indexes: ${c.removed.join(", ")}`),s??=hn({projectRoot:e.projectRoot,previousDbPath:e.tempPaths.tempOutputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.paths.outputDb,candidateIndexPath:e.paths.outputScip,previousSnapshot:a,currentSnapshot:e.fingerprint,refreshResult:"reused"});let d=Ut({trigger:e.opts.trigger,result:"reused",start:e.start,monotonicStart:e.monotonicStart,languages:t.map(p=>p.language),skipped:[...n]}),{metadata:u,pruneProjects:l}=Es({run:e,indexedOutputs:t,skippedLanguages:n,reusedLanguages:r,languageFingerprints:i,typescriptProjectShardContext:o,lastRefresh:d});return ws(e.paths.outputDb,l),wr(e.paths.metaPath,u),zn(e.paths.outputDb,e.paths.metaPath),vs(e.paths.outputDb,s,e.onStatus),d}function vr(e){return _r(De(e)?.fingerprint)}function vs(e,t,n){try{wi(e,t),t.status==="evaluated"?n(`Affected-set shadow: ${(t.evaluation.recall*100).toFixed(1)}% recall; ${t.plan.affectedFiles.length} predicted, ${t.comparison.changedFiles.length} changed.`):n(`Affected-set shadow unavailable: ${t.reason}.`)}catch(r){n(`Affected-set shadow telemetry unavailable: ${r instanceof Error?r.message:String(r)}`)}}function Es(e){let t=Xp({mode:e.run.opts.typescriptProjectMode,skippedLanguages:e.skippedLanguages,reusedLanguages:e.reusedLanguages,context:e.typescriptProjectShardContext,metaPath:e.run.paths.metaPath});return{metadata:{version:_e,status:e.skippedLanguages.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.run.fingerprint,sqliteLayoutVersion:2,languageFingerprints:e.languageFingerprints,typescriptProjectShards:t.field,requestedLanguages:e.run.languages,indexedLanguages:e.indexedOutputs.map(n=>n.language),skipped:[...e.skippedLanguages],lastRefresh:e.lastRefresh},pruneProjects:t.pruneProjects}}function Xp(e){if(e.mode!=="workspace")return{field:void 0,pruneProjects:null};if(e.skippedLanguages.some(t=>t.language==="typescript"))return{field:void 0,pruneProjects:null};if(e.reusedLanguages.includes("typescript")){let t=De(e.metaPath),n=t?.version===_e?t.typescriptProjectShards:void 0;return{field:n,pruneProjects:n?Object.keys(n):[]}}return e.context?{field:e.context.fingerprints,pruneProjects:e.context.projects}:{field:void 0,pruneProjects:[]}}function ws(e,t){let n=As(e);if(t===null){F(()=>ke(n,{recursive:!0,force:!0}));return}let r;try{r=Is(n)}catch{return}for(let i of Qp(r,t))F(()=>ke(A(n,i),{force:!0}))}function Qp(e,t){let n=new Set(t.map(r=>`${kn(r)}.scip`));return e.filter(r=>!n.has(r))}function hs(e,t,n){for(let r of t){let i=Er(e,r.language);$t(S(i),{recursive:!0}),r.scipPath!==i&&fe(n,pe(r.scipPath,i))}}function Zp(e){let t=[],n=[],r=e.languages.map((o,a)=>({language:o,scipPath:e.languages.length>1?Ze(e.tempOutputScip,o,a):e.tempOutputScip})),i=Object.fromEntries(r.map(({language:o,scipPath:a})=>[o,a]));for(let{language:o,scipPath:a}of r){let s=ef({...e,language:o,scipPath:a});for(let c of s)"skipped"in c?Ts(n,c.skipped):t.push(c.prepared)}return{preparedRuns:t,skippedLanguages:n,languageOutputScipPaths:i}}function ef(e){if(e.language!=="typescript"||e.typescriptProjectMode!=="workspace")return[xr({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})];let t=e.preDiscoveredTypeScriptProjects??xe(e.projectRoot,e.typescriptProjects);return t.length===0?[xr({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})]:(e.onStatus(`Indexing TypeScript workspace as ${t.length} project shard(s).`),t.map((n,r)=>xr({...e,id:`typescript:${n}`,label:`typescript (${n})`,scipPath:Ze(e.tempOutputScip,"typescript-project",r),outputScipPath:e.scipPath,pnpmWorkspaces:!1,projectPath:n})))}function xr(e){let t=mt(e.language),n=Me(t),r=rn(t,e.projectRoot),i=e.trustProjectTools&&r?Zr(t,e.projectRoot):null,o=Pe(t);if(!i&&!o&&r){let u=`${n} is available only as repository-local code at ${r}. Review that exact tool and rerun with --trust-project-tools.`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}if(!i&&!o&&!nn(t)){if(e.skipAutoInstall){let u=`${n} not found on PATH. To install the reviewed version, run: codebaseiq reindex --install-missing${t.installUrl?` (manual source: ${t.installUrl})`:""}`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!gr(t,e.onStatus)){let u=`${n} could not be auto-installed. ${t.installUrl?`Install manually from ${t.installUrl}`:`Install ${n} and put it on PATH.`}`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}}let a=i?.canonicalPath??Pe(t);if(!a){let u=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}let{binary:s,args:c}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:a,projectPath:e.projectPath,configPath:e.language==="clojure"?e.clojureConfigPath:void 0}),d=Ci({language:e.language,projectPath:e.projectPath,pnpmWorkspaces:e.pnpmWorkspaces});if(i&&!i.executable){let u=`${i.relativePath} is not executable; refusing project-local indexer.`;return e.onStatus(`Skipping ${e.language}: ${u}`),{skipped:{language:e.language,reason:u}}}return i&&e.onStatus(`Trusted project-local ${e.language} indexer ${i.relativePath} (${i.sha256.slice(0,12)}\u2026, ${i.canonicalPath}).`),{prepared:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,config:t,resolvedBinary:a,binary:s,args:c,env:on(t,e.env,a),...d===void 0?{}:{temporaryRootConfigContent:d},...i?{trustedProjectTool:i}:{}}}}function tf(e,t){let n=new Map;for(let i of e)if(i.skipped)Ts(t,i.skipped);else{let o=`${i.language}\0${i.outputScipPath}`,a=n.get(o)??{language:i.language,outputScipPath:i.outputScipPath,scipPaths:[]};a.scipPaths.push(i.scipPath),n.set(o,a)}let r=[];for(let i of n.values())if(i.scipPaths.length>1)xn(i.scipPaths,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath});else{let o=i.scipPaths[0];o!==i.outputScipPath&&Ps(o,i.outputScipPath),r.push({language:i.language,scipPath:i.outputScipPath})}return{indexedOutputs:r}}function Ts(e,t){let n=e.find(r=>r.language===t.language);if(!n){e.push(t);return}n.reason.includes(t.reason)||(n.reason=`${n.reason}; ${t.reason}`)}function nf(e,t,n,r,i){if(e.length===0){let o=t.map(a=>` - ${a.language}: ${a.reason}`).join(`
|
|
333
333
|
`);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
|
|
334
334
|
`+o)}if(t.length!==0&&(i(`Indexed ${e.length} language output(s); skipped or incomplete: ${t.map(o=>o.language).join(", ")}.`),!r))throw new Error(`Failed to index all required languages; preserving the previous index. Pass --allow-partial to intentionally write an incomplete index.
|
|
335
335
|
`+t.map(o=>` - ${o.language}: ${o.reason}`).join(`
|
|
336
|
-
`))}function
|
|
336
|
+
`))}function ys(e,t,n){if(e.length>1){n(`Merging ${e.length} language indexes...`);let r=performance.now(),i=Mi(e.map(o=>o.scipPath),t);return ks(i,n),n(`Merged and sanitized SCIP indexes in ${(performance.now()-r).toFixed(0)}ms.`),!0}else e[0].scipPath!==t&&Ps(e[0].scipPath,t);return!1}async function rf(e){let t;if(of(e)){let i=A(e.run.tempPaths.runDir,"typescript-affected.db");try{e.run.onStatus(`Converting ${e.incrementalTypeScript.affectedFiles.length} affected TypeScript document(s) to SQLite...`);let o=performance.now();Ss(e.incrementalTypeScript.affectedScipPath,i,e.run.onStatus,!1,e.run.opts.signal),e.run.onStatus(`Converted affected SCIP documents in ${(performance.now()-o).toFixed(0)}ms.`);let a=Hi({previousDbPath:e.run.paths.outputDb,miniDbPath:i,candidateDbPath:e.run.tempPaths.tempOutputDb,affectedFiles:e.incrementalTypeScript.affectedFiles,writeTelemetry:e.run.writeTelemetry});return e.run.onStatus(`Patched ${a.affectedDocumentCount} SQLite document(s) in ${(a.durationMs/1e3).toFixed(3)}s.`),{mode:"incremental",changedDocumentPaths:a.changedDocumentPaths,patchDurationMs:a.durationMs,converterDurationMs:performance.now()-o,scipCompanion:e.incrementalTypeScript.completeScipUpdated?"current":"deferred"}}catch(o){$(e.run.opts.signal,"Reindex cancelled by its owner."),t=o instanceof Error?o.message:String(o),F(()=>ke(i,{force:!0})),F(()=>ke(e.run.tempPaths.tempOutputDb,{force:!0})),e.run.onStatus(`Incremental SQLite publication unavailable: ${t}. Falling back to complete conversion.`)}}let n=e.completeScipSanitized;e.completeScipAvailable||(n=await e.materializeFullFallback());let r=performance.now();return Ss(e.run.tempPaths.tempOutputScip,e.run.tempPaths.tempOutputDb,e.run.onStatus,n,e.run.opts.signal),{mode:"full",converterDurationMs:performance.now()-r,...t?{fallbackReason:t}:{}}}function of(e){if(!e.incrementalTypeScript||e.skippedLanguages.length>0||!N(e.run.paths.outputDb)||!N(e.run.paths.outputScip))return!1;let t=new Set(e.reusedLanguages);return e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(n=>n==="typescript"||t.has(n))}function af(e,t){let n=I(),r=[...t].sort(),i=new Set(r),o={addedFiles:[],modifiedFiles:r,deletedFiles:[],changedFiles:r,unchangedFiles:e.affectedFiles.filter(a=>!i.has(a)).sort()};return{version:1,status:"evaluated",refreshResult:"rebuilt",recordedAt:new Date().toISOString(),durationMs:I()-n,manifest:e.manifest,plan:e.plan,comparison:o,evaluation:mn(e.plan,o,e.projectFileCount)}}function Ss(e,t,n,r,i){if($(i,"Reindex cancelled by its owner."),n("Writing the SQLite index..."),!N(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{ks(go(e,t,{sanitize:!r}),n)}catch(o){let a=o instanceof Error?o.message:String(o);throw new Error(`Failed to write the SQLite index: ${a}`,{cause:o})}}function ks(e,t){e.removedDefinitionOccurrences!==0&&t(`Sanitized ${e.removedDefinitionOccurrences} invalid definition occurrences across ${e.touchedDocuments} documents before SQLite conversion.`)}function Ze(e,t,n){let r=_p(e)||".scip",i=Gt(e,r);return A(S(e),`${i}.${n+1}.${t}${r}`)}async function sf(e,t){for(let n=0;n<2;n++){let r=cf(e,t);if(r)return r;let i=df(e);if(i&&_s(t.trigger,i)){t.onStatus(`Manual reindex preempting watcher refresh started at ${i.startedAt}.`);let o;try{o=await lf(i)}catch(s){throw new Error(`Could not verify the watcher's in-progress reindex owner (pid ${i.pid}); refusing to steal an active lock: ${de(s)}`,{cause:s})}if(!o)throw new Error(`Could not confirm the watcher's in-progress reindex (pid ${i.pid}) terminated for ${S(e)}; refusing to steal an active lock.`);let a=Jt(e,{parseLegacy:Vt});if(!jr(e,a,{parseLegacy:Vt}))throw new Error(`Reindex lock ownership changed before preemption completed for ${S(e)}.`);continue}throw new Error(`Another codebaseiq reindex is already running for ${S(e)}.`)}throw new Error(`Could not acquire codebaseiq reindex lock for ${S(e)}.`)}function cf(e,t){let n=te(process.pid),r=nt(e,{kind:"reindex",processIdentity:n,detail:{projectRoot:t.projectRoot,...process.env.SCIP_REINDEX_PROCESS_GROUP_LEADER==="1"?{processGroupLeader:!0}:{},...t.trigger?{trigger:t.trigger}:{}},parseLegacy:Vt});if(r.kind==="acquired"&&r.reclaimed){let i=Ds(r.reclaimed,e);i&&_s(t.trigger,i)?t.onStatus(`Manual reindex preempting watcher refresh started at ${i.startedAt}; its prior owner was already stale.`):t.onStatus(`Recovered an abandoned or incomplete reindex lock for ${S(e)}.`)}return r.kind==="acquired"?()=>{r.lock.release()}:null}function df(e){return Ds(Jt(e,{parseLegacy:Vt}),e)}var Vt=e=>{let t=Fs(e,"");return t?{pid:t.pid,...t.processIdentity?{processIdentity:t.processIdentity}:{}}:null};function Ds(e,t){if(e.state==="valid"&&e.record?.kind==="reindex"){let n=e.record.detail??{};return{version:2,pid:e.record.pid,...e.record.processIdentity?{processIdentity:e.record.processIdentity}:{},...n.processGroupLeader===!0?{processGroupLeader:!0}:{},projectRoot:typeof n.projectRoot=="string"?n.projectRoot:S(t),startedAt:e.record.startedAt,trigger:n.trigger}}return Fs(e.parsed,t)}function Fs(e,t){try{let n=e;return typeof n.pid!="number"||!Number.isInteger(n.pid)||n.pid<=0?null:{version:n.version===2?2:1,pid:n.pid,...n.processIdentity===void 0?{}:(()=>{let r=Ar(n.processIdentity);return r?.pid===n.pid?{processIdentity:r}:{}})(),...n.processGroupLeader===!0?{processGroupLeader:!0}:{},projectRoot:typeof n.projectRoot=="string"?n.projectRoot:S(t),startedAt:typeof n.startedAt=="string"?n.startedAt:"unknown",trigger:n.trigger}}catch{return null}}function _s(e,t){return e?.kind==="manual-cli"&&uf(t?.trigger)}function uf(e){return e?.kind==="watch-source"||e?.kind==="watch-git-head"||e?.kind==="watch-git-index"||e?.kind==="watch-git-state"}async function lf(e){return!ne(e.pid)||(Ir(e),bs(e,"SIGTERM"),await Rs(e,2e3))?!0:(Ir(e),bs(e,"SIGKILL"),Rs(e,1e3))}function bs(e,t){if(e.processGroupLeader)try{process.kill(-e.pid,t);return}catch{if(!ne(e.pid))return;Ir(e)}try{process.kill(e.pid,t)}catch{}}async function Rs(e,t){let n=I()+t;for(;I()<n;){if(xs(e))return!0;await pf(50)}return xs(e)}function Ir(e){if(!e.processIdentity)throw new Error(`Refusing to signal reindex pid ${e.pid}: its ownership record has no process identity.`);let t=te(e.pid);if(!t)throw new Error(`Refusing to signal reindex pid ${e.pid}: its process identity is unavailable.`);if(!Oe(e.processIdentity,t))throw new Error(`Refusing to signal reindex pid ${e.pid}: its process identity does not match the ownership record.`)}function xs(e){if(!ne(e.pid))return!0;if(!e.processIdentity)return!1;let t=te(e.pid);return t!==null&&!Oe(e.processIdentity,t)}function pf(e){return new Promise(t=>setTimeout(t,e))}function Os(e,t,n){return Object.fromEntries(t.map(r=>{let i=r==="typescript"?Jr(n.typescriptProjects):[],o=r==="clojure"?ff(n.clojureConfigPath):void 0,a=[...mt(r).markerFiles,...i,...o?[o]:[]],s=r==="typescript"?{typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:i}:{typescriptProjectMode:"single",typescriptProjects:[]};return[r,{version:2,languages:[r],pnpmWorkspaces:r==="typescript"&&gf(n),...s,clojureConfigPath:o,files:dt(e,{language:r,markerFiles:a})}]}))}function ff(e){return e?.trim()||void 0}function gf(e){return e.typescriptProjectMode!=="workspace"&&e.pnpmWorkspaces===!0}function Er(e,t){return A(S(e),"language-indexes",`${t}.scip`)}function As(e){return A(S(e),"language-indexes","typescript-projects")}function Bt(e,t){return A(As(e),`${kn(t)}.scip`)}function De(e){try{return qt(ee(L(e,"reindex metadata")))}catch{return null}}function Cs(e,t){try{let n=ee(L(e,"reindex metadata"));if(n.kind!=="legacy"&&n.kind!=="supported")return!1;let r=n.metadata;return n.capabilities.publishableGeneration&&zt(r)&&Z(r.fingerprint)===Z(t)&&Z([...r.indexedLanguages??[]].sort())===Z(t.languages)}catch{return!1}}function wr(e,t){G(e,t,{spacing:2,trailingNewline:!0})}function Ls(e,t){try{let n=qt(ee(L(e,"reindex metadata")));if(!n)return;wr(e,{...n,lastRefresh:t})}catch{}}function Ut(e){return{trigger:e.trigger??{kind:"unknown"},result:e.result,startedAt:new Date(e.start).toISOString(),completedAt:new Date().toISOString(),durationMs:I()-e.monotonicStart,indexedLanguages:e.languages?[...e.languages]:void 0,skipped:e.skipped?[...e.skipped]:void 0,error:e.error}}function Z(e){return JSON.stringify(e)}export{Ai as INDEXER_CONFIGS,Ri as augmentAuxiliaryDocuments,up as augmentVueResolvedReferences,lp as augmentVueResolvedReferencesAsync,oe as auxiliaryDocumentsAugmentationStage,Me as describeIndexerBinary,ln as detectLanguages,mt as getIndexerConfig,on as getIndexerExecutionEnv,tn as isBinaryAvailable,nn as isIndexerInstalled,xn as mergeScipFiles,Rn as mergeScipIndexes,SS as reindex,Pe as resolveIndexerBinary,rn as resolveProjectLocalIndexerBinary,U as runPostIndexAugmentation,gr as tryInstallIndexer,ds as vueResolvedReferencesAugmentationStage};
|
|
337
337
|
//# sourceMappingURL=reindex.js.map
|