agentic-qe 3.15.4 → 3.15.6
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/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
- package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +191 -0
- package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
- package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/bridge/captured-experience-bridge.js +7 -9
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-MHJBRXMK.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
- package/dist/cli/chunks/{agent-handler-G64SD7J2.js → agent-handler-KAMYBU3S.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-G4UXFPKH.js → agent-memory-branch-2CAW3KUM.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
- package/dist/cli/chunks/{arena-63M3M6EW.js → arena-4OFLJ3R2.js} +2 -2
- package/dist/cli/chunks/{arena-QJMKYPHS.js → arena-QCCVIOAH.js} +4 -4
- package/dist/cli/chunks/{audit-UDFVTWSX.js → audit-RBDQJQJB.js} +3 -3
- package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-JLX2G56I.js → better-sqlite3-5JRACCDQ.js} +2 -2
- package/dist/cli/chunks/{brain-handler-PWF32LLW.js → brain-handler-W4QIIRT4.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-PB7QWXDP.js → branch-enumerator-IBNGI572.js} +2 -2
- package/dist/cli/chunks/{browser-CYNV2F3U.js → browser-GMSCVAOI.js} +2 -2
- package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
- package/dist/cli/chunks/{chunk-S5D3HCGN.js → chunk-22OZIJAD.js} +2 -2
- package/dist/cli/chunks/{chunk-NBMQOP2R.js → chunk-24ZSGYC6.js} +1 -1
- package/dist/cli/chunks/{chunk-HFSBONCS.js → chunk-2CIDFR2H.js} +3 -3
- package/dist/cli/chunks/{chunk-A4OPQJ4A.js → chunk-2IWPJUVV.js} +5 -5
- package/dist/cli/chunks/{chunk-RI4JPBZD.js → chunk-2ZTWPMTK.js} +2 -2
- package/dist/cli/chunks/{chunk-ZURYZEHX.js → chunk-34MDMFET.js} +2 -2
- package/dist/cli/chunks/chunk-3DJNKNBR.js +742 -0
- package/dist/cli/chunks/{chunk-GJVRQBLI.js → chunk-3NJ7O3OH.js} +2 -2
- package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
- package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
- package/dist/cli/chunks/{chunk-SCL2OYN7.js → chunk-47Q7JL3V.js} +2 -2
- package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
- package/dist/cli/chunks/{chunk-3ZIVBTX6.js → chunk-4KOVHQXK.js} +2 -2
- package/dist/cli/chunks/{chunk-BBKLVHDQ.js → chunk-4POOJYXA.js} +1 -1
- package/dist/cli/chunks/{chunk-DAYMT7TH.js → chunk-5DH5QI7G.js} +26 -26
- package/dist/cli/chunks/{chunk-2534PXIV.js → chunk-5GIJU2ZY.js} +2 -2
- package/dist/cli/chunks/{chunk-MBV57LKC.js → chunk-5HAPS6VD.js} +2 -2
- package/dist/cli/chunks/{chunk-NIJMLEAX.js → chunk-5LST62QR.js} +2 -2
- package/dist/cli/chunks/{chunk-33IUCP34.js → chunk-5MT7DMD7.js} +2 -2
- package/dist/cli/chunks/{chunk-LRTF5RMG.js → chunk-5NC7QEJ6.js} +4 -4
- package/dist/cli/chunks/{chunk-SJB4KMZS.js → chunk-5UPIL62W.js} +3 -3
- package/dist/cli/chunks/{chunk-76PRW2KY.js → chunk-5VUIXDY2.js} +2 -2
- package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
- package/dist/cli/chunks/{chunk-J3RNVHDH.js → chunk-624QRKQX.js} +1 -1
- package/dist/cli/chunks/{chunk-N6CRIUTO.js → chunk-66NW3ZB4.js} +2 -2
- package/dist/cli/chunks/{chunk-PCWZCXBD.js → chunk-6HWARQWV.js} +2 -2
- package/dist/cli/chunks/{chunk-VAXQUD5G.js → chunk-6MXAJBEA.js} +1 -1
- package/dist/cli/chunks/{chunk-LOLAEDZD.js → chunk-6R3FBFCJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ASKPTGUU.js → chunk-6RDVY26I.js} +2 -2
- package/dist/cli/chunks/{chunk-35A22AUL.js → chunk-6T6AHVLF.js} +1 -1
- package/dist/cli/chunks/{chunk-IKWAPHJA.js → chunk-6WOZUSSN.js} +2 -2
- package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
- package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
- package/dist/cli/chunks/{chunk-5H7MR6HP.js → chunk-7SAMMQVS.js} +1 -1
- package/dist/cli/chunks/{chunk-B7J3O2WM.js → chunk-7TJZDRDU.js} +1 -1
- package/dist/cli/chunks/{chunk-OFQDM73J.js → chunk-7TVIX4WL.js} +2 -2
- package/dist/cli/chunks/{chunk-SZWXUG36.js → chunk-7VTKR44N.js} +2 -2
- package/dist/cli/chunks/{chunk-5B5D5KCV.js → chunk-7XTANLTN.js} +1 -1
- package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
- package/dist/cli/chunks/{chunk-GAXTPQCZ.js → chunk-A74J23QB.js} +2 -2
- package/dist/cli/chunks/{chunk-K2VUYRMG.js → chunk-A7ANPS4E.js} +2 -2
- package/dist/cli/chunks/{chunk-WO4NSPLX.js → chunk-AJT3XDRD.js} +2 -2
- package/dist/cli/chunks/{chunk-LPSE6DOQ.js → chunk-ALCIUWFC.js} +1 -1
- package/dist/cli/chunks/{chunk-UK5HY6LC.js → chunk-AUN4FG7V.js} +1 -1
- package/dist/cli/chunks/{chunk-MGH4XIHH.js → chunk-AUOSHM63.js} +2 -2
- package/dist/cli/chunks/{chunk-HX5KQK7I.js → chunk-AX26QJ6T.js} +2 -2
- package/dist/cli/chunks/{chunk-BZWZTGMF.js → chunk-B7RHBKHL.js} +2 -2
- package/dist/cli/chunks/{chunk-I5A3HGO6.js → chunk-BAYGQRNP.js} +2 -2
- package/dist/cli/chunks/{chunk-3C2BFLYC.js → chunk-BIXRTOH3.js} +18 -18
- package/dist/cli/chunks/{chunk-EWUFVWRT.js → chunk-BO7UFNYV.js} +2 -2
- package/dist/cli/chunks/{chunk-6TMUZGM2.js → chunk-BUTGIVKW.js} +1 -1
- package/dist/cli/chunks/{chunk-2MU4WCMQ.js → chunk-BXATKI5S.js} +2 -2
- package/dist/cli/chunks/{chunk-HEDLZWPM.js → chunk-CCL436IU.js} +44 -33
- package/dist/cli/chunks/{chunk-6EHVPFHW.js → chunk-CEXNW5TR.js} +1 -1
- package/dist/cli/chunks/{chunk-2ICC4H6K.js → chunk-CLAMMGY3.js} +2 -2
- package/dist/cli/chunks/{chunk-BPGFCUDO.js → chunk-CR66HNAE.js} +1 -1
- package/dist/cli/chunks/{chunk-CFXFGQEN.js → chunk-CZBIREL5.js} +2 -2
- package/dist/cli/chunks/{chunk-Z56QTRRB.js → chunk-D5N2O5EH.js} +2 -2
- package/dist/cli/chunks/{chunk-M6SJALLA.js → chunk-DA7DGDTI.js} +2 -2
- package/dist/cli/chunks/{chunk-R47LNH5W.js → chunk-DLSFT6PO.js} +2 -2
- package/dist/cli/chunks/{chunk-6HTO4BLV.js → chunk-DQNUPEY5.js} +2 -2
- package/dist/cli/chunks/{chunk-XZ5Z56OP.js → chunk-EECF4CMA.js} +1 -1
- package/dist/cli/chunks/{chunk-DFJGXXCL.js → chunk-EF5UHDCG.js} +1 -1
- package/dist/cli/chunks/{chunk-PJAXWCFC.js → chunk-EJ4KZFZN.js} +1 -1
- package/dist/cli/chunks/{chunk-RA3MI5WK.js → chunk-ELI4GDQO.js} +2 -2
- package/dist/cli/chunks/{chunk-BND6M2JX.js → chunk-F3KS3TAB.js} +2 -2
- package/dist/cli/chunks/{chunk-RB2SL5GD.js → chunk-F7A2UBZO.js} +2 -2
- package/dist/cli/chunks/{chunk-X5S5UEM6.js → chunk-FOJRPEIP.js} +2 -2
- package/dist/cli/chunks/{chunk-ZP6ANUP7.js → chunk-FQ5N666N.js} +1 -1
- package/dist/cli/chunks/{chunk-LZSLJJII.js → chunk-FU7LNUD7.js} +2 -2
- package/dist/cli/chunks/{chunk-FDK2GF4G.js → chunk-GFB6BZWU.js} +2 -2
- package/dist/cli/chunks/{chunk-C5EN5WB6.js → chunk-GI5HWS4H.js} +1 -1
- package/dist/cli/chunks/{chunk-SIUUAKCE.js → chunk-GNYOHZVV.js} +1 -1
- package/dist/cli/chunks/{chunk-OOK6GPJR.js → chunk-GVRFSXY6.js} +2 -2
- package/dist/cli/chunks/{chunk-6QPW4OVH.js → chunk-GWM4M5NF.js} +1 -1
- package/dist/cli/chunks/{chunk-PMXWDTDK.js → chunk-HAN4MS5T.js} +2 -2
- package/dist/cli/chunks/{chunk-WW6WUMS7.js → chunk-HEGGV2PT.js} +2 -2
- package/dist/cli/chunks/{chunk-4GLR2S2M.js → chunk-HOEWMEF2.js} +2 -2
- package/dist/cli/chunks/{chunk-BY3IL56R.js → chunk-HZFK2Z2Z.js} +1 -1
- package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
- package/dist/cli/chunks/{chunk-LXYTC62V.js → chunk-IEPWO4XP.js} +2 -2
- package/dist/cli/chunks/{chunk-3MSBVOYW.js → chunk-ITIJ23K2.js} +2 -2
- package/dist/cli/chunks/{chunk-PEA4DVXW.js → chunk-IVJIHZSM.js} +1 -1
- package/dist/cli/chunks/{chunk-P7GM3EE7.js → chunk-JAPBSSFY.js} +1 -1
- package/dist/cli/chunks/{chunk-SOSJFEFB.js → chunk-JCE76MPP.js} +2 -2
- package/dist/cli/chunks/{chunk-YZ2AGC7O.js → chunk-JPJEAK4G.js} +1 -1
- package/dist/cli/chunks/{chunk-RG67RZIX.js → chunk-JYKQVYX2.js} +2 -2
- package/dist/cli/chunks/{chunk-W6TJXK5Y.js → chunk-K55EAWZ5.js} +2 -2
- package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
- package/dist/cli/chunks/{chunk-W3PPYNHF.js → chunk-KIDOBLUO.js} +2 -2
- package/dist/cli/chunks/{chunk-JL3TI43V.js → chunk-KYVIOC3C.js} +2 -2
- package/dist/cli/chunks/{chunk-WEDVLKRB.js → chunk-L2TDHJR3.js} +2 -2
- package/dist/cli/chunks/{chunk-5GWTJJEO.js → chunk-L4D3TPFP.js} +1 -1
- package/dist/cli/chunks/{chunk-PB2WSCBW.js → chunk-LAY7NCQK.js} +3 -3
- package/dist/cli/chunks/{chunk-T3BMCEQR.js → chunk-LCCTJ2PC.js} +2 -2
- package/dist/cli/chunks/{chunk-7INP6HZH.js → chunk-LJCEDTUM.js} +3 -3
- package/dist/cli/chunks/{chunk-DEJM2P5K.js → chunk-LMAEMVPA.js} +1 -1
- package/dist/cli/chunks/{chunk-HCDTLV5J.js → chunk-LZWJ5BMP.js} +2 -2
- package/dist/cli/chunks/{chunk-D7RVZ5C2.js → chunk-MP3FSUNB.js} +2 -2
- package/dist/cli/chunks/{chunk-ADF6LGHZ.js → chunk-MQCTLTGE.js} +2 -2
- package/dist/cli/chunks/{chunk-OHH6BUZK.js → chunk-MQTA6KIO.js} +1 -1
- package/dist/cli/chunks/{chunk-ISASRHZP.js → chunk-NBUXM5X6.js} +10 -6
- package/dist/cli/chunks/{chunk-KOLHZSEC.js → chunk-NHRF3V4B.js} +2 -2
- package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
- package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
- package/dist/cli/chunks/{chunk-EGHK6NMH.js → chunk-ONPPBLRB.js} +2 -2
- package/dist/cli/chunks/{chunk-YQ6BK7QC.js → chunk-OPDZBRIL.js} +2 -2
- package/dist/cli/chunks/{chunk-DPL4ZXTE.js → chunk-OQ4S6B7P.js} +1 -1
- package/dist/cli/chunks/{chunk-6HO3XRXE.js → chunk-ORBODZSO.js} +2 -2
- package/dist/cli/chunks/{chunk-GLKLEHK3.js → chunk-ORFL3YXB.js} +2 -2
- package/dist/cli/chunks/{chunk-I43QRLLB.js → chunk-P7DXVL2S.js} +2 -2
- package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
- package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
- package/dist/cli/chunks/{chunk-HEKCN5XQ.js → chunk-Q2RBOC7V.js} +2 -2
- package/dist/cli/chunks/{chunk-54XTJBHV.js → chunk-QLKUCMZC.js} +1 -1
- package/dist/cli/chunks/{chunk-3BDDOFYW.js → chunk-QLYO3H7E.js} +9 -9
- package/dist/cli/chunks/{chunk-VMSO6DMF.js → chunk-QS5KZYUZ.js} +2 -2
- package/dist/cli/chunks/{chunk-JFQDWAU3.js → chunk-R363XXGH.js} +2 -2
- package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
- package/dist/cli/chunks/{chunk-73PCVMGA.js → chunk-RFDFET3O.js} +2 -2
- package/dist/cli/chunks/{chunk-LJRZAALA.js → chunk-RHIQ6QO5.js} +357 -351
- package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
- package/dist/cli/chunks/{chunk-RJ5CZ7B6.js → chunk-RUTO67PT.js} +2 -2
- package/dist/cli/chunks/{chunk-DF4Y3HPO.js → chunk-RV6HSMKJ.js} +1 -1
- package/dist/cli/chunks/{chunk-54ITMOFM.js → chunk-SOSJWM3E.js} +4 -4
- package/dist/cli/chunks/{chunk-5SS2Z7JC.js → chunk-SV5BUYHH.js} +2 -2
- package/dist/cli/chunks/{chunk-XHCCH7UC.js → chunk-TL5GV3PR.js} +8 -8
- package/dist/cli/chunks/{chunk-ZKXZTIVF.js → chunk-TLUIO37P.js} +2 -2
- package/dist/cli/chunks/{chunk-2LL35V3A.js → chunk-TUDENMAE.js} +2 -2
- package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
- package/dist/cli/chunks/{chunk-2DRMTRBM.js → chunk-UB6DQGWM.js} +2 -2
- package/dist/cli/chunks/chunk-UHHMAKPE.js +3 -0
- package/dist/cli/chunks/{chunk-DBIK4OFX.js → chunk-ULCHPPW2.js} +1 -1
- package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
- package/dist/cli/chunks/{chunk-I6E4X3L3.js → chunk-VAYZ5QIE.js} +1 -1
- package/dist/cli/chunks/{chunk-G3ZUB3HD.js → chunk-VCONCVSY.js} +3 -3
- package/dist/cli/chunks/{chunk-7X2IVMXN.js → chunk-VVF337SV.js} +2 -2
- package/dist/cli/chunks/{chunk-EY5IUF7U.js → chunk-WKDWRRDT.js} +2 -2
- package/dist/cli/chunks/{chunk-FRBCX46J.js → chunk-X2DR27AY.js} +2 -2
- package/dist/cli/chunks/{chunk-I53365HG.js → chunk-X33F7NXH.js} +3 -3
- package/dist/cli/chunks/{chunk-MVTUFPM2.js → chunk-XBEI2JBA.js} +2 -2
- package/dist/cli/chunks/{chunk-OG4KHX7S.js → chunk-XBFQJZWX.js} +2 -2
- package/dist/cli/chunks/{chunk-DVE5SM5G.js → chunk-XFPQIWEH.js} +3 -3
- package/dist/cli/chunks/{chunk-RWZ4F44Y.js → chunk-XPB5BVU6.js} +2 -2
- package/dist/cli/chunks/{chunk-TVQPYP2Z.js → chunk-XQ53PZEF.js} +3 -3
- package/dist/cli/chunks/{chunk-73MTUM6F.js → chunk-XZ46CI35.js} +2 -2
- package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
- package/dist/cli/chunks/{chunk-BY5PLEPZ.js → chunk-YNG7E26C.js} +2 -2
- package/dist/cli/chunks/{chunk-YUWUFYHK.js → chunk-YXU35GGD.js} +1 -1
- package/dist/cli/chunks/{chunk-B7GJXQD2.js → chunk-ZCP4P6O2.js} +2 -2
- package/dist/cli/chunks/{chunk-LGA6J4I4.js → chunk-ZL5LJT7D.js} +2 -2
- package/dist/cli/chunks/{chunk-TB22Y3WW.js → chunk-ZOUEQ6DL.js} +1 -1
- package/dist/cli/chunks/{chunk-U2E5F3VZ.js → chunk-ZSBD4FUX.js} +2 -2
- package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
- package/dist/cli/chunks/{chunk-WYO5VN2L.js → chunk-ZUTFHGEO.js} +1 -1
- package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
- package/dist/cli/chunks/ci-config-2ZVV4OXL.js +2 -0
- package/dist/cli/chunks/{ci-output-BMJABAEX.js → ci-output-E45OGVPR.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-GYD5CMJQ.js → circuit-breaker-X73ITYZC.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-MMOYVBVD.js → claude-flow-setup-W4PPH46C.js} +2 -2
- package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
- package/dist/cli/chunks/{cline-installer-B2SOZ44R.js → cline-installer-NUEPMWDE.js} +2 -2
- package/dist/cli/chunks/{code-V3FIRAXD.js → code-6WQHBS7G.js} +4 -4
- package/dist/cli/chunks/{code-index-extractor-CV6A756Z.js → code-index-extractor-BXQIFIFT.js} +2 -2
- package/dist/cli/chunks/{codex-installer-EUC6J47Y.js → codex-installer-Z337R2KH.js} +2 -2
- package/dist/cli/chunks/{completions-DQQIBAHR.js → completions-F5DMYFHV.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-HPXMXP5I.js → complexity-analyzer-W2SYPZDI.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-RCIYXH6V.js → continuedev-installer-ZCHUIFTN.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-VUH32SHF.js → copilot-installer-M5JNODXF.js} +2 -2
- package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
- package/dist/cli/chunks/{cost-tracker-YLCKLOAL.js → cost-tracker-LSYTHBHV.js} +2 -2
- package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
- package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
- package/dist/cli/chunks/{cursor-installer-B42FN62K.js → cursor-installer-XPUA73UW.js} +2 -2
- package/dist/cli/chunks/{daemon-DECQRQII.js → daemon-ITKDIYMW.js} +5 -5
- package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
- package/dist/cli/chunks/{dag-attention-scheduler-RY7CDYSC.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
- package/dist/cli/chunks/{detect-NW53BMJN.js → detect-DR7J6K4O.js} +2 -2
- package/dist/cli/chunks/{dist-node-LE6KHXAB.js → dist-node-LAJJBOUT.js} +2 -2
- package/dist/cli/chunks/{domain-handler-JGXFT4LW.js → domain-handler-OMSHCRMK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-GY3RYKKK.js → domain-plugins-EQXSKC5K.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-CGBRXNTC.js → domain-transfer-FKRAGVSW.js} +2 -2
- package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
- package/dist/cli/chunks/{eval-YPYIZQUR.js → eval-JSNNASBW.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
- package/dist/cli/chunks/{fast-paths-HYQTAF2S.js → fast-paths-YNMIBS2E.js} +2 -2
- package/dist/cli/chunks/{feature-flags-HNSAFFX2.js → feature-flags-SRLXDKBI.js} +2 -2
- package/dist/cli/chunks/{feature-flags-YACUH6OW.js → feature-flags-VIR7O4L7.js} +2 -2
- package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
- package/dist/cli/chunks/{fleet-6M3BP4OO.js → fleet-K2ED46EL.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-QLD7KHXV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-EZP333X4.js → heartbeat-handler-YYQI4WZM.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
- package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-47CUCSAU.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-SVNYDJZH.js → hnswlib-node-SE3MJJYS.js} +2 -2
- package/dist/cli/chunks/{hooks-6V5LMWP6.js → hooks-C572SRDH.js} +43 -43
- package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-L2FOBIFF.js → hypergraph-engine-35A6G3M5.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DU6Z57EE.js → hypergraph-handler-U2756CWI.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
- package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
- package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
- package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-NHKYGJ7Q.js → kilocode-installer-32PX5YH7.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-24UK6GGR.js → kiro-installer-C4ROMMUS.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
- package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
- package/dist/cli/chunks/{llm-router-XRMI2VMG.js → llm-router-XRKTTJTX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
- package/dist/cli/chunks/{load-W5UWL5C7.js → load-XVH6HW7E.js} +2 -2
- package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
- package/dist/cli/chunks/{mcp-N7ALQ4BL.js → mcp-IULSTM4Z.js} +2 -2
- package/dist/cli/chunks/{memory-WV52DLSA.js → memory-6K7IAU4T.js} +5 -5
- package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
- package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-3FVTZCSO.js → multi-model-executor-VZDUYPLX.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-NTPWGHUW.js → opencode-installer-QUTXKNH4.js} +2 -2
- package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
- package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-WWXHUH5U.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
- package/dist/cli/chunks/{pipeline-ZOKZFXTH.js → pipeline-O562GTOG.js} +2 -2
- package/dist/cli/chunks/{platform-CDNL322F.js → platform-PM7Q2AZS.js} +2 -2
- package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-FVJDU2JY.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
- package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
- package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
- package/dist/cli/chunks/{protocol-handler-4YBN5R23.js → protocol-handler-PPGNSAOS.js} +2 -2
- package/dist/cli/chunks/{prove-BHDHY664.js → prove-WQ3BKRZG.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
- package/dist/cli/chunks/quality-C5WUU3AA.js +8 -0
- package/dist/cli/chunks/{quality-gate-WANE7TCN.js → quality-gate-WSSRKD5U.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
- package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
- package/dist/cli/chunks/{ref-validation-S7UWXQIP.js → ref-validation-DHKHXVZT.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-TEYOQYL6.js → roocode-installer-3PPODABV.js} +2 -2
- package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
- package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
- package/dist/cli/chunks/{routing-handler-KDTLMRWD.js → routing-handler-JNXTGT6T.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-AOUDXCYE.js → ruvector-commands-6YLROPVP.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-QI47Y354.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
- package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
- package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
- package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
- package/dist/cli/chunks/{security-SN6MWOJT.js → security-PWQTGDRU.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-WU7PFKQM.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
- package/dist/cli/chunks/{standalone-memory-F6FSRFWC.js → standalone-memory-46KKBSSV.js} +2 -2
- package/dist/cli/chunks/{status-handler-DHD5MS4G.js → status-handler-35T5FTDQ.js} +2 -2
- package/dist/cli/chunks/{structural-health-P6HPSQMR.js → structural-health-P7QPQWLO.js} +2 -2
- package/dist/cli/chunks/{sync-LISJGDSE.js → sync-W6Z4R4PL.js} +2 -2
- package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
- package/dist/cli/chunks/{task-handler-ZT44NT5Z.js → task-handler-5CX3ZYT7.js} +2 -2
- package/dist/cli/chunks/{task-handlers-R6DQ5324.js → task-handlers-DQZGOJNE.js} +3 -3
- package/dist/cli/chunks/{test-MUFHR4JQ.js → test-TPP53VVV.js} +12 -12
- package/dist/cli/chunks/{test-scheduling-TAUSLZJP.js → test-scheduling-WBV4UMQH.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
- package/dist/cli/chunks/{token-usage-IX65ECBR.js → token-usage-AKK37RB7.js} +2 -2
- package/dist/cli/chunks/{transformers-QKPSVW2W.js → transformers-7MASPELS.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-Z7PPA2JO.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
- package/dist/cli/chunks/{types-ULNNGGGH.js → types-AZ3BTXDP.js} +2 -2
- package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
- package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
- package/dist/cli/chunks/{upgrade-ECI3YUYA.js → upgrade-L7OTDKEK.js} +2 -2
- package/dist/cli/chunks/{validate-3JKRUW2S.js → validate-O3QVFIGP.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-LZWANCIE.js → validate-swarm-2UGBGLTX.js} +2 -2
- package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-N5V4A6XG.js → web-tree-sitter-J75IYPRO.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-5TBM5B3C.js → windsurf-installer-FQ5DBFCG.js} +2 -2
- package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
- package/dist/cli/chunks/{witness-chain-MFP3HBWQ.js → witness-chain-I7TN4MXZ.js} +2 -2
- package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-SRAT7LVY.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
- package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
- package/dist/cli/chunks/{workflow-M7TUYYXY.js → workflow-6BWTNVV6.js} +28 -28
- package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
- package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
- package/dist/cli/commands/ci.js +53 -23
- package/dist/cli/commands/code.js +1 -0
- package/dist/cli/commands/coverage.d.ts +1 -0
- package/dist/cli/commands/coverage.js +182 -138
- package/dist/cli/commands/daemon.js +7 -1
- package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
- package/dist/cli/commands/learning.js +47 -7
- package/dist/cli/commands/quality.d.ts +12 -1
- package/dist/cli/commands/quality.js +51 -3
- package/dist/cli/commands/test.js +6 -7
- package/dist/cli/commands/workflow.js +9 -5
- package/dist/cli/handlers/init-guard.d.ts +13 -0
- package/dist/cli/handlers/init-guard.js +23 -0
- package/dist/cli/handlers/init-handler.d.ts +3 -0
- package/dist/cli/handlers/init-handler.js +9 -0
- package/dist/cli/handlers/interfaces.js +5 -1
- package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
- package/dist/cli/scheduler/persistent-scheduler.js +107 -41
- package/dist/cli/utils/ci-output.d.ts +22 -5
- package/dist/cli/utils/ci-output.js +33 -5
- package/dist/cli/utils/coverage-data.d.ts +10 -0
- package/dist/cli/utils/coverage-data.js +34 -65
- package/dist/cli/utils/coverage-verdict.d.ts +130 -0
- package/dist/cli/utils/coverage-verdict.js +193 -0
- package/dist/cli/utils/file-discovery.js +5 -0
- package/dist/contracts/verdicts.d.ts +14 -0
- package/dist/contracts/verdicts.js +44 -3
- package/dist/coordination/deterministic-actions.js +24 -13
- package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
- package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
- package/dist/coordination/handlers/coverage-handlers.js +150 -121
- package/dist/coordination/handlers/coverage-runner.d.ts +143 -0
- package/dist/coordination/handlers/coverage-runner.js +462 -0
- package/dist/coordination/handlers/coverage-target.d.ts +145 -0
- package/dist/coordination/handlers/coverage-target.js +314 -0
- package/dist/coordination/handlers/handler-types.d.ts +9 -0
- package/dist/coordination/handlers/handler-utils.d.ts +23 -1
- package/dist/coordination/handlers/handler-utils.js +90 -23
- package/dist/coordination/handlers/quality-handlers.js +209 -33
- package/dist/coordination/handlers/test-execution-handlers.js +4 -1
- package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
- package/dist/coordination/protocols/defect-investigation.js +6 -3
- package/dist/coordination/protocols/quality-gate.js +10 -6
- package/dist/coordination/result-saver.d.ts +22 -0
- package/dist/coordination/result-saver.js +130 -46
- package/dist/coordination/task-executor.d.ts +12 -0
- package/dist/coordination/task-executor.js +37 -1
- package/dist/domains/code-intelligence/coordinator.d.ts +2 -1
- package/dist/domains/code-intelligence/coordinator.js +10 -32
- package/dist/domains/code-intelligence/interfaces.d.ts +5 -0
- package/dist/domains/code-intelligence/plugin.js +5 -0
- package/dist/domains/code-intelligence/project-root-resolver.d.ts +50 -0
- package/dist/domains/code-intelligence/project-root-resolver.js +121 -0
- package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
- package/dist/domains/coverage-analysis/coordinator.js +22 -7
- package/dist/domains/coverage-analysis/interfaces.d.ts +59 -0
- package/dist/domains/coverage-analysis/interfaces.js +6 -1
- package/dist/domains/coverage-analysis/plugin.js +7 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +7 -0
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +85 -38
- package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
- package/dist/domains/defect-intelligence/plugin.js +4 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
- package/dist/domains/learning-optimization/coordinator.js +4 -0
- package/dist/domains/learning-optimization/plugin.js +4 -0
- package/dist/domains/quality-assessment/coordinator-claim-verifier.js +2 -1
- package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
- package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
- package/dist/domains/quality-assessment/coordinator.js +18 -14
- package/dist/domains/quality-assessment/coverage-report-event.d.ts +49 -0
- package/dist/domains/quality-assessment/coverage-report-event.js +58 -0
- package/dist/domains/quality-assessment/evidence-sufficiency.d.ts +57 -0
- package/dist/domains/quality-assessment/evidence-sufficiency.js +97 -0
- package/dist/domains/quality-assessment/index.d.ts +2 -2
- package/dist/domains/quality-assessment/index.js +1 -1
- package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
- package/dist/domains/quality-assessment/plugin.js +8 -8
- package/dist/domains/quality-assessment/quality-evidence.d.ts +98 -4
- package/dist/domains/quality-assessment/quality-evidence.js +152 -8
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.js +203 -116
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
- package/dist/domains/test-execution/interfaces.d.ts +10 -6
- package/dist/domains/test-execution/plugin.js +4 -0
- package/dist/domains/test-execution/services/test-executor.js +152 -102
- package/dist/domains/test-generation/coordinator.js +4 -0
- package/dist/domains/test-generation/plugin.js +4 -0
- package/dist/feedback/coverage-learner.js +4 -1
- package/dist/feedback/coverage-session-provenance.d.ts +29 -0
- package/dist/feedback/coverage-session-provenance.js +39 -0
- package/dist/init/orchestrator.js +2 -0
- package/dist/init/phases/09-assets.d.ts +4 -0
- package/dist/init/phases/09-assets.js +35 -0
- package/dist/init/retired-assets.d.ts +86 -0
- package/dist/init/retired-assets.js +230 -0
- package/dist/init/skills-installer.d.ts +2 -0
- package/dist/init/skills-installer.js +4 -0
- package/dist/init/types.d.ts +3 -0
- package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
- package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
- package/dist/integrations/ruvector/server-client.js +4 -12
- package/dist/kernel/project-root.d.ts +17 -0
- package/dist/kernel/project-root.js +54 -2
- package/dist/kernel/shared-dirs.d.ts +66 -0
- package/dist/kernel/shared-dirs.js +168 -0
- package/dist/learning/daily-log.js +2 -1
- package/dist/learning/experience-capture-middleware.d.ts +22 -0
- package/dist/learning/experience-capture-middleware.js +35 -0
- package/dist/learning/learnable-result.d.ts +16 -0
- package/dist/learning/learnable-result.js +24 -0
- package/dist/learning/pattern-mutation-error.d.ts +8 -0
- package/dist/learning/pattern-mutation-error.js +12 -0
- package/dist/learning/qe-reasoning-bank.d.ts +10 -0
- package/dist/learning/qe-reasoning-bank.js +50 -1
- package/dist/learning/rvf-reconcile.d.ts +39 -0
- package/dist/learning/rvf-reconcile.js +40 -0
- package/dist/learning/sqlite-persistence.d.ts +14 -0
- package/dist/learning/sqlite-persistence.js +36 -0
- package/dist/mcp/bundle.js +524 -507
- package/dist/mcp/handlers/domain-handler-configs.d.ts +49 -2
- package/dist/mcp/handlers/domain-handler-configs.js +79 -7
- package/dist/mcp/handlers/handler-factory.js +43 -14
- package/dist/mcp/handlers/wrapped-domain-handlers.js +7 -1
- package/dist/mcp/protocol-server.js +30 -4
- package/dist/mcp/tool-cache-scope.d.ts +31 -0
- package/dist/mcp/tool-cache-scope.js +71 -0
- package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
- package/dist/mcp/tools/coverage-analysis/index.js +1 -0
- package/dist/mcp/types.d.ts +10 -0
- package/dist/optimization/session-cache.d.ts +19 -1
- package/dist/optimization/session-cache.js +36 -2
- package/dist/plugins/cache.js +2 -1
- package/dist/plugins/sources/github.js +2 -1
- package/dist/plugins/sources/npm.js +2 -1
- package/dist/shared/aqe-managed-dirs.d.ts +24 -0
- package/dist/shared/aqe-managed-dirs.js +56 -0
- package/dist/shared/events/domain-events.d.ts +20 -3
- package/dist/shared/events/domain-events.js +4 -0
- package/dist/shared/http/http-client.d.ts +6 -0
- package/dist/shared/http/http-client.js +13 -15
- package/dist/shared/io/file-reader.d.ts +26 -0
- package/dist/shared/io/file-reader.js +111 -17
- package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
- package/dist/shared/llm/providers/response-deadline.js +17 -5
- package/dist/shared/metrics/code-metrics.d.ts +24 -0
- package/dist/shared/metrics/code-metrics.js +93 -6
- package/dist/shared/metrics/index.d.ts +1 -1
- package/dist/workers/interfaces.d.ts +9 -1
- package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
- package/dist/workers/quality-daemon/coverage-delta.js +13 -6
- package/dist/workers/quality-daemon/index.js +6 -5
- package/dist/workers/quality-daemon/notification-service.js +3 -3
- package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
- package/dist/workers/quality-daemon/persistent-memory.js +2 -2
- package/dist/workers/worker-manager.js +5 -1
- package/dist/workers/workers/coverage-tracker.js +69 -33
- package/dist/workers/workers/regression-monitor.d.ts +18 -1
- package/dist/workers/workers/regression-monitor.js +276 -117
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-T54G3TBK.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-HLCJJ3JM.js +0 -2
- package/dist/cli/chunks/base-VLD755UU.js +0 -2
- package/dist/cli/chunks/browser-workflow-6M6VLWRF.js +0 -2
- package/dist/cli/chunks/chunk-5XXLWJU7.js +0 -2
- package/dist/cli/chunks/chunk-AHVN3UQZ.js +0 -4
- package/dist/cli/chunks/chunk-AOKSLWON.js +0 -742
- package/dist/cli/chunks/chunk-CQ3WSTJ2.js +0 -16
- package/dist/cli/chunks/chunk-LY53L6NH.js +0 -2
- package/dist/cli/chunks/chunk-O7TMY4GS.js +0 -2
- package/dist/cli/chunks/chunk-QIAX3JJB.js +0 -3
- package/dist/cli/chunks/chunk-RJMBHZYL.js +0 -2
- package/dist/cli/chunks/chunk-UORI2CZ4.js +0 -2
- package/dist/cli/chunks/chunk-V3NZ23X6.js +0 -2
- package/dist/cli/chunks/chunk-WI5AEB7Q.js +0 -2
- package/dist/cli/chunks/chunk-XKIFNKHV.js +0 -2
- package/dist/cli/chunks/chunk-ZAOQIVHG.js +0 -5
- package/dist/cli/chunks/chunk-ZF5JTQEE.js +0 -4
- package/dist/cli/chunks/ci-NGMGB43T.js +0 -82
- package/dist/cli/chunks/client-FUHNNK5O.js +0 -2
- package/dist/cli/chunks/core-handlers-F7TLX4LM.js +0 -2
- package/dist/cli/chunks/coverage-IVKDV236.js +0 -27
- package/dist/cli/chunks/cross-domain-router-EGWPY67O.js +0 -2
- package/dist/cli/chunks/daemon-IPTOSCHM.js +0 -10
- package/dist/cli/chunks/dream-V4QN6OF5.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-65H4XHWR.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-4JXVF5PL.js +0 -40
- package/dist/cli/chunks/file-discovery-R73BYEXB.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-3N3L6CRM.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-2BXJYDXI.js +0 -2
- package/dist/cli/chunks/hnsw-index-2DLI5OVO.js +0 -2
- package/dist/cli/chunks/hybrid-backend-OW4J65YH.js +0 -2
- package/dist/cli/chunks/impact-analyzer-ZH5I2RG6.js +0 -2
- package/dist/cli/chunks/init-handler-HETPWU67.js +0 -86
- package/dist/cli/chunks/init-wizard-NIKM3ZOK.js +0 -2
- package/dist/cli/chunks/kernel-2EOSVM6X.js +0 -2
- package/dist/cli/chunks/knowledge-graph-D3BPWNNO.js +0 -2
- package/dist/cli/chunks/learning-QLVRZNHT.js +0 -122
- package/dist/cli/chunks/llm-router-service-TJPPZFUN.js +0 -2
- package/dist/cli/chunks/load-test-RFT7IDOL.js +0 -2
- package/dist/cli/chunks/memory-backend-O2O4CFKZ.js +0 -2
- package/dist/cli/chunks/memory-handlers-DAEGUDBD.js +0 -2
- package/dist/cli/chunks/orchestrator-ORGJ6VAA.js +0 -452
- package/dist/cli/chunks/pattern-null-store-TUBNXS34.js +0 -2
- package/dist/cli/chunks/plugin-ZVLFNZZ4.js +0 -27
- package/dist/cli/chunks/project-root-UCHQH3QL.js +0 -2
- package/dist/cli/chunks/protocol-executor-6FQTTO3Y.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-TKPND56C.js +0 -2
- package/dist/cli/chunks/quality-46AK277P.js +0 -7
- package/dist/cli/chunks/queen-coordinator-DWMXLPJG.js +0 -2
- package/dist/cli/chunks/real-embeddings-56MNGJGJ.js +0 -2
- package/dist/cli/chunks/router-QIMUYRCC.js +0 -2
- package/dist/cli/chunks/routing-feedback-4OH5ZNF4.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-S6JBZL54.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-TSGMLMYR.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-V74MVBHS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-Z7QOW47S.js +0 -2
- package/dist/cli/chunks/safe-db-JLOVBJNC.js +0 -2
- package/dist/cli/chunks/schedule-IM6XOBGR.js +0 -2
- package/dist/cli/chunks/scheduler-XL2SVVK5.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-2LB56LP4.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-LWMIIC4U.js +0 -2
- package/dist/cli/chunks/sync-SNAXAVCN.js +0 -2
- package/dist/cli/chunks/token-bootstrap-UGRH7OPU.js +0 -2
- package/dist/cli/chunks/unified-memory-F5IJY7W7.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-C3WAMAQL.js +0 -2
- package/dist/cli/chunks/unified-persistence-EWXXOTCB.js +0 -2
- package/dist/cli/chunks/visual-security-CKLTAIAB.js +0 -2
- package/dist/cli/chunks/witness-chain-Z6LWFEZS.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-5QWRFVUK.js +0 -2
- package/dist/cli/chunks/witness-key-manager-FYZXQTLJ.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-OFTAR2NA.js +0 -2
- package/dist/cli/chunks/wrappers-COU73OQ6.js +0 -2
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project root resolution for code-intelligence metric collection (#994).
|
|
3
|
+
*
|
|
4
|
+
* `index()` receives an expanded list of files (the CLI walks the target
|
|
5
|
+
* directory first). When the caller also passes the original `target`, the
|
|
6
|
+
* walk starts at the target directory (its parent for a file target), so a `.`
|
|
7
|
+
* at a monorepo root whose source all lives in one package resolves to the
|
|
8
|
+
* root. Without a target we start from the deepest directory that contains
|
|
9
|
+
* every indexed path. Either way we walk UP (bottom-up, using `path.dirname`,
|
|
10
|
+
* so absolute paths and Windows drive roots are handled by the `path` module)
|
|
11
|
+
* and return the NEAREST directory that holds a project marker.
|
|
12
|
+
*
|
|
13
|
+
* Starting from the common directory rather than the first file keeps a stray
|
|
14
|
+
* marker inside one subtree (for example `.agentic-qe/workers/package.json`)
|
|
15
|
+
* from capturing an index that spans the whole project.
|
|
16
|
+
*
|
|
17
|
+
* When no marker exists anywhere up to the filesystem root, the start
|
|
18
|
+
* directory itself is returned (the target, the files' common directory, or a
|
|
19
|
+
* single file's directory). A filesystem or drive root is never returned:
|
|
20
|
+
* measuring `/` would walk the whole disk, so the result is null instead.
|
|
21
|
+
*
|
|
22
|
+
* @module domains/code-intelligence/project-root-resolver
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, statSync } from 'node:fs';
|
|
25
|
+
import * as path from 'node:path';
|
|
26
|
+
/** Files or directories whose presence marks a project root. */
|
|
27
|
+
export const PROJECT_ROOT_MARKERS = Object.freeze([
|
|
28
|
+
'package.json',
|
|
29
|
+
'Cargo.toml',
|
|
30
|
+
'go.mod',
|
|
31
|
+
'pyproject.toml',
|
|
32
|
+
'.git',
|
|
33
|
+
]);
|
|
34
|
+
function defaultIsDirectory(p) {
|
|
35
|
+
try {
|
|
36
|
+
return statSync(p).isDirectory();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** True when `child` is `parent` or lies inside it. */
|
|
43
|
+
function isWithin(p, child, parent) {
|
|
44
|
+
const rel = p.relative(parent, child);
|
|
45
|
+
return rel === '' || (!rel.startsWith('..') && !p.isAbsolute(rel));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Deepest directory containing every input directory, or null when the inputs
|
|
49
|
+
* share no ancestor (for example different Windows drives).
|
|
50
|
+
*/
|
|
51
|
+
function commonAncestor(p, dirs) {
|
|
52
|
+
let common = dirs[0];
|
|
53
|
+
for (const dir of dirs.slice(1)) {
|
|
54
|
+
while (!isWithin(p, dir, common)) {
|
|
55
|
+
const parent = p.dirname(common);
|
|
56
|
+
if (parent === common)
|
|
57
|
+
return null;
|
|
58
|
+
common = parent;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return common;
|
|
62
|
+
}
|
|
63
|
+
/** Walk from `startDir` up to the filesystem root; return the nearest marker directory. */
|
|
64
|
+
function findNearestMarkerDir(p, startDir, exists) {
|
|
65
|
+
let current = startDir;
|
|
66
|
+
for (;;) {
|
|
67
|
+
for (const marker of PROJECT_ROOT_MARKERS) {
|
|
68
|
+
try {
|
|
69
|
+
if (exists(p.join(current, marker)))
|
|
70
|
+
return current;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Unreadable entry: keep checking the remaining markers.
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const parent = p.dirname(current);
|
|
77
|
+
if (parent === current)
|
|
78
|
+
return null;
|
|
79
|
+
current = parent;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Resolve the project root for a set of indexed paths.
|
|
84
|
+
*
|
|
85
|
+
* @param paths - Files and/or directories, absolute or relative to `options.cwd`
|
|
86
|
+
* @returns Absolute project root, or null when there is nothing to resolve or
|
|
87
|
+
* the result would be a filesystem/drive root
|
|
88
|
+
*/
|
|
89
|
+
export function resolveProjectRootFromPaths(paths, options = {}) {
|
|
90
|
+
const usable = paths.filter((p) => typeof p === 'string' && p.length > 0);
|
|
91
|
+
const target = typeof options.target === 'string' && options.target.length > 0 ? options.target : undefined;
|
|
92
|
+
if (usable.length === 0 && !target)
|
|
93
|
+
return null;
|
|
94
|
+
const p = options.pathImpl ?? path;
|
|
95
|
+
const cwd = options.cwd ?? process.cwd();
|
|
96
|
+
const exists = options.exists ?? existsSync;
|
|
97
|
+
const isDirectory = options.isDirectory ?? defaultIsDirectory;
|
|
98
|
+
// A directory contributes itself; a file contributes its parent directory.
|
|
99
|
+
const dirOf = (input) => {
|
|
100
|
+
const abs = p.resolve(cwd, input);
|
|
101
|
+
return isDirectory(abs) ? abs : p.dirname(abs);
|
|
102
|
+
};
|
|
103
|
+
let start;
|
|
104
|
+
if (target) {
|
|
105
|
+
// The caller's own target wins over the expanded file list: a `.` at a
|
|
106
|
+
// monorepo root whose source all lives in packages/a is still the root.
|
|
107
|
+
start = dirOf(target);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const dirs = usable.map(dirOf);
|
|
111
|
+
// Inputs on different roots (Windows drives): use the first path's directory.
|
|
112
|
+
start = commonAncestor(p, dirs) ?? dirs[0];
|
|
113
|
+
}
|
|
114
|
+
const root = findNearestMarkerDir(p, start, exists) ?? start;
|
|
115
|
+
// Never measure a whole filesystem / drive root (review N1).
|
|
116
|
+
return isFilesystemRoot(p, root) ? null : root;
|
|
117
|
+
}
|
|
118
|
+
function isFilesystemRoot(p, dir) {
|
|
119
|
+
return p.parse(dir).root === dir || p.dirname(dir) === dir;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=project-root-resolver.js.map
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { existsSync, readFileSync, readdirSync } from 'fs';
|
|
16
16
|
import { join, extname } from 'path';
|
|
17
|
+
import { AQE_STATE_DIR } from '../../../../shared/aqe-managed-dirs.js';
|
|
17
18
|
import { DEFAULT_METRIC_CONFIG, } from './interfaces.js';
|
|
18
19
|
import { countLOC, checkLOCTools } from './loc-counter.js';
|
|
19
20
|
import { countTests, checkTestRunners } from './test-counter.js';
|
|
@@ -211,6 +212,10 @@ export class MetricCollectorService {
|
|
|
211
212
|
let totalTodos = 0;
|
|
212
213
|
let totalConsole = 0;
|
|
213
214
|
const patterns = this.getPatternsForLanguage(language);
|
|
215
|
+
// #999: same exclusions as LOC/test counting (.agentic-qe anywhere; .claude at
|
|
216
|
+
// the root or next to a nested .agentic-qe)
|
|
217
|
+
const excludeDirs = new Set(this.config.excludeDirs);
|
|
218
|
+
const rootExcludeDirs = new Set(this.config.excludeRootDirs ?? []);
|
|
214
219
|
function walkDirectory(dirPath) {
|
|
215
220
|
if (!existsSync(dirPath))
|
|
216
221
|
return;
|
|
@@ -219,8 +224,10 @@ export class MetricCollectorService {
|
|
|
219
224
|
const fullPath = join(dirPath, entry.name);
|
|
220
225
|
if (entry.isDirectory()) {
|
|
221
226
|
// Skip excluded directories
|
|
222
|
-
|
|
223
|
-
|
|
227
|
+
if (excludeDirs.has(entry.name))
|
|
228
|
+
continue;
|
|
229
|
+
if (rootExcludeDirs.has(entry.name) &&
|
|
230
|
+
(dirPath === projectPath || existsSync(join(dirPath, AQE_STATE_DIR))))
|
|
224
231
|
continue;
|
|
225
232
|
walkDirectory(fullPath);
|
|
226
233
|
}
|
|
@@ -130,6 +130,15 @@ export interface MetricCollectorConfig {
|
|
|
130
130
|
timeout: number;
|
|
131
131
|
/** Directories to exclude from LOC counting */
|
|
132
132
|
excludeDirs: string[];
|
|
133
|
+
/** File names (exact match) to exclude from LOC counting, e.g. lockfiles (#999) */
|
|
134
|
+
excludeFiles: string[];
|
|
135
|
+
/**
|
|
136
|
+
* Directories excluded directly under the project root, and nested only when
|
|
137
|
+
* they sit next to a `.agentic-qe/` (a nested `aqe init`): the assets init
|
|
138
|
+
* writes. Any other directory of the same name (e.g. a plugin's own
|
|
139
|
+
* `.claude/hooks` source) is still counted (#999 review N4 / round 2b).
|
|
140
|
+
*/
|
|
141
|
+
excludeRootDirs: string[];
|
|
133
142
|
/** File patterns to include for test counting */
|
|
134
143
|
testPatterns: string[];
|
|
135
144
|
/** Enable caching of metrics (default: true) */
|
|
@@ -137,6 +146,18 @@ export interface MetricCollectorConfig {
|
|
|
137
146
|
/** Cache TTL in milliseconds (default: 300000 = 5 minutes) */
|
|
138
147
|
cacheTTL: number;
|
|
139
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Generated dependency lockfiles. They are machine-written, often thousands of
|
|
151
|
+
* lines, and are not project code, so LOC counting skips them (#999: a 3-line
|
|
152
|
+
* project reported 1662 LOC from package-lock.json).
|
|
153
|
+
*/
|
|
154
|
+
export declare const LOC_EXCLUDED_FILE_NAMES: readonly string[];
|
|
155
|
+
/**
|
|
156
|
+
* Init-written assets: excluded at the project root, and nested only next to a
|
|
157
|
+
* `.agentic-qe/` (a nested `aqe init`). `.agentic-qe` itself is in excludeDirs
|
|
158
|
+
* (state, never source, at any depth). #999 review N4 / round 2b.
|
|
159
|
+
*/
|
|
160
|
+
export declare const PROJECT_ROOT_EXCLUDED_DIRS: readonly string[];
|
|
140
161
|
/**
|
|
141
162
|
* Default configuration values
|
|
142
163
|
*/
|
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @see docs/plans/AQE_V3_IMPROVEMENTS_PLAN.md - Phase 5
|
|
8
8
|
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generated dependency lockfiles. They are machine-written, often thousands of
|
|
11
|
+
* lines, and are not project code, so LOC counting skips them (#999: a 3-line
|
|
12
|
+
* project reported 1662 LOC from package-lock.json).
|
|
13
|
+
*/
|
|
14
|
+
export const LOC_EXCLUDED_FILE_NAMES = Object.freeze([
|
|
15
|
+
// JS/TS
|
|
16
|
+
'package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb', 'bun.lock',
|
|
17
|
+
'deno.lock',
|
|
18
|
+
// Python
|
|
19
|
+
'poetry.lock', 'Pipfile.lock', 'uv.lock', 'pdm.lock',
|
|
20
|
+
// Rust / Go / Ruby / PHP / Elixir / Dart / .NET / Swift / Nix / Gradle
|
|
21
|
+
'Cargo.lock', 'go.sum', 'Gemfile.lock', 'composer.lock', 'mix.lock', 'pubspec.lock',
|
|
22
|
+
'packages.lock.json', 'Package.resolved', 'flake.lock', 'gradle.lockfile',
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* Init-written assets: excluded at the project root, and nested only next to a
|
|
26
|
+
* `.agentic-qe/` (a nested `aqe init`). `.agentic-qe` itself is in excludeDirs
|
|
27
|
+
* (state, never source, at any depth). #999 review N4 / round 2b.
|
|
28
|
+
*/
|
|
29
|
+
export const PROJECT_ROOT_EXCLUDED_DIRS = Object.freeze(['.claude']);
|
|
9
30
|
/**
|
|
10
31
|
* Default configuration values
|
|
11
32
|
*/
|
|
@@ -20,7 +41,11 @@ export const DEFAULT_METRIC_CONFIG = {
|
|
|
20
41
|
'target', '.gradle', 'vendor', '.bundle',
|
|
21
42
|
// General
|
|
22
43
|
'.git', '.svn', '.hg',
|
|
44
|
+
// AQE runtime state: never source, at any depth (#999)
|
|
45
|
+
'.agentic-qe',
|
|
23
46
|
],
|
|
47
|
+
excludeFiles: [...LOC_EXCLUDED_FILE_NAMES],
|
|
48
|
+
excludeRootDirs: [...PROJECT_ROOT_EXCLUDED_DIRS],
|
|
24
49
|
testPatterns: ['**/*.test.ts', '**/*.spec.ts', '**/*.test.js', '**/*.spec.js'],
|
|
25
50
|
enableCache: true,
|
|
26
51
|
cacheTTL: 300000,
|
|
@@ -25,4 +25,16 @@ export declare function countLOC(projectPath: string, config?: Partial<MetricCol
|
|
|
25
25
|
* Check which LOC counting tools are available
|
|
26
26
|
*/
|
|
27
27
|
export declare function checkLOCTools(): ToolAvailability[];
|
|
28
|
+
/**
|
|
29
|
+
* cloc `--not-match-f` regex matching any of `names` exactly (basename), or
|
|
30
|
+
* null when there is nothing to exclude.
|
|
31
|
+
*/
|
|
32
|
+
export declare function excludedFileNamesRegex(names: readonly string[] | undefined): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* cloc `--not-match-d` regex (with --fullpath) matching the given
|
|
35
|
+
* project-relative directories ('/'-separated) and everything below them, but
|
|
36
|
+
* no other directory of the same name (#999 review N4 / round 2b). Either
|
|
37
|
+
* path separator matches. Null when there are none.
|
|
38
|
+
*/
|
|
39
|
+
export declare function rootAnchoredDirsRegex(projectPath: string, relDirs: readonly string[] | undefined): string | null;
|
|
28
40
|
//# sourceMappingURL=loc-counter.d.ts.map
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import { spawnSync } from 'child_process';
|
|
15
15
|
import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
|
|
16
16
|
import { join, extname } from 'path';
|
|
17
|
+
import { AQE_CLAUDE_DIR, AQE_STATE_DIR, findAqeClaudeDirs } from '../../../../shared/aqe-managed-dirs.js';
|
|
17
18
|
import { DEFAULT_METRIC_CONFIG, } from './interfaces.js';
|
|
18
19
|
import { safeJsonParse } from '../../../../shared/safe-json.js';
|
|
19
20
|
// ============================================================================
|
|
@@ -77,6 +78,43 @@ export function checkLOCTools() {
|
|
|
77
78
|
}
|
|
78
79
|
return tools;
|
|
79
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* cloc `--not-match-f` regex matching any of `names` exactly (basename), or
|
|
83
|
+
* null when there is nothing to exclude.
|
|
84
|
+
*/
|
|
85
|
+
export function excludedFileNamesRegex(names) {
|
|
86
|
+
if (!names || names.length === 0)
|
|
87
|
+
return null;
|
|
88
|
+
// Matches a bare name and, under cloc --fullpath, a full path ending in it
|
|
89
|
+
// (either separator, so Windows paths match too).
|
|
90
|
+
return `(^|[\\\\/])(${names.map(escapeRegex).join('|')})$`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* cloc `--not-match-d` regex (with --fullpath) matching the given
|
|
94
|
+
* project-relative directories ('/'-separated) and everything below them, but
|
|
95
|
+
* no other directory of the same name (#999 review N4 / round 2b). Either
|
|
96
|
+
* path separator matches. Null when there are none.
|
|
97
|
+
*/
|
|
98
|
+
export function rootAnchoredDirsRegex(projectPath, relDirs) {
|
|
99
|
+
if (!relDirs || relDirs.length === 0)
|
|
100
|
+
return null;
|
|
101
|
+
const SEP = '[\\\\/]';
|
|
102
|
+
const toPattern = (path) => path.split(/[\\/]+/).filter(Boolean).map(escapeRegex).join(SEP);
|
|
103
|
+
const root = toPattern(projectPath);
|
|
104
|
+
const rootPrefix = /^[\\/]/.test(projectPath) ? SEP : '';
|
|
105
|
+
return `^${rootPrefix}${root}${SEP}(${relDirs.map(toPattern).join('|')})(${SEP}|$)`;
|
|
106
|
+
}
|
|
107
|
+
/** Project-relative AQE-managed `.claude` dirs to exclude, if `.claude` is a root exclude. */
|
|
108
|
+
function aqeClaudeDirsToExclude(projectPath, config) {
|
|
109
|
+
const rootDirs = config.excludeRootDirs ?? [];
|
|
110
|
+
if (!rootDirs.includes(AQE_CLAUDE_DIR))
|
|
111
|
+
return rootDirs.filter((d) => existsSync(join(projectPath, d)));
|
|
112
|
+
const others = rootDirs.filter((d) => d !== AQE_CLAUDE_DIR && existsSync(join(projectPath, d)));
|
|
113
|
+
return [...findAqeClaudeDirs(projectPath, config.excludeDirs), ...others];
|
|
114
|
+
}
|
|
115
|
+
function escapeRegex(value) {
|
|
116
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
117
|
+
}
|
|
80
118
|
// ============================================================================
|
|
81
119
|
// Tool-Specific Implementations
|
|
82
120
|
// ============================================================================
|
|
@@ -85,7 +123,17 @@ export function checkLOCTools() {
|
|
|
85
123
|
*/
|
|
86
124
|
async function tryClocCount(projectPath, config) {
|
|
87
125
|
try {
|
|
88
|
-
const args = ['--json', `--exclude-dir=${config.excludeDirs.join(',')}
|
|
126
|
+
const args = ['--json', `--exclude-dir=${config.excludeDirs.join(',')}`];
|
|
127
|
+
const notMatchDir = rootAnchoredDirsRegex(projectPath, aqeClaudeDirsToExclude(projectPath, config));
|
|
128
|
+
// --fullpath makes --not-match-d/-f see full paths, so the AQE-managed
|
|
129
|
+
// .claude dirs (root, or next to a nested .agentic-qe) are excluded
|
|
130
|
+
// without dropping other same-named dirs (#999 review N4 / round 2b).
|
|
131
|
+
if (notMatchDir)
|
|
132
|
+
args.push('--fullpath', `--not-match-d=${notMatchDir}`);
|
|
133
|
+
const notMatch = excludedFileNamesRegex(config.excludeFiles);
|
|
134
|
+
if (notMatch)
|
|
135
|
+
args.push(`--not-match-f=${notMatch}`);
|
|
136
|
+
args.push(projectPath);
|
|
89
137
|
const result = spawnSync('cloc', args, {
|
|
90
138
|
encoding: 'utf-8',
|
|
91
139
|
timeout: config.timeout,
|
|
@@ -134,8 +182,19 @@ async function tryTokeiCount(projectPath, config) {
|
|
|
134
182
|
for (const dir of config.excludeDirs) {
|
|
135
183
|
args.push('-e', dir);
|
|
136
184
|
}
|
|
137
|
-
|
|
185
|
+
// #999: lockfiles are generated, not code (tokei -e takes gitignore-style names)
|
|
186
|
+
for (const file of config.excludeFiles ?? []) {
|
|
187
|
+
args.push('-e', file);
|
|
188
|
+
}
|
|
189
|
+
// A leading '/' anchors a tokei (gitignore-style) exclude at the directory
|
|
190
|
+
// tokei walks, so run it IN the project on '.' (round 2b: with an absolute
|
|
191
|
+
// path argument the anchored patterns matched nothing).
|
|
192
|
+
for (const rel of aqeClaudeDirsToExclude(projectPath, config)) {
|
|
193
|
+
args.push('-e', `/${rel}`);
|
|
194
|
+
}
|
|
195
|
+
args.push('.');
|
|
138
196
|
const result = spawnSync('tokei', args, {
|
|
197
|
+
cwd: projectPath,
|
|
139
198
|
encoding: 'utf-8',
|
|
140
199
|
timeout: config.timeout,
|
|
141
200
|
maxBuffer: 10 * 1024 * 1024, // 10MB buffer (reduced for memory safety)
|
|
@@ -237,6 +296,8 @@ function manualLOCCount(projectPath, config) {
|
|
|
237
296
|
const byLanguage = {};
|
|
238
297
|
let total = 0;
|
|
239
298
|
const excludeSet = new Set(config.excludeDirs);
|
|
299
|
+
const excludeFileSet = new Set(config.excludeFiles ?? []);
|
|
300
|
+
const rootExcludeSet = new Set(config.excludeRootDirs ?? []);
|
|
240
301
|
// Max file size to read (2MB) — skip minified bundles, generated files
|
|
241
302
|
const MAX_FILE_SIZE = 2 * 1024 * 1024;
|
|
242
303
|
function walkDirectory(dirPath, depth) {
|
|
@@ -255,12 +316,17 @@ function manualLOCCount(projectPath, config) {
|
|
|
255
316
|
const fullPath = join(dirPath, entry.name);
|
|
256
317
|
if (entry.isDirectory()) {
|
|
257
318
|
// Skip excluded directories (exact match or glob-like suffix match)
|
|
258
|
-
if (excludeSet.has(entry.name) || entry.name.startsWith('.')
|
|
319
|
+
if (excludeSet.has(entry.name) || entry.name.startsWith('.') ||
|
|
320
|
+
(rootExcludeSet.has(entry.name) &&
|
|
321
|
+
(dirPath === projectPath || existsSync(join(dirPath, AQE_STATE_DIR))))) {
|
|
259
322
|
continue;
|
|
260
323
|
}
|
|
261
324
|
walkDirectory(fullPath, depth + 1);
|
|
262
325
|
}
|
|
263
326
|
else if (entry.isFile()) {
|
|
327
|
+
// #999: skip lockfiles and other generated files by exact name
|
|
328
|
+
if (excludeFileSet.has(entry.name))
|
|
329
|
+
continue;
|
|
264
330
|
const ext = extname(entry.name);
|
|
265
331
|
const language = getLanguageForExtension(ext);
|
|
266
332
|
if (language) {
|
|
@@ -17,6 +17,7 @@ import { createRequire } from 'module';
|
|
|
17
17
|
import { existsSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync } from 'fs';
|
|
18
18
|
import { tmpdir } from 'os';
|
|
19
19
|
import { join, extname, resolve } from 'path';
|
|
20
|
+
import { AQE_STATE_DIR } from '../../../../shared/aqe-managed-dirs.js';
|
|
20
21
|
import { DEFAULT_METRIC_CONFIG, } from './interfaces.js';
|
|
21
22
|
import { safeJsonParse } from '../../../../shared/safe-json.js';
|
|
22
23
|
import { ownListingProcess } from './listing-process-owner.js';
|
|
@@ -478,7 +479,9 @@ function countTestsByFilePattern(projectPath, config) {
|
|
|
478
479
|
const fullPath = join(dirPath, entry.name);
|
|
479
480
|
if (entry.isDirectory()) {
|
|
480
481
|
// Skip excluded directories
|
|
481
|
-
if (config.excludeDirs.includes(entry.name)
|
|
482
|
+
if (config.excludeDirs.includes(entry.name) ||
|
|
483
|
+
((config.excludeRootDirs ?? []).includes(entry.name) &&
|
|
484
|
+
(dirPath === projectPath || existsSync(join(dirPath, AQE_STATE_DIR))))) {
|
|
482
485
|
continue;
|
|
483
486
|
}
|
|
484
487
|
walkDirectory(fullPath);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which coverage metrics a report actually collected (#995, #1015, #1027).
|
|
3
|
+
*
|
|
4
|
+
* A metric with no data in the report (no branch entries, no functions, no
|
|
5
|
+
* statement detail — lcov and Cobertura carry none) is "not collected". Its
|
|
6
|
+
* summary figure is 0 by construction, and must be reported AND persisted as
|
|
7
|
+
* null — never as 0% (a fake low figure) nor as istanbul's 0/0 = 100%.
|
|
8
|
+
*/
|
|
9
|
+
import type { CoverageSummary, FileCoverage } from './interfaces';
|
|
10
|
+
/**
|
|
11
|
+
* The ONE key form for per-file coverage records (#1027 N7): the absolute
|
|
12
|
+
* path. Reports write absolute (istanbul) or project-relative (lcov
|
|
13
|
+
* `SF:src/a.ts`) paths; a relative one is resolved against the project root
|
|
14
|
+
* (or the cwd when none is known), so one file never has two records.
|
|
15
|
+
*/
|
|
16
|
+
export declare function fileCoverageKey(filePath: string, projectRoot?: string): string;
|
|
17
|
+
export interface CollectedMetrics {
|
|
18
|
+
branch: boolean;
|
|
19
|
+
function: boolean;
|
|
20
|
+
statement: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Which optional metrics the files carry. Line coverage is always collected. */
|
|
23
|
+
export declare function collectedMetrics(files: readonly FileCoverage[]): CollectedMetrics;
|
|
24
|
+
/** A summary as it is reported and persisted: uncollected metrics are null. */
|
|
25
|
+
export interface CollectedSummary {
|
|
26
|
+
line: number;
|
|
27
|
+
branch: number | null;
|
|
28
|
+
function: number | null;
|
|
29
|
+
statement: number | null;
|
|
30
|
+
files: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function collectedSummary(summary: CoverageSummary, collected: CollectedMetrics): CollectedSummary;
|
|
33
|
+
//# sourceMappingURL=collected-metrics.d.ts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which coverage metrics a report actually collected (#995, #1015, #1027).
|
|
3
|
+
*
|
|
4
|
+
* A metric with no data in the report (no branch entries, no functions, no
|
|
5
|
+
* statement detail — lcov and Cobertura carry none) is "not collected". Its
|
|
6
|
+
* summary figure is 0 by construction, and must be reported AND persisted as
|
|
7
|
+
* null — never as 0% (a fake low figure) nor as istanbul's 0/0 = 100%.
|
|
8
|
+
*/
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
/**
|
|
11
|
+
* The ONE key form for per-file coverage records (#1027 N7): the absolute
|
|
12
|
+
* path. Reports write absolute (istanbul) or project-relative (lcov
|
|
13
|
+
* `SF:src/a.ts`) paths; a relative one is resolved against the project root
|
|
14
|
+
* (or the cwd when none is known), so one file never has two records.
|
|
15
|
+
*/
|
|
16
|
+
export function fileCoverageKey(filePath, projectRoot) {
|
|
17
|
+
return path.isAbsolute(filePath) ? path.normalize(filePath) : path.resolve(projectRoot ?? process.cwd(), filePath);
|
|
18
|
+
}
|
|
19
|
+
/** Which optional metrics the files carry. Line coverage is always collected. */
|
|
20
|
+
export function collectedMetrics(files) {
|
|
21
|
+
return {
|
|
22
|
+
branch: files.some(f => f.branches.total > 0),
|
|
23
|
+
function: files.some(f => f.functions.total > 0),
|
|
24
|
+
statement: files.some(f => f.statements.total > 0),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function collectedSummary(summary, collected) {
|
|
28
|
+
return {
|
|
29
|
+
line: summary.line,
|
|
30
|
+
branch: collected.branch ? summary.branch : null,
|
|
31
|
+
function: collected.function ? summary.function : null,
|
|
32
|
+
statement: collected.statement ? summary.statement : null,
|
|
33
|
+
files: summary.files,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=collected-metrics.js.map
|
|
@@ -7,6 +7,7 @@ import { LoggerFactory } from '../../logging/index.js';
|
|
|
7
7
|
import { ok, err } from '../../shared/types/index.js';
|
|
8
8
|
import { toError } from '../../shared/error-utils.js';
|
|
9
9
|
import { createEvent, CoverageAnalysisEvents, } from '../../shared/events/index.js';
|
|
10
|
+
import { isMeasuredGapRequest, } from './interfaces.js';
|
|
10
11
|
import { CoverageAnalyzerService, GapDetectorService, RiskScorerService, } from './services/index.js';
|
|
11
12
|
import { GhostCoverageAnalyzerService } from './services/ghost-coverage-analyzer.js';
|
|
12
13
|
import { createHNSWIndex } from './services/hnsw-index.js';
|
|
@@ -361,7 +362,9 @@ export class CoverageAnalysisCoordinator extends BaseDomainCoordinator {
|
|
|
361
362
|
return err(new Error('Coverage analysis paused: topology is in critical state'));
|
|
362
363
|
}
|
|
363
364
|
const result = await this.coverageAnalyzer.analyze(request);
|
|
364
|
-
|
|
365
|
+
// #1008: subscribers (quality-assessment) store the report as
|
|
366
|
+
// `coverage:latest`. A static estimate must never reach them.
|
|
367
|
+
if (result.success && result.value.measured !== false) {
|
|
365
368
|
// Publish coverage report event
|
|
366
369
|
await this.publishCoverageReport(result.value);
|
|
367
370
|
}
|
|
@@ -402,8 +405,12 @@ export class CoverageAnalysisCoordinator extends BaseDomainCoordinator {
|
|
|
402
405
|
}
|
|
403
406
|
verifiedGaps.push(gap);
|
|
404
407
|
}
|
|
405
|
-
// Publish gap detection events for verified high-risk gaps
|
|
406
|
-
|
|
408
|
+
// Publish gap detection events for verified high-risk gaps — only for
|
|
409
|
+
// MEASURED coverage (#1014). Consumers learn from these events
|
|
410
|
+
// (learning-optimization experiences, code/defect-intel KV).
|
|
411
|
+
if (isMeasuredGapRequest(request)) {
|
|
412
|
+
await this.publishGapEvents(verifiedGaps);
|
|
413
|
+
}
|
|
407
414
|
// Return result with verified gaps
|
|
408
415
|
return ok({
|
|
409
416
|
...result.value,
|
|
@@ -477,7 +484,9 @@ export class CoverageAnalysisCoordinator extends BaseDomainCoordinator {
|
|
|
477
484
|
const date = new Date(timestamp);
|
|
478
485
|
if (date >= timeRange.start && date <= timeRange.end) {
|
|
479
486
|
const summary = await this.memory.get(key);
|
|
480
|
-
|
|
487
|
+
// #1014: only measured snapshots are trend points. Unstamped legacy
|
|
488
|
+
// snapshots (estimates were written here up to 3.15.4) are skipped.
|
|
489
|
+
if (summary && summary.measured === true && Number.isFinite(summary.line)) {
|
|
481
490
|
dataPoints.push({ date, coverage: summary });
|
|
482
491
|
}
|
|
483
492
|
}
|
|
@@ -609,10 +618,13 @@ export class CoverageAnalysisCoordinator extends BaseDomainCoordinator {
|
|
|
609
618
|
const payload = {
|
|
610
619
|
reportId: crypto.randomUUID(),
|
|
611
620
|
line: report.summary.line,
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
621
|
+
// #1027 B2: an uncollected metric travels as null, never as its 0.
|
|
622
|
+
branch: report.collected && !report.collected.branch ? null : report.summary.branch,
|
|
623
|
+
function: report.collected && !report.collected.function ? null : report.summary.function,
|
|
624
|
+
statement: report.collected && !report.collected.statement ? null : report.summary.statement,
|
|
615
625
|
files: report.summary.files,
|
|
626
|
+
measured: true,
|
|
627
|
+
...(report.runStatus ? { runStatus: report.runStatus } : {}),
|
|
616
628
|
};
|
|
617
629
|
const event = createEvent(CoverageAnalysisEvents.CoverageReportCreated, 'coverage-analysis', payload);
|
|
618
630
|
await this.eventBus.publish(event);
|
|
@@ -627,6 +639,9 @@ export class CoverageAnalysisCoordinator extends BaseDomainCoordinator {
|
|
|
627
639
|
uncoveredLines: gap.lines,
|
|
628
640
|
uncoveredBranches: gap.branches,
|
|
629
641
|
riskScore: gap.riskScore,
|
|
642
|
+
// #1014: provenance — only measured gaps are ever published.
|
|
643
|
+
measured: true,
|
|
644
|
+
coverageMethod: 'instrumented-report',
|
|
630
645
|
};
|
|
631
646
|
const event = createEvent(CoverageAnalysisEvents.CoverageGapDetected, 'coverage-analysis', payload);
|
|
632
647
|
await this.eventBus.publish(event);
|
|
@@ -19,10 +19,43 @@ export interface AnalyzeCoverageRequest {
|
|
|
19
19
|
coverageData: CoverageData;
|
|
20
20
|
threshold?: number;
|
|
21
21
|
includeFileDetails?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether `coverageData` came from instrumentation (#1008). `false` marks a
|
|
24
|
+
* static estimate: it is analyzed and returned, but never persisted as
|
|
25
|
+
* `coverage:latest`, history, per-file coverage or quality evidence.
|
|
26
|
+
* Takes precedence over `coverageData.instrumented`. Fail-closed: when both
|
|
27
|
+
* are absent the data is treated as UNMEASURED and nothing is persisted.
|
|
28
|
+
*/
|
|
29
|
+
measured?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Outcome of the test run that produced `coverageData`, when one ran
|
|
32
|
+
* (#1027 N4). Coverage from a run whose tests failed is still a
|
|
33
|
+
* measurement: it is persisted, stamped `runStatus: 'failed'`; the failure
|
|
34
|
+
* itself is carried by testsPassing.
|
|
35
|
+
*/
|
|
36
|
+
runStatus?: 'passed' | 'failed';
|
|
37
|
+
/**
|
|
38
|
+
* Counts of the test run behind `coverageData`, when one ran (#1027 NB1).
|
|
39
|
+
* Its testsPassing is recorded together with the coverage, under one runId,
|
|
40
|
+
* so failing-run coverage never pairs with a stale testsPassing.
|
|
41
|
+
*/
|
|
42
|
+
testRun?: {
|
|
43
|
+
runId: string;
|
|
44
|
+
passed: number;
|
|
45
|
+
failed: number;
|
|
46
|
+
skipped?: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Project root that relative report paths (lcov `SF:src/a.ts`) resolve
|
|
50
|
+
* against, so per-file records use ONE key form: the absolute path (#1027 N7).
|
|
51
|
+
*/
|
|
52
|
+
projectRoot?: string;
|
|
22
53
|
}
|
|
23
54
|
export interface CoverageData {
|
|
24
55
|
files: FileCoverage[];
|
|
25
56
|
summary: CoverageSummary;
|
|
57
|
+
/** Set by producers that know their provenance; `false` = static estimate (#1008). */
|
|
58
|
+
instrumented?: boolean;
|
|
26
59
|
}
|
|
27
60
|
export interface FileCoverage {
|
|
28
61
|
path: string;
|
|
@@ -57,6 +90,23 @@ export interface CoverageReport {
|
|
|
57
90
|
meetsThreshold: boolean;
|
|
58
91
|
delta?: CoverageDelta;
|
|
59
92
|
recommendations: string[];
|
|
93
|
+
/**
|
|
94
|
+
* False when the report was computed from a static estimate (#1008). Such a
|
|
95
|
+
* report was not persisted and must not be published or stored as evidence.
|
|
96
|
+
*/
|
|
97
|
+
measured?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Which optional metrics the report collected (#1027 B2). `summary` holds 0
|
|
100
|
+
* for an uncollected metric by construction; consumers must report and
|
|
101
|
+
* persist it as null.
|
|
102
|
+
*/
|
|
103
|
+
collected?: {
|
|
104
|
+
branch: boolean;
|
|
105
|
+
function: boolean;
|
|
106
|
+
statement: boolean;
|
|
107
|
+
};
|
|
108
|
+
/** Outcome of the test run behind the report, when known (#1027 N4). */
|
|
109
|
+
runStatus?: 'passed' | 'failed';
|
|
60
110
|
}
|
|
61
111
|
export interface CoverageDelta {
|
|
62
112
|
line: number;
|
|
@@ -69,7 +119,16 @@ export interface GapDetectionRequest {
|
|
|
69
119
|
coverageData: CoverageData;
|
|
70
120
|
minCoverage?: number;
|
|
71
121
|
prioritize?: 'risk' | 'size' | 'recent-changes';
|
|
122
|
+
/**
|
|
123
|
+
* Provenance of `coverageData` (#1014), as for AnalyzeCoverageRequest.
|
|
124
|
+
* Takes precedence over `coverageData.instrumented`. Fail-closed: gaps from
|
|
125
|
+
* data that is not explicitly measured are returned but never learned from
|
|
126
|
+
* (no gap-pattern vectors) nor published as CoverageGapDetected.
|
|
127
|
+
*/
|
|
128
|
+
measured?: boolean;
|
|
72
129
|
}
|
|
130
|
+
/** Whether a gap-detection request carries measured coverage (#1014, fail-closed). */
|
|
131
|
+
export declare function isMeasuredGapRequest(request: GapDetectionRequest): boolean;
|
|
73
132
|
export interface CoverageGaps {
|
|
74
133
|
gaps: CoverageGap[];
|
|
75
134
|
totalUncoveredLines: number;
|
|
@@ -2,5 +2,10 @@
|
|
|
2
2
|
* Agentic QE v3 - Coverage Analysis Domain Interface
|
|
3
3
|
* O(log n) coverage gap detection with HNSW
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
/** Whether a gap-detection request carries measured coverage (#1014, fail-closed). */
|
|
6
|
+
export function isMeasuredGapRequest(request) {
|
|
7
|
+
if (typeof request.measured === 'boolean')
|
|
8
|
+
return request.measured;
|
|
9
|
+
return request.coverageData.instrumented === true;
|
|
10
|
+
}
|
|
6
11
|
//# sourceMappingURL=interfaces.js.map
|
|
@@ -60,10 +60,16 @@ export class CoverageAnalysisPlugin extends BaseDomainPlugin {
|
|
|
60
60
|
this._activeAnalyses++;
|
|
61
61
|
this.updateAgentMetrics();
|
|
62
62
|
try {
|
|
63
|
+
// #1008: coverage numbers supplied in a task payload (e.g. MCP
|
|
64
|
+
// `task_submit`) are caller claims, not an instrumented run. Never
|
|
65
|
+
// trust a caller-supplied `measured`/`instrumented` flag: analyze
|
|
66
|
+
// and return the data, but do not persist it as coverage evidence.
|
|
67
|
+
const { instrumented: _claimed, ...callerData } = coverageData;
|
|
63
68
|
return await this.coordinator.analyze({
|
|
64
|
-
coverageData,
|
|
69
|
+
coverageData: callerData,
|
|
65
70
|
threshold: payload.threshold,
|
|
66
71
|
includeFileDetails: payload.includeFileDetails,
|
|
72
|
+
measured: false,
|
|
67
73
|
});
|
|
68
74
|
}
|
|
69
75
|
finally {
|
|
@@ -8,6 +8,13 @@ import { Result } from '../../../shared/types';
|
|
|
8
8
|
import { MemoryBackend } from '../../../kernel/interfaces';
|
|
9
9
|
import { AnalyzeCoverageRequest, CoverageReport, CoverageData, CoverageSummary, CoverageGaps, CoverageGap } from '../interfaces';
|
|
10
10
|
import type { HybridRouter } from '../../../shared/llm';
|
|
11
|
+
/**
|
|
12
|
+
* Whether an analyze request carries instrumented (measured) coverage (#1008).
|
|
13
|
+
* Fail-closed: an explicit `request.measured` wins; otherwise only data a
|
|
14
|
+
* producer marked `instrumented: true` is measured. Anything without
|
|
15
|
+
* provenance is analyzed and returned, but never persisted as evidence.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isMeasuredCoverage(request: AnalyzeCoverageRequest): boolean;
|
|
11
18
|
export interface ICoverageAnalysisService {
|
|
12
19
|
/** Analyze coverage from reports */
|
|
13
20
|
analyze(request: AnalyzeCoverageRequest): Promise<Result<CoverageReport, Error>>;
|