scip-query 0.23.0 → 0.26.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 +491 -2
- package/README.md +111 -122
- package/dist/augment-vue-worker.js +1 -1
- package/dist/by-kind-PRVFAGTQ.js +2 -0
- package/dist/call-graph-DVPAQV2F.js +2 -0
- package/dist/call-graph-evidence-CUtj8V2I.d.ts +19 -0
- package/dist/chunk-2FSBGL5P.js +2 -0
- package/dist/chunk-2HLAFUCY.js +2 -0
- package/dist/chunk-2IWUT6CJ.js +3 -0
- package/dist/chunk-2KNN7GTQ.js +2 -0
- package/dist/chunk-2LHXRE2B.js +8 -0
- package/dist/{chunk-EG2CPZMJ.js → chunk-2YXE77TJ.js} +2 -2
- package/dist/chunk-36SGVCGX.js +2 -0
- package/dist/chunk-3ABBFPTP.js +2 -0
- package/dist/chunk-3IVFU4FD.js +3 -0
- package/dist/chunk-3JIQS44J.js +7 -0
- package/dist/chunk-3ZRB6DNK.js +7 -0
- package/dist/{chunk-6YTSKJJ3.js → chunk-42EOW5VI.js} +1 -1
- package/dist/{chunk-6I6L7Z62.js → chunk-4BHGBMNO.js} +2 -2
- package/dist/chunk-4BP3UBDG.js +2 -0
- package/dist/chunk-4D6RO7G4.js +2 -0
- package/dist/chunk-4FEWQ6RH.js +2 -0
- package/dist/chunk-4IGEOBG7.js +2 -0
- package/dist/chunk-4QZXBUKC.js +2 -0
- package/dist/chunk-4WBDEVX2.js +4 -0
- package/dist/chunk-4WCUBZU3.js +8 -0
- package/dist/chunk-4WTUBQ36.js +40 -0
- package/dist/chunk-4XQ4O6IM.js +3 -0
- package/dist/chunk-55UQAMZO.js +4 -0
- package/dist/chunk-5D2LVK7O.js +125 -0
- package/dist/chunk-5IYJ56TT.js +2 -0
- package/dist/chunk-5PLMJC7Q.js +2 -0
- package/dist/chunk-5TNQJUR2.js +5 -0
- package/dist/chunk-62BDNPMI.js +2 -0
- package/dist/chunk-64DZ5TXR.js +7 -0
- package/dist/chunk-65245JCM.js +2 -0
- package/dist/chunk-6FFVZZL4.js +2 -0
- package/dist/chunk-6KO5JHAR.js +2 -0
- package/dist/chunk-6LRXOOSX.js +2 -0
- package/dist/chunk-6LSEIIF7.js +2 -0
- package/dist/chunk-6YMNWD3H.js +6 -0
- package/dist/chunk-72AD6ZRR.js +5 -0
- package/dist/chunk-73AAKPUC.js +4 -0
- package/dist/chunk-76CZ77DF.js +2 -0
- package/dist/chunk-7VPEEAAG.js +2 -0
- package/dist/chunk-7WTPQ4NX.js +14 -0
- package/dist/chunk-7Y5T6XDP.js +2 -0
- package/dist/chunk-A2IIGFMJ.js +5 -0
- package/dist/chunk-AB5KCTEV.js +2 -0
- package/dist/chunk-AC566WBP.js +6 -0
- package/dist/chunk-AGWFSTXC.js +3 -0
- package/dist/chunk-AOSIYPTA.js +2 -0
- package/dist/chunk-AUVEWPIF.js +2 -0
- package/dist/chunk-B56T42J3.js +25 -0
- package/dist/chunk-BIQEF5NE.js +2 -0
- package/dist/chunk-BL6XJKTA.js +3 -0
- package/dist/chunk-BMKOQJRI.js +2 -0
- package/dist/chunk-BOZ4EXBB.js +3 -0
- package/dist/chunk-BUTWYEPH.js +2 -0
- package/dist/chunk-BZB4QPIP.js +2 -0
- package/dist/{chunk-ILTDAWEF.js → chunk-CE357GEE.js} +4 -4
- package/dist/chunk-CFN45HFP.js +2 -0
- package/dist/chunk-CFYMZFXT.js +368 -0
- package/dist/chunk-CN5EH7O3.js +2 -0
- package/dist/chunk-D254DNNQ.js +4 -0
- package/dist/chunk-D3FDISIC.js +2 -0
- package/dist/chunk-D3NX5XIE.js +3 -0
- package/dist/chunk-DA7RPPDF.js +3 -0
- package/dist/chunk-DDMC3FON.js +3 -0
- package/dist/chunk-DIO3FUSG.js +2 -0
- package/dist/chunk-DJ2NNSUK.js +3 -0
- package/dist/chunk-DKYQIM3C.js +18 -0
- package/dist/{chunk-JTQVMR42.js → chunk-DOOEL2IV.js} +2 -2
- package/dist/chunk-DVFP6PZI.js +2 -0
- package/dist/chunk-E3FDPXZK.js +2 -0
- package/dist/chunk-E7YNJLCB.js +2 -0
- package/dist/chunk-EFGW5JPH.js +2 -0
- package/dist/chunk-EJVTR244.js +13 -0
- package/dist/chunk-EOV7RTRZ.js +2 -0
- package/dist/chunk-ETOIKRHO.js +2 -0
- package/dist/chunk-EYK3ZAO2.js +3 -0
- package/dist/chunk-F2V2LPET.js +52 -0
- package/dist/chunk-F4LUHJTF.js +2 -0
- package/dist/chunk-F4PUT6IT.js +2 -0
- package/dist/chunk-F56GCXXS.js +5 -0
- package/dist/chunk-FC2EVQRM.js +2 -0
- package/dist/chunk-FL7NBMHP.js +3 -0
- package/dist/chunk-FMRN2TRL.js +3 -0
- package/dist/chunk-FVULPZDF.js +20 -0
- package/dist/chunk-GCKCF5FL.js +43 -0
- package/dist/chunk-GH2PYF46.js +2 -0
- package/dist/chunk-GHJAGXIP.js +2 -0
- package/dist/{chunk-WIWY3CRX.js → chunk-GMVSHUKZ.js} +2 -2
- package/dist/chunk-GS6KDO4R.js +2 -0
- package/dist/chunk-GUUBXNN7.js +2 -0
- package/dist/chunk-GVWX5T43.js +80 -0
- package/dist/chunk-GZKFETP5.js +2 -0
- package/dist/chunk-H4EQHO6J.js +9 -0
- package/dist/chunk-H73WY2RM.js +2 -0
- package/dist/chunk-H75GSPRV.js +60 -0
- package/dist/chunk-HDR3AHSV.js +61 -0
- package/dist/chunk-HQBSL74Y.js +2 -0
- package/dist/chunk-HRRFKWPZ.js +2 -0
- package/dist/chunk-HXENDJC6.js +2 -0
- package/dist/chunk-IIBAZNSW.js +21 -0
- package/dist/chunk-INLMWEUU.js +12 -0
- package/dist/chunk-IWQPAF4F.js +2 -0
- package/dist/chunk-IZJ6YUKP.js +35 -0
- package/dist/chunk-J2TMAIN5.js +60 -0
- package/dist/chunk-J5FJMODQ.js +142 -0
- package/dist/chunk-J7HZPIO3.js +2 -0
- package/dist/chunk-JEVRKFRL.js +2 -0
- package/dist/chunk-JFXSGAEB.js +30 -0
- package/dist/chunk-JVRTHGFS.js +3 -0
- package/dist/chunk-JYWEX7RR.js +360 -0
- package/dist/chunk-K3YL22N6.js +2 -0
- package/dist/chunk-K4CN7GXK.js +12 -0
- package/dist/chunk-K5TBVXU4.js +30 -0
- package/dist/chunk-KDDIE2DP.js +9 -0
- package/dist/chunk-KHWRRPV4.js +2 -0
- package/dist/chunk-KI6NBKDY.js +14 -0
- package/dist/chunk-KU3QRSTH.js +2 -0
- package/dist/chunk-KZBJWZJB.js +2 -0
- package/dist/chunk-L7GFM3NP.js +3 -0
- package/dist/chunk-LMO6PK3V.js +35 -0
- package/dist/chunk-LN4YXJJU.js +2 -0
- package/dist/chunk-LOVIZBJ4.js +43 -0
- package/dist/chunk-LPCRK4A2.js +11 -0
- package/dist/chunk-MMHZKBFA.js +2 -0
- package/dist/{chunk-M2O5NY6W.js → chunk-MOQQBQRD.js} +2 -2
- package/dist/chunk-N2WN6I3L.js +2 -0
- package/dist/chunk-N3ORQT7L.js +2 -0
- package/dist/chunk-NAZ3RAIW.js +2 -0
- package/dist/chunk-NDUNO5JQ.js +2 -0
- package/dist/chunk-NEIWRNAZ.js +4 -0
- package/dist/chunk-NJJMVD65.js +2 -0
- package/dist/chunk-NLOQOBXI.js +20 -0
- package/dist/chunk-NOLZOVCU.js +2 -0
- package/dist/chunk-NOWINRRN.js +2 -0
- package/dist/chunk-NZAXKGRL.js +16 -0
- package/dist/chunk-O2C4UILI.js +2 -0
- package/dist/chunk-O3RHA6ZT.js +3 -0
- package/dist/chunk-O4UZSPPI.js +3 -0
- package/dist/chunk-OGFV2BUX.js +2 -0
- package/dist/chunk-OZCJXZK6.js +499 -0
- package/dist/chunk-P6ODM7BY.js +2 -0
- package/dist/{chunk-XBGWL66K.js → chunk-PAVGPRHJ.js} +2 -2
- package/dist/chunk-PH52RA7D.js +2 -0
- package/dist/chunk-PKN354TH.js +3 -0
- package/dist/chunk-PWOASWEG.js +11 -0
- package/dist/chunk-QIWXRW72.js +2 -0
- package/dist/chunk-QJRMOK5N.js +2 -0
- package/dist/{chunk-YXPUP5G2.js → chunk-QOIXNWQR.js} +2 -2
- package/dist/chunk-QXEUDXBT.js +3 -0
- package/dist/chunk-QYUVVBMR.js +6 -0
- package/dist/chunk-QZ7KQZRN.js +2 -0
- package/dist/chunk-R6LQBUDH.js +2 -0
- package/dist/chunk-RBS42E55.js +20 -0
- package/dist/chunk-RSJKPCFX.js +26 -0
- package/dist/chunk-S6CZA3MV.js +2 -0
- package/dist/chunk-STMVAHJP.js +2 -0
- package/dist/chunk-SYVPTTVW.js +2 -0
- package/dist/chunk-T3I6NHBH.js +2 -0
- package/dist/chunk-T6DK3ZP7.js +2 -0
- package/dist/chunk-TKD34PHN.js +4 -0
- package/dist/chunk-TNNQFH7W.js +2 -0
- package/dist/chunk-TNV7SSUF.js +2 -0
- package/dist/chunk-TO7ZR3EH.js +8 -0
- package/dist/chunk-TOU3CHK4.js +2 -0
- package/dist/chunk-TRBI4UKT.js +2 -0
- package/dist/chunk-TZCVNCAN.js +4 -0
- package/dist/chunk-U4LZA5LL.js +3 -0
- package/dist/chunk-U5RIG3JP.js +3 -0
- package/dist/chunk-UP5KXN2I.js +2 -0
- package/dist/chunk-UQFR3NDH.js +5 -0
- package/dist/chunk-UXYXF7GV.js +2 -0
- package/dist/chunk-VB3GOKOS.js +2 -0
- package/dist/chunk-VF5JZICY.js +2 -0
- package/dist/chunk-VTY3VK6E.js +2 -0
- package/dist/chunk-VX2O4RIS.js +2 -0
- package/dist/chunk-WKPV2TDZ.js +2 -0
- package/dist/chunk-WOFQ5DTB.js +2 -0
- package/dist/chunk-WS4C6TCK.js +2 -0
- package/dist/chunk-WXU3DGPU.js +2 -0
- package/dist/chunk-X6RMKHJQ.js +81 -0
- package/dist/{chunk-4ILJCCXV.js → chunk-XHMN6ZX7.js} +2 -2
- package/dist/chunk-XHTVFLWW.js +2 -0
- package/dist/chunk-XKIDJCIK.js +2 -0
- package/dist/chunk-XTYTYZPT.js +2 -0
- package/dist/chunk-Y2JHHTTA.js +2 -0
- package/dist/chunk-YGVRMGYN.js +4 -0
- package/dist/chunk-YNQCGEQE.js +2 -0
- package/dist/chunk-YOQVEXVE.js +14 -0
- package/dist/chunk-YRT2WLYY.js +2 -0
- package/dist/chunk-YTAP5Y2G.js +2 -0
- package/dist/chunk-YTYWI7VB.js +2 -0
- package/dist/chunk-YULZRALL.js +2 -0
- package/dist/chunk-Z33WQG4Q.js +2 -0
- package/dist/chunk-ZGTYGDMF.js +16 -0
- package/dist/chunk-ZHMRSZFD.js +43 -0
- package/dist/chunk-ZHSP366W.js +10 -0
- package/dist/chunk-ZIBYCYKK.js +7 -0
- package/dist/{chunk-GAS2LJMP.js → chunk-ZLADLUE6.js} +3 -3
- package/dist/chunk-ZO4YXUT6.js +4 -0
- package/dist/{chunk-HYO3NP5Q.js → chunk-ZR4HBC2H.js} +2 -2
- package/dist/cli-main.js +6 -6
- package/dist/cli.js +1 -1
- package/dist/{code-B17qEMbt.d.ts → code-BNyrCF3_.d.ts} +3 -2
- package/dist/code-IL5WH3NZ.js +2 -0
- package/dist/code-result-json-ANTBEDFP.js +4 -0
- package/dist/command-descriptors-HEEMDHTU.js +222 -0
- package/dist/deps-EOWFC6FD.js +2 -0
- package/dist/direct-navigation-Y5B6OSIQ.js +3 -0
- package/dist/{exploration-topology-BG4v30HZ.d.ts → exploration-topology-CSgEyAz-.d.ts} +3 -1
- package/dist/files-K4AI3JUM.js +2 -0
- package/dist/frontend-profile-roles-D7eCum8P.d.ts +10 -0
- package/dist/{health-CPp2Jf1Z.d.ts → health-BtfmNrfa.d.ts} +58 -74
- package/dist/hierarchy-6W5NDIFI.js +2 -0
- package/dist/imports-WH365QY4.js +2 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.js +1 -1
- package/dist/members-K3PHMF5S.js +2 -0
- package/dist/methods-E7KVMBX4.js +2 -0
- package/dist/output-continuation-command-BJSY67SN.js +3 -0
- package/dist/output-pagination-UZJ5ACIX.js +24 -0
- package/dist/postinstall.js +1 -1
- package/dist/project-reindex-EP24WT4X.js +3 -0
- package/dist/queries/affected.js +1 -1
- package/dist/queries/architecture.d.ts +15 -4
- package/dist/queries/architecture.js +1 -1
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.d.ts +3 -1
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.d.ts +1 -0
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.d.ts +3 -3
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +20 -2
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.d.ts +1 -1
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity.d.ts +6 -3
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/context.d.ts +1 -7
- package/dist/queries/context.js +1 -1
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dead.d.ts +2 -0
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/dependence-slice.d.ts +46 -22
- package/dist/queries/dependence-slice.js +1 -1
- package/dist/queries/dependency-depth.d.ts +1 -7
- package/dist/queries/dependency-depth.js +1 -1
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-impact.d.ts +3 -1
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.d.ts +1 -1
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.d.ts +29 -2
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/entry-map.d.ts +2 -4
- package/dist/queries/entry-map.js +1 -1
- package/dist/queries/evidence.d.ts +121 -61
- package/dist/queries/evidence.js +1 -1
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.js +1 -1
- package/dist/queries/health.d.ts +1 -1
- 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 +1 -1
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +1 -0
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +3 -3
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +17 -65
- package/dist/queries/index.js +1 -1
- package/dist/queries/locality-candidates.d.ts +4 -4
- 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.js +1 -1
- package/dist/queries/not-implemented.d.ts +2 -6
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.d.ts +9 -1
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/react-component-duplicates.d.ts +19 -3
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +22 -3
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.d.ts +17 -3
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.d.ts +4 -14
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/refs.d.ts +4 -1
- package/dist/queries/refs.js +1 -1
- package/dist/queries/review.d.ts +188 -0
- package/dist/queries/review.js +2 -0
- package/dist/queries/similar-files.d.ts +7 -10
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.d.ts +19 -1
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice-cohesion.d.ts +205 -0
- package/dist/queries/slice-cohesion.js +2 -0
- package/dist/queries/source-inspection.d.ts +6 -202
- package/dist/queries/source-inspection.js +1 -1
- package/dist/queries/source-search.d.ts +2 -3
- package/dist/queries/source-search.js +1 -1
- package/dist/queries/stats.d.ts +1 -0
- package/dist/queries/stats.js +1 -1
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system.d.ts +4 -2
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.d.ts +1 -1
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/twin-drift.d.ts +23 -7
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.d.ts +3 -15
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/query-service-fastpath.js +5 -5
- package/dist/query-service-server.js +4 -4
- package/dist/refs-CCBJG7WK.js +2 -0
- package/dist/refs-pagination-DRNLVU4S.js +2 -0
- package/dist/reindex-worker.js +79 -29
- package/dist/reindex.js +45 -45
- package/dist/repository-cache-worker.js +2 -0
- package/dist/runtime.d.ts +8 -8
- package/dist/runtime.js +3 -4
- 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/service-queries-2WAJI7R6.js +6 -0
- package/dist/source-inspection-91U9zdO3.d.ts +341 -0
- package/dist/{source-search-types-Dwz8KeuW.d.ts → source-search-types-DWGYNg8M.d.ts} +15 -2
- package/dist/stats-G7DIV6VU.js +2 -0
- package/dist/surface-IO55UALI.js +2 -0
- package/dist/system-ZBMSHJXU.js +2 -0
- package/dist/{queries/trace.d.ts → trace-BMjw3prn.d.ts} +1 -18
- package/dist/typescript-indexer.js +2 -0
- package/dist/typescript-mailbox-worker.js +1 -1
- package/dist/watch-server.js +3 -3
- package/docs/AGENT_GUIDE.md +19 -128
- package/docs/CLI_JSON_OUTPUT.md +21 -17
- package/docs/COMMAND_REFERENCE.md +34 -49
- package/docs/CURRENT_COMMANDS.md +123 -0
- package/docs/DETECTOR_EVIDENCE_CONTRACTS.md +0 -40
- package/docs/DETECTOR_GUIDE.md +55 -12
- package/docs/PRODUCT_VISION.md +135 -0
- package/docs/PROPERTY_TESTING.md +73 -0
- package/docs/REVIEW.md +76 -0
- package/docs/SKILLS.md +51 -0
- package/docs/WINDOWS_SIDECAR_RELEASE.md +12 -3
- package/docs/accuracy-audit-checklist.md +70 -13
- package/docs/analyzer-inventory.md +2 -2
- package/docs/locality-analyzer-design.md +9 -9
- package/package.json +18 -80
- package/scripts/evidence-product-contract.mjs +7 -3
- package/scripts/record-review-coverage.mjs +118 -0
- package/scripts/scip-windows-provenance.mjs +29 -19
- package/skills/scip-architecture-review/SKILL.md +57 -0
- package/skills/scip-architecture-review/agents/openai.yaml +4 -0
- package/skills/scip-architecture-review/references/design-checks.md +17 -0
- package/skills/scip-explore/SKILL.md +15 -59
- package/skills/scip-explore/agents/openai.yaml +3 -3
- package/skills/scip-explore/references/external-evidence.md +2 -2
- package/skills/scip-explore/references/information-model.md +26 -29
- package/skills/scip-explore/scripts/capture-evidence.mjs +68 -34
- package/skills/scip-integrity-audit/SKILL.md +53 -181
- package/skills/scip-integrity-audit/agents/openai.yaml +3 -3
- package/skills/scip-integrity-audit/references/integrity-probes.md +27 -0
- package/skills/scip-plan/SKILL.md +39 -65
- package/skills/scip-plan/agents/openai.yaml +2 -2
- package/skills/scip-query/SKILL.md +28 -81
- package/skills/scip-query/agents/openai.yaml +2 -2
- package/skills/scip-query/references/command-guide.md +169 -0
- package/skills/scip-setup/SKILL.md +4 -2
- package/skills/scip-setup/agents/openai.yaml +3 -3
- package/dist/by-kind-XI2CSWEY.js +0 -2
- package/dist/call-graph-UONR6JR5.js +0 -2
- package/dist/call-graph-evidence-lZa2dwQA.d.ts +0 -11
- package/dist/chunk-26CT72HM.js +0 -2
- package/dist/chunk-2E7CX53V.js +0 -2
- package/dist/chunk-2GRUZAQF.js +0 -43
- package/dist/chunk-2LDBDR6J.js +0 -29
- package/dist/chunk-2OOY75BW.js +0 -2
- package/dist/chunk-2R3V3PSD.js +0 -4
- package/dist/chunk-2WC2OEDO.js +0 -4
- package/dist/chunk-35NLDRZC.js +0 -2
- package/dist/chunk-3AF4TUFK.js +0 -3
- package/dist/chunk-3D3QG236.js +0 -2
- package/dist/chunk-3FHOF22C.js +0 -21
- package/dist/chunk-3JKSW6LJ.js +0 -2
- package/dist/chunk-3L2ZBPEX.js +0 -133
- package/dist/chunk-3PJABJSU.js +0 -2
- package/dist/chunk-3SVF22I5.js +0 -2
- package/dist/chunk-3WR4E3A3.js +0 -3
- package/dist/chunk-4FTZ4P5G.js +0 -2
- package/dist/chunk-4UX2F3JX.js +0 -2
- package/dist/chunk-4WNW27SX.js +0 -2
- package/dist/chunk-5ENOG4VP.js +0 -61
- package/dist/chunk-64BFSI5I.js +0 -2
- package/dist/chunk-66DVSJQG.js +0 -455
- package/dist/chunk-6HFCYNYE.js +0 -9
- package/dist/chunk-6PQNKL3G.js +0 -3
- package/dist/chunk-6V5CNXL6.js +0 -2
- package/dist/chunk-6VVV4WRR.js +0 -4
- package/dist/chunk-7BWFZPPZ.js +0 -2
- package/dist/chunk-7CYG22FH.js +0 -2
- package/dist/chunk-7F45LJKI.js +0 -2
- package/dist/chunk-7IWV2EG3.js +0 -3
- package/dist/chunk-7KCZELVM.js +0 -2
- package/dist/chunk-AFHTBORT.js +0 -2
- package/dist/chunk-AVRYW5OZ.js +0 -2
- package/dist/chunk-B3X6KU75.js +0 -2
- package/dist/chunk-B5D7QPBE.js +0 -4
- package/dist/chunk-BBCIS4DX.js +0 -16
- package/dist/chunk-BDUVI7TO.js +0 -3
- package/dist/chunk-BE7ZZTMC.js +0 -2
- package/dist/chunk-BHVUJOCQ.js +0 -3
- package/dist/chunk-BJT7LSPK.js +0 -3
- package/dist/chunk-BKVWUP7Y.js +0 -2
- package/dist/chunk-BQGB4HBD.js +0 -2
- package/dist/chunk-BRV7PIFF.js +0 -2
- package/dist/chunk-CEEZJXEF.js +0 -2
- package/dist/chunk-CIYLO6SI.js +0 -7
- package/dist/chunk-CJZXN4NU.js +0 -2
- package/dist/chunk-CNO7TOKL.js +0 -2
- package/dist/chunk-COF23M5F.js +0 -2
- package/dist/chunk-CWFP7GM5.js +0 -2
- package/dist/chunk-D2DHWI3D.js +0 -2
- package/dist/chunk-D4N5SQ2M.js +0 -4
- package/dist/chunk-DBRSYFXR.js +0 -2
- package/dist/chunk-DHUIOLDT.js +0 -2
- package/dist/chunk-DIRJWYBM.js +0 -6
- package/dist/chunk-DIUFNHRJ.js +0 -35
- package/dist/chunk-DRENNWRG.js +0 -2
- package/dist/chunk-DTZCKZEU.js +0 -4
- package/dist/chunk-DULC3QFP.js +0 -5
- package/dist/chunk-DYGHBZ2N.js +0 -16
- package/dist/chunk-E5R6AQ73.js +0 -40
- package/dist/chunk-E73UNJTF.js +0 -38
- package/dist/chunk-EKV5HX33.js +0 -2
- package/dist/chunk-EQHFIL6T.js +0 -3
- package/dist/chunk-ESIQ66Z7.js +0 -2
- package/dist/chunk-EVFUMY4R.js +0 -3
- package/dist/chunk-F7DY272B.js +0 -2
- package/dist/chunk-FBN2FGXG.js +0 -2
- package/dist/chunk-FDLOBR6P.js +0 -4
- package/dist/chunk-FESCRNVV.js +0 -5
- package/dist/chunk-FFRKR4EQ.js +0 -2
- package/dist/chunk-FGA2U4OR.js +0 -8
- package/dist/chunk-FIQRSHVM.js +0 -2
- package/dist/chunk-FPYLNQPT.js +0 -2
- package/dist/chunk-FRUSVINH.js +0 -2
- package/dist/chunk-GSP44ENC.js +0 -2
- package/dist/chunk-GUFSG5TX.js +0 -2
- package/dist/chunk-GYIZ4NXB.js +0 -2
- package/dist/chunk-GZIUDL6G.js +0 -2
- package/dist/chunk-H5EXS3HM.js +0 -2
- package/dist/chunk-HCXEQRFF.js +0 -18
- package/dist/chunk-HEHOQQKH.js +0 -2
- package/dist/chunk-HKGFPJ4T.js +0 -4
- package/dist/chunk-HLZTEXRA.js +0 -2
- package/dist/chunk-HOENASQM.js +0 -3
- package/dist/chunk-HVF5VBG6.js +0 -2
- package/dist/chunk-I55I7XXP.js +0 -2
- package/dist/chunk-IDFEUFKS.js +0 -2
- package/dist/chunk-IHGQTTVW.js +0 -2
- package/dist/chunk-IICPE7B2.js +0 -20
- package/dist/chunk-IL676XCC.js +0 -18
- package/dist/chunk-IW5XQG5G.js +0 -2
- package/dist/chunk-IZDPJ2QI.js +0 -2
- package/dist/chunk-J66VOFW6.js +0 -5
- package/dist/chunk-JFMEXGFE.js +0 -2
- package/dist/chunk-JGKUET5J.js +0 -3
- package/dist/chunk-JS4PGXMV.js +0 -3
- package/dist/chunk-JWTGMPIT.js +0 -80
- package/dist/chunk-JYR66JN5.js +0 -5
- package/dist/chunk-KFOYCQAJ.js +0 -9
- package/dist/chunk-KLFEXGQA.js +0 -2
- package/dist/chunk-KMVGRIO2.js +0 -2
- package/dist/chunk-KYSDI3GE.js +0 -5
- package/dist/chunk-L6PJPETJ.js +0 -29
- package/dist/chunk-LDVT66YM.js +0 -2
- package/dist/chunk-LEECKFCJ.js +0 -2
- package/dist/chunk-LMZ5PRUV.js +0 -2
- package/dist/chunk-LQRQN2XA.js +0 -2
- package/dist/chunk-LXABEJX3.js +0 -2
- package/dist/chunk-MNV5FSBW.js +0 -3
- package/dist/chunk-MPQ4OTBM.js +0 -2
- package/dist/chunk-MTDBHTSF.js +0 -2
- package/dist/chunk-MV3CDXPI.js +0 -38
- package/dist/chunk-MWN53KRN.js +0 -60
- package/dist/chunk-MXNGIEPU.js +0 -3
- package/dist/chunk-N2ZSIIGR.js +0 -117
- package/dist/chunk-N5B2NILC.js +0 -5
- package/dist/chunk-NJITK2GP.js +0 -2
- package/dist/chunk-NOGJXYFO.js +0 -2
- package/dist/chunk-NOYBFVJA.js +0 -554
- package/dist/chunk-NWQXSFFU.js +0 -3
- package/dist/chunk-ODDUPDP7.js +0 -13
- package/dist/chunk-OLIWTZI3.js +0 -3
- package/dist/chunk-OLNV6I6U.js +0 -2
- package/dist/chunk-OR2E3AGZ.js +0 -2
- package/dist/chunk-OSR2GEHQ.js +0 -2
- package/dist/chunk-OSSESPDX.js +0 -3
- package/dist/chunk-OWOOWNJ5.js +0 -7
- package/dist/chunk-P42EIXTA.js +0 -2
- package/dist/chunk-PJFGPYTU.js +0 -2
- package/dist/chunk-PP7KNN7L.js +0 -2
- package/dist/chunk-PU7T5QYQ.js +0 -2
- package/dist/chunk-PWWAJSKV.js +0 -74
- package/dist/chunk-PZL5T7SU.js +0 -73
- package/dist/chunk-QBE3YX64.js +0 -23
- package/dist/chunk-QGVTFRY2.js +0 -7
- package/dist/chunk-QOJONDS7.js +0 -2
- package/dist/chunk-QU5XRYB5.js +0 -4
- package/dist/chunk-QUU5OBVK.js +0 -11
- package/dist/chunk-RBLQNW26.js +0 -20
- package/dist/chunk-RTQ7NEKG.js +0 -81
- package/dist/chunk-SQXRS7BG.js +0 -4
- package/dist/chunk-SSK6LDPC.js +0 -2
- package/dist/chunk-SZHGTCPP.js +0 -7
- package/dist/chunk-T4N4P2K5.js +0 -16
- package/dist/chunk-TA3QKLLU.js +0 -2
- package/dist/chunk-TEBQMNVI.js +0 -43
- package/dist/chunk-TPFHAQ2G.js +0 -2
- package/dist/chunk-TQPCBMWT.js +0 -5
- package/dist/chunk-TQZV7KV4.js +0 -2
- package/dist/chunk-TRNAEQ6P.js +0 -3
- package/dist/chunk-TY7CRN3Z.js +0 -2
- package/dist/chunk-UHFYCMZO.js +0 -35
- package/dist/chunk-UICY4GTQ.js +0 -7
- package/dist/chunk-UVGEWT4Y.js +0 -26
- package/dist/chunk-UXW33INU.js +0 -29
- package/dist/chunk-VMPRET3I.js +0 -5
- package/dist/chunk-VNLGKHS6.js +0 -6
- package/dist/chunk-VQILFTEH.js +0 -2
- package/dist/chunk-VUPHCS7Y.js +0 -57
- package/dist/chunk-VVZSBTSU.js +0 -23
- package/dist/chunk-VZRNID6A.js +0 -2
- package/dist/chunk-W5OXRYGE.js +0 -7
- package/dist/chunk-W6STWDQI.js +0 -57
- package/dist/chunk-W7CXK74K.js +0 -2
- package/dist/chunk-WB3WYIRE.js +0 -4
- package/dist/chunk-WDNVY4E7.js +0 -20
- package/dist/chunk-WK46TNUM.js +0 -3
- package/dist/chunk-WNTFFKAX.js +0 -12
- package/dist/chunk-WOIKCX6A.js +0 -2
- package/dist/chunk-WUN6KBHV.js +0 -2
- package/dist/chunk-WYCTJDVR.js +0 -2
- package/dist/chunk-WYPL7GF7.js +0 -2
- package/dist/chunk-XDAUYDFT.js +0 -2
- package/dist/chunk-XDQMU3BT.js +0 -2
- package/dist/chunk-XFA4SSO3.js +0 -3
- package/dist/chunk-XGZEP6GR.js +0 -8
- package/dist/chunk-XPDPNWTQ.js +0 -368
- package/dist/chunk-XRYABF57.js +0 -8
- package/dist/chunk-YBGKCQIS.js +0 -2
- package/dist/chunk-YEN6CYC7.js +0 -16
- package/dist/chunk-YF5IB2LF.js +0 -2
- package/dist/chunk-YI2AWIHC.js +0 -3
- package/dist/chunk-YPWBKGFU.js +0 -2
- package/dist/chunk-YPWHBBIS.js +0 -2
- package/dist/chunk-YSH6U3L4.js +0 -3
- package/dist/chunk-YU5DZUZI.js +0 -10
- package/dist/chunk-YWO5DDRC.js +0 -16
- package/dist/chunk-Z4CDXYNQ.js +0 -2
- package/dist/chunk-ZF5KHH7C.js +0 -2
- package/dist/chunk-ZOHS7AQV.js +0 -21
- package/dist/chunk-ZTI4SBFV.js +0 -3
- package/dist/code-MI6F2TTU.js +0 -2
- package/dist/code-result-json-FXALY4HE.js +0 -2
- package/dist/command-descriptors-P34VABY5.js +0 -343
- package/dist/dataflow-4KEMJPC6.js +0 -2
- package/dist/dependence-slice-R7FPWD5M.js +0 -2
- package/dist/deps-7EMQUYUT.js +0 -2
- package/dist/direct-navigation-6YO234F2.js +0 -3
- package/dist/entry-map-KOOLR26E.js +0 -2
- package/dist/files-OPIPJIGZ.js +0 -2
- package/dist/graph-evidence-Bjyky2V4.d.ts +0 -126
- package/dist/hierarchy-QPD2CAER.js +0 -2
- package/dist/imports-M6HUXRXC.js +0 -2
- package/dist/members-I5MEFOCT.js +0 -2
- package/dist/methods-5JYGGHXA.js +0 -2
- package/dist/next-anchor-candidates-BwMczMvX.d.ts +0 -90
- package/dist/output-continuation-command-UPQAAKBP.js +0 -3
- package/dist/output-pagination-3OFL2MJV.js +0 -19
- package/dist/project-reindex-UKKQ5PLS.js +0 -3
- package/dist/queries/anchors.d.ts +0 -123
- package/dist/queries/anchors.js +0 -2
- package/dist/queries/complexity-hotspots.d.ts +0 -40
- package/dist/queries/complexity-hotspots.js +0 -2
- package/dist/queries/convergence.d.ts +0 -33
- package/dist/queries/convergence.js +0 -2
- package/dist/queries/dataflow.d.ts +0 -77
- package/dist/queries/dataflow.js +0 -2
- package/dist/queries/deep-chains.d.ts +0 -5
- package/dist/queries/deep-chains.js +0 -2
- package/dist/queries/extract-candidates.d.ts +0 -52
- package/dist/queries/extract-candidates.js +0 -2
- package/dist/queries/isolated.d.ts +0 -24
- package/dist/queries/isolated.js +0 -2
- package/dist/queries/plan-context.d.ts +0 -33
- package/dist/queries/plan-context.js +0 -2
- package/dist/queries/reference-neighborhood.d.ts +0 -4
- package/dist/queries/reference-neighborhood.js +0 -2
- package/dist/queries/reference-reachability.d.ts +0 -48
- package/dist/queries/reference-reachability.js +0 -2
- package/dist/queries/self-audit.d.ts +0 -63
- package/dist/queries/self-audit.js +0 -2
- package/dist/queries/similar-chains.d.ts +0 -48
- package/dist/queries/similar-chains.js +0 -2
- package/dist/queries/slice.d.ts +0 -4
- package/dist/queries/slice.js +0 -2
- package/dist/queries/stale-abstractions.d.ts +0 -72
- package/dist/queries/stale-abstractions.js +0 -2
- package/dist/queries/system-map.d.ts +0 -449
- package/dist/queries/system-map.js +0 -2
- package/dist/queries/trace.js +0 -2
- package/dist/queries/twin-ab.d.ts +0 -66
- package/dist/queries/twin-ab.js +0 -2
- package/dist/queries/value-flow.d.ts +0 -43
- package/dist/queries/value-flow.js +0 -2
- package/dist/queries/wrapper-candidates.d.ts +0 -34
- package/dist/queries/wrapper-candidates.js +0 -2
- package/dist/refs-PSU4JZZW.js +0 -2
- package/dist/refs-pagination-JG6CJMRC.js +0 -2
- package/dist/slice-HYRATV64.js +0 -2
- package/dist/source-snippet-_wrcgmZc.d.ts +0 -15
- package/dist/stats-OOJ74B32.js +0 -2
- package/dist/surface-VTGDYWF5.js +0 -2
- package/dist/symbol-resolution-WD5EU5JE.js +0 -2
- package/dist/system-LRQNFOR2.js +0 -2
- package/dist/trace-F4B6OLL4.js +0 -2
- package/dist/value-flow-VRPZY72V.js +0 -2
- package/skills/concrete-plan/SKILL.md +0 -8
- package/skills/concrete-plan/agents/openai.yaml +0 -4
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b}from"./chunk-2YXE77TJ.js";import"./chunk-OGFV2BUX.js";import"./chunk-LOVIZBJ4.js";import"./chunk-QXEUDXBT.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as deps,b as rdeps};
|
|
2
|
+
//# sourceMappingURL=deps-EOWFC6FD.js.map
|
|
@@ -8,6 +8,8 @@ interface ExplorationSourceLocation {
|
|
|
8
8
|
file: string;
|
|
9
9
|
line: number;
|
|
10
10
|
endLine?: number;
|
|
11
|
+
startColumn?: number;
|
|
12
|
+
endColumn?: number;
|
|
11
13
|
}
|
|
12
14
|
type ExplorationEvidenceStrength = 'exact' | 'derived' | 'candidate' | 'mixed' | 'unknown';
|
|
13
15
|
type ExplorationDisposition = 'emitted' | 'folded' | 'excluded' | 'unsupported';
|
|
@@ -253,4 +255,4 @@ interface ExplorationRouteCatalog {
|
|
|
253
255
|
coverage: ExplorationRouteCatalogCoverage;
|
|
254
256
|
}
|
|
255
257
|
|
|
256
|
-
export type { ExplorationSourceLocation as E, ProgramEdgeSemantic as P, ExplorationEvidenceStrength as a,
|
|
258
|
+
export type { ExplorationSourceLocation as E, ProgramEdgeSemantic as P, ExplorationEvidenceStrength as a, ExplorationAnchorStatus as b, ExplorationCompletion as c, ExplorationCompletionStatus as d, ExplorationDisposition as e, ExplorationDispositionCounts as f, ExplorationEvidenceSource as g, ExplorationFrontierGroup as h, ExplorationTopology as i, ExplorationTopologyAnchor as j, ExplorationTopologyCoverage as k, ExplorationTopologyEdge as l, ExplorationTopologyInput as m, ExplorationTopologyNode as n, ExplorationTopologyPath as o };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b}from"./chunk-XKIDJCIK.js";import"./chunk-QIWXRW72.js";import"./chunk-YUKYB54I.js";import"./chunk-PH52RA7D.js";import"./chunk-JEVRKFRL.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as files,b as pathMatchesGlob};
|
|
2
|
+
//# sourceMappingURL=files-K4AI3JUM.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type FrontendPairContext = 'product' | 'framework-route-pair' | 'intercepting-route-pair' | 'ui-kit-pair';
|
|
2
|
+
interface FrontendPolicyExclusion {
|
|
3
|
+
/** Stable identifier for the policy that excluded the rows. */
|
|
4
|
+
reason: string;
|
|
5
|
+
/** Reviewer-facing explanation of what was excluded and why. */
|
|
6
|
+
detail: string;
|
|
7
|
+
count: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type { FrontendPairContext as F, FrontendPolicyExclusion as a };
|
|
@@ -47,10 +47,19 @@ interface CountLocSummary {
|
|
|
47
47
|
loc: number;
|
|
48
48
|
/** Files contributing findings — feeds fix-density validation. */
|
|
49
49
|
files?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Rows a detector policy removed from the count (test scaffolding, vendored
|
|
52
|
+
* kit primitives, framework-mandated twins). Disclosed so an excluded row is
|
|
53
|
+
* never mistaken for an absent one.
|
|
54
|
+
*/
|
|
55
|
+
exclusions?: PolicyExclusionSummary[];
|
|
50
56
|
}
|
|
51
|
-
interface
|
|
52
|
-
|
|
53
|
-
|
|
57
|
+
interface PolicyExclusionSummary {
|
|
58
|
+
/** Stable identifier for the excluding policy. */
|
|
59
|
+
reason: string;
|
|
60
|
+
/** Reviewer-facing explanation of what was excluded and why. */
|
|
61
|
+
detail: string;
|
|
62
|
+
count: number;
|
|
54
63
|
}
|
|
55
64
|
interface DriftSummary {
|
|
56
65
|
count: number;
|
|
@@ -61,19 +70,13 @@ interface DriftSummary {
|
|
|
61
70
|
direct: number;
|
|
62
71
|
signal: number;
|
|
63
72
|
}
|
|
64
|
-
interface ComplexitySummary {
|
|
65
|
-
top: Array<{
|
|
66
|
-
symbol: string;
|
|
67
|
-
score: number;
|
|
68
|
-
file?: string;
|
|
69
|
-
}>;
|
|
70
|
-
extremeCount: number;
|
|
71
|
-
}
|
|
72
73
|
interface GitEvidenceSummary {
|
|
73
74
|
amplification: ChangeAmplificationSummary | null;
|
|
74
75
|
hiddenCoupling: {
|
|
75
76
|
pairCount: number;
|
|
76
77
|
scoreCount: number;
|
|
78
|
+
/** Co-change pairs policy did not count as hidden coupling (disclosed). */
|
|
79
|
+
exclusions?: PolicyExclusionSummary[];
|
|
77
80
|
top: Array<{
|
|
78
81
|
fileA: string;
|
|
79
82
|
fileB: string;
|
|
@@ -120,25 +123,15 @@ interface HealthAction {
|
|
|
120
123
|
/** Descriptor id in detectorEvidence; absent for analyses without a typed detector contract. */
|
|
121
124
|
evidenceContractId?: string;
|
|
122
125
|
}
|
|
123
|
-
/** One
|
|
124
|
-
interface
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
/** One detector policy that removed rows from a finding count, with the count it removed. */
|
|
127
|
+
interface HealthPolicyExclusion {
|
|
128
|
+
detector: string;
|
|
129
|
+
reason: string;
|
|
127
130
|
detail: string;
|
|
128
|
-
/** Risk deductions use graph/change evidence; hygiene deductions use candidate signals. */
|
|
129
|
-
kind: 'risk' | 'hygiene';
|
|
130
|
-
}
|
|
131
|
-
interface HealthPressure {
|
|
132
|
-
axis: string;
|
|
133
|
-
category: string;
|
|
134
|
-
kind: ScoreDeduction['kind'];
|
|
135
131
|
count: number;
|
|
136
|
-
threshold: number;
|
|
137
|
-
ratio: number;
|
|
138
|
-
extraPenalty: number;
|
|
139
132
|
}
|
|
140
133
|
interface HealthAxes {
|
|
141
|
-
/** LOC in indexed
|
|
134
|
+
/** LOC in indexed no-observed-reference candidates (legacy field name: deletable). */
|
|
142
135
|
deletable: {
|
|
143
136
|
loc: number;
|
|
144
137
|
symbols: number;
|
|
@@ -146,9 +139,9 @@ interface HealthAxes {
|
|
|
146
139
|
cycles: {
|
|
147
140
|
count: number;
|
|
148
141
|
};
|
|
149
|
-
/** Files touched per commit
|
|
142
|
+
/** Files touched per observed commit; a commit may contain several unrelated changes. */
|
|
150
143
|
changeAmplification: ChangeAmplificationSummary | null;
|
|
151
|
-
/** File pairs
|
|
144
|
+
/** File pairs changed in the same commits without an observed structural link; this is historical association. */
|
|
152
145
|
hiddenCoupling: {
|
|
153
146
|
pairCount: number;
|
|
154
147
|
scoreCount: number;
|
|
@@ -160,14 +153,6 @@ interface HealthAxes {
|
|
|
160
153
|
scoreWeight?: number;
|
|
161
154
|
}>;
|
|
162
155
|
} | null;
|
|
163
|
-
/** Complexity hotspots weighted by churn — complex code nobody touches costs nothing. */
|
|
164
|
-
churnWeightedComplexity: Array<{
|
|
165
|
-
symbol: string;
|
|
166
|
-
file?: string;
|
|
167
|
-
score: number;
|
|
168
|
-
changes: number;
|
|
169
|
-
weighted: number;
|
|
170
|
-
}> | null;
|
|
171
156
|
/** What fraction of findings rest on graph facts vs heuristics, and how many the user has rejected. */
|
|
172
157
|
evidenceQuality: {
|
|
173
158
|
graphFindings: number;
|
|
@@ -193,24 +178,35 @@ interface HealthValidation {
|
|
|
193
178
|
commitsScanned: number;
|
|
194
179
|
};
|
|
195
180
|
}
|
|
181
|
+
/** What a report was computed from, so two runs can be compared as the same or different input. */
|
|
182
|
+
interface HealthProvenance {
|
|
183
|
+
computedAt: string;
|
|
184
|
+
generation: {
|
|
185
|
+
/** Immutable index generation identity the report read. */
|
|
186
|
+
identity: string;
|
|
187
|
+
/** When that generation was published, when the generation store records it. */
|
|
188
|
+
publishedAt: string | null;
|
|
189
|
+
/** How that generation was produced, when the generation store records it. */
|
|
190
|
+
mode: 'incremental' | 'full' | null;
|
|
191
|
+
};
|
|
192
|
+
/** Null when the project is not a git repository. */
|
|
193
|
+
git: {
|
|
194
|
+
head: string;
|
|
195
|
+
branch: string | null;
|
|
196
|
+
dirtyPaths: number;
|
|
197
|
+
} | null;
|
|
198
|
+
}
|
|
196
199
|
interface HealthReport {
|
|
197
|
-
/** Headline = min(riskScore, hygieneScore); kept for compatibility. */
|
|
198
|
-
score: number;
|
|
199
|
-
/** Risk-oriented graph facts and change-graph signals; the composite remains experimental. */
|
|
200
|
-
riskScore: number;
|
|
201
|
-
/** Tidiness signals (candidate detectors) — real but not fix-predictive. */
|
|
202
|
-
hygieneScore: number;
|
|
203
|
-
scoreBreakdown: ScoreDeduction[];
|
|
204
200
|
overview: {
|
|
205
201
|
documents: number;
|
|
206
202
|
symbols: number;
|
|
207
203
|
indexSizeBytes: number;
|
|
208
204
|
};
|
|
205
|
+
/** Absent only on reports written by older builds. */
|
|
206
|
+
provenance?: HealthProvenance;
|
|
209
207
|
findings: {
|
|
210
208
|
deadSymbols: number;
|
|
211
209
|
deadLoc: number;
|
|
212
|
-
isolatedSymbols: number;
|
|
213
|
-
isolatedLoc: number;
|
|
214
210
|
cycles: number;
|
|
215
211
|
similarPairs: number;
|
|
216
212
|
duplicateBodyGroups: number;
|
|
@@ -225,13 +221,8 @@ interface HealthReport {
|
|
|
225
221
|
vueComposableCandidatePairs: number;
|
|
226
222
|
vueComposableCandidateScoreCount: number;
|
|
227
223
|
vueLargeViewPressureFiles: number;
|
|
228
|
-
extractionCandidates: number;
|
|
229
|
-
wrappers: number;
|
|
230
|
-
wrapperScoreCount: number;
|
|
231
224
|
passthroughs: number;
|
|
232
|
-
staleTypes: number;
|
|
233
225
|
driftedFiles: number;
|
|
234
|
-
complexityHotspotCount: number;
|
|
235
226
|
hiddenCouplingPairs: number | null;
|
|
236
227
|
hiddenCouplingScoreCount: number | null;
|
|
237
228
|
coverageContractViolations: number;
|
|
@@ -243,18 +234,19 @@ interface HealthReport {
|
|
|
243
234
|
byCategory: Record<string, number>;
|
|
244
235
|
} | null;
|
|
245
236
|
actions: HealthAction[];
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
237
|
+
/**
|
|
238
|
+
* Rows detector policies removed from the counts above (test scaffolding,
|
|
239
|
+
* vendored kit primitives, framework-mandated twins). Each row is still
|
|
240
|
+
* listed by its detector command; it is disclosed here so an excluded
|
|
241
|
+
* finding is never mistaken for an absent one.
|
|
242
|
+
*/
|
|
243
|
+
policyExclusions: HealthPolicyExclusion[];
|
|
252
244
|
/** Calibrated claim limits and recovery paths for detector evidence. */
|
|
253
245
|
detectorEvidence: DetectorEvidenceAssessment[];
|
|
254
246
|
warnings?: string[];
|
|
255
247
|
}
|
|
256
248
|
|
|
257
|
-
declare const HEALTH_PHASES: readonly ["overview", "dead", "
|
|
249
|
+
declare const HEALTH_PHASES: readonly ["overview", "dead", "cycles", "similar", "duplicate-bodies", "twin-drift", "react-component-duplicates", "react-hook-candidates", "react-large-component-pressure", "vue-component-duplicates", "vue-composable-candidates", "vue-large-view-pressure", "passthrough-candidates", "drift", "git-evidence", "suppressions", "coverage-contracts"];
|
|
258
250
|
type HealthPhaseName = (typeof HEALTH_PHASES)[number];
|
|
259
251
|
type HealthPhaseResult = {
|
|
260
252
|
phase: 'overview';
|
|
@@ -263,12 +255,10 @@ type HealthPhaseResult = {
|
|
|
263
255
|
} | {
|
|
264
256
|
phase: 'dead';
|
|
265
257
|
dead: CountLocSummary;
|
|
266
|
-
} | {
|
|
267
|
-
phase: 'isolated';
|
|
268
|
-
isolated: CountLocSummary;
|
|
269
258
|
} | {
|
|
270
259
|
phase: 'cycles';
|
|
271
260
|
realCycleCount: number;
|
|
261
|
+
cycleExclusions: PolicyExclusionSummary[];
|
|
272
262
|
} | {
|
|
273
263
|
phase: 'similar';
|
|
274
264
|
similarCount: number;
|
|
@@ -296,24 +286,12 @@ type HealthPhaseResult = {
|
|
|
296
286
|
} | {
|
|
297
287
|
phase: 'vue-large-view-pressure';
|
|
298
288
|
vueLargeViewPressure: CountLocSummary;
|
|
299
|
-
} | {
|
|
300
|
-
phase: 'extract-candidates';
|
|
301
|
-
extractCount: number;
|
|
302
|
-
} | {
|
|
303
|
-
phase: 'wrapper-candidates';
|
|
304
|
-
wrappers: CountLocSummary;
|
|
305
289
|
} | {
|
|
306
290
|
phase: 'passthrough-candidates';
|
|
307
291
|
passthroughs: CountLocSummary;
|
|
308
|
-
} | {
|
|
309
|
-
phase: 'stale-abstractions';
|
|
310
|
-
stale: StaleSummary;
|
|
311
292
|
} | {
|
|
312
293
|
phase: 'drift';
|
|
313
294
|
drift: DriftSummary;
|
|
314
|
-
} | {
|
|
315
|
-
phase: 'complexity-hotspots';
|
|
316
|
-
complexity: ComplexitySummary;
|
|
317
295
|
} | {
|
|
318
296
|
phase: 'git-evidence';
|
|
319
297
|
gitEvidence: GitEvidenceSummary | null;
|
|
@@ -338,6 +316,12 @@ declare function health(db: ScipDatabase, opts?: {
|
|
|
338
316
|
scope?: string;
|
|
339
317
|
full?: boolean;
|
|
340
318
|
}): HealthReport;
|
|
319
|
+
/**
|
|
320
|
+
* The generation and git state this run read. Two reports are comparable
|
|
321
|
+
* only when these match; the "files | symbols" header alone cannot tell a
|
|
322
|
+
* detector change from a repository change.
|
|
323
|
+
*/
|
|
324
|
+
declare function healthProvenance(db: ScipDatabase): HealthProvenance;
|
|
341
325
|
declare function healthPhase(db: ScipDatabase, phase: HealthPhaseName, opts?: {
|
|
342
326
|
scope?: string;
|
|
343
327
|
full?: boolean;
|
|
@@ -346,6 +330,6 @@ declare function healthPhases(db: ScipDatabase, phases: readonly HealthPhaseName
|
|
|
346
330
|
scope?: string;
|
|
347
331
|
full?: boolean;
|
|
348
332
|
}): HealthPhaseResult[];
|
|
349
|
-
declare function healthReportFromPhases(phaseResults: HealthPhaseResult[]): HealthReport;
|
|
333
|
+
declare function healthReportFromPhases(phaseResults: HealthPhaseResult[], db?: ScipDatabase): HealthReport;
|
|
350
334
|
|
|
351
|
-
export { HEALTH_PHASES as H, type HealthAction as a, type
|
|
335
|
+
export { HEALTH_PHASES as H, type HealthAction as a, type HealthProvenance as b, type HealthReport as c, healthPhase as d, healthProvenance as e, healthReportFromPhases as f, type HealthPhaseName as g, health as h, healthPhases as i };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b}from"./chunk-DDMC3FON.js";import"./chunk-QXEUDXBT.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as hierarchy,b as ownershipChain};
|
|
2
|
+
//# sourceMappingURL=hierarchy-6W5NDIFI.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b,c}from"./chunk-IZJ6YUKP.js";import"./chunk-S6CZA3MV.js";import"./chunk-OGFV2BUX.js";import"./chunk-65245JCM.js";import"./chunk-NJJMVD65.js";import"./chunk-WRQXLNYE.js";import"./chunk-LOVIZBJ4.js";import"./chunk-QXEUDXBT.js";import"./chunk-TRBI4UKT.js";import"./chunk-WKPV2TDZ.js";import"./chunk-F4FNK44D.js";import"./chunk-ZLADLUE6.js";import"./chunk-6FFVZZL4.js";import"./chunk-4XQ4O6IM.js";import"./chunk-BZB4QPIP.js";import"./chunk-CN5EH7O3.js";import"./chunk-T3I6NHBH.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-3JIQS44J.js";import"./chunk-O4UZSPPI.js";import"./chunk-B3PYOSCX.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-QZ7KQZRN.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{b as importedBy,a as imports,c as unusedImports};
|
|
2
|
+
//# sourceMappingURL=imports-WH365QY4.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { S as ScipDatabase } from './db-BwIVAYNB.js';
|
|
2
|
+
import { C as CalleeRow, a as CalleeEvidenceSource } from './call-graph-evidence-CUtj8V2I.js';
|
|
2
3
|
import { I as IndexedDefinition, S as SymbolMatch, a as ScipSymbol, b as ScipLocalSymbol } from './symbol-types-BIQwfoAx.js';
|
|
3
4
|
import { c as classifyFile } from './file-kind-BKCVMNUf.js';
|
|
4
|
-
import { C as CalleeRow } from './call-graph-evidence-lZa2dwQA.js';
|
|
5
5
|
export { S as ScipQueryConfig } from './config-types-B9B60MiR.js';
|
|
6
6
|
import 'better-sqlite3';
|
|
7
7
|
|
|
@@ -109,6 +109,18 @@ declare class ProjectIndex {
|
|
|
109
109
|
additive?: boolean;
|
|
110
110
|
semantic?: boolean;
|
|
111
111
|
}): Map<number, CalleeRow[]>;
|
|
112
|
+
/** The same invocation filter and evidence calibration used by the public call graph. */
|
|
113
|
+
callableCallees(definition: SymbolMatch, opts?: {
|
|
114
|
+
semantic?: boolean;
|
|
115
|
+
}): {
|
|
116
|
+
evidenceStrength: "exact" | "candidate";
|
|
117
|
+
symbol: string;
|
|
118
|
+
file: string;
|
|
119
|
+
chunkId: number;
|
|
120
|
+
source: CalleeEvidenceSource;
|
|
121
|
+
callsiteLine?: number;
|
|
122
|
+
kind?: "jsx-render";
|
|
123
|
+
}[];
|
|
112
124
|
crossFileCallerMap(definitions?: ReadonlyArray<SymbolMatch>, opts?: {
|
|
113
125
|
semantic?: boolean;
|
|
114
126
|
}): Map<number, Set<string>>;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./chunk-
|
|
1
|
+
import{a as e}from"./chunk-NLOQOBXI.js";import{a as m}from"./chunk-J2TMAIN5.js";import"./chunk-PKN354TH.js";import{b as p}from"./chunk-6LSEIIF7.js";import"./chunk-BGBBVSH4.js";import"./chunk-36SGVCGX.js";import"./chunk-AGWFSTXC.js";import"./chunk-P5XHIJHI.js";import"./chunk-73AAKPUC.js";import"./chunk-KZBJWZJB.js";import"./chunk-4WTUBQ36.js";import"./chunk-NZAXKGRL.js";import"./chunk-KK7GPALL.js";import"./chunk-YNQCGEQE.js";import"./chunk-FMRN2TRL.js";import"./chunk-DA7RPPDF.js";import"./chunk-4WCUBZU3.js";import"./chunk-E3FDPXZK.js";import"./chunk-DHEQMPLW.js";import"./chunk-KHWRRPV4.js";import"./chunk-72AD6ZRR.js";import"./chunk-YUKYB54I.js";import"./chunk-GCKCF5FL.js";import"./chunk-DVFP6PZI.js";import{b as o,d as r,e as t}from"./chunk-5D2LVK7O.js";import"./chunk-7WTPQ4NX.js";import"./chunk-FVULPZDF.js";import"./chunk-D3FDISIC.js";import"./chunk-A2IIGFMJ.js";import"./chunk-PH52RA7D.js";import"./chunk-GVWX5T43.js";import"./chunk-T6DK3ZP7.js";import"./chunk-5TNQJUR2.js";export{p as ProjectIndex,e as ScipDatabase,m as createGitignoreFilter,t as leafName,o as parseSymbol,r as shortenSymbol};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a}from"./chunk-4D6RO7G4.js";import"./chunk-QXEUDXBT.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{a as members};
|
|
2
|
+
//# sourceMappingURL=members-K3PHMF5S.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b}from"./chunk-P6ODM7BY.js";import"./chunk-TZCVNCAN.js";import"./chunk-BGBBVSH4.js";import"./chunk-7VPEEAAG.js";import"./chunk-S6CZA3MV.js";import"./chunk-65245JCM.js";import"./chunk-NJJMVD65.js";import"./chunk-H73WY2RM.js";import"./chunk-ZHMRSZFD.js";import"./chunk-ZGTYGDMF.js";import"./chunk-WRQXLNYE.js";import"./chunk-DVFP6PZI.js";import"./chunk-QIWXRW72.js";import"./chunk-LOVIZBJ4.js";import"./chunk-QXEUDXBT.js";import"./chunk-O2C4UILI.js";import"./chunk-WXU3DGPU.js";import"./chunk-YUKYB54I.js";import"./chunk-TRBI4UKT.js";import"./chunk-WKPV2TDZ.js";import"./chunk-F4FNK44D.js";import"./chunk-ZLADLUE6.js";import"./chunk-6FFVZZL4.js";import"./chunk-DHEQMPLW.js";import"./chunk-4XQ4O6IM.js";import"./chunk-BZB4QPIP.js";import"./chunk-CN5EH7O3.js";import"./chunk-T3I6NHBH.js";import"./chunk-J5FJMODQ.js";import"./chunk-WOFQ5DTB.js";import"./chunk-PH52RA7D.js";import"./chunk-7Y5T6XDP.js";import"./chunk-X6RMKHJQ.js";import"./chunk-JEVRKFRL.js";import"./chunk-QOIXNWQR.js";import"./chunk-GZKFETP5.js";import"./chunk-3JIQS44J.js";import"./chunk-O4UZSPPI.js";import"./chunk-B3PYOSCX.js";import"./chunk-HRRFKWPZ.js";import"./chunk-YULZRALL.js";import"./chunk-HGFDYOVB.js";import"./chunk-QZ7KQZRN.js";import"./chunk-TKD34PHN.js";import"./chunk-2HLAFUCY.js";import"./chunk-U5RIG3JP.js";import"./chunk-62BDNPMI.js";export{b as methods,a as resolveMethods};
|
|
2
|
+
//# sourceMappingURL=methods-E7KVMBX4.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import{A as z,B as lt,D as ht,G as E,e as _,f as A,g as I,h as R,i as N,j,q as $,s as b,u as O,x as ct,y as dt,z as pt}from"./chunk-QYUVVBMR.js";import{writeSync as Yt}from"fs";function gt(t,e,n="File"){let r=0;for(;r<e.byteLength;){let i=Yt(t,e,r,e.byteLength-r);if(i<=0)throw new Error(`${n} write made no forward progress.`);r+=i}}import{createHash as x,randomBytes as Et}from"crypto";import{writeSync as ae,chmodSync as ue,closeSync as T,fstatSync as D,lstatSync as ce,mkdirSync as Ct,openSync as Q,readSync as de,readdirSync as xt,renameSync as Tt,rmSync as X,statSync as Lt}from"fs";import{tmpdir as pe}from"os";import{dirname as le,join as L,resolve as he}from"path";import{StringDecoder as Y}from"string_decoder";import{InvalidArgumentError as yt}from"commander";var Zt=/^[A-Za-z0-9_@%+=:,./-]+$/u;function q(t,e={}){return e.omitSafeQuotes&&Zt.test(t)?t:(e.platform??process.platform)==="win32"?`"${t.replaceAll("%","%%").replaceAll('"','\\"')}"`:`'${t.replaceAll("'",`'"'"'`)}'`}import{AsyncLocalStorage as Kt}from"async_hooks";import{createHash as Un}from"crypto";import{existsSync as Bn,mkdirSync as Mn}from"fs";import{tmpdir as zn}from"os";import{isAbsolute as Vn,join as Dn,resolve as te}from"path";var ee="SCIP_QUERY_SESSION";var ne=128,ft=new Kt;function mt(t,e){let n=t.sessionEnabled===!1||t.json?void 0:se(),r={enabled:n!==void 0,reemit:t.reemit===!0,command:t.command,projectRoot:te(t.cwd),sessionIdentity:n,staged:[],stagedEvidence:[],finalized:!1};return ft.run(r,e)}function C(t){let e=ft.getStore();if(!e||e.finalized)return;e.finalized=!0;let n=e.state;if(!n){e.staged.length=0,e.stagedEvidence.length=0;return}try{if(t&&(e.staged.length>0||e.stagedEvidence.length>0)){let r=n.ledger.nextOrdinal,i=re(e.staged).map(o=>({...o,ordinal:r,command:e.command})),s=oe(e.stagedEvidence).map(o=>({...o,ordinal:r,command:e.command}));n.ledger.ranges.push(...i),n.ledger.evidence.push(...s),n.ledger.nextOrdinal+=1,n.ledger.updatedAt=new Date().toISOString(),E(n.ledgerPath,n.ledger,{spacing:2,trailingNewline:!0})}}catch{}finally{n.lock.release(),e.state=null,e.staged.length=0,e.stagedEvidence.length=0}}function re(t){let e=[...t].sort((r,i)=>r.relativePath.localeCompare(i.relativePath)||r.startLine-i.startLine||r.endLine-i.endLine),n=[];for(let r of e){let i=n[n.length-1];if(i&&i.relativePath===r.relativePath&&i.ownerSymbol===r.ownerSymbol&&i.policy===r.policy&&r.startLine<=i.endLine+1&&ie(i,r)){let s=r.startLine-i.startLine;for(let o=0;o<r.lineHashes.length;o+=1)i.lineHashes[s+o]??=r.lineHashes[o];i.endLine=Math.max(i.endLine,r.endLine)}else n.push({...r,lineHashes:[...r.lineHashes]})}return n}function ie(t,e){let n=Math.max(t.startLine,e.startLine),r=Math.min(t.endLine,e.endLine);for(let i=n;i<=r;i+=1)if(t.lineHashes[i-t.startLine]!==e.lineHashes[i-e.startLine])return!1;return!0}function oe(t){let e=new Set,n=[];for(let r of t){let i=`${r.kind}\0${r.identity}\0${r.contentHash}`;e.has(i)||(e.add(i),n.push(r))}return n}function se(){let t=process.env[ee]?.trim();if(t&&!(t.length>ne||!/^[A-Za-z0-9._:-]+$/.test(t)))return`explicit:${t}`}var Z="scip-query-output-page",K=1,ge="continue",y=256,w=1e5,U=4096,g=32e6,_t=64*1024*1024,fe=256*1024*1024,me=32,At=32768,Rt=16,ye=N*Rt,k=4096,St=_t,tt=3600*1e3,Se="scip-query-json-export",Oe=1,Nt=3;function et(){return L(pe(),`scip-query-output-pages-${typeof process.getuid=="function"?process.getuid():"user"}`)}var nt=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u,$t=/^[A-Za-z0-9_][A-Za-z0-9_-]{11}$/u,ve=/^4\.([A-Za-z0-9_-]{22})\.([0-9a-z]{1,10})$/u,be=/^([A-Za-z0-9_][A-Za-z0-9_-]{11})(?:\.([0-9a-z]{1,10}))?$/u,kt=1,we="quota.lock",Pe=2e3,Ie=5,Ot=1024*1024,Ee=new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)),V,Ce=Object.freeze({maxSnapshotBytes:_t,maxAggregateBytes:fe,maxSnapshotCount:me});function xe(t){if(!$(t))return{kind:"malformed",reason:"Output page envelope must be an object."};if(t.kind!==Z||t.schemaVersion!==K)return{kind:"malformed",reason:"Output page envelope kind or schema version is unsupported."};if(!Te(t))return{kind:"malformed",reason:"Output page envelope contains invalid common fields."};let e=Le(t.page,t.content)??_e(t.page);return e?{kind:"malformed",reason:e}:{kind:"supported",envelope:t}}function Te(t){return ct(t.producer)&&typeof t.command=="string"&&t.command.length>0&&(t.contentType==="text/plain"||t.contentType==="application/json")&&(t.agentInstruction===void 0||typeof t.agentInstruction=="string")&&typeof t.content=="string"&&$(t.page)}function Le(t,e){if(["offset","returnedCharacters","totalCharacters","omittedCharacters","remainingCharacters"].some(u=>!b(t[u]))||!O(t.outputHash))return"Output page counts or output hash are invalid.";let r=Number(t.offset),i=Number(t.returnedCharacters),s=Number(t.totalCharacters),o=Number(t.omittedCharacters),a=Number(t.remainingCharacters);return i!==e.length||o!==s-i||a!==s-r-i||a<0?"Output page character counts are inconsistent.":null}function _e(t){if(t.complete===!0){if(t.remainingCharacters!==0||t.continuation!==void 0)return"A complete output page cannot have remaining content or a continuation."}else if(t.complete===!1){if(t.remainingCharacters===0||!Ae(t.continuation))return"An incomplete output page requires a non-empty continuation."}else return"Output page complete must be a Boolean.";return null}function Ae(t){return $(t)&&typeof t.cursor=="string"&&t.cursor.length>0&&typeof t.command=="string"&&t.command.length>0}function cr(t){let e=xe(t);if(e.kind==="malformed")throw new Error(e.reason);return e.envelope}var Ut={writeStdout:t=>{process.stdout.write(t)},writeStderr:t=>{process.stderr.write(t)},stdoutIsRegularFile:()=>{try{return D(1).isFile()}catch{return!1}}};async function Re(t,e,n=Ut){return mt({command:t.command,cwd:t.cwd,argv:t.argv,json:t.json,sessionEnabled:t.sourceSession,reemit:t.reemitSource},async()=>{try{await Ne(t,e,n)}finally{C(!1)}})}async function Ne(t,e,n){let r=t.pageSize??A,i=t.snapshotRoot??et(),s=rn(t.snapshotLimits),o=$e(t);switch(ke(t,r),He(t,n)){case"json-file":await qe(t,e,n,o);return;case"json":await Ve(t,e,n);return;case"human-file":await De(t,e,o);return}let a=Ft(t.argv),u=Wt(t.invocationPrefix),c=Dt(t.command,t.cwd,u,a),d={pageSize:r,snapshotRoot:i,snapshotLimits:s,maxOutputCharacters:o,filteredArgv:a,invocationPrefix:u,invocationHash:c},l=t.cursor===void 0?void 0:vn(t.cursor,c),p=l?Be(l,t,d):await Me(t,e,d);je(t,n,d,p)}function $e(t){let e=t.maxOutputCharacters??g;if(!Number.isSafeInteger(e)||e<=0)throw new Error("Output character safety limit must be a positive integer.");return Math.min(e,g,t.agentOutput?ye:g)}function ke(t,e){if(Bt(e),t.cursor!==void 0&&t.cursor.length>U)throw new Error(`Output cursor exceeds the ${U}-character limit. Run the command again without --output-cursor.`)}function Ue(t){if(!t.json)throw new Error("--json-output requires --json.");if(t.agentOutput||t.pageSize!==void 0||t.cursor!==void 0)throw new Error("--json-output cannot be combined with --agent-output or output pagination.")}function He(t,e){if(t.jsonOutputPath!==void 0)return Ue(t),"json-file";if(t.json)return!t.agentOutput&&t.pageSize===void 0&&t.cursor===void 0?"json":void 0;if(t.cursor===void 0&&t.pageSize===void 0&&e.stdoutIsRegularFile?.()===!0)return"human-file"}function Be(t,e,n){let{invocationHash:r,pageSize:i,maxOutputCharacters:s,snapshotRoot:o,invocationPrefix:a,filteredArgv:u}=n;try{return{snapshotId:t.snapshotId,completed:Fe(t,r,i,s,o,e.onSnapshotRead)}}catch(c){let d=c instanceof Error?c.message:String(c);throw new Error(`${d} Restart with: ${Jt(a,u,i)}`,{cause:c})}}async function Me(t,e,n){let{invocationHash:r,invocationPrefix:i,filteredArgv:s,pageSize:o,maxOutputCharacters:a,snapshotRoot:u,snapshotLimits:c}=n,d=new J(r,i,t.command,t.cwd,s,o,a,Ht(t)?R:Sn(t,i),u,c,t.agentOutput?Rt:At,!t.json,H(a,t.agentOutput===!0)),l=Mt(m=>d.write(m)),p=!1;try{await e(),p=!0}finally{l(),p||d.abort()}let h;try{h=d.complete()}catch(m){throw d.abort(),m}return{snapshotId:h.snapshotId,completed:{content:h.content,offset:0,pageIndex:0,pageCount:h.pageCount,totalCharacters:h.totalCharacters,outputHash:h.outputHash}}}function Ht(t){return!t.json&&t.pageSize===void 0&&t.cursor===void 0}function je(t,e,n,{snapshotId:r,completed:i}){let{invocationPrefix:s,snapshotRoot:o}=n,a=i.offset+i.content.length,u=i.pageIndex+1>=i.pageCount;if(!u&&Ht(t)){let l=bt(r),p=f(o,l,"output");W(o,l,Lt(p).size,"saved",n.snapshotLimits);let h=Vt(i.content,1800,1800,!0),m=i.content.slice(0,h).split(`
|
|
2
|
+
`).slice(0,24).join(`
|
|
3
|
+
`).trimEnd();e.writeStdout(`Full result: ${j(p)}
|
|
4
|
+
Preview (${i.totalCharacters} characters saved):
|
|
5
|
+
${m}
|
|
6
|
+
`);return}let c=u?void 0:yn({invocationPrefix:s,nextPageIndex:i.pageIndex+1,snapshotId:bt(r)});if(ze(t,e,n,{snapshotId:r,completed:i}))return;let d=Tn(t,i,c,a);t.json?e.writeStdout(`${JSON.stringify(d)}
|
|
7
|
+
`):e.writeStdout(xn(d)),u&&r&&P(r,o)}function ze(t,e,n,{snapshotId:r,completed:i}){let s=i.pageIndex+1>=i.pageCount;return i.offset===0&&s&&t.cursor===void 0?(e.writeStdout(i.content),C(!0),r&&P(r,n.snapshotRoot),!0):!1}async function dr(t,e,n=et(),r=Ut){if(t.length>U)throw new Error(`Output cursor exceeds the ${U}-character limit.`);let i=at(t);if(!i)throw new Error("Invalid output cursor. Run the original command again.");let s=it(i.snapshotId,n);await Re({command:s.command,producerVersion:e,invocationPrefix:s.invocationPrefix,argv:[...s.argv,"--output-page-size",String(s.pageSize),"--output-cursor",t],cwd:s.cwd,json:s.argv.some(o=>o==="--json"||o.startsWith("--json=")),sourceSession:!s.argv.some(o=>o==="--no-session"),agentOutput:s.argv.some(o=>o==="--agent-output"),pageSize:s.pageSize,cursor:t,snapshotRoot:n},()=>{throw new Error("Output continuation attempted to rerun the original command.")},r)}async function qe(t,e,n,r){let i=t.jsonOutputPath;if(i===void 0||i.length===0||Buffer.byteLength(i)>k||i.includes("\0"))throw new Error(`--json-output requires a path from 1 through ${k} UTF-8 bytes.`);let s=he(t.cwd,i);if(Buffer.byteLength(s)>k)throw new Error(`The resolved --json-output path exceeds ${k} UTF-8 bytes.`);let o=new Y("utf8"),a=x("sha256"),u=0,c=0,d=v=>{if(c+=v.length,!Number.isSafeInteger(c)||c>r)throw new Error(H(r,!1))};Ct(le(s),{recursive:!0});let l=`${s}.tmp-${Et(12).toString("hex")}`,p=Q(l,"wx",384),h=!0,m=Mt(v=>{let M=u+v.length;if(!Number.isSafeInteger(M)||M>St)throw new Error(`JSON export exceeds the ${St}-byte file safety limit. Narrow the query before retrying.`);if(d(o.write(v)),p===void 0)throw new Error("JSON export writer is closed.");gt(p,v,"JSON export"),a.update(v),u=M});try{await e(),d(o.end()),m(),T(p),p=void 0,Tt(l,s),h=!1}finally{if(m(),p!==void 0)try{T(p)}catch{}h&&X(l,{force:!0})}let Xt={kind:Se,schemaVersion:Oe,producer:{name:"scip-query",version:t.producerVersion},command:t.command,path:s,bytes:u,sha256:a.digest("hex")};n.writeStdout(`${JSON.stringify(Xt)}
|
|
8
|
+
`),C(!0)}function H(t,e){let n=`Command output exceeds the ${t}-character safety limit. Narrow the query before retrying.`;return e?`${n} For the complete machine result, use --json --json-output <path> and inspect the file programmatically.`:n}function pr(t){if(!/^\d+$/u.test(t))throw new yt(`Output page size must be an integer from ${y} through ${w}.`);let e=Number(t);try{Bt(e)}catch{throw new yt(`Output page size must be an integer from ${y} through ${w}.`)}return e}function Bt(t){if(!Number.isSafeInteger(t)||t<y||t>w)throw new Error(`Output page size must be an integer from ${y} through ${w}.`)}async function Ve(t,e,n){let r=new F(I,t.maxOutputCharacters??g),i=process.stdout.write,s=!1,o=`${j(`scip-query: JSON output exceeds the ${I}-byte client-safe budget and may be truncated by the client. Do not use possibly partial client output as evidence. Read every page with: ${Jt(Wt(t.invocationPrefix),En(Ft(t.argv)),A)}`)}
|
|
9
|
+
`;process.stdout.write=((a,u,c)=>{let d=r.push(a,u);return d!==void 0&&(s||(s=!0,n.writeStderr(o)),i.call(process.stdout,d)),rt(u,c),!0});try{await e();let a=r.finish();a.crossedPageBoundary&&!s&&(s=!0,n.writeStderr(o)),a.bytes.length>0&&i.call(process.stdout,a.bytes),s&&n.writeStderr(o)}finally{process.stdout.write=i}}async function De(t,e,n){let r=process.stdout.write,i=0;process.stdout.write=((s,o,a)=>{let u=jt(s,o);if(i+=u.length,i>n)throw new Error(H(n,!1));return r.call(process.stdout,u),rt(o,a),!0});try{await e()}finally{process.stdout.write=r}C(!0)}function Mt(t){let e=process.stdout.write;return process.stdout.write=((n,r,i)=>{let s=jt(n,r);return t(s),rt(r,i),!0}),()=>{process.stdout.write=e}}function jt(t,e){return typeof t=="string"?Buffer.from(t,typeof e=="string"?e:"utf8"):Buffer.from(t)}function rt(t,e){let n=typeof t=="function"?t:e;typeof n=="function"&&n()}var F=class{constructor(e,n){this.byteLimit=e;this.maxOutputCharacters=n}byteLimit;maxOutputCharacters;decoder=new Y("utf8");chunks=[];overflowed=!1;totalCharacters=0;totalBytes=0;push(e,n){let r=typeof e=="string"?Buffer.from(e,typeof n=="string"?n:"utf8"):Buffer.from(e);if(this.totalBytes+=r.length,this.addCharacters(this.decoder.write(r)),this.overflowed)return r;if(this.chunks.push(r),this.totalBytes<=this.byteLimit)return;this.overflowed=!0;let i=Buffer.concat(this.chunks);return this.chunks.length=0,i}finish(){this.addCharacters(this.decoder.end());let e=this.totalBytes>this.byteLimit,n=Buffer.concat(this.chunks);return this.chunks.length=0,{bytes:n,crossedPageBoundary:e}}addCharacters(e){if(this.totalCharacters+=e.length,!Number.isSafeInteger(this.totalCharacters)||this.totalCharacters>this.maxOutputCharacters)throw new Error(`Command output exceeds the ${this.maxOutputCharacters}-character safety limit. Narrow the query before retrying.`)}},J=class{constructor(e,n,r,i,s,o,a,u,c,d,l,p,h=H(a,!1)){this.invocationHash=e;this.invocationPrefix=n;this.command=r;this.cwd=i;this.argv=s;this.pageSize=o;this.maxOutputCharacters=a;this.pageContentByteLimit=u;this.snapshotRoot=c;this.limits=d;this.maxPages=l;this.preferLineBoundaries=p;this.overflowMessage=h;ot(c);do this.snapshotId=Et(9).toString("base64url");while(this.snapshotId.startsWith("-"));this.temporaryPath=f(c,this.snapshotId,"tmp")}invocationHash;invocationPrefix;command;cwd;argv;pageSize;maxOutputCharacters;pageContentByteLimit;snapshotRoot;limits;maxPages;preferLineBoundaries;overflowMessage;snapshotId;temporaryPath;decoder=new Y("utf8");hash=x("sha256");pages=[];descriptor=null;pending="";firstPageContent="";totalCharacters=0;pageCharacterOffset=0;byteLength=0;reservedBytes=0;opened=!1;finished=!1;write(e){if(this.finished)throw new Error("Output snapshot writer is closed.");this.appendDecoded(this.decoder.write(e))}complete(){if(this.finished)throw new Error("Output snapshot writer is closed.");if(this.appendDecoded(this.decoder.end()),this.finished=!0,!this.opened){let i=this.pending,s=Buffer.from(i);return this.assertWithinByteLimit(s.length),this.hash.update(s),this.pending="",{content:i,totalCharacters:this.totalCharacters,outputHash:this.hash.digest("hex"),pageCount:1}}if((this.pending.length>0||this.pages.length===0)&&(this.flushPage(this.pending),this.pending=""),this.descriptor===null)throw new Error("Output snapshot writer is not open.");T(this.descriptor),this.descriptor=null;let e=this.hash.digest("hex"),n=f(this.snapshotRoot,this.snapshotId,"output"),r=f(this.snapshotRoot,this.snapshotId,"json");try{Tt(this.temporaryPath,n);let i={version:Nt,snapshotId:this.snapshotId,invocationHash:this.invocationHash,invocationPrefix:[...this.invocationPrefix],command:this.command,cwd:this.cwd,argv:[...this.argv],outputHash:e,pageSize:this.pageSize,pages:this.pages,totalCharacters:this.totalCharacters,byteLength:this.byteLength,createdAtMs:Date.now()};return E(r,i),W(this.snapshotRoot,this.snapshotId,this.byteLength,"complete",this.limits),this.reservedBytes=this.byteLength,{content:this.firstPageContent,totalCharacters:this.totalCharacters,outputHash:e,pageCount:this.pages.length,snapshotId:this.snapshotId}}catch(i){throw P(this.snapshotId,this.snapshotRoot),i}}abort(){this.descriptor!==null&&(T(this.descriptor),this.descriptor=null),this.finished=!0,P(this.snapshotId,this.snapshotRoot)}appendDecoded(e){if(e.length===0)return;let n=this.totalCharacters+e.length;if(!Number.isSafeInteger(n)||n>this.maxOutputCharacters)throw new Error(this.overflowMessage);for(this.totalCharacters=n,this.pending+=e,this.assertWithinByteLimit(this.byteLength+Buffer.byteLength(this.pending));this.pending.length>this.pageSize||Buffer.byteLength(this.pending)>this.pageContentByteLimit;){this.open();let r=Vt(this.pending,this.pageSize,this.pageContentByteLimit,this.preferLineBoundaries),i=this.pending.slice(0,r);this.pending=this.pending.slice(r),this.flushPage(i)}}open(){if(!this.opened){on(this.snapshotRoot,this.snapshotId,0,this.limits);try{this.descriptor=Q(this.temporaryPath,"wx",384),this.opened=!0}catch(e){throw an(this.snapshotRoot,this.snapshotId),e}}}flushPage(e){if(this.descriptor===null)throw new Error("Output snapshot writer is not open.");if(this.pages.length>=this.maxPages)throw new Error(`Command output requires more than ${this.maxPages} snapshot pages. Retry with a larger --output-page-size, narrow the query, or use --json --json-output <path>.`);let n=Buffer.from(e),r=this.byteLength+n.length;if(this.assertWithinByteLimit(r),r>this.reservedBytes){let o=Math.min(this.limits.maxSnapshotBytes,Math.ceil(r/Ot)*Ot);W(this.snapshotRoot,this.snapshotId,o,"active",this.limits),this.reservedBytes=o}let i=0;for(;i<n.length;){let o=ae(this.descriptor,n,i,n.length-i);if(o<=0)throw new Error("Output snapshot write made no progress.");i+=o}let s={characterOffset:this.pageCharacterOffset,characterLength:e.length,byteOffset:this.byteLength,byteLength:n.length,hash:x("sha256").update(n).digest("hex")};this.pages.length===0&&(this.firstPageContent=e),this.pages.push(s),this.hash.update(n),this.pageCharacterOffset+=e.length,this.byteLength=r}assertWithinByteLimit(e){if(!Number.isSafeInteger(e)||e>this.limits.maxSnapshotBytes)throw new Error(`Command output exceeds the ${this.limits.maxSnapshotBytes}-byte snapshot limit. Narrow the query before retrying.`)}};function Fe(t,e,n,r,i,s){ot(i);let o=it(t.snapshotId,i);Je(o,t,e,n);let a=o.pages[t.pageIndex];if(!a)throw new Error("Output cursor points past the current result.");if(o.totalCharacters>r)throw new Error(`Output snapshot exceeds the ${r}-character safety limit.`);if(Date.now()-o.createdAtMs>tt)throw P(t.snapshotId,i),new Error("Output snapshot expired before all pages were read.");let u=f(i,t.snapshotId,"output"),c=Q(u,"r");try{return{content:We(c,o,a,s),offset:a.characterOffset,pageIndex:t.pageIndex,pageCount:o.pages.length,totalCharacters:o.totalCharacters,outputHash:o.outputHash}}catch(d){throw P(t.snapshotId,i),d}finally{T(c)}}function Je(t,e,n,r){if(t.invocationHash!==n)throw new Error("This output cursor belongs to a different command, working directory, or argument set. Run again without --output-cursor.");if(t.snapshotId!==e.snapshotId||e.version===3&&(t.invocationHash!==e.invocationHash||t.outputHash!==e.outputHash))throw new Error("Output snapshot identity does not match this cursor.");if(t.pageSize!==r||e.version===3&&e.pageSize!==r)throw new Error(`Output page size changed after this cursor was issued; use ${t.pageSize}.`)}function We(t,e,n,r){let i=D(t);if(!i.isFile()||i.size!==e.byteLength)throw new Error("Output snapshot size or type changed.");let{bytes:s,bytesRead:o}=Ge(t,n,r),a=D(t);if(a.dev!==i.dev||a.ino!==i.ino||a.size!==i.size||o!==n.byteLength)throw new Error("Output snapshot changed while it was being read.");if(x("sha256").update(s).digest("hex")!==n.hash)throw new Error("Output snapshot page no longer matches its metadata.");let u=s.toString("utf8");if(u.length!==n.characterLength)throw new Error("Output snapshot page character count changed.");return u}function Ge(t,e,n){let r=Buffer.allocUnsafe(e.byteLength),i=0;for(;i<r.length;){let s=de(t,r,i,r.length-i,e.byteOffset+i);if(s===0)break;i+=s,n?.(s)}return{bytes:r,bytesRead:i}}function it(t,e){if(!S(t))throw new Error("Output snapshot identifier is invalid.");let n;try{n=JSON.parse(_(f(e,t,"json"),"output snapshot metadata"))}catch(r){throw new Error("Output snapshot is unavailable.",{cause:r})}if(!Qe(n))throw new Error("Output snapshot metadata is invalid.");return n}function Qe(t){if(!t||typeof t!="object")return!1;let e=t;return e.version===Nt&&Xe(e)&&Ze(e)&&b(e.createdAtMs)}function vt(t,e){return typeof t=="string"&&t.length>0&&t.length<=e}function Xe(t){return typeof t.snapshotId=="string"&&S(t.snapshotId)&&O(t.invocationHash)&&Gt(t.invocationPrefix)&&vt(t.command,256)&&vt(t.cwd,8192)&&Cn(t.argv)&&Dt(t.command,t.cwd,t.invocationPrefix,t.argv)===t.invocationHash}function Ye(t){return Array.isArray(t)&&t.length>1&&t.length<=At&&t.every(Ke)&&nn(t)}function Ze(t){return O(t.outputHash)&&b(t.pageSize)&&t.pageSize>=y&&t.pageSize<=w&&Ye(t.pages)&&b(t.totalCharacters)&&t.pages.reduce((e,n)=>e+n.characterLength,0)===t.totalCharacters&&b(t.byteLength)&&t.pages.reduce((e,n)=>e+n.byteLength,0)===t.byteLength}function Ke(t){if(!t||typeof t!="object")return!1;let e=t;return tn(e)&&en(e)&&O(e.hash)}function tn(t){return Number.isSafeInteger(t.characterOffset)&&(t.characterOffset??-1)>=0&&Number.isSafeInteger(t.characterLength)&&(t.characterLength??0)>0}function en(t){return Number.isSafeInteger(t.byteOffset)&&(t.byteOffset??-1)>=0&&Number.isSafeInteger(t.byteLength)&&(t.byteLength??0)>0}function nn(t){let e=0,n=0;for(let r of t){if(r.characterOffset!==e||r.byteOffset!==n)return!1;e+=r.characterLength,n+=r.byteLength}return!0}function ot(t){Ct(t,{recursive:!0,mode:448});let e=ce(t);if(!e.isDirectory()||e.isSymbolicLink())throw new Error(`Output snapshot root is not a private directory: ${t}`);if(typeof process.getuid=="function"&&e.uid!==process.getuid())throw new Error(`Output snapshot root is not owned by the current user: ${t}`);process.platform!=="win32"&&ue(t,448)}function rn(t){let e={...Ce,...t};for(let[n,r]of Object.entries(e))if(!Number.isSafeInteger(r)||r<=0)throw new Error(`Output snapshot ${n} must be a positive integer.`);if(e.maxSnapshotBytes>e.maxAggregateBytes)throw new Error("Output snapshot maxSnapshotBytes cannot exceed maxAggregateBytes.");return e}function on(t,e,n,r){B(t,()=>{ln(t),zt(t,e,n,"active",r)})}function W(t,e,n,r,i){if(!Number.isSafeInteger(n)||n<0||n>i.maxSnapshotBytes)throw new Error(`Command output exceeds the ${i.maxSnapshotBytes}-byte snapshot limit.`);B(t,()=>{zt(t,e,n,r,i)})}function sn(t,e,n,r,i){for(let s of t.filter(o=>o.state==="saved"&&o.snapshotId!==n).sort((o,a)=>o.updatedAtMs-a.updatedAtMs)){let o=t.filter(a=>a.snapshotId!==n);if(o.length+1<=i.maxSnapshotCount&&o.reduce((a,u)=>a+u.reservedBytes,r)<=i.maxAggregateBytes)break;st(s.snapshotId,e),t.splice(t.indexOf(s),1)}}function zt(t,e,n,r,i){if(!Number.isSafeInteger(n)||n<0||n>i.maxSnapshotBytes)throw new Error(`Command output exceeds the ${i.maxSnapshotBytes}-byte snapshot limit.`);let s=un(t);sn(s,t,e,n,i);let o=s.find(l=>l.snapshotId===e),a=s.reduce((l,p)=>l+p.reservedBytes,0)-(o?.reservedBytes??0)+n,u=s.length+(o?0:1);if(u>i.maxSnapshotCount||a>i.maxAggregateBytes)throw new Error(`Output snapshot capacity is full (${u}/${i.maxSnapshotCount} snapshots, ${a}/${i.maxAggregateBytes} bytes). Redirect output to a file, narrow the query, or finish an explicit pagination sequence before retrying.`);let c=Date.now(),d={version:kt,snapshotId:e,pid:process.pid,...G()?{processIdentity:G()}:{},reservedBytes:n,state:r,createdAtMs:o?.createdAtMs??c,updatedAtMs:c};E(f(t,e,"reserve"),d)}function an(t,e){B(t,()=>{X(f(t,e,"reserve"),{force:!0})})}function un(t){let e=[];for(let n of xt(t,{withFileTypes:!0})){if(!n.isFile()||!n.name.endsWith(".reserve"))continue;let r=n.name.slice(0,-8);if(S(r))try{let i=JSON.parse(_(L(t,n.name),"output snapshot reservation"));if(!qt(i)||i.snapshotId!==r)throw new Error("reservation identity is invalid");e.push(i)}catch(i){throw new Error(`Output snapshot reservation ${n.name} is invalid; retry after its owning process or snapshot expires.`,{cause:i})}}return e}function qt(t){if(!t||typeof t!="object")return!1;let e=t;return cn(e)&&dn(e)&&pn(e)}function cn(t){return t.version===kt&&typeof t.snapshotId=="string"&&S(t.snapshotId)}function dn(t){return Number.isSafeInteger(t.pid)&&(t.pid??0)>0&&(t.processIdentity===void 0||dt(t.processIdentity)!==null&&t.processIdentity.pid===t.pid)}function pn(t){return Number.isSafeInteger(t.reservedBytes)&&(t.reservedBytes??-1)>=0&&(t.state==="active"||t.state==="complete"||t.state==="saved")&&Number.isSafeInteger(t.createdAtMs)&&Number.isSafeInteger(t.updatedAtMs)}function ln(t){let e=Date.now();for(let n of xt(t,{withFileTypes:!0})){if(!n.isFile()||!n.name.endsWith(".reserve"))continue;let r=n.name.slice(0,-8);if(!S(r))continue;let i=gn(L(t,n.name)),s=mn(f(t,r,"json"));hn(i,s,e)||st(r,t)}}function hn(t,e,n){let r=fn(t),i=t?n-t.updatedAtMs>tt:!1;return r||e&&!i?!0:!e&&t!==null&&!i&&t.state==="complete"}function gn(t){try{let e=JSON.parse(_(t,"output snapshot reservation"));return qt(e)?e:null}catch{return null}}function fn(t){return t?.state==="active"&<(t.pid)&&(t.processIdentity===void 0||(()=>{let e=z(t.pid);return e!==null&&pt(t.processIdentity,e)})())}function mn(t){try{return Lt(t),!0}catch{return!1}}function B(t,e){ot(t);let n=L(t,we),r=Date.now()+Pe;for(;;){let i=ht(n,{kind:"output-snapshot-quota",processIdentity:G()});if(i.kind==="acquired")try{return e()}finally{i.lock.release()}if(Date.now()>=r)throw new Error("Output snapshot quota is busy. Retry the command.");Atomics.wait(Ee,0,0,Ie)}}function G(){return V===void 0&&(V=z(process.pid)),V}function P(t,e){S(t)&&B(e,()=>st(t,e))}function st(t,e){for(let n of["json","output","tmp","reserve"])X(f(e,t,n),{force:!0})}function f(t,e,n){if(!S(e))throw new Error("Output snapshot identifier is invalid.");return L(t,`${e}.${n}`)}function bt(t){if(!t)throw new Error("Incomplete output did not create a resumable snapshot.");return t}function wt(t){return t>=55296&&t<=56319}function Vt(t,e,n,r){let i=Math.min(t.length,e);if(wt(t.charCodeAt(i-1))&&(i-=1),Buffer.byteLength(t.slice(0,i))>n){let s=0,o=i;for(;s<o;){let a=Math.ceil((s+o)/2);Buffer.byteLength(t.slice(0,a))<=n?s=a:o=a-1}i=s,wt(t.charCodeAt(i-1))&&(i-=1)}if(i<=0)throw new Error("Output page byte limit cannot contain one UTF-8 character.");if(r){let s=t.lastIndexOf(`
|
|
10
|
+
`,i-1);if(s>=0)return s+1}return i}function yn(t){let e=On({pageIndex:t.nextPageIndex,snapshotId:t.snapshotId});return{cursor:e,command:ut(t.invocationPrefix,e)}}function Sn(t,e){let n="c".repeat(64),r={cursor:n,command:ut(e,n)};if(!t.json){let o="9".repeat(String(g).length),a=`[scip-query output page: characters ${o}-${o} of ${o}]
|
|
11
|
+
|
|
12
|
+
[Incomplete: ${o} characters remain.]
|
|
13
|
+
Continue exactly:
|
|
14
|
+
${r.command}
|
|
15
|
+
`;return Pt(R,Buffer.byteLength(a),1)}let i={kind:Z,schemaVersion:K,producer:{name:"scip-query",version:t.producerVersion},command:t.command,contentType:"application/json",agentInstruction:"INCOMPLETE EVIDENCE: do not draw conclusions or report completion from this partial page. Run page.continuation.command exactly, then repeat until page.complete is true.",page:{offset:g,returnedCharacters:g,totalCharacters:g,omittedCharacters:g,remainingCharacters:g,complete:!1,outputHash:"f".repeat(64),continuation:r},content:""},s=Buffer.byteLength(`${JSON.stringify(i)}
|
|
16
|
+
`);return Pt(N,s,2)}function Pt(t,e,n){let r=Math.floor((I-e)/n);if(r<y)throw new Error(`The command invocation leaves fewer than ${y} bytes for client-safe output content. Use a shorter executable path.`);return Math.min(t,r)}function On(t){return $t.test(t.snapshotId)?t.pageIndex===1?t.snapshotId:`${t.snapshotId}.${t.pageIndex.toString(36)}`:`4.${Pn(t.snapshotId)}.${t.pageIndex.toString(36)}`}function vn(t,e){let n=at(t);if(!n)throw new Error("Invalid output cursor. Run the command again without --output-cursor.");if(n.version===3&&n.invocationHash!==e)throw new Error("This output cursor belongs to a different command, working directory, or argument set. Run again without --output-cursor.");return n}function at(t){let e=be.exec(t);if(e){let r=e[2]??"1",i=Number.parseInt(r,36);return It(i,r)?{version:4,pageIndex:i,snapshotId:e[1]}:null}let n=ve.exec(t);if(n){let r=In(n[1]),i=Number.parseInt(n[2],36);return r&&It(i,n[2])?{version:4,pageIndex:i,snapshotId:r}:null}try{let r=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));return bn(r)?r:null}catch{return null}}function lr(t,e=et()){let n=at(t);if(n)try{let r=it(n.snapshotId,e);if(r.snapshotId!==n.snapshotId||n.version===3&&(r.invocationHash!==n.invocationHash||r.outputHash!==n.outputHash||r.pageSize!==n.pageSize)||Date.now()-r.createdAtMs>tt||!r.pages[n.pageIndex])return;let i=r.pages[n.pageIndex];return{snapshotId:r.snapshotId,pageIndex:n.pageIndex,command:r.command,cwd:r.cwd,continuationCommand:ut(r.invocationPrefix,t),remainingCharacters:r.totalCharacters-i.characterOffset,totalCharacters:r.totalCharacters,outputHash:r.outputHash,createdAtMs:r.createdAtMs}}catch{return}}function bn(t){if(!t||typeof t!="object")return!1;let e=t;return e.version===3&&O(e.invocationHash)&&wn(e)&&O(e.outputHash)&&typeof e.snapshotId=="string"&&S(e.snapshotId)}function wn(t){return Number.isSafeInteger(t.pageIndex)&&(t.pageIndex??-1)>=1&&Number.isSafeInteger(t.pageSize)&&(t.pageSize??0)>=y&&(t.pageSize??0)<=w}function Pn(t){if(!nt.test(t))throw new Error("Output snapshot identifier is invalid.");return Buffer.from(t.replaceAll("-",""),"hex").toString("base64url")}function In(t){let e=Buffer.from(t,"base64url");if(e.length!==16)return null;let n=e.toString("hex"),r=`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`;return nt.test(r)?r:null}function S(t){return typeof t=="string"&&($t.test(t)||nt.test(t))}function Dt(t,e,n,r){return x("sha256").update(JSON.stringify({command:t,cwd:e,invocationPrefix:n,argv:r})).digest("hex")}function Ft(t){let e=[];for(let n=0;n<t.length;n+=1){let r=t[n];if(r==="--output-page-size"||r==="--output-cursor"){n+=1;continue}r.startsWith("--output-page-size=")||r.startsWith("--output-cursor=")||e.push(r)}return e}function En(t){return t.filter(e=>e!=="--raw-json"&&e!=="--raw-json=true")}function Jt(t,e,n){return Qt([...t,...e,"--output-page-size",String(n)])}function ut(t,e){return Qt([...t,ge,e])}function Wt(t){let e=t===void 0?["scip-query"]:[...t];if(!Gt(e))throw new Error("Output pagination invocation prefix must contain one to sixteen non-empty shell arguments.");return e}function Gt(t){return Array.isArray(t)&&t.length>0&&t.length<=16&&t.every(e=>typeof e=="string"&&e.length>0&&e.length<=2048&&!e.includes("\0")&&!e.includes("\r")&&!e.includes(`
|
|
17
|
+
`))}function Cn(t){return Array.isArray(t)&&t.length>0&&t.length<=256&&t.every(e=>typeof e=="string"&&e.length<=8192&&!e.includes("\0")&&!e.includes("\r")&&!e.includes(`
|
|
18
|
+
`))}function Qt(t){return t.map(e=>q(e,{omitSafeQuotes:!0})).join(" ")}function xn(t){let e=t.page.continuation,n=Math.max(t.page.offset,t.page.offset+t.page.returnedCharacters-1),r=`[scip-query output page: characters ${t.page.offset}-${n} of ${t.page.totalCharacters}]
|
|
19
|
+
`,i=e?`
|
|
20
|
+
[Incomplete: ${t.page.remainingCharacters} characters remain.]
|
|
21
|
+
Continue exactly:
|
|
22
|
+
${e.command}
|
|
23
|
+
`:"";return`${r}${t.content}${i}`}function Tn(t,e,n,r){let i={offset:e.offset,returnedCharacters:e.content.length,totalCharacters:e.totalCharacters,omittedCharacters:e.totalCharacters-e.content.length,remainingCharacters:e.totalCharacters-r};return{kind:Z,schemaVersion:K,producer:{name:"scip-query",version:t.producerVersion},command:t.command,contentType:t.json?"application/json":"text/plain",agentInstruction:n?"INCOMPLETE EVIDENCE: do not draw conclusions or report completion from this partial page. Run page.continuation.command exactly, then repeat until page.complete is true.":"OUTPUT COMPLETE: all rendered characters have been retrieved. Evaluate the command result's own coverage separately.",page:n?{...i,complete:!1,outputHash:e.outputHash,continuation:n}:{...i,complete:!0,outputHash:e.outputHash},content:e.content}}function It(t,e){return Number.isSafeInteger(t)&&t>=1&&t.toString(36)===e}export{I as CLIENT_SAFE_OUTPUT_BYTES,Se as CLI_JSON_EXPORT_RECEIPT_KIND,Oe as CLI_JSON_EXPORT_RECEIPT_SCHEMA_VERSION,ge as CLI_OUTPUT_CONTINUATION_COMMAND,Z as CLI_OUTPUT_PAGE_KIND,K as CLI_OUTPUT_PAGE_SCHEMA_VERSION,A as DEFAULT_OUTPUT_PAGE_SIZE,R as HUMAN_OUTPUT_PAGE_CONTENT_BYTES,N as JSON_OUTPUT_PAGE_CONTENT_BYTES,ye as MAX_AGENT_OUTPUT_CHARACTERS,Rt as MAX_AGENT_OUTPUT_PAGES,St as MAX_JSON_OUTPUT_FILE_BYTES,k as MAX_JSON_OUTPUT_PATH_LENGTH,U as MAX_OUTPUT_CURSOR_LENGTH,w as MAX_OUTPUT_PAGE_SIZE,fe as MAX_OUTPUT_SNAPSHOT_AGGREGATE_BYTES,_t as MAX_OUTPUT_SNAPSHOT_BYTES,me as MAX_OUTPUT_SNAPSHOT_COUNT,At as MAX_OUTPUT_SNAPSHOT_PAGES,g as MAX_TRACKED_OUTPUT_CHARACTERS,y as MIN_OUTPUT_PAGE_SIZE,tt as OUTPUT_SNAPSHOT_TTL_MS,dr as continueCliOutput,xe as decodeCliOutputPageEnvelope,lr as inspectPendingCliOutputCursor,pr as parseOutputPageSize,cr as requireCliOutputPageEnvelope,Re as runWithCliOutputPagination};
|
|
24
|
+
//# sourceMappingURL=output-pagination-UZJ5ACIX.js.map
|
package/dist/postinstall.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import"./chunk-
|
|
2
|
+
import"./chunk-VX2O4RIS.js";import"./chunk-F4FNK44D.js";import"./chunk-YTAP5Y2G.js";import"./chunk-BL6XJKTA.js";import"./chunk-B3PYOSCX.js";import"./chunk-QZ7KQZRN.js";import"./chunk-2HLAFUCY.js";import"./chunk-62BDNPMI.js";import{existsSync as i,mkdirSync as e,symlinkSync as r,readlinkSync as l,unlinkSync as o,readdirSync as c}from"fs";import{join as a,dirname as p,resolve as d,relative as g,isAbsolute as f}from"path";import{homedir as S,platform as s}from"os";import{fileURLToPath as h}from"url";var $=s()==="win32";function n(){console.log("scip-query installed (Node.js 24 LTS recommended; minimum Node.js 22) -- run 'scip-query setup' in a repo to install skills and build the index.")}n();
|
|
3
3
|
//# sourceMappingURL=postinstall.js.map
|
package/dist/queries/affected.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b}from"../chunk-
|
|
1
|
+
import{a,b}from"../chunk-ZHSP366W.js";import"../chunk-36SGVCGX.js";import"../chunk-AGWFSTXC.js";import"../chunk-P5XHIJHI.js";import"../chunk-73AAKPUC.js";import"../chunk-KZBJWZJB.js";import"../chunk-4WTUBQ36.js";import"../chunk-NZAXKGRL.js";import"../chunk-KK7GPALL.js";import"../chunk-YNQCGEQE.js";import"../chunk-FMRN2TRL.js";import"../chunk-DA7RPPDF.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as affected,b as possibleImpactClosure};
|
|
2
2
|
//# sourceMappingURL=affected.js.map
|
|
@@ -26,8 +26,7 @@ interface ArchitectureBoundaryEdge {
|
|
|
26
26
|
examples: ArchitectureFileEdge[];
|
|
27
27
|
/**
|
|
28
28
|
* True when the entire boundary dependency rests on a single import. Not a
|
|
29
|
-
* violation
|
|
30
|
-
* and therefore cheap to remove if it was never intended.
|
|
29
|
+
* violation. Import count alone does not establish responsibility or removal cost.
|
|
31
30
|
*/
|
|
32
31
|
fragile: boolean;
|
|
33
32
|
}
|
|
@@ -47,6 +46,8 @@ interface ArchitectureReciprocalPair {
|
|
|
47
46
|
reverse: ArchitectureBoundaryEdge;
|
|
48
47
|
}
|
|
49
48
|
interface ArchitectureCycle {
|
|
49
|
+
fileCycleMembers?: string[];
|
|
50
|
+
origin?: 'contains-file-cycle' | 'grouping-only';
|
|
50
51
|
boundaries: string[];
|
|
51
52
|
internalEdges: ArchitectureBoundaryEdge[];
|
|
52
53
|
/** Least-broad internal edge(s), useful as inspection points rather than automatic repairs. */
|
|
@@ -54,6 +55,8 @@ interface ArchitectureCycle {
|
|
|
54
55
|
violatesPolicy: boolean;
|
|
55
56
|
}
|
|
56
57
|
interface ArchitectureCoverage {
|
|
58
|
+
scope?: string;
|
|
59
|
+
limitations?: string[];
|
|
57
60
|
totalFiles: number;
|
|
58
61
|
mappedFiles: number;
|
|
59
62
|
unmappedFiles: string[];
|
|
@@ -99,19 +102,26 @@ interface ArchitectureCoarseBoundary {
|
|
|
99
102
|
violatesPolicy: boolean;
|
|
100
103
|
subUnits: string[];
|
|
101
104
|
internalEdges: ArchitectureSubUnitEdge[];
|
|
102
|
-
/**
|
|
105
|
+
/** Internal edges with the fewest distinct file dependencies; cost is not measured. */
|
|
103
106
|
narrowestEdges: ArchitectureSubUnitEdge[];
|
|
104
107
|
}
|
|
105
108
|
interface ArchitectureReport {
|
|
109
|
+
dependencyRoles?: {
|
|
110
|
+
excludedTestEdges: number;
|
|
111
|
+
basis: 'production-imports-including-types';
|
|
112
|
+
cycleMeaning: string;
|
|
113
|
+
};
|
|
106
114
|
configured: boolean;
|
|
107
115
|
boundaries: ArchitectureBoundarySummary[];
|
|
108
116
|
edges: ArchitectureBoundaryEdge[];
|
|
109
117
|
forbiddenEdges: ArchitectureBoundaryEdge[];
|
|
118
|
+
testEdges?: ArchitectureBoundaryEdge[];
|
|
119
|
+
testForbiddenEdges?: ArchitectureBoundaryEdge[];
|
|
110
120
|
reciprocalPairs: ArchitectureReciprocalPair[];
|
|
111
121
|
cycles: ArchitectureCycle[];
|
|
112
122
|
/** Boundaries hiding an internal cycle that the boundary graph cannot express. */
|
|
113
123
|
coarseBoundaries: ArchitectureCoarseBoundary[];
|
|
114
|
-
/** Declared allowances with no observed edge
|
|
124
|
+
/** Declared allowances with no observed edge from a boundary with observed source files. */
|
|
115
125
|
staleAllowances: ArchitectureStaleAllowance[];
|
|
116
126
|
/** Boundaries over a configured fan-out or file-count limit. */
|
|
117
127
|
boundaryLimits: ArchitectureBoundaryLimit[];
|
|
@@ -131,6 +141,7 @@ declare const ARCHITECTURE_BASELINE_PREFIX = "architecture:";
|
|
|
131
141
|
declare function analyzeArchitectureGraph(fileGraph: ReadonlyMap<string, ReadonlySet<string>>, indexedFiles: readonly string[], config?: ArchitectureConfig, opts?: {
|
|
132
142
|
isModuleHierarchyFile?: (file: string) => boolean;
|
|
133
143
|
testBoundaryViolations?: TestBoundaryViolation[];
|
|
144
|
+
scope?: string;
|
|
134
145
|
}): ArchitectureReport;
|
|
135
146
|
/** Build and analyze the current project's import dependency graph. */
|
|
136
147
|
declare function architecture(db: ScipDatabase, opts?: {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e as a,f as b,g as c,h as d,i as e,j as f}from"../chunk-ETOIKRHO.js";import"../chunk-SV2LEFVM.js";import"../chunk-HXENDJC6.js";import"../chunk-2IWUT6CJ.js";import"../chunk-4WCUBZU3.js";import"../chunk-E3FDPXZK.js";import"../chunk-DHEQMPLW.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as ARCHITECTURE_BASELINE_PREFIX,b as analyzeArchitectureGraph,c as architecture,d as architectureFindingIdentities,f as detectCoarseBoundaries,e as hasEnforceableArchitecturePolicy};
|
|
2
2
|
//# sourceMappingURL=architecture.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b}from"../chunk-
|
|
1
|
+
import{a,b}from"../chunk-WS4C6TCK.js";import"../chunk-BOJ5SVE2.js";import"../chunk-6LSEIIF7.js";import"../chunk-BGBBVSH4.js";import"../chunk-36SGVCGX.js";import"../chunk-AGWFSTXC.js";import"../chunk-P5XHIJHI.js";import"../chunk-73AAKPUC.js";import"../chunk-KZBJWZJB.js";import"../chunk-4WTUBQ36.js";import"../chunk-NZAXKGRL.js";import"../chunk-KK7GPALL.js";import"../chunk-YNQCGEQE.js";import"../chunk-FMRN2TRL.js";import"../chunk-DA7RPPDF.js";import"../chunk-4WCUBZU3.js";import"../chunk-E3FDPXZK.js";import"../chunk-DHEQMPLW.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as bottlenecks,b as coordinationHubs};
|
|
2
2
|
//# sourceMappingURL=bottlenecks.js.map
|
package/dist/queries/by-kind.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b}from"../chunk-
|
|
1
|
+
import{a,b}from"../chunk-Z33WQG4Q.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as byKind,b as kindCounts};
|
|
2
2
|
//# sourceMappingURL=by-kind.js.map
|
|
@@ -6,9 +6,11 @@ interface CallGraphEvidenceRow {
|
|
|
6
6
|
symbol: string;
|
|
7
7
|
shortName: string;
|
|
8
8
|
file: string;
|
|
9
|
-
relationship: 'resolved-call' | 'reference-candidate' | 'chunk-candidate';
|
|
9
|
+
relationship: 'resolved-call' | 'source-call-candidate' | 'reference-candidate' | 'chunk-candidate';
|
|
10
10
|
evidenceStrength: 'exact' | 'candidate';
|
|
11
11
|
evidenceSource: string;
|
|
12
|
+
/** `render` when the edge is a rendered component element (`<Child />`) rather than a call expression. */
|
|
13
|
+
interaction?: 'render';
|
|
12
14
|
}
|
|
13
15
|
interface CallGraphResult {
|
|
14
16
|
symbol: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-F4LUHJTF.js";import"../chunk-BOJ5SVE2.js";import"../chunk-BGBBVSH4.js";import"../chunk-36SGVCGX.js";import"../chunk-AGWFSTXC.js";import"../chunk-P5XHIJHI.js";import"../chunk-73AAKPUC.js";import"../chunk-KZBJWZJB.js";import"../chunk-4WTUBQ36.js";import"../chunk-NZAXKGRL.js";import"../chunk-KK7GPALL.js";import"../chunk-YNQCGEQE.js";import"../chunk-FMRN2TRL.js";import"../chunk-DA7RPPDF.js";import"../chunk-KHWRRPV4.js";import"../chunk-72AD6ZRR.js";import"../chunk-YUKYB54I.js";import"../chunk-GCKCF5FL.js";import"../chunk-DVFP6PZI.js";import"../chunk-5D2LVK7O.js";import"../chunk-7WTPQ4NX.js";import"../chunk-FVULPZDF.js";import"../chunk-D3FDISIC.js";import"../chunk-A2IIGFMJ.js";import"../chunk-PH52RA7D.js";import"../chunk-GVWX5T43.js";import"../chunk-T6DK3ZP7.js";import"../chunk-5TNQJUR2.js";export{a as callGraph};
|
|
2
2
|
//# sourceMappingURL=call-graph.js.map
|
|
@@ -31,6 +31,7 @@ interface ChangeSurfaceEntry {
|
|
|
31
31
|
interface ChangeSurfaceResult {
|
|
32
32
|
file: string;
|
|
33
33
|
symbols: ChangeSurfaceEntry[];
|
|
34
|
+
/** Distinct consumer files across all selected symbols, not a sum of per-symbol counts. */
|
|
34
35
|
totalExternalConsumers: number;
|
|
35
36
|
fileRisk?: FileChangeRiskMetadata;
|
|
36
37
|
}
|