codebaseiq 0.1.0 → 0.3.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 +89 -0
- package/README.md +1 -1
- package/dist/augment-vue-worker.js +1 -1
- package/dist/{chunk-ZMI2JSX2.js → chunk-23C5AD3B.js} +2 -2
- package/dist/chunk-2E6OUPCF.js +2 -0
- package/dist/chunk-2EDX3JT5.js +3 -0
- package/dist/chunk-2I2UHZET.js +2 -0
- package/dist/{chunk-T3DGWPXM.js → chunk-2OMXFE64.js} +2 -2
- package/dist/chunk-2PRONPAS.js +3 -0
- package/dist/{chunk-GW6Z3WGY.js → chunk-356EZBIP.js} +2 -2
- package/dist/{chunk-UDS562V4.js → chunk-36JC5BG2.js} +2 -2
- package/dist/chunk-3RR2K7EZ.js +20 -0
- package/dist/{chunk-JE3WZ6II.js → chunk-3RSBGWGL.js} +2 -2
- package/dist/{chunk-VE5AVNMP.js → chunk-3VJ3OCRE.js} +2 -2
- package/dist/{chunk-FDGD5AB5.js → chunk-4LK5OIPW.js} +2 -2
- package/dist/chunk-5DSL3NT2.js +17 -0
- package/dist/chunk-5FWR5HLG.js +90 -0
- package/dist/chunk-5IC2WZAL.js +22 -0
- package/dist/{chunk-MVB3DAEY.js → chunk-5IZRKWTZ.js} +2 -2
- package/dist/{chunk-Q65CQ4XL.js → chunk-5LL4KEHO.js} +2 -2
- package/dist/chunk-5T44HG5Y.js +88 -0
- package/dist/{chunk-TRRC4ZJ7.js → chunk-5ZI2PPI7.js} +2 -2
- package/dist/{chunk-7XAN6GKB.js → chunk-67VJAYVR.js} +2 -2
- package/dist/{chunk-MOVBWNIP.js → chunk-6BF3VYEF.js} +2 -2
- package/dist/chunk-6JMAVFL4.js +3 -0
- package/dist/chunk-6O3KXIDL.js +2 -0
- package/dist/{chunk-JOIRNPPY.js → chunk-6VREELBC.js} +2 -2
- package/dist/chunk-6WAPPQ5F.js +82 -0
- package/dist/{chunk-FW53T7EB.js → chunk-75KJGYX7.js} +2 -2
- package/dist/chunk-7GAK2F3H.js +77 -0
- package/dist/{chunk-UBGWN7I4.js → chunk-7JELP5YE.js} +2 -2
- package/dist/chunk-7UCDGXRW.js +8 -0
- package/dist/{chunk-L57ZKWVG.js → chunk-AEXQYQD7.js} +2 -2
- package/dist/chunk-AQI4N64O.js +22 -0
- package/dist/{chunk-ICFDQHAM.js → chunk-AURCQHSG.js} +2 -2
- package/dist/{chunk-I2T2LLK2.js → chunk-BBP7HVBJ.js} +2 -2
- package/dist/{chunk-OFBE4NGP.js → chunk-BFBIMTCJ.js} +2 -2
- package/dist/{chunk-JEJLSICM.js → chunk-BGGB5N53.js} +2 -2
- package/dist/{chunk-TIIC3ZE7.js → chunk-BRQL7AFJ.js} +2 -2
- package/dist/{chunk-YSNONTJ2.js → chunk-BWL3PMPT.js} +2 -2
- package/dist/chunk-C6WKPKCF.js +127 -0
- package/dist/{chunk-YESXMKX3.js → chunk-C7OUW52M.js} +2 -2
- package/dist/chunk-C7QWUBR2.js +545 -0
- package/dist/{chunk-4WKDMDEW.js → chunk-CCIYWXX6.js} +2 -2
- package/dist/{chunk-FAJQ7LWY.js → chunk-CIYA2KZN.js} +2 -2
- package/dist/{chunk-VEXUL62T.js → chunk-CR3OG6SQ.js} +2 -2
- package/dist/{chunk-JSOYNVWH.js → chunk-CVHOQONG.js} +2 -2
- package/dist/{chunk-LU3BMVH2.js → chunk-CW6AXOLR.js} +2 -2
- package/dist/{chunk-TXXOEMZJ.js → chunk-D53LWANR.js} +2 -2
- package/dist/{chunk-DO6WQD2T.js → chunk-D62CTZX6.js} +2 -2
- package/dist/{chunk-N3IQCBCF.js → chunk-D7AZAOZX.js} +2 -2
- package/dist/{chunk-RDBI2RXU.js → chunk-D7DOB27N.js} +7 -7
- package/dist/chunk-DAKIGMIK.js +21 -0
- package/dist/chunk-DDN2F6GB.js +2 -0
- package/dist/chunk-DUKHVPU5.js +4 -0
- package/dist/chunk-DVWO7RBC.js +2 -0
- package/dist/{chunk-HKQUXIFO.js → chunk-E52K4L2W.js} +2 -2
- package/dist/chunk-EIBGSU2R.js +2 -0
- package/dist/chunk-EN4AHLL3.js +3 -0
- package/dist/chunk-EQNMD62X.js +51 -0
- package/dist/{chunk-ENCCHKM6.js → chunk-EXZ7VLRY.js} +4 -4
- package/dist/{chunk-NEDP5RFQ.js → chunk-F3QSL4W2.js} +2 -2
- package/dist/{chunk-O6QTXQPJ.js → chunk-F74LZWCE.js} +2 -2
- package/dist/{chunk-BH5F2Q4O.js → chunk-FEIZXBLH.js} +2 -2
- package/dist/chunk-FH5WG4LE.js +2 -0
- package/dist/{chunk-BVAJLC5A.js → chunk-FOZ74V56.js} +2 -2
- package/dist/{chunk-L4NRUAGJ.js → chunk-FQTIFWLR.js} +2 -2
- package/dist/chunk-FTTV7IRX.js +355 -0
- package/dist/chunk-FWQGH2N2.js +2 -0
- package/dist/{chunk-CAUCPUOF.js → chunk-GDHWOA57.js} +2 -2
- package/dist/{chunk-6MUIJMVL.js → chunk-GIDCP7KV.js} +2 -2
- package/dist/{chunk-ZV3JV5G5.js → chunk-GL6UTNUB.js} +2 -2
- package/dist/chunk-GP7C5VAE.js +2 -0
- package/dist/{chunk-FQKZWM4L.js → chunk-GQLDYCWS.js} +5 -5
- package/dist/chunk-GQXXOS55.js +2 -0
- package/dist/{chunk-H3LGFZVK.js → chunk-GUFPEFBG.js} +2 -2
- package/dist/{chunk-NNOKTMZT.js → chunk-GV2CEZCW.js} +2 -2
- package/dist/{chunk-FETNQCFO.js → chunk-GVAF222T.js} +2 -2
- package/dist/chunk-GWYZVVKY.js +21 -0
- package/dist/{chunk-7FND7D7N.js → chunk-HENP2O4A.js} +2 -2
- package/dist/{chunk-LZYFLFEH.js → chunk-HINZQKSY.js} +2 -2
- package/dist/{chunk-RR7SX44N.js → chunk-HQA7EBSK.js} +2 -2
- package/dist/{chunk-XMQ23E27.js → chunk-HVFB3PME.js} +2 -2
- package/dist/chunk-I22IZYDI.js +2 -0
- package/dist/chunk-ICUL7XRT.js +21 -0
- package/dist/{chunk-CQP3THUZ.js → chunk-IHSLIIL3.js} +2 -2
- package/dist/{chunk-34WBMAYK.js → chunk-ITSJMNUD.js} +2 -2
- package/dist/{chunk-PX4RYAAK.js → chunk-IZDPGOZR.js} +2 -2
- package/dist/chunk-J3GLP7Q5.js +3 -0
- package/dist/{chunk-CVYSU6BX.js → chunk-J7AMBVWF.js} +2 -2
- package/dist/{chunk-Y6KHROC3.js → chunk-JCMFBF4Z.js} +2 -2
- package/dist/chunk-JFIA2JI3.js +3 -0
- package/dist/chunk-JLZLLLW5.js +3 -0
- package/dist/{chunk-5PUWMSDU.js → chunk-JSNTHRLQ.js} +2 -2
- package/dist/{chunk-C6SBF2WH.js → chunk-JX6ZWDOS.js} +2 -2
- package/dist/{chunk-4XTAUQFD.js → chunk-JYI7CV25.js} +2 -2
- package/dist/chunk-K7JLSGCJ.js +8 -0
- package/dist/{chunk-XWUOUWYI.js → chunk-KPZGTB2O.js} +2 -2
- package/dist/{chunk-VXYS3FZD.js → chunk-LKUTSP4G.js} +2 -2
- package/dist/{chunk-GTXSJDCO.js → chunk-LMTSB3TB.js} +2 -2
- package/dist/chunk-LONKINMJ.js +543 -0
- package/dist/{chunk-WMPRTGH2.js → chunk-LQHYYIOB.js} +2 -2
- package/dist/{chunk-VUIYB2V3.js → chunk-LZSQ6X7E.js} +2 -2
- package/dist/{chunk-ST7V3SKN.js → chunk-M2Y6PCFE.js} +2 -2
- package/dist/chunk-MEUHIDI3.js +7 -0
- package/dist/{chunk-OZYRSMSH.js → chunk-MHWMEZDA.js} +2 -2
- package/dist/{chunk-RKEJ6VTF.js → chunk-MQW6SJ4P.js} +2 -2
- package/dist/{chunk-J77SU6VA.js → chunk-MSI3K7PJ.js} +2 -2
- package/dist/chunk-MVRGB4KJ.js +278 -0
- package/dist/{chunk-DQMDCD24.js → chunk-MZNMASFM.js} +2 -2
- package/dist/{chunk-ID63777H.js → chunk-NBCQZSGR.js} +2 -2
- package/dist/chunk-NBZKSTXP.js +2 -0
- package/dist/{chunk-SZD2KF7Q.js → chunk-NCJILOAK.js} +2 -2
- package/dist/{chunk-C7QOQX32.js → chunk-NDKOVQFG.js} +2 -2
- package/dist/{chunk-UNBY47BC.js → chunk-NEWHKGVD.js} +2 -2
- package/dist/{chunk-PYAB5SM6.js → chunk-O2M3VNDY.js} +2 -2
- package/dist/chunk-OFGOOL6U.js +3 -0
- package/dist/{chunk-SWHMHUKF.js → chunk-OQUCBKOI.js} +2 -2
- package/dist/{chunk-7MGU3HPH.js → chunk-P4NVCOM7.js} +2 -2
- package/dist/{chunk-ANFVSJWQ.js → chunk-PFC44E6D.js} +2 -2
- package/dist/{chunk-EZNMUY67.js → chunk-PHNCEUXX.js} +2 -2
- package/dist/{chunk-4FC325IF.js → chunk-PTQPPPG2.js} +2 -2
- package/dist/chunk-PUVNH4PO.js +3 -0
- package/dist/chunk-Q23IMHXS.js +343 -0
- package/dist/chunk-Q3ZCQY2Y.js +3 -0
- package/dist/{chunk-KMITESMT.js → chunk-Q4XEU3UH.js} +2 -2
- package/dist/{chunk-QKPLA6IC.js → chunk-QEOWONKY.js} +2 -2
- package/dist/{chunk-BJ6SQAEN.js → chunk-QMOZZ2VX.js} +2 -2
- package/dist/chunk-RCIGX23V.js +60 -0
- package/dist/{chunk-IOP6FWIM.js → chunk-RIYJ4L33.js} +2 -2
- package/dist/chunk-RJVAPMHF.js +14 -0
- package/dist/chunk-SB7NASHU.js +2 -0
- package/dist/{chunk-UZGZB3VB.js → chunk-SGMNWYTH.js} +2 -2
- package/dist/chunk-SMDIEDM4.js +27 -0
- package/dist/chunk-SV2LEFVM.js +2 -0
- package/dist/chunk-SX72EVMY.js +3 -0
- package/dist/chunk-T5X7DK6C.js +3 -0
- package/dist/{chunk-6NW7MU72.js → chunk-T6MQNNAC.js} +2 -2
- package/dist/chunk-T75DS2E6.js +21 -0
- package/dist/{chunk-HRWGYWRJ.js → chunk-TEANKHUU.js} +2 -2
- package/dist/chunk-TJBOJUVN.js +3 -0
- package/dist/{chunk-XLQ3GLWZ.js → chunk-TJWVT4DO.js} +2 -2
- package/dist/{chunk-7NVGT435.js → chunk-TNJGTQWO.js} +2 -2
- package/dist/{chunk-NE6IU5ZD.js → chunk-TOTWJZIX.js} +2 -2
- package/dist/{chunk-PBI2LFKH.js → chunk-TPO7XC5Z.js} +2 -2
- package/dist/{chunk-HPJRBHVT.js → chunk-U33PMPNW.js} +2 -2
- package/dist/{chunk-QHRNXP3C.js → chunk-U7NUXDQO.js} +2 -2
- package/dist/chunk-UC2FD2PS.js +4 -0
- package/dist/{chunk-PIOMTC27.js → chunk-UQE4XFSA.js} +2 -2
- package/dist/chunk-UQYQBLJX.js +5 -0
- package/dist/{chunk-KWVHSKHK.js → chunk-USOAJHY7.js} +2 -2
- package/dist/{chunk-GCHRX4YW.js → chunk-UW6KD57C.js} +2 -2
- package/dist/{chunk-PTAWHLVJ.js → chunk-VGWZ4MOY.js} +2 -2
- package/dist/{chunk-XME3HPXZ.js → chunk-VWYGCMV5.js} +2 -2
- package/dist/{chunk-AKB7V7TV.js → chunk-W7YLRXZE.js} +2 -2
- package/dist/{chunk-SYDJMPES.js → chunk-WK2IQJPK.js} +2 -2
- package/dist/{chunk-RBAS5ZHI.js → chunk-WWCV4E6J.js} +2 -2
- package/dist/{chunk-OL6KJP3N.js → chunk-XMJ53WG4.js} +2 -2
- package/dist/chunk-XN3EKMLI.js +4 -0
- package/dist/chunk-XQAVQVIL.js +3 -0
- package/dist/{chunk-IJ4HMYBE.js → chunk-XQPPURLQ.js} +2 -2
- package/dist/{chunk-OVTS4DKB.js → chunk-YHPG3S2U.js} +2 -2
- package/dist/{chunk-WOQBZPIF.js → chunk-YRKP7PM7.js} +2 -2
- package/dist/chunk-YT4DVWUV.js +11 -0
- package/dist/chunk-YTJHCGYB.js +61 -0
- package/dist/chunk-Z35GOVEH.js +2 -0
- package/dist/{chunk-OLF4MA5W.js → chunk-Z6RL7XOE.js} +4 -4
- package/dist/{chunk-UP3BUZR5.js → chunk-ZAFGY22Q.js} +2 -2
- package/dist/{chunk-CO5R3UNA.js → chunk-ZB4C5TTR.js} +2 -2
- package/dist/{chunk-ZZXSWSN6.js → chunk-ZNH33XIB.js} +2 -2
- package/dist/{chunk-EMNIHCRB.js → chunk-ZQ62NNKN.js} +2 -2
- package/dist/cli-context-FJL2JHOE.js +3 -0
- package/dist/cli-context-PQNWHMCQ.js +2 -0
- package/dist/cli-program-UO7PZD6V.js +7 -0
- package/dist/cli.js +1 -1
- package/dist/{code-DlqpBDd0.d.ts → code-DfX3xeWy.d.ts} +1 -1
- package/dist/code-viewer-KIXEYQNJ.js +12 -0
- package/dist/code-viewer-VHLBLIUM.js +11 -0
- package/dist/command-descriptors-F5P2V3NW.js +335 -0
- package/dist/command-descriptors-YCLATF5I.js +337 -0
- package/dist/{config-types-BNoC96J3.d.ts → config-types-D6X5S68_.d.ts} +50 -0
- package/dist/{db-D7sauVFH.d.ts → db-BoG_PWYH.d.ts} +2 -2
- package/dist/direct-navigation-4XJTXIDT.js +2 -0
- package/dist/direct-navigation-J5MVYYAD.js +3 -0
- package/dist/{graph-evidence-BIFqyisO.d.ts → graph-evidence-D1jx1Cql.d.ts} +1 -1
- package/dist/{health-DJaZXg8I.d.ts → health-DkYBS5BI.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/invocation-command-descriptors-RWV4VAI4.js +2 -0
- package/dist/invocation-command-descriptors-U76PN7IY.js +3 -0
- package/dist/{scip-cli-B7N3haxa.d.ts → maintenance-types-CdL5eQii.d.ts} +2 -21
- package/dist/output-continuation-command-BL25S26S.js +3 -0
- package/dist/output-continuation-command-BTETTXEC.js +2 -0
- package/dist/postinstall.js +1 -1
- package/dist/project-reindex-CRJU3IFG.js +2 -0
- package/dist/project-reindex-TQFCOA2O.js +3 -0
- package/dist/queries/affected.d.ts +2 -2
- package/dist/queries/affected.js +1 -1
- package/dist/queries/anchors.d.ts +2 -2
- package/dist/queries/anchors.js +1 -1
- package/dist/queries/architecture.d.ts +2 -2
- package/dist/queries/architecture.js +1 -1
- package/dist/queries/bottlenecks.d.ts +2 -2
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.d.ts +2 -2
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.d.ts +2 -2
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.d.ts +2 -2
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.d.ts +2 -2
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +2 -2
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.d.ts +3 -3
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.d.ts +2 -2
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.d.ts +2 -2
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/context.d.ts +2 -2
- package/dist/queries/context.js +1 -1
- package/dist/queries/convergence.d.ts +2 -2
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.d.ts +2 -2
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.d.ts +2 -2
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dataflow.d.ts +2 -2
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.d.ts +2 -2
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.d.ts +2 -2
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/deep-chains.d.ts +2 -2
- package/dist/queries/deep-chains.js +1 -1
- package/dist/queries/dependence-slice.d.ts +3 -3
- package/dist/queries/dependence-slice.js +1 -1
- package/dist/queries/dependency-depth.d.ts +2 -2
- package/dist/queries/dependency-depth.js +1 -1
- package/dist/queries/deps.d.ts +2 -2
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-impact.d.ts +2 -2
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.d.ts +2 -2
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.d.ts +2 -2
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.d.ts +2 -2
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/entry-map.d.ts +2 -2
- package/dist/queries/entry-map.js +1 -1
- package/dist/queries/evidence.d.ts +3 -3
- package/dist/queries/evidence.js +1 -1
- package/dist/queries/extract-candidates.d.ts +2 -2
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.d.ts +2 -2
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.d.ts +2 -2
- package/dist/queries/files.js +1 -1
- package/dist/queries/health.d.ts +3 -3
- package/dist/queries/health.js +1 -1
- package/dist/queries/hierarchy.d.ts +2 -2
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.d.ts +2 -2
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +2 -2
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +2 -2
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +5 -5
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.d.ts +2 -2
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.d.ts +2 -2
- package/dist/queries/locality-candidates.js +1 -1
- package/dist/queries/members.d.ts +2 -2
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.d.ts +2 -2
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.d.ts +2 -2
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.d.ts +2 -2
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.d.ts +2 -2
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.d.ts +2 -2
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.d.ts +2 -2
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +2 -2
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.d.ts +2 -2
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.d.ts +2 -2
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.d.ts +2 -2
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/reference-neighborhood.d.ts +2 -2
- package/dist/queries/reference-neighborhood.js +1 -1
- package/dist/queries/reference-reachability.d.ts +2 -2
- package/dist/queries/reference-reachability.js +1 -1
- package/dist/queries/refs.d.ts +2 -2
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.d.ts +2 -2
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-chains.d.ts +2 -2
- package/dist/queries/similar-chains.js +1 -1
- package/dist/queries/similar-files.d.ts +2 -2
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.d.ts +2 -2
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.d.ts +2 -2
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.d.ts +2 -2
- package/dist/queries/slice.js +1 -1
- package/dist/queries/source-inspection.d.ts +4 -4
- package/dist/queries/source-inspection.js +1 -1
- package/dist/queries/source-search.d.ts +2 -2
- package/dist/queries/source-search.js +1 -1
- package/dist/queries/stale-abstractions.d.ts +2 -2
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/stats.d.ts +2 -2
- package/dist/queries/surface.d.ts +2 -2
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.d.ts +2 -2
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system-map.d.ts +2 -2
- package/dist/queries/system-map.js +1 -1
- package/dist/queries/system.d.ts +2 -2
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.d.ts +2 -2
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/trace.d.ts +2 -2
- package/dist/queries/trace.js +1 -1
- package/dist/queries/twin-ab.d.ts +2 -2
- package/dist/queries/twin-ab.js +1 -1
- package/dist/queries/twin-drift.d.ts +2 -2
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.d.ts +2 -2
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.d.ts +2 -2
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/value-flow.d.ts +3 -3
- package/dist/queries/value-flow.js +1 -1
- package/dist/queries/vue-component-duplicates.d.ts +2 -2
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.d.ts +2 -2
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.d.ts +2 -2
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/queries/wrapper-candidates.d.ts +2 -2
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/reindex-worker.js +2 -2
- package/dist/reindex.d.ts +3 -5
- package/dist/reindex.js +72 -33
- package/dist/runtime.d.ts +23 -4
- package/dist/runtime.js +3 -3
- package/dist/rust-semantic-session-server.js +1 -1
- package/dist/rust-semantic-session-worker.js +1 -1
- package/dist/rust-semantic-worker.js +1 -1
- package/dist/sentinel-ensure-command-OSWGCFFL.js +3 -0
- package/dist/sentinel-ensure-command-SPW7XQLB.js +2 -0
- package/dist/sentinel-hook.js +39 -0
- package/dist/sentinel-worker.js +16 -0
- package/dist/typescript-mailbox-worker.js +1 -1
- package/dist/watch-server.js +6 -6
- package/docs/COMMAND_REFERENCE.md +5 -3
- package/docs/INDEX_GENERATIONS.md +2 -2
- package/docs/NPM_RELEASE.md +323 -0
- package/docs/schemas/npm-release-state.schema.json +4 -13
- package/docs/schemas/project-config.schema.json +159 -0
- package/package.json +10 -14
- package/skills/codebaseiq/SKILL.md +1 -1
- package/skills/concrete-plan/SKILL.md +1 -1
- package/ui/view/api.js +450 -0
- package/ui/view/app.js +394 -0
- package/ui/view/builder.js +323 -0
- package/ui/view/file-panel.js +170 -0
- package/ui/view/focus.js +379 -0
- package/ui/view/index.html +54 -0
- package/ui/view/map.js +424 -0
- package/ui/view/styles.css +1125 -0
- package/dist/chunk-2Q2LW5JW.js +0 -14
- package/dist/chunk-2X7V4HS4.js +0 -88
- package/dist/chunk-3IER7Q6H.js +0 -12
- package/dist/chunk-3JSXXYTZ.js +0 -345
- package/dist/chunk-476NR5B7.js +0 -2
- package/dist/chunk-5VKBFZZU.js +0 -3
- package/dist/chunk-6BQ3DSPK.js +0 -2
- package/dist/chunk-6CS3UQTN.js +0 -3
- package/dist/chunk-6OAHRI2D.js +0 -6
- package/dist/chunk-ADTBPVUZ.js +0 -21
- package/dist/chunk-BFFZDZQV.js +0 -2
- package/dist/chunk-BMYOV5GP.js +0 -77
- package/dist/chunk-C74PPYLA.js +0 -3
- package/dist/chunk-CWONGW6P.js +0 -3
- package/dist/chunk-DDZ7VHWV.js +0 -20
- package/dist/chunk-DR2LURYU.js +0 -3
- package/dist/chunk-ECQBG7PW.js +0 -564
- package/dist/chunk-EF2R3WNQ.js +0 -2
- package/dist/chunk-FM5BPL4V.js +0 -60
- package/dist/chunk-G6XFR4ZL.js +0 -4
- package/dist/chunk-GTIYTDRE.js +0 -562
- package/dist/chunk-HOA5YGOH.js +0 -3
- package/dist/chunk-KUW32IRO.js +0 -2
- package/dist/chunk-LTA3BRZX.js +0 -2
- package/dist/chunk-NAUD7LCA.js +0 -2
- package/dist/chunk-NCZUNH3E.js +0 -109
- package/dist/chunk-NNJ2KZZG.js +0 -4
- package/dist/chunk-NNO6A2PO.js +0 -2
- package/dist/chunk-OGTFJ3XD.js +0 -2
- package/dist/chunk-Q5ELPRKQ.js +0 -2
- package/dist/chunk-Q72QSKXC.js +0 -308
- package/dist/chunk-QCN62RTF.js +0 -3
- package/dist/chunk-QW7EP6WI.js +0 -21
- package/dist/chunk-RU65DDUP.js +0 -215
- package/dist/chunk-SELM5MER.js +0 -2
- package/dist/chunk-SMRBZ6EC.js +0 -2
- package/dist/chunk-SNNWPCN7.js +0 -4
- package/dist/chunk-TFZB6XTM.js +0 -239
- package/dist/chunk-UCD3H3UZ.js +0 -5
- package/dist/chunk-UXM43C7T.js +0 -3
- package/dist/chunk-VFY6Y2H6.js +0 -61
- package/dist/chunk-WE5RZHZ7.js +0 -5
- package/dist/chunk-YMGZZEW4.js +0 -2
- package/dist/chunk-YVCIMIOC.js +0 -12
- package/dist/chunk-Z54RD7VL.js +0 -3
- package/dist/chunk-ZKX2FRS6.js +0 -15
- package/dist/cli-context-3SNLDYBM.js +0 -3
- package/dist/cli-context-T3B7W6GG.js +0 -2
- package/dist/cli-program-YNOXO72B.js +0 -7
- package/dist/command-descriptors-6AOUKWW7.js +0 -346
- package/dist/command-descriptors-ZFKJSRUP.js +0 -344
- package/dist/direct-navigation-DP4LVMRX.js +0 -3
- package/dist/direct-navigation-FLUS3BT6.js +0 -2
- package/dist/invocation-command-descriptors-QT2JMY5J.js +0 -3
- package/dist/invocation-command-descriptors-YN4QJEAX.js +0 -2
- package/dist/output-continuation-command-2V2SL4TD.js +0 -2
- package/dist/output-continuation-command-65J5IP3O.js +0 -3
- package/dist/project-reindex-5JOKXAXT.js +0 -2
- package/dist/project-reindex-UQBIKO4M.js +0 -3
- package/docs/WINDOWS_SIDECAR_RELEASE.md +0 -424
- package/docs/schemas/windows-sidecar-provenance.schema.json +0 -137
- package/scripts/build-codebaseiq-windows.mjs +0 -197
- package/scripts/codebaseiq-windows-provenance.mjs +0 -364
- package/scripts/verify-codebaseiq-windows.mjs +0 -29
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { execFileSync } from 'node:child_process';
|
|
3
|
-
import { copyFileSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
-
import { tmpdir } from 'node:os';
|
|
5
|
-
import { basename, dirname, join, resolve } from 'node:path';
|
|
6
|
-
import { fileURLToPath } from 'node:url';
|
|
7
|
-
import {
|
|
8
|
-
createWindowsSidecarProvenance,
|
|
9
|
-
DEFAULT_SCIP_REPOSITORY,
|
|
10
|
-
DEFAULT_SCIP_TAG,
|
|
11
|
-
PINNED_GO_VERSION,
|
|
12
|
-
verifyWindowsSidecarProvenance,
|
|
13
|
-
WINDOWS_SIDECAR_BUILD,
|
|
14
|
-
WINDOWS_SIDECAR_PROVENANCE_FILE,
|
|
15
|
-
WINDOWS_SIDECAR_TARGETS,
|
|
16
|
-
} from './codebaseiq-windows-provenance.mjs';
|
|
17
|
-
|
|
18
|
-
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
19
|
-
|
|
20
|
-
export function buildCodebaseIqWindowsSidecar(
|
|
21
|
-
{
|
|
22
|
-
root = ROOT,
|
|
23
|
-
sourceRepository = process.env.SCIP_REPO_URL ?? DEFAULT_SCIP_REPOSITORY,
|
|
24
|
-
sourceTag = process.env.SCIP_VERSION ?? DEFAULT_SCIP_TAG,
|
|
25
|
-
expectedGoVersion = process.env.SCIP_GO_VERSION ?? PINNED_GO_VERSION,
|
|
26
|
-
} = {},
|
|
27
|
-
runtime = createBuildRuntime(),
|
|
28
|
-
) {
|
|
29
|
-
const sidecarDir = join(root, 'packages', 'codebaseiq-windows');
|
|
30
|
-
const sidecarPackage = JSON.parse(runtime.readFile(join(sidecarDir, 'package.json'), 'utf8'));
|
|
31
|
-
runtime.assertAvailable('git');
|
|
32
|
-
runtime.assertAvailable('go');
|
|
33
|
-
|
|
34
|
-
const workDir = runtime.makeTempDirectory(join(runtime.tempDirectory(), 'codebaseiq-scip-'));
|
|
35
|
-
try {
|
|
36
|
-
const checkoutDir = join(workDir, 'scip');
|
|
37
|
-
const artifactDir = join(workDir, 'artifacts');
|
|
38
|
-
runtime.mkdir(artifactDir);
|
|
39
|
-
|
|
40
|
-
const goVersion = parseGoVersion(
|
|
41
|
-
runtime.run('go', ['version'], {
|
|
42
|
-
encoding: 'utf8',
|
|
43
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
44
|
-
}),
|
|
45
|
-
);
|
|
46
|
-
if (goVersion !== expectedGoVersion) {
|
|
47
|
-
throw new Error(
|
|
48
|
-
`Go toolchain mismatch: expected ${expectedGoVersion}, received ${goVersion}. ` +
|
|
49
|
-
`Install the pinned toolchain or intentionally update the provenance contract.`,
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
runtime.run('git', ['clone', '--depth', '1', '--branch', sourceTag, sourceRepository, checkoutDir], {
|
|
54
|
-
stdio: 'inherit',
|
|
55
|
-
});
|
|
56
|
-
const sourceCommit = runtime
|
|
57
|
-
.run('git', ['rev-parse', 'HEAD'], {
|
|
58
|
-
cwd: checkoutDir,
|
|
59
|
-
encoding: 'utf8',
|
|
60
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
61
|
-
})
|
|
62
|
-
.trim();
|
|
63
|
-
|
|
64
|
-
runtime.copyFile(join(checkoutDir, 'LICENSE'), join(artifactDir, 'LICENSE.scip'));
|
|
65
|
-
runtime.writeFile(
|
|
66
|
-
join(artifactDir, 'README.md'),
|
|
67
|
-
renderSidecarReadme({ sourceRepository, sourceTag, sourceCommit, goVersion }),
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
for (const target of WINDOWS_SIDECAR_TARGETS) {
|
|
71
|
-
const outputPath = join(artifactDir, target.filename);
|
|
72
|
-
runtime.run('go', ['build', ...WINDOWS_SIDECAR_BUILD.flags, '-o', outputPath, WINDOWS_SIDECAR_BUILD.package], {
|
|
73
|
-
cwd: checkoutDir,
|
|
74
|
-
env: {
|
|
75
|
-
...process.env,
|
|
76
|
-
...WINDOWS_SIDECAR_BUILD.environment,
|
|
77
|
-
GOARCH: target.goarch,
|
|
78
|
-
},
|
|
79
|
-
stdio: 'inherit',
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const manifest = createWindowsSidecarProvenance({
|
|
84
|
-
sidecarDir: artifactDir,
|
|
85
|
-
packageName: sidecarPackage.name,
|
|
86
|
-
packageVersion: sidecarPackage.version,
|
|
87
|
-
sourceRepository,
|
|
88
|
-
sourceTag,
|
|
89
|
-
sourceCommit,
|
|
90
|
-
goVersion,
|
|
91
|
-
readFile: runtime.readFile,
|
|
92
|
-
});
|
|
93
|
-
runtime.writeFile(join(artifactDir, WINDOWS_SIDECAR_PROVENANCE_FILE), `${JSON.stringify(manifest, null, 2)}\n`);
|
|
94
|
-
|
|
95
|
-
for (const file of [
|
|
96
|
-
'LICENSE.scip',
|
|
97
|
-
'README.md',
|
|
98
|
-
...WINDOWS_SIDECAR_TARGETS.map((target) => target.filename),
|
|
99
|
-
WINDOWS_SIDECAR_PROVENANCE_FILE,
|
|
100
|
-
]) {
|
|
101
|
-
runtime.promoteFile(join(artifactDir, file), join(sidecarDir, file));
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const verified = verifyWindowsSidecarProvenance({
|
|
105
|
-
sidecarDir,
|
|
106
|
-
expectedSourceRepository: sourceRepository,
|
|
107
|
-
expectedSourceTag: sourceTag,
|
|
108
|
-
expectedGoVersion,
|
|
109
|
-
readFile: runtime.readFile,
|
|
110
|
-
});
|
|
111
|
-
runtime.log(
|
|
112
|
-
`Built and verified ${verified.package.name}@${verified.package.version} from ${sourceTag} (${sourceCommit.slice(0, 12)}).`,
|
|
113
|
-
);
|
|
114
|
-
return verified;
|
|
115
|
-
} finally {
|
|
116
|
-
runtime.removeTree(workDir);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function createBuildRuntime() {
|
|
121
|
-
return {
|
|
122
|
-
assertAvailable(binary) {
|
|
123
|
-
const probe = process.platform === 'win32' ? 'where' : 'which';
|
|
124
|
-
try {
|
|
125
|
-
execFileSync(probe, [binary], { stdio: 'ignore' });
|
|
126
|
-
} catch {
|
|
127
|
-
throw new Error(`Required command not found on PATH: ${binary}`);
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
copyFile: copyFileSync,
|
|
131
|
-
log: console.log,
|
|
132
|
-
makeTempDirectory: mkdtempSync,
|
|
133
|
-
mkdir(path) {
|
|
134
|
-
mkdirSync(path, { recursive: true });
|
|
135
|
-
},
|
|
136
|
-
promoteFile(source, destination) {
|
|
137
|
-
mkdirSync(dirname(destination), { recursive: true });
|
|
138
|
-
const staging = join(dirname(destination), `.${basename(destination)}.${process.pid}.tmp`);
|
|
139
|
-
try {
|
|
140
|
-
copyFileSync(source, staging);
|
|
141
|
-
renameSync(staging, destination);
|
|
142
|
-
} finally {
|
|
143
|
-
rmSync(staging, { force: true });
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
readFile: readFileSync,
|
|
147
|
-
removeTree(path) {
|
|
148
|
-
rmSync(path, { recursive: true, force: true });
|
|
149
|
-
},
|
|
150
|
-
run(binary, args, options = {}) {
|
|
151
|
-
console.log(`$ ${binary} ${args.join(' ')}`);
|
|
152
|
-
return execFileSync(binary, args, options);
|
|
153
|
-
},
|
|
154
|
-
tempDirectory: tmpdir,
|
|
155
|
-
writeFile: writeFileSync,
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export function parseGoVersion(output) {
|
|
160
|
-
const match = /\b(go\d+(?:\.\d+){1,2}(?:[a-z0-9.-]*)?)\b/.exec(String(output));
|
|
161
|
-
if (!match) {
|
|
162
|
-
throw new Error(`Could not parse Go toolchain version from: ${String(output).trim()}`);
|
|
163
|
-
}
|
|
164
|
-
return match[1];
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export function renderSidecarReadme({ sourceRepository, sourceTag, sourceCommit, goVersion }) {
|
|
168
|
-
return [
|
|
169
|
-
'# Windows scip.exe npm sidecar',
|
|
170
|
-
'',
|
|
171
|
-
`These binaries are built from ${sourceRepository} at ${sourceTag}`,
|
|
172
|
-
`(${sourceCommit}) with ${goVersion}.`,
|
|
173
|
-
'They are bundled in the OS-gated `codebaseiq-windows` npm package. The main',
|
|
174
|
-
'`codebaseiq` package declares that sidecar as an optional dependency, so npm',
|
|
175
|
-
'installs it automatically on Windows and `reindex` works without Go or WSL.',
|
|
176
|
-
'',
|
|
177
|
-
`\`${WINDOWS_SIDECAR_PROVENANCE_FILE}\` binds the package version and exact source,`,
|
|
178
|
-
'toolchain, build flags, target machine, file size, and SHA-256 for both binaries.',
|
|
179
|
-
'Build, pack, and publish checks reject missing or mismatched evidence.',
|
|
180
|
-
'',
|
|
181
|
-
'Run `npm run build:codebaseiq-windows` to rebuild the binaries and provenance manifest.',
|
|
182
|
-
'Review and commit the manifest change before release. Publishing the main package',
|
|
183
|
-
'verifies the version pin and the complete sidecar provenance before any registry',
|
|
184
|
-
'decision.',
|
|
185
|
-
'',
|
|
186
|
-
].join('\n');
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
const invokedPath = process.argv[1] ? resolve(process.argv[1]) : null;
|
|
190
|
-
if (invokedPath === fileURLToPath(import.meta.url)) {
|
|
191
|
-
try {
|
|
192
|
-
buildCodebaseIqWindowsSidecar();
|
|
193
|
-
} catch (error) {
|
|
194
|
-
console.error(`Windows sidecar build FAILED:\n - ${error instanceof Error ? error.message : String(error)}`);
|
|
195
|
-
process.exitCode = 1;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
|
|
5
|
-
export const WINDOWS_SIDECAR_PROVENANCE_KIND = 'codebaseiq-windows-sidecar-provenance';
|
|
6
|
-
export const WINDOWS_SIDECAR_PROVENANCE_VERSION = 1;
|
|
7
|
-
export const WINDOWS_SIDECAR_PROVENANCE_FILE = 'provenance.json';
|
|
8
|
-
export const DEFAULT_SCIP_REPOSITORY = 'https://github.com/scip-code/scip.git';
|
|
9
|
-
export const DEFAULT_SCIP_TAG = 'v0.8.1';
|
|
10
|
-
export const PINNED_GO_VERSION = 'go1.26.4';
|
|
11
|
-
|
|
12
|
-
export const WINDOWS_SIDECAR_BUILD = Object.freeze({
|
|
13
|
-
command: 'go build',
|
|
14
|
-
package: './cmd/scip',
|
|
15
|
-
flags: Object.freeze(['-trimpath', '-ldflags=-s -w']),
|
|
16
|
-
environment: Object.freeze({
|
|
17
|
-
CGO_ENABLED: '0',
|
|
18
|
-
GOOS: 'windows',
|
|
19
|
-
}),
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
export const WINDOWS_SIDECAR_TARGETS = Object.freeze([
|
|
23
|
-
Object.freeze({
|
|
24
|
-
goarch: 'amd64',
|
|
25
|
-
packageArch: 'x64',
|
|
26
|
-
filename: 'scip-win32-x64.exe',
|
|
27
|
-
peMachine: 'AMD64',
|
|
28
|
-
peMachineCode: 0x8664,
|
|
29
|
-
}),
|
|
30
|
-
Object.freeze({
|
|
31
|
-
goarch: 'arm64',
|
|
32
|
-
packageArch: 'arm64',
|
|
33
|
-
filename: 'scip-win32-arm64.exe',
|
|
34
|
-
peMachine: 'ARM64',
|
|
35
|
-
peMachineCode: 0xaa64,
|
|
36
|
-
}),
|
|
37
|
-
]);
|
|
38
|
-
|
|
39
|
-
export class WindowsSidecarProvenanceError extends Error {
|
|
40
|
-
constructor(code, message) {
|
|
41
|
-
super(message);
|
|
42
|
-
this.name = 'WindowsSidecarProvenanceError';
|
|
43
|
-
this.code = code;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function sha256(bytes) {
|
|
48
|
-
return createHash('sha256').update(bytes).digest('hex');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function inspectPortableExecutable(bytes, filename = '<binary>') {
|
|
52
|
-
if (!Buffer.isBuffer(bytes) || bytes.length < 0x40) {
|
|
53
|
-
throw provenanceError('malformed-binary', `${filename} is too short to be a PE executable.`);
|
|
54
|
-
}
|
|
55
|
-
if (bytes[0] !== 0x4d || bytes[1] !== 0x5a) {
|
|
56
|
-
throw provenanceError('malformed-binary', `${filename} is missing the DOS MZ signature.`);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const peOffset = bytes.readUInt32LE(0x3c);
|
|
60
|
-
if (!Number.isSafeInteger(peOffset) || peOffset < 0x40 || peOffset + 26 > bytes.length) {
|
|
61
|
-
throw provenanceError('malformed-binary', `${filename} has an invalid PE header offset.`);
|
|
62
|
-
}
|
|
63
|
-
if (
|
|
64
|
-
bytes[peOffset] !== 0x50 ||
|
|
65
|
-
bytes[peOffset + 1] !== 0x45 ||
|
|
66
|
-
bytes[peOffset + 2] !== 0 ||
|
|
67
|
-
bytes[peOffset + 3] !== 0
|
|
68
|
-
) {
|
|
69
|
-
throw provenanceError('malformed-binary', `${filename} is missing the PE signature.`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const machineCode = bytes.readUInt16LE(peOffset + 4);
|
|
73
|
-
const target = WINDOWS_SIDECAR_TARGETS.find((candidate) => candidate.peMachineCode === machineCode);
|
|
74
|
-
if (!target) {
|
|
75
|
-
throw provenanceError(
|
|
76
|
-
'wrong-architecture',
|
|
77
|
-
`${filename} has unsupported PE machine 0x${machineCode.toString(16).padStart(4, '0')}.`,
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const optionalHeaderMagic = bytes.readUInt16LE(peOffset + 24);
|
|
82
|
-
if (optionalHeaderMagic !== 0x20b) {
|
|
83
|
-
throw provenanceError(
|
|
84
|
-
'malformed-binary',
|
|
85
|
-
`${filename} is not a PE32+ executable (optional-header magic 0x${optionalHeaderMagic
|
|
86
|
-
.toString(16)
|
|
87
|
-
.padStart(4, '0')}).`,
|
|
88
|
-
);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
peMachine: target.peMachine,
|
|
93
|
-
peMachineCode: `0x${machineCode.toString(16).padStart(4, '0')}`,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export function inspectWindowsSidecarBinary(file, readFile = readFileSync) {
|
|
98
|
-
const bytes = readFile(file);
|
|
99
|
-
const pe = inspectPortableExecutable(bytes, file);
|
|
100
|
-
return {
|
|
101
|
-
size: bytes.length,
|
|
102
|
-
sha256: sha256(bytes),
|
|
103
|
-
...pe,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function createWindowsSidecarProvenance({
|
|
108
|
-
sidecarDir,
|
|
109
|
-
packageName,
|
|
110
|
-
packageVersion,
|
|
111
|
-
sourceRepository = DEFAULT_SCIP_REPOSITORY,
|
|
112
|
-
sourceTag = DEFAULT_SCIP_TAG,
|
|
113
|
-
sourceCommit,
|
|
114
|
-
goVersion = PINNED_GO_VERSION,
|
|
115
|
-
readFile = readFileSync,
|
|
116
|
-
}) {
|
|
117
|
-
if (!isCommit(sourceCommit)) {
|
|
118
|
-
throw provenanceError('invalid-build-input', `Source commit must be a full 40-character Git commit.`);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return {
|
|
122
|
-
kind: WINDOWS_SIDECAR_PROVENANCE_KIND,
|
|
123
|
-
schemaVersion: WINDOWS_SIDECAR_PROVENANCE_VERSION,
|
|
124
|
-
package: {
|
|
125
|
-
name: packageName,
|
|
126
|
-
version: packageVersion,
|
|
127
|
-
},
|
|
128
|
-
source: {
|
|
129
|
-
repository: sourceRepository,
|
|
130
|
-
tag: sourceTag,
|
|
131
|
-
commit: sourceCommit,
|
|
132
|
-
},
|
|
133
|
-
toolchain: {
|
|
134
|
-
goVersion,
|
|
135
|
-
},
|
|
136
|
-
build: {
|
|
137
|
-
command: WINDOWS_SIDECAR_BUILD.command,
|
|
138
|
-
package: WINDOWS_SIDECAR_BUILD.package,
|
|
139
|
-
flags: [...WINDOWS_SIDECAR_BUILD.flags],
|
|
140
|
-
environment: {
|
|
141
|
-
...WINDOWS_SIDECAR_BUILD.environment,
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
binaries: WINDOWS_SIDECAR_TARGETS.map((target) => {
|
|
145
|
-
const inspected = inspectWindowsSidecarBinary(join(sidecarDir, target.filename), readFile);
|
|
146
|
-
if (inspected.peMachine !== target.peMachine) {
|
|
147
|
-
throw provenanceError(
|
|
148
|
-
'wrong-architecture',
|
|
149
|
-
`${target.filename} declares ${target.packageArch} but contains ${inspected.peMachine}.`,
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
return {
|
|
153
|
-
filename: target.filename,
|
|
154
|
-
target: {
|
|
155
|
-
goos: 'windows',
|
|
156
|
-
goarch: target.goarch,
|
|
157
|
-
packageArch: target.packageArch,
|
|
158
|
-
},
|
|
159
|
-
size: inspected.size,
|
|
160
|
-
sha256: inspected.sha256,
|
|
161
|
-
peMachine: inspected.peMachine,
|
|
162
|
-
peMachineCode: inspected.peMachineCode,
|
|
163
|
-
};
|
|
164
|
-
}),
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
export function verifyWindowsSidecarProvenance({
|
|
169
|
-
sidecarDir,
|
|
170
|
-
expectedSourceRepository = DEFAULT_SCIP_REPOSITORY,
|
|
171
|
-
expectedSourceTag = DEFAULT_SCIP_TAG,
|
|
172
|
-
expectedGoVersion = PINNED_GO_VERSION,
|
|
173
|
-
readFile = readFileSync,
|
|
174
|
-
}) {
|
|
175
|
-
const packageRecord = parseJsonFile(join(sidecarDir, 'package.json'), 'sidecar package', readFile);
|
|
176
|
-
const manifest = parseJsonFile(
|
|
177
|
-
join(sidecarDir, WINDOWS_SIDECAR_PROVENANCE_FILE),
|
|
178
|
-
'sidecar provenance manifest',
|
|
179
|
-
readFile,
|
|
180
|
-
);
|
|
181
|
-
const decoded = decodeWindowsSidecarProvenance(manifest);
|
|
182
|
-
|
|
183
|
-
requireEqual(decoded.package.name, packageRecord.name, 'package name');
|
|
184
|
-
requireEqual(decoded.package.version, packageRecord.version, 'package version');
|
|
185
|
-
requireEqual(decoded.source.repository, expectedSourceRepository, 'SCIP source repository');
|
|
186
|
-
requireEqual(decoded.source.tag, expectedSourceTag, 'SCIP source tag');
|
|
187
|
-
requireEqual(decoded.toolchain.goVersion, expectedGoVersion, 'pinned Go version');
|
|
188
|
-
requireBuildContract(decoded.build);
|
|
189
|
-
|
|
190
|
-
const entries = new Map(decoded.binaries.map((binary) => [binary.filename, binary]));
|
|
191
|
-
for (const target of WINDOWS_SIDECAR_TARGETS) {
|
|
192
|
-
const expected = entries.get(target.filename);
|
|
193
|
-
if (!expected) {
|
|
194
|
-
throw provenanceError('malformed-manifest', `Manifest is missing ${target.filename}.`);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
requireEqual(expected.target.goos, 'windows', `${target.filename} GOOS`);
|
|
198
|
-
requireEqual(expected.target.goarch, target.goarch, `${target.filename} GOARCH`);
|
|
199
|
-
requireEqual(expected.target.packageArch, target.packageArch, `${target.filename} package arch`);
|
|
200
|
-
requireEqual(expected.peMachine, target.peMachine, `${target.filename} PE machine`);
|
|
201
|
-
requireEqual(
|
|
202
|
-
expected.peMachineCode,
|
|
203
|
-
`0x${target.peMachineCode.toString(16).padStart(4, '0')}`,
|
|
204
|
-
`${target.filename} PE machine code`,
|
|
205
|
-
);
|
|
206
|
-
|
|
207
|
-
let actual;
|
|
208
|
-
try {
|
|
209
|
-
actual = inspectWindowsSidecarBinary(join(sidecarDir, target.filename), readFile);
|
|
210
|
-
} catch (error) {
|
|
211
|
-
if (error?.code === 'ENOENT') {
|
|
212
|
-
throw provenanceError('missing-binary', `${target.filename} is missing.`);
|
|
213
|
-
}
|
|
214
|
-
throw error;
|
|
215
|
-
}
|
|
216
|
-
requireEqual(actual.peMachine, target.peMachine, `${target.filename} actual PE machine`);
|
|
217
|
-
requireEqual(actual.size, expected.size, `${target.filename} byte size`);
|
|
218
|
-
requireEqual(actual.sha256, expected.sha256, `${target.filename} SHA-256`);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return decoded;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
export function decodeWindowsSidecarProvenance(value) {
|
|
225
|
-
const record = requireRecord(value, 'manifest');
|
|
226
|
-
requireEqual(record.kind, WINDOWS_SIDECAR_PROVENANCE_KIND, 'manifest kind');
|
|
227
|
-
if (record.schemaVersion !== WINDOWS_SIDECAR_PROVENANCE_VERSION) {
|
|
228
|
-
throw provenanceError(
|
|
229
|
-
'unsupported-manifest',
|
|
230
|
-
`Unsupported Windows sidecar provenance schema ${String(record.schemaVersion)}; expected ${WINDOWS_SIDECAR_PROVENANCE_VERSION}.`,
|
|
231
|
-
);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
const packageRecord = requireRecord(record.package, 'package');
|
|
235
|
-
const source = requireRecord(record.source, 'source');
|
|
236
|
-
const toolchain = requireRecord(record.toolchain, 'toolchain');
|
|
237
|
-
const build = requireRecord(record.build, 'build');
|
|
238
|
-
if (!Array.isArray(record.binaries) || record.binaries.length !== WINDOWS_SIDECAR_TARGETS.length) {
|
|
239
|
-
throw provenanceError(
|
|
240
|
-
'malformed-manifest',
|
|
241
|
-
`binaries must contain exactly ${WINDOWS_SIDECAR_TARGETS.length} entries.`,
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
const binaries = record.binaries.map((value, index) => {
|
|
246
|
-
const binary = requireRecord(value, `binaries[${index}]`);
|
|
247
|
-
const target = requireRecord(binary.target, `binaries[${index}].target`);
|
|
248
|
-
requireNonEmptyString(binary.filename, `binaries[${index}].filename`);
|
|
249
|
-
requireNonEmptyString(target.goos, `binaries[${index}].target.goos`);
|
|
250
|
-
requireNonEmptyString(target.goarch, `binaries[${index}].target.goarch`);
|
|
251
|
-
requireNonEmptyString(target.packageArch, `binaries[${index}].target.packageArch`);
|
|
252
|
-
requirePositiveSafeInteger(binary.size, `binaries[${index}].size`);
|
|
253
|
-
if (typeof binary.sha256 !== 'string' || !/^[a-f0-9]{64}$/.test(binary.sha256)) {
|
|
254
|
-
throw provenanceError('malformed-manifest', `binaries[${index}].sha256 must be lowercase SHA-256.`);
|
|
255
|
-
}
|
|
256
|
-
requireNonEmptyString(binary.peMachine, `binaries[${index}].peMachine`);
|
|
257
|
-
if (typeof binary.peMachineCode !== 'string' || !/^0x[a-f0-9]{4}$/.test(binary.peMachineCode)) {
|
|
258
|
-
throw provenanceError(
|
|
259
|
-
'malformed-manifest',
|
|
260
|
-
`binaries[${index}].peMachineCode must be a four-digit hexadecimal code.`,
|
|
261
|
-
);
|
|
262
|
-
}
|
|
263
|
-
return binary;
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
requireNonEmptyString(packageRecord.name, 'package.name');
|
|
267
|
-
requireNonEmptyString(packageRecord.version, 'package.version');
|
|
268
|
-
requireNonEmptyString(source.repository, 'source.repository');
|
|
269
|
-
requireNonEmptyString(source.tag, 'source.tag');
|
|
270
|
-
if (!isCommit(source.commit)) {
|
|
271
|
-
throw provenanceError('malformed-manifest', `source.commit must be a full 40-character Git commit.`);
|
|
272
|
-
}
|
|
273
|
-
requireNonEmptyString(toolchain.goVersion, 'toolchain.goVersion');
|
|
274
|
-
requireNonEmptyString(build.command, 'build.command');
|
|
275
|
-
requireNonEmptyString(build.package, 'build.package');
|
|
276
|
-
if (!Array.isArray(build.flags) || !build.flags.every((flag) => typeof flag === 'string')) {
|
|
277
|
-
throw provenanceError('malformed-manifest', `build.flags must be an array of strings.`);
|
|
278
|
-
}
|
|
279
|
-
requireRecord(build.environment, 'build.environment');
|
|
280
|
-
|
|
281
|
-
const filenames = binaries.map((binary) => binary.filename);
|
|
282
|
-
if (new Set(filenames).size !== filenames.length) {
|
|
283
|
-
throw provenanceError('malformed-manifest', `binaries contains duplicate filenames.`);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
return {
|
|
287
|
-
...record,
|
|
288
|
-
package: packageRecord,
|
|
289
|
-
source,
|
|
290
|
-
toolchain,
|
|
291
|
-
build,
|
|
292
|
-
binaries,
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
function requireBuildContract(build) {
|
|
297
|
-
requireEqual(build.command, WINDOWS_SIDECAR_BUILD.command, 'build command');
|
|
298
|
-
requireEqual(build.package, WINDOWS_SIDECAR_BUILD.package, 'build package');
|
|
299
|
-
if (JSON.stringify(build.flags) !== JSON.stringify(WINDOWS_SIDECAR_BUILD.flags)) {
|
|
300
|
-
throw provenanceError(
|
|
301
|
-
'build-input-mismatch',
|
|
302
|
-
`Build flags do not match the pinned contract (${WINDOWS_SIDECAR_BUILD.flags.join(' ')}).`,
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
const environment = requireRecord(build.environment, 'build.environment');
|
|
306
|
-
requireEqual(environment.CGO_ENABLED, WINDOWS_SIDECAR_BUILD.environment.CGO_ENABLED, 'CGO_ENABLED');
|
|
307
|
-
requireEqual(environment.GOOS, WINDOWS_SIDECAR_BUILD.environment.GOOS, 'GOOS');
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
function parseJsonFile(file, label, readFile) {
|
|
311
|
-
let bytes;
|
|
312
|
-
try {
|
|
313
|
-
bytes = readFile(file);
|
|
314
|
-
} catch (error) {
|
|
315
|
-
if (error?.code === 'ENOENT') {
|
|
316
|
-
throw provenanceError(
|
|
317
|
-
label === 'sidecar provenance manifest' ? 'missing-manifest' : 'missing-package',
|
|
318
|
-
`${label} is missing at ${file}.`,
|
|
319
|
-
);
|
|
320
|
-
}
|
|
321
|
-
throw error;
|
|
322
|
-
}
|
|
323
|
-
try {
|
|
324
|
-
return JSON.parse(bytes.toString('utf8'));
|
|
325
|
-
} catch {
|
|
326
|
-
throw provenanceError('malformed-manifest', `${label} is not valid JSON at ${file}.`);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
function requireRecord(value, field) {
|
|
331
|
-
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
332
|
-
throw provenanceError('malformed-manifest', `${field} must be an object.`);
|
|
333
|
-
}
|
|
334
|
-
return value;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
function requireNonEmptyString(value, field) {
|
|
338
|
-
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
339
|
-
throw provenanceError('malformed-manifest', `${field} must be a non-empty string.`);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
function requirePositiveSafeInteger(value, field) {
|
|
344
|
-
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0) {
|
|
345
|
-
throw provenanceError('malformed-manifest', `${field} must be a positive safe integer.`);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
function requireEqual(actual, expected, field) {
|
|
350
|
-
if (actual !== expected) {
|
|
351
|
-
throw provenanceError(
|
|
352
|
-
'build-input-mismatch',
|
|
353
|
-
`${field} mismatch: expected ${JSON.stringify(expected)}, received ${JSON.stringify(actual)}.`,
|
|
354
|
-
);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
function isCommit(value) {
|
|
359
|
-
return typeof value === 'string' && /^[a-f0-9]{40}$/.test(value);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
function provenanceError(code, message) {
|
|
363
|
-
return new WindowsSidecarProvenanceError(code, message);
|
|
364
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { dirname, resolve } from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import {
|
|
5
|
-
DEFAULT_SCIP_REPOSITORY,
|
|
6
|
-
DEFAULT_SCIP_TAG,
|
|
7
|
-
PINNED_GO_VERSION,
|
|
8
|
-
verifyWindowsSidecarProvenance,
|
|
9
|
-
} from './codebaseiq-windows-provenance.mjs';
|
|
10
|
-
|
|
11
|
-
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
12
|
-
const sidecarDir = resolve(root, 'packages', 'codebaseiq-windows');
|
|
13
|
-
|
|
14
|
-
try {
|
|
15
|
-
const manifest = verifyWindowsSidecarProvenance({
|
|
16
|
-
sidecarDir,
|
|
17
|
-
expectedSourceRepository: process.env.SCIP_REPO_URL ?? DEFAULT_SCIP_REPOSITORY,
|
|
18
|
-
expectedSourceTag: process.env.SCIP_VERSION ?? DEFAULT_SCIP_TAG,
|
|
19
|
-
expectedGoVersion: process.env.SCIP_GO_VERSION ?? PINNED_GO_VERSION,
|
|
20
|
-
});
|
|
21
|
-
console.log(
|
|
22
|
-
`Verified ${manifest.package.name}@${manifest.package.version}: ${manifest.source.tag} (${manifest.source.commit.slice(0, 12)}), ${manifest.toolchain.goVersion}, ${manifest.binaries.length} PE binaries.`,
|
|
23
|
-
);
|
|
24
|
-
} catch (error) {
|
|
25
|
-
console.error(
|
|
26
|
-
`Windows sidecar provenance check FAILED:\n - ${error instanceof Error ? error.message : String(error)}`,
|
|
27
|
-
);
|
|
28
|
-
process.exitCode = 1;
|
|
29
|
-
}
|