agentic-qe 3.15.5 → 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 +121 -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/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
- package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-KAMYBU3S.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-2CAW3KUM.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
- package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-4OFLJ3R2.js} +2 -2
- package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-QCCVIOAH.js} +4 -4
- package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-RBDQJQJB.js} +3 -3
- package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-5JRACCDQ.js} +2 -2
- package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-W4QIIRT4.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-IBNGI572.js} +2 -2
- package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-GMSCVAOI.js} +2 -2
- package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
- package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-22OZIJAD.js} +2 -2
- package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-24ZSGYC6.js} +1 -1
- package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-2CIDFR2H.js} +3 -3
- package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2IWPJUVV.js} +5 -5
- package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-2ZTWPMTK.js} +2 -2
- package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34MDMFET.js} +2 -2
- package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-3DJNKNBR.js} +66 -65
- package/dist/cli/chunks/{chunk-XQRE2HWM.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-MNQ36MAF.js → chunk-47Q7JL3V.js} +2 -2
- package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
- package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-4KOVHQXK.js} +2 -2
- package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-4POOJYXA.js} +1 -1
- package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-5DH5QI7G.js} +26 -26
- package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-5GIJU2ZY.js} +2 -2
- package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-5HAPS6VD.js} +2 -2
- package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-5LST62QR.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-5MT7DMD7.js} +2 -2
- package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-5NC7QEJ6.js} +4 -4
- package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-5UPIL62W.js} +3 -3
- package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-5VUIXDY2.js} +2 -2
- package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
- package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-624QRKQX.js} +1 -1
- package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-66NW3ZB4.js} +2 -2
- package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-6HWARQWV.js} +2 -2
- package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6MXAJBEA.js} +1 -1
- package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6R3FBFCJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-6RDVY26I.js} +2 -2
- package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-6T6AHVLF.js} +1 -1
- package/dist/cli/chunks/{chunk-JANLATHN.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-HLFDC4SF.js → chunk-7SAMMQVS.js} +1 -1
- package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-7TJZDRDU.js} +1 -1
- package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-7TVIX4WL.js} +2 -2
- package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-7VTKR44N.js} +2 -2
- package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-7XTANLTN.js} +1 -1
- package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
- package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-A74J23QB.js} +2 -2
- package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-A7ANPS4E.js} +2 -2
- package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-AJT3XDRD.js} +2 -2
- package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-ALCIUWFC.js} +1 -1
- package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-AUN4FG7V.js} +1 -1
- package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-AUOSHM63.js} +2 -2
- package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-AX26QJ6T.js} +2 -2
- package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-B7RHBKHL.js} +2 -2
- package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-BAYGQRNP.js} +2 -2
- package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-BIXRTOH3.js} +18 -18
- package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-BO7UFNYV.js} +2 -2
- package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-BUTGIVKW.js} +1 -1
- package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-BXATKI5S.js} +2 -2
- package/dist/cli/chunks/{chunk-BO4PKNYP.js → chunk-CCL436IU.js} +32 -27
- package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-CEXNW5TR.js} +1 -1
- package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-CLAMMGY3.js} +2 -2
- package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-CR66HNAE.js} +1 -1
- package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-CZBIREL5.js} +2 -2
- package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-D5N2O5EH.js} +2 -2
- package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-DA7DGDTI.js} +2 -2
- package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-DLSFT6PO.js} +2 -2
- package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-DQNUPEY5.js} +2 -2
- package/dist/cli/chunks/{chunk-GTSOFCMQ.js → chunk-EECF4CMA.js} +1 -1
- package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-EF5UHDCG.js} +1 -1
- package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-EJ4KZFZN.js} +1 -1
- package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-ELI4GDQO.js} +2 -2
- package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-F3KS3TAB.js} +2 -2
- package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-F7A2UBZO.js} +2 -2
- package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-FOJRPEIP.js} +2 -2
- package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-FQ5N666N.js} +1 -1
- package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-FU7LNUD7.js} +2 -2
- package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-GFB6BZWU.js} +2 -2
- package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-GI5HWS4H.js} +1 -1
- package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-GNYOHZVV.js} +1 -1
- package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-GVRFSXY6.js} +2 -2
- package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-GWM4M5NF.js} +1 -1
- package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-HAN4MS5T.js} +2 -2
- package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-HEGGV2PT.js} +2 -2
- package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-HOEWMEF2.js} +2 -2
- package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-HZFK2Z2Z.js} +1 -1
- package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
- package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-IEPWO4XP.js} +2 -2
- package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-ITIJ23K2.js} +2 -2
- package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-IVJIHZSM.js} +1 -1
- package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-JAPBSSFY.js} +1 -1
- package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-JCE76MPP.js} +2 -2
- package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-JPJEAK4G.js} +1 -1
- package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-JYKQVYX2.js} +2 -2
- package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-K55EAWZ5.js} +2 -2
- package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
- package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-KIDOBLUO.js} +2 -2
- package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-KYVIOC3C.js} +2 -2
- package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-L2TDHJR3.js} +2 -2
- package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-L4D3TPFP.js} +1 -1
- package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-LAY7NCQK.js} +3 -3
- package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-LCCTJ2PC.js} +2 -2
- package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-LJCEDTUM.js} +3 -3
- package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-LMAEMVPA.js} +1 -1
- package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-LZWJ5BMP.js} +2 -2
- package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-MP3FSUNB.js} +2 -2
- package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-MQCTLTGE.js} +2 -2
- package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-MQTA6KIO.js} +1 -1
- package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-NBUXM5X6.js} +10 -6
- package/dist/cli/chunks/{chunk-DPYDUKVZ.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-AUZXRFOX.js → chunk-ONPPBLRB.js} +2 -2
- package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-OPDZBRIL.js} +2 -2
- package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-OQ4S6B7P.js} +1 -1
- package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-ORBODZSO.js} +2 -2
- package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-ORFL3YXB.js} +2 -2
- package/dist/cli/chunks/{chunk-BMWAWZAN.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-DPV33C77.js → chunk-Q2RBOC7V.js} +2 -2
- package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-QLKUCMZC.js} +1 -1
- package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QLYO3H7E.js} +9 -9
- package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-QS5KZYUZ.js} +2 -2
- package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-R363XXGH.js} +2 -2
- package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
- package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-RFDFET3O.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-RHIQ6QO5.js} +357 -351
- package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
- package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-RUTO67PT.js} +2 -2
- package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-RV6HSMKJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-SOSJWM3E.js} +4 -4
- package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-SV5BUYHH.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-TL5GV3PR.js} +8 -8
- package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-TLUIO37P.js} +2 -2
- package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-TUDENMAE.js} +2 -2
- package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
- package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-UB6DQGWM.js} +2 -2
- package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-UHHMAKPE.js} +1 -1
- package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-ULCHPPW2.js} +1 -1
- package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
- package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-VAYZ5QIE.js} +1 -1
- package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-VCONCVSY.js} +3 -3
- package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-VVF337SV.js} +2 -2
- package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-WKDWRRDT.js} +2 -2
- package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-X2DR27AY.js} +2 -2
- package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-X33F7NXH.js} +3 -3
- package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-XBEI2JBA.js} +2 -2
- package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-XBFQJZWX.js} +2 -2
- package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-XFPQIWEH.js} +3 -3
- package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-XPB5BVU6.js} +2 -2
- package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-XQ53PZEF.js} +3 -3
- package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-XZ46CI35.js} +2 -2
- package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
- package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-YNG7E26C.js} +2 -2
- package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-YXU35GGD.js} +1 -1
- package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-ZCP4P6O2.js} +2 -2
- package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-ZL5LJT7D.js} +2 -2
- package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-ZOUEQ6DL.js} +1 -1
- package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-ZSBD4FUX.js} +2 -2
- package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
- package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-ZUTFHGEO.js} +1 -1
- package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
- package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-2ZVV4OXL.js} +2 -2
- package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-E45OGVPR.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-X73ITYZC.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-W4PPH46C.js} +2 -2
- package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
- package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-NUEPMWDE.js} +2 -2
- package/dist/cli/chunks/{code-QSZTDINQ.js → code-6WQHBS7G.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-BXQIFIFT.js} +2 -2
- package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-Z337R2KH.js} +2 -2
- package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-F5DMYFHV.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-W2SYPZDI.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-ZCHUIFTN.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-M5JNODXF.js} +2 -2
- package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
- package/dist/cli/chunks/{cost-tracker-RIN4JDDM.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-POM7NGCC.js → cursor-installer-XPUA73UW.js} +2 -2
- package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-ITKDIYMW.js} +5 -5
- package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
- package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
- package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-DR7J6K4O.js} +2 -2
- package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-LAJJBOUT.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-OMSHCRMK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-EQXSKC5K.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.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-K7E4XXBS.js → eval-JSNNASBW.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
- package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-YNMIBS2E.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-SRLXDKBI.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-VIR7O4L7.js} +2 -2
- package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
- package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-K2ED46EL.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.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-KRS7SSFM.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-SE3MJJYS.js} +2 -2
- package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-C572SRDH.js} +43 -43
- package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-35A6G3M5.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.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-TEPR2ZJD.js → kilocode-installer-32PX5YH7.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-RUKHGDEE.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-7GECMDCP.js → llm-router-XRKTTJTX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
- package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XVH6HW7E.js} +2 -2
- package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
- package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-IULSTM4Z.js} +2 -2
- package/dist/cli/chunks/{memory-HYC4M4XS.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-T7FYKM6T.js → multi-model-executor-VZDUYPLX.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-3USXVT5M.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-CMZLPX2K.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
- package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-O562GTOG.js} +2 -2
- package/dist/cli/chunks/{platform-2MCRKC25.js → platform-PM7Q2AZS.js} +2 -2
- package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.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-DZ26OYVZ.js → protocol-handler-PPGNSAOS.js} +2 -2
- package/dist/cli/chunks/{prove-QWONEJWX.js → prove-WQ3BKRZG.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
- package/dist/cli/chunks/{quality-WFH54FY7.js → quality-C5WUU3AA.js} +2 -2
- package/dist/cli/chunks/{quality-gate-ONJB7XU7.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-HW5Y55ZC.js → ref-validation-DHKHXVZT.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-5OABDNZT.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-CVHVOQTC.js → routing-handler-JNXTGT6T.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.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-UGUXKIFX.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-7723AZZ4.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-ZSHYG5IA.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-MHZEEYMK.js → standalone-memory-46KKBSSV.js} +2 -2
- package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-35T5FTDQ.js} +2 -2
- package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-P7QPQWLO.js} +2 -2
- package/dist/cli/chunks/{sync-PDPORHVN.js → sync-W6Z4R4PL.js} +2 -2
- package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
- package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-5CX3ZYT7.js} +2 -2
- package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-DQZGOJNE.js} +3 -3
- package/dist/cli/chunks/{test-DMBJFQNL.js → test-TPP53VVV.js} +12 -12
- package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-WBV4UMQH.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
- package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-AKK37RB7.js} +2 -2
- package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-7MASPELS.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
- package/dist/cli/chunks/{types-K4FLXR2K.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-M3ATDRMK.js → upgrade-L7OTDKEK.js} +2 -2
- package/dist/cli/chunks/{validate-AAP773B3.js → validate-O3QVFIGP.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-2UGBGLTX.js} +2 -2
- package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-J75IYPRO.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-FQ5DBFCG.js} +2 -2
- package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
- package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.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-Q2KW3QEQ.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
- package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
- package/dist/cli/chunks/{workflow-CX6SHFBW.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 +47 -25
- package/dist/cli/commands/coverage.d.ts +1 -28
- package/dist/cli/commands/coverage.js +63 -134
- 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/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 +8 -1
- package/dist/cli/utils/ci-output.js +13 -2
- package/dist/cli/utils/coverage-data.d.ts +3 -0
- package/dist/cli/utils/coverage-data.js +14 -39
- 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/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 +34 -6
- package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
- package/dist/coordination/handlers/coverage-runner.js +105 -10
- package/dist/coordination/handlers/coverage-target.d.ts +1 -0
- package/dist/coordination/handlers/coverage-target.js +4 -1
- package/dist/coordination/handlers/handler-types.d.ts +9 -0
- package/dist/coordination/handlers/handler-utils.d.ts +14 -1
- package/dist/coordination/handlers/handler-utils.js +46 -22
- package/dist/coordination/handlers/quality-handlers.js +108 -18
- 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 +113 -43
- package/dist/coordination/task-executor.d.ts +7 -0
- package/dist/coordination/task-executor.js +32 -3
- package/dist/domains/code-intelligence/plugin.js +4 -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 +18 -6
- package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
- package/dist/domains/coverage-analysis/interfaces.js +6 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
- 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-rl-integration.d.ts +14 -0
- package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
- package/dist/domains/quality-assessment/coordinator.js +10 -6
- package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
- package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
- package/dist/domains/quality-assessment/index.d.ts +1 -1
- package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +48 -2
- package/dist/domains/quality-assessment/quality-evidence.js +62 -0
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.js +192 -109
- 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 +516 -504
- package/dist/mcp/handlers/domain-handler-configs.d.ts +31 -1
- package/dist/mcp/handlers/domain-handler-configs.js +37 -3
- package/dist/mcp/handlers/handler-factory.js +40 -14
- package/dist/mcp/protocol-server.js +27 -2
- 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/types.d.ts +4 -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 +18 -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-EGIPTX5H.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
- package/dist/cli/chunks/base-6ORFD62I.js +0 -2
- package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
- package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
- package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
- package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
- package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
- package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
- package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
- package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
- package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
- package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
- package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
- package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
- package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
- package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
- package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
- package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
- package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
- package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
- package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
- package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
- package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
- package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
- package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
- package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
- package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
- package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
- package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
- package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
- package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
- package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
- package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
- package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
- package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
- package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
- package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
- package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
- package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
- package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
- package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
- package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
- package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
- package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
- package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
- package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
- package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
- package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
- package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
- package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
- package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
- package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
- package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
- package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
- package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
- package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
- package/dist/cli/chunks/wrappers-CZDI6Z3X.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
|
@@ -13,7 +13,9 @@ import { TEST_EXECUTION_CONSTANTS, LLM_ANALYSIS_CONSTANTS } from '../../constant
|
|
|
13
13
|
import { toErrorMessage, toError } from '../../../shared/error-utils.js';
|
|
14
14
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
15
15
|
import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-random.js';
|
|
16
|
-
import {
|
|
16
|
+
import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
17
|
+
import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
|
|
18
|
+
import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
|
|
17
19
|
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
18
20
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
19
21
|
import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
@@ -78,7 +80,7 @@ export class TestExecutorService {
|
|
|
78
80
|
};
|
|
79
81
|
// Store results
|
|
80
82
|
this.runResults.set(runId, runResult);
|
|
81
|
-
await this.storeResults(runId, runResult);
|
|
83
|
+
await this.storeResults(runId, runResult, request.testFiles);
|
|
82
84
|
// Create and store stats
|
|
83
85
|
const stats = {
|
|
84
86
|
runId,
|
|
@@ -133,7 +135,7 @@ export class TestExecutorService {
|
|
|
133
135
|
};
|
|
134
136
|
// Store results
|
|
135
137
|
this.runResults.set(runId, runResult);
|
|
136
|
-
await this.storeResults(runId, runResult);
|
|
138
|
+
await this.storeResults(runId, runResult, request.testFiles);
|
|
137
139
|
// Create and store stats
|
|
138
140
|
const stats = {
|
|
139
141
|
runId,
|
|
@@ -958,17 +960,22 @@ Provide:
|
|
|
958
960
|
if (coverages.length === 0) {
|
|
959
961
|
return undefined;
|
|
960
962
|
}
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
963
|
+
// #1015: average each metric over the entries that collected it; a
|
|
964
|
+
// metric nobody collected stays null.
|
|
965
|
+
const mean = (values) => {
|
|
966
|
+
const present = values.filter((v) => typeof v === 'number' && Number.isFinite(v));
|
|
967
|
+
return present.length > 0
|
|
968
|
+
? Math.round((present.reduce((a, v) => a + v, 0) / present.length) * 100) / 100
|
|
969
|
+
: null;
|
|
970
|
+
};
|
|
971
|
+
const line = mean(coverages.map(c => c.line));
|
|
972
|
+
if (line === null)
|
|
973
|
+
return undefined;
|
|
967
974
|
return {
|
|
968
|
-
line
|
|
969
|
-
branch:
|
|
970
|
-
function:
|
|
971
|
-
statement:
|
|
975
|
+
line,
|
|
976
|
+
branch: mean(coverages.map(c => c.branch)),
|
|
977
|
+
function: mean(coverages.map(c => c.function)),
|
|
978
|
+
statement: mean(coverages.map(c => c.statement)),
|
|
972
979
|
};
|
|
973
980
|
}
|
|
974
981
|
/**
|
|
@@ -989,59 +996,61 @@ Provide:
|
|
|
989
996
|
// Jest shape: { coverageSummary: { total: { lines: { pct }, branches: { pct }, ... } } }
|
|
990
997
|
const total = json?.coverageSummary?.total ?? json?.coverageMap?.total;
|
|
991
998
|
if (total?.lines?.pct !== undefined) {
|
|
999
|
+
const line = summaryPct(total.lines);
|
|
992
1000
|
return {
|
|
993
|
-
summary: {
|
|
994
|
-
line
|
|
995
|
-
branch:
|
|
996
|
-
function:
|
|
997
|
-
statement:
|
|
1001
|
+
summary: line === null ? undefined : {
|
|
1002
|
+
line,
|
|
1003
|
+
branch: summaryPct(total.branches),
|
|
1004
|
+
function: summaryPct(total.functions),
|
|
1005
|
+
statement: summaryPct(total.statements),
|
|
998
1006
|
},
|
|
999
1007
|
perFile,
|
|
1000
1008
|
};
|
|
1001
1009
|
}
|
|
1002
|
-
// Vitest v8 shape: coverageMap is keyed by file path
|
|
1010
|
+
// Vitest v8 shape: coverageMap is keyed by file path (istanbul entries)
|
|
1003
1011
|
const coverageMap = json?.coverageMap;
|
|
1004
1012
|
if (coverageMap && typeof coverageMap === 'object') {
|
|
1005
1013
|
const files = Object.keys(coverageMap).filter(k => k !== 'total');
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
if (count > 0) {
|
|
1034
|
-
return {
|
|
1035
|
-
summary: {
|
|
1036
|
-
line: Math.round((lines / count) * 100) / 100,
|
|
1037
|
-
branch: Math.round((branches / count) * 100) / 100,
|
|
1038
|
-
function: Math.round((functions / count) * 100) / 100,
|
|
1039
|
-
statement: Math.round((statements / count) * 100) / 100,
|
|
1040
|
-
},
|
|
1041
|
-
perFile,
|
|
1042
|
-
};
|
|
1014
|
+
const totals = { line: [0, 0], branch: [0, 0], function: [0, 0], statement: [0, 0] };
|
|
1015
|
+
for (const filePath of files) {
|
|
1016
|
+
const entry = coverageMap[filePath];
|
|
1017
|
+
const s = entry?.s ?? {};
|
|
1018
|
+
const f = entry?.f ?? {};
|
|
1019
|
+
const b = entry?.b ?? {};
|
|
1020
|
+
// #1012: line coverage per SOURCE LINE (istanbul's own rule), not per statement.
|
|
1021
|
+
const lineHits = istanbulLineHits({ statementMap: entry?.statementMap ?? {}, s });
|
|
1022
|
+
const lines = [[...lineHits.values()].filter(v => v > 0).length, lineHits.size];
|
|
1023
|
+
const statements = [Object.values(s).filter(v => v > 0).length, Object.keys(s).length];
|
|
1024
|
+
const fns = [Object.values(f).filter(v => v > 0).length, Object.keys(f).length];
|
|
1025
|
+
const branchCounts = Object.values(b).flatMap(v => (Array.isArray(v) ? v : [v]));
|
|
1026
|
+
const branches = [branchCounts.filter(c => c > 0).length, branchCounts.length];
|
|
1027
|
+
if (lines[1] === 0)
|
|
1028
|
+
continue;
|
|
1029
|
+
// #1015: istanbul's 0/0 (no branches / no functions) is "not
|
|
1030
|
+
// collected" — null — not 100%.
|
|
1031
|
+
perFile.push({
|
|
1032
|
+
path: filePath,
|
|
1033
|
+
line: ratio(lines),
|
|
1034
|
+
branch: ratio(branches),
|
|
1035
|
+
function: ratio(fns),
|
|
1036
|
+
statement: ratio(statements),
|
|
1037
|
+
});
|
|
1038
|
+
for (const [key, [covered, count]] of [['line', lines], ['branch', branches], ['function', fns], ['statement', statements]]) {
|
|
1039
|
+
totals[key][0] += covered;
|
|
1040
|
+
totals[key][1] += count;
|
|
1043
1041
|
}
|
|
1044
1042
|
}
|
|
1043
|
+
if (perFile.length > 0) {
|
|
1044
|
+
return {
|
|
1045
|
+
summary: {
|
|
1046
|
+
line: ratio(totals.line),
|
|
1047
|
+
branch: ratio(totals.branch),
|
|
1048
|
+
function: ratio(totals.function),
|
|
1049
|
+
statement: ratio(totals.statement),
|
|
1050
|
+
},
|
|
1051
|
+
perFile,
|
|
1052
|
+
};
|
|
1053
|
+
}
|
|
1045
1054
|
}
|
|
1046
1055
|
}
|
|
1047
1056
|
catch {
|
|
@@ -1073,26 +1082,33 @@ Provide:
|
|
|
1073
1082
|
if (key === 'total')
|
|
1074
1083
|
continue;
|
|
1075
1084
|
// Normalize path: strip cwd prefix, reject traversal sequences
|
|
1076
|
-
|
|
1077
|
-
|
|
1085
|
+
// Reject traversal; keep the key absolute (#1027 N7: one key form).
|
|
1086
|
+
const relative = key.replace(process.cwd() + '/', '').replace(process.cwd() + '\\', '');
|
|
1087
|
+
if (relative.includes('..'))
|
|
1078
1088
|
continue;
|
|
1089
|
+
const normalizedPath = fileCoverageKey(key);
|
|
1079
1090
|
const entry = value;
|
|
1080
|
-
|
|
1091
|
+
const line = summaryPct(entry?.lines);
|
|
1092
|
+
if (line !== null) {
|
|
1093
|
+
// #1015: a metric with total 0 is not collected (null), not its 100 pct.
|
|
1081
1094
|
perFile.push({
|
|
1082
1095
|
path: normalizedPath,
|
|
1083
|
-
line
|
|
1084
|
-
branch: entry.branches
|
|
1085
|
-
function: entry.functions
|
|
1086
|
-
statement: entry.statements
|
|
1096
|
+
line,
|
|
1097
|
+
branch: summaryPct(entry.branches),
|
|
1098
|
+
function: summaryPct(entry.functions),
|
|
1099
|
+
statement: summaryPct(entry.statements),
|
|
1087
1100
|
});
|
|
1088
1101
|
}
|
|
1089
1102
|
}
|
|
1103
|
+
const line = summaryPct(json.total.lines);
|
|
1104
|
+
if (line === null)
|
|
1105
|
+
continue;
|
|
1090
1106
|
return {
|
|
1091
1107
|
summary: {
|
|
1092
|
-
line
|
|
1093
|
-
branch: json.total.branches
|
|
1094
|
-
function: json.total.functions
|
|
1095
|
-
statement: json.total.statements
|
|
1108
|
+
line,
|
|
1109
|
+
branch: summaryPct(json.total.branches),
|
|
1110
|
+
function: summaryPct(json.total.functions),
|
|
1111
|
+
statement: summaryPct(json.total.statements),
|
|
1096
1112
|
},
|
|
1097
1113
|
perFile,
|
|
1098
1114
|
};
|
|
@@ -1111,50 +1127,69 @@ Provide:
|
|
|
1111
1127
|
}
|
|
1112
1128
|
return undefined;
|
|
1113
1129
|
}
|
|
1114
|
-
async storeResults(runId, result) {
|
|
1115
|
-
|
|
1130
|
+
async storeResults(runId, result, testFiles) {
|
|
1131
|
+
// #1028 N1: the record names the test files it ran, so per-test duration
|
|
1132
|
+
// is compared only between runs of the same test set.
|
|
1133
|
+
const files = testFiles && testFiles.length > 0 ? [...new Set(testFiles)].sort() : undefined;
|
|
1134
|
+
await this.memory.set(`test-run:${runId}`, files ? { ...result, testFiles: files } : result, {
|
|
1116
1135
|
namespace: 'test-execution',
|
|
1117
1136
|
persist: true,
|
|
1118
1137
|
});
|
|
1138
|
+
// A runner ERROR has no trustworthy result: it persists no evidence.
|
|
1139
|
+
if (result.status === 'error')
|
|
1140
|
+
return;
|
|
1141
|
+
const runStatus = result.failed > 0 || result.status !== 'passed' ? 'failed' : 'passed';
|
|
1142
|
+
const coverage = result.coverage && Number.isFinite(result.coverage.line) ? result.coverage : undefined;
|
|
1143
|
+
try {
|
|
1144
|
+
// #1027 NB1: this run's testsPassing and (when measured) its coverage,
|
|
1145
|
+
// written together under this runId — the same writer as
|
|
1146
|
+
// `aqe test execute`. Coverage from a run whose tests FAILED (N4) is
|
|
1147
|
+
// then never read next to a stale testsPassing from an earlier run.
|
|
1148
|
+
await writeTestRunEvidence(this.memory, {
|
|
1149
|
+
runId, passed: result.passed, failed: result.failed, skipped: result.skipped,
|
|
1150
|
+
}, { source: 'test-execution', ...(coverage ? { coverage: coverage.line } : {}) });
|
|
1151
|
+
}
|
|
1152
|
+
catch {
|
|
1153
|
+
// Non-critical — don't break test storage if evidence storage fails
|
|
1154
|
+
}
|
|
1119
1155
|
// Store coverage data so quality-assess and quality-gate can read it.
|
|
1120
1156
|
// Note: coverage:previous rotation is owned by coverage-analyzer (the
|
|
1121
1157
|
// canonical coverage service) to avoid double-rotation race conditions.
|
|
1122
|
-
if (
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1158
|
+
if (!coverage)
|
|
1159
|
+
return;
|
|
1160
|
+
try {
|
|
1161
|
+
// Same CoverageSummary shape as coverage-analyzer, stamped with its
|
|
1162
|
+
// provenance (#1008/#1015) so readers can trust it. An uncollected
|
|
1163
|
+
// metric stays null — never 0, never istanbul's 0/0 = 100%.
|
|
1164
|
+
await this.memory.set('coverage:latest', {
|
|
1165
|
+
line: coverage.line,
|
|
1166
|
+
branch: coverage.branch ?? null,
|
|
1167
|
+
function: coverage.function ?? null,
|
|
1168
|
+
statement: coverage.statement ?? null,
|
|
1169
|
+
files: result.fileCoverages?.length ?? 0,
|
|
1170
|
+
measured: true,
|
|
1171
|
+
runStatus,
|
|
1172
|
+
runId,
|
|
1173
|
+
}, { persist: true });
|
|
1174
|
+
// Store per-file coverage via memory.set() (not storeVector) so that
|
|
1175
|
+
// quality-analyzer's getStoredCoverage() can read it with memory.get()
|
|
1176
|
+
for (const fc of result.fileCoverages ?? []) {
|
|
1177
|
+
if (!Number.isFinite(fc.line))
|
|
1178
|
+
continue;
|
|
1179
|
+
// #1027 N7: one key form — the absolute path.
|
|
1180
|
+
await this.memory.set(`coverage:file:${fileCoverageKey(fc.path)}`, {
|
|
1181
|
+
line: fc.line,
|
|
1182
|
+
branch: fc.branch ?? null,
|
|
1183
|
+
function: fc.function ?? null,
|
|
1184
|
+
statement: fc.statement ?? null,
|
|
1185
|
+
measured: true,
|
|
1186
|
+
runStatus,
|
|
1132
1187
|
}, { persist: true });
|
|
1133
|
-
if (Number.isFinite(result.coverage.line)) {
|
|
1134
|
-
await writeQualityEvidence(this.memory, {
|
|
1135
|
-
coverage: result.coverage.line,
|
|
1136
|
-
}, {
|
|
1137
|
-
measuredAt: new Date().toISOString(),
|
|
1138
|
-
source: 'test-execution coverage',
|
|
1139
|
-
});
|
|
1140
|
-
}
|
|
1141
|
-
// Store per-file coverage via memory.set() (not storeVector) so that
|
|
1142
|
-
// quality-analyzer's getStoredCoverage() can read it with memory.get()
|
|
1143
|
-
if (result.fileCoverages) {
|
|
1144
|
-
for (const fc of result.fileCoverages) {
|
|
1145
|
-
await this.memory.set(`coverage:file:${fc.path}`, {
|
|
1146
|
-
line: fc.line,
|
|
1147
|
-
branch: fc.branch,
|
|
1148
|
-
function: fc.function,
|
|
1149
|
-
statement: fc.statement,
|
|
1150
|
-
}, { persist: true });
|
|
1151
|
-
}
|
|
1152
|
-
}
|
|
1153
|
-
}
|
|
1154
|
-
catch {
|
|
1155
|
-
// Non-critical — don't break test storage if coverage store fails
|
|
1156
1188
|
}
|
|
1157
1189
|
}
|
|
1190
|
+
catch {
|
|
1191
|
+
// Non-critical — don't break test storage if coverage store fails
|
|
1192
|
+
}
|
|
1158
1193
|
}
|
|
1159
1194
|
}
|
|
1160
1195
|
// ============================================================================
|
|
@@ -1166,4 +1201,19 @@ Provide:
|
|
|
1166
1201
|
export function createTestExecutorService(dependencies, config) {
|
|
1167
1202
|
return new TestExecutorService(dependencies, config);
|
|
1168
1203
|
}
|
|
1204
|
+
/** covered/total as a 2-decimal percentage, or null when there is nothing to cover. */
|
|
1205
|
+
function ratio([covered, total]) {
|
|
1206
|
+
return total > 0 ? Math.round((covered / total) * 10000) / 100 : null;
|
|
1207
|
+
}
|
|
1208
|
+
/**
|
|
1209
|
+
* A coverage-summary metric's percentage. istanbul writes `pct: 100` for a
|
|
1210
|
+
* metric with `total: 0`; that is "not collected" — null (#1015).
|
|
1211
|
+
*/
|
|
1212
|
+
function summaryPct(metric) {
|
|
1213
|
+
if (!metric || typeof metric.pct !== 'number' || !Number.isFinite(metric.pct))
|
|
1214
|
+
return null;
|
|
1215
|
+
if (typeof metric.total === 'number' && metric.total === 0)
|
|
1216
|
+
return null;
|
|
1217
|
+
return metric.pct;
|
|
1218
|
+
}
|
|
1169
1219
|
//# sourceMappingURL=test-executor.js.map
|
|
@@ -31,6 +31,7 @@ import { DecisionTransformerAlgorithm, } from '../../integrations/rl-suite/algor
|
|
|
31
31
|
import { isSONAThreeLoopEnabled } from '../../integrations/ruvector/feature-flags.js';
|
|
32
32
|
// Coherence Gate Integration (ADR-052)
|
|
33
33
|
import { createTestGenerationCoherenceGate, } from './services/coherence-gate-service.js';
|
|
34
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
34
35
|
const DEFAULT_CONFIG = {
|
|
35
36
|
maxConcurrentWorkflows: 5,
|
|
36
37
|
defaultTimeout: 60000, // 60 seconds
|
|
@@ -871,6 +872,9 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
|
|
|
871
872
|
return features.slice(0, 384);
|
|
872
873
|
}
|
|
873
874
|
async handleCoverageGapDetected(event) {
|
|
875
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
876
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
877
|
+
return;
|
|
874
878
|
// Auto-generate tests for detected coverage gaps
|
|
875
879
|
const payload = event.payload;
|
|
876
880
|
const result = await this.testGenerator.generateForCoverageGap(payload.file, payload.uncoveredLines, 'jest' // Default framework
|
|
@@ -10,6 +10,7 @@ import { RoutingFeedbackCollector } from '../../routing/routing-feedback.js';
|
|
|
10
10
|
import { createTestGeneratorServiceWithDependencies, } from './services/test-generator.js';
|
|
11
11
|
import { toError } from '../../shared/error-utils.js';
|
|
12
12
|
import { PatternMatcherService, } from './services/pattern-matcher.js';
|
|
13
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
13
14
|
/**
|
|
14
15
|
* Test Generation Domain Plugin
|
|
15
16
|
* Provides AI-powered test generation capabilities
|
|
@@ -277,6 +278,9 @@ export class TestGenerationPlugin extends BaseDomainPlugin {
|
|
|
277
278
|
// Event Handlers
|
|
278
279
|
// ============================================================================
|
|
279
280
|
async handleCoverageGap(event) {
|
|
281
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
282
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
283
|
+
return;
|
|
280
284
|
// Coverage gap detected - could auto-generate tests
|
|
281
285
|
const payload = event.payload;
|
|
282
286
|
// Only auto-generate for high-risk gaps
|
|
@@ -9,6 +9,7 @@ import { DEFAULT_FEEDBACK_CONFIG } from './types.js';
|
|
|
9
9
|
import { getUnifiedMemory } from '../kernel/unified-memory.js';
|
|
10
10
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
11
11
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
12
|
+
import { MEASURED_COVERAGE_SESSION_SQL } from './coverage-session-provenance.js';
|
|
12
13
|
// ============================================================================
|
|
13
14
|
// Coverage Session Store
|
|
14
15
|
// ============================================================================
|
|
@@ -101,8 +102,10 @@ export class CoverageLearner {
|
|
|
101
102
|
if (!this.db)
|
|
102
103
|
return;
|
|
103
104
|
const database = this.db.getDatabase();
|
|
105
|
+
// #1014: legacy MCP rows without provenance (estimates, 0.0 for
|
|
106
|
+
// unmeasured runs) are not loaded as sessions or learned as strategies.
|
|
104
107
|
const rows = database.prepare(`
|
|
105
|
-
SELECT * FROM coverage_sessions ORDER BY created_at DESC LIMIT ?
|
|
108
|
+
SELECT * FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT ?
|
|
106
109
|
`).all(this.config.maxOutcomesInMemory);
|
|
107
110
|
for (const row of rows.reverse()) {
|
|
108
111
|
const session = {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Provenance of coverage_sessions rows (#1014)
|
|
3
|
+
*
|
|
4
|
+
* Up to 3.15.5 the MCP handler factory (agent `qe-coverage-analysis`) wrote a
|
|
5
|
+
* coverage_sessions row for EVERY coverage_analyze_sublinear call: a static
|
|
6
|
+
* estimate's figure, or 0.0 for an UNMEASURED target. Those rows have no
|
|
7
|
+
* provenance and never expire. Rows written from now on carry
|
|
8
|
+
* `context_json.measured = true`.
|
|
9
|
+
*
|
|
10
|
+
* Readers ignore legacy rows of that agent instead of deleting them (no data
|
|
11
|
+
* is destroyed; the coverage-learner's own retention ages them out). Rows of
|
|
12
|
+
* other writers (e.g. the post-command hook, which records a real istanbul
|
|
13
|
+
* coverage-summary.json) are unaffected.
|
|
14
|
+
*/
|
|
15
|
+
/** The agent id of the MCP handler factory's coverage sessions. */
|
|
16
|
+
export declare const MCP_COVERAGE_AGENT_ID = "qe-coverage-analysis";
|
|
17
|
+
/**
|
|
18
|
+
* SQL predicate (no parameters) selecting coverage_sessions rows that are
|
|
19
|
+
* evidence. `CASE` keeps `json_extract` from running on malformed JSON.
|
|
20
|
+
*/
|
|
21
|
+
export declare const MEASURED_COVERAGE_SESSION_SQL: string;
|
|
22
|
+
/** JS form of {@link MEASURED_COVERAGE_SESSION_SQL} for rows already loaded. */
|
|
23
|
+
export declare function isMeasuredCoverageSession(row: {
|
|
24
|
+
agent_id?: string;
|
|
25
|
+
agentId?: string;
|
|
26
|
+
context?: unknown;
|
|
27
|
+
context_json?: string | null;
|
|
28
|
+
}): boolean;
|
|
29
|
+
//# sourceMappingURL=coverage-session-provenance.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Provenance of coverage_sessions rows (#1014)
|
|
3
|
+
*
|
|
4
|
+
* Up to 3.15.5 the MCP handler factory (agent `qe-coverage-analysis`) wrote a
|
|
5
|
+
* coverage_sessions row for EVERY coverage_analyze_sublinear call: a static
|
|
6
|
+
* estimate's figure, or 0.0 for an UNMEASURED target. Those rows have no
|
|
7
|
+
* provenance and never expire. Rows written from now on carry
|
|
8
|
+
* `context_json.measured = true`.
|
|
9
|
+
*
|
|
10
|
+
* Readers ignore legacy rows of that agent instead of deleting them (no data
|
|
11
|
+
* is destroyed; the coverage-learner's own retention ages them out). Rows of
|
|
12
|
+
* other writers (e.g. the post-command hook, which records a real istanbul
|
|
13
|
+
* coverage-summary.json) are unaffected.
|
|
14
|
+
*/
|
|
15
|
+
/** The agent id of the MCP handler factory's coverage sessions. */
|
|
16
|
+
export const MCP_COVERAGE_AGENT_ID = 'qe-coverage-analysis';
|
|
17
|
+
/**
|
|
18
|
+
* SQL predicate (no parameters) selecting coverage_sessions rows that are
|
|
19
|
+
* evidence. `CASE` keeps `json_extract` from running on malformed JSON.
|
|
20
|
+
*/
|
|
21
|
+
export const MEASURED_COVERAGE_SESSION_SQL = `(agent_id != '${MCP_COVERAGE_AGENT_ID}' OR ` +
|
|
22
|
+
`(CASE WHEN json_valid(context_json) THEN json_extract(context_json, '$.measured') END) = 1)`;
|
|
23
|
+
/** JS form of {@link MEASURED_COVERAGE_SESSION_SQL} for rows already loaded. */
|
|
24
|
+
export function isMeasuredCoverageSession(row) {
|
|
25
|
+
const agent = row.agent_id ?? row.agentId;
|
|
26
|
+
if (agent !== MCP_COVERAGE_AGENT_ID)
|
|
27
|
+
return true;
|
|
28
|
+
let context = row.context;
|
|
29
|
+
if (context === undefined && typeof row.context_json === 'string') {
|
|
30
|
+
try {
|
|
31
|
+
context = JSON.parse(row.context_json);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return !!context && typeof context === 'object' && context.measured === true;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=coverage-session-provenance.js.map
|
|
@@ -161,6 +161,8 @@ export class ModularInitOrchestrator {
|
|
|
161
161
|
workersStarted: workersResult?.data?.workersConfigured ?? 0,
|
|
162
162
|
codexGuidance: assetsResult?.data?.codexGuidance,
|
|
163
163
|
codexComponents: assetsResult?.data?.codexComponents,
|
|
164
|
+
retiredAssetsRemoved: assetsResult?.data?.retiredAssetsRemoved,
|
|
165
|
+
retiredAssetsKept: assetsResult?.data?.retiredAssetsKept,
|
|
164
166
|
},
|
|
165
167
|
totalDurationMs: Date.now() - startTime,
|
|
166
168
|
timestamp: new Date(),
|
|
@@ -20,6 +20,10 @@ export interface AssetsResult {
|
|
|
20
20
|
policy: 'full' | 'compact' | 'none';
|
|
21
21
|
ownedBytes: number;
|
|
22
22
|
};
|
|
23
|
+
/** #1017: retired shipped files removed from the project (exact path + shipped hash). */
|
|
24
|
+
retiredAssetsRemoved?: string[];
|
|
25
|
+
/** #1017: retired files left in place (edited, symlinked, or outside the project). */
|
|
26
|
+
retiredAssetsKept?: string[];
|
|
23
27
|
codexComponents?: {
|
|
24
28
|
hooks: {
|
|
25
29
|
status: string;
|
|
@@ -8,6 +8,7 @@ import { BasePhase, } from './phase-interface.js';
|
|
|
8
8
|
import { createSkillsInstaller } from '../skills-installer.js';
|
|
9
9
|
import { createAgentsInstaller } from '../agents-installer.js';
|
|
10
10
|
import { createN8nInstaller } from '../n8n-installer.js';
|
|
11
|
+
import { retireShippedAssets } from '../retired-assets.js';
|
|
11
12
|
import { installBrowserEngine, detectBrowserEngine, diagnosePlatform, DEFAULT_VIBIUM_SPEC, } from '../browser-engine-installer.js';
|
|
12
13
|
import { initializeOverlays } from '../../routing/qe-agent-registry.js';
|
|
13
14
|
/**
|
|
@@ -38,6 +39,8 @@ export class AssetsPhase extends BasePhase {
|
|
|
38
39
|
let kiroHooks = 0;
|
|
39
40
|
let codexGuidance;
|
|
40
41
|
let codexComponents;
|
|
42
|
+
let retiredAssetsRemoved = [];
|
|
43
|
+
let retiredAssetsKept = [];
|
|
41
44
|
if (options.upgrade) {
|
|
42
45
|
context.services.log(` Upgrade mode: overwriting existing files`);
|
|
43
46
|
}
|
|
@@ -58,6 +61,36 @@ export class AssetsPhase extends BasePhase {
|
|
|
58
61
|
context.services.warn(`Skills warnings: ${skillsResult.errors.join(', ')}`);
|
|
59
62
|
}
|
|
60
63
|
}
|
|
64
|
+
// #1017: remove files earlier releases shipped under names the user's test
|
|
65
|
+
// runner collects. Runs on EVERY init that manages the Claude skills, not
|
|
66
|
+
// only --upgrade: plain `init --auto` on an existing install skips skills
|
|
67
|
+
// that are already present, so without this the stale copies would never
|
|
68
|
+
// leave. It is safe on every run because only an exact path whose content
|
|
69
|
+
// still equals a shipped version is deleted (edited copies keep their whole
|
|
70
|
+
// group), and the renamed replacements are installed so the skill keeps
|
|
71
|
+
// working without --upgrade.
|
|
72
|
+
if (!options.noClaude) {
|
|
73
|
+
const retired = retireShippedAssets(projectRoot, {
|
|
74
|
+
sourceSkillsDir: createSkillsInstaller({ projectRoot }).getSourceSkillsDir(),
|
|
75
|
+
});
|
|
76
|
+
retiredAssetsRemoved = retired.removed;
|
|
77
|
+
retiredAssetsKept = retired.kept.flatMap((k) => k.files);
|
|
78
|
+
for (const relPath of retired.removed) {
|
|
79
|
+
context.services.log(` Removed retired asset: ${relPath}`);
|
|
80
|
+
}
|
|
81
|
+
for (const relPath of [...retired.installed, ...retired.refreshed]) {
|
|
82
|
+
context.services.log(` Updated skill file: ${relPath}`);
|
|
83
|
+
}
|
|
84
|
+
for (const kept of retired.kept) {
|
|
85
|
+
context.services.warn(`Kept ${kept.files.join(', ')}: ${kept.why}. ${kept.advice}.`);
|
|
86
|
+
}
|
|
87
|
+
for (const note of retired.replacementWarnings) {
|
|
88
|
+
context.services.warn(`Skill file kept: ${note}.`);
|
|
89
|
+
}
|
|
90
|
+
if (retired.missingReplacements.length > 0) {
|
|
91
|
+
context.services.warn(`Could not install ${retired.missingReplacements.join(', ')}; run "aqe init --upgrade" to refresh the skills.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
61
94
|
// Install agents (Claude Code surface — skipped with --no-claude, #532)
|
|
62
95
|
if (!options.noClaude) {
|
|
63
96
|
try {
|
|
@@ -354,6 +387,8 @@ export class AssetsPhase extends BasePhase {
|
|
|
354
387
|
browserEngine,
|
|
355
388
|
codexGuidance,
|
|
356
389
|
codexComponents,
|
|
390
|
+
retiredAssetsRemoved,
|
|
391
|
+
retiredAssetsKept,
|
|
357
392
|
};
|
|
358
393
|
}
|
|
359
394
|
/**
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retired shipped assets (#1017).
|
|
3
|
+
*
|
|
4
|
+
* Earlier releases copied files into the user's project that 3.15.6 renames.
|
|
5
|
+
* Re-running `aqe init` skips skills that already exist, so an existing install
|
|
6
|
+
* would keep the stale copies, and their test-glob names make the user's own
|
|
7
|
+
* vitest / jest collect AQE's eval fixtures.
|
|
8
|
+
*
|
|
9
|
+
* Each group is retired as a unit:
|
|
10
|
+
* - A retired file is removable only when its path matches exactly, it is a
|
|
11
|
+
* regular file (not a symlink), its resolved parent directory is inside the
|
|
12
|
+
* project root (no symlinked ancestor), and its sha256 equals a version AQE
|
|
13
|
+
* actually shipped.
|
|
14
|
+
* - If ANY present file in a group is not removable (edited, symlink, outside
|
|
15
|
+
* the project, unreadable), the whole group is kept. Deleting a pristine
|
|
16
|
+
* `budget.ts` next to a kept `budget.test.ts` would break the user's test run
|
|
17
|
+
* with "Cannot find module './budget'".
|
|
18
|
+
* - After removal, the renamed replacements are installed from the package
|
|
19
|
+
* (never overwriting an existing file), and companion files that still name
|
|
20
|
+
* the old files (README, eval yaml) are refreshed only when they are AQE's
|
|
21
|
+
* unmodified shipped copies. Plain `init --auto` therefore leaves a working
|
|
22
|
+
* skill without overwriting user edits.
|
|
23
|
+
*/
|
|
24
|
+
export interface RetiredFile {
|
|
25
|
+
/** Path relative to the project root, '/'-separated. */
|
|
26
|
+
readonly relPath: string;
|
|
27
|
+
/** sha256 (hex) of every distinct content AQE shipped at this path. */
|
|
28
|
+
readonly shippedSha256: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export interface ReplacementFile {
|
|
31
|
+
/** Destination relative to the project root. */
|
|
32
|
+
readonly relPath: string;
|
|
33
|
+
/** Source relative to the package skills directory (assets/skills). */
|
|
34
|
+
readonly source: string;
|
|
35
|
+
}
|
|
36
|
+
export interface RefreshFile extends ReplacementFile {
|
|
37
|
+
/** sha256 of every earlier shipped version; only those are overwritten. */
|
|
38
|
+
readonly previousSha256: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
export interface RetiredAssetGroup {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
/** Retired together: if one is kept, all are kept. */
|
|
43
|
+
readonly retired: readonly RetiredFile[];
|
|
44
|
+
/** Installed (if absent) once the group is retired. */
|
|
45
|
+
readonly replacements: readonly ReplacementFile[];
|
|
46
|
+
/** Overwritten once the group is retired, only if still AQE's unmodified copy. */
|
|
47
|
+
readonly refresh: readonly RefreshFile[];
|
|
48
|
+
/** Why the group was retired / what to do if it is kept. */
|
|
49
|
+
readonly advice: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Hashes are of `git show <tag>:assets/skills/<path>` over every v3 release tag.
|
|
53
|
+
* Retired files: one distinct content each (v3.13.0–v3.15.5 for qe-court,
|
|
54
|
+
* v3.0.0–v3.15.5 for testability-scoring); the same bytes now ship under the
|
|
55
|
+
* new names, which a unit test pins. Refreshed files list every earlier shipped
|
|
56
|
+
* content (qe-court.yaml changed once, at v3.14.0).
|
|
57
|
+
*/
|
|
58
|
+
export declare const RETIRED_ASSET_GROUPS: readonly RetiredAssetGroup[];
|
|
59
|
+
export interface RetireOptions {
|
|
60
|
+
/** Package skills directory (assets/skills) used for replacements and refreshes. */
|
|
61
|
+
sourceSkillsDir?: string;
|
|
62
|
+
groups?: readonly RetiredAssetGroup[];
|
|
63
|
+
}
|
|
64
|
+
export interface RetireResult {
|
|
65
|
+
/** Retired files removed (exact path + shipped content). */
|
|
66
|
+
removed: string[];
|
|
67
|
+
/** Renamed replacements installed. */
|
|
68
|
+
installed: string[];
|
|
69
|
+
/** Companion files updated from AQE's unmodified copy. */
|
|
70
|
+
refreshed: string[];
|
|
71
|
+
/** Groups left in place, with the files, the cause, and what to do. */
|
|
72
|
+
kept: Array<{
|
|
73
|
+
group: string;
|
|
74
|
+
files: string[];
|
|
75
|
+
why: string;
|
|
76
|
+
advice: string;
|
|
77
|
+
}>;
|
|
78
|
+
/** Replacements that could not be installed (missing package source or unsafe target). */
|
|
79
|
+
missingReplacements: string[];
|
|
80
|
+
/** Why a replacement target was left alone (symlink or other non-file in the way). */
|
|
81
|
+
replacementWarnings: string[];
|
|
82
|
+
}
|
|
83
|
+
export declare function sha256Hex(content: Buffer): string;
|
|
84
|
+
/** Remove retired assets AQE shipped unmodified, install replacements; keep anything else. */
|
|
85
|
+
export declare function retireShippedAssets(projectRoot: string, options?: RetireOptions): RetireResult;
|
|
86
|
+
//# sourceMappingURL=retired-assets.d.ts.map
|