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
|
@@ -11,6 +11,20 @@ import { PersistentSONAEngine } from '../../integrations/ruvector/sona-persisten
|
|
|
11
11
|
import { QEFlashAttention } from '../../integrations/ruvector/wrappers';
|
|
12
12
|
import type { GateEvaluationRequest, GateResult, QualityAnalysisRequest, QualityReport, QualityMetrics } from './interfaces';
|
|
13
13
|
import type { DreamCycleCompletedPayload } from '../../shared/events/domain-events';
|
|
14
|
+
import type { QualityScore } from '../../shared/types';
|
|
15
|
+
/**
|
|
16
|
+
* Score features with unmeasured (-1) fields masked to 0, followed by one
|
|
17
|
+
* presence flag per field (1 = measured, 0 = not), so a learner can tell
|
|
18
|
+
* "unmeasured" apart from a measured 0.
|
|
19
|
+
*/
|
|
20
|
+
export declare function maskedScoreFeatures(score: QualityScore, scale?: number): number[];
|
|
21
|
+
/**
|
|
22
|
+
* True when an analysis report has no verdict to learn from: a requested
|
|
23
|
+
* metric was not measured, or nothing was measured at all.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isInsufficientQualityReport(report: QualityReport): boolean;
|
|
26
|
+
/** True when a gate request carries any unmeasured (negative or non-finite) metric. */
|
|
27
|
+
export declare function hasUnmeasuredGateMetrics(metrics: QualityMetrics): boolean;
|
|
14
28
|
/**
|
|
15
29
|
* RL-trained thresholds result
|
|
16
30
|
*/
|
|
@@ -9,6 +9,39 @@ import { toErrorMessage } from '../../shared/error-utils.js';
|
|
|
9
9
|
import { ActorCriticAlgorithm } from '../../integrations/rl-suite/algorithms/actor-critic.js';
|
|
10
10
|
import { createPersistentSONAEngine } from '../../integrations/ruvector/sona-persistence.js';
|
|
11
11
|
import { createQEFlashAttention, } from '../../integrations/ruvector/wrappers.js';
|
|
12
|
+
import { isMeasuredMetricValue } from './evidence-sufficiency.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// #1002: unmeasured values never reach a learner as numbers
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/** Score fields in the fixed order every quality feature vector uses. */
|
|
17
|
+
const SCORE_FIELDS = ['overall', 'coverage', 'complexity', 'maintainability', 'security'];
|
|
18
|
+
/**
|
|
19
|
+
* Score features with unmeasured (-1) fields masked to 0, followed by one
|
|
20
|
+
* presence flag per field (1 = measured, 0 = not), so a learner can tell
|
|
21
|
+
* "unmeasured" apart from a measured 0.
|
|
22
|
+
*/
|
|
23
|
+
export function maskedScoreFeatures(score, scale = 1) {
|
|
24
|
+
const values = SCORE_FIELDS.map((field) => score[field]);
|
|
25
|
+
return [
|
|
26
|
+
...values.map((value) => (isMeasuredMetricValue(value) ? value / scale : 0)),
|
|
27
|
+
...values.map((value) => (isMeasuredMetricValue(value) ? 1 : 0)),
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
/** Score fields carrying the unmeasured sentinel. */
|
|
31
|
+
function unmeasuredScoreFields(score) {
|
|
32
|
+
return SCORE_FIELDS.filter((field) => !isMeasuredMetricValue(score[field]));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* True when an analysis report has no verdict to learn from: a requested
|
|
36
|
+
* metric was not measured, or nothing was measured at all.
|
|
37
|
+
*/
|
|
38
|
+
export function isInsufficientQualityReport(report) {
|
|
39
|
+
return (report.unmeasured?.length ?? 0) > 0 || !isMeasuredMetricValue(report.score.overall);
|
|
40
|
+
}
|
|
41
|
+
/** True when a gate request carries any unmeasured (negative or non-finite) metric. */
|
|
42
|
+
export function hasUnmeasuredGateMetrics(metrics) {
|
|
43
|
+
return Object.values(metrics).some((value) => !isMeasuredMetricValue(value));
|
|
44
|
+
}
|
|
12
45
|
/**
|
|
13
46
|
* Initialize Actor-Critic RL for quality gate threshold tuning
|
|
14
47
|
*/
|
|
@@ -74,6 +107,9 @@ export async function initializeFlashAttention() {
|
|
|
74
107
|
* Use Actor-Critic RL to predict optimal quality gate thresholds
|
|
75
108
|
*/
|
|
76
109
|
export async function tuneThresholdsWithRL(actorCritic, metrics) {
|
|
110
|
+
// #1002: never predict from unmeasured inputs; keep the canonical thresholds.
|
|
111
|
+
if (hasUnmeasuredGateMetrics(metrics))
|
|
112
|
+
return null;
|
|
77
113
|
try {
|
|
78
114
|
const state = {
|
|
79
115
|
id: `quality-state-${Date.now()}`,
|
|
@@ -129,6 +165,9 @@ export function applyActionToThresholds(thresholds, action) {
|
|
|
129
165
|
* Train Actor-Critic with quality gate evaluation results
|
|
130
166
|
*/
|
|
131
167
|
export async function trainActorCritic(actorCritic, request, result) {
|
|
168
|
+
// #1002: an experience built from unmeasured inputs teaches the critic fake data.
|
|
169
|
+
if (hasUnmeasuredGateMetrics(request.metrics))
|
|
170
|
+
return;
|
|
132
171
|
try {
|
|
133
172
|
const state = {
|
|
134
173
|
id: `quality-state-${Date.now()}`,
|
|
@@ -177,6 +216,9 @@ export async function trainActorCritic(actorCritic, request, result) {
|
|
|
177
216
|
* Store quality gate pattern in SONA for learning
|
|
178
217
|
*/
|
|
179
218
|
export async function storeQualityPattern(qesona, request, result, domainName) {
|
|
219
|
+
// #1002: no gate pattern from unmeasured inputs.
|
|
220
|
+
if (hasUnmeasuredGateMetrics(request.metrics))
|
|
221
|
+
return;
|
|
180
222
|
try {
|
|
181
223
|
const state = {
|
|
182
224
|
id: `quality-state-${Date.now()}`,
|
|
@@ -212,14 +254,15 @@ export async function storeQualityPattern(qesona, request, result, domainName) {
|
|
|
212
254
|
* Store quality analysis pattern in SONA
|
|
213
255
|
*/
|
|
214
256
|
export async function storeQualityAnalysisPattern(qesona, request, report, domainName) {
|
|
257
|
+
// #1002: an insufficient-evidence run has no verdict — neither a success
|
|
258
|
+
// nor a failure pattern may be recorded from it.
|
|
259
|
+
if (isInsufficientQualityReport(report))
|
|
260
|
+
return;
|
|
215
261
|
try {
|
|
216
262
|
const state = {
|
|
217
263
|
id: `quality-analysis-${Date.now()}`,
|
|
218
264
|
features: [
|
|
219
|
-
report.score
|
|
220
|
-
report.score.coverage,
|
|
221
|
-
report.score.complexity,
|
|
222
|
-
report.score.maintainability,
|
|
265
|
+
...maskedScoreFeatures(report.score),
|
|
223
266
|
report.metrics.length,
|
|
224
267
|
request.sourceFiles.length,
|
|
225
268
|
],
|
|
@@ -235,6 +278,8 @@ export async function storeQualityAnalysisPattern(qesona, request, report, domai
|
|
|
235
278
|
}, 'quality-assessment', domainName, {
|
|
236
279
|
sourceFileCount: request.sourceFiles.length,
|
|
237
280
|
recommendationCount: report.recommendations.length,
|
|
281
|
+
// Score fields outside the requested scope, masked to 0 in features.
|
|
282
|
+
unmeasuredScoreFields: unmeasuredScoreFields(report.score),
|
|
238
283
|
});
|
|
239
284
|
}
|
|
240
285
|
catch (error) {
|
|
@@ -248,12 +293,8 @@ export async function enhanceWithSimilarityPatterns(report, flashAttention, qeso
|
|
|
248
293
|
try {
|
|
249
294
|
const state = {
|
|
250
295
|
id: `similarity-search-${Date.now()}`,
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
report.score.coverage,
|
|
254
|
-
report.score.complexity,
|
|
255
|
-
report.score.maintainability,
|
|
256
|
-
],
|
|
296
|
+
// #1002: -1 (unmeasured) is masked, never matched as a value.
|
|
297
|
+
features: maskedScoreFeatures(report.score),
|
|
257
298
|
};
|
|
258
299
|
const adaptation = await qesona.adaptPattern(state, 'quality-assessment', domainName);
|
|
259
300
|
if (!adaptation.success || !adaptation.pattern) {
|
|
@@ -286,13 +327,10 @@ export async function enhanceWithSimilarityPatterns(report, flashAttention, qeso
|
|
|
286
327
|
* Create embedding from quality metrics for similarity search
|
|
287
328
|
*/
|
|
288
329
|
export function createMetricsEmbedding(report) {
|
|
330
|
+
// #1002: unmeasured score fields are masked (was security -1 / 100 = -0.01).
|
|
289
331
|
const features = [
|
|
290
|
-
report.score
|
|
291
|
-
report.
|
|
292
|
-
report.score.complexity / 100,
|
|
293
|
-
report.score.maintainability / 100,
|
|
294
|
-
report.score.security / 100,
|
|
295
|
-
...report.metrics.map(m => m.value / 100),
|
|
332
|
+
...maskedScoreFeatures(report.score, 100),
|
|
333
|
+
...report.metrics.map(m => (isMeasuredMetricValue(m.value) ? m.value / 100 : 0)),
|
|
296
334
|
];
|
|
297
335
|
while (features.length < 384) {
|
|
298
336
|
features.push(0);
|
|
@@ -244,8 +244,10 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
244
244
|
}
|
|
245
245
|
// Success path
|
|
246
246
|
this.completeWorkflow(workflowId);
|
|
247
|
-
// Three-loop protocol: instantAdapt must precede recordOutcome
|
|
248
|
-
|
|
247
|
+
// Three-loop protocol: instantAdapt must precede recordOutcome.
|
|
248
|
+
// #1002: unmeasured (-1) gate inputs are never fed to the learner.
|
|
249
|
+
if (isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()
|
|
250
|
+
&& !RLIntegration.hasUnmeasuredGateMetrics(effectiveRequest.metrics)) {
|
|
249
251
|
const m = effectiveRequest.metrics;
|
|
250
252
|
this.qesona.instantAdapt([
|
|
251
253
|
m.coverage / 100,
|
|
@@ -384,8 +386,10 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
384
386
|
result.value = enhanced;
|
|
385
387
|
}
|
|
386
388
|
}
|
|
389
|
+
// #1002: an insufficient-evidence run has no verdict to learn from.
|
|
390
|
+
const learnable = !RLIntegration.isInsufficientQualityReport(result.value);
|
|
387
391
|
// Three-loop protocol: instantAdapt must precede recordOutcome
|
|
388
|
-
if (isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()) {
|
|
392
|
+
if (learnable && isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()) {
|
|
389
393
|
const score = result.value.score;
|
|
390
394
|
this.qesona.instantAdapt([
|
|
391
395
|
score.overall / 100,
|
|
@@ -405,12 +409,12 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
405
409
|
}
|
|
406
410
|
catch { /* must not break main flow */ }
|
|
407
411
|
}
|
|
408
|
-
// Store quality pattern in SONA
|
|
412
|
+
// Store quality pattern in SONA (skipped inside for insufficient evidence)
|
|
409
413
|
if (this.config.enableSONAPatternLearning && this.qesona) {
|
|
410
414
|
await this.storeQualityAnalysisPattern(request, result.value);
|
|
411
415
|
}
|
|
412
|
-
// Auto-trigger gate evaluation if enabled
|
|
413
|
-
if (this.config.enableAutoGating && result.value.score.overall < 70) {
|
|
416
|
+
// Auto-trigger gate evaluation if enabled (-1 = not measured, not a low score)
|
|
417
|
+
if (this.config.enableAutoGating && result.value.score.overall >= 0 && result.value.score.overall < 70) {
|
|
414
418
|
// Store for downstream consumption
|
|
415
419
|
await this.memory.set(`quality-assessment:auto-gate:${workflowId}`, { score: result.value.score, recommendations: result.value.recommendations }, { namespace: 'quality-assessment', ttl: 3600 });
|
|
416
420
|
}
|
|
@@ -1,25 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Validation of
|
|
3
|
-
* quality-assessment domain stores them as `coverage:latest` (#1008).
|
|
2
|
+
* Validation of measured coverage records (#1008, #1014, #1015).
|
|
4
3
|
*
|
|
5
|
-
*
|
|
4
|
+
* Used for `coverage-analysis.CoverageReportCreated` payloads before the
|
|
5
|
+
* quality-assessment domain stores them as `coverage:latest`, and by every
|
|
6
|
+
* reader of the stored records (`coverage:latest`, `coverage:previous`,
|
|
7
|
+
* `coverage:file:*`).
|
|
8
|
+
*
|
|
9
|
+
* Only a record its producer explicitly marked `measured: true`, carrying
|
|
6
10
|
* finite coverage figures, is coverage evidence. Anything else — a static
|
|
7
|
-
* estimate, a legacy
|
|
8
|
-
*
|
|
11
|
+
* estimate, a legacy record without provenance (written by <= 3.15.4, or the
|
|
12
|
+
* `{"files":0}` bridge echo removed in #1013), or a look-alike with no coverage
|
|
13
|
+
* figures at all — is ignored rather than read as a measurement or as zeros.
|
|
9
14
|
*/
|
|
10
15
|
/** The `coverage:latest` record written from a measured coverage report. */
|
|
11
16
|
export interface MeasuredCoverageSummary {
|
|
12
17
|
line: number;
|
|
13
|
-
branch
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
/** `null` = the report collected no branch data (not 0%, #1015). */
|
|
19
|
+
branch: number | null;
|
|
20
|
+
/** `null` = the report collected no function data (not 0%, #1015). */
|
|
21
|
+
function: number | null;
|
|
22
|
+
/** `null` = the report collected no statement data (lcov, Cobertura; #1027). */
|
|
23
|
+
statement: number | null;
|
|
16
24
|
files: number;
|
|
17
25
|
/** Provenance stamp: this record came from instrumented coverage. */
|
|
18
26
|
measured: true;
|
|
27
|
+
/** Outcome of the test run behind the record, when known (#1027 N4). */
|
|
28
|
+
runStatus?: 'passed' | 'failed';
|
|
29
|
+
}
|
|
30
|
+
/** A per-file `coverage:file:<path>` record written from measured coverage. */
|
|
31
|
+
export interface MeasuredFileCoverage {
|
|
32
|
+
line: number;
|
|
33
|
+
branch: number | null;
|
|
34
|
+
function: number | null;
|
|
35
|
+
statement: number | null;
|
|
36
|
+
measured: true;
|
|
19
37
|
}
|
|
20
38
|
/**
|
|
21
39
|
* Return the measured summary to store, or `null` when the payload is not
|
|
22
40
|
* measured coverage evidence.
|
|
23
41
|
*/
|
|
24
42
|
export declare function measuredCoverageSummary(payload: unknown): MeasuredCoverageSummary | null;
|
|
43
|
+
/**
|
|
44
|
+
* Return a stored per-file coverage record when it is measured evidence, or
|
|
45
|
+
* `null` (#1014): legacy unstamped `coverage:file:*` records — static
|
|
46
|
+
* estimates written by <= 3.15.4 never expire — must not be read as coverage.
|
|
47
|
+
*/
|
|
48
|
+
export declare function measuredFileCoverage(record: unknown): MeasuredFileCoverage | null;
|
|
25
49
|
//# sourceMappingURL=coverage-report-event.d.ts.map
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Validation of
|
|
3
|
-
* quality-assessment domain stores them as `coverage:latest` (#1008).
|
|
2
|
+
* Validation of measured coverage records (#1008, #1014, #1015).
|
|
4
3
|
*
|
|
5
|
-
*
|
|
4
|
+
* Used for `coverage-analysis.CoverageReportCreated` payloads before the
|
|
5
|
+
* quality-assessment domain stores them as `coverage:latest`, and by every
|
|
6
|
+
* reader of the stored records (`coverage:latest`, `coverage:previous`,
|
|
7
|
+
* `coverage:file:*`).
|
|
8
|
+
*
|
|
9
|
+
* Only a record its producer explicitly marked `measured: true`, carrying
|
|
6
10
|
* finite coverage figures, is coverage evidence. Anything else — a static
|
|
7
|
-
* estimate, a legacy
|
|
8
|
-
*
|
|
11
|
+
* estimate, a legacy record without provenance (written by <= 3.15.4, or the
|
|
12
|
+
* `{"files":0}` bridge echo removed in #1013), or a look-alike with no coverage
|
|
13
|
+
* figures at all — is ignored rather than read as a measurement or as zeros.
|
|
9
14
|
*/
|
|
10
15
|
const isPercent = (v) => typeof v === 'number' && Number.isFinite(v) && v >= 0 && v <= 100;
|
|
16
|
+
/** A percentage, or `null` for a metric that was not collected. */
|
|
17
|
+
const isPercentOrNull = (v) => v === null || isPercent(v);
|
|
11
18
|
/**
|
|
12
19
|
* Return the measured summary to store, or `null` when the payload is not
|
|
13
20
|
* measured coverage evidence.
|
|
@@ -18,7 +25,7 @@ export function measuredCoverageSummary(payload) {
|
|
|
18
25
|
const p = payload;
|
|
19
26
|
if (p.measured !== true)
|
|
20
27
|
return null;
|
|
21
|
-
if (!isPercent(p.line) || !
|
|
28
|
+
if (!isPercent(p.line) || !isPercentOrNull(p.statement) || !isPercentOrNull(p.branch) || !isPercentOrNull(p.function)) {
|
|
22
29
|
return null;
|
|
23
30
|
}
|
|
24
31
|
const files = typeof p.files === 'number' && Number.isInteger(p.files) && p.files >= 0 ? p.files : null;
|
|
@@ -31,6 +38,21 @@ export function measuredCoverageSummary(payload) {
|
|
|
31
38
|
statement: p.statement,
|
|
32
39
|
files,
|
|
33
40
|
measured: true,
|
|
41
|
+
...(p.runStatus === 'passed' || p.runStatus === 'failed' ? { runStatus: p.runStatus } : {}),
|
|
34
42
|
};
|
|
35
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Return a stored per-file coverage record when it is measured evidence, or
|
|
46
|
+
* `null` (#1014): legacy unstamped `coverage:file:*` records — static
|
|
47
|
+
* estimates written by <= 3.15.4 never expire — must not be read as coverage.
|
|
48
|
+
*/
|
|
49
|
+
export function measuredFileCoverage(record) {
|
|
50
|
+
if (!record || typeof record !== 'object')
|
|
51
|
+
return null;
|
|
52
|
+
const r = record;
|
|
53
|
+
if (r.measured !== true || !isPercent(r.line))
|
|
54
|
+
return null;
|
|
55
|
+
const opt = (v) => (isPercent(v) ? v : null);
|
|
56
|
+
return { line: r.line, branch: opt(r.branch), function: opt(r.function), statement: opt(r.statement), measured: true };
|
|
57
|
+
}
|
|
36
58
|
//# sourceMappingURL=coverage-report-event.js.map
|
|
@@ -12,5 +12,5 @@ export { DeploymentAdvisorService, type IDeploymentAdvisorService, type Deployme
|
|
|
12
12
|
export { DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS, DEFAULT_QUALITY_THRESHOLDS, QUALITY_EVIDENCE_NAMESPACE, QUALITY_METRICS, INSUFFICIENT_EVIDENCE, InsufficientQualityEvidenceError, evaluateQualityEvidence, inspectQualityEvidence, loadQualityEvidence, writeQualityEvidence, type EvaluatedQualityCheck, type QualityEvidenceRecord, type QualityEvidenceValues, type QualityMetricName, type QualityThreshold, } from './quality-evidence.js';
|
|
13
13
|
export { CoherenceGateService, createCoherenceGateService, type CoherenceGateResult, type CoherenceGateServiceConfig, } from './services/coherence-gate';
|
|
14
14
|
export * from './coherence';
|
|
15
|
-
export type { QualityAssessmentAPI, GateEvaluationRequest, QualityAnalysisRequest, DeploymentRequest, ComplexityRequest, GateResult, GateCheck, QualityReport, QualityMetricDetail, QualityTrend, Recommendation, DeploymentAdvice, ComplexityReport, FileComplexity, ComplexitySummary, ComplexityHotspot, QualityMetrics, GateThresholds, } from './interfaces';
|
|
15
|
+
export type { QualityAssessmentAPI, GateEvaluationRequest, QualityAnalysisRequest, DeploymentRequest, ComplexityRequest, GateResult, GateCheck, QualityReport, UnmeasuredQualityMetric, ExcludedQualityFile, PartialQualityMetric, QualityMetricDetail, QualityTrend, Recommendation, DeploymentAdvice, ComplexityReport, FileComplexity, ComplexitySummary, ComplexityHotspot, QualityMetrics, GateThresholds, } from './interfaces';
|
|
16
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -68,6 +68,11 @@ export interface QualityAnalysisRequest {
|
|
|
68
68
|
sourceFiles: string[];
|
|
69
69
|
includeMetrics: string[];
|
|
70
70
|
compareBaseline?: string;
|
|
71
|
+
/**
|
|
72
|
+
* #1021: files the caller named explicitly. If one of them fails to read or
|
|
73
|
+
* parse, the affected metrics are unmeasured regardless of coverage of scope.
|
|
74
|
+
*/
|
|
75
|
+
explicitFiles?: string[];
|
|
71
76
|
}
|
|
72
77
|
export interface QualityReport {
|
|
73
78
|
score: QualityScore;
|
|
@@ -76,6 +81,43 @@ export interface QualityReport {
|
|
|
76
81
|
recommendations: Recommendation[];
|
|
77
82
|
/** ADR-051: Optional LLM-generated insights (when enableLLMInsights is true) */
|
|
78
83
|
llmInsights?: LLMQualityInsights;
|
|
84
|
+
/**
|
|
85
|
+
* #1011: requested metrics that were NOT measured, with the reason. They are
|
|
86
|
+
* absent from `metrics` and -1 in `score`; never a fixed fallback value.
|
|
87
|
+
*/
|
|
88
|
+
unmeasured?: UnmeasuredQualityMetric[];
|
|
89
|
+
/**
|
|
90
|
+
* #1021: files left out of the scope (binary, generated, minified, type
|
|
91
|
+
* declarations, refused by the reader's path policy). Metrics stay measured
|
|
92
|
+
* over the remaining files.
|
|
93
|
+
*/
|
|
94
|
+
excluded?: ExcludedQualityFile[];
|
|
95
|
+
/**
|
|
96
|
+
* #1021: metrics measured over most, but not all, analysable files. Their
|
|
97
|
+
* value covers `analysedFiles` of `totalFiles`; `failed` lists the gaps.
|
|
98
|
+
*/
|
|
99
|
+
partial?: PartialQualityMetric[];
|
|
100
|
+
}
|
|
101
|
+
/** #1021: a file excluded from static analysis, with the reason. */
|
|
102
|
+
export interface ExcludedQualityFile {
|
|
103
|
+
file: string;
|
|
104
|
+
reason: string;
|
|
105
|
+
}
|
|
106
|
+
/** #1021: a metric measured over part of its scope. */
|
|
107
|
+
export interface PartialQualityMetric {
|
|
108
|
+
metric: string;
|
|
109
|
+
analysedFiles: number;
|
|
110
|
+
totalFiles: number;
|
|
111
|
+
/** analysedFiles / totalFiles, three decimals, rounded down (never 1 while a file failed). */
|
|
112
|
+
coverageOfScope: number;
|
|
113
|
+
failed: ExcludedQualityFile[];
|
|
114
|
+
}
|
|
115
|
+
/** #1011: a requested metric the static analysis could not measure. */
|
|
116
|
+
export interface UnmeasuredQualityMetric {
|
|
117
|
+
metric: string;
|
|
118
|
+
reason: string;
|
|
119
|
+
/** Files that could not be analysed, when the cause is file-specific. */
|
|
120
|
+
files?: string[];
|
|
79
121
|
}
|
|
80
122
|
/**
|
|
81
123
|
* ADR-051: LLM-generated quality insights
|
|
@@ -140,13 +182,17 @@ export interface ComplexityReport {
|
|
|
140
182
|
summary: ComplexitySummary;
|
|
141
183
|
hotspots: ComplexityHotspot[];
|
|
142
184
|
}
|
|
185
|
+
/** Values are -1 when not measured (not requested, or the file could not be analysed). */
|
|
143
186
|
export interface FileComplexity {
|
|
144
187
|
path: string;
|
|
145
188
|
cyclomatic: number;
|
|
146
189
|
cognitive: number;
|
|
147
190
|
maintainability: number;
|
|
148
191
|
linesOfCode: number;
|
|
192
|
+
/** #1011: why this file's metrics are unmeasured (unreadable, binary, unparseable). */
|
|
193
|
+
unmeasuredReason?: string;
|
|
149
194
|
}
|
|
195
|
+
/** Averages over measured files only; -1 when no file was measured for that metric. */
|
|
150
196
|
export interface ComplexitySummary {
|
|
151
197
|
averageCyclomatic: number;
|
|
152
198
|
averageCognitive: number;
|
|
@@ -10,6 +10,20 @@ export interface QualityEvidenceRecord {
|
|
|
10
10
|
value: number;
|
|
11
11
|
measuredAt: string;
|
|
12
12
|
source: string;
|
|
13
|
+
/**
|
|
14
|
+
* The test run this figure came from, when it came from one (#1027 NB1).
|
|
15
|
+
* Coverage and testsPassing written from one run share the runId.
|
|
16
|
+
*/
|
|
17
|
+
runId?: string;
|
|
18
|
+
/** Whether that run's tests passed (#1027 NB1). */
|
|
19
|
+
runStatus?: 'passed' | 'failed';
|
|
20
|
+
}
|
|
21
|
+
/** Metadata of an evidence write; `runId`/`runStatus` scope it to one test run. */
|
|
22
|
+
export interface QualityEvidenceMetadata {
|
|
23
|
+
measuredAt: string;
|
|
24
|
+
source: string;
|
|
25
|
+
runId?: string;
|
|
26
|
+
runStatus?: 'passed' | 'failed';
|
|
13
27
|
}
|
|
14
28
|
export interface QualityThreshold {
|
|
15
29
|
direction: 'min' | 'max';
|
|
@@ -25,9 +39,31 @@ export interface EvaluatedQualityCheck {
|
|
|
25
39
|
direction: 'min' | 'max';
|
|
26
40
|
severity: QualityThreshold['severity'];
|
|
27
41
|
}
|
|
28
|
-
export declare function writeQualityEvidence(memory: MemoryBackend, values: Partial<QualityEvidenceValues>, metadata:
|
|
29
|
-
|
|
42
|
+
export declare function writeQualityEvidence(memory: MemoryBackend, values: Partial<QualityEvidenceValues>, metadata: QualityEvidenceMetadata): Promise<void>;
|
|
43
|
+
/** Test counts of one run. */
|
|
44
|
+
export interface TestRunCounts {
|
|
45
|
+
passed: number;
|
|
46
|
+
failed: number;
|
|
47
|
+
skipped?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* testsPassing as `aqe test execute` has always computed it: passed over all
|
|
51
|
+
* tests, skipped included; a run with no tests is 0 (#1027 NB1: one formula).
|
|
52
|
+
*/
|
|
53
|
+
export declare function testsPassingPercent(run: TestRunCounts): number;
|
|
54
|
+
/**
|
|
55
|
+
* Record the evidence of ONE test run (#1027 NB1): its testsPassing and, when
|
|
56
|
+
* it measured coverage, its coverage — both stamped with the same runId and
|
|
57
|
+
* runStatus. The single writer for `aqe test execute`, test_execute_parallel
|
|
58
|
+
* (TestExecutorService) and the coverage auto-run, so coverage from a failing
|
|
59
|
+
* run can never sit next to a stale testsPassing from an earlier run.
|
|
60
|
+
*/
|
|
61
|
+
export declare function writeTestRunEvidence(memory: MemoryBackend, run: TestRunCounts & {
|
|
62
|
+
runId: string;
|
|
63
|
+
}, options: {
|
|
30
64
|
source: string;
|
|
65
|
+
coverage?: number;
|
|
66
|
+
measuredAt?: string;
|
|
31
67
|
}): Promise<void>;
|
|
32
68
|
/** #996: the single status word for "a verdict cannot be reached on this evidence". */
|
|
33
69
|
export declare const INSUFFICIENT_EVIDENCE: "insufficient-evidence";
|
|
@@ -69,6 +105,16 @@ export declare function inspectQualityEvidence(memory: MemoryBackend, options?:
|
|
|
69
105
|
values: Partial<QualityEvidenceValues>;
|
|
70
106
|
problems: UnusableQualityEvidence[];
|
|
71
107
|
}>;
|
|
108
|
+
/**
|
|
109
|
+
* #1028: the latest record of ONE metric when it is usable evidence — the same
|
|
110
|
+
* validation (schema, metric, finite value, source, fresh measuredAt) the gate
|
|
111
|
+
* applies — or `null`. Unlike {@link inspectQualityEvidence} it returns the
|
|
112
|
+
* record, so a reader can follow its `runId` to the run it came from.
|
|
113
|
+
*/
|
|
114
|
+
export declare function readQualityEvidenceRecord(memory: Pick<MemoryBackend, 'get'>, metric: QualityMetricName, options?: {
|
|
115
|
+
now?: number;
|
|
116
|
+
maxAgeMs?: number;
|
|
117
|
+
}): Promise<QualityEvidenceRecord | null>;
|
|
72
118
|
export declare function loadQualityEvidence(memory: MemoryBackend, options?: {
|
|
73
119
|
now?: number;
|
|
74
120
|
maxAgeMs?: number;
|
|
@@ -71,6 +71,8 @@ export async function writeQualityEvidence(memory, values, metadata) {
|
|
|
71
71
|
value,
|
|
72
72
|
measuredAt: metadata.measuredAt,
|
|
73
73
|
source: metadata.source,
|
|
74
|
+
...(metadata.runId ? { runId: metadata.runId } : {}),
|
|
75
|
+
...(metadata.runStatus ? { runStatus: metadata.runStatus } : {}),
|
|
74
76
|
};
|
|
75
77
|
await memory.set(evidenceKey(metric), record, {
|
|
76
78
|
namespace: QUALITY_EVIDENCE_NAMESPACE,
|
|
@@ -78,6 +80,34 @@ export async function writeQualityEvidence(memory, values, metadata) {
|
|
|
78
80
|
});
|
|
79
81
|
}
|
|
80
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* testsPassing as `aqe test execute` has always computed it: passed over all
|
|
85
|
+
* tests, skipped included; a run with no tests is 0 (#1027 NB1: one formula).
|
|
86
|
+
*/
|
|
87
|
+
export function testsPassingPercent(run) {
|
|
88
|
+
const total = run.passed + run.failed + (run.skipped ?? 0);
|
|
89
|
+
return total > 0 ? (run.passed / total) * 100 : 0;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Record the evidence of ONE test run (#1027 NB1): its testsPassing and, when
|
|
93
|
+
* it measured coverage, its coverage — both stamped with the same runId and
|
|
94
|
+
* runStatus. The single writer for `aqe test execute`, test_execute_parallel
|
|
95
|
+
* (TestExecutorService) and the coverage auto-run, so coverage from a failing
|
|
96
|
+
* run can never sit next to a stale testsPassing from an earlier run.
|
|
97
|
+
*/
|
|
98
|
+
export async function writeTestRunEvidence(memory, run, options) {
|
|
99
|
+
const runStatus = run.failed > 0 ? 'failed' : 'passed';
|
|
100
|
+
const metadata = {
|
|
101
|
+
measuredAt: options.measuredAt ?? new Date().toISOString(),
|
|
102
|
+
source: options.source,
|
|
103
|
+
runId: run.runId,
|
|
104
|
+
runStatus,
|
|
105
|
+
};
|
|
106
|
+
await writeQualityEvidence(memory, {
|
|
107
|
+
testsPassing: testsPassingPercent(run),
|
|
108
|
+
...(typeof options.coverage === 'number' && Number.isFinite(options.coverage) ? { coverage: options.coverage } : {}),
|
|
109
|
+
}, metadata);
|
|
110
|
+
}
|
|
81
111
|
/** #996: the single status word for "a verdict cannot be reached on this evidence". */
|
|
82
112
|
export const INSUFFICIENT_EVIDENCE = 'insufficient-evidence';
|
|
83
113
|
/** #996: what to run to measure a metric that has no usable evidence. */
|
|
@@ -141,6 +171,7 @@ export async function inspectQualityEvidence(memory, options = {}) {
|
|
|
141
171
|
const maxAgeMs = options.maxAgeMs ?? DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS;
|
|
142
172
|
const values = {};
|
|
143
173
|
const problems = [];
|
|
174
|
+
const valid = {};
|
|
144
175
|
for (const metric of QUALITY_METRICS) {
|
|
145
176
|
const record = await memory.get(evidenceKey(metric), {
|
|
146
177
|
namespace: QUALITY_EVIDENCE_NAMESPACE,
|
|
@@ -148,13 +179,44 @@ export async function inspectQualityEvidence(memory, options = {}) {
|
|
|
148
179
|
try {
|
|
149
180
|
validateRecord(record, metric, now, maxAgeMs);
|
|
150
181
|
values[metric] = record.value;
|
|
182
|
+
valid[metric] = record;
|
|
151
183
|
}
|
|
152
184
|
catch (error) {
|
|
153
185
|
problems.push({ metric, reason: error instanceof Error ? error.message : String(error) });
|
|
154
186
|
}
|
|
155
187
|
}
|
|
188
|
+
// #1027 NB1: coverage measured in a run whose tests FAILED is evidence only
|
|
189
|
+
// next to the testsPassing of that same run — never next to a stale figure
|
|
190
|
+
// from an earlier (passing) run, which would let the gate pass.
|
|
191
|
+
const coverage = valid.coverage;
|
|
192
|
+
if (coverage?.runStatus === 'failed' && (!coverage.runId || valid.testsPassing?.runId !== coverage.runId)) {
|
|
193
|
+
delete values.coverage;
|
|
194
|
+
problems.push({
|
|
195
|
+
metric: 'coverage',
|
|
196
|
+
reason: 'Measured coverage comes from a run with failing tests, but no testsPassing evidence '
|
|
197
|
+
+ 'from that same run was recorded. Re-run the test suite.',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
156
200
|
return { values, problems };
|
|
157
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* #1028: the latest record of ONE metric when it is usable evidence — the same
|
|
204
|
+
* validation (schema, metric, finite value, source, fresh measuredAt) the gate
|
|
205
|
+
* applies — or `null`. Unlike {@link inspectQualityEvidence} it returns the
|
|
206
|
+
* record, so a reader can follow its `runId` to the run it came from.
|
|
207
|
+
*/
|
|
208
|
+
export async function readQualityEvidenceRecord(memory, metric, options = {}) {
|
|
209
|
+
const record = await memory.get(evidenceKey(metric), {
|
|
210
|
+
namespace: QUALITY_EVIDENCE_NAMESPACE,
|
|
211
|
+
});
|
|
212
|
+
try {
|
|
213
|
+
validateRecord(record, metric, options.now ?? Date.now(), options.maxAgeMs ?? DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS);
|
|
214
|
+
return record;
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
158
220
|
export async function loadQualityEvidence(memory, options = {}) {
|
|
159
221
|
const { values, problems } = await inspectQualityEvidence(memory, options);
|
|
160
222
|
if (problems.length > 0)
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
* Comprehensive quality metrics analysis with trends and recommendations
|
|
4
4
|
*/
|
|
5
5
|
import { Result, QualityScore } from '../../../shared/types';
|
|
6
|
+
import { CodeMetricsAnalyzer } from '../../../shared/metrics';
|
|
6
7
|
import { MemoryBackend } from '../../../kernel/interfaces';
|
|
7
|
-
import { QualityAnalysisRequest, QualityReport, QualityMetricDetail, QualityTrend, ComplexityRequest, ComplexityReport, LLMQualityInsights } from '../interfaces';
|
|
8
|
+
import { QualityAnalysisRequest, QualityReport, QualityMetricDetail, QualityTrend, ComplexityRequest, ComplexityReport, LLMQualityInsights, UnmeasuredQualityMetric } from '../interfaces';
|
|
8
9
|
import type { HybridRouter } from '../../../shared/llm';
|
|
9
10
|
/**
|
|
10
11
|
* Interface for the quality analyzer service
|
|
@@ -49,7 +50,17 @@ export interface QualityAnalyzerDependencies {
|
|
|
49
50
|
memory: MemoryBackend;
|
|
50
51
|
/** ADR-051: Optional LLM router for AI-enhanced quality insights */
|
|
51
52
|
llmRouter?: HybridRouter;
|
|
53
|
+
/** Code metrics analyzer (defaults to the shared instance). */
|
|
54
|
+
metricsAnalyzer?: CodeMetricsAnalyzer;
|
|
52
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* #1021: a parsed metric with read/parse failures is still evidence when at
|
|
58
|
+
* least this share of the analysable files (in-scope minus excluded) was
|
|
59
|
+
* analysed. Below it, the unseen files are too large a blind spot for an
|
|
60
|
+
* average to describe the target, so the metric is unmeasured. 95% keeps one
|
|
61
|
+
* failure in a 20-file scope acceptable but not one in 10.
|
|
62
|
+
*/
|
|
63
|
+
export declare const MIN_ANALYSED_SHARE = 0.95;
|
|
53
64
|
export declare class QualityAnalyzerService implements IQualityAnalyzerService {
|
|
54
65
|
private readonly config;
|
|
55
66
|
private readonly metricsAnalyzer;
|
|
@@ -75,7 +86,7 @@ export declare class QualityAnalyzerService implements IQualityAnalyzerService {
|
|
|
75
86
|
* Generate quality insights using LLM
|
|
76
87
|
* Provides AI-powered explanation and prioritized recommendations
|
|
77
88
|
*/
|
|
78
|
-
generateQualityInsightsWithLLM(metrics: QualityMetricDetail[], score: QualityScore, codeContext?: string): Promise<LLMQualityInsights | null>;
|
|
89
|
+
generateQualityInsightsWithLLM(metrics: QualityMetricDetail[], score: QualityScore, codeContext?: string, unmeasured?: UnmeasuredQualityMetric[]): Promise<LLMQualityInsights | null>;
|
|
79
90
|
/**
|
|
80
91
|
* Build prompt for quality insights generation
|
|
81
92
|
*/
|
|
@@ -104,6 +115,16 @@ export declare class QualityAnalyzerService implements IQualityAnalyzerService {
|
|
|
104
115
|
* Get quality trend for a specific metric
|
|
105
116
|
*/
|
|
106
117
|
getQualityTrend(metric: string, days: number): Promise<Result<QualityTrend, Error>>;
|
|
118
|
+
/**
|
|
119
|
+
* Collect per-file metric values. #1011 / #1021:
|
|
120
|
+
* - excluded files (binary, generated, minified, declarations, refused by
|
|
121
|
+
* reader policy) leave the scope with a reason;
|
|
122
|
+
* - failed files (unreadable, unparseable) make a parsed metric partial, or
|
|
123
|
+
* unmeasured below MIN_ANALYSED_SHARE or when a failed file was named
|
|
124
|
+
* explicitly;
|
|
125
|
+
* - failed duplication detection and missing coverage are unmeasured.
|
|
126
|
+
* Never a fixed fallback value.
|
|
127
|
+
*/
|
|
107
128
|
private collectFileMetrics;
|
|
108
129
|
private getStoredCoverage;
|
|
109
130
|
private aggregateMetrics;
|