codebaseiq 0.1.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 +481 -0
- package/LICENSE +202 -0
- package/README.md +349 -0
- package/dist/augment-vue-worker.js +2 -0
- package/dist/call-graph-evidence-gNsxjCW8.d.ts +16 -0
- package/dist/change-analysis-types-CCtoCHbC.d.ts +9 -0
- package/dist/chunk-2Q2LW5JW.js +14 -0
- package/dist/chunk-2X7V4HS4.js +88 -0
- package/dist/chunk-34WBMAYK.js +2 -0
- package/dist/chunk-35NLDRZC.js +2 -0
- package/dist/chunk-362QOSFD.js +3 -0
- package/dist/chunk-3IER7Q6H.js +12 -0
- package/dist/chunk-3JSXXYTZ.js +345 -0
- package/dist/chunk-3LCDIREB.js +4 -0
- package/dist/chunk-476NR5B7.js +2 -0
- package/dist/chunk-4FC325IF.js +30 -0
- package/dist/chunk-4WKDMDEW.js +9 -0
- package/dist/chunk-4XTAUQFD.js +2 -0
- package/dist/chunk-5PUWMSDU.js +26 -0
- package/dist/chunk-5VKBFZZU.js +3 -0
- package/dist/chunk-6BQ3DSPK.js +2 -0
- package/dist/chunk-6CS3UQTN.js +3 -0
- package/dist/chunk-6MUIJMVL.js +6 -0
- package/dist/chunk-6NW7MU72.js +40 -0
- package/dist/chunk-6OAHRI2D.js +6 -0
- package/dist/chunk-6YTSKJJ3.js +2 -0
- package/dist/chunk-7FND7D7N.js +2 -0
- package/dist/chunk-7MGU3HPH.js +2 -0
- package/dist/chunk-7NVGT435.js +2 -0
- package/dist/chunk-7XAN6GKB.js +2 -0
- package/dist/chunk-AAQQPKCU.js +2 -0
- package/dist/chunk-ADTBPVUZ.js +21 -0
- package/dist/chunk-AKB7V7TV.js +2 -0
- package/dist/chunk-ANFVSJWQ.js +11 -0
- package/dist/chunk-B2OB55RR.js +3 -0
- package/dist/chunk-B3UYV66Z.js +4 -0
- package/dist/chunk-B75HZHUP.js +2 -0
- package/dist/chunk-BFFZDZQV.js +2 -0
- package/dist/chunk-BGBBVSH4.js +2 -0
- package/dist/chunk-BH5F2Q4O.js +2 -0
- package/dist/chunk-BJ6SQAEN.js +2 -0
- package/dist/chunk-BMYOV5GP.js +77 -0
- package/dist/chunk-BVAJLC5A.js +7 -0
- package/dist/chunk-C6SBF2WH.js +4 -0
- package/dist/chunk-C74PPYLA.js +3 -0
- package/dist/chunk-C7QOQX32.js +8 -0
- package/dist/chunk-CAUCPUOF.js +7 -0
- package/dist/chunk-CO5R3UNA.js +2 -0
- package/dist/chunk-CQP3THUZ.js +7 -0
- package/dist/chunk-CVYSU6BX.js +16 -0
- package/dist/chunk-CWONGW6P.js +3 -0
- package/dist/chunk-DDZ7VHWV.js +20 -0
- package/dist/chunk-DGXRDLV5.js +2 -0
- package/dist/chunk-DO6WQD2T.js +3 -0
- package/dist/chunk-DQMDCD24.js +2 -0
- package/dist/chunk-DR2LURYU.js +3 -0
- package/dist/chunk-DRENNWRG.js +2 -0
- package/dist/chunk-ECQBG7PW.js +564 -0
- package/dist/chunk-EF2R3WNQ.js +2 -0
- package/dist/chunk-ELNRLMC5.js +29 -0
- package/dist/chunk-EMNIHCRB.js +18 -0
- package/dist/chunk-ENCCHKM6.js +5 -0
- package/dist/chunk-EZNMUY67.js +5 -0
- package/dist/chunk-FAJQ7LWY.js +3 -0
- package/dist/chunk-FDGD5AB5.js +2 -0
- package/dist/chunk-FETNQCFO.js +117 -0
- package/dist/chunk-FM5BPL4V.js +60 -0
- package/dist/chunk-FQKZWM4L.js +49 -0
- package/dist/chunk-FW53T7EB.js +2 -0
- package/dist/chunk-G6XFR4ZL.js +4 -0
- package/dist/chunk-GCHRX4YW.js +4 -0
- package/dist/chunk-GTIYTDRE.js +562 -0
- package/dist/chunk-GTXSJDCO.js +2 -0
- package/dist/chunk-GW6Z3WGY.js +2 -0
- package/dist/chunk-H3LGFZVK.js +2 -0
- package/dist/chunk-HKQUXIFO.js +2 -0
- package/dist/chunk-HOA5YGOH.js +3 -0
- package/dist/chunk-HPJRBHVT.js +3 -0
- package/dist/chunk-HRWGYWRJ.js +49 -0
- package/dist/chunk-I2T2LLK2.js +4 -0
- package/dist/chunk-ICFDQHAM.js +3 -0
- package/dist/chunk-ID63777H.js +4 -0
- package/dist/chunk-IJ4HMYBE.js +3 -0
- package/dist/chunk-ILMHV3KM.js +2 -0
- package/dist/chunk-IOP6FWIM.js +2 -0
- package/dist/chunk-IRQOAM5G.js +2 -0
- package/dist/chunk-J77SU6VA.js +38 -0
- package/dist/chunk-JE3WZ6II.js +2 -0
- package/dist/chunk-JEJLSICM.js +4 -0
- package/dist/chunk-JOIRNPPY.js +2 -0
- package/dist/chunk-JSOYNVWH.js +3 -0
- package/dist/chunk-KMITESMT.js +2 -0
- package/dist/chunk-KUW32IRO.js +2 -0
- package/dist/chunk-KWVHSKHK.js +31 -0
- package/dist/chunk-L4NRUAGJ.js +18 -0
- package/dist/chunk-L57ZKWVG.js +6 -0
- package/dist/chunk-LTA3BRZX.js +2 -0
- package/dist/chunk-LU3BMVH2.js +10 -0
- package/dist/chunk-LZYFLFEH.js +2 -0
- package/dist/chunk-MOVBWNIP.js +16 -0
- package/dist/chunk-MVB3DAEY.js +3 -0
- package/dist/chunk-N3IQCBCF.js +29 -0
- package/dist/chunk-NAUD7LCA.js +2 -0
- package/dist/chunk-NCZUNH3E.js +109 -0
- package/dist/chunk-NE6IU5ZD.js +5 -0
- package/dist/chunk-NEDP5RFQ.js +60 -0
- package/dist/chunk-NMTSZXCL.js +2 -0
- package/dist/chunk-NNJ2KZZG.js +4 -0
- package/dist/chunk-NNO6A2PO.js +2 -0
- package/dist/chunk-NNOKTMZT.js +20 -0
- package/dist/chunk-O6QTXQPJ.js +13 -0
- package/dist/chunk-OANDYLJQ.js +2 -0
- package/dist/chunk-OFBE4NGP.js +2 -0
- package/dist/chunk-OGTFJ3XD.js +2 -0
- package/dist/chunk-OL6KJP3N.js +16 -0
- package/dist/chunk-OLF4MA5W.js +8 -0
- package/dist/chunk-OTOKVOJ3.js +2 -0
- package/dist/chunk-OVTS4DKB.js +2 -0
- package/dist/chunk-OZYRSMSH.js +3 -0
- package/dist/chunk-P5XHIJHI.js +2 -0
- package/dist/chunk-PBI2LFKH.js +2 -0
- package/dist/chunk-PIOMTC27.js +2 -0
- package/dist/chunk-PTAWHLVJ.js +6 -0
- package/dist/chunk-PX4RYAAK.js +2 -0
- package/dist/chunk-PYAB5SM6.js +7 -0
- package/dist/chunk-Q5ELPRKQ.js +2 -0
- package/dist/chunk-Q65CQ4XL.js +2 -0
- package/dist/chunk-Q72QSKXC.js +308 -0
- package/dist/chunk-QCN62RTF.js +3 -0
- package/dist/chunk-QDCCHMVZ.js +2 -0
- package/dist/chunk-QHRNXP3C.js +3 -0
- package/dist/chunk-QKPLA6IC.js +2 -0
- package/dist/chunk-QOKYJ33H.js +2 -0
- package/dist/chunk-QW7EP6WI.js +21 -0
- package/dist/chunk-R2NOK63J.js +4 -0
- package/dist/chunk-RBAS5ZHI.js +2 -0
- package/dist/chunk-RDBI2RXU.js +9 -0
- package/dist/chunk-RKEJ6VTF.js +73 -0
- package/dist/chunk-RR7SX44N.js +35 -0
- package/dist/chunk-RU65DDUP.js +215 -0
- package/dist/chunk-SELM5MER.js +2 -0
- package/dist/chunk-SGX43S2L.js +2 -0
- package/dist/chunk-SMRBZ6EC.js +2 -0
- package/dist/chunk-SNNWPCN7.js +4 -0
- package/dist/chunk-ST7V3SKN.js +2 -0
- package/dist/chunk-SWHMHUKF.js +2 -0
- package/dist/chunk-SYDJMPES.js +2 -0
- package/dist/chunk-SZD2KF7Q.js +2 -0
- package/dist/chunk-T3DGWPXM.js +3 -0
- package/dist/chunk-TFZB6XTM.js +239 -0
- package/dist/chunk-TIIC3ZE7.js +2 -0
- package/dist/chunk-TRRC4ZJ7.js +2 -0
- package/dist/chunk-TXXOEMZJ.js +2 -0
- package/dist/chunk-UBGWN7I4.js +2 -0
- package/dist/chunk-UCD3H3UZ.js +5 -0
- package/dist/chunk-UDS562V4.js +5 -0
- package/dist/chunk-UNBY47BC.js +3 -0
- package/dist/chunk-UP3BUZR5.js +74 -0
- package/dist/chunk-UXM43C7T.js +3 -0
- package/dist/chunk-UZGZB3VB.js +3 -0
- package/dist/chunk-VE5AVNMP.js +2 -0
- package/dist/chunk-VEXUL62T.js +2 -0
- package/dist/chunk-VFY6Y2H6.js +61 -0
- package/dist/chunk-VUIYB2V3.js +2 -0
- package/dist/chunk-VXYS3FZD.js +23 -0
- package/dist/chunk-WE5RZHZ7.js +5 -0
- package/dist/chunk-WMPRTGH2.js +2 -0
- package/dist/chunk-WOQBZPIF.js +2 -0
- package/dist/chunk-XLQ3GLWZ.js +2 -0
- package/dist/chunk-XME3HPXZ.js +2 -0
- package/dist/chunk-XMQ23E27.js +2 -0
- package/dist/chunk-XWUOUWYI.js +2 -0
- package/dist/chunk-XZEE23VG.js +5 -0
- package/dist/chunk-Y6KHROC3.js +7 -0
- package/dist/chunk-YESXMKX3.js +3 -0
- package/dist/chunk-YMGZZEW4.js +2 -0
- package/dist/chunk-YSNONTJ2.js +2 -0
- package/dist/chunk-YUKYB54I.js +1 -0
- package/dist/chunk-YVCIMIOC.js +12 -0
- package/dist/chunk-Z54RD7VL.js +3 -0
- package/dist/chunk-ZKX2FRS6.js +15 -0
- package/dist/chunk-ZMI2JSX2.js +2 -0
- package/dist/chunk-ZV3JV5G5.js +8 -0
- package/dist/chunk-ZZ3MWF33.js +4 -0
- package/dist/chunk-ZZXSWSN6.js +2 -0
- package/dist/cli-context-3SNLDYBM.js +3 -0
- package/dist/cli-context-T3B7W6GG.js +2 -0
- package/dist/cli-program-YNOXO72B.js +7 -0
- package/dist/cli.js +3 -0
- package/dist/code-DlqpBDd0.d.ts +121 -0
- package/dist/command-descriptors-6AOUKWW7.js +346 -0
- package/dist/command-descriptors-ZFKJSRUP.js +344 -0
- package/dist/command-panels-SZONPMLJ.js +3 -0
- package/dist/config-types-BNoC96J3.d.ts +560 -0
- package/dist/db-D7sauVFH.d.ts +95 -0
- package/dist/direct-navigation-DP4LVMRX.js +3 -0
- package/dist/direct-navigation-FLUS3BT6.js +2 -0
- package/dist/exploration-topology-BG4v30HZ.d.ts +256 -0
- package/dist/file-dep-graph-Bqg3t3Px.d.ts +4 -0
- package/dist/file-kind-BKCVMNUf.d.ts +10 -0
- package/dist/frontend-behavior-evidence-EfM4_9bc.d.ts +4 -0
- package/dist/git-history-ChNHbfZQ.d.ts +13 -0
- package/dist/graph-evidence-BIFqyisO.d.ts +131 -0
- package/dist/health-DJaZXg8I.d.ts +340 -0
- package/dist/index.d.ts +183 -0
- package/dist/index.js +2 -0
- package/dist/invocation-command-descriptors-QT2JMY5J.js +3 -0
- package/dist/invocation-command-descriptors-YN4QJEAX.js +2 -0
- package/dist/next-anchor-candidates-BwMczMvX.d.ts +90 -0
- package/dist/output-continuation-command-2V2SL4TD.js +2 -0
- package/dist/output-continuation-command-65J5IP3O.js +3 -0
- package/dist/postinstall.js +3 -0
- package/dist/project-reindex-5JOKXAXT.js +2 -0
- package/dist/project-reindex-UQBIKO4M.js +3 -0
- package/dist/queries/affected.d.ts +40 -0
- package/dist/queries/affected.js +2 -0
- package/dist/queries/anchors.d.ts +123 -0
- package/dist/queries/anchors.js +2 -0
- package/dist/queries/architecture.d.ts +166 -0
- package/dist/queries/architecture.js +2 -0
- package/dist/queries/bottlenecks.d.ts +68 -0
- package/dist/queries/bottlenecks.js +2 -0
- package/dist/queries/by-kind.d.ts +27 -0
- package/dist/queries/by-kind.js +2 -0
- package/dist/queries/call-graph.d.ts +52 -0
- package/dist/queries/call-graph.js +2 -0
- package/dist/queries/change-surface.d.ts +55 -0
- package/dist/queries/change-surface.js +2 -0
- package/dist/queries/cleanup-plan.d.ts +66 -0
- package/dist/queries/cleanup-plan.js +2 -0
- package/dist/queries/co-change.d.ts +90 -0
- package/dist/queries/co-change.js +2 -0
- package/dist/queries/code.d.ts +6 -0
- package/dist/queries/code.js +2 -0
- package/dist/queries/complexity-hotspots.d.ts +61 -0
- package/dist/queries/complexity-hotspots.js +2 -0
- package/dist/queries/complexity.d.ts +74 -0
- package/dist/queries/complexity.js +2 -0
- package/dist/queries/context.d.ts +146 -0
- package/dist/queries/context.js +2 -0
- package/dist/queries/convergence.d.ts +33 -0
- package/dist/queries/convergence.js +2 -0
- package/dist/queries/coupling.d.ts +32 -0
- package/dist/queries/coupling.js +2 -0
- package/dist/queries/cycles.d.ts +66 -0
- package/dist/queries/cycles.js +2 -0
- package/dist/queries/dataflow.d.ts +77 -0
- package/dist/queries/dataflow.js +2 -0
- package/dist/queries/dead.d.ts +58 -0
- package/dist/queries/dead.js +2 -0
- package/dist/queries/decorative-checkers.d.ts +34 -0
- package/dist/queries/decorative-checkers.js +2 -0
- package/dist/queries/deep-chains.d.ts +5 -0
- package/dist/queries/deep-chains.js +2 -0
- package/dist/queries/dependence-slice.d.ts +46 -0
- package/dist/queries/dependence-slice.js +2 -0
- package/dist/queries/dependency-depth.d.ts +49 -0
- package/dist/queries/dependency-depth.js +2 -0
- package/dist/queries/deps.d.ts +15 -0
- package/dist/queries/deps.js +2 -0
- package/dist/queries/diff-impact.d.ts +165 -0
- package/dist/queries/diff-impact.js +2 -0
- package/dist/queries/doc-drift.d.ts +115 -0
- package/dist/queries/doc-drift.js +2 -0
- package/dist/queries/drift.d.ts +79 -0
- package/dist/queries/drift.js +2 -0
- package/dist/queries/duplicate-bodies.d.ts +55 -0
- package/dist/queries/duplicate-bodies.js +2 -0
- package/dist/queries/entry-map.d.ts +121 -0
- package/dist/queries/entry-map.js +2 -0
- package/dist/queries/evidence.d.ts +70 -0
- package/dist/queries/evidence.js +2 -0
- package/dist/queries/extract-candidates.d.ts +52 -0
- package/dist/queries/extract-candidates.js +2 -0
- package/dist/queries/fan.d.ts +53 -0
- package/dist/queries/fan.js +2 -0
- package/dist/queries/files.d.ts +20 -0
- package/dist/queries/files.js +2 -0
- package/dist/queries/health.d.ts +8 -0
- package/dist/queries/health.js +2 -0
- package/dist/queries/hierarchy.d.ts +21 -0
- package/dist/queries/hierarchy.js +2 -0
- package/dist/queries/hotspots.d.ts +42 -0
- package/dist/queries/hotspots.js +2 -0
- package/dist/queries/imports.d.ts +34 -0
- package/dist/queries/imports.js +2 -0
- package/dist/queries/incomplete-migration.d.ts +90 -0
- package/dist/queries/incomplete-migration.js +2 -0
- package/dist/queries/index.d.ts +180 -0
- package/dist/queries/index.js +2 -0
- package/dist/queries/isolated.d.ts +24 -0
- package/dist/queries/isolated.js +2 -0
- package/dist/queries/locality-candidates.d.ts +51 -0
- package/dist/queries/locality-candidates.js +2 -0
- package/dist/queries/members.d.ts +21 -0
- package/dist/queries/members.js +2 -0
- package/dist/queries/methods.d.ts +43 -0
- package/dist/queries/methods.js +2 -0
- package/dist/queries/not-implemented.d.ts +33 -0
- package/dist/queries/not-implemented.js +2 -0
- package/dist/queries/outline.d.ts +22 -0
- package/dist/queries/outline.js +2 -0
- package/dist/queries/passthrough-candidates.d.ts +41 -0
- package/dist/queries/passthrough-candidates.js +2 -0
- package/dist/queries/plan-context.d.ts +33 -0
- package/dist/queries/plan-context.js +2 -0
- package/dist/queries/react-component-duplicates.d.ts +39 -0
- package/dist/queries/react-component-duplicates.js +2 -0
- package/dist/queries/react-hook-candidates.d.ts +44 -0
- package/dist/queries/react-hook-candidates.js +2 -0
- package/dist/queries/react-large-component-pressure.d.ts +34 -0
- package/dist/queries/react-large-component-pressure.js +2 -0
- package/dist/queries/recent-duplicates.d.ts +79 -0
- package/dist/queries/recent-duplicates.js +2 -0
- package/dist/queries/redundant-reexports.d.ts +37 -0
- package/dist/queries/redundant-reexports.js +2 -0
- package/dist/queries/reference-neighborhood.d.ts +4 -0
- package/dist/queries/reference-neighborhood.js +2 -0
- package/dist/queries/reference-reachability.d.ts +48 -0
- package/dist/queries/reference-reachability.js +2 -0
- package/dist/queries/refs.d.ts +13 -0
- package/dist/queries/refs.js +2 -0
- package/dist/queries/self-audit.d.ts +65 -0
- package/dist/queries/self-audit.js +2 -0
- package/dist/queries/similar-chains.d.ts +48 -0
- package/dist/queries/similar-chains.js +2 -0
- package/dist/queries/similar-files.d.ts +35 -0
- package/dist/queries/similar-files.js +2 -0
- package/dist/queries/similar-signatures.d.ts +46 -0
- package/dist/queries/similar-signatures.js +2 -0
- package/dist/queries/similar.d.ts +187 -0
- package/dist/queries/similar.js +2 -0
- package/dist/queries/slice.d.ts +4 -0
- package/dist/queries/slice.js +2 -0
- package/dist/queries/source-inspection.d.ts +209 -0
- package/dist/queries/source-inspection.js +2 -0
- package/dist/queries/source-search.d.ts +85 -0
- package/dist/queries/source-search.js +2 -0
- package/dist/queries/stale-abstractions.d.ts +72 -0
- package/dist/queries/stale-abstractions.js +2 -0
- package/dist/queries/stats.d.ts +15 -0
- package/dist/queries/stats.js +2 -0
- package/dist/queries/surface.d.ts +22 -0
- package/dist/queries/surface.js +2 -0
- package/dist/queries/symbols.d.ts +14 -0
- package/dist/queries/symbols.js +2 -0
- package/dist/queries/system-map.d.ts +449 -0
- package/dist/queries/system-map.js +2 -0
- package/dist/queries/system.d.ts +21 -0
- package/dist/queries/system.js +2 -0
- package/dist/queries/test-quality.d.ts +56 -0
- package/dist/queries/test-quality.js +2 -0
- package/dist/queries/trace.d.ts +68 -0
- package/dist/queries/trace.js +2 -0
- package/dist/queries/twin-ab.d.ts +66 -0
- package/dist/queries/twin-ab.js +2 -0
- package/dist/queries/twin-drift.d.ts +119 -0
- package/dist/queries/twin-drift.js +2 -0
- package/dist/queries/unused-imports.d.ts +4 -0
- package/dist/queries/unused-imports.js +2 -0
- package/dist/queries/unused-params.d.ts +38 -0
- package/dist/queries/unused-params.js +2 -0
- package/dist/queries/value-flow.d.ts +42 -0
- package/dist/queries/value-flow.js +2 -0
- package/dist/queries/vue-component-duplicates.d.ts +43 -0
- package/dist/queries/vue-component-duplicates.js +2 -0
- package/dist/queries/vue-composable-candidates.d.ts +44 -0
- package/dist/queries/vue-composable-candidates.js +2 -0
- package/dist/queries/vue-large-view-pressure.d.ts +41 -0
- package/dist/queries/vue-large-view-pressure.js +2 -0
- package/dist/queries/wrapper-candidates.d.ts +34 -0
- package/dist/queries/wrapper-candidates.js +2 -0
- package/dist/reindex-worker.js +3 -0
- package/dist/reindex.d.ts +254 -0
- package/dist/reindex.js +298 -0
- package/dist/repository-text-C0Q8VYdN.d.ts +19 -0
- package/dist/runtime.d.ts +555 -0
- package/dist/runtime.js +4 -0
- package/dist/rust-semantic-session-server.js +2 -0
- package/dist/rust-semantic-session-worker.js +2 -0
- package/dist/rust-semantic-worker.js +2 -0
- package/dist/scip-cli-B7N3haxa.d.ts +67 -0
- package/dist/source-snippet-_wrcgmZc.d.ts +15 -0
- package/dist/symbol-types-BIQwfoAx.d.ts +74 -0
- package/dist/typescript-mailbox-worker.js +2 -0
- package/dist/watch-server.js +8 -0
- package/docs/AGENT_GUIDE.md +148 -0
- package/docs/AI_FAILURE_MODES.md +43 -0
- package/docs/API.md +40 -0
- package/docs/API_EVOLUTION.md +77 -0
- package/docs/CLI_JSON_OUTPUT.md +389 -0
- package/docs/COMMAND_REFERENCE.md +294 -0
- package/docs/CONFIGURATION_WRITE_SAFETY.md +131 -0
- package/docs/DETECTOR_GUIDE.md +46 -0
- package/docs/DURABILITY.md +159 -0
- package/docs/INDEX_GENERATIONS.md +167 -0
- package/docs/LOCK_PROTOCOL.md +133 -0
- package/docs/MAILBOX_LIFECYCLE.md +224 -0
- package/docs/REGEX_POLICY.md +36 -0
- package/docs/REINDEX_METADATA_COMPATIBILITY.md +104 -0
- package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
- package/docs/SECURITY_MODEL.md +125 -0
- package/docs/TELEMETRY_RETENTION.md +84 -0
- package/docs/TIME_SEMANTICS.md +77 -0
- package/docs/WATCH_REFRESH_REQUESTS.md +123 -0
- package/docs/WINDOWS_SIDECAR_RELEASE.md +424 -0
- package/docs/accuracy-audit-checklist.md +304 -0
- package/docs/accuracy-hardening-goal.md +500 -0
- package/docs/analyzer-inventory.md +78 -0
- package/docs/analyzer-validation-protocol.md +84 -0
- package/docs/architecture-coherence-vision.md +254 -0
- package/docs/assets/codebaseiq-logo-dark.svg +21 -0
- package/docs/assets/codebaseiq-logo.svg +24 -0
- package/docs/locality-analyzer-design.md +193 -0
- package/docs/schemas/cli-json-envelope.schema.json +237 -0
- package/docs/schemas/cli-output-page.schema.json +104 -0
- package/docs/schemas/npm-release-state.schema.json +146 -0
- package/docs/schemas/observation-receipt.schema.json +164 -0
- package/docs/schemas/project-config.schema.json +318 -0
- package/docs/schemas/suppression-record.schema.json +79 -0
- package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
- package/package.json +482 -0
- package/scripts/build-codebaseiq-windows.mjs +197 -0
- package/scripts/codebaseiq-windows-provenance.mjs +364 -0
- package/scripts/evidence-product-contract.mjs +197 -0
- package/scripts/verify-codebaseiq-windows.mjs +29 -0
- package/skills/codebaseiq/SKILL.md +75 -0
- package/skills/codebaseiq/agents/openai.yaml +4 -0
- package/skills/codebaseiq-explore/SKILL.md +34 -0
- package/skills/codebaseiq-explore/agents/openai.yaml +4 -0
- package/skills/concrete-plan/SKILL.md +79 -0
- package/skills/concrete-plan/agents/openai.yaml +4 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{spawnSync as F}from"child_process";import{createHash as W}from"crypto";import{existsSync as N,lstatSync as M,realpathSync as j}from"fs";import{dirname as $,isAbsolute as z,join as U,resolve as g}from"path";var p={run(t,e){let r=I(t,e);return r.kind==="success"?r.output:void 0},runResult:I},K=["rev-parse","--show-toplevel","--absolute-git-dir","--git-common-dir","HEAD","HEAD^{tree}"],y=/^[0-9a-f]{40,64}$/;function be(t,e,r=p){if(!e||e.startsWith("-")||/[\0\r\n]/.test(e))throw new Error(`Invalid Git revision ${JSON.stringify(e)}.`);let n=r.runResult(t,["rev-parse","--verify","--end-of-options",`${e}^{commit}`]);if(n.kind!=="success"||!y.test(n.output))throw new Error(`Git revision ${JSON.stringify(e)} does not resolve to exactly one commit.`);return n.output}function Ce(t,e=p){let r=e.runResult(t,K);if(r.kind==="success"){let n=Y(r.output);if(n)return H(n,e)}return J(t,e)}function Y(t){let e=t.split(`
|
|
3
|
+
`).map(c=>c.trim());if(e.length!==5)return;let[r,n,i,o,s]=e;if(!r||!n||!i||!o||!s||!y.test(o)||!y.test(s))return;let a=u(r);return{root:a,gitDir:u(f(a,n)),commonDir:u(f(a,i)),headCommit:o,treeOid:s}}function H(t,e){let r=e.run(t.root,["status","--porcelain=v1","-z","--untracked-files=all"]);return r===void 0?void 0:{...T(t.root,t.gitDir),commonDir:t.commonDir,repositoryId:x("repository",t.commonDir),headCommit:t.headCommit,treeOid:t.treeOid,clean:r.length===0}}function J(t,e){let r=X(t,e);if(r.kind!=="worktree")return;let n=r.identity,i=n.projectRoot,o=e.run(i,["rev-parse","--git-common-dir"])?.trim();if(!o)return;let s=u(f(i,o)),a=h(e.run(i,["rev-parse","--verify","HEAD"])),c=h(e.run(i,["rev-parse","--verify","HEAD^{tree}"])),l=e.run(i,["status","--porcelain=v1","-z","--untracked-files=all"]);if(l!==void 0)return{...n,commonDir:s,repositoryId:x("repository",s),headCommit:a,treeOid:c,clean:l.length===0}}function X(t,e=p){let r=e.runResult(t,["rev-parse","--show-toplevel"]);if(r.kind==="not-repository")return{kind:"non-git"};if(r.kind==="error")return r;let n=r.output.trim();if(!n)return{kind:"error",message:"Git returned an empty worktree root."};let i=u(n),o=e.run(i,["rev-parse","--absolute-git-dir"])?.trim();if(!o)return{kind:"error",message:"Git did not return an absolute worktree directory."};let s=u(f(i,o));return{kind:"worktree",identity:T(i,s)}}function T(t,e){return{projectRoot:t,gitDir:e,worktreeId:x("worktree",`${t}\0${e}`)}}function ke(t,e=p){let r=e.run(t,["worktree","list","--porcelain","-z"]);return r===void 0?[]:q(r)}function q(t){let e=[],r;for(let n of t.split("\0")){if(n===""){r&&e.push(r),r=void 0;continue}let i=n.indexOf(" "),o=i<0?n:n.slice(0,i),s=i<0?"":n.slice(i+1);if(o==="worktree"){r&&e.push(r),r={path:u(s),detached:!1,bare:!1,prunable:!1,locked:!1};continue}r&&(o==="HEAD"?r.head=s:o==="branch"?r.branch=s:o==="detached"?r.detached=!0:o==="bare"?r.bare=!0:o==="prunable"?r.prunable=!0:o==="locked"&&(r.locked=!0))}return r&&e.push(r),e}function Se(t,e,r=p){return h(r.run(t,e))}function f(t,e){return z(e)?e:g(t,e)}function u(t){try{return j(t)}catch{return g(t)}}function x(t,e){return W("sha256").update(`${t}\0${e}`).digest("hex").slice(0,24)}function h(t){return t?.trim()||void 0}function I(t,e){let r=F("git",["-C",t,...e],{encoding:"utf-8",env:{...process.env,LC_ALL:"C"},maxBuffer:52428800,stdio:["ignore","pipe","pipe"],windowsHide:!0,timeout:3e4,killSignal:"SIGKILL"});if(r.status===0)return{kind:"success",output:r.stdout.trimEnd()};let i=(typeof r.stderr=="string"?r.stderr.trim():"")||r.error?.message||`git exited with status ${r.status??"unknown"}`,o=r.error?.code;return(/not a git repository/i.test(i)||o==="ENOENT"&&N(g(t)))&&!V(t)?{kind:"not-repository"}:{kind:"error",message:i}}function V(t){if(process.env.GIT_DIR||process.env.GIT_COMMON_DIR)return!0;let e=g(t);for(;;){try{return M(U(e,".git")),!0}catch(n){let i=n.code;if(i!=="ENOENT"&&i!=="ENOTDIR")return!0}let r=$(e);if(r===e)return!1;e=r}}function Pe(t){try{return process.kill(t,0),!0}catch(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EPERM"}}import{closeSync as b,fstatSync as m,openSync as C,readFileSync as Q,readSync as E}from"fs";import{createHash as Z}from"crypto";var v=8*1024*1024,w=64*1024*1024,ee=512*1024*1024,te=256*1024*1024,d=class extends Error{constructor(r,n,i,o,s){let a=i==="too-large"?`is ${o} bytes; the safety limit is ${s} bytes`:i==="not-regular"?"is not a regular file":"changed while it was being read";super(`${r} ${JSON.stringify(n)} ${a}`);this.inputKind=r;this.inputPath=n;this.reason=i;this.observedBytes=o;this.limitBytes=s;this.name="BoundedFileReadError"}inputKind;inputPath;reason;observedBytes;limitBytes;code="CODEBASEIQ_BOUNDED_FILE_READ"};function A(t,e){P(e.maxBytes);let r=String(t),n=C(t,"r");try{let i=m(n);D(i,e,r);let o=Q(n),s=m(n);if(s.dev!==i.dev||s.ino!==i.ino||s.size!==i.size||o.byteLength!==i.size)throw new d(e.inputKind,r,"changed-during-read",s.size,e.maxBytes);return o}finally{b(n)}}function k(t,e,r="utf8"){return A(t,e).toString(r)}function re(t,e){return k(t,{maxBytes:v,inputKind:e})}function ne(t,e){return k(t,{maxBytes:w,inputKind:e})}function S(t,e){P(e.maxBytes);let r=[],n=Buffer.allocUnsafe(64*1024),i=0;for(;;){let o=E(t,n,0,n.length,null);if(o===0)break;if(i+=o,!Number.isSafeInteger(i)||i>e.maxBytes)throw new d(e.inputKind,`file descriptor ${t}`,"too-large",i,e.maxBytes);r.push(Buffer.from(n.subarray(0,o)))}return Buffer.concat(r,i)}function ie(t,e,r="utf8"){return S(t,e).toString(r)}function B(t,e){let r=C(t,"r");try{return S(r,e)}finally{b(r)}}function R(t,e,r="utf8"){return B(t,e).toString(r)}function O(t,e,r){P(e.maxBytes);let n=String(t),i=C(t,"r");try{let o=m(i);D(o,e,n);let s=Buffer.allocUnsafe(Math.min(1024*1024,Math.max(1,o.size))),a=0;for(;a<o.size;){let l=E(i,s,0,Math.min(s.length,o.size-a),a);if(l===0)break;r(s.subarray(0,l)),a+=l}let c=m(i);if(c.dev!==o.dev||c.ino!==o.ino||c.size!==o.size||a!==o.size)throw new d(e.inputKind,n,"changed-during-read",c.size,e.maxBytes);return a}finally{b(i)}}function oe(t,e){let r=Z("sha256");return O(t,e,n=>r.update(n)),r.digest("hex")}function D(t,e,r){if(!t.isFile())throw new d(e.inputKind,r,"not-regular",Number(t.size),e.maxBytes);if(t.size>e.maxBytes)throw new d(e.inputKind,r,"too-large",Number(t.size),e.maxBytes)}function P(t){if(!Number.isSafeInteger(t)||t<0)throw new RangeError(`maxBytes must be a non-negative safe integer; received ${t}`)}var se=new Set(["aix","android","darwin","freebsd","haiku","linux","openbsd","sunos","win32","cygwin","netbsd"]);function ae(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t;return e.version!==1||typeof e.pid!="number"||!Number.isSafeInteger(e.pid)||e.pid<=0||typeof e.platform!="string"||!se.has(e.platform)||typeof e.startToken!="string"||e.startToken.trim()===""?null:{version:1,pid:e.pid,platform:e.platform,startToken:e.startToken}}function ce(t,e){return t.version===e.version&&t.pid===e.pid&&t.platform===e.platform&&t.startToken===e.startToken}import{execFileSync as de}from"child_process";import{platform as ue}from"os";var G=new WeakMap,le=1e3,L=16*1024;function _e(t,e=ge){if(!Number.isSafeInteger(t)||t<=0)return null;if(t===process.pid){let r=G.get(e);if(r)return r}try{let r=pe(t,e);if(!r)return null;let n={version:1,pid:t,platform:e.platform,startToken:r};return t===process.pid&&G.set(e,n),n}catch{return null}}function pe(t,e){if(e.platform==="linux"||e.platform==="android")return fe(e.readFile(`/proc/${t}/stat`));if(e.platform==="win32"){let r=`([DateTimeOffset](Get-Process -Id ${t} -ErrorAction Stop).StartTime).ToUnixTimeMilliseconds()`;return _(e.run("powershell.exe",["-NoProfile","-NonInteractive","-Command",r]))}return e.platform==="darwin"||e.platform==="freebsd"||e.platform==="openbsd"||e.platform==="netbsd"?_(e.run("ps",["-p",String(t),"-o","lstart="])):null}function fe(t){let e=t.lastIndexOf(")");if(e<0)return null;let n=t.slice(e+1).trim().split(/\s+/)[19];return n&&/^\d+$/.test(n)?n:null}function _(t){let e=t.trim();return e===""?null:e}var ge={platform:ue(),readFile(t){return R(t,{maxBytes:L,inputKind:"process identity pseudo-file"})},run(t,e){return de(t,[...e],{encoding:"utf8",timeout:le,maxBuffer:L,env:{...process.env,LC_ALL:"C",LANG:"C"},stdio:["ignore","pipe","ignore"],windowsHide:!0})}};var Ne=["typescript","javascript","java","scala","kotlin","rust","python","ruby","go","cpp","c","csharp","vb","dart","php","clojure"],Me=["entry-surface","generated-code","compatibility-shim","reflection-or-registration","test-fixture","intentional-twin","historical-coupling-ended","detector-counterexample"];function $e(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ze(t){return typeof t=="string"&&Number.isFinite(Date.parse(t))}function Ue(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0}function Ke(t){return typeof t=="string"&&t.length>0&&t.length<=256&&!/[\0\r\n]/u.test(t)}function Ye(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0}export{p as a,be as b,Ce as c,X as d,ke as e,Se as f,f as g,u as h,Pe as i,v as j,w as k,ee as l,te as m,d as n,A as o,k as p,re as q,ne as r,ie as s,O as t,oe as u,ae as v,ce as w,_e as x,Ne as y,Me as z,$e as A,ze as B,Ue as C,Ke as D,Ye as E};
|
|
4
|
+
//# sourceMappingURL=chunk-SNNWPCN7.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b}from"./chunk-GTXSJDCO.js";import{m as d,y as f}from"./chunk-FETNQCFO.js";function S(a,g){let p=b(a,g),i=f(a,p,{sort:!0});if(i.length===0)return[];let o=i.map(e=>({symbol:e.symbol,shortName:e.shortName,startLine:e.startLine,endLine:e.endLine,signature:e.signature,children:[]})),s=new Map;for(let e of o)s.set(e.symbol,e);let c=[];for(let e=0;e<i.length;e++){let r=i[e],n=o[e];if(r.enclosingSymbol&&s.has(r.enclosingSymbol)){s.get(r.enclosingSymbol).children.push(n);continue}let l=null,m=1/0;for(let t of o)if(t!==n&&t.startLine<=n.startLine&&t.endLine>=n.endLine){if(t.startLine===n.startLine&&t.endLine===n.endLine&&!d(t.symbol,n.symbol))continue;let u=t.endLine-t.startLine;u<m&&(m=u,l=t)}l?l.children.push(n):c.push(n)}return c}export{S as a};
|
|
2
|
+
//# sourceMappingURL=chunk-ST7V3SKN.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as x}from"./chunk-4WKDMDEW.js";import{a as u}from"./chunk-TIIC3ZE7.js";import{a as p}from"./chunk-NNOKTMZT.js";import{h as y}from"./chunk-CWONGW6P.js";function ee(e){return b.test(e)}var b=/(?:^|\/)(?:package-lock\.json|pnpm-lock\.yaml|yarn\.lock|Cargo\.lock|uv\.lock|poetry\.lock|Pipfile\.lock|bun\.lockb?|\.SRCINFO|CHANGELOG(?:\.[a-z]+)?|.*\.(?:map|tsbuildinfo))$|(?:^|\/)(?:dist|build|out|node_modules|docs\/plans)\//i;function te(e,t,n={}){let{minTogether:s=4,minConfidence:i=.6,limit:a=30,maxFilesPerCommit:l=20}=n,g=x(e,{historyMode:n.historyMode,...n.head?{head:n.head}:{}}),r=g.commitHistory(),c=t!==void 0,d=g.coChangePairs({minTogether:c?Math.min(s,2):s,minConfidence:c?0:i,maxFilesPerCommit:l});if(!r||!d)return{available:!1,commitsAnalyzed:0,findings:[]};let f=typeof n.scanLimit=="number"?d.slice(0,n.scanLimit):d,R=p(e),j=E(e),L=F(e,R,j),v=n.includeLinked===!0||c,h=[];for(let o of f){if(b.test(o.fileA)||b.test(o.fileB)||!P(e,o.fileA)||!P(e,o.fileB)||c&&!o.fileA.includes(t)&&!o.fileB.includes(t)||!c&&(u(o.fileA)==="test"||u(o.fileB)==="test"||O(o.fileA,o.fileB)||I(o.fileA,o.fileB)))continue;let m=L(o.fileA,o.fileB);if(!v&&m)continue;let C=w(o.fileA,o.fileB),S=$(o,C,m);if(h.push({...o,structurallyLinked:m,partnerClass:C.partnerClass,partnerClassReasons:C.reasons,...S?{declaredCouplingSuggestion:S}:{}}),h.length>=a)break}return{available:!0,commitsAnalyzed:r.commits.length,findings:h}}function P(e,t){return y(e.config.projectRoot,t)}function w(e,t){let n=A(e),s=A(t),i=[],a=r=>{i.includes(r)||i.push(r)},l=(r,c)=>n.tags.has(r)&&s.tags.has(c)||n.tags.has(c)&&s.tags.has(r);if(l("doc","code"))return a("one side is documentation and the other is executable source"),{partnerClass:"doc-code",reasons:i};if(n.tags.has("test")||s.tags.has("test"))return a("one side is classified as a test file"),{partnerClass:"test-code",reasons:i};if(l("schema","script"))return a("schema or contract file changes with a script or generated-code path"),{partnerClass:"schema-script",reasons:i};if(l("model","view"))return a("model or state path changes with a view or component path"),{partnerClass:"model-view",reasons:i};if(l("config","code"))return a("configuration file changes with executable source"),{partnerClass:"config-code",reasons:i};let g=K(n.tokens,s.tokens).filter(r=>!Z.has(r));return k(e,t)||g.length>=2?(a(k(e,t)?"both files live in the same directory":`files share feature tokens: ${g.slice(0,4).join(", ")}`),{partnerClass:"same-feature",reasons:i}):(a("no specific relationship pattern matched"),{partnerClass:"unknown",reasons:i})}function $(e,t,n){if(n||e.together<4||e.confidence<.75||e.commitScope==="broad-sweep"||e.recency==="stale"||!W.has(t.partnerClass))return;let s=[e.fileA,e.fileB].sort();return{name:`co-change ${t.partnerClass}: ${U(s)}`,files:s,reason:`${t.partnerClass} pair changed together ${e.together}x with ${Math.round(e.confidence*100)}% confidence; declare it if future edits should require both sides.`}}function F(e,t=p(e),n=E(e)){return(s,i)=>D(t,n,s,i)}var _=/(?:^|\/)(?:locales|i18n)\//i;function T(e){return _.test(e)}function I(e,t){return T(e)&&T(t)?!0:N(e,t)}function N(e,t){if(!e.endsWith(".json")||!t.endsWith(".json"))return!1;let n=e.lastIndexOf("/"),s=t.lastIndexOf("/");if(n<0||s<0)return!1;let i=e.slice(0,n),a=t.slice(0,s);if(i===a)return!1;let l=e.slice(n+1),g=t.slice(s+1);if(l!==g)return!1;let r=i.lastIndexOf("/"),c=a.lastIndexOf("/"),d=r>=0?i.slice(0,r):"",f=c>=0?a.slice(0,c):"";return d===f}function O(e,t){let n=e.lastIndexOf("/"),s=t.lastIndexOf("/");if(e.slice(0,n)!==t.slice(0,s))return!1;let i=e.slice(n+1).split(".")[0],a=t.slice(s+1).split(".")[0];return i!==""&&i===a}function E(e){return(e.config.declaredCouplings??[]).filter(t=>Array.isArray(t.files)&&t.files.length>=2).map(t=>new Set(t.files))}function D(e,t,n,s){return e.get(n)?.has(s)===!0||e.get(s)?.has(n)===!0?!0:t.some(i=>i.has(n)&&i.has(s))}var B=/(?:^|\/)(?:readme|docs?|guides?|adr|architecture|design)(?:\/|$)|\.(?:md|mdx|rst|adoc|txt)$/i,M=/(?:^|\/)(?:\.[a-z0-9-]+rc|config|configs|settings|\.github)(?:\/|$)|(?:^|\/)(?:package\.json|tsconfig(?:\.[^.]+)?\.json|vite\.config\.[cm]?[jt]s|rollup\.config\.[cm]?[jt]s|eslint\.config\.[cm]?[jt]s)$|\.(?:json|ya?ml|toml|ini|env)$/i,z=/(?:^|\/)(?:schemas?|contracts?|migrations?|models?|types?)(?:\/|$)|(?:^|\/)[^/]*(?:schema|contract|migration|model|types?)[^/]*|(?:\.schema)?\.(?:graphql|gql|proto|prisma)$/i,G=/(?:^|\/)(?:scripts?|bin|tools?|tasks?|generators?|codegen|migrations?|seeds?)(?:\/|$)|(?:^|\/)[^/]*(?:generate|codegen|migrate|seed|script)[^/]*\.[cm]?[jt]s$/i,H=/(?:^|\/)(?:models?|entities|domain|state|stores?|reducers?)(?:\/|$)|(?:^|\/)[^/]*(?:model|entity|state|store|reducer|viewmodel)[^/]*\.[^.]+$/i,q=/(?:^|\/)(?:views?|pages?|components?|screens?|routes?|templates?)(?:\/|$)|(?:^|\/)[^/]*(?:view|page|component|screen|template)[^/]*\.[^.]+$|\.(?:vue|svelte|tsx|jsx)$/i,W=new Set(["doc-code","config-code","schema-script","model-view","test-code"]),Z=new Set(["src","lib","app","apps","packages","frontend","backend","examples","python","typescript","javascript","test","tests","spec","index","main","utils","util","types","type","config","docs","doc","package","requirements","ts","tsx","js","jsx","mjs","cjs","vue","py","md","mdx","json","yaml","yml","toml","txt"]);function A(e){let t=e.replace(/\\/g,"/"),n=new Set;return B.test(t)&&n.add("doc"),M.test(t)&&n.add("config"),z.test(t)&&n.add("schema"),G.test(t)&&n.add("script"),H.test(t)&&n.add("model"),q.test(t)&&n.add("view"),u(t)==="test"&&n.add("test"),!n.has("doc")&&!n.has("config")&&n.add("code"),{tags:n,tokens:J(t)}}function k(e,t){let n=e.lastIndexOf("/"),s=t.lastIndexOf("/"),i=n>=0?e.slice(0,n):"",a=s>=0?t.slice(0,s):"";return i!==""&&i===a}function J(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=2)}function K(e,t){let n=new Set(t);return[...new Set(e.filter(s=>n.has(s)))].sort()}function U(e){return e.map(t=>t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).join(" + ")}export{ee as a,te as b,w as c,$ as d,F as e};
|
|
2
|
+
//# sourceMappingURL=chunk-SWHMHUKF.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as b,b as y}from"./chunk-IRQOAM5G.js";import{a as R,b as H,c as B,e as h,f as k}from"./chunk-OTOKVOJ3.js";import{a as p,b as g}from"./chunk-NMTSZXCL.js";import{M as v}from"./chunk-ADTBPVUZ.js";function V(e,s={}){let{minSimilarity:m=.45,minSharedBehaviors:i=6,limit:o=20,scope:c,scanLimit:n,filePattern:d,focusFiles:f}=s,l=v(e).reactProfiles({scope:c,minBehaviorTokens:Math.max(3,i),scanLimit:n}).map(r=>({file:r.file,component:r.name,tokens:r.behaviorTokens,profile:r})),t=b(l,r=>r.tokens);return y({profiles:l,limit:o,filePattern:d,focusFiles:f,candidateIndex:t,profile:{name:"react-hook-candidates"},compare:(r,a)=>C(r,a,m,i),sort:(r,a)=>a.similarity-r.similarity||r.fileA.localeCompare(a.fileA)||r.componentA.localeCompare(a.componentA)||r.fileB.localeCompare(a.fileB)||r.componentB.localeCompare(a.componentB)})}function C(e,s,m,i){let o=p(e.tokens,s.tokens);if(o.size<i||!E(o))return null;let c=H(e.tokens,s.tokens);if(c<m)return null;let n=h(o,"hook:"),d=h(o,"react-hook:"),f=h(o,"effect:"),l=h(o,"state:"),t=h(o,"request:"),r=h(o,"handler:"),a=h(o,"handler-verb:"),u=A({sharedHooks:n,sharedReactHooks:d,sharedEffects:f,sharedState:l,sharedRequests:t,sharedHandlers:r,sharedHandlerVerbs:a});return{fileA:e.file,componentA:e.component,fileB:s.file,componentB:s.component,similarity:c,tokenCountA:e.tokens.size,tokenCountB:s.tokens.size,sharedTokens:k(o),sharedHooks:n,sharedReactHooks:d,sharedEffects:f,sharedState:l,sharedRequests:t,sharedHandlers:r,sharedHandlerVerbs:a,evidenceClass:u.evidenceClass,actionTier:u.actionTier,evidenceClassReasons:u.reasons,recommendation:u.recommendation,uniqueToA:k(g(e.tokens,s.tokens)).slice(0,25),uniqueToB:k(g(s.tokens,e.tokens)).slice(0,25),reason:P({sharedHooks:n,sharedReactHooks:d,sharedEffects:f,sharedState:l,sharedRequests:t,sharedHandlers:r,sharedHandlerVerbs:a}),locA:e.profile.loc,locB:s.profile.loc}}function A(e){return R({genericWords:q,stripPrefixes:w,primitiveGroups:[{values:e.sharedReactHooks,reasonPrefix:"shared React primitives",bucket:"generic"},{values:e.sharedEffects,reasonPrefix:"shared lifecycle primitive",bucket:"generic"}],nameGroups:[{names:e.sharedHooks,label:"shared hook",fallbackBucket:"shared-abstraction"},{names:e.sharedRequests,label:"shared request",fallbackBucket:"generic"},{names:e.sharedState,label:"shared state",fallbackBucket:"generic"},{names:e.sharedHandlers,label:"shared handler",fallbackBucket:"generic"},{names:e.sharedHandlerVerbs,label:"shared action verb",fallbackBucket:"generic"}],recommendation:S})}function S(e){switch(e){case"domain-behavior":return"Review for a shared hook, controller, or feature module around the named domain behavior.";case"mixed":return"Separate generic React mechanics from domain-specific behavior before extracting a shared hook.";case"shared-abstraction":return"Review the existing shared hook usage first; extract only if duplicated behavior remains outside it.";case"generic-workflow-scaffolding":return"Treat as support evidence for a repeated workflow shape, not direct hook-extraction evidence."}}function E(e){let s=0,m=0,i=0,o=0,c=0,n=0,d=0;for(let t of e)t.startsWith("hook:")?s+=1:t.startsWith("react-hook:")?m+=1:t.startsWith("effect:")?i+=1:t.startsWith("request:")?o+=1:t.startsWith("handler:")||t.startsWith("handler-verb:")?c+=1:t.startsWith("state:")?n+=1:t.startsWith("state-hook:")&&(d+=1);let f=n+d,l=s+m+i+o+c+f;return B([{name:"requests",count:o},{name:"customHooks",count:s},{name:"namedStates",count:n},{name:"handlers",count:c},{name:"effects",count:i},{name:"reactHooks",count:m},{name:"namedBehavior",count:l}],[{min:{requests:1,namedBehavior:4},reason:"shared request workflow"},{min:{customHooks:1,requests:1,namedBehavior:5},reason:"shared custom hook and request workflow"},{min:{customHooks:1,namedStates:1,namedBehavior:5},reason:"shared custom hook and state"},{min:{customHooks:1,handlers:2,namedBehavior:5},reason:"shared custom hook and handlers"},{min:{namedStates:1,handlers:2,effects:1,namedBehavior:5},reason:"shared stateful effects"},{min:{namedStates:1,handlers:2,reactHooks:2,namedBehavior:5},reason:"shared stateful React primitives"}]).pass}function P(e){let s=[];return e.sharedHooks.length&&s.push(`shared hooks: ${e.sharedHooks.join(", ")}`),e.sharedReactHooks.length&&s.push(`shared React hooks: ${e.sharedReactHooks.join(", ")}`),e.sharedEffects.length&&s.push(`shared effects: ${e.sharedEffects.join(", ")}`),e.sharedState.length&&s.push(`shared state: ${e.sharedState.join(", ")}`),e.sharedRequests.length&&s.push(`shared requests: ${e.sharedRequests.join(", ")}`),e.sharedHandlers.length&&s.push(`shared handlers: ${e.sharedHandlers.slice(0,6).join(", ")}`),e.sharedHandlerVerbs.length&&s.push(`shared action verbs: ${e.sharedHandlerVerbs.slice(0,6).join(", ")}`),s.join("; ")||"shared React behavior profile"}var q=new Set(["add","apply","async","callback","cancel","change","clear","close","create","data","delete","draft","edit","effect","error","fetch","filter","form","handle","has","is","item","items","load","loader","loading","memo","name","open","reducer","refresh","ref","remove","request","reset","resource","row","rows","save","saving","search","select","selected","state","store","submit","toggle","update","use","value"]),w=[/^use(?=[A-Z])/,/^handle(?=[A-Z])/,/^is(?=[A-Z])/,/^has(?=[A-Z])/];export{V as a};
|
|
2
|
+
//# sourceMappingURL=chunk-SYDJMPES.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as j}from"./chunk-MOVBWNIP.js";import{d as D}from"./chunk-FETNQCFO.js";var y=["execution","runtime","dataflow","state","temporal","contract","identity","ownership","dependencies"];import{createHash as ie}from"crypto";var Q=[{id:"general-interprocedural-value-flow",families:["dataflow"],capability:"Whole-program definition-use flow through arbitrary calls and returns is unavailable.",consequence:"Missing dataflow edges cannot establish that a value never crosses an unmodeled call.",recoverWith:["value-flow","dependence-slice","inspect","code"]},{id:"heap-aliasing",families:["dataflow","state"],capability:"Heap points-to and cross-instance alias analysis are unavailable.",consequence:"Missing field or state edges cannot establish that two references never reach the same object.",recoverWith:["value-flow","dependence-slice","inspect","code"]},{id:"exceptional-flow",families:["execution","dataflow","temporal"],capability:"Interprocedural exception propagation and finally completion flow are unavailable.",consequence:"Normal-path reachability and ordering do not establish behavior after a throw or rejection.",recoverWith:["dependence-slice","inspect","code"]},{id:"reflection",families:["execution","runtime","identity","dependencies"],capability:"Reflective lookup, dynamic loading, and name-computed invocation are unavailable without exact evidence.",consequence:"Missing static edges cannot establish that a construct is unreachable through reflection.",recoverWith:["search","inspect","code"]},{id:"generated-dispatch",families:["execution","runtime","identity"],capability:"Dispatch tables or names created only by generated or unavailable source are unavailable.",consequence:"Missing dispatch edges cannot establish that no generated consumer exists.",recoverWith:["search","inspect","code"]},{id:"unsupported-framework-adapters",families:["runtime","dataflow","state","temporal"],capability:"Framework runtime crossings without a registered source adapter are unavailable.",consequence:"Missing boundary edges cannot establish that no producer, consumer, state effect, or ordering exists.",recoverWith:["search","inspect","code"]}];function Z(e){let t=new Set(e);return Q.filter(n=>n.families.some(a=>t.has(a)))}function $(e){return Z(e).map(t=>`[${t.id}] ${t.capability} ${t.consequence} Recover selected paths with: ${t.recoverWith.map(n=>`codebaseiq ${n}`).join(", ")}.`)}var ee=["incoming","outgoing","both"];function h(e,t,n,a={}){return{family:e,subtype:t,...a.match?{match:a.match}:{},directions:ee,evidenceStrengths:a.strengths??["exact","derived","mixed"],supportCeiling:a.supportCeiling??"partial",establishes:n,nonClaims:a.nonClaims??[],recoverWith:a.recoverWith??["inspect","code"]}}var te=["predicate-consequence","predicate-alternative","predicate-fallthrough","predicate-case","predicate-default","predicate-return","predicate-throw","loop-iteration","loop-exit","exception-handler","finally-cleanup","handler-return","handler-throw"],ne=["captured-value-to-state","constant-to-state","expression-to-state","property-to-state","return-to-state","value-to-state"],re=["await-completion-before","awaits-completion","inside-lock-scope","lexical-successor"],oe=[{id:"indexed-program-identity",label:"SCIP/compiler identity and source ownership",requirements:["indexed-graph"],relations:[h("execution","call","The source construct may call the resolved target.",{nonClaims:["Static may-call reachability does not prove that an invocation occurred at runtime."],recoverWith:["call-graph","inspect","code"]}),h("execution","result-callback","The referenced callable can produce the result consumed by this path.",{nonClaims:["A callback relationship does not prove invocation order or runtime selection."],recoverWith:["call-graph","inspect","code"]}),h("contract","uses-contract-symbol","The source construct refers to the identified contract symbol.",{supportCeiling:"exact",nonClaims:["Contract identity does not prove runtime invocation or behavioral conformance."],recoverWith:["hierarchy","inspect","code"]}),h("identity","references","The occurrence resolves to the identified compiler-owned symbol.",{supportCeiling:"exact",nonClaims:["A reference does not establish execution or value transfer."],recoverWith:["refs","trace","inspect"]}),h("ownership","contains","The owner contains the identified program construct.",{supportCeiling:"exact",nonClaims:["Structural containment does not establish runtime lifetime or sharing scope."],recoverWith:["outline","inspect"]}),h("ownership","contains-","The owner contains the identified program construct.",{match:"prefix",supportCeiling:"exact",nonClaims:["Structural containment does not establish runtime lifetime or sharing scope."],recoverWith:["outline","inspect"]}),h("ownership","owns-","The owner owns the identified source or runtime observation.",{match:"prefix",supportCeiling:"exact",nonClaims:["Observation ownership does not establish singleton lifetime or exclusive ownership."],recoverWith:["inspect","code"]}),h("dependencies","imports","The source file or module statically imports the indexed target.",{nonClaims:["An import does not establish that imported code executes."],recoverWith:["imports","deps","code"]}),h("dependencies","imports-external","The source region statically imports an external package.",{nonClaims:["An external import does not establish which package behavior executes."],recoverWith:["imports","code"]})]},{id:"runtime-boundary-join",label:"source-grounded runtime-boundary joins",requirements:["indexed-graph","source-facts"],relations:[h("runtime","runtime-handoff","A producer and consumer share a source-grounded runtime rendezvous.",{strengths:["exact","derived","candidate","mixed"],nonClaims:["A candidate or unresolved join does not prove a runtime handoff."],recoverWith:["evidence","inspect","code"]}),h("runtime","discriminator-dispatch","A serialized discriminator selects the reported consumer.",{strengths:["exact","derived","mixed"],nonClaims:["The dispatch edge does not prove delivery, retry, or successful handling."],recoverWith:["evidence","inspect","code"]}),h("dataflow","serialized-discriminator-transfer","The producer serializes the discriminator consumed by dispatch.",{strengths:["exact","derived","mixed"],nonClaims:["This edge does not establish the flow of every payload field."],recoverWith:["value-flow","inspect","code"]}),h("temporal","enqueue-before-consume","The reported enqueue precedes a possible consume through the queue.",{strengths:["exact","derived","mixed"],nonClaims:["Queue order does not establish delivery time, uniqueness, retry count, or durability."],recoverWith:["evidence","inspect","code"]})]},{id:"parser-control-dependence",label:"parser-proved intraprocedural control dependence",requirements:["indexed-graph","source-facts"],relations:[...te.map(e=>h("execution",e,"The outcome is control-dependent on the reported predicate or handler.",{strengths:["exact"],nonClaims:["Local control dependence does not establish that the containing function executes."],recoverWith:["dependence-slice","inspect","code"]})),h("execution","returns","The selected construct contains the reported return terminal.",{strengths:["exact"],nonClaims:["A local return terminal does not establish that the containing callable executes."],recoverWith:["inspect","code"]}),h("execution","throws","The selected construct contains the reported throw terminal.",{strengths:["exact"],nonClaims:["A local throw terminal does not establish propagation, handling, or callable execution."],recoverWith:["inspect","code"]})]},{id:"bounded-static-value-flow",label:"compiler callsites and bounded static value evaluation",requirements:["indexed-graph","source-facts"],relations:[...["argument-to-parameter","constant-to-parameter","property-to-parameter","return-to-parameter","return-to-call-result"].map(e=>h("dataflow",e,"The reported value may reach the target through the evidenced callsite transfer.",{strengths:["exact","derived","mixed"],nonClaims:["This provider does not establish general local definition-use, alias, field, or heap flow."],recoverWith:["value-flow","dependence-slice","inspect","code"]}))]},{id:"typescript-local-dependence",label:"TypeScript compiler identities, control-flow graph, and reaching definitions",requirements:["typescript-semantic"],relations:[h("dataflow","definition-to-use","The definition reaches the reported read on a feasible local control-flow path.",{strengths:["exact"],nonClaims:["Local reaching definitions do not establish heap aliasing, exceptional flow, or the runtime order of closure invocation."],recoverWith:["value-flow","dependence-slice","inspect","code"]}),h("dataflow","value-to-definition","The reported right-hand-side read supplies the assigned local definition.",{strengths:["exact"],nonClaims:["A local assignment edge does not establish field or heap points-to flow."],recoverWith:["value-flow","dependence-slice","inspect","code"]}),h("dataflow","closure-capture","The nested callable reads the reported binding from an enclosing callable.",{strengths:["candidate"],supportCeiling:"candidate",nonClaims:["Closure capture does not establish whether or when the nested callable executes."],recoverWith:["call-graph","inspect","code"]}),h("dataflow","field-definition-to-use","The reported same-owner field definition can reach the field read.",{strengths:["exact","candidate"],nonClaims:["Field-name identity does not establish whole-program heap aliasing or cross-instance flow."],recoverWith:["value-flow","dependence-slice","inspect","code"]}),h("execution","control-dependence","Execution of the reported statement depends on the outcome of the predicate.",{strengths:["exact"],nonClaims:["Intraprocedural control dependence does not establish that the containing callable executes."],recoverWith:["dependence-slice","inspect","code"]})]},{id:"parser-state-temporal",label:"parser-proved local state and temporal facts",requirements:["indexed-graph","source-facts"],relations:[...ne.map(e=>h("dataflow",e,"The reported source value is assigned into the identified state resource.",{strengths:["exact"],nonClaims:["The edge does not establish alias, heap, or later read flow."],recoverWith:["value-flow","inspect","code"]})),...["writes-resource","deletes-resource","reads-resource","enqueues-resource","consumes-resource"].map(e=>h("state",e,"The reported construct performs the named operation on the identified resource.",{strengths:["exact"],nonClaims:["A state operation does not establish transactionality, durability, or exclusive ownership."],recoverWith:["evidence","inspect","code"]})),...re.map(e=>h("temporal",e,"The reported source constructs have the named local ordering relationship.",{strengths:["exact"],nonClaims:["Local source order does not establish cross-process happens-before or durable completion."],recoverWith:["evidence","inspect","code"]}))]}];function q(e,t){let n=oe.flatMap(a=>a.relations.filter(r=>r.family===e&&(r.match==="prefix"?t.startsWith(r.subtype):t===r.subtype)).map(r=>({provider:a,relation:r})));if(n.length>1)throw new Error(`Ambiguous graph relation provider for ${e}/${t}: ${n.map(a=>a.provider.id).join(", ")}`);return n[0]??null}var Ne=["causal","structure","complete"],ae={causal:["execution","runtime","dataflow","state","temporal"],structure:["contract","identity","ownership","dependencies"],complete:y},se=2,ce=48,k=64,de=5e4;function We(e,t,n={}){let a=E([...t.symbols??[],...t.locations??[]]),r=E(t.searches??[]);if(a.length===0&&r.length===0)throw new Error("evidence requires at least one positional symbol, --symbol, --at, or --search selector.");let o=n.view??"causal",i=le(n.families,o),s=n.direction??"both",u=E(n.subtypes??[]),l=n.connecting??!1,c=n.inventoryOnly??!1,p=E(n.foldIds??[]),g=n.maxDepth??se,f=n.maxEdges??ce;if(!Number.isSafeInteger(g)||g<0)throw new RangeError(`Evidence depth must be a non-negative safe integer; received ${g}.`);if(!Number.isSafeInteger(f)||f<=0)throw new RangeError(`Evidence max edges must be a positive safe integer; received ${f}.`);if(!["incoming","outgoing","both"].includes(s))throw new Error(`Unsupported graph evidence direction: ${s}.`);if(c&&p.length>0)throw new Error("Evidence fold materialization cannot be combined with --inventory-only.");let m=j(e,{symbols:a,searches:r,maxDepth:g,maxTopologyCharacters:de,relations:pe(i)}),R=new Map(m.nodes.map(d=>[d.id,d])),b=m.edges.filter(d=>d.disposition==="emitted"||d.disposition==="folded").flatMap(d=>ue(d,R)),v=b.filter(d=>i.includes(d.family)).filter(d=>u.length===0||u.includes(d.subtype)),x=new Set(m.anchors.flatMap(d=>d.nodeIds));if(l&&x.size<2)throw new Error("Connecting evidence requires at least two resolved root nodes.");let S=new Set(v.map(d=>d.id)),_=A(b,x,"incoming").filter(d=>S.has(d.id)),F=A(b,x,"outgoing").filter(d=>S.has(d.id)),O=A(b,x,"both").filter(d=>S.has(d.id)),B=ve(i,u,_,F,O),M=s==="incoming"?_:s==="outgoing"?F:O,N=l?Re(M,[...x],s):M,z=Ce(N,x,s),w=[...N].sort((d,X)=>Te(d,X,z)),W=ye(w,f),Y=be(W,p),G=c?[]:p.length>0?w.filter(d=>Y.has(d.id)):w,C=p.length>0?G:G.slice(0,f),K=p.length>0||c?[]:W,T=Math.max(0,G.length-C.length),J=m.frontiers.filter(d=>d.disposition==="unsupported").length,I=m.coverage.status==="incomplete"?"incomplete":T>0?"bounded":"accounted";return{kind:"graph",view:n.families&&n.families.length>0?"custom":o,families:i,selection:{direction:s,subtypes:u,connecting:l,inventoryOnly:c,foldIds:p},targets:m.anchors.map(d=>({kind:d.kind,query:d.query,status:d.status,nodeIds:[...d.nodeIds],omittedCandidates:d.omittedCandidates})),inventory:B,edges:C,folds:K,coverage:{status:I,topologyStatus:m.coverage.status,scope:m.coverage.scope,maxDepth:g,maxEdges:f,matchedEdges:w.length,eligibleEdges:G.length,returnedEdges:C.length,omittedEdges:T,frontierGroups:m.frontiers.length,unsupportedFrontiers:J,blindSpots:E([...m.coverage.blindSpots,...$(i)]),explanation:c?`${w.length} relationship(s) match the explicit projection; only exact inventory counts were requested.`:p.length>0?`Every relationship in ${p.length} explicitly selected recoverable fold(s) was emitted.`:I==="accounted"?"Every selected relationship in the bounded topology was emitted.":I==="bounded"?`${T} selected relationship(s) were withheld by the explicit edge budget.`:m.coverage.explanation}}}function le(e,t){let n=e&&e.length>0?e:ae[t],a=n.filter(r=>!y.includes(r));if(a.length>0)throw new Error(`Unsupported graph evidence family: ${a.join(", ")}.`);return E(n)}function pe(e){return["call","contract-symbol","import","reference","runtime-boundary"]}function ue(e,t){let n=t.get(e.fromNodeId),a=t.get(e.toNodeId);return!n||!a?[]:(e.semantics??[]).flatMap((r,o)=>{let i=ge(r);if(!i)return[];let s=q(i,r.subtype);if(!s)throw new Error(`No graph relation provider contract is registered for ${i}/${r.subtype}.`);let u=fe(e);if(!s.relation.evidenceStrengths.includes(u))throw new Error(`Graph relation provider ${s.provider.id} does not admit ${u} evidence for ${i}/${r.subtype}.`);return[{id:`${e.id}:${o}:${i}`,family:i,semanticFamily:r.family,subtype:r.subtype,from:L(n),to:L(a),sourceKind:e.kind,providerId:s.provider.id,supportCeiling:s.relation.supportCeiling,establishes:s.relation.establishes,nonClaims:[...s.relation.nonClaims],recoverWith:[...s.relation.recoverWith],evidenceStrength:u,evidenceMethods:E(e.evidence.map(l=>l.method)),evidenceConstituents:he(e.evidence),context:r.context?{...r.context}:null,attributes:r.attributes?{...r.attributes}:null}]})}function he(e){let t=new Map;for(let n of e)t.set(`${n.method}\0${n.strength}`,n);return[...t.values()].map(({method:n,strength:a})=>({method:n,strength:a}))}function ge(e){switch(e.family){case"control":return e.context?.crossesRuntimeBoundary===!0||e.subtype==="runtime-handoff"?"runtime":"execution";case"data":return"dataflow";case"state":return"state";case"temporal":return"temporal";case"contract":return"contract";case"identity":return e.subtype.startsWith("contains")||e.subtype.startsWith("owns-")?"ownership":e.subtype.startsWith("import")?"dependencies":"identity"}}function L(e){let t=me(e);return{id:e.id,kind:e.kind,label:t?D(t):e.label,symbol:t,location:e.location?{...e.location}:null}}function me(e){return e.kind!=="symbol"||!e.id.startsWith("symbol:")?null:decodeURIComponent(e.id.slice(7))}function fe(e){let t=E(e.evidence.map(n=>n.strength));return t.length===1?t[0]:t.includes("exact")&&t.every(n=>n==="exact"||n==="derived")?"mixed":t.includes("candidate")?"candidate":t.includes("unknown")||t.length===0?"unknown":"mixed"}function A(e,t,n){let a=P(e,n),r=new Map,o=new Map,i=[...t].sort();for(let s of i)o.set(s,0);for(let s=0;s<i.length;s+=1){let u=i[s],l=o.get(u);for(let c of a.get(u)??[])r.set(c.edge.id,c.edge),!o.has(c.next)&&(o.set(c.next,l+1),i.push(c.next))}return[...r.values()]}function P(e,t){let n=new Map,a=(r,o,i)=>{let s=n.get(r)??[];s.push({edge:i,next:o}),n.set(r,s)};for(let r of e)t!=="incoming"&&a(r.from.id,r.to.id,r),t!=="outgoing"&&a(r.to.id,r.from.id,r);for(let r of n.values())r.sort((o,i)=>o.edge.id.localeCompare(i.edge.id)||o.next.localeCompare(i.next));return n}function ve(e,t,n,a,r){let o=new Set;for(let c of[...n,...a,...r])o.add(`${c.family}\0${c.subtype}`);if(t.length>0)for(let c of e)for(let p of t)o.add(`${c}\0${p}`);let i=c=>{let p=new Map;for(let g of c){let f=`${g.family}\0${g.subtype}`;p.set(f,(p.get(f)??0)+1)}return p},s=i(n),u=i(a),l=i(r);return[...o].map(c=>{let[p,g]=c.split("\0");return{family:p,subtype:g,incoming:s.get(c)??0,outgoing:u.get(c)??0,both:l.get(c)??0}}).sort((c,p)=>y.indexOf(c.family)-y.indexOf(p.family)||c.subtype.localeCompare(p.subtype))}function ye(e,t){let n=e.slice(t),a=new Map;for(let i of n){let s=Ee(i),u=`${i.family}\0${s}`,l=a.get(u)??[];l.push(i),a.set(u,l)}let r=new Map(e.map((i,s)=>[i.id,s+1])),o=[];for(let[i,s]of[...a].sort(([u],[l])=>u.localeCompare(l))){let[u,l]=i.split("\0"),c=[...s].sort((p,g)=>p.id.localeCompare(g.id));for(let p=0;p<c.length;p+=k){let g=c.slice(p,p+k),f=g.map(v=>v.id),m=E(g.map(v=>v.subtype)).sort(),R=m.length===1?m[0]:"mixed",b=[...new Set(g.flatMap(v=>[v.from.id,v.to.id]))].sort();o.push({id:Ge(u,m.join("\0"),f),mode:xe(g),family:u,subtype:R,subtypes:m,region:l,edgeCount:f.length,edgeIds:f,nodeIds:b,minimumMaxEdges:Math.max(...f.map(v=>r.get(v)??e.length))})}}return o.sort((i,s)=>y.indexOf(i.family)-y.indexOf(s.family)||(i.region??"").localeCompare(s.region??"")||i.id.localeCompare(s.id))}function Ee(e){let t=e.from.location?.file??`kind:${e.from.kind}`,n=e.to.location?.file??`kind:${e.to.kind}`;return t===n?t:`${t} -> ${n}`}function be(e,t){if(t.length===0)return new Set;let n=new Map(e.map(r=>[r.id,r])),a=t.filter(r=>!n.has(r));if(a.length>0){let r=e.map(o=>o.id).sort();throw new Error(`Unknown evidence fold ${a.join(", ")} for this projection. Available folds: ${r.join(", ")||"(none)"}.`)}return new Set(t.flatMap(r=>n.get(r).edgeIds))}function xe(e){let t=new Map,n=new Map,a=new Set;for(let o of e){a.add(o.from.id),a.add(o.to.id);let i=t.get(o.from.id)??new Set;i.add(o.to.id),t.set(o.from.id,i);let s=n.get(o.to.id)??new Set;s.add(o.from.id),n.set(o.to.id,s)}return we(a,t)?"scc":[...a].every(o=>(n.get(o)?.size??0)<=1&&(t.get(o)?.size??0)<=1)?"linear":"topology"}function we(e,t){let n=new Set,a=new Set,r=o=>{if(n.has(o))return!0;if(a.has(o))return!1;n.add(o);for(let i of t.get(o)??[])if(r(i))return!0;return n.delete(o),a.add(o),!1};return[...e].some(r)}function Ge(e,t,n){return`fold:${ie("sha256").update([e,t,...n].join("\0")).digest("hex").slice(0,16)}`}function Re(e,t,n){let a=new Map,r=[...new Set(t)].sort();for(let o=0;o<r.length;o+=1)for(let i=o+1;i<r.length;i+=1)for(let s of Se(e,r[o],r[i],n))a.set(s.id,s);return[...a.values()]}function Se(e,t,n,a){let r=P(e,a),o=new Map([[t,0]]),i=new Map,s=[t];for(let l=0;l<s.length;l+=1){let c=s[l],p=o.get(c);if(c!==n)for(let g of r.get(c)??[])o.has(g.next)||(o.set(g.next,p+1),i.set(g.next,{node:c,edge:g.edge}),s.push(g.next))}if(!o.has(n))return[];let u=[];for(let l=n;l!==t;){let c=i.get(l);if(!c)return[];u.push(c.edge),l=c.node}return u.reverse()}function Ce(e,t,n){let a=P(e,n),r=new Map,o=[...t];for(let i of t)r.set(i,0);for(let i=0;i<o.length;i+=1){let s=o[i],u=r.get(s);for(let{next:l}of a.get(s)??[])r.has(l)||(r.set(l,u+1),o.push(l))}return r}function Te(e,t,n){return H(e,n)-H(t,n)||U(e)-U(t)||V(e.evidenceStrength)-V(t.evidenceStrength)||y.indexOf(e.family)-y.indexOf(t.family)||e.from.label.localeCompare(t.from.label)||e.to.label.localeCompare(t.to.label)||e.subtype.localeCompare(t.subtype)||e.id.localeCompare(t.id)}function H(e,t){return Math.min(t.get(e.from.id)??Number.MAX_SAFE_INTEGER,t.get(e.to.id)??Number.MAX_SAFE_INTEGER)}function U(e){let t=[e.from,e.to].filter(n=>n.kind==="structural-region").length;return t===2?2:t}function V(e){switch(e){case"exact":return 0;case"mixed":return 1;case"derived":return 2;case"candidate":return 3;case"unknown":return 4}}function E(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))]}export{y as a,Ne as b,We as c};
|
|
2
|
+
//# sourceMappingURL=chunk-SZD2KF7Q.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{c as p}from"./chunk-4WKDMDEW.js";import{b as D}from"./chunk-B75HZHUP.js";import{a as m}from"./chunk-BGBBVSH4.js";import{d as g,u as B}from"./chunk-FETNQCFO.js";import{b as f}from"./chunk-O6QTXQPJ.js";import{v as y,y as d}from"./chunk-BMYOV5GP.js";import{createHash as A}from"crypto";var h=3;function H(e,t={}){let{scope:o,maxLoc:n=15,minLoc:i=h,limit:r,scanLimit:s}=t,l=p(e),u=L(e,{scope:o,maxLoc:n,scanLimit:s}).map(a=>x(e,a,l,i)).filter(a=>a!==null),c=v(u);return r?c.slice(0,r):c}function M(e,t,o={}){let{scope:n,maxLoc:i=15,minLoc:r=h,scanLimit:s}=o,l=p(e),u=L(e,{scope:n,maxLoc:i,scanLimit:s}).map(a=>x(e,a,l,r)).filter(a=>a!==null),c=u.find(a=>a.symbol===t);return c?u.filter(a=>a.symbol!==c.symbol&&a.normalizedBody===c.normalizedBody&&a.file!==c.file).sort(z).map(({normalizedBody:a,...C})=>C):[]}function I(e){let t=S(e);return f(t).replace(/\s+/g,"")}function v(e){let t=new Map;for(let n of e){if(n.normalizedBody.length<8)continue;let i=F(n.normalizedBody),r=t.get(i)??[];r.push(n),t.set(i,r)}let o=[];for(let[n,i]of t){let r=new Set(i.map(l=>l.file));if(i.length<2||r.size<2)continue;let s=[...i].sort(z).map(({normalizedBody:l,...u})=>u);o.push({hash:n,canonical:s[0],functions:s})}return o.sort((n,i)=>{let r=i.functions.length-n.functions.length;if(r!==0)return r;let s=b(i)-b(n);return s!==0?s:n.canonical.file.localeCompare(i.canonical.file)}),o}function L(e,t){let o=B(e,{scope:t.scope}).filter(n=>n.isFunctionLike&&!e.isIgnored(n.relativePath)).filter(n=>!d(e,n.relativePath,n.startLine,"similar")).filter(n=>m(n)<=t.maxLoc);return o.sort((n,i)=>m(i)-m(n)||n.relativePath.localeCompare(i.relativePath)),D(o,t.scanLimit)}function x(e,t,o,n){let i=E(e,t);if(!i||W(i)<n)return null;let r=P(e,t);return r?{symbol:t.symbol,shortName:g(t.symbol),file:t.relativePath,startLine:t.startLine,endLine:t.endLine,loc:m(t),ageCommits:o?.get(t.relativePath)?.commitsAgo??null,normalizedBody:r}:null}function P(e,t){let o=E(e,t);return o&&I(o)||null}function E(e,t){let o=y(e,t.relativePath);return o.length===0?null:o.slice(t.startLine,t.endLine+1).join(`
|
|
2
|
+
`)}function S(e){let t=e.indexOf("{"),o=e.lastIndexOf("}");if(t>=0&&o>t)return e.slice(t+1,o);let n=e.indexOf("=>");return n>=0?e.slice(n+2).replace(/;+\s*$/,""):e}function W(e){return S(e).split(/\r?\n/).map(o=>o.trim()).filter(o=>o.length>0).length}function F(e){return A("sha256").update(e).digest("hex").slice(0,16)}function z(e,t){let o=e.ageCommits??-1;return(t.ageCommits??-1)-o||e.file.localeCompare(t.file)||e.startLine-t.startLine}function b(e){return e.functions.reduce((t,o)=>t+o.loc,0)}export{H as a,M as b,I as c,v as d,P as e,E as f,S as g};
|
|
3
|
+
//# sourceMappingURL=chunk-T3DGWPXM.js.map
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import{a as ee,c as te}from"./chunk-VFY6Y2H6.js";import{a as Tn}from"./chunk-ILMHV3KM.js";import{a as Kt,b as Zt,d as Ue,e as rn}from"./chunk-PYAB5SM6.js";import{P as Qt,Q as Vt,R as Xt,T as Yt,X as jn,Y as Je,a as vt,b as It,c as se,d as fe,e as Jt,g as zt}from"./chunk-NCZUNH3E.js";import{a as z,b as pe,c as Z,d as $t,e as Bt,f as Gt,g as Ut,h as Wt}from"./chunk-KUW32IRO.js";import{a as He,c as ye,d as wn,f as _n}from"./chunk-FDGD5AB5.js";import{T as Be}from"./chunk-RU65DDUP.js";import{A as ln,B as un,C as pn,D as gn,E as fn,F as mn,G as We,I as N,J as me,K as hn,M as qe,N as yn,O as Sn,P as he,S as bn,T as Pn,U as xn,c as K,d as de,e as Ae,g as Le,h as _t,i as Dt,j as T,l as Lt,o as F,p as L,q as M,r as Ge,s as en,t as tn,u as nn,v as an,w as on,x as sn,y as cn,z as dn}from"./chunk-QW7EP6WI.js";import{e as ge}from"./chunk-3IER7Q6H.js";import{i as W,j as H,l as Ot,m as $e,n as At,r as qt,s as Ht,u as Rn,x as vn,y as In,z as En}from"./chunk-RDBI2RXU.js";import{i as le,j as q}from"./chunk-R2NOK63J.js";import{a as Rt,b as Y,c as U,d as b}from"./chunk-EF2R3WNQ.js";import{E as Me,O as Ne,S as ue,X as kt,Y as J,_ as Mt,a as Pt,c as Oe,f as X,fa as Nt,g as ie,ga as Ct,h as oe,i as xt,n as Et,o as wt,p as ce,r as I}from"./chunk-WE5RZHZ7.js";import{a as Ce,d as Ft}from"./chunk-6OAHRI2D.js";import{b as jt,c as Tt}from"./chunk-2Q2LW5JW.js";import{createHash as Ci}from"crypto";import{existsSync as _,mkdirSync as Te,mkdtempSync as $i,readdirSync as Fr,renameSync as kr,rmSync as Q,statSync as Bi}from"fs";import{basename as je,dirname as h,extname as Gi,join as E,resolve as Rr}from"path";import{platform as Ui}from"os";import{execFileSync as Hr}from"child_process";import{constants as Jr,copyFileSync as Fn,statSync as zr}from"fs";import{platform as Qr}from"os";var Vr=Object.freeze({size:e=>zr(e).size,clone:Yr,copy:(e,t)=>Fn(e,t)}),Xr=new Set(["ENOSYS","ENOTSUP","EOPNOTSUPP","EINVAL","EXDEV","ENOTTY"]);function C(e,t,n=Vr){let r=n.size(e);try{return n.clone(e,t),{method:"reflink",bytes:r}}catch(a){if(!Zr(a))throw a}return n.copy(e,t),{method:"copy",bytes:r}}function Yr(e,t){if(Qr()!=="darwin"){Fn(e,t,Jr.COPYFILE_FICLONE_FORCE);return}try{Hr("/bin/cp",["-c",e,t],{timeout:6e4,maxBuffer:64*1024,stdio:["ignore","ignore","pipe"],windowsHide:!0})}catch(n){throw Kr(n)}}function Kr(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 Zr(e){let t=e?.code;return t!==void 0&&Xr.has(t)}function kn(){return{reflinkedBytes:0,fallbackCopiedBytes:0}}function $(e,t){t.method==="reflink"?e.reflinkedBytes+=t.bytes:e.fallbackCopiedBytes+=t.bytes}import{dirname as ea,join as ta}from"path";function Dn(e={}){return{id:"runtime-boundaries",facts:["runtime-boundary-observation","runtime-boundary-link"],run:({projectRoot:t,dbPath:n,onStatus:r})=>{let a=new F({projectRoot:t,dbPath:n,indexPath:e.indexPath??ta(ea(n),"index.scip")}),i,o=!1,s=!1;try{let l=e.reuseExisting||e.affectedFiles?Yt(a):null;e.reuseExisting&&l?.extractorVersion===Qt?(i=l,o=!0):(i=Vt(a,{...l?{previousGraph:l}:{},...e.affectedFiles?{affectedFiles:e.affectedFiles}:{}}),s=(i.coverage.filesReused??0)>0)}finally{a.close()}o||Xt(n,i);let d={reused:o,incrementallyUpdated:s,observations:i.observations.length,links:i.links.length,frontiers:i.frontiers.length,filesScanned:i.coverage.filesScanned,errors:i.coverage.extractionErrors.length,phases:i.coverage.phases};return r?.(d.reused?`Reused ${d.observations} cached runtime-boundary observation(s) and ${d.links} link(s).`:d.incrementallyUpdated?`Incrementally refreshed runtime-boundary observations (${d.filesScanned-(i.coverage.filesReused??0)} file(s) extracted, ${i.coverage.filesReused??0} reused) and rebuilt ${d.links} link(s).`:`Extracted ${d.observations} runtime-boundary observation(s), ${d.links} link(s), and ${d.frontiers} unresolved frontier(s).`),!o&&i.coverage.phases&&r?.(`Runtime-boundary phases: ${i.coverage.phases.map(l=>`${l.id} ${l.durationMs.toFixed(0)}ms`).join(", ")}.`),d}}}import{createHash as ra}from"crypto";import{existsSync as aa}from"fs";import{dirname as ia,join as An}from"path";function ze(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 Se(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 a=new Set(n),i=ze(e),o=new Set(i.reasons);return r.some(s=>!a.has(s))&&o.add("changed-file-outside-project"),t===null?(o.add("dependency-graph-unavailable"),On(r,a,o)):o.size>0?On(r,a,o):{mode:"closure",changedFiles:r,affectedFiles:na(r,t,a),reasons:[]}}function On(e,t,n){return{mode:"full-project",changedFiles:e,affectedFiles:[...t].sort(),reasons:[...n].sort()}}function na(e,t,n){let r=new Map;for(let[o,s]of t)if(n.has(o))for(let d of s){if(!n.has(d))continue;let l=r.get(d)??new Set;l.add(o),r.set(d,l)}let a=new Set(e),i=[...e];for(let o=0;o<i.length;o+=1){let s=i[o];if(s!==void 0)for(let d of r.get(s)??[])a.has(d)||(a.add(d),i.push(d))}return[...a].sort()}var oa="<global-symbols>";function sa(e){let t=[];for(let n of e.all(`
|
|
2
|
+
SELECT relative_path, language, position_encoding, text
|
|
3
|
+
FROM documents
|
|
4
|
+
`))t.push({relativePath:n.relative_path,kind:"document",values:[n.language,n.position_encoding,n.text]});for(let n of e.all(`
|
|
5
|
+
SELECT d.relative_path,
|
|
6
|
+
c.chunk_index,
|
|
7
|
+
c.start_line,
|
|
8
|
+
c.end_line,
|
|
9
|
+
hex(c.occurrences) AS occurrences_hex
|
|
10
|
+
FROM chunks c
|
|
11
|
+
JOIN documents d ON d.id = c.document_id
|
|
12
|
+
`))t.push({relativePath:n.relative_path,kind:"chunk",values:[n.chunk_index,n.start_line,n.end_line,n.occurrences_hex]});for(let n of e.all(`
|
|
13
|
+
SELECT d.relative_path,
|
|
14
|
+
r.start_line,
|
|
15
|
+
r.start_char,
|
|
16
|
+
r.end_line,
|
|
17
|
+
r.end_char,
|
|
18
|
+
g.symbol,
|
|
19
|
+
g.display_name,
|
|
20
|
+
g.kind,
|
|
21
|
+
g.documentation,
|
|
22
|
+
CASE WHEN g.signature IS NULL THEN NULL ELSE hex(g.signature) END AS signature_hex,
|
|
23
|
+
g.enclosing_symbol,
|
|
24
|
+
CASE WHEN g.relationships IS NULL THEN NULL ELSE hex(g.relationships) END AS relationships_hex
|
|
25
|
+
FROM defn_enclosing_ranges r
|
|
26
|
+
JOIN documents d ON d.id = r.document_id
|
|
27
|
+
JOIN global_symbols g ON g.id = r.symbol_id
|
|
28
|
+
`))t.push({relativePath:n.relative_path,kind:"definition",values:Qe(n,[n.start_line,n.start_char,n.end_line,n.end_char])});for(let n of e.all(`
|
|
29
|
+
SELECT d.relative_path,
|
|
30
|
+
c.chunk_index,
|
|
31
|
+
m.role,
|
|
32
|
+
g.symbol,
|
|
33
|
+
g.display_name,
|
|
34
|
+
g.kind,
|
|
35
|
+
g.documentation,
|
|
36
|
+
CASE WHEN g.signature IS NULL THEN NULL ELSE hex(g.signature) END AS signature_hex,
|
|
37
|
+
g.enclosing_symbol,
|
|
38
|
+
CASE WHEN g.relationships IS NULL THEN NULL ELSE hex(g.relationships) END AS relationships_hex
|
|
39
|
+
FROM mentions m
|
|
40
|
+
JOIN chunks c ON c.id = m.chunk_id
|
|
41
|
+
JOIN documents d ON d.id = c.document_id
|
|
42
|
+
JOIN global_symbols g ON g.id = m.symbol_id
|
|
43
|
+
`))t.push({relativePath:n.relative_path,kind:"mention",values:Qe(n,[n.chunk_index,n.role])});for(let n of e.all(`
|
|
44
|
+
SELECT g.symbol,
|
|
45
|
+
g.display_name,
|
|
46
|
+
g.kind,
|
|
47
|
+
g.documentation,
|
|
48
|
+
CASE WHEN g.signature IS NULL THEN NULL ELSE hex(g.signature) END AS signature_hex,
|
|
49
|
+
g.enclosing_symbol,
|
|
50
|
+
CASE WHEN g.relationships IS NULL THEN NULL ELSE hex(g.relationships) END AS relationships_hex
|
|
51
|
+
FROM global_symbols g
|
|
52
|
+
WHERE NOT EXISTS (
|
|
53
|
+
SELECT 1 FROM defn_enclosing_ranges r WHERE r.symbol_id = g.id
|
|
54
|
+
) AND NOT EXISTS (
|
|
55
|
+
SELECT 1 FROM mentions m WHERE m.symbol_id = g.id
|
|
56
|
+
)
|
|
57
|
+
`))t.push({relativePath:oa,kind:"global-symbol",values:Qe(n)});return ca(t)}function ca(e){let t=new Map;for(let r of e){let a=JSON.stringify([r.kind,r.values]),i=t.get(r.relativePath)??[];i.push(a),t.set(r.relativePath,i)}let n=new Map;for(let[r,a]of[...t].sort(([i],[o])=>i.localeCompare(o))){let i=ra("sha256");for(let o of a.sort())i.update(String(Buffer.byteLength(o))),i.update(":"),i.update(o),i.update(`
|
|
58
|
+
`);n.set(r,i.digest("hex"))}return n}function da(e,t){let n=[],r=[],a=[],i=[],o=new Set([...e.keys(),...t.keys()]);for(let s of[...o].sort()){let d=e.get(s),l=t.get(s);d===void 0?n.push(s):l===void 0?a.push(s):d!==l?r.push(s):i.push(s)}return{addedFiles:n,modifiedFiles:r,deletedFiles:a,changedFiles:[...n,...r,...a].sort(),unchangedFiles:i}}function Ve(e,t,n){let r=new Set(e.affectedFiles),a=new Set(t.changedFiles),i=e.mode==="full-project"?[]:t.changedFiles.filter(d=>!r.has(d)),o=e.affectedFiles.filter(d=>!a.has(d)).sort(),s=t.changedFiles.length-i.length;return{passed:i.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:i,extraFiles:o}}function Xe(e,t=fa){let n=t.wallNow===void 0&&t.monotonicNow===void 0,r=t.monotonicNow??t.now,a=t.wallNow??t.now,i=r(),o=(l,c)=>{let p=r();return Gn(e.refreshResult,l,n?p:a(),Math.max(0,p-i),c)};if(!t.databaseExists(e.previousDbPath))return o("prior-index-unavailable");if(!t.databaseExists(e.candidateDbPath))return o("candidate-index-unavailable");let s=null,d=null;try{s=t.openDatabase(e.projectRoot,e.previousDbPath,e.previousIndexPath),d=t.openDatabase(e.projectRoot,e.candidateDbPath,e.candidateIndexPath);let l=[...new Set([...t.indexedPaths(s),...t.indexedPaths(d)])].sort(),c=ce(e.previousSnapshot,e.currentSnapshot),p=new Set(l),u=c.changes.length>0&&!ze(c).fullProject&&c.changes.every(w=>p.has(w.path)),g=Se(c,u?t.dependencyGraph(s):new Map,l),m=da(t.factDigests(s),t.factDigests(d)),x=r();return{version:1,status:"evaluated",refreshResult:e.refreshResult,recordedAt:new Date(n?x:a()).toISOString(),durationMs:Math.max(0,x-i),manifest:c,plan:g,comparison:m,evaluation:Ve(g,m,l.length)}}catch(l){return o("oracle-error",l instanceof Error?l.message:String(l))}finally{Ln(s),Ln(d)}}function Cn(e,t,n,r=Date.now()){return Gn(e,t,r,0,n)}function $n(e){let t=ia(e);return{latestPath:An(t,"affected-shadow-latest.json"),historyPath:An(t,"affected-shadow.jsonl")}}function Vo(e,t=n=>xt(n,"affected-shadow source file")){let n=$n(e),r;try{r=JSON.parse(t(n.latestPath))}catch(f){let y=ba(f),P=y?"telemetry-missing":Sa(f);return D(n,P,y?void 0:f instanceof Error?f.message:String(f))}if(L(r)&&typeof r.version=="number"&&r.version!==1)return D(n,"unsupported-record-version",`Unsupported version ${r.version}.`);if(!ha(r))return D(n,"telemetry-malformed");if(r.status==="unavailable")return ya(r.reason)?{state:"unavailable",...n,reason:r.reason,recordedAt:r.recordedAt,refreshResult:r.refreshResult,durationMs:r.durationMs,...typeof r.error=="string"?{error:r.error}:{}}:D(n,"telemetry-malformed");if(r.status!=="evaluated")return D(n,"telemetry-malformed");let a=r.plan,i=r.comparison,o=r.evaluation;if(!L(r.manifest)||!L(a)||!L(i)||!L(o))return D(n,"telemetry-malformed");let s=a.mode,d=M(a.affectedFiles),l=M(a.reasons),c=M(i.changedFiles),p=M(o.predictedFiles),u=M(o.actualFiles),g=M(o.missingFiles),m=o.recall,x=o.affectedRatio;if(s!=="none"&&s!=="closure"&&s!=="full-project"||d===null||l===null||c===null||p===null||u===null||g===null||typeof o.passed!="boolean"||!Mn(m)||!Mn(x))return D(n,"telemetry-malformed");let w=u.length===0?1:(u.length-g.length)/u.length;return!Nn(d,p)||!Nn(c,u)||o.passed!==(g.length===0)||Math.abs(m-w)>Number.EPSILON||g.some(f=>!u.includes(f)||p.includes(f))?D(n,"telemetry-malformed"):{state:o.passed?"passing":"failing",...n,recordedAt:r.recordedAt,refreshResult:r.refreshResult,durationMs:r.durationMs,mode:s,recall:m,affectedRatio:x,predictedFiles:p,actualFiles:u,missingFiles:g,fallbackReasons:l}}function Xo(e){if(e.state==="unavailable")return`unavailable (${e.reason})`;let t=e.missingFiles.length>0?`, ${e.missingFiles.length} missed`:"",n=e.fallbackReasons.length>0?`; fallback: ${e.fallbackReasons.join(", ")}`:"";return`${e.state}, ${(e.recall*100).toFixed(1)}% recall, ${e.predictedFiles.length} predicted / ${e.actualFiles.length} changed, ${(e.affectedRatio*100).toFixed(1)}% of project${t}${n}`}function Bn(e,t,n=ma){let r=$n(e);return n.appendHistory(r.historyPath,t),n.writeLatest(r.latestPath,t),r}var la=8*1024*1024,ua=Kt;function pa(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 ga(e,t,n=la){Zt(e,pa(t),{maxSegmentBytes:n,previousSuffix:ua})}function Qe(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 fa={now:()=>Date.now(),wallNow:()=>Date.now(),monotonicNow:b,databaseExists:e=>aa(e),openDatabase:(e,t,n)=>new F({projectRoot:e,dbPath:t,indexPath:n}),indexedPaths:e=>ge(e),dependencyGraph:e=>fe(e),factDigests:e=>sa(e)},ma={appendHistory:ga,writeLatest:(e,t)=>qt(e,t,{spacing:2,trailingNewline:!0})};function Gn(e,t,n,r,a){return{version:1,status:"unavailable",refreshResult:e,recordedAt:new Date(n).toISOString(),durationMs:r,reason:t,...a?{error:a}:{}}}function Ln(e){try{e?.close()}catch{}}function ha(e){return L(e)&&e.version===1&&typeof e.recordedAt=="string"&&(e.refreshResult==="rebuilt"||e.refreshResult==="reused")&&typeof e.durationMs=="number"&&Number.isFinite(e.durationMs)&&e.durationMs>=0}function ya(e){return e==="prior-index-unavailable"||e==="candidate-index-unavailable"||e==="oracle-error"}function Mn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=1}function Nn(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function D(e,t,n){return{state:"unavailable",...e,reason:t,...n?{error:n}:{}}}function Sa(e){return e instanceof SyntaxError?"telemetry-malformed":"telemetry-unreadable"}function ba(e){return e instanceof Error&&e.code==="ENOENT"}import{readdirSync as Pa}from"fs";import{isAbsolute as Un,join as xa,resolve as Ra}from"path";var be="@sourcegraph/scip-typescript@0.4.0",Wn="scip-python-plus@0.7.5",qn="github.com/sourcegraph/scip-go@v0.2.7",Hn="scip-dotnet@0.2.14",va="scip_dart@1.6.2",Ia={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:[...I.typescript],installMethods:[{label:"npm",identity:be,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",be]}],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:[...I.javascript],installMethods:[{label:"npm",identity:be,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",be]}],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:[...I.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:[...I.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:[...I.kotlin],installMethods:[],installUrl:"https://github.com/sourcegraph/scip-java/releases"},rust:{language:z.language,indexerBinary:z.indexerBinary,checkCommand:`${z.indexerBinary} --version`,indexArgs:({outputPath:e})=>({binary:z.indexerBinary,args:["scip",".","--output",e]}),markerFiles:[...I.rust],installMethods:[],installUrl:z.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:[...I.python],installMethods:[{label:"npm",identity:Wn,destination:"npm global prefix",prerequisite:"npm",binary:"npm",args:["install","-g",Wn]}],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 a=["-root",e,"-output",t];return r&&a.push("-config",Un(r)?r:Ra(e,r)),{binary:n,args:a}},markerFiles:[...I.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:[...I.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:[...I.go],installMethods:[{label:"go install",identity:qn,destination:"Go bin directory (GOBIN or GOPATH/bin)",prerequisite:"go",binary:"go",args:["install",qn]}],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:[...I.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:[...I.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",Jn(e,[".sln",".csproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:[...I.csharp],installMethods:[{label:"dotnet",identity:Hn,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",Jn(e,[".sln",".vbproj"])??e,"--output",t,"--working-directory",e]}),markerFiles:[...I.vb],installMethods:[{label:"dotnet",identity:Hn,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:[...I.dart],installMethods:[{label:"dart pub",identity:va,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})=>Un(e)?{binary:"php",args:["-d","error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED",e]}:{binary:e,args:[]},defaultOutputPath:"index.scip",markerFiles:[...I.php],installMethods:[],installUrl:"https://github.com/davidrjenni/scip-php/releases"}};function zn(e){if(!(e.projectPath||e.pnpmWorkspaces)){if(e.language==="typescript")return"{}";if(e.language==="javascript")return'{"compilerOptions":{"allowJs":true}}'}}function Ye(e){return Ia[e]}function Jn(e,t){let n;try{n=Pa(e)}catch{return null}for(let r of t)for(let a of n)if(a.endsWith(r))return xa(e,a);return null}import{createHash as Ea}from"crypto";import{existsSync as Qn,rmSync as Vn}from"fs";import{resolve as wa}from"path";import Kn from"better-sqlite3";var _a={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}]},ja={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 Zn(e){let t=b(),n=Ta(e.affectedFiles);if(Fa(e.previousDbPath,e.miniDbPath,e.candidateDbPath),Vn(e.candidateDbPath,{force:!0}),!Qn(e.previousDbPath))throw new Error("previous SQLite generation is unavailable");if(!Qn(e.miniDbPath))throw new Error("incremental SQLite mini database is unavailable");Xn(e.previousDbPath,"previous SQLite generation",!1),Xn(e.miniDbPath,"incremental SQLite mini database");let r=C(e.previousDbPath,e.candidateDbPath);e.writeTelemetry&&$(e.writeTelemetry,r);let a=null;try{a=new Kn(e.candidateDbPath,{fileMustExist:!0}),a.pragma("busy_timeout = 5000"),a.pragma("foreign_keys = ON"),a.prepare("ATTACH DATABASE ? AS incremental").run(e.miniDbPath),Ke(a,"main","candidate SQLite generation"),Ke(a,"incremental","incremental SQLite mini database"),ka(a,n),Da(a,n.length);let i=Ze(a,"main",!0),o=O(a,"SELECT COUNT(*) AS value FROM main.documents");a.transaction(()=>{Oa(a),Aa(a),La(a),e.onStage?.("after-delete"),Ma(a),e.onStage?.("after-symbol-reconciliation"),Na(a),e.onStage?.("after-insert"),Ca(a),$a(a,n.length,o),e.onStage?.("before-commit")}).immediate(),er(a,"main","candidate SQLite generation");let l=[...Ba(a)].filter(([c,p])=>i.get(c)!==p).map(([c])=>c).sort();return a.exec("DETACH DATABASE incremental"),a.close(),a=null,{candidateDbPath:e.candidateDbPath,affectedDocumentCount:n.length,changedDocumentPaths:l,durationMs:b()-t}}catch(i){try{a?.close()}finally{Vn(e.candidateDbPath,{force:!0})}throw new Error(`Incremental SQLite publication rejected: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}function Ta(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 Fa(e,t,n){let r=[e,t,n].map(a=>wa(a));if(new Set(r).size!==r.length)throw new Error("previous, mini, and candidate SQLite paths must be distinct")}function Xn(e,t,n=!0){let r=new Kn(e,{readonly:!0,fileMustExist:!0});try{Ke(r,"main",t),n&&er(r,"main",t)}finally{r.close()}}function Ke(e,t,n){for(let[r,a]of Object.entries(_a)){let o=e.prepare(`PRAGMA ${t}.table_info('${r}')`).all().map(({name:s,type:d,notnull:l,pk:c})=>({name:s,type:d.toUpperCase(),notnull:l,pk:c}));if(JSON.stringify(o)!==JSON.stringify(a))throw new Error(`${n} schema changed for table ${r}`)}for(let[r,a]of Object.entries(ja)){let i=e.prepare(`SELECT tbl_name FROM ${t}.sqlite_master WHERE type = 'index' AND name = ?`).get(r),o=e.prepare(`PRAGMA ${t}.index_info('${r}')`).all().map(s=>s.name);if(i?.tbl_name!==a.table||JSON.stringify(o)!==JSON.stringify(a.columns))throw new Error(`${n} schema changed for index ${r}`)}Yn(e,t,"documents",["relative_path"],n),Yn(e,t,"global_symbols",["symbol"],n)}function Yn(e,t,n,r,a){if(!e.prepare(`PRAGMA ${t}.index_list('${n}')`).all().some(s=>{if(s.unique!==1)return!1;let d=e.prepare(`PRAGMA ${t}.index_info('${s.name}')`).all().map(l=>l.name);return JSON.stringify(d)===JSON.stringify(r)}))throw new Error(`${a} lost the unique ${n}(${r.join(", ")}) constraint`)}function er(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 ka(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(a=>{for(let i of a)n.run(i)})(t)}function Da(e,t){let n=O(e,"SELECT COUNT(*) AS value FROM incremental.documents"),r=O(e,`SELECT COUNT(*) AS value
|
|
59
|
+
FROM main.documents d
|
|
60
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`),a=e.prepare(`SELECT p.relative_path
|
|
61
|
+
FROM temp.incremental_affected_paths p
|
|
62
|
+
LEFT JOIN incremental.documents d ON d.relative_path = p.relative_path
|
|
63
|
+
WHERE d.id IS NULL
|
|
64
|
+
LIMIT 1`).pluck().get(),i=e.prepare(`SELECT d.relative_path
|
|
65
|
+
FROM incremental.documents d
|
|
66
|
+
LEFT JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
67
|
+
WHERE p.relative_path IS NULL
|
|
68
|
+
LIMIT 1`).pluck().get();if(n!==t||r!==t||a!==void 0||i!==void 0)throw new Error("incremental SQLite mini database does not exactly match the affected document set")}function Oa(e){e.exec(`
|
|
69
|
+
CREATE TEMP TABLE incremental_old_defined_symbols (symbol TEXT PRIMARY KEY) WITHOUT ROWID;
|
|
70
|
+
INSERT OR IGNORE INTO temp.incremental_old_defined_symbols(symbol)
|
|
71
|
+
SELECT g.symbol
|
|
72
|
+
FROM main.defn_enclosing_ranges r
|
|
73
|
+
JOIN main.documents d ON d.id = r.document_id
|
|
74
|
+
JOIN main.global_symbols g ON g.id = r.symbol_id
|
|
75
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path;
|
|
76
|
+
INSERT OR IGNORE INTO temp.incremental_old_defined_symbols(symbol)
|
|
77
|
+
SELECT g.symbol
|
|
78
|
+
FROM main.mentions m
|
|
79
|
+
JOIN main.chunks c ON c.id = m.chunk_id
|
|
80
|
+
JOIN main.documents d ON d.id = c.document_id
|
|
81
|
+
JOIN main.global_symbols g ON g.id = m.symbol_id
|
|
82
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
83
|
+
WHERE m.role = 1;
|
|
84
|
+
|
|
85
|
+
CREATE TEMP TABLE incremental_new_defined_symbols (symbol TEXT PRIMARY KEY) WITHOUT ROWID;
|
|
86
|
+
INSERT OR IGNORE INTO temp.incremental_new_defined_symbols(symbol)
|
|
87
|
+
SELECT g.symbol
|
|
88
|
+
FROM incremental.defn_enclosing_ranges r
|
|
89
|
+
JOIN incremental.global_symbols g ON g.id = r.symbol_id;
|
|
90
|
+
INSERT OR IGNORE INTO temp.incremental_new_defined_symbols(symbol)
|
|
91
|
+
SELECT g.symbol
|
|
92
|
+
FROM incremental.mentions m
|
|
93
|
+
JOIN incremental.global_symbols g ON g.id = m.symbol_id
|
|
94
|
+
WHERE m.role = 1;
|
|
95
|
+
`)}function Aa(e){let t=e.prepare(`WITH changed_symbols AS (
|
|
96
|
+
SELECT symbol FROM temp.incremental_old_defined_symbols
|
|
97
|
+
UNION
|
|
98
|
+
SELECT symbol FROM temp.incremental_new_defined_symbols
|
|
99
|
+
), unaffected_definitions AS (
|
|
100
|
+
SELECT g.symbol
|
|
101
|
+
FROM main.defn_enclosing_ranges r
|
|
102
|
+
JOIN main.documents d ON d.id = r.document_id
|
|
103
|
+
JOIN main.global_symbols g ON g.id = r.symbol_id
|
|
104
|
+
LEFT JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
105
|
+
WHERE p.relative_path IS NULL
|
|
106
|
+
UNION
|
|
107
|
+
SELECT g.symbol
|
|
108
|
+
FROM main.mentions m
|
|
109
|
+
JOIN main.chunks c ON c.id = m.chunk_id
|
|
110
|
+
JOIN main.documents d ON d.id = c.document_id
|
|
111
|
+
JOIN main.global_symbols g ON g.id = m.symbol_id
|
|
112
|
+
LEFT JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
113
|
+
WHERE m.role = 1 AND p.relative_path IS NULL
|
|
114
|
+
)
|
|
115
|
+
SELECT u.symbol
|
|
116
|
+
FROM unaffected_definitions u
|
|
117
|
+
JOIN changed_symbols c ON c.symbol = u.symbol
|
|
118
|
+
LIMIT 1`).pluck().get();if(typeof t=="string")throw new Error(`symbol definition is shared by affected and unaffected documents: ${t}`)}function La(e){e.exec(`
|
|
119
|
+
DELETE FROM main.mentions
|
|
120
|
+
WHERE chunk_id IN (
|
|
121
|
+
SELECT c.id
|
|
122
|
+
FROM main.chunks c
|
|
123
|
+
JOIN main.documents d ON d.id = c.document_id
|
|
124
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
125
|
+
);
|
|
126
|
+
DELETE FROM main.chunks
|
|
127
|
+
WHERE document_id IN (
|
|
128
|
+
SELECT d.id
|
|
129
|
+
FROM main.documents d
|
|
130
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
131
|
+
);
|
|
132
|
+
DELETE FROM main.defn_enclosing_ranges
|
|
133
|
+
WHERE document_id IN (
|
|
134
|
+
SELECT d.id
|
|
135
|
+
FROM main.documents d
|
|
136
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path
|
|
137
|
+
);
|
|
138
|
+
DELETE FROM main.documents
|
|
139
|
+
WHERE relative_path IN (SELECT relative_path FROM temp.incremental_affected_paths);
|
|
140
|
+
`)}function Ma(e){e.exec(`
|
|
141
|
+
UPDATE main.global_symbols
|
|
142
|
+
SET display_name = NULL,
|
|
143
|
+
kind = NULL,
|
|
144
|
+
documentation = NULL,
|
|
145
|
+
signature = NULL,
|
|
146
|
+
enclosing_symbol = NULL,
|
|
147
|
+
relationships = NULL
|
|
148
|
+
WHERE symbol IN (SELECT symbol FROM temp.incremental_old_defined_symbols);
|
|
149
|
+
|
|
150
|
+
INSERT OR IGNORE INTO main.global_symbols(
|
|
151
|
+
symbol, display_name, kind, documentation, signature, enclosing_symbol, relationships
|
|
152
|
+
)
|
|
153
|
+
SELECT symbol, display_name, kind, documentation, signature, enclosing_symbol, relationships
|
|
154
|
+
FROM incremental.global_symbols;
|
|
155
|
+
|
|
156
|
+
UPDATE main.global_symbols
|
|
157
|
+
SET display_name = (
|
|
158
|
+
SELECT source.display_name FROM incremental.global_symbols source
|
|
159
|
+
WHERE source.symbol = main.global_symbols.symbol
|
|
160
|
+
),
|
|
161
|
+
kind = (
|
|
162
|
+
SELECT source.kind FROM incremental.global_symbols source
|
|
163
|
+
WHERE source.symbol = main.global_symbols.symbol
|
|
164
|
+
),
|
|
165
|
+
documentation = (
|
|
166
|
+
SELECT source.documentation FROM incremental.global_symbols source
|
|
167
|
+
WHERE source.symbol = main.global_symbols.symbol
|
|
168
|
+
),
|
|
169
|
+
signature = (
|
|
170
|
+
SELECT source.signature FROM incremental.global_symbols source
|
|
171
|
+
WHERE source.symbol = main.global_symbols.symbol
|
|
172
|
+
),
|
|
173
|
+
enclosing_symbol = (
|
|
174
|
+
SELECT source.enclosing_symbol FROM incremental.global_symbols source
|
|
175
|
+
WHERE source.symbol = main.global_symbols.symbol
|
|
176
|
+
),
|
|
177
|
+
relationships = (
|
|
178
|
+
SELECT source.relationships FROM incremental.global_symbols source
|
|
179
|
+
WHERE source.symbol = main.global_symbols.symbol
|
|
180
|
+
)
|
|
181
|
+
WHERE symbol IN (SELECT symbol FROM temp.incremental_new_defined_symbols);
|
|
182
|
+
`)}function Na(e){let t=O(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.documents"),n=O(e,"SELECT COALESCE(MAX(id), 0) AS value FROM main.chunks"),r=O(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)
|
|
183
|
+
SELECT id + ?, language, relative_path, position_encoding, text
|
|
184
|
+
FROM incremental.documents`).run(t),e.prepare(`INSERT INTO main.chunks(id, document_id, chunk_index, start_line, end_line, occurrences)
|
|
185
|
+
SELECT id + ?, document_id + ?, chunk_index, start_line, end_line, occurrences
|
|
186
|
+
FROM incremental.chunks`).run(n,t),e.prepare(`INSERT INTO main.mentions(chunk_id, symbol_id, role)
|
|
187
|
+
SELECT m.chunk_id + ?, target.id, m.role
|
|
188
|
+
FROM incremental.mentions m
|
|
189
|
+
JOIN incremental.global_symbols source ON source.id = m.symbol_id
|
|
190
|
+
JOIN main.global_symbols target ON target.symbol = source.symbol`).run(n),e.prepare(`INSERT INTO main.defn_enclosing_ranges(
|
|
191
|
+
id, document_id, symbol_id, start_line, start_char, end_line, end_char
|
|
192
|
+
)
|
|
193
|
+
SELECT r.id + ?, r.document_id + ?, target.id,
|
|
194
|
+
r.start_line, r.start_char, r.end_line, r.end_char
|
|
195
|
+
FROM incremental.defn_enclosing_ranges r
|
|
196
|
+
JOIN incremental.global_symbols source ON source.id = r.symbol_id
|
|
197
|
+
JOIN main.global_symbols target ON target.symbol = source.symbol`).run(r,t)}function Ca(e){e.exec(`
|
|
198
|
+
DELETE FROM main.global_symbols
|
|
199
|
+
WHERE NOT EXISTS (SELECT 1 FROM main.mentions m WHERE m.symbol_id = main.global_symbols.id)
|
|
200
|
+
AND NOT EXISTS (
|
|
201
|
+
SELECT 1 FROM main.defn_enclosing_ranges r WHERE r.symbol_id = main.global_symbols.id
|
|
202
|
+
);
|
|
203
|
+
`)}function $a(e,t,n){let r=O(e,"SELECT COUNT(*) AS value FROM main.documents"),a=O(e,`SELECT COUNT(*) AS value
|
|
204
|
+
FROM main.documents d
|
|
205
|
+
JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path`);if(r!==n||a!==t)throw new Error("candidate SQLite document counts changed unexpectedly");let i=e.prepare("SELECT relative_path FROM main.documents GROUP BY relative_path HAVING COUNT(*) > 1 LIMIT 1").pluck().get(),o=e.prepare("SELECT symbol FROM main.global_symbols GROUP BY symbol HAVING COUNT(*) > 1 LIMIT 1").pluck().get();if(i!==void 0||o!==void 0)throw new Error("candidate SQLite generation contains duplicate document paths or symbols")}function Ba(e){let t=Ze(e,"main",!0),n=Ze(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 Ze(e,t,n){let r=n?"JOIN temp.incremental_affected_paths p ON p.relative_path = d.relative_path":"",a=e.prepare(`SELECT d.relative_path, d.language, d.position_encoding, d.text
|
|
206
|
+
FROM ${t}.documents d
|
|
207
|
+
${r}
|
|
208
|
+
ORDER BY d.relative_path`).all(),i=e.prepare(`SELECT d.relative_path, c.chunk_index, c.start_line, c.end_line, hex(c.occurrences) AS occurrences
|
|
209
|
+
FROM ${t}.chunks c
|
|
210
|
+
JOIN ${t}.documents d ON d.id = c.document_id
|
|
211
|
+
${r}
|
|
212
|
+
ORDER BY d.relative_path, c.chunk_index, c.start_line, c.end_line, c.id`).all(),o=e.prepare(`SELECT d.relative_path, r.start_line, r.start_char, r.end_line, r.end_char,
|
|
213
|
+
g.symbol, g.display_name, g.kind, g.documentation,
|
|
214
|
+
CASE WHEN g.signature IS NULL THEN NULL ELSE hex(g.signature) END AS signature,
|
|
215
|
+
g.enclosing_symbol,
|
|
216
|
+
CASE WHEN g.relationships IS NULL THEN NULL ELSE hex(g.relationships) END AS relationships
|
|
217
|
+
FROM ${t}.defn_enclosing_ranges r
|
|
218
|
+
JOIN ${t}.documents d ON d.id = r.document_id
|
|
219
|
+
JOIN ${t}.global_symbols g ON g.id = r.symbol_id
|
|
220
|
+
${r}
|
|
221
|
+
ORDER BY d.relative_path, r.start_line, r.start_char, r.end_line, r.end_char, g.symbol`).all(),s=e.prepare(`SELECT d.relative_path, c.chunk_index, m.role, g.symbol
|
|
222
|
+
FROM ${t}.mentions m
|
|
223
|
+
JOIN ${t}.chunks c ON c.id = m.chunk_id
|
|
224
|
+
JOIN ${t}.documents d ON d.id = c.document_id
|
|
225
|
+
JOIN ${t}.global_symbols g ON g.id = m.symbol_id
|
|
226
|
+
${r}
|
|
227
|
+
ORDER BY d.relative_path, c.chunk_index, m.role, g.symbol`).all(),d=new Map;for(let[c,p]of Object.entries({documents:a,chunks:i,definitions:o,mentions:s}))for(let u of p){let g=JSON.stringify([c,u]),m=d.get(u.relative_path)??[];m.push(g),d.set(u.relative_path,m)}let l=new Map;for(let[c,p]of[...d].sort(([u],[g])=>u.localeCompare(g))){let u=Ea("sha256");for(let g of p.sort())u.update(g).update(`
|
|
228
|
+
`);l.set(c,u.digest("hex"))}return l}function O(e,t){return e.prepare(t).get().value}import Ga from"better-sqlite3";var Pe="idx_mentions_definitions",Ua=["symbol_id","chunk_id"];function et(e){let t=new Ga(e),n=[],r=[],a=[];try{return t.transaction(()=>{Wa(t,n),xe(t,"idx_global_symbols_symbol")?.join("\0")==="symbol"&&tr(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")):xe(t,"idx_global_symbols_symbol")&&a.push("idx_global_symbols_symbol");let i=xe(t,"idx_chunks_doc_id"),o=tr(t,"chunks").some(s=>s.name!=="idx_chunks_doc_id"&&s.columns.length>1&&s.columns[0]==="document_id");i?.join("\0")==="document_id"&&o?(t.exec('DROP INDEX "idx_chunks_doc_id"'),r.push("idx_chunks_doc_id")):i&&a.push("idx_chunks_doc_id"),t.exec("ANALYZE")})(),{added:n,removed:r,retained:a,analyzed:!0}}catch(i){if(i.code==="SQLITE_NOTADB")return{added:[],removed:[],retained:[],analyzed:!1,skippedReason:"not-a-sqlite-database"};throw i}finally{t.close()}}function Wa(e,t){let n=nr(e,Pe);if(n){let r=n.columns.join("\0")===Ua.join("\0"),a=/\bWHERE\s+role\s*=\s*1\b/iu.test(n.sql??"");if(!r||!a||n.table!=="mentions")throw new Error(`${Pe} exists with an incompatible definition`);return}e.exec(`CREATE INDEX "${Pe}" ON mentions(symbol_id, chunk_id) WHERE role = 1`),t.push(Pe)}function tr(e,t){return e.prepare(`PRAGMA index_list('${t.replaceAll("'","''")}')`).all().map(n=>({name:n.name,unique:n.unique===1,columns:xe(e,n.name)??[]}))}function xe(e,t){return nr(e,t)?.columns??null}function nr(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(a=>a.name);return{table:n.tbl_name,sql:n.sql,columns:r}}import{createHash as qa}from"crypto";import{existsSync as tt,readdirSync as Ha}from"fs";import{dirname as nt,join as Re,relative as Ja,resolve as rt,sep as rr}from"path";function ar(e,t){let n=t.includes("."),r={};for(let i of t)r[i]=[];let a=[];for(let i of e){let o=cr(i.path,t);o?r[o].push(i):n?r["."].push(i):a.push(i)}return{files:r,shared:a}}function ir(e,t){let n=new Map;for(let a of e){let i=t[a]?.packageName;i&&n.set(i,a)}let r=new Map;for(let a of e)r.set(a,new Set);for(let a of e){let i=t[a],o=r.get(a);if(!i||i.parseFailed){for(let s of e)s!==a&&o.add(s);continue}for(let s of i.dependencyNames){let d=n.get(s);d&&d!==a&&o.add(d)}for(let s of[...i.pathsTargets,...i.referencesPaths]){let d=cr(s,e);d&&d!==a&&o.add(d)}}return za(e,r)}function or(e,t,n){let r={};for(let a of e){let i=new Map;for(let o of t.files[a]??[])i.set(o.path,o);for(let o of n[a]??[])for(let s of t.files[o]??[])i.set(s.path,s);for(let o of t.shared)i.set(o.path,o);r[a]={files:[...i.values()].sort((o,s)=>o.path.localeCompare(s.path))}}return r}function at(e){if(e===".")return"root";let t=qa("sha256").update(e).digest("hex").slice(0,8);return`${e.split("/").join("__")}-${t}`}function sr(e,t){let n=rt(e),r={};for(let a of t)r[a]=Qa(n,a);return r}function cr(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 za(e,t){let n={};for(let r of e){let a=new Set,i=[...t.get(r)??[]];for(;i.length>0;){let o=i.pop();if(!(o===r||a.has(o))){a.add(o);for(let s of t.get(o)??[])s!==r&&!a.has(s)&&i.push(s)}}n[r]=[...a].sort((o,s)=>o.localeCompare(s))}return n}function Qa(e,t){let n=t==="."?e:Re(e,t),r=Va(n),a=Xa(n),i=a?Ya(a,e):{pathsTargets:[],referencesPaths:[],failed:!1};return{packageName:r.name,dependencyNames:r.dependencyNames,pathsTargets:i.pathsTargets,referencesPaths:i.referencesPaths,parseFailed:r.failed||i.failed}}function Va(e){let t=Re(e,"package.json");if(!tt(t))return{name:void 0,dependencyNames:[],failed:!1};let n=it(t);if(!n.ok)return{name:void 0,dependencyNames:[],failed:!0};let r=typeof n.value.name=="string"?n.value.name:void 0,a=new Set;for(let i of["dependencies","devDependencies","peerDependencies"]){let o=n.value[i];if(o&&typeof o=="object"&&!Array.isArray(o))for(let s of Object.keys(o))a.add(s)}return{name:r,dependencyNames:[...a],failed:!1}}function Xa(e){let t=Re(e,"tsconfig.json");if(tt(t))return t;let n;try{n=Ha(e).filter(r=>/^tsconfig.*\.json$/.test(r))}catch{return}return n.sort((r,a)=>r.localeCompare(a)),n.length>0?Re(e,n[0]):void 0}function Ya(e,t){let n=it(e);if(!n.ok)return{pathsTargets:[],referencesPaths:[],failed:!0};let r=Ka(n.value,e,t),a=dr(e,n.value,t,0);return{pathsTargets:a.pathsTargets,referencesPaths:r,failed:a.failed}}function Ka(e,t,n){let r=e.references;if(!Array.isArray(r))return[];let a=nt(t),i=new Set;for(let o of r){if(!o||typeof o!="object")continue;let s=o.path;if(typeof s!="string"||s.trim()==="")continue;let d=lr(s,a,n);d&&i.add(d)}return[...i]}function dr(e,t,n,r){let a=Za(t);if(a)return{pathsTargets:ei(a,nt(e),n),failed:!1};if(r>=5)return{pathsTargets:[],failed:!1};let i=ti(t.extends,e,n);if(!i)return{pathsTargets:[],failed:!1};let o=it(i);return o.ok?dr(i,o.value,n,r+1):{pathsTargets:[],failed:!0}}function Za(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 ei(e,t,n){let r=new Set;for(let a of Object.values(e))if(Array.isArray(a))for(let i of a){if(typeof i!="string")continue;let o=lr(i,t,n);o&&r.add(o)}return[...r]}function ti(e,t,n){let r=Array.isArray(e)?e.at(-1):e;if(typeof r!="string"||r.trim()===""||!r.startsWith(".")&&!r.startsWith("/"))return;let a=rt(nt(t),r);if(a.endsWith(".json")||(a=`${a}.json`),!a.split(rr).includes("node_modules")&&Me(n,a)&&tt(a))return a}function lr(e,t,n){let r=e.replace(/\/?\*+$/,""),a=rt(t,r===""?".":r);if(!Me(n,a))return;let o=Ja(n,a).split(rr).join("/");return o===""?".":o}function ni(e){let t="",n=0,r=!1,a=e.length;for(;n<a;){let i=e[n];if(r){if(t+=i,i==="\\"&&n+1<a){t+=e[n+1],n+=2;continue}i==='"'&&(r=!1),n+=1;continue}if(i==='"'){r=!0,t+=i,n+=1;continue}if(i==="/"&&e[n+1]==="/"){for(n+=2;n<a&&e[n]!==`
|
|
229
|
+
`;)n+=1;continue}if(i==="/"&&e[n+1]==="*"){for(n+=2;n<a&&!(e[n]==="*"&&e[n+1]==="/");)n+=1;n+=2;continue}t+=i,n+=1}return t}function it(e){try{let t=ie(e,{maxBytes:Pt,inputKind:"TypeScript project manifest"}),n=JSON.parse(ni(t));return n&&typeof n=="object"&&!Array.isArray(n)?{ok:!0,value:n}:{ok:!1}}catch{return{ok:!1}}}import{createHash as gi}from"crypto";import{existsSync as ot,statSync as fi,writeFileSync as st}from"fs";import{join as mi}from"path";import{randomUUID as ri}from"crypto";import{existsSync as ai}from"fs";var ii=12e4,oi=5,ve=class{projectRoot;cacheDir;baseGeneration;timeoutMs;runtime;mailboxLimits;constructor(t,n={}){this.projectRoot=kt(t.projectRoot),this.cacheDir=t.cacheDir,this.baseGeneration=t.baseGeneration,this.timeoutMs=n.timeoutMs??ui(),this.runtime=n.runtime??pi,this.mailboxLimits=n.mailboxLimits??{}}request(t){let n=jn(this.cacheDir),r=wn(this.cacheDir),a=Je(n.statePath);if(!ur(a,this.projectRoot,this.runtime))throw new Error("Compatible TypeScript index service is not running.");let i=this.runtime.now(),o=i+this.timeoutMs,s=(this.runtime.monotonicNow??b)()+this.timeoutMs,d=vn("typescript-index-v4",{baseGeneration:this.baseGeneration,request:t}),l=In(d),c=En(r,{mailboxVersion:Rn,operationKey:d,clientId:this.runtime.randomId(),enqueuedAtMs:i,deadlineAtMs:o,protocolVersion:ye,id:l,baseGeneration:this.baseGeneration,request:t},{nowMs:i,limits:this.mailboxLimits});for(;(this.runtime.monotonicNow??b)()<=s;){if(ai(c.responsePath))return si(ie(c.responsePath,{maxBytes:this.mailboxLimits.maxItemBytes??64*1024*1024,inputKind:"TypeScript index mailbox response"}),l,d,this.baseGeneration,t.producerIdentity,t.affectedFiles);let p=Je(n.statePath);if(!ur(p,this.projectRoot,this.runtime))throw new Error("TypeScript index service stopped while processing a request.");this.runtime.sleep(oi)}throw new Error(`TypeScript index service timed out after ${this.timeoutMs}ms.`)}};function ur(e,t,n){let r=e?.processIdentity?n.readProcessIdentity?.(e.pid):null;return e!==null&&e.projectRoot===t&&e.typescriptIndex?.protocolVersion===ye&&n.isProcessAlive(e.pid)&&(!e.processIdentity||r!=null&&Y(e.processIdentity,r))}function si(e,t,n,r,a,i){let o=JSON.parse(e);if(o.protocolVersion!==ye||o.id!==t||o.operationKey!==n||o.ok===!0&&o.baseGeneration!==r)throw new Error("TypeScript index service wrote an incompatible response.");if(o.ok!==!0)throw new Error(typeof o.error=="string"?o.error:"TypeScript index service request failed.");let s=ci(o.response,a),d=[...new Set(i)].sort(),l=s.fragments.map(c=>c.relativePath).sort();if(JSON.stringify(l)!==JSON.stringify(d))throw new Error("TypeScript index service omitted or added an affected document.");return s}function ci(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,a=n.fragments.map(i=>{if(!i||typeof i.relativePath!="string"||i.bytesBase64!==null&&typeof i.bytesBase64!="string"||typeof i.occurrences!="number"||!Number.isInteger(i.occurrences)||i.occurrences<0||typeof i.symbols!="number"||!Number.isInteger(i.symbols)||i.symbols<0||!Array.isArray(i.referenceFragments)||!i.referenceFragments.every(di)||r.has(i.relativePath))throw new Error("TypeScript index service wrote an invalid fragment.");r.add(i.relativePath);let o=i.bytesBase64===null?null:li(i.bytesBase64);return{relativePath:i.relativePath,bytes:o,occurrences:i.occurrences,symbols:i.symbols,referenceFragments:i.referenceFragments}});return{producerIdentity:n.producerIdentity,cold:n.cold,durationMs:n.durationMs,fragments:a}}function di(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 li(e){let t=Buffer.from(e,"base64");if(t.toString("base64")!==e)throw new Error("TypeScript index service wrote invalid base64.");return t}function ui(){let e=Number(process.env.SCIP_TYPESCRIPT_INDEX_TIMEOUT_MS);return Number.isInteger(e)&&e>0?e:ii}var pi={now:Date.now,monotonicNow:b,randomId:ri,sleep(e){let t=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(t,0,0,e)},isProcessAlive:H,readProcessIdentity:U};function hi(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=ce(e.previousSnapshot,e.currentSnapshot);if(n.changes.length===0)return{eligible:!1,reason:"no changed project inputs"};if(n.changes.some(c=>c.kind!=="modified"||c.inputKind!=="source"||!Be(c.path)))return{eligible:!1,reason:"change is not a modified TypeScript source file"};let r=Se(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 a=yi(r,t,e.graph);if(!a)return{eligible:!1,reason:"affected files cross or ambiguously match TypeScript projects"};let i=pr(e.currentSnapshot,e.projectFiles,e.producerIdentity),o=pr(e.previousSnapshot,e.projectFiles,e.producerIdentity);if(i!==o)return{eligible:!1,reason:"TypeScript fragment project identity changed"};let s=fr(e.previousSnapshot,e.projectFiles,e.graph,e.producerIdentity,e.projectFiles);if(!s)return{eligible:!1,reason:"prior document identity unavailable"};let d=fr(e.currentSnapshot,e.projectFiles,e.graph,e.producerIdentity,r.affectedFiles);if(!d)return{eligible:!1,reason:"next document identity unavailable"};let l=a.length===1?a[0]:void 0;return{eligible:!0,manifest:n,plan:r,projectIdentity:i,previousFragmentGeneration:gr(e.previousSnapshot,e.producerIdentity),nextFragmentGeneration:gr(e.currentSnapshot,e.producerIdentity),previousDocumentIdentities:s,nextDocumentIdentities:d,projects:a,...l?{tsconfigPath:l.tsconfigPath,projectArgument:l.projectArgument}:{}}}function yi(e,t,n){let r=new Map;for(let i of e.affectedFiles){let o=Si(i,t);if(!o)return null;let s=r.get(o)??[];s.push(i),r.set(o,s)}let a=[];for(let[i,o]of[...r].sort(([s],[d])=>s.localeCompare(d))){let s=new Set(o),d=e.changedFiles.filter(l=>s.has(l)||o.some(c=>bi(c,l,n)));if(d.length===0)return null;a.push({projectArgument:i,tsconfigPath:i==="."?"tsconfig.json":`${i}/tsconfig.json`,modifiedFiles:d,affectedFiles:[...o].sort()})}return a}function Si(e,t){let n=t.filter(i=>i==="."||e===i||e.startsWith(`${i}/`));if(n.length===0)return null;let r=[...new Set(n)].sort((i,o)=>Ie(o)-Ie(i)||i.localeCompare(o)),a=r[0];return r[1]&&Ie(r[1])===Ie(a)?null:a}function Ie(e){return e==="."?0:e.split("/").filter(Boolean).length}function bi(e,t,n){let r=new Set,a=[e];for(let i=0;i<a.length;i+=1){let o=a[i];if(!(!o||r.has(o))){r.add(o);for(let s of n.get(o)??[]){if(s===t)return!0;r.has(s)||a.push(s)}}}return!1}function mr(e){let t=b();try{if(!ot(e.previousDbPath)||!ot(e.previousShardPath))throw new Error("prior TypeScript graph or language shard unavailable");let n=performance.now(),r=He();if(!r.available)throw new Error(r.reason);let a=performance.now()-n;n=performance.now();let i=new F({projectRoot:e.projectRoot,dbPath:e.previousDbPath,indexPath:e.previousIndexPath}),o,s;try{o=ge(i,{includeIgnored:!1}).filter(Be).sort(),s=fe(i)}finally{i.close()}let d=performance.now()-n,l=hi({projectMode:e.projectMode,workspaceProjects:e.projectMode==="workspace"?J(e.projectRoot,e.currentSnapshot.typescriptProjects):void 0,previousSnapshot:e.previousSnapshot,currentSnapshot:e.currentSnapshot,projectFiles:o,graph:s,producerIdentity:r.producerIdentity,rootTsconfigExists:ot(mi(e.projectRoot,"tsconfig.json"))});if(!l.eligible)throw new Error(l.reason);let c=_n(e.previousDbPath);if(!c)throw new Error("published TypeScript base generation unavailable");n=performance.now();let p=new ve({projectRoot:e.projectRoot,cacheDir:e.cacheDir,baseGeneration:c}),u=l.projects.map(S=>p.request({kind:"emit-documents",tsconfigPath:S.tsconfigPath,projectArgument:S.projectArgument,projectIdentity:l.projectIdentity,producerIdentity:r.producerIdentity,modifiedFiles:S.modifiedFiles,affectedFiles:S.affectedFiles})),g=u.flatMap(S=>S.fragments),m=performance.now()-n,x=fi(e.previousShardPath).size>=ln;n=performance.now();let w=x?null:X(e.previousShardPath,{inputKind:"TypeScript base SCIP shard",maxBytes:Oe}),f=x?{completeIndexBytes:null,affectedIndexBytes:an(g)}:cn({packageVersion:r.packageVersion,baseIndexBytes:w,fragments:g}),y=performance.now()-n;n=performance.now(),x?un({cacheDir:e.cacheDir,previousGenerationIdentity:l.previousFragmentGeneration,nextGenerationIdentity:l.nextFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:l.projectIdentity,baseShardCurrent:e.baseShardCurrent,fragments:g}):(on({cacheDir:e.cacheDir,packageVersion:r.packageVersion,indexBytes:w,producerIdentity:r.producerIdentity,projectIdentity:l.projectIdentity,generationIdentity:l.previousFragmentGeneration,documentIdentities:l.previousDocumentIdentities,allowUntrackedDocuments:!0}),sn({cacheDir:e.cacheDir,previousGenerationIdentity:l.previousFragmentGeneration,producerIdentity:r.producerIdentity,projectIdentity:l.projectIdentity,generationIdentity:l.nextFragmentGeneration,fragments:g,documentIdentities:l.nextDocumentIdentities}));let P=performance.now()-n;n=performance.now(),f.completeIndexBytes&&st(e.candidateShardPath,f.completeIndexBytes),st(e.candidateAffectedScipPath,f.affectedIndexBytes);let v=performance.now()-n,R={scipPath:x?e.previousShardPath:e.candidateShardPath,candidateScipPath:e.candidateShardPath,affectedScipPath:e.candidateAffectedScipPath,completeScipUpdated:!x,durationMs:b()-t,cold:u.some(S=>S.cold),changedFiles:l.plan.changedFiles,affectedFiles:l.plan.affectedFiles,producerIdentity:r.producerIdentity,previousFragmentGeneration:l.previousFragmentGeneration,nextFragmentGeneration:l.nextFragmentGeneration,manifest:l.manifest,plan:l.plan,projectFileCount:o.length,referenceFragmentsByFile:new Map(g.map(S=>[S.relativePath,S.referenceFragments])),timings:{runtimeMs:a,graphMs:d,requestMs:m,serviceMs:u.reduce((S,B)=>S+B.durationMs,0),assemblyMs:y,fragmentStoreMs:P,writeMs:v}};return e.onStatus(`Incremental TypeScript index emitted ${R.affectedFiles.length} affected document(s) across ${l.projects.length} project(s) in ${(R.durationMs/1e3).toFixed(3)}s (${R.cold?"cold":"warm"} service; ${x?"whole SCIP deferred":"whole SCIP current"}; runtime ${a.toFixed(0)}ms, graph ${d.toFixed(0)}ms, request ${m.toFixed(0)}ms, assembly ${y.toFixed(0)}ms, fragments ${P.toFixed(0)}ms, write ${v.toFixed(0)}ms).`),R}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 hr(e){let t=He();if(!t.available)throw new Error(t.reason);let n=pn({cacheDir:e.cacheDir,generationIdentity:e.generationIdentity,baseIndexBytes:X(e.baseShardPath,{inputKind:"TypeScript base SCIP shard",maxBytes:Oe}),packageVersion:t.packageVersion});st(e.candidateShardPath,n)}function pr(e,t,n){let r=e.files.filter(a=>Et(a.path,e.languages)!=="source").map(a=>({path:a.path,size:a.size,hash:a.hash})).sort((a,i)=>a.path.localeCompare(i.path));return ct(JSON.stringify({version:1,producerIdentity:n,pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:[...e.typescriptProjects].sort(),projectFiles:[...t].sort(),nonSourceInputs:r}))}function gr(e,t){return ct(JSON.stringify({version:1,producerIdentity:t,snapshot:e}))}function fr(e,t,n,r,a){let i=new Set(e.files.map(d=>d.path)),o=Jt({projectFiles:t.filter(d=>i.has(d)),snapshot:e,graph:n,engineIdentity:r}),s=new Map;for(let d of a){let l=o.identityFor(d,"typescript-scip-document-v1");if(l.key){s.set(d,l.key);continue}if(i.has(d))return null;s.set(d,ct(JSON.stringify({version:1,producerIdentity:r,generatedDocument:d})))}return s}function ct(e){return gi("sha256").update(e).digest("hex")}import{closeSync as Pi,existsSync as Ee,fstatSync as xi,lstatSync as Ri,openSync as vi,renameSync as lt,rmSync as we,statSync as Ii,writeSync as Ei}from"fs";import{cpus as wi}from"os";import{join as ut}from"path";function _i(e,t){if(e.temporaryRootConfigContent===void 0)return null;let n=ut(t,"tsconfig.json"),r=Buffer.from(e.temporaryRootConfigContent,"utf8"),a;try{a=vi(n,"wx",384)}catch(i){if(i.code==="EEXIST")return null;throw i}try{Ei(a,r);let i=xi(a);return{path:n,content:r,device:i.dev,inode:i.ino}}finally{Pi(a)}}function ji(e){if(e)try{let t=Ri(e.path);if(!t.isFile()||t.dev!==e.device||t.ino!==e.inode||t.size!==e.content.byteLength)return;let n;try{n=X(e.path,{maxBytes:e.content.byteLength,inputKind:"temporary TypeScript index configuration"})}catch{return}if(!n.equals(e.content))return;we(e.path)}catch(t){if(t.code!=="ENOENT")throw t}}function Ti(e,t,n){if(!e.defaultOutputPath)return;let r=ut(t,e.defaultOutputPath);n!==r&&Ee(r)&<(r,n)}function Fi(e,t,n){if(!e.defaultOutputPath)return null;let r=ut(t,e.defaultOutputPath);if(r===n)return null;let a=`${n}.default-output-backup`;return we(a,{force:!0}),Ee(r)?(lt(r,a),{defaultOutputPath:r,backupPath:a}):{defaultOutputPath:r,backupPath:null}}function ki(e){e&&(we(e.defaultOutputPath,{force:!0}),e.backupPath&&Ee(e.backupPath)&<(e.backupPath,e.defaultOutputPath))}function Di(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,wi().length));return Math.max(1,Math.min(e,Math.floor(r)))}async function Sr(e,t,n,r,a){T(a,"Reindex cancelled by its owner.");let i=e.filter(c=>c.config.defaultOutputPath),o=e.filter(c=>!c.config.defaultOutputPath),s=[],d=Di(o.length,r),l=await Tn(o,d,c=>dt(c,t,n,a));if(d>1){let c=new Map;for(let p of l.filter(u=>u.result.skipped&&u.retryable)){let u=o.find(g=>g.id===p.result.id);u&&(n(`Retrying ${u.label} indexer serially after parallel failure...`),T(a,"Reindex cancelled by its owner."),c.set(u.id,(await dt(u,t,n,a)).result))}s.push(...l.map(({result:p})=>c.get(p.id)??p))}else s.push(...l.map(({result:c})=>c));for(let c of i)T(a,"Reindex cancelled by its owner."),s.push((await dt(c,t,n,a)).result);return s.sort((c,p)=>e.findIndex(u=>u.id===c.id)-e.findIndex(u=>u.id===p.id))}async function dt(e,t,n,r){T(r,"Reindex cancelled by its owner."),n(`Indexing ${e.label} with ${e.resolvedBinary}...`),we(e.scipPath,{force:!0});let a=Fi(e.config,t,e.scipPath),i=_i(e,t),o=[e.binary,...e.args].join(" "),s=b();try{e.trustedProjectTool&&Ut(t,e.trustedProjectTool);let l=Tt(e.binary,e.args),c=await se({command:l.binary,args:l.args,label:`${e.label} indexer`,cwd:t,env:e.env,timeoutMs:Oi(),maxStdoutBytes:50*1024*1024,maxStderrBytes:50*1024*1024,signal:r});if(c.status!==0){let p=c.stderr.trim();throw new Error(`${e.resolvedBinary} exited with status ${c.status}${p?`:
|
|
230
|
+
${p}`:""}`)}Ti(e.config,t,e.scipPath)}catch(l){if(r?.aborted)throw Dt(r,"Reindex cancelled by its owner.");let c=l instanceof Error?l.message:String(l),p=`${e.resolvedBinary} indexer failed: ${c.split(`
|
|
231
|
+
`)[0]}`,u=e.label===e.language?p:`${e.label}: ${p}`;return n(`Skipping ${e.label}: ${p}`),{result:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:b()-s,command:o,skipped:{language:e.language,reason:u}},retryable:Ai(l)}}finally{ki(a),ji(i)}if(!Ee(e.scipPath)){let l=`${e.resolvedBinary} indexer completed but did not produce ${e.scipPath}`,c=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:b()-s,command:o,skipped:{language:e.language,reason:c}},retryable:!1}}let d;try{d=Ii(e.scipPath).size}catch{d=void 0}return{result:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,durationMs:b()-s,command:o,outputBytes:d},retryable:!1}}function Oi(){let e=Number(process.env.CODEBASEIQ_INDEXER_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):vt.indexer}function Ai(e){return e instanceof It?e.kind==="spawn"&&yr(e.cause):yr(e)}function yr(e){let t=e?.code;return t==="EAGAIN"||t==="ENOMEM"||t==="EMFILE"||t==="ENFILE"||t==="ETXTBSY"}import{execFileSync as Pr}from"child_process";import{homedir as br,platform as Li}from"os";import{delimiter as Mi,join as _e}from"path";function xr(e,t){let n=e.installMethods,r=pe(e);if(!n?.length)return t(`No auto-install method available for ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1;for(let a of n){if(!a.identity||!a.destination){t(`Refusing ${a.label} installation for ${r}: the installer descriptor lacks an immutable identity or destination.`);continue}if(!jt(a.prerequisite))continue;let i=Ni(a);t(`Installing immutable ${a.identity} via ${a.label} into ${i}; expected executable: ${r}.`);try{Pr(a.binary,a.args,{stdio:"inherit",windowsHide:!0,timeout:3e5,env:process.env,shell:Li()==="win32"});let o=Z(e);if(o){let s=o===e.indexerBinary?"":` (using ${o})`;return t(`Successfully installed ${a.identity} via ${a.label}${s}; resolved executable: ${o}.`),!0}t(`${a.label} command completed but ${r} was not found on PATH`)}catch(o){let s=o instanceof Error?o.message:String(o);t(`${a.label} install failed: ${s}`)}}return t(`Could not auto-install ${r}.`),e.installUrl&&t(`Install manually from: ${e.installUrl}`),!1}function Ni(e){if(e.binary==="npm")return pt("npm",["root","-g"])??e.destination;if(e.binary==="go"){let t=pt("go",["env","GOBIN"]);if(t)return t;let n=pt("go",["env","GOPATH"]);if(n)return _e(n.split(Mi)[0],"bin")}return e.binary==="dotnet"?_e(process.env.DOTNET_CLI_HOME??br(),".dotnet","tools"):e.binary==="dart"?_e(process.env.PUB_CACHE??_e(br(),".pub-cache"),"bin"):e.destination}function pt(e,t){try{return Pr(e,t,{stdio:["ignore","pipe","ignore"],windowsHide:!0,encoding:"utf8",timeout:1e4,killSignal:"SIGKILL",env:process.env}).trim()||null}catch{return null}}async function dd(e){let{projectRoot:t,maxHeapMb:n=8192,onStatus:r=console.log}=e,a=e.skipAutoInstall===!0||e.installMissing!==!0,i=Hi(e),o=Date.now(),s=b();Te(h(i.outputScip),{recursive:!0}),Te(h(i.outputDb),{recursive:!0});let d=e.languages??Ge(t);if(d.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: ${d.join(", ")}`);let l=le("reindex.fingerprint",()=>Ct(t,d,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath}),{languages:d.length}),c,p;if(e.skipIfUnchanged!==!1&&!hn(t,i.outputDb)&&Rr(i.outputScip)===Rr(E(h(i.outputDb),"index.scip"))){let f=ue(t);if(c=f?.clean?me(f,l):void 0,f&&!f.clean&&!qi(i)){let y=yn(f,d,{pnpmWorkspaces:e.pnpmWorkspaces,typescriptProjectMode:e.typescriptProjectMode,typescriptProjects:e.typescriptProjects,clojureConfigPath:e.clojureConfigPath});if(y)try{he({snapshot:y.snapshot,manifest:y.manifest,targetCacheDir:h(i.outputDb),targetProjectRoot:t,persistLease:!1}),xn(y.snapshot,h(i.outputDb)),r(`Forked shared baseline ${y.snapshot.generationId.slice(0,12)} for dirty worktree reindex`)}catch(P){r(`Shared baseline fork failed; continuing locally: ${A(P)}`)}}else if(c){let y=qe(c);if(y){if(!Wi(i,l))try{he({snapshot:c,manifest:y,targetCacheDir:h(i.outputDb),targetProjectRoot:t}),r(`Attached shared generation ${c.generationId.slice(0,12)}`)}catch(P){r(`Shared generation attach failed; continuing locally: ${A(P)}`)}}else{let P=await bn(c);if(P.kind==="owner")p=P.release;else if(P.kind==="generation-ready"){let v=qe(c);if(v)try{he({snapshot:c,manifest:v,targetCacheDir:h(i.outputDb),targetProjectRoot:t,action:"waited"}),r(`Attached shared generation ${c.generationId.slice(0,12)} after waiting`)}catch(R){r(`Shared generation attach failed after waiting; continuing locally: ${A(R)}`)}}else r("Shared generation build lock timed out; continuing with an isolated local reindex")}}}let g=Lt(E(h(i.outputDb),"cache-lifecycle.lock"),{waitMs:3e4});if(!g)throw p?.(),new Error(`Could not acquire codebaseiq cache lifecycle lock for ${h(i.outputDb)}.`);let m;try{m=await q("reindex.lock",()=>bo(E(h(i.outputDb),"index.lock"),{projectRoot:t,trigger:e.trigger,onStatus:r}),{languages:d.length})}catch(f){throw g.release(),p?.(),f}let x=null,w=kn();try{mn(i.outputDb,i.outputScip,i.metaPath);let f=Vi(h(i.outputDb));f.removed>0&&r(`Removed ${f.removed} abandoned reindex workspace(s)`);for(let G of f.errors)r(`Could not remove abandoned reindex workspace: ${G}`);let y=null,P=le("reindex.reuse-check",()=>(y=Ji({opts:e,paths:i,languages:d,fingerprint:l,start:o,monotonicStart:s,onStatus:r}),y),()=>({languages:d.length,reused:y!==null}));if(P){vr({snapshot:c,paths:i,projectRoot:t,fingerprint:l,onStatus:r});let G=Ue(i.outputDb,P);return G.state==="failed"&&r(`Warning: reindex succeeded, but activity telemetry was not recorded: ${G.reason}`),Ne(t,h(i.outputDb)),P}await q("reindex.scip-cli-ready",()=>uo(a,r));let v=Qi(i);x=v.runDir;let R,S=await q("reindex.fresh",async()=>(R=await Xi({opts:e,languages:d,projectRoot:t,paths:i,tempPaths:v,fingerprint:l,start:o,monotonicStart:s,maxHeapMb:n,skipAutoInstall:a,onStatus:r,writeTelemetry:w}),R),()=>({languages:d.length,reused:R?.reused,skipped:R?.skipped.length}));vr({snapshot:c,paths:i,projectRoot:t,fingerprint:l,onStatus:r});let B=Ue(i.outputDb,S);return B.state==="failed"&&r(`Warning: reindex succeeded, but activity telemetry was not recorded: ${B.reason}`),Ne(t,h(i.outputDb)),S}catch(f){let y=De({trigger:e.trigger,result:"failed",start:o,monotonicStart:s,error:f instanceof Error?f.message:String(f)});qr(i.metaPath,y);let P=rn(i.outputDb,y);throw P.state==="failed"&&r(`Warning: failed reindex activity telemetry was not recorded: ${P.reason}`),f}finally{if(x){let f=x;try{W(()=>Q(f,{recursive:!0,force:!0}))}catch(y){r(`Warning: temporary reindex workspace was left behind: ${A(y)}`)}}m(),g.release(),p?.()}}function vr(e){if(e.snapshot)try{let t=ue(e.projectRoot),n=t?me(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=Sn({snapshot:e.snapshot,sourceCacheDir:h(e.paths.outputDb),sourceProjectRoot:e.projectRoot,sourceStillValid:()=>{let a=ue(e.projectRoot);return(a?me(a,e.fingerprint):void 0)?.generationId===e.snapshot?.generationId}});Pn(e.snapshot,h(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: ${A(t)}`)}}function Wi(e,t){if(!_(e.outputScip)||!_(e.outputDb)||!Wr(e.metaPath,t))return!1;let n=N(e.outputDb,e.metaPath);return n.state!=="invalid"&&n.state!=="drifted"}function qi(e){if(!_(e.outputScip)||!_(e.outputDb)||!V(e.metaPath))return!1;let t=N(e.outputDb,e.metaPath);return t.state!=="invalid"&&t.state!=="drifted"}function A(e){return e instanceof Error?e.message:String(e)}function mt(e,t,n,r,a,i){try{te(Dn({indexPath:n,reuseExisting:a,affectedFiles:i}),{projectRoot:e,dbPath:t,onStatus:r})}catch(o){r(`Runtime-boundary extraction unavailable: ${o instanceof Error?o.message:String(o)}.`)}}function Hi(e){let t=e.outputScip??E(e.projectRoot,"index.scip"),n=e.outputDb??E(e.projectRoot,"index.db");return{outputScip:t,outputDb:n,metaPath:E(h(n),"meta.json")}}function Ji(e){let t=N(e.paths.outputDb,e.paths.metaPath);if(e.opts.skipIfUnchanged===!1||!_(e.paths.outputScip)||!_(e.paths.outputDb)||!Wr(e.paths.metaPath,e.fingerprint)||t.state==="invalid"||t.state==="drifted")return null;te(ee(),{projectRoot:e.opts.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),mt(e.opts.projectRoot,e.paths.outputDb,e.paths.outputScip,e.onStatus,!0),N(e.paths.outputDb,e.paths.metaPath).state==="drifted"&&(We(e.paths.outputDb,e.paths.metaPath),e.onStatus("Published refreshed SQLite generation after post-index augmentation"));let n=b()-e.monotonicStart,r=De({trigger:e.opts.trigger,result:"reused",start:e.start,monotonicStart:e.monotonicStart,languages:e.languages,skipped:[]});return qr(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:zi(e.paths,e.opts.projectRoot,e.languages,e.opts)}}function zi(e,t,n,r){let a=Gr(t,n,r);return n.map(i=>({id:i,language:i,reused:!0,fingerprint:ne(a[i]),outputBytes:re(yt(e.outputDb,i)),durationMs:0}))}function Qi(e){let t=$i(E(h(e.outputDb),"reindex-"));return{runDir:t,tempOutputScip:E(t,je(e.outputScip)),tempOutputDb:E(t,je(e.outputDb)),tempMetaPath:E(t,je(e.metaPath))}}function Vi(e){let t=[],n;try{n=Fr(e,{withFileTypes:!0})}catch(a){return{removed:0,errors:[A(a)]}}let r=0;for(let a of n)if(!(!a.name.startsWith("reindex-")||!a.isDirectory()))try{Q(E(e,a.name),{recursive:!0,force:!0}),r+=1}catch(i){t.push(`${a.name}: ${A(i)}`)}return{removed:r,errors:t}}async function Xi(e){let t={...process.env,NODE_OPTIONS:`--max-old-space-size=${e.maxHeapMb}`},n,r=await q("reindex.language-indexers",async()=>(n=await Ki(e,t),n),()=>({languages:e.languages.length,indexed:n?.indexedOutputs.length,reused:n?.reusedLanguages.length,skipped:n?.skippedLanguages.length})),{indexedOutputs:a,skippedLanguages:i,reusedLanguages:o,languageFingerprints:s,shards:d,typescriptProjectShardContext:l,incrementalTypeScript:c}=r;if(o.length>0&&e.onStatus(`Reused ${o.length} cached language shard(s): ${o.join(", ")}`),Yi({run:e,indexedOutputs:a,skippedLanguages:i,reusedLanguages:o})){let g=le("reindex.publish",()=>so(e,a,i,o,s,l),{mode:"metadata-only",languages:a.length,reused:o.length}),m=g.durationMs;return e.onStatus(`All language shards unchanged; reused existing SQLite index in ${(m/1e3).toFixed(1)}s`),{languages:a.map(x=>x.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:m,reused:!0,skipped:i,lastRefresh:g,shards:d,writeTelemetry:e.writeTelemetry}}let p=await q("reindex.publish",()=>oo(e,t,a,i,o,s,l,c),{mode:c?"incremental-or-fallback":"full",languages:a.length,reused:o.length,skipped:i.length}),u=p.durationMs;return e.onStatus(`Done in ${(u/1e3).toFixed(1)}s`),{languages:a.map(g=>g.language),indexPath:e.paths.outputScip,dbPath:e.paths.outputDb,durationMs:u,reused:!1,skipped:i,lastRefresh:p,shards:d,writeTelemetry:e.writeTelemetry}}function Yi(e){if(e.run.opts.skipIfUnchanged===!1||e.skippedLanguages.length>0||!_(e.run.paths.outputScip)||!_(e.run.paths.outputDb))return!1;let t=N(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(a=>a.language));return e.run.languages.length>0&&r.size===e.run.languages.length&&e.indexedOutputs.length===e.run.languages.length&&e.run.languages.every(a=>n.has(a)&&r.has(a))}async function Ki(e,t){let n=ro({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=[],a=new Set;for(let[j,bt]of n)bt.reused&&(r.push({language:j,scipPath:bt.scipPath}),a.add(j));for(let j of a)e.onStatus(`Reusing cached ${j} SCIP shard (language inputs unchanged).`);let i=n.get("typescript"),o=N(e.paths.outputDb,e.paths.metaPath),s=V(e.paths.metaPath),d=o.state==="legacy"||o.state==="current",l=s?.scipCompanion!=="deferred"&&(o.state!=="current"||o.generation.publication?.scipCompanion!=="deferred"),c=i&&!i.reused&&d?mr({projectRoot:e.projectRoot,cacheDir:h(e.paths.outputDb),previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,previousShardPath:i.scipPath,candidateShardPath:ae(e.tempPaths.tempOutputScip,"typescript-incremental",0),candidateAffectedScipPath:ae(e.tempPaths.tempOutputScip,"typescript-affected",0),baseShardCurrent:l,previousSnapshot:ht(e.paths.metaPath),currentSnapshot:e.fingerprint,projectMode:e.opts.typescriptProjectMode,onStatus:e.onStatus}):null,p=new Set(c?["typescript"]:[]),u=c?void 0:Zi(e,n),{preparedRuns:g,skippedLanguages:m,languageOutputScipPaths:x}=po({languages:e.languages.filter(j=>!a.has(j)&&!p.has(j)),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:u?.allProjects,clojureConfigPath:e.opts.clojureConfigPath,onStatus:e.onStatus}),w=u?g.filter(j=>j.language!=="typescript"||u.missedProjectIds.has(j.id)):g,f=await Sr(w,e.projectRoot,e.onStatus,e.opts.indexerConcurrency,e.opts.signal),y=[];if(u){to(e.paths.outputDb,f,e.writeTelemetry);let j=x.typescript??e.tempPaths.tempOutputScip;y=no({outputDb:e.paths.outputDb,tempOutputScip:e.tempPaths.tempOutputScip,outputScipPath:j,reusedProjects:u.reusedProjects,writeTelemetry:e.writeTelemetry})}let P=[...f,...y],{indexedOutputs:v}=fo(P,m),R=c?[{language:"typescript",scipPath:c.scipPath}]:[],S=[...r,...R,...v];mo(S,m,e.languages,e.opts.allowPartial,e.onStatus);let B=c?[{id:"typescript",language:"typescript",label:"typescript (incremental documents)",scipPath:c.scipPath,outputScipPath:c.scipPath,durationMs:c.durationMs,command:"watch-service:typescript-index",outputBytes:re(c.scipPath)??void 0}]:[],G=ao(n,[...f,...B],u?{outputDb:e.paths.outputDb,classification:u.classification}:void 0);return{indexedOutputs:S,skippedLanguages:m,reusedLanguages:[...a],languageFingerprints:io(n,e.languages),shards:G,typescriptProjectShardContext:u?{projects:u.allProjects,fingerprints:u.fingerprints}:void 0,incrementalTypeScript:c??void 0}}function Zi(e,t){let n=t.get("typescript");if(!n||n.reused||e.opts.typescriptProjectMode!=="workspace")return;let r=J(e.projectRoot,e.opts.typescriptProjects);if(r.length===0)return;let a=sr(e.projectRoot,r),i=ar(n.fingerprint.files,r),o=ir(r,a),s=or(r,i,o),d=V(e.paths.metaPath),c=eo(d,s,m=>_(ke(e.paths.outputDb,m))),p=[...c.entries()].filter(([,m])=>m.reused).map(([m])=>m),u=new Set(p),g=new Set(r.filter(m=>!u.has(m)).map(m=>`typescript:${m}`));return{allProjects:r,fingerprints:s,classification:c,reusedProjects:p,missedProjectIds:g}}function eo(e,t,n){let r=new Map;for(let a of Object.keys(t)){let i=t[a];if(!e){r.set(a,{reused:!1,reason:"no reindex metadata found",fingerprint:i});continue}let o=e.version===K&&Le(e).typescriptProjectShardReuse?e.typescriptProjectShards?.[a]:void 0;if(!o){r.set(a,{reused:!1,reason:"no cached fingerprint for this project",fingerprint:i});continue}if(!n(a)){r.set(a,{reused:!1,reason:"cached shard file missing on disk",fingerprint:i});continue}if(k(o)!==k(i)){r.set(a,{reused:!1,reason:"project inputs changed since last index",fingerprint:i});continue}r.set(a,{reused:!0,fingerprint:i})}return r}function to(e,t,n){for(let r of t){if(r.skipped||!r.id.startsWith("typescript:"))continue;let a=r.id.slice(11),i=ke(e,a);Te(h(i),{recursive:!0}),$(n,C(r.scipPath,i))}}function no(e){return e.reusedProjects.map((t,n)=>{let r=ke(e.outputDb,t),a=ae(e.tempOutputScip,"typescript-project-cached",n);return $(e.writeTelemetry,C(r,a)),{id:`typescript:${t}`,language:"typescript",label:`typescript (${t})`,scipPath:a,outputScipPath:e.outputScipPath,durationMs:0,command:"cached",outputBytes:re(a)??void 0}})}function ro(e){let t=V(e.paths.metaPath),n=Gr(e.projectRoot,e.languages,e),r=new Map;for(let a of e.languages){let i=yt(e.paths.outputDb,a),o=n[a];if(!t){r.set(a,{reused:!1,reason:"no reindex metadata found",fingerprint:o,scipPath:i});continue}if(t.version!==K){r.set(a,{reused:!1,reason:`metadata version ${String(t.version??"unknown")} predates per-language shard caching`,fingerprint:o,scipPath:i});continue}if(a==="typescript"&&t.scipCompanion==="deferred"){r.set(a,{reused:!1,reason:"whole TypeScript SCIP companion is deferred behind changed-document overlays",fingerprint:o,scipPath:i});continue}if(!Le(t).languageShardReuse||!t.languageFingerprints){r.set(a,{reused:!1,reason:"no per-language fingerprints recorded in metadata",fingerprint:o,scipPath:i});continue}let s=t.languageFingerprints[a];if(!s){r.set(a,{reused:!1,reason:"no cached fingerprint for this language",fingerprint:o,scipPath:i});continue}if(!_(i)){r.set(a,{reused:!1,reason:"cached shard file missing on disk",fingerprint:o,scipPath:i});continue}if(k(s)!==k(o)){r.set(a,{reused:!1,reason:"language inputs changed since last index",fingerprint:o,scipPath:i});continue}r.set(a,{reused:!0,fingerprint:o,scipPath:i})}return r}function ao(e,t,n){let r=[];for(let[a,i]of e)i.reused&&r.push({id:a,language:a,reused:!0,fingerprint:ne(i.fingerprint),outputBytes:re(i.scipPath),durationMs:0});for(let a of t){let i=e.get(a.language),o=n&&a.id.startsWith("typescript:")?a.id.slice(11):null,s=o?n.classification.get(o):void 0;r.push({id:a.id,language:a.language,reused:!1,missReason:s?.reason??i?.reason??a.skipped?.reason,fingerprint:s?ne(s.fingerprint):i?ne(i.fingerprint):"unknown",outputBytes:a.outputBytes??null,durationMs:a.durationMs,command:a.command})}if(n)for(let[a,i]of n.classification)i.reused&&r.push({id:`typescript:${a}`,language:"typescript",reused:!0,fingerprint:ne(i.fingerprint),outputBytes:re(ke(n.outputDb,a)),durationMs:0});return r}function ne(e){return Ci("sha256").update(k(e)).digest("hex").slice(0,16)}function re(e){try{return Bi(e).size}catch{return null}}function io(e,t){let n={};for(let r of t){let a=e.get(r);a&&(n[r]=a.fingerprint)}return n}async function oo(e,t,n,r,a,i,o,s){T(e.opts.signal,"Reindex cancelled by its owner.");let d=!s||s.completeScipUpdated,l=!1;d&&(Ir(e.paths.outputDb,n,e.writeTelemetry),l=Er(n,e.tempPaths.tempOutputScip,e.onStatus));let c=await ho({run:e,env:t,indexedOutputs:n,skippedLanguages:r,reusedLanguages:a,incrementalTypeScript:s,completeScipAvailable:d,completeScipSanitized:l,materializeFullFallback:async()=>{if(T(e.opts.signal,"Reindex cancelled by its owner."),!s||s.completeScipUpdated)return l;e.onStatus("Materializing the deferred whole TypeScript SCIP companion for full conversion..."),hr({cacheDir:h(e.paths.outputDb),generationIdentity:s.nextFragmentGeneration,baseShardPath:s.scipPath,candidateShardPath:s.candidateScipPath});let v=n.map(R=>R.language==="typescript"?{language:R.language,scipPath:s.candidateScipPath}:R);return Ir(e.paths.outputDb,v,e.writeTelemetry),l=Er(v,e.tempPaths.tempOutputScip,e.onStatus),l}});T(e.opts.signal,"Reindex cancelled by its owner."),te(ee(),{projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,onStatus:e.onStatus}),mt(e.projectRoot,e.tempPaths.tempOutputDb,e.tempPaths.tempOutputScip,e.onStatus,!1,s?.affectedFiles);let p=et(e.tempPaths.tempOutputDb);if(p.added.length>0&&e.onStatus(`Added SQLite query indexes: ${p.added.join(", ")}`),p.removed.length>0&&e.onStatus(`Removed redundant SQLite indexes: ${p.removed.join(", ")}`),c.mode==="incremental"&&s){let v=null,R=null;try{v=new F({projectRoot:e.projectRoot,dbPath:e.tempPaths.tempOutputDb,indexPath:e.tempPaths.tempOutputScip}),R=new F({projectRoot:e.projectRoot,dbPath:e.paths.outputDb,indexPath:e.paths.outputScip});let S=zt(v,e.fingerprint,s.referenceFragmentsByFile,R);e.onStatus(`Cached exact TypeScript reference fragments for ${S} affected document(s).`)}catch(S){e.onStatus(`Exact TypeScript reference fragment prefill unavailable: ${S instanceof Error?S.message:String(S)}.`)}finally{v?.close(),R?.close()}}let u=ht(e.paths.metaPath),g=c.mode==="incremental"&&s?So(s,c.changedDocumentPaths):Xe({projectRoot:e.projectRoot,previousDbPath:e.paths.outputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.tempPaths.tempOutputDb,candidateIndexPath:e.tempPaths.tempOutputScip,previousSnapshot:u,currentSnapshot:e.fingerprint,refreshResult:"rebuilt"}),m=De({trigger:e.opts.trigger,result:"rebuilt",start:e.start,monotonicStart:e.monotonicStart,languages:n.map(v=>v.language),skipped:[...r]}),x=c.mode==="incremental"&&c.scipCompanion==="deferred",w={...i};x&&delete w.typescript;let{metadata:f,pruneProjects:y}=Or({run:e,indexedOutputs:n,skippedLanguages:r,reusedLanguages:a,languageFingerprints:w,typescriptProjectShardContext:o,lastRefresh:m});f.scipCompanion=x?"deferred":"current",Ar(e.paths.outputDb,y),St(e.tempPaths.tempMetaPath,f);let P=fn({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:c.mode==="incremental"&&c.scipCompanion==="deferred",publication:c.mode==="incremental"?{mode:"incremental",validation:"passed",converterDurationMs:c.converterDurationMs,affectedDocumentCount:s?.affectedFiles.length,changedDocumentCount:c.changedDocumentPaths.length,producerDurationMs:s?.timings.serviceMs,materializationDurationMs:s?.durationMs,patchDurationMs:c.patchDurationMs,scipCompanion:c.scipCompanion,...c.scipCompanion==="deferred"&&s?{typescriptOverlayGeneration:s.nextFragmentGeneration}:{}}:{mode:"full",validation:"passed",converterDurationMs:c.converterDurationMs,scipCompanion:"current",...c.fallbackReason?{fallbackReason:c.fallbackReason}:{}}});return P.achievedDurability==="file-flushed"&&e.onStatus(`Published local generation ${P.currentGeneration.slice(0,12)} (file-flushed; directory sync unsupported)`),gn(h(e.paths.outputDb),c.mode==="incremental"&&c.scipCompanion==="deferred"?[s.nextFragmentGeneration]:[]),dn(h(e.paths.outputDb),s?.completeScipUpdated?[s.nextFragmentGeneration]:[]),Dr(e.paths.outputDb,g,e.onStatus),m}function so(e,t,n,r,a,i){let o=ht(e.paths.metaPath),s=null;try{$(e.writeTelemetry,C(e.paths.outputDb,e.tempPaths.tempOutputDb))}catch(u){s=Cn("reused","oracle-error",`Could not snapshot the prior database: ${u instanceof Error?u.message:String(u)}`)}te(ee(),{projectRoot:e.projectRoot,dbPath:e.paths.outputDb,onStatus:e.onStatus}),mt(e.projectRoot,e.paths.outputDb,e.paths.outputScip,e.onStatus,!0);let d=et(e.paths.outputDb);d.added.length>0&&e.onStatus(`Added SQLite query indexes: ${d.added.join(", ")}`),d.removed.length>0&&e.onStatus(`Removed redundant SQLite indexes: ${d.removed.join(", ")}`),s??=Xe({projectRoot:e.projectRoot,previousDbPath:e.tempPaths.tempOutputDb,previousIndexPath:e.paths.outputScip,candidateDbPath:e.paths.outputDb,candidateIndexPath:e.paths.outputScip,previousSnapshot:o,currentSnapshot:e.fingerprint,refreshResult:"reused"});let l=De({trigger:e.opts.trigger,result:"reused",start:e.start,monotonicStart:e.monotonicStart,languages:t.map(u=>u.language),skipped:[...n]}),{metadata:c,pruneProjects:p}=Or({run:e,indexedOutputs:t,skippedLanguages:n,reusedLanguages:r,languageFingerprints:a,typescriptProjectShardContext:i,lastRefresh:l});return Ar(e.paths.outputDb,p),St(e.paths.metaPath,c),We(e.paths.outputDb,e.paths.metaPath),Dr(e.paths.outputDb,s,e.onStatus),l}function ht(e){return wt(V(e)?.fingerprint)}function Dr(e,t,n){try{Bn(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 Or(e){let t=co({mode:e.run.opts.typescriptProjectMode,skippedLanguages:e.skippedLanguages,reusedLanguages:e.reusedLanguages,context:e.typescriptProjectShardContext,metaPath:e.run.paths.metaPath});return{metadata:{version:K,status:e.skippedLanguages.length===0?"complete":"partial",updatedAt:new Date().toISOString(),fingerprint:e.run.fingerprint,sqliteLayoutVersion:1,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 co(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=V(e.metaPath),n=t?.version===K?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 Ar(e,t){let n=Ur(e);if(t===null){W(()=>Q(n,{recursive:!0,force:!0}));return}let r;try{r=Fr(n)}catch{return}for(let a of lo(r,t))W(()=>Q(E(n,a),{force:!0}))}function lo(e,t){let n=new Set(t.map(r=>`${at(r)}.scip`));return e.filter(r=>!n.has(r))}function Ir(e,t,n){for(let r of t){let a=yt(e,r.language);Te(h(a),{recursive:!0}),r.scipPath!==a&&$(n,C(r.scipPath,a))}}async function uo(e,t){if(!Ce()){if(Ui()==="win32")throw new Error("The scip CLI was not found. On Windows it ships via the npm sidecar package codebaseiq-windows (installed automatically with codebaseiq). Reinstall codebaseiq with optional dependencies enabled, or follow 'codebaseiq setup' guidance for the exact sidecar package version, or set CODEBASEIQ_SCIP_BIN to a local scip.exe path.");if(e)throw new Error(`The scip CLI is required but not found on PATH.
|
|
232
|
+
To install the reviewed version, run: codebaseiq reindex --install-missing
|
|
233
|
+
Or install manually from: https://github.com/sourcegraph/scip/releases`);if(t("scip CLI not found on PATH. Attempting auto-install..."),!Ft(t))throw new Error(`The scip CLI is required but could not be installed.
|
|
234
|
+
Install manually from: https://github.com/sourcegraph/scip/releases`)}}function po(e){let t=[],n=[],r=e.languages.map((i,o)=>({language:i,scipPath:e.languages.length>1?ae(e.tempOutputScip,i,o):e.tempOutputScip})),a=Object.fromEntries(r.map(({language:i,scipPath:o})=>[i,o]));for(let{language:i,scipPath:o}of r){let s=go({...e,language:i,scipPath:o});for(let d of s)"skipped"in d?Lr(n,d.skipped):t.push(d.prepared)}return{preparedRuns:t,skippedLanguages:n,languageOutputScipPaths:a}}function go(e){if(e.language!=="typescript"||e.typescriptProjectMode!=="workspace")return[gt({...e,id:e.language,label:e.language,outputScipPath:e.scipPath})];let t=e.preDiscoveredTypeScriptProjects??J(e.projectRoot,e.typescriptProjects);return t.length===0?[gt({...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)=>gt({...e,id:`typescript:${n}`,label:`typescript (${n})`,scipPath:ae(e.tempOutputScip,"typescript-project",r),outputScipPath:e.scipPath,pnpmWorkspaces:!1,projectPath:n})))}function gt(e){let t=Ye(e.language),n=pe(t),r=Bt(t,e.projectRoot),a=e.trustProjectTools&&r?Gt(t,e.projectRoot):null,i=Z(t);if(!a&&!i&&r){let c=`${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}: ${c}`),{skipped:{language:e.language,reason:c}}}if(!a&&!i&&!$t(t)){if(e.skipAutoInstall){let c=`${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}: ${c}`),{skipped:{language:e.language,reason:c}}}if(e.onStatus(`${n} not found. Attempting auto-install...`),!xr(t,e.onStatus)){let c=`${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}: ${c}`),{skipped:{language:e.language,reason:c}}}}let o=a?.canonicalPath??Z(t);if(!o){let c=`${n} was not found after installation checks.`;return e.onStatus(`Skipping ${e.language}: ${c}`),{skipped:{language:e.language,reason:c}}}let{binary:s,args:d}=t.indexArgs({projectRoot:e.projectRoot,outputPath:e.scipPath,pnpmWorkspaces:e.pnpmWorkspaces,indexerBinary:o,projectPath:e.projectPath,configPath:e.language==="clojure"?e.clojureConfigPath:void 0}),l=zn({language:e.language,projectPath:e.projectPath,pnpmWorkspaces:e.pnpmWorkspaces});if(a&&!a.executable){let c=`${a.relativePath} is not executable; refusing project-local indexer.`;return e.onStatus(`Skipping ${e.language}: ${c}`),{skipped:{language:e.language,reason:c}}}return a&&e.onStatus(`Trusted project-local ${e.language} indexer ${a.relativePath} (${a.sha256.slice(0,12)}\u2026, ${a.canonicalPath}).`),{prepared:{id:e.id,language:e.language,label:e.label,scipPath:e.scipPath,outputScipPath:e.outputScipPath,config:t,resolvedBinary:o,binary:s,args:d,env:Wt(t,e.env,o),...l===void 0?{}:{temporaryRootConfigContent:l},...a?{trustedProjectTool:a}:{}}}}function fo(e,t){let n=new Map;for(let a of e)if(a.skipped)Lr(t,a.skipped);else{let i=`${a.language}\0${a.outputScipPath}`,o=n.get(i)??{language:a.language,outputScipPath:a.outputScipPath,scipPaths:[]};o.scipPaths.push(a.scipPath),n.set(i,o)}let r=[];for(let a of n.values())if(a.scipPaths.length>1)tn(a.scipPaths,a.outputScipPath),r.push({language:a.language,scipPath:a.outputScipPath});else{let i=a.scipPaths[0];i!==a.outputScipPath&&kr(i,a.outputScipPath),r.push({language:a.language,scipPath:a.outputScipPath})}return{indexedOutputs:r}}function Lr(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 mo(e,t,n,r,a){if(e.length===0){let i=t.map(o=>` - ${o.language}: ${o.reason}`).join(`
|
|
235
|
+
`);throw new Error(`No language indexers ran successfully. Install at least one indexer for the languages in this project.
|
|
236
|
+
`+i)}if(t.length!==0&&(a(`Indexed ${e.length} language output(s); skipped or incomplete: ${t.map(i=>i.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.
|
|
237
|
+
`+t.map(i=>` - ${i.language}: ${i.reason}`).join(`
|
|
238
|
+
`))}function Er(e,t,n){if(e.length>1){n(`Merging ${e.length} language indexes...`);let r=performance.now(),a=nn(e.map(i=>i.scipPath),t);return Nr(a,n),n(`Merged and sanitized SCIP indexes in ${(performance.now()-r).toFixed(0)}ms.`),!0}else e[0].scipPath!==t&&kr(e[0].scipPath,t);return!1}async function ho(e){let t;if(yo(e)){let a=E(e.run.tempPaths.runDir,"typescript-affected.db");try{Mr(e.incrementalTypeScript.affectedScipPath,e.run.onStatus),e.run.onStatus(`Converting ${e.incrementalTypeScript.affectedFiles.length} affected TypeScript document(s) to SQLite...`);let i=performance.now();await wr(e.incrementalTypeScript.affectedScipPath,a,e.env,e.run.onStatus,!1,e.run.opts.signal),e.run.onStatus(`Converted affected SCIP documents in ${(performance.now()-i).toFixed(0)}ms.`);let o=Zn({previousDbPath:e.run.paths.outputDb,miniDbPath:a,candidateDbPath:e.run.tempPaths.tempOutputDb,affectedFiles:e.incrementalTypeScript.affectedFiles,writeTelemetry:e.run.writeTelemetry});return e.run.onStatus(`Patched ${o.affectedDocumentCount} SQLite document(s) in ${(o.durationMs/1e3).toFixed(3)}s.`),{mode:"incremental",changedDocumentPaths:o.changedDocumentPaths,patchDurationMs:o.durationMs,converterDurationMs:performance.now()-i,scipCompanion:e.incrementalTypeScript.completeScipUpdated?"current":"deferred"}}catch(i){T(e.run.opts.signal,"Reindex cancelled by its owner."),t=i instanceof Error?i.message:String(i),W(()=>Q(a,{force:!0})),W(()=>Q(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 await wr(e.run.tempPaths.tempOutputScip,e.run.tempPaths.tempOutputDb,e.env,e.run.onStatus,n,e.run.opts.signal),{mode:"full",converterDurationMs:performance.now()-r,...t?{fallbackReason:t}:{}}}function yo(e){if(!e.incrementalTypeScript||e.skippedLanguages.length>0||!_(e.run.paths.outputDb)||!_(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 So(e,t){let n=b(),r=[...t].sort(),a=new Set(r),i={addedFiles:[],modifiedFiles:r,deletedFiles:[],changedFiles:r,unchangedFiles:e.affectedFiles.filter(o=>!a.has(o)).sort()};return{version:1,status:"evaluated",refreshResult:"rebuilt",recordedAt:new Date().toISOString(),durationMs:b()-n,manifest:e.manifest,plan:e.plan,comparison:i,evaluation:Ve(e.plan,i,e.projectFileCount)}}async function wr(e,t,n,r,a=!1,i){if(T(i,"Reindex cancelled by its owner."),r("Converting to SQLite..."),!_(e))throw new Error(`SCIP index not found at ${e} after indexing`);try{a||Mr(e,r);let o=Ce();if(!o)throw new Error("scip CLI is not available");let s=await se({command:o,args:["expt-convert","--output",t,e],label:"SCIP SQLite conversion",env:n,maxStdoutBytes:50*1024*1024,maxStderrBytes:50*1024*1024,timeoutMs:3e5,signal:i});if(s.status!==0)throw new Error(`scip expt-convert exited with ${s.status}${s.stderr.trim()?`: ${s.stderr.trim()}`:""}`)}catch(o){T(i,"Reindex cancelled by its owner.");let s=o instanceof Error?o.message:String(o);throw new Error(`Failed to convert SCIP index to SQLite: ${s}`,{cause:o})}}function Mr(e,t){let n=en(e);Nr(n,t)}function Nr(e,t){e.removedDefinitionOccurrences!==0&&t(`Sanitized ${e.removedDefinitionOccurrences} invalid definition occurrences across ${e.touchedDocuments} documents before SQLite conversion.`)}function ae(e,t,n){let r=Gi(e)||".scip",a=je(e,r);return E(h(e),`${a}.${n+1}.${t}${r}`)}async function bo(e,t){for(let n=0;n<2;n++){let r=Po(e,t);if(r)return r;let a=xo(e);if(a&&Br(t.trigger,a)){t.onStatus(`Manual reindex preempting watcher refresh started at ${a.startedAt}.`);let i;try{i=await vo(a)}catch(s){throw new Error(`Could not verify the watcher's in-progress reindex owner (pid ${a.pid}); refusing to steal an active lock: ${A(s)}`,{cause:s})}if(!i)throw new Error(`Could not confirm the watcher's in-progress reindex (pid ${a.pid}) terminated for ${h(e)}; refusing to steal an active lock.`);let o=$e(e,{parseLegacy:Fe});if(!At(e,o,{parseLegacy:Fe}))throw new Error(`Reindex lock ownership changed before preemption completed for ${h(e)}.`);continue}throw new Error(`Another codebaseiq reindex is already running for ${h(e)}.`)}throw new Error(`Could not acquire codebaseiq reindex lock for ${h(e)}.`)}function Po(e,t){let n=U(process.pid),r=Ot(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:Fe});if(r.kind==="acquired"&&r.reclaimed){let a=Cr(r.reclaimed,e);a&&Br(t.trigger,a)?t.onStatus(`Manual reindex preempting watcher refresh started at ${a.startedAt}; its prior owner was already stale.`):t.onStatus(`Recovered an abandoned or incomplete reindex lock for ${h(e)}.`)}return r.kind==="acquired"?()=>{r.lock.release()}:null}function xo(e){return Cr($e(e,{parseLegacy:Fe}),e)}var Fe=e=>{let t=$r(e,"");return t?{pid:t.pid,...t.processIdentity?{processIdentity:t.processIdentity}:{}}:null};function Cr(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:h(t),startedAt:e.record.startedAt,trigger:n.trigger}}return $r(e.parsed,t)}function $r(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=Rt(n.processIdentity);return r?.pid===n.pid?{processIdentity:r}:{}})(),...n.processGroupLeader===!0?{processGroupLeader:!0}:{},projectRoot:typeof n.projectRoot=="string"?n.projectRoot:h(t),startedAt:typeof n.startedAt=="string"?n.startedAt:"unknown",trigger:n.trigger}}catch{return null}}function Br(e,t){return e?.kind==="manual-cli"&&Ro(t?.trigger)}function Ro(e){return e?.kind==="watch-source"||e?.kind==="watch-git-head"||e?.kind==="watch-git-index"||e?.kind==="watch-git-state"}async function vo(e){return!H(e.pid)||(ft(e),_r(e,"SIGTERM"),await jr(e,2e3))?!0:(ft(e),_r(e,"SIGKILL"),jr(e,1e3))}function _r(e,t){if(e.processGroupLeader)try{process.kill(-e.pid,t);return}catch{if(!H(e.pid))return;ft(e)}try{process.kill(e.pid,t)}catch{}}async function jr(e,t){let n=b()+t;for(;b()<n;){if(Tr(e))return!0;await Io(50)}return Tr(e)}function ft(e){if(!e.processIdentity)throw new Error(`Refusing to signal reindex pid ${e.pid}: its ownership record has no process identity.`);let t=U(e.pid);if(!t)throw new Error(`Refusing to signal reindex pid ${e.pid}: its process identity is unavailable.`);if(!Y(e.processIdentity,t))throw new Error(`Refusing to signal reindex pid ${e.pid}: its process identity does not match the ownership record.`)}function Tr(e){if(!H(e.pid))return!0;if(!e.processIdentity)return!1;let t=U(e.pid);return t!==null&&!Y(e.processIdentity,t)}function Io(e){return new Promise(t=>setTimeout(t,e))}function Gr(e,t,n){return Object.fromEntries(t.map(r=>{let a=r==="typescript"?Mt(n.typescriptProjects):[],i=r==="clojure"?Eo(n.clojureConfigPath):void 0,o=[...Ye(r).markerFiles,...a,...i?[i]:[]],s=r==="typescript"?{typescriptProjectMode:n.typescriptProjectMode??"single",typescriptProjects:a}:{typescriptProjectMode:"single",typescriptProjects:[]};return[r,{version:2,languages:[r],pnpmWorkspaces:r==="typescript"&&wo(n),...s,clojureConfigPath:i,files:Nt(e,{language:r,markerFiles:o})}]}))}function Eo(e){return e?.trim()||void 0}function wo(e){return e.typescriptProjectMode!=="workspace"&&e.pnpmWorkspaces===!0}function yt(e,t){return E(h(e),"language-indexes",`${t}.scip`)}function Ur(e){return E(h(e),"language-indexes","typescript-projects")}function ke(e,t){return E(Ur(e),`${at(t)}.scip`)}function V(e){try{return Ae(de(oe(e,"reindex metadata")))}catch{return null}}function Wr(e,t){try{let n=de(oe(e,"reindex metadata"));if(n.kind!=="legacy"&&n.kind!=="supported")return!1;let r=n.metadata;return n.capabilities.publishableGeneration&&_t(r)&&k(r.fingerprint)===k(t)&&k([...r.indexedLanguages??[]].sort())===k(t.languages)}catch{return!1}}function St(e,t){Ht(e,t,{spacing:2,trailingNewline:!0})}function qr(e,t){try{let n=Ae(de(oe(e,"reindex metadata")));if(!n)return;St(e,{...n,lastRefresh:t})}catch{}}function De(e){return{trigger:e.trigger??{kind:"unknown"},result:e.result,startedAt:new Date(e.start).toISOString(),completedAt:new Date().toISOString(),durationMs:b()-e.monotonicStart,indexedLanguages:e.languages?[...e.languages]:void 0,skipped:e.skipped?[...e.skipped]:void 0,error:e.error}}function k(e){return JSON.stringify(e)}export{Vo as a,Xo as b,Ye as c,xr as d,dd as e};
|
|
239
|
+
//# sourceMappingURL=chunk-TFZB6XTM.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as r}from"./chunk-NNJ2KZZG.js";function _(t){let s=r(t);return i(s)?"test":u(s)?"worker":n(s)?"entry":f(s)?"barrel":"source"}function i(t){return!!(/\.(?:test|spec)\.[a-z0-9]+$/i.test(t)||/(?:^|\/)(?:_)?test_[^/]+$/i.test(t)||/(?:^|\/)spec_[^/]+$/i.test(t)||/(?:^|\/)[^/]+_test\.[a-z0-9]+$/i.test(t)||/(?:^|\/)[^/]+_tests\.rs$/i.test(t)||/(?:^|\/)tests\.rs$/i.test(t)||/(?:^|\/)[^/]+_spec\.[a-z0-9]+$/i.test(t)||/(?:^|\/)__tests__\//i.test(t)||/(?:^|\/)test\//i.test(t)||/(?:^|\/)tests\//i.test(t)||/(?:^|\/)__fixtures__\//i.test(t)||/(?:^|\/)__mocks__\//i.test(t)||/(?:^|\/)test-support\//i.test(t)||/(?:^|\/)test-utils\//i.test(t)||/(?:^|\/)testing\//i.test(t))}function u(t){return/(?:^|\/)[^/]*worker\.(?:ts|tsx|js|mjs|cjs|rs|py|go)$/.test(t)}function n(t){let s=t.split("/"),e=s[s.length-1]??t;return e==="cli.ts"||e==="cli.js"||e==="postinstall.ts"||e==="postinstall.js"||e==="main.ts"||e==="main.js"||e==="main.rs"||e==="main.go"||e==="main.py"||e==="build.rs"||e==="lib.rs"||/\bsrc\/bin\/[^/]+\.rs$/.test(t)||/(?:^|\/)examples\/[^/]+\.rs$/.test(t)||/(?:^|\/)tests\/[^/]+\.rs$/.test(t)||/(?:^|\/)benches\/[^/]+\.rs$/.test(t)?!0:e==="index.ts"||e==="index.js"?/(?:^|\/)(?:apps|services)\/[^/]+\/src\/index\.(?:ts|js)$/.test(t)?!0:s.length<=2:!1}function f(t){return t==="index.ts"||t==="index.js"||t.endsWith("/index.ts")||t.endsWith("/index.js")||t.endsWith("/mod.rs")||t.endsWith("/__init__.py")}export{_ as a};
|
|
2
|
+
//# sourceMappingURL=chunk-TIIC3ZE7.js.map
|