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
|
@@ -10,8 +10,10 @@ import { DomainHandlerConfig } from './handler-factory';
|
|
|
10
10
|
import { TestGenerateParams, TestGenerateResult, TestExecuteParams, CoverageAnalyzeParams, CoverageAnalyzeResult, QualityAssessParams, SecurityScanParams, ContractValidateParams, AccessibilityTestParams, ChaosTestParams } from '../types';
|
|
11
11
|
import type { SecurityScanEvidence } from '../../domains/security-compliance/scan-evidence.js';
|
|
12
12
|
import type { SecurityCoverage } from '../../domains/security-compliance/interfaces.js';
|
|
13
|
+
import type { ExcludedQualityFile, PartialQualityMetric } from '../../domains/quality-assessment/interfaces.js';
|
|
13
14
|
import { type RiskDecision } from '../../contracts/verdicts.js';
|
|
14
|
-
import type
|
|
15
|
+
import { type EvaluatedQualityCheck } from '../../domains/quality-assessment/quality-evidence.js';
|
|
16
|
+
import { type MeasuredFailure } from '../../domains/quality-assessment/evidence-sufficiency.js';
|
|
15
17
|
export interface TestExecuteResult {
|
|
16
18
|
taskId: string;
|
|
17
19
|
status: string;
|
|
@@ -19,7 +21,8 @@ export interface TestExecuteResult {
|
|
|
19
21
|
passed: number;
|
|
20
22
|
failed: number;
|
|
21
23
|
duration: number;
|
|
22
|
-
coverage
|
|
24
|
+
/** Measured line coverage of the run, or null when none was collected (#1027 N5). */
|
|
25
|
+
coverage?: number | null;
|
|
23
26
|
workerStats?: Record<string, unknown>;
|
|
24
27
|
retryStats?: Record<string, unknown>;
|
|
25
28
|
results?: unknown[];
|
|
@@ -49,6 +52,38 @@ export interface QualityAssessResult {
|
|
|
49
52
|
resultsNote?: string;
|
|
50
53
|
/** ADR-103: versioned, schema-validated gate verdict (additive) */
|
|
51
54
|
riskDecision?: RiskDecision;
|
|
55
|
+
/**
|
|
56
|
+
* #996 (additive): 'measured' when every requested metric had data;
|
|
57
|
+
* 'insufficient-evidence' when any did not — `passed` is then false and
|
|
58
|
+
* `status` is 'insufficient-evidence'.
|
|
59
|
+
*/
|
|
60
|
+
evidenceStatus?: 'measured' | 'insufficient-evidence';
|
|
61
|
+
/** #996: requested metrics with no measured data (reported as -1 in `metrics`). */
|
|
62
|
+
unmeasured?: string[];
|
|
63
|
+
/** #1011: why each unmeasured metric has no value (e.g. a file could not be parsed). */
|
|
64
|
+
unmeasuredReasons?: Record<string, string>;
|
|
65
|
+
/** #1021: metrics measured over part of the scope (files that failed to read or parse are listed). */
|
|
66
|
+
partialMetrics?: PartialQualityMetric[];
|
|
67
|
+
/** #1021: files left out of the analysis (binary, generated, minified, .d.ts, reader policy); first 50. */
|
|
68
|
+
excludedFiles?: ExcludedQualityFile[];
|
|
69
|
+
/** #1021: total number of excluded files. */
|
|
70
|
+
excludedCount?: number;
|
|
71
|
+
/** #1021: the directory, file, or 'sourceFiles' that was analysed. */
|
|
72
|
+
scope?: string;
|
|
73
|
+
/**
|
|
74
|
+
* #1021 round 2b: the metrics `qualityScore` was computed from, present when
|
|
75
|
+
* the score covers only part of the request (insufficient evidence) or of the
|
|
76
|
+
* files (partial metrics). Such a score is not a verdict.
|
|
77
|
+
*/
|
|
78
|
+
scoreBasis?: string[];
|
|
79
|
+
/** #996: measured metrics that fail their own limit; any entry blocks. */
|
|
80
|
+
measuredFailures?: MeasuredFailure[];
|
|
81
|
+
/** #996: false for static analysis (runGate omitted/false) — no quality gate ran. */
|
|
82
|
+
gateEvaluated?: boolean;
|
|
83
|
+
/** #996: share of requested metrics that were measured, in [0, 1]. */
|
|
84
|
+
confidence?: number;
|
|
85
|
+
/** #996: plain statement of what was (and was not) evaluated. */
|
|
86
|
+
note?: string;
|
|
52
87
|
}
|
|
53
88
|
export interface SecurityScanResult {
|
|
54
89
|
taskId: string;
|
|
@@ -184,6 +219,18 @@ export interface CodeIndexResult {
|
|
|
184
219
|
symbolsExtracted: number;
|
|
185
220
|
relationsFound: number;
|
|
186
221
|
duration: number;
|
|
222
|
+
/**
|
|
223
|
+
* #999 MCP-CLI parity: project metrics collected by the code-intelligence
|
|
224
|
+
* coordinator, rooted at the target (as `aqe code index` does). Absent when
|
|
225
|
+
* no project root resolves or the metric step is unavailable.
|
|
226
|
+
*/
|
|
227
|
+
projectMetrics?: {
|
|
228
|
+
root: string;
|
|
229
|
+
loc: number;
|
|
230
|
+
locByLanguage: Record<string, number>;
|
|
231
|
+
tests: number;
|
|
232
|
+
toolsUsed: string[];
|
|
233
|
+
};
|
|
187
234
|
savedFiles?: string[];
|
|
188
235
|
/** #933: true when result files were written; see savedFiles for their paths. */
|
|
189
236
|
resultsSaved?: boolean;
|
|
@@ -9,8 +9,11 @@
|
|
|
9
9
|
import { generateV2LearningFeedback, analyzeComplexity, generateV2AIInsights, generateV2Tests, detectAntiPatterns, generateTestId, } from './handler-factory.js';
|
|
10
10
|
import { describeSavedResults } from './save-results-option.js';
|
|
11
11
|
import { MetricsCollector } from '../metrics/index.js';
|
|
12
|
+
import { CallerInputError } from '../../shared/error-utils.js';
|
|
12
13
|
import { DEFAULT_FRAMEWORKS, FRAMEWORK_TO_LANGUAGE, } from '../../shared/types/test-frameworks.js';
|
|
13
14
|
import { buildRiskDecisionFromQualityGate, validateRiskDecision, } from '../../contracts/verdicts.js';
|
|
15
|
+
import { INSUFFICIENT_EVIDENCE, } from '../../domains/quality-assessment/quality-evidence.js';
|
|
16
|
+
import { validateRequestedMetrics, } from '../../domains/quality-assessment/evidence-sufficiency.js';
|
|
14
17
|
import { validateBehaviorExamples } from '../../domains/test-generation/services/behavior-example-validation.js';
|
|
15
18
|
const SUPPORTED_LANGUAGES = Object.keys(DEFAULT_FRAMEWORKS);
|
|
16
19
|
/**
|
|
@@ -200,7 +203,8 @@ export const testExecuteConfig = {
|
|
|
200
203
|
const total = data.total || 0;
|
|
201
204
|
const passed = data.passed || 0;
|
|
202
205
|
const failed = data.failed || 0;
|
|
203
|
-
|
|
206
|
+
// #1027 N5: no measured coverage → null, never a hardcoded 0.
|
|
207
|
+
const coverage = typeof data.coverage === 'number' && Number.isFinite(data.coverage) ? data.coverage : null;
|
|
204
208
|
const parallelism = params?.parallelism || 4;
|
|
205
209
|
const realRetryStats = MetricsCollector.getRetryStats();
|
|
206
210
|
const workersUsed = MetricsCollector.getWorkersUsed();
|
|
@@ -305,7 +309,8 @@ export const coverageAnalyzeConfig = {
|
|
|
305
309
|
const rawLine = summary?.line ?? data.lineCoverage;
|
|
306
310
|
const lineCoverage = rawLine ?? null;
|
|
307
311
|
const rawStatement = summary?.statement ?? data.statementCoverage;
|
|
308
|
-
|
|
312
|
+
// #1027 N7: an explicit null (no statement data, e.g. lcov) stays null.
|
|
313
|
+
const statementCoverage = rawStatement === undefined ? lineCoverage : rawStatement;
|
|
309
314
|
const learning = generateV2LearningFeedback('coverage-analyzer');
|
|
310
315
|
// Map gap analysis from real data — never fabricate file paths
|
|
311
316
|
const detailedGaps = gaps.map((gap, i) => {
|
|
@@ -403,6 +408,9 @@ export const coverageAnalyzeConfig = {
|
|
|
403
408
|
coverageMethod: data.coverageMethod ?? 'unknown',
|
|
404
409
|
branchDataCollected,
|
|
405
410
|
functionDataCollected,
|
|
411
|
+
...(data.runStatus === 'passed' || data.runStatus === 'failed' ? { runStatus: data.runStatus } : {}),
|
|
412
|
+
// #995: the target has no measurement at all — distinct from a measured 0%.
|
|
413
|
+
...(data.unmeasured === true ? { unmeasured: true } : {}),
|
|
406
414
|
...(data.warning ? { warning: data.warning } : {}),
|
|
407
415
|
};
|
|
408
416
|
},
|
|
@@ -420,32 +428,95 @@ export const qualityAssessConfig = {
|
|
|
420
428
|
if (params.runGate !== undefined && typeof params.runGate !== 'boolean') {
|
|
421
429
|
throw new Error('runGate must be a boolean.');
|
|
422
430
|
}
|
|
431
|
+
// #996 (N3): a string or unknown name is a caller error, not a metric list.
|
|
432
|
+
const metrics = params.metrics === undefined
|
|
433
|
+
? ['coverage', 'complexity', 'maintainability']
|
|
434
|
+
: validateRequestedMetrics(params.metrics);
|
|
435
|
+
// #1021: scope the analysis instead of silently analysing <cwd>/src.
|
|
436
|
+
// Containment in the project root is enforced by the handler.
|
|
437
|
+
// CallerInputError: a caller mistake, never a component failure (round 2b).
|
|
438
|
+
if (params.target !== undefined && (typeof params.target !== 'string' || params.target.trim() === '')) {
|
|
439
|
+
throw new CallerInputError('target must be a non-empty string path.');
|
|
440
|
+
}
|
|
441
|
+
if (params.sourceFiles !== undefined && (!Array.isArray(params.sourceFiles) || params.sourceFiles.length === 0
|
|
442
|
+
|| params.sourceFiles.some((f) => typeof f !== 'string' || f.trim() === ''))) {
|
|
443
|
+
throw new CallerInputError('sourceFiles must be a non-empty array of file paths.');
|
|
444
|
+
}
|
|
423
445
|
return {
|
|
424
446
|
runGate: params.runGate ?? false,
|
|
447
|
+
...(params.target !== undefined ? { target: params.target } : {}),
|
|
448
|
+
...(params.sourceFiles !== undefined ? { sourceFiles: params.sourceFiles } : {}),
|
|
425
449
|
threshold: params.threshold || 80,
|
|
426
|
-
|
|
450
|
+
// #996: only a caller-supplied threshold overrides the configured/default
|
|
451
|
+
// per-metric limits; the 80 fallback above must not.
|
|
452
|
+
thresholdSource: params.threshold === undefined ? 'default' : 'request',
|
|
453
|
+
metrics,
|
|
427
454
|
routingTier: routingResult?.decision.tier,
|
|
428
455
|
useAgentBooster: routingResult?.useAgentBooster,
|
|
429
456
|
compiledContext: routingResult?.compiledContext,
|
|
430
457
|
};
|
|
431
458
|
},
|
|
432
459
|
mapToResult: (taskId, data, duration, savedFiles) => {
|
|
460
|
+
// #996: never approve on missing data. Any unmeasured requested metric
|
|
461
|
+
// forces passed=false and an explicit insufficient-evidence status.
|
|
462
|
+
const unmeasured = Array.isArray(data.unmeasured)
|
|
463
|
+
? data.unmeasured.filter((m) => typeof m === 'string')
|
|
464
|
+
: undefined;
|
|
465
|
+
const insufficient = (unmeasured?.length ?? 0) > 0 || data.evidenceStatus === INSUFFICIENT_EVIDENCE;
|
|
466
|
+
const gateEvaluated = typeof data.gateEvaluated === 'boolean' ? data.gateEvaluated : undefined;
|
|
467
|
+
const confidence = typeof data.confidence === 'number' ? data.confidence : undefined;
|
|
468
|
+
const measuredFailures = Array.isArray(data.measuredFailures)
|
|
469
|
+
? data.measuredFailures
|
|
470
|
+
: undefined;
|
|
471
|
+
const failedMetrics = (measuredFailures ?? []).map((f) => f.metric);
|
|
472
|
+
// #1011: reasons travel only as a string-to-string map.
|
|
473
|
+
const unmeasuredReasons = data.unmeasuredReasons && typeof data.unmeasuredReasons === 'object'
|
|
474
|
+
&& Object.values(data.unmeasuredReasons).every((r) => typeof r === 'string')
|
|
475
|
+
? data.unmeasuredReasons
|
|
476
|
+
: undefined;
|
|
477
|
+
// -1 = no measured score; never quote it as a score.
|
|
478
|
+
const measuredScore = typeof data.qualityScore === 'number' && data.qualityScore >= 0
|
|
479
|
+
? data.qualityScore
|
|
480
|
+
: undefined;
|
|
481
|
+
const passed = !insufficient && failedMetrics.length === 0 && data.passed === true;
|
|
433
482
|
// ADR-103: attach a schema-validated RiskDecision envelope at the MCP
|
|
434
483
|
// boundary (additive — existing fields unchanged). Omit rather than
|
|
435
484
|
// emit an invalid envelope.
|
|
436
485
|
const riskDecision = buildRiskDecisionFromQualityGate({
|
|
437
|
-
passed:
|
|
438
|
-
|
|
486
|
+
passed: insufficient || failedMetrics.length > 0
|
|
487
|
+
? false
|
|
488
|
+
: typeof data.passed === 'boolean' ? data.passed : undefined,
|
|
489
|
+
qualityScore: measuredScore,
|
|
439
490
|
recommendations: data.recommendations || [],
|
|
491
|
+
unmeasured: insufficient ? (unmeasured?.length ? unmeasured : ['unknown']) : [],
|
|
492
|
+
failedMetrics,
|
|
493
|
+
evidenceConfidence: confidence,
|
|
494
|
+
gateEvaluated,
|
|
440
495
|
});
|
|
441
496
|
return {
|
|
442
497
|
taskId,
|
|
443
|
-
status: 'completed',
|
|
498
|
+
status: insufficient ? INSUFFICIENT_EVIDENCE : 'completed',
|
|
444
499
|
...(typeof data.qualityScore === 'number' ? { qualityScore: data.qualityScore } : {}),
|
|
445
500
|
...(Array.isArray(data.checks) ? { checks: data.checks } : {}),
|
|
446
|
-
passed
|
|
501
|
+
passed,
|
|
447
502
|
metrics: data.metrics || {},
|
|
448
503
|
recommendations: data.recommendations || [],
|
|
504
|
+
...(data.evidenceStatus === 'measured' || insufficient
|
|
505
|
+
? { evidenceStatus: insufficient ? INSUFFICIENT_EVIDENCE : 'measured' }
|
|
506
|
+
: {}),
|
|
507
|
+
...(unmeasured ? { unmeasured } : {}),
|
|
508
|
+
...(unmeasuredReasons ? { unmeasuredReasons } : {}),
|
|
509
|
+
// #1021: partial evidence, exclusions and the analysed scope travel with the verdict.
|
|
510
|
+
...(Array.isArray(data.partialMetrics) ? { partialMetrics: data.partialMetrics } : {}),
|
|
511
|
+
...(Array.isArray(data.excludedFiles) ? { excludedFiles: data.excludedFiles } : {}),
|
|
512
|
+
...(typeof data.excludedCount === 'number' ? { excludedCount: data.excludedCount } : {}),
|
|
513
|
+
...(typeof data.scope === 'string' ? { scope: data.scope } : {}),
|
|
514
|
+
...(Array.isArray(data.scoreBasis) && data.scoreBasis.every((m) => typeof m === 'string')
|
|
515
|
+
? { scoreBasis: data.scoreBasis } : {}),
|
|
516
|
+
...(measuredFailures ? { measuredFailures } : {}),
|
|
517
|
+
...(gateEvaluated !== undefined ? { gateEvaluated } : {}),
|
|
518
|
+
...(confidence !== undefined ? { confidence } : {}),
|
|
519
|
+
...(typeof data.note === 'string' ? { note: data.note } : {}),
|
|
449
520
|
duration,
|
|
450
521
|
savedFiles,
|
|
451
522
|
...(validateRiskDecision(riskDecision).valid ? { riskDecision } : {}),
|
|
@@ -683,6 +754,7 @@ export const codeIndexConfig = {
|
|
|
683
754
|
filesIndexed: data.filesIndexed || 0,
|
|
684
755
|
symbolsExtracted: data.symbolsExtracted || 0,
|
|
685
756
|
relationsFound: data.relationsFound || 0,
|
|
757
|
+
...(data.projectMetrics ? { projectMetrics: data.projectMetrics } : {}),
|
|
686
758
|
duration,
|
|
687
759
|
savedFiles,
|
|
688
760
|
}),
|
|
@@ -14,9 +14,10 @@ import { randomUUID } from 'crypto';
|
|
|
14
14
|
import { getFleetState, isFleetInitialized } from './core-handlers.js';
|
|
15
15
|
import { createTaskExecutor } from '../../coordination/task-executor.js';
|
|
16
16
|
import { getTaskRouter } from '../services/task-router.js';
|
|
17
|
-
import { toErrorMessage } from '../../shared/error-utils.js';
|
|
17
|
+
import { isCallerInputError, toErrorMessage } from '../../shared/error-utils.js';
|
|
18
18
|
import { describeSavedResults, readSaveResultsOption } from './save-results-option.js';
|
|
19
19
|
import { createInitializedFeedbackLoop, getQualityFeedbackLoop } from '../../feedback/feedback-loop.js';
|
|
20
|
+
import { isLearnableResult } from '../../learning/learnable-result.js';
|
|
20
21
|
// ============================================================================
|
|
21
22
|
// Shared Utilities (exported for response mappers)
|
|
22
23
|
// ============================================================================
|
|
@@ -171,7 +172,10 @@ async function recordDomainFeedback(domain, data, durationMs, params) {
|
|
|
171
172
|
await loop.recordTestOutcome(outcome);
|
|
172
173
|
}
|
|
173
174
|
}
|
|
174
|
-
|
|
175
|
+
// #1014: only MEASURED coverage becomes a coverage_sessions row. An
|
|
176
|
+
// estimate or an UNMEASURED target wrote after_lines = the estimate / 0.0,
|
|
177
|
+
// which gate-check, threshold-check and the coverage-learner then read.
|
|
178
|
+
if (domain === 'coverage-analysis' && data && isLearnableResult(domain, data)) {
|
|
175
179
|
// Extract coverage session data and record for learning
|
|
176
180
|
const session = {
|
|
177
181
|
id: randomUUID(),
|
|
@@ -203,6 +207,14 @@ async function recordDomainFeedback(domain, data, durationMs, params) {
|
|
|
203
207
|
durationMs,
|
|
204
208
|
startedAt: new Date(Date.now() - durationMs),
|
|
205
209
|
completedAt: new Date(),
|
|
210
|
+
// #1014: provenance stamp — readers ignore legacy rows of this agent
|
|
211
|
+
// without it (see feedback/coverage-session-provenance.ts).
|
|
212
|
+
context: {
|
|
213
|
+
measured: true,
|
|
214
|
+
coverageMethod: data.coverageMethod ?? 'instrumented-report',
|
|
215
|
+
branchDataCollected: data.branchCoverage !== null && data.branchCoverage !== undefined,
|
|
216
|
+
functionDataCollected: data.functionCoverage !== null && data.functionCoverage !== undefined,
|
|
217
|
+
},
|
|
206
218
|
};
|
|
207
219
|
await loop.recordCoverageSession(session);
|
|
208
220
|
}
|
|
@@ -636,6 +648,9 @@ export function createDomainHandler(config) {
|
|
|
636
648
|
return {
|
|
637
649
|
success: false,
|
|
638
650
|
error: result.error || 'Task execution failed',
|
|
651
|
+
// #996: structured failure context (e.g. status + unmeasured metrics),
|
|
652
|
+
// only when the failing handler provided it. success stays false.
|
|
653
|
+
...(result.errorDetails ? { data: result.errorDetails } : {}),
|
|
639
654
|
};
|
|
640
655
|
}
|
|
641
656
|
// Step 5: Map result
|
|
@@ -643,16 +658,22 @@ export function createDomainHandler(config) {
|
|
|
643
658
|
const mappedResult = mapToResult(submitResult.value, data, result.duration, result.savedFiles, params);
|
|
644
659
|
// #933: every result-saving tool reports what it wrote, the same way.
|
|
645
660
|
Object.assign(mappedResult, describeSavedResults(saveResults, result.savedFiles));
|
|
646
|
-
//
|
|
647
|
-
|
|
648
|
-
//
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
//
|
|
661
|
+
// #1014: a run without evidence (a coverage estimate, an UNMEASURED
|
|
662
|
+
// target, an insufficient-evidence gate) still succeeds as a tool call,
|
|
663
|
+
// but is not recorded as successful learning anywhere below.
|
|
664
|
+
const learnable = isLearnableResult(domain, data) && isLearnableResult('', mappedResult);
|
|
665
|
+
if (learnable) {
|
|
666
|
+
// Step 5b: Record pattern usage on success (Phase 5.3 — fire-and-forget)
|
|
667
|
+
recordPatternUsageAsync(routingResult?.patternHints, true, domain, result.duration);
|
|
668
|
+
// Step 5c: Capture real execution learning (fire-and-forget)
|
|
669
|
+
captureExecutionLearning(`qe-${domain}`, taskType, params, data, result.duration).catch(() => { }); // Swallow errors — learning is non-critical
|
|
670
|
+
// Step 5d: Record feedback for test_outcomes / coverage_sessions
|
|
671
|
+
try {
|
|
672
|
+
await recordDomainFeedback(domain, data, result.duration, params);
|
|
673
|
+
}
|
|
674
|
+
catch {
|
|
675
|
+
// Non-critical — don't fail handler if feedback recording fails
|
|
676
|
+
}
|
|
656
677
|
}
|
|
657
678
|
return {
|
|
658
679
|
success: true,
|
|
@@ -662,11 +683,19 @@ export function createDomainHandler(config) {
|
|
|
662
683
|
catch (error) {
|
|
663
684
|
// Step 6: Error handling
|
|
664
685
|
const errorMessage = toErrorMessage(error);
|
|
665
|
-
//
|
|
666
|
-
|
|
686
|
+
// A caller-input error thrown before the task runs (e.g. by
|
|
687
|
+
// mapToPayload's shape checks) is the caller's mistake, not a domain
|
|
688
|
+
// failure: it is marked for the experience middleware and not recorded
|
|
689
|
+
// as a pattern-usage failure.
|
|
690
|
+
const callerError = isCallerInputError(error);
|
|
691
|
+
if (!callerError) {
|
|
692
|
+
// Record pattern usage on failure (Phase 5.3 — fire-and-forget)
|
|
693
|
+
recordPatternUsageAsync(routingResult?.patternHints, false, domain, 0);
|
|
694
|
+
}
|
|
667
695
|
return {
|
|
668
696
|
success: false,
|
|
669
697
|
error: `Failed to ${taskType.replace(/-/g, ' ')}: ${errorMessage}`,
|
|
698
|
+
...(callerError ? { data: { callerError: true } } : {}),
|
|
670
699
|
};
|
|
671
700
|
}
|
|
672
701
|
};
|
|
@@ -53,7 +53,13 @@ function createWrappedHandler(handler, domain, agent) {
|
|
|
53
53
|
if (result.success) {
|
|
54
54
|
return { success: true, data: result.data };
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
// #996: keep structured failure context (e.g. insufficient-evidence details)
|
|
57
|
+
// when the domain handler provided it; success stays false.
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
error: result.error || 'Unknown error',
|
|
61
|
+
...(result.data !== undefined ? { data: result.data } : {}),
|
|
62
|
+
};
|
|
57
63
|
};
|
|
58
64
|
}
|
|
59
65
|
// ============================================================================
|
|
@@ -477,9 +477,16 @@ export class MCPProtocolServer {
|
|
|
477
477
|
const { getSessionCache } = await import('../optimization/session-cache.js');
|
|
478
478
|
const cache = getSessionCache();
|
|
479
479
|
const { domain, action } = parseToolDomainAction(name);
|
|
480
|
+
// #998: key on the project root, working directory and a fingerprint
|
|
481
|
+
// of every path argument, not on the raw arguments alone. A call that
|
|
482
|
+
// reads a directory tree is neither served from nor stored in cache.
|
|
483
|
+
const { buildToolCacheScope } = await import('./tool-cache-scope.js');
|
|
484
|
+
const { scope, reusable } = buildToolCacheScope(name, processedCtx.params);
|
|
480
485
|
cacheGeneration = cache.getGeneration();
|
|
481
|
-
cacheFingerprint =
|
|
482
|
-
|
|
486
|
+
cacheFingerprint = reusable
|
|
487
|
+
? cache.computeFingerprint(domain, action, processedCtx.params || {}, scope)
|
|
488
|
+
: null;
|
|
489
|
+
const hit = cacheFingerprint ? cache.get(cacheFingerprint) : null;
|
|
483
490
|
if (hit) {
|
|
484
491
|
// Cache hit — return the stored result without running the handler.
|
|
485
492
|
const cachedText = JSON.stringify(hit.result, null, 2);
|
|
@@ -887,6 +894,10 @@ export class MCPProtocolServer {
|
|
|
887
894
|
description: `Analyze code coverage with O(log n) sublinear algorithm and ML-powered gap detection. ${SAVE_RESULTS_HINT} Example: coverage_analyze_sublinear({ target: "src/", detectGaps: true })`,
|
|
888
895
|
category: 'domain',
|
|
889
896
|
isConcurrencySafe: true,
|
|
897
|
+
// #998: never replay from the session cache. The result measures
|
|
898
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
899
|
+
// cached answer goes stale as soon as those inputs change.
|
|
900
|
+
isCacheable: false,
|
|
890
901
|
parameters: [
|
|
891
902
|
{ name: 'target', type: 'string', description: 'Target path to analyze', required: true },
|
|
892
903
|
{ name: 'detectGaps', type: 'boolean', description: 'Detect coverage gaps', default: true },
|
|
@@ -899,11 +910,18 @@ export class MCPProtocolServer {
|
|
|
899
910
|
this.registerTool({
|
|
900
911
|
definition: {
|
|
901
912
|
name: 'quality_assess',
|
|
902
|
-
description: `Assess code quality metrics and optionally run a pass/fail quality gate. ${SAVE_RESULTS_HINT} Example: quality_assess({ runGate: true })`,
|
|
913
|
+
description: `Assess code quality metrics and optionally run a pass/fail quality gate. Unmeasured metrics never pass. ${SAVE_RESULTS_HINT} Example: quality_assess({ runGate: true })`,
|
|
903
914
|
category: 'domain',
|
|
904
915
|
isConcurrencySafe: true,
|
|
916
|
+
// #998: never replay from the session cache. The result measures
|
|
917
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
918
|
+
// cached answer goes stale as soon as those inputs change.
|
|
919
|
+
isCacheable: false,
|
|
905
920
|
parameters: [
|
|
906
|
-
{ name: 'runGate', type: 'boolean', description: 'Evaluate all seven canonical measured quality checks; requires complete, valid evidence from the last 24 hours. Returns individual checks, not a static aggregate score.', default: false },
|
|
921
|
+
{ name: 'runGate', type: 'boolean', description: 'Evaluate all seven canonical measured quality checks; requires complete, valid evidence from the last 24 hours. Returns individual checks, not a static aggregate score. Missing, stale or malformed evidence fails with status "insufficient-evidence" and lists the metrics in unmeasured. When false, only static analysis runs (gateEvaluated: false).', default: false },
|
|
922
|
+
{ name: 'metrics', type: 'array', description: 'Static-analysis metrics to assess (default coverage, complexity, maintainability). Known: coverage, complexity, maintainability, duplication, testability, security. Any requested metric without measured data gives status "insufficient-evidence", passed: false, and lists it in unmeasured; a measured metric failing its threshold blocks.', items: { type: 'string' } },
|
|
923
|
+
{ name: 'target', type: 'string', description: 'File or directory to analyse, resolved against the project root and required to stay inside it (default: src/, else the root). Binary, generated, minified and .d.ts files are excluded and listed in excludedFiles; files that fail to parse are listed in partialMetrics.' },
|
|
924
|
+
{ name: 'sourceFiles', type: 'array', description: 'Explicit files to analyse (each inside the project root); takes precedence over target. If a listed file cannot be read or parsed, the affected metrics are unmeasured.', items: { type: 'string' } },
|
|
907
925
|
saveResultsParameter('quality_assess'),
|
|
908
926
|
],
|
|
909
927
|
},
|
|
@@ -973,6 +991,10 @@ export class MCPProtocolServer {
|
|
|
973
991
|
description: `Predict potential defects using AI analysis of code complexity and change history. ${SAVE_RESULTS_HINT} Example: defect_predict({ target: "src/auth/" })`,
|
|
974
992
|
category: 'domain',
|
|
975
993
|
isConcurrencySafe: true,
|
|
994
|
+
// #998: never replay from the session cache. The result measures
|
|
995
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
996
|
+
// cached answer goes stale as soon as those inputs change.
|
|
997
|
+
isCacheable: false,
|
|
976
998
|
parameters: [
|
|
977
999
|
{ name: 'target', type: 'string', description: 'Target path', required: true },
|
|
978
1000
|
saveResultsParameter('defect_predict'),
|
|
@@ -1001,6 +1023,10 @@ export class MCPProtocolServer {
|
|
|
1001
1023
|
description: `Index source code into the knowledge graph for dependency and impact analysis. ${SAVE_RESULTS_HINT} Example: code_index({ target: "src/" })`,
|
|
1002
1024
|
category: 'domain',
|
|
1003
1025
|
isConcurrencySafe: true,
|
|
1026
|
+
// #998: never replay from the session cache. The result measures
|
|
1027
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
1028
|
+
// cached answer goes stale as soon as those inputs change.
|
|
1029
|
+
isCacheable: false,
|
|
1004
1030
|
parameters: [
|
|
1005
1031
|
{ name: 'target', type: 'string', description: 'Target path', required: true },
|
|
1006
1032
|
saveResultsParameter('code_index'),
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP result-cache scope (#998)
|
|
3
|
+
*
|
|
4
|
+
* The protocol server reuses results of read-only tools through the session
|
|
5
|
+
* cache. A result is only reusable for the same project and the same inputs,
|
|
6
|
+
* so the cache key carries:
|
|
7
|
+
* - the resolved project root and working directory, and
|
|
8
|
+
* - for each path argument, its absolute path plus an mtime/size fingerprint,
|
|
9
|
+
* so an edited requirements file misses the cache.
|
|
10
|
+
*
|
|
11
|
+
* A directory argument cannot be fingerprinted cheaply (editing a file inside
|
|
12
|
+
* it does not change the directory's mtime), so a call that reads a directory
|
|
13
|
+
* tree is reported as not reusable and runs every time.
|
|
14
|
+
*
|
|
15
|
+
* @module mcp/tool-cache-scope
|
|
16
|
+
*/
|
|
17
|
+
import type { CacheScope } from '../optimization/session-cache.js';
|
|
18
|
+
/** Argument names that tools treat as filesystem paths. */
|
|
19
|
+
export declare const PATH_ARGUMENTS: readonly ["target", "requirementsPath", "contractPath", "testPath", "path", "filePath", "file"];
|
|
20
|
+
export interface ToolCacheScope {
|
|
21
|
+
scope: CacheScope;
|
|
22
|
+
/** False when the call reads a directory tree, so no cached result may be reused. */
|
|
23
|
+
reusable: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build the cache scope for one tool call: project root, working directory
|
|
27
|
+
* and a fingerprint of every path argument (relative ones resolved to
|
|
28
|
+
* absolute paths against the working directory).
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildToolCacheScope(toolName: string, params: Record<string, unknown> | undefined): ToolCacheScope;
|
|
31
|
+
//# sourceMappingURL=tool-cache-scope.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP result-cache scope (#998)
|
|
3
|
+
*
|
|
4
|
+
* The protocol server reuses results of read-only tools through the session
|
|
5
|
+
* cache. A result is only reusable for the same project and the same inputs,
|
|
6
|
+
* so the cache key carries:
|
|
7
|
+
* - the resolved project root and working directory, and
|
|
8
|
+
* - for each path argument, its absolute path plus an mtime/size fingerprint,
|
|
9
|
+
* so an edited requirements file misses the cache.
|
|
10
|
+
*
|
|
11
|
+
* A directory argument cannot be fingerprinted cheaply (editing a file inside
|
|
12
|
+
* it does not change the directory's mtime), so a call that reads a directory
|
|
13
|
+
* tree is reported as not reusable and runs every time.
|
|
14
|
+
*
|
|
15
|
+
* @module mcp/tool-cache-scope
|
|
16
|
+
*/
|
|
17
|
+
import * as fs from 'fs';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
import { findProjectRoot } from '../kernel/project-root.js';
|
|
20
|
+
/** Argument names that tools treat as filesystem paths. */
|
|
21
|
+
export const PATH_ARGUMENTS = [
|
|
22
|
+
'target', 'requirementsPath', 'contractPath', 'testPath', 'path', 'filePath', 'file',
|
|
23
|
+
];
|
|
24
|
+
function fingerprintPath(value, cwd) {
|
|
25
|
+
const absolute = path.resolve(cwd, value);
|
|
26
|
+
try {
|
|
27
|
+
const stat = fs.statSync(absolute);
|
|
28
|
+
return {
|
|
29
|
+
path: absolute,
|
|
30
|
+
exists: true,
|
|
31
|
+
kind: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',
|
|
32
|
+
size: stat.size,
|
|
33
|
+
mtimeMs: stat.mtimeMs,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return { path: absolute, exists: false };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Tools that scan the working directory tree when their path argument is
|
|
42
|
+
* omitted. Such a call reads mutable files that no fingerprint here covers.
|
|
43
|
+
*/
|
|
44
|
+
const IMPLICIT_DIRECTORY_ARGUMENT = {
|
|
45
|
+
requirements_validate: 'requirementsPath',
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Build the cache scope for one tool call: project root, working directory
|
|
49
|
+
* and a fingerprint of every path argument (relative ones resolved to
|
|
50
|
+
* absolute paths against the working directory).
|
|
51
|
+
*/
|
|
52
|
+
export function buildToolCacheScope(toolName, params) {
|
|
53
|
+
const cwd = process.cwd();
|
|
54
|
+
const projectRoot = path.resolve(findProjectRoot());
|
|
55
|
+
const inputs = {};
|
|
56
|
+
let reusable = true;
|
|
57
|
+
for (const name of PATH_ARGUMENTS) {
|
|
58
|
+
const value = params?.[name];
|
|
59
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
60
|
+
const fingerprint = fingerprintPath(value, cwd);
|
|
61
|
+
inputs[name] = fingerprint;
|
|
62
|
+
if (fingerprint.kind === 'directory')
|
|
63
|
+
reusable = false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const implicit = IMPLICIT_DIRECTORY_ARGUMENT[toolName];
|
|
67
|
+
if (implicit && inputs[implicit] === undefined)
|
|
68
|
+
reusable = false;
|
|
69
|
+
return { scope: { projectRoot, cwd, inputs }, reusable };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=tool-cache-scope.js.map
|
|
@@ -14,6 +14,7 @@ import { SemanticAnalyzerService } from '../../../domains/code-intelligence/serv
|
|
|
14
14
|
import { ImpactAnalyzerService } from '../../../domains/code-intelligence/services/impact-analyzer.js';
|
|
15
15
|
import * as fs from 'fs';
|
|
16
16
|
import * as path from 'path';
|
|
17
|
+
import { isAqeManagedDir } from '../../../shared/aqe-managed-dirs.js';
|
|
17
18
|
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
18
19
|
// ============================================================================
|
|
19
20
|
// Tool Implementation
|
|
@@ -405,7 +406,7 @@ export class CodeAnalyzeTool extends MCPToolBase {
|
|
|
405
406
|
/**
|
|
406
407
|
* Find source files in a directory
|
|
407
408
|
*/
|
|
408
|
-
async findSourceFiles(dir) {
|
|
409
|
+
async findSourceFiles(dir, isRoot = true) {
|
|
409
410
|
const files = [];
|
|
410
411
|
const extensions = ['.ts', '.tsx', '.js', '.jsx'];
|
|
411
412
|
const ignoreDirs = ['node_modules', '.git', 'dist', 'build', 'coverage'];
|
|
@@ -414,8 +415,9 @@ export class CodeAnalyzeTool extends MCPToolBase {
|
|
|
414
415
|
for (const entry of entries) {
|
|
415
416
|
const fullPath = path.join(dir, entry.name);
|
|
416
417
|
if (entry.isDirectory()) {
|
|
417
|
-
|
|
418
|
-
|
|
418
|
+
// #999: AQE state/assets (.agentic-qe anywhere; .claude at the root or next to .agentic-qe)
|
|
419
|
+
if (!ignoreDirs.includes(entry.name) && !isAqeManagedDir(dir, entry.name, isRoot)) {
|
|
420
|
+
const subFiles = await this.findSourceFiles(fullPath, false);
|
|
419
421
|
files.push(...subFiles);
|
|
420
422
|
}
|
|
421
423
|
}
|
|
@@ -143,6 +143,7 @@ export class CoverageAnalyzeTool extends MCPToolBase {
|
|
|
143
143
|
coverageData: { files: domainFiles, summary: calculateSummary(domainFiles) },
|
|
144
144
|
threshold: thresholds.lines || 80,
|
|
145
145
|
includeFileDetails: true,
|
|
146
|
+
measured: true, // parsed from a real report (no estimation fallback here)
|
|
146
147
|
});
|
|
147
148
|
if (!analyzeResult.success) {
|
|
148
149
|
return {
|
package/dist/mcp/types.d.ts
CHANGED
|
@@ -221,6 +221,10 @@ export interface QualityAssessParams {
|
|
|
221
221
|
runGate?: boolean;
|
|
222
222
|
threshold?: number;
|
|
223
223
|
metrics?: string[];
|
|
224
|
+
/** #1021: file or directory to analyse, relative to (and contained in) the project root. Default: src/ (or the root). */
|
|
225
|
+
target?: string;
|
|
226
|
+
/** #1021: explicit files to analyse, each contained in the project root. Takes precedence over target. */
|
|
227
|
+
sourceFiles?: string[];
|
|
224
228
|
/** #933: write result files under .agentic-qe/results/ (default true). false skips them. */
|
|
225
229
|
saveResults?: boolean;
|
|
226
230
|
}
|
|
@@ -568,6 +572,12 @@ export interface CoverageAnalyzeResult {
|
|
|
568
572
|
branchDataCollected?: boolean;
|
|
569
573
|
/** Whether function-level data was actually collected. */
|
|
570
574
|
functionDataCollected?: boolean;
|
|
575
|
+
/**
|
|
576
|
+
* #995: true when coverage data exists for the project but none of it covers
|
|
577
|
+
* the requested target (or the run executed no code). The figures are null —
|
|
578
|
+
* this is "no measurement", never 0%.
|
|
579
|
+
*/
|
|
580
|
+
unmeasured?: boolean;
|
|
571
581
|
/** Caveats the caller should surface (e.g. "no instrumentation ran"). */
|
|
572
582
|
warning?: string;
|
|
573
583
|
}
|
|
@@ -22,6 +22,19 @@ export interface CachedOperation {
|
|
|
22
22
|
hitCount: number;
|
|
23
23
|
lastHitAt: number;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Where a cached operation ran (#998). Arguments alone do not identify a
|
|
27
|
+
* result: the same relative `target: "."` means a different tree in another
|
|
28
|
+
* project, and a file argument means different content after an edit.
|
|
29
|
+
*/
|
|
30
|
+
export interface CacheScope {
|
|
31
|
+
/** Resolved project root. Defaults to `findProjectRoot()`. */
|
|
32
|
+
projectRoot?: string;
|
|
33
|
+
/** Working directory relative arguments resolve against. Defaults to `process.cwd()`. */
|
|
34
|
+
cwd?: string;
|
|
35
|
+
/** Fingerprints of the inputs the operation reads (absolute path, mtime, size). */
|
|
36
|
+
inputs?: Record<string, unknown>;
|
|
37
|
+
}
|
|
25
38
|
export interface SessionCacheConfig {
|
|
26
39
|
/** Enable the cache (default: true) */
|
|
27
40
|
enabled: boolean;
|
|
@@ -62,8 +75,13 @@ export declare class SessionOperationCache {
|
|
|
62
75
|
*
|
|
63
76
|
* Including the version means an upgrade misses cleanly rather than serving
|
|
64
77
|
* stale answers; entries from the old build simply age out.
|
|
78
|
+
*
|
|
79
|
+
* The scope (project root, working directory and input fingerprints) is part
|
|
80
|
+
* of the key too (#998): without it a relative target returned another
|
|
81
|
+
* project's cached result. When no scope is passed, the current project root
|
|
82
|
+
* and working directory are used, so every caller is project-scoped.
|
|
65
83
|
*/
|
|
66
|
-
computeFingerprint(domain: string, action: string, input: Record<string, unknown
|
|
84
|
+
computeFingerprint(domain: string, action: string, input: Record<string, unknown>, scope?: CacheScope): string;
|
|
67
85
|
/**
|
|
68
86
|
* Look up a cached result by fingerprint.
|
|
69
87
|
* Returns null on miss or expired entry.
|