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,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Shared CLI coverage verdict (#995, #1010, #1012)
|
|
3
|
+
*
|
|
4
|
+
* One resolution and one verdict for every CLI surface that reports coverage
|
|
5
|
+
* (`aqe coverage`, the `aqe ci` coverage phase), built on the same shared
|
|
6
|
+
* functions as the MCP `coverage_analyze_sublinear` handler
|
|
7
|
+
* (`resolveExistingCoverage`, `thresholdVerdict`, `reconcileRecommendations`):
|
|
8
|
+
*
|
|
9
|
+
* - measured — an instrumented report covers the target: judged on the
|
|
10
|
+
* metrics the report collected (an uncollected metric is null,
|
|
11
|
+
* never 0%, and is left out of the threshold);
|
|
12
|
+
* - unmeasured — the report has no entry for the target, the runner ran 0
|
|
13
|
+
* tests, or only test files were reported: no figure, exit 3;
|
|
14
|
+
* - estimate — no report exists, so the CLI shows a labelled STATIC
|
|
15
|
+
* ESTIMATE. It carries no threshold verdict, is never
|
|
16
|
+
* persisted as evidence, and also exits 3: nothing was measured;
|
|
17
|
+
* - error — the target is missing or the given report is unreadable.
|
|
18
|
+
*/
|
|
19
|
+
import { type CoverageData } from './coverage-data.js';
|
|
20
|
+
import { type NoDataReason } from '../../coordination/handlers/coverage-target.js';
|
|
21
|
+
/** `aqe coverage` exit code when no coverage measurement exists for the target (#995). */
|
|
22
|
+
export declare const EXIT_UNMEASURED = 3;
|
|
23
|
+
/** Provenance labels, the same vocabulary as MCP `coverage_analyze_sublinear`. */
|
|
24
|
+
export declare const MEASURED_METHOD = "instrumented-report";
|
|
25
|
+
export declare const ESTIMATE_METHOD = "static-estimation";
|
|
26
|
+
export type CliCoverage = {
|
|
27
|
+
kind: 'data';
|
|
28
|
+
data: CoverageData;
|
|
29
|
+
projectRoot?: string;
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'no-data';
|
|
32
|
+
reason: NoDataReason;
|
|
33
|
+
message: string;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'no-sources';
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Resolve the coverage data for a CLI target (#995).
|
|
39
|
+
*
|
|
40
|
+
* Uses the SAME resolution and verdict as the MCP handler
|
|
41
|
+
* (`resolveExistingCoverage`), so CLI and MCP cannot disagree about what a
|
|
42
|
+
* report says for a target:
|
|
43
|
+
* - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
|
|
44
|
+
* directly;
|
|
45
|
+
* - a directory or source file is scoped against the instrumented report of
|
|
46
|
+
* its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
|
|
47
|
+
* - with no report at the project root, the CLI falls back to its labelled
|
|
48
|
+
* heuristic estimate (the CLI never runs the test suite).
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveCliCoverageData(targetPath: string, log?: (message: string) => void): Promise<CliCoverage>;
|
|
51
|
+
/** Which optional metrics an instrumented report actually carries. */
|
|
52
|
+
export declare function metricsCollected(data: CoverageData): {
|
|
53
|
+
branch: boolean;
|
|
54
|
+
function: boolean;
|
|
55
|
+
statement: boolean;
|
|
56
|
+
};
|
|
57
|
+
/** The slice of the coverage-analysis domain API the verdict needs. */
|
|
58
|
+
export interface CoverageAnalyzeAPI {
|
|
59
|
+
analyze(request: {
|
|
60
|
+
coverageData: CoverageData;
|
|
61
|
+
threshold?: number;
|
|
62
|
+
includeFileDetails?: boolean;
|
|
63
|
+
measured?: boolean;
|
|
64
|
+
projectRoot?: string;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
success: boolean;
|
|
67
|
+
value?: unknown;
|
|
68
|
+
error?: Error;
|
|
69
|
+
}>;
|
|
70
|
+
}
|
|
71
|
+
/** Summary figures; `null` = not collected / not measured — never 0%. */
|
|
72
|
+
export interface NullableSummary {
|
|
73
|
+
line: number | null;
|
|
74
|
+
branch: number | null;
|
|
75
|
+
function: number | null;
|
|
76
|
+
statement: number | null;
|
|
77
|
+
}
|
|
78
|
+
export type CliCoverageOutcome = {
|
|
79
|
+
kind: 'no-sources';
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'error';
|
|
82
|
+
reason: NoDataReason;
|
|
83
|
+
message: string;
|
|
84
|
+
} | {
|
|
85
|
+
kind: 'unmeasured';
|
|
86
|
+
reason: NoDataReason;
|
|
87
|
+
message: string;
|
|
88
|
+
} | {
|
|
89
|
+
kind: 'analysis-failed';
|
|
90
|
+
message: string;
|
|
91
|
+
} | {
|
|
92
|
+
kind: 'estimate';
|
|
93
|
+
data: CoverageData;
|
|
94
|
+
/** Estimated figures — for display only. */
|
|
95
|
+
summary: NullableSummary & {
|
|
96
|
+
files: number;
|
|
97
|
+
};
|
|
98
|
+
message: string;
|
|
99
|
+
} | {
|
|
100
|
+
kind: 'measured';
|
|
101
|
+
data: CoverageData;
|
|
102
|
+
summary: NullableSummary & {
|
|
103
|
+
files: number;
|
|
104
|
+
};
|
|
105
|
+
collected: {
|
|
106
|
+
branch: boolean;
|
|
107
|
+
function: boolean;
|
|
108
|
+
statement: boolean;
|
|
109
|
+
};
|
|
110
|
+
verdict: {
|
|
111
|
+
overall: number;
|
|
112
|
+
meetsThreshold: boolean;
|
|
113
|
+
};
|
|
114
|
+
recommendations: string[];
|
|
115
|
+
};
|
|
116
|
+
/** Caller-facing explanation of a static estimate. */
|
|
117
|
+
export declare function estimateMessage(): string;
|
|
118
|
+
/**
|
|
119
|
+
* Resolve, analyze and judge coverage for a CLI target. Shared by
|
|
120
|
+
* `aqe coverage` and the `aqe ci` coverage phase.
|
|
121
|
+
*/
|
|
122
|
+
export declare function evaluateCliCoverage(api: CoverageAnalyzeAPI, targetPath: string, threshold: number, log?: (message: string) => void): Promise<CliCoverageOutcome>;
|
|
123
|
+
/**
|
|
124
|
+
* Exit code: 0 meets (by more than 5%), 1 below / error, 2 within 5% above,
|
|
125
|
+
* 3 UNMEASURED (not in the report, 0 tests, test-only report, or estimate only).
|
|
126
|
+
*/
|
|
127
|
+
export declare function coverageExitCode(outcome: CliCoverageOutcome, threshold: number): number;
|
|
128
|
+
/** The `-F json` document for an outcome (same shape in every case). */
|
|
129
|
+
export declare function coverageJson(outcome: CliCoverageOutcome, threshold: number, target: string): Record<string, unknown>;
|
|
130
|
+
//# sourceMappingURL=coverage-verdict.d.ts.map
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Shared CLI coverage verdict (#995, #1010, #1012)
|
|
3
|
+
*
|
|
4
|
+
* One resolution and one verdict for every CLI surface that reports coverage
|
|
5
|
+
* (`aqe coverage`, the `aqe ci` coverage phase), built on the same shared
|
|
6
|
+
* functions as the MCP `coverage_analyze_sublinear` handler
|
|
7
|
+
* (`resolveExistingCoverage`, `thresholdVerdict`, `reconcileRecommendations`):
|
|
8
|
+
*
|
|
9
|
+
* - measured — an instrumented report covers the target: judged on the
|
|
10
|
+
* metrics the report collected (an uncollected metric is null,
|
|
11
|
+
* never 0%, and is left out of the threshold);
|
|
12
|
+
* - unmeasured — the report has no entry for the target, the runner ran 0
|
|
13
|
+
* tests, or only test files were reported: no figure, exit 3;
|
|
14
|
+
* - estimate — no report exists, so the CLI shows a labelled STATIC
|
|
15
|
+
* ESTIMATE. It carries no threshold verdict, is never
|
|
16
|
+
* persisted as evidence, and also exits 3: nothing was measured;
|
|
17
|
+
* - error — the target is missing or the given report is unreadable.
|
|
18
|
+
*/
|
|
19
|
+
import chalk from 'chalk';
|
|
20
|
+
import { walkSourceFiles } from './file-discovery.js';
|
|
21
|
+
import { buildCoverageData, summarizeCoverage } from './coverage-data.js';
|
|
22
|
+
import { describeNoData, reconcileRecommendations, resolveExistingCoverage, thresholdVerdict, } from '../../coordination/handlers/coverage-target.js';
|
|
23
|
+
/** `aqe coverage` exit code when no coverage measurement exists for the target (#995). */
|
|
24
|
+
export const EXIT_UNMEASURED = 3;
|
|
25
|
+
/** Provenance labels, the same vocabulary as MCP `coverage_analyze_sublinear`. */
|
|
26
|
+
export const MEASURED_METHOD = 'instrumented-report';
|
|
27
|
+
export const ESTIMATE_METHOD = 'static-estimation';
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the coverage data for a CLI target (#995).
|
|
30
|
+
*
|
|
31
|
+
* Uses the SAME resolution and verdict as the MCP handler
|
|
32
|
+
* (`resolveExistingCoverage`), so CLI and MCP cannot disagree about what a
|
|
33
|
+
* report says for a target:
|
|
34
|
+
* - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
|
|
35
|
+
* directly;
|
|
36
|
+
* - a directory or source file is scoped against the instrumented report of
|
|
37
|
+
* its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
|
|
38
|
+
* - with no report at the project root, the CLI falls back to its labelled
|
|
39
|
+
* heuristic estimate (the CLI never runs the test suite).
|
|
40
|
+
*/
|
|
41
|
+
export async function resolveCliCoverageData(targetPath, log = message => console.log(message)) {
|
|
42
|
+
const existing = await resolveExistingCoverage(targetPath);
|
|
43
|
+
if (existing.status === 'target-missing') {
|
|
44
|
+
return { kind: 'no-data', reason: 'target-missing', message: describeNoData('target-missing', targetPath, null) };
|
|
45
|
+
}
|
|
46
|
+
if (existing.status === 'evaluated') {
|
|
47
|
+
const { evaluation, projectRoot } = existing;
|
|
48
|
+
if (evaluation.status === 'measured') {
|
|
49
|
+
const files = evaluation.files;
|
|
50
|
+
return { kind: 'data', data: { files, summary: summarizeCoverage(files), instrumented: true }, projectRoot };
|
|
51
|
+
}
|
|
52
|
+
return { kind: 'no-data', reason: evaluation.reason, message: describeNoData(evaluation.reason, targetPath, projectRoot) };
|
|
53
|
+
}
|
|
54
|
+
const sourceFiles = walkSourceFiles(existing.target, { includeTests: false });
|
|
55
|
+
if (sourceFiles.length === 0)
|
|
56
|
+
return { kind: 'no-sources' };
|
|
57
|
+
log(chalk.gray(` Analyzing ${sourceFiles.length} files...\n`));
|
|
58
|
+
return { kind: 'data', data: buildCoverageData(sourceFiles, existing.projectRoot), projectRoot: existing.projectRoot };
|
|
59
|
+
}
|
|
60
|
+
/** Which optional metrics an instrumented report actually carries. */
|
|
61
|
+
export function metricsCollected(data) {
|
|
62
|
+
return {
|
|
63
|
+
branch: data.files.some(f => f.branches.total > 0),
|
|
64
|
+
function: data.files.some(f => f.functions.total > 0),
|
|
65
|
+
// #1027 N7: lcov / Cobertura carry no statement detail.
|
|
66
|
+
statement: data.files.some(f => f.statements.total > 0),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const isError = (reason) => reason === 'target-missing' || reason === 'unreadable-report';
|
|
70
|
+
/** Caller-facing explanation of a static estimate. */
|
|
71
|
+
export function estimateMessage() {
|
|
72
|
+
return 'UNMEASURED: no coverage report exists for this project, so these figures are a ' +
|
|
73
|
+
'STATIC ESTIMATE derived from source shape — not measured coverage. No threshold verdict ' +
|
|
74
|
+
'is given and nothing is stored as evidence. Run your tests with coverage first ' +
|
|
75
|
+
'(e.g. `npm test -- --coverage`) and re-run.';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve, analyze and judge coverage for a CLI target. Shared by
|
|
79
|
+
* `aqe coverage` and the `aqe ci` coverage phase.
|
|
80
|
+
*/
|
|
81
|
+
export async function evaluateCliCoverage(api, targetPath, threshold, log) {
|
|
82
|
+
const resolved = await resolveCliCoverageData(targetPath, log);
|
|
83
|
+
if (resolved.kind === 'no-sources')
|
|
84
|
+
return resolved;
|
|
85
|
+
if (resolved.kind === 'no-data') {
|
|
86
|
+
return isError(resolved.reason)
|
|
87
|
+
? { kind: 'error', reason: resolved.reason, message: resolved.message }
|
|
88
|
+
: { kind: 'unmeasured', reason: resolved.reason, message: resolved.message };
|
|
89
|
+
}
|
|
90
|
+
const data = resolved.data;
|
|
91
|
+
const measured = data.instrumented;
|
|
92
|
+
// #1008: a heuristic estimate is shown, never persisted as coverage evidence.
|
|
93
|
+
const result = await api.analyze({
|
|
94
|
+
coverageData: data, threshold, includeFileDetails: true, measured,
|
|
95
|
+
...(resolved.projectRoot ? { projectRoot: resolved.projectRoot } : {}),
|
|
96
|
+
});
|
|
97
|
+
if (!result.success || !result.value) {
|
|
98
|
+
return { kind: 'analysis-failed', message: result.error?.message || 'Coverage analysis failed' };
|
|
99
|
+
}
|
|
100
|
+
const report = result.value;
|
|
101
|
+
if (!measured) {
|
|
102
|
+
return { kind: 'estimate', data, summary: { ...report.summary }, message: estimateMessage() };
|
|
103
|
+
}
|
|
104
|
+
// #995 review NB5: a metric the report never collected is null — not 0 —
|
|
105
|
+
// and is left out of the threshold verdict (same rule as MCP).
|
|
106
|
+
const collected = metricsCollected(data);
|
|
107
|
+
const verdict = thresholdVerdict(report.summary, threshold, collected);
|
|
108
|
+
return {
|
|
109
|
+
kind: 'measured',
|
|
110
|
+
data,
|
|
111
|
+
collected,
|
|
112
|
+
verdict,
|
|
113
|
+
summary: {
|
|
114
|
+
...report.summary,
|
|
115
|
+
branch: collected.branch ? report.summary.branch : null,
|
|
116
|
+
function: collected.function ? report.summary.function : null,
|
|
117
|
+
statement: collected.statement ? report.summary.statement : null,
|
|
118
|
+
},
|
|
119
|
+
// NB-A: the shortfall advice comes from the same verdict (shared with MCP).
|
|
120
|
+
recommendations: reconcileRecommendations(report.recommendations ?? [], verdict, threshold, collected),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Exit code: 0 meets (by more than 5%), 1 below / error, 2 within 5% above,
|
|
125
|
+
* 3 UNMEASURED (not in the report, 0 tests, test-only report, or estimate only).
|
|
126
|
+
*/
|
|
127
|
+
export function coverageExitCode(outcome, threshold) {
|
|
128
|
+
switch (outcome.kind) {
|
|
129
|
+
case 'measured': {
|
|
130
|
+
const { overall, meetsThreshold } = outcome.verdict;
|
|
131
|
+
if (!meetsThreshold)
|
|
132
|
+
return 1;
|
|
133
|
+
return overall < threshold + 5 ? 2 : 0;
|
|
134
|
+
}
|
|
135
|
+
case 'estimate':
|
|
136
|
+
case 'unmeasured':
|
|
137
|
+
return EXIT_UNMEASURED;
|
|
138
|
+
case 'no-sources':
|
|
139
|
+
return 0;
|
|
140
|
+
default:
|
|
141
|
+
return 1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** The `-F json` document for an outcome (same shape in every case). */
|
|
145
|
+
export function coverageJson(outcome, threshold, target) {
|
|
146
|
+
const nulls = { line: null, branch: null, function: null, statement: null };
|
|
147
|
+
switch (outcome.kind) {
|
|
148
|
+
case 'measured':
|
|
149
|
+
return {
|
|
150
|
+
summary: outcome.summary,
|
|
151
|
+
meetsThreshold: outcome.verdict.meetsThreshold,
|
|
152
|
+
threshold,
|
|
153
|
+
recommendations: outcome.recommendations,
|
|
154
|
+
measured: true,
|
|
155
|
+
estimated: false,
|
|
156
|
+
coverageMethod: MEASURED_METHOD,
|
|
157
|
+
branchDataCollected: outcome.collected.branch,
|
|
158
|
+
functionDataCollected: outcome.collected.function,
|
|
159
|
+
statementDataCollected: outcome.collected.statement,
|
|
160
|
+
...(outcome.data.unmeasuredFiles?.length ? { unmeasuredFiles: outcome.data.unmeasuredFiles } : {}),
|
|
161
|
+
};
|
|
162
|
+
case 'estimate':
|
|
163
|
+
return {
|
|
164
|
+
summary: outcome.summary,
|
|
165
|
+
meetsThreshold: null,
|
|
166
|
+
threshold,
|
|
167
|
+
measured: false,
|
|
168
|
+
estimated: true,
|
|
169
|
+
unmeasured: true,
|
|
170
|
+
coverageMethod: ESTIMATE_METHOD,
|
|
171
|
+
reason: 'no-coverage-report',
|
|
172
|
+
target,
|
|
173
|
+
warning: outcome.message,
|
|
174
|
+
};
|
|
175
|
+
case 'unmeasured':
|
|
176
|
+
case 'error':
|
|
177
|
+
return {
|
|
178
|
+
summary: nulls,
|
|
179
|
+
meetsThreshold: null,
|
|
180
|
+
threshold,
|
|
181
|
+
measured: false,
|
|
182
|
+
unmeasured: outcome.kind === 'unmeasured',
|
|
183
|
+
reason: outcome.reason,
|
|
184
|
+
target,
|
|
185
|
+
warning: outcome.message,
|
|
186
|
+
};
|
|
187
|
+
case 'analysis-failed':
|
|
188
|
+
return { summary: nulls, meetsThreshold: null, threshold, measured: false, target, error: outcome.message };
|
|
189
|
+
case 'no-sources':
|
|
190
|
+
return { summary: nulls, meetsThreshold: null, threshold, measured: false, target, warning: 'No source files found' };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=coverage-verdict.js.map
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
10
10
|
import { join, extname } from 'path';
|
|
11
|
+
import { isAqeManagedDir } from '../../shared/aqe-managed-dirs.js';
|
|
11
12
|
// ============================================================================
|
|
12
13
|
// Source File Extensions by Language
|
|
13
14
|
// ============================================================================
|
|
@@ -77,6 +78,10 @@ export function walkSourceFiles(targetPath, options = {}) {
|
|
|
77
78
|
if (entry.isDirectory()) {
|
|
78
79
|
if (SKIP_DIRS.has(entry.name))
|
|
79
80
|
continue;
|
|
81
|
+
// #999: AQE state/assets are not source (.agentic-qe anywhere; .claude
|
|
82
|
+
// at the root or next to a nested .agentic-qe)
|
|
83
|
+
if (isAqeManagedDir(dir, entry.name, depth === 0))
|
|
84
|
+
continue;
|
|
80
85
|
walk(join(dir, entry.name), depth + 1);
|
|
81
86
|
}
|
|
82
87
|
else if (entry.isFile()) {
|
|
@@ -58,14 +58,28 @@ export interface ValidationResult {
|
|
|
58
58
|
export declare function validateRiskDecision(value: unknown): ValidationResult;
|
|
59
59
|
export declare function validateFindingVerdict(value: unknown): ValidationResult;
|
|
60
60
|
export declare function validateCoverageGap(value: unknown): ValidationResult;
|
|
61
|
+
/** #996: confidence cap for an approve that rests on static analysis alone (no gate). */
|
|
62
|
+
export declare const STATIC_APPROVAL_CONFIDENCE = 0.7;
|
|
61
63
|
/**
|
|
62
64
|
* Derive a RiskDecision from a quality-gate outcome (quality_assess boundary).
|
|
63
65
|
* Indeterminate gates (passed undefined) escalate rather than guess.
|
|
66
|
+
*
|
|
67
|
+
* #996: when key metrics are unmeasured the decision escalates with lowered
|
|
68
|
+
* confidence, whatever `passed` says — never approve on missing data. When
|
|
69
|
+
* `gateEvaluated` is false the rationale says plainly that no gate ran.
|
|
64
70
|
*/
|
|
65
71
|
export declare function buildRiskDecisionFromQualityGate(input: {
|
|
66
72
|
passed?: boolean;
|
|
67
73
|
qualityScore?: number;
|
|
68
74
|
recommendations?: string[];
|
|
75
|
+
/** Requested metrics that had no measured data. */
|
|
76
|
+
unmeasured?: string[];
|
|
77
|
+
/** Share of requested metrics that were measured, in [0, 1]. */
|
|
78
|
+
evidenceConfidence?: number;
|
|
79
|
+
/** False for static analysis: no quality gate was evaluated. */
|
|
80
|
+
gateEvaluated?: boolean;
|
|
81
|
+
/** Measured metrics that fail their own limit — conclusive, so the decision blocks. */
|
|
82
|
+
failedMetrics?: string[];
|
|
69
83
|
}): RiskDecision;
|
|
70
84
|
export declare const RISK_DECISION_SCHEMA: {
|
|
71
85
|
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
@@ -176,21 +176,62 @@ export function validateCoverageGap(value) {
|
|
|
176
176
|
// ============================================================================
|
|
177
177
|
// Builders — derive contract envelopes at MCP boundaries
|
|
178
178
|
// ============================================================================
|
|
179
|
+
/** #996: confidence cap for an approve that rests on static analysis alone (no gate). */
|
|
180
|
+
export const STATIC_APPROVAL_CONFIDENCE = 0.7;
|
|
179
181
|
/**
|
|
180
182
|
* Derive a RiskDecision from a quality-gate outcome (quality_assess boundary).
|
|
181
183
|
* Indeterminate gates (passed undefined) escalate rather than guess.
|
|
184
|
+
*
|
|
185
|
+
* #996: when key metrics are unmeasured the decision escalates with lowered
|
|
186
|
+
* confidence, whatever `passed` says — never approve on missing data. When
|
|
187
|
+
* `gateEvaluated` is false the rationale says plainly that no gate ran.
|
|
182
188
|
*/
|
|
183
189
|
export function buildRiskDecisionFromQualityGate(input) {
|
|
184
|
-
const { passed, qualityScore, recommendations = [] } = input;
|
|
190
|
+
const { passed, qualityScore, recommendations = [], unmeasured = [], failedMetrics = [], gateEvaluated, } = input;
|
|
191
|
+
const noGate = gateEvaluated === false ? ' (no quality gate was evaluated)' : '';
|
|
192
|
+
const score = typeof qualityScore === 'number' ? ` with score ${qualityScore}` : '';
|
|
193
|
+
// A measured failure cannot be rescued by metrics that were never measured.
|
|
194
|
+
if (failedMetrics.length > 0) {
|
|
195
|
+
const missing = unmeasured.length > 0 ? `; also unmeasured: ${unmeasured.join(', ')}` : '';
|
|
196
|
+
return {
|
|
197
|
+
contract: 'risk-decision@1',
|
|
198
|
+
decision: 'block',
|
|
199
|
+
riskFactors: [
|
|
200
|
+
`failed: ${failedMetrics.join(', ')}`,
|
|
201
|
+
...(unmeasured.length > 0 ? [`unmeasured: ${unmeasured.join(', ')}`] : []),
|
|
202
|
+
...recommendations,
|
|
203
|
+
].slice(0, 10),
|
|
204
|
+
confidence: 0.9,
|
|
205
|
+
rationale: `Measured ${failedMetrics.join(', ')} failed its threshold${missing}${noGate}`,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
if (unmeasured.length > 0) {
|
|
209
|
+
const share = typeof input.evidenceConfidence === 'number' && Number.isFinite(input.evidenceConfidence)
|
|
210
|
+
? Math.min(1, Math.max(0, input.evidenceConfidence))
|
|
211
|
+
: 0;
|
|
212
|
+
return {
|
|
213
|
+
contract: 'risk-decision@1',
|
|
214
|
+
decision: 'escalate',
|
|
215
|
+
riskFactors: [`unmeasured: ${unmeasured.join(', ')}`, ...recommendations].slice(0, 10),
|
|
216
|
+
confidence: Math.round(0.5 * share * 100) / 100,
|
|
217
|
+
rationale: `Insufficient evidence: ${unmeasured.join(', ')} not measured${noGate} — `
|
|
218
|
+
+ 'measure the missing metrics or run the measured quality gate before deciding',
|
|
219
|
+
};
|
|
220
|
+
}
|
|
185
221
|
const decision = passed === true ? 'approve' : passed === false ? 'block' : 'escalate';
|
|
222
|
+
const subject = gateEvaluated === false ? 'Static analysis' : 'Quality gate';
|
|
223
|
+
// #996 (N1): an approval no gate evaluated is weaker evidence than a gate pass.
|
|
224
|
+
const confidence = decision === 'escalate'
|
|
225
|
+
? 0.5
|
|
226
|
+
: decision === 'approve' && gateEvaluated === false ? STATIC_APPROVAL_CONFIDENCE : 0.9;
|
|
186
227
|
return {
|
|
187
228
|
contract: 'risk-decision@1',
|
|
188
229
|
decision,
|
|
189
230
|
riskFactors: recommendations.slice(0, 10),
|
|
190
|
-
confidence
|
|
231
|
+
confidence,
|
|
191
232
|
rationale: decision === 'escalate'
|
|
192
233
|
? 'Quality gate outcome indeterminate — manual review required'
|
|
193
|
-
:
|
|
234
|
+
: `${subject} ${passed ? 'passed' : 'failed'}${score}${noGate}`,
|
|
194
235
|
};
|
|
195
236
|
}
|
|
196
237
|
// ============================================================================
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* for live metrics — keeping execution fully deterministic (SQL-only).
|
|
11
11
|
*/
|
|
12
12
|
import { ok } from '../shared/types/index.js';
|
|
13
|
+
import { MEASURED_COVERAGE_SESSION_SQL } from '../feedback/coverage-session-provenance.js';
|
|
13
14
|
function tryGetDb() {
|
|
14
15
|
try {
|
|
15
16
|
// Dynamic import to avoid hard dependency — the module may not be initialised
|
|
@@ -45,8 +46,10 @@ const qualityGateCheck = {
|
|
|
45
46
|
try {
|
|
46
47
|
// Latest coverage from coverage_sessions
|
|
47
48
|
if (currentCoverage === null) {
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
// #1014: skip legacy estimate/unmeasured rows without provenance.
|
|
50
|
+
const row = db.prepare(`SELECT after_lines FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT 1`).get();
|
|
51
|
+
// #1027 N6: no measured session → unmeasured (null), never 0%.
|
|
52
|
+
currentCoverage = typeof row?.after_lines === 'number' ? row.after_lines : null;
|
|
50
53
|
}
|
|
51
54
|
// Test pass rate from recent test_outcomes
|
|
52
55
|
if (currentTestsPassingRate === null) {
|
|
@@ -70,16 +73,17 @@ const qualityGateCheck = {
|
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
|
-
// Apply defaults for anything still null
|
|
74
|
-
|
|
76
|
+
// Apply defaults for anything still null — except coverage (#1027 N6):
|
|
77
|
+
// unmeasured coverage stays null and fails its check (no evidence ≠ 0%).
|
|
78
|
+
const coverageMeasured = currentCoverage !== null;
|
|
75
79
|
currentTestsPassingRate = currentTestsPassingRate ?? 0;
|
|
76
80
|
currentBugs = currentBugs ?? 0;
|
|
77
|
-
const coveragePassed = currentCoverage >= coverageMin;
|
|
81
|
+
const coveragePassed = currentCoverage !== null && currentCoverage >= coverageMin;
|
|
78
82
|
const testsPassed = currentTestsPassingRate >= testsPassingMin;
|
|
79
83
|
const bugsPassed = currentBugs <= maxBugs;
|
|
80
84
|
const passed = coveragePassed && testsPassed && bugsPassed;
|
|
81
85
|
// Score is a normalized 0-1 value
|
|
82
|
-
const coverageScore = Math.min(currentCoverage / coverageMin, 1);
|
|
86
|
+
const coverageScore = currentCoverage === null ? 0 : Math.min(currentCoverage / coverageMin, 1);
|
|
83
87
|
const testsScore = Math.min(currentTestsPassingRate / testsPassingMin, 1);
|
|
84
88
|
const bugsScore = maxBugs > 0 ? Math.max(0, 1 - currentBugs / maxBugs) : (currentBugs === 0 ? 1 : 0);
|
|
85
89
|
const score = (coverageScore + testsScore + bugsScore) / 3;
|
|
@@ -88,7 +92,10 @@ const qualityGateCheck = {
|
|
|
88
92
|
score: Math.round(score * 100) / 100,
|
|
89
93
|
source: typeof input.currentCoverage === 'number' ? 'input' : 'database',
|
|
90
94
|
details: {
|
|
91
|
-
coverage: {
|
|
95
|
+
coverage: {
|
|
96
|
+
current: currentCoverage, threshold: coverageMin, passed: coveragePassed,
|
|
97
|
+
...(coverageMeasured ? {} : { unmeasured: true }),
|
|
98
|
+
},
|
|
92
99
|
testsPassing: { current: currentTestsPassingRate, threshold: testsPassingMin, passed: testsPassed },
|
|
93
100
|
bugs: { current: currentBugs, threshold: maxBugs, passed: bugsPassed },
|
|
94
101
|
},
|
|
@@ -112,25 +119,29 @@ const coverageThresholdCheck = {
|
|
|
112
119
|
const db = tryGetDb();
|
|
113
120
|
if (db) {
|
|
114
121
|
try {
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
// #1014: skip legacy estimate/unmeasured rows without provenance.
|
|
123
|
+
const row = db.prepare(`SELECT after_lines FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT 1`).get();
|
|
124
|
+
// #1027 N6: no measured session → unmeasured (null), never 0%.
|
|
125
|
+
currentCoverage = typeof row?.after_lines === 'number' ? row.after_lines : null;
|
|
117
126
|
}
|
|
118
127
|
catch {
|
|
119
|
-
currentCoverage =
|
|
128
|
+
currentCoverage = null;
|
|
120
129
|
}
|
|
121
130
|
}
|
|
122
131
|
else {
|
|
123
|
-
currentCoverage =
|
|
132
|
+
currentCoverage = null;
|
|
124
133
|
}
|
|
125
134
|
}
|
|
126
|
-
|
|
127
|
-
const
|
|
135
|
+
// Unmeasured coverage fails the check (no evidence), with no fake gap.
|
|
136
|
+
const passed = currentCoverage !== null && currentCoverage >= minCoverage;
|
|
137
|
+
const gap = currentCoverage === null ? null : passed ? 0 : Math.round((minCoverage - currentCoverage) * 100) / 100;
|
|
128
138
|
return ok({
|
|
129
139
|
currentCoverage,
|
|
130
140
|
passed,
|
|
131
141
|
gap,
|
|
132
142
|
minCoverage,
|
|
133
143
|
source,
|
|
144
|
+
...(currentCoverage === null ? { unmeasured: true } : {}),
|
|
134
145
|
});
|
|
135
146
|
},
|
|
136
147
|
};
|
|
@@ -5,5 +5,13 @@
|
|
|
5
5
|
* Covers: index-code, predict-defects
|
|
6
6
|
*/
|
|
7
7
|
import type { TaskHandlerContext } from './handler-types';
|
|
8
|
+
/** Project metric summary returned by the MCP index-code handler (#999). */
|
|
9
|
+
export interface IndexProjectMetricsSummary {
|
|
10
|
+
root: string;
|
|
11
|
+
loc: number;
|
|
12
|
+
locByLanguage: Record<string, number>;
|
|
13
|
+
tests: number;
|
|
14
|
+
toolsUsed: string[];
|
|
15
|
+
}
|
|
8
16
|
export declare function registerCodeIntelligenceHandlers(ctx: TaskHandlerContext): void;
|
|
9
17
|
//# sourceMappingURL=code-intelligence-handlers.d.ts.map
|
|
@@ -9,6 +9,39 @@ import * as path from 'path';
|
|
|
9
9
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
11
|
import { discoverSourceFiles } from './handler-utils.js';
|
|
12
|
+
import { resolveProjectRootFromPaths } from '../../domains/code-intelligence/project-root-resolver.js';
|
|
13
|
+
import { createLogger } from '../../logging/logger-factory.js';
|
|
14
|
+
const logger = createLogger('CodeIntelligenceHandlers');
|
|
15
|
+
async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
|
|
16
|
+
if (!ctx.getCodeIntelligenceCoordinator)
|
|
17
|
+
return undefined;
|
|
18
|
+
const root = resolveProjectRootFromPaths(indexedFiles, { target: path.resolve(targetPath) });
|
|
19
|
+
if (!root) {
|
|
20
|
+
logger.debug('Skipping project metrics: no project root resolved (filesystem root or no paths)');
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const coordinator = await ctx.getCodeIntelligenceCoordinator();
|
|
25
|
+
if (!coordinator)
|
|
26
|
+
return undefined;
|
|
27
|
+
const metrics = await coordinator.collectProjectMetrics(root);
|
|
28
|
+
if (!metrics.success) {
|
|
29
|
+
logger.debug(`Project metrics unavailable: ${metrics.error.message}`);
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
root,
|
|
34
|
+
loc: metrics.value.loc.total,
|
|
35
|
+
locByLanguage: metrics.value.loc.byLanguage,
|
|
36
|
+
tests: metrics.value.tests.total,
|
|
37
|
+
toolsUsed: metrics.value.toolsUsed,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
logger.debug(`Project metrics unavailable: ${toError(error).message}`);
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
12
45
|
export function registerCodeIntelligenceHandlers(ctx) {
|
|
13
46
|
// Register code indexing handler - REAL IMPLEMENTATION
|
|
14
47
|
ctx.registerHandler('index-code', async (task) => {
|
|
@@ -45,6 +78,11 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
45
78
|
return result;
|
|
46
79
|
}
|
|
47
80
|
const indexResult = result.value;
|
|
81
|
+
// #999 MCP-CLI parity: `aqe code index` runs the coordinator's project
|
|
82
|
+
// metric step (LOC, tests, tools); run the same step here, rooted at the
|
|
83
|
+
// caller's target the way #997 resolves it. Best-effort: indexing has
|
|
84
|
+
// already succeeded, so a metric failure only omits projectMetrics.
|
|
85
|
+
const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, filesToIndex);
|
|
48
86
|
// Detect languages from files
|
|
49
87
|
const detectedLanguages = new Set();
|
|
50
88
|
const extToLang = {
|
|
@@ -78,6 +116,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
78
116
|
duration: indexResult.duration,
|
|
79
117
|
errors: indexResult.errors,
|
|
80
118
|
warnings: indexResult.warnings,
|
|
119
|
+
...(projectMetrics ? { projectMetrics } : {}),
|
|
81
120
|
});
|
|
82
121
|
}
|
|
83
122
|
catch (error) {
|