agentic-qe 3.15.5 → 3.15.7
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 +262 -0
- package/README.md +2 -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 +8 -6
- package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
- package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-PI4I7PME.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-J7TXHX4U.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
- package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-FXESDCFR.js} +4 -4
- package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-OWUGXKNT.js} +2 -2
- package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-EPAWLYIZ.js} +3 -3
- package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
- package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-3W2E6TC6.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-HU7VACJ4.js} +2 -2
- package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-72XOR6E2.js} +2 -2
- package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
- package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-2423JAA5.js} +1 -1
- package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-24CENUT4.js} +3 -3
- package/dist/cli/chunks/chunk-2AYBYXOA.js +4 -0
- package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-2E3XWKEU.js} +2 -2
- package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-2RJYA6WK.js} +2 -2
- package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2YVJ5OUL.js} +5 -5
- package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34JLY3U6.js} +2 -2
- package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-3JD2USUH.js} +2 -2
- package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-3RM46XFP.js} +1 -1
- package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-44DPYNPE.js} +1 -1
- package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-4DIZ5BT6.js} +2 -2
- package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-4G2VNW4C.js} +2 -2
- package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-56ZKQYZY.js} +3 -3
- package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-5KCBX225.js} +2 -2
- package/dist/cli/chunks/chunk-5KS7HA37.js +2 -0
- package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-5PBRBS7D.js} +2 -2
- package/dist/cli/chunks/chunk-5Q22XPTH.js +2 -0
- package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-634D2ENF.js} +2 -2
- package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-6AYRAOCA.js} +2 -2
- package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-6BO3WCK7.js} +2 -2
- package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-6FEQ73BF.js} +2 -2
- package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-6JT73S5B.js} +1 -1
- package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6OS7HREG.js} +1 -1
- package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6PKCQXEW.js} +2 -2
- package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-7EX4DEQR.js} +2 -2
- package/dist/cli/chunks/chunk-7UCVYYWL.js +3 -0
- package/dist/cli/chunks/chunk-AAA4SHEG.js +2 -0
- package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-AXO7OOOA.js} +2 -2
- package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-B7M323VL.js} +2 -2
- package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-BB7OLQKO.js} +1 -1
- package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-BTIBXGVQ.js} +4 -4
- package/dist/cli/chunks/chunk-BTYKGVJ5.js +2 -0
- package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-C2CUPJGR.js} +1 -1
- package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-C2MDBBFF.js} +3 -3
- package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-CG5DZCOZ.js} +1 -1
- package/dist/cli/chunks/chunk-CIFWOMNX.js +2 -0
- package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-CWPRU7ZI.js} +2 -2
- package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-CXTJ47QS.js} +2 -2
- package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-DCJW2DPL.js} +4 -4
- package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-DGK6GQMO.js} +2 -2
- package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-DVPGBDBP.js} +3 -3
- package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
- package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-ECSLJJOQ.js} +1 -1
- package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-ED32XJ5R.js} +2 -2
- package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-EDU72RTW.js} +1 -1
- package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-EL75G2A3.js} +1 -1
- package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-EV2BYY6T.js} +1 -1
- package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-F62EKVVC.js} +2 -2
- package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-FTTFJ7SJ.js} +1 -1
- package/dist/cli/chunks/chunk-FVBFASOD.js +2 -0
- package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-G762PEFO.js} +26 -26
- package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-G7YTZTGU.js} +1 -1
- package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-GY2SAIXP.js} +2 -2
- package/dist/cli/chunks/chunk-H4WHDFB5.js +4 -0
- package/dist/cli/chunks/chunk-HLZATDD2.js +2 -0
- package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-HPG7354V.js} +2 -2
- package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-HSDOOFV7.js} +1 -1
- package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-HTWIGQL4.js} +2 -2
- package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-HXBAQKMH.js} +2 -2
- package/dist/cli/chunks/chunk-HZFT3P5B.js +2 -0
- package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-I7H4IP7T.js} +2 -2
- package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-IARSGAG7.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-IC2WSSD5.js} +8 -8
- package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-ICPALF4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-IWQQIXHO.js} +2 -2
- package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-IYQ7XNE5.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-J26GADQE.js} +418 -412
- package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-J43DV3ME.js} +1 -1
- package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-JFPXCQNP.js} +1 -1
- package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-JK6B3ULP.js} +2 -2
- package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-JPHDMHFG.js} +2 -2
- package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-JVYPXW6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-JY4AIEZ7.js} +1 -1
- package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-JY4WLN3K.js} +2 -2
- package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-JYXOFN3E.js} +2 -2
- package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-K7W55B7Q.js} +3 -3
- package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-KPOPBUUJ.js} +2 -2
- package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-LDXQRNTT.js} +1 -1
- package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-LDZWIV2O.js} +1 -1
- package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-LGBN7TKC.js} +2 -2
- package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-LMEU64TR.js} +2 -2
- package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-LP4AS2E4.js} +1 -1
- package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-LQOVA4YX.js} +2 -2
- package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-LVEX4GID.js} +2 -2
- package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-M63QB466.js} +2 -2
- package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-MDC4G323.js} +1 -1
- package/dist/cli/chunks/chunk-MHZPC4HJ.js +2 -0
- package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-MJJC6HUK.js} +1 -1
- package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-MKFQNCXI.js} +2 -2
- package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-MMXG3LL6.js} +2 -2
- package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-MNCF643K.js} +2 -2
- package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-MNZFEIE5.js} +1 -1
- package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-MQ6OF6DU.js} +1 -1
- package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-MRHM4COP.js} +2 -2
- package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-N4PMPSJJ.js} +2 -2
- package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-NZQPP533.js} +3 -3
- package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-OA4GR3EZ.js} +2 -2
- package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-OJEZNLB6.js} +2 -2
- package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-ONVALAZN.js} +2 -2
- package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-PEKDSJBC.js} +2 -2
- package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-PG64YV6C.js} +66 -65
- package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-PQV7E7XH.js} +2 -2
- package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
- package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-PUECC4WI.js} +2 -2
- package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-PXZKPUW6.js} +2 -2
- package/dist/cli/chunks/chunk-PYHYOKYT.js +2 -0
- package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-PZG3542B.js} +2 -2
- package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-Q2T5FXEA.js} +2 -2
- package/dist/cli/chunks/chunk-QJE6ZW2X.js +6 -0
- package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-QNQSM2OG.js} +2 -2
- package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QQT6QENQ.js} +9 -9
- package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-QVG4ZDXX.js} +3 -3
- package/dist/cli/chunks/chunk-QWLTHFZW.js +16 -0
- package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-RCYLCA7E.js} +10 -6
- package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-REEIFA6A.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-RNYX4CPI.js} +2 -2
- package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-RORZ5O5Z.js} +2 -2
- package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-RRPYWBFX.js} +2 -2
- package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-RXAFLK34.js} +2 -2
- package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-SQHLC6I5.js} +1 -1
- package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-SSP2B2WR.js} +2 -2
- package/dist/cli/chunks/chunk-SX2YSHE7.js +115 -0
- package/dist/cli/chunks/chunk-T3ZDVU6F.js +5 -0
- package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-T6W5APYP.js} +1 -1
- package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-TU4LIIOP.js} +2 -2
- package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-UBYCR3O4.js} +2 -2
- package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-UCLN6AME.js} +1 -1
- package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-UIYKR2SA.js} +2 -2
- package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-UUHIEM2M.js} +18 -18
- package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-UY3REQOK.js} +2 -2
- package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-V2SAEMZY.js} +1 -1
- package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-V5NGBQAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-VCA6YYII.js} +1 -1
- package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
- package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-VKPKYMCT.js} +2 -2
- package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-VNW5Q2CX.js} +2 -2
- package/dist/cli/chunks/chunk-VUFRTGML.js +3 -0
- package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-W4X2VTIY.js} +2 -2
- package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-WTLIEBDH.js} +1 -1
- package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-WUV5RZUI.js} +2 -2
- package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-WXI2STKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-XEWXYGJI.js} +2 -2
- package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-XNSQZ3O7.js} +2 -2
- package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-XTJMY3KS.js} +1 -1
- package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-XXAVQACL.js} +1 -1
- package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-Y4SAWE45.js} +1 -1
- package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-Y6A46M3B.js} +2 -2
- package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-YDZJWDR6.js} +3 -3
- package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-YFOBQSOW.js} +2 -2
- package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-YK3NOC2R.js} +2 -2
- package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-YUC7RJGR.js} +1 -1
- package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-Z3VJLWRR.js} +2 -2
- package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-ZLVQSEZK.js} +2 -2
- package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-ZRLNACPY.js} +2 -2
- package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-ZTMZFF25.js} +2 -2
- package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
- package/dist/cli/chunks/ci-5HEXJZ2C.js +81 -0
- package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-WU4NPDAM.js} +2 -2
- package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-BJQVXX5E.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-3BMGTQCB.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-GVDGJWMU.js} +2 -2
- package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
- package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-V4MRGWVA.js} +2 -2
- package/dist/cli/chunks/{code-QSZTDINQ.js → code-A3TGQPEO.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-YJQSYWD3.js} +2 -2
- package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-7N7UQPAH.js} +2 -2
- package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-PPGVYLZS.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-XZTFLYV5.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-Z5I57RAH.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-F5YZ6BHB.js} +2 -2
- package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
- package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-GO33ZQAP.js} +2 -2
- package/dist/cli/chunks/coverage-GSHKLY74.js +49 -0
- package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
- package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-JJ7IVJZB.js} +2 -2
- package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
- package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-IRL7QRNE.js} +5 -5
- package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
- package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-RHU62KRI.js} +2 -2
- package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-3VKV4Z6C.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-SFIML4FK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-CJ4FA3OC.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-BCRKPCAA.js} +2 -2
- package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-VL3HFLPV.js +3 -0
- package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-GGKRI4P5.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-F72TIRQY.js +40 -0
- package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-7KOOF3MA.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-FNHBTHBH.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-IOZEWWFU.js} +2 -2
- package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
- package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-QX5KXTRC.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-OH2DOQP7.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-W67NXTNE.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
- package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-4UDISJ3G.js} +2 -2
- package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-NOQJWQ4P.js} +43 -43
- package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-2OD3APVP.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-5AZGMBUM.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
- package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
- package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
- package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
- package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-RLZYLVQJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-LFZOC7VD.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
- package/dist/cli/chunks/learning-XRPGLUWR.js +122 -0
- package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-OMK5HYPH.js} +4 -4
- package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
- package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XADC7KCU.js} +2 -2
- package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
- package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-PIBKSSVU.js} +2 -2
- package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-AP7EZERS.js} +5 -5
- package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
- package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-7JJ2FZ33.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
- package/dist/cli/chunks/orchestrator-2H2YKSGJ.js +452 -0
- package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
- package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-LIE5BWQY.js} +2 -2
- package/dist/cli/chunks/{platform-2MCRKC25.js → platform-SMYUNLGX.js} +2 -2
- package/dist/cli/chunks/plugin-LJDIXQNT.js +27 -0
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
- package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
- package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
- package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-YVM66DLI.js} +2 -2
- package/dist/cli/chunks/{prove-QWONEJWX.js → prove-ZBDT52GD.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
- package/dist/cli/chunks/{quality-WFH54FY7.js → quality-DUKXGDDO.js} +2 -2
- package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-SM3RXF4V.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
- package/dist/cli/chunks/real-embeddings-4QLQZDB5.js +2 -0
- package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-M3EO32YQ.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-S6Q5OLV5.js} +2 -2
- package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
- package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
- package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-55FMUACP.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-QATKAAPK.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-RFXFU6JD.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
- package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
- package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
- package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
- package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
- package/dist/cli/chunks/shared-rvf-adapter-YHLLNFHF.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
- package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-LUHKQAGM.js} +2 -2
- package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-S6S5PNR7.js} +2 -2
- package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-PQ7NZAJ4.js} +2 -2
- package/dist/cli/chunks/{sync-PDPORHVN.js → sync-Q6KRQXU6.js} +2 -2
- package/dist/cli/chunks/sync-S744AEJC.js +2 -0
- package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-GAMGEHUW.js} +2 -2
- package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-6CRDEELN.js} +3 -3
- package/dist/cli/chunks/{test-DMBJFQNL.js → test-FNH67DBK.js} +12 -12
- package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-NZA5SHK6.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-CXKG55JD.js +2 -0
- package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-M7WWEDJX.js} +2 -2
- package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-2IFMCK6A.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
- package/dist/cli/chunks/{types-K4FLXR2K.js → types-N7FWTOLD.js} +2 -2
- package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
- package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
- package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-KDB5RGL7.js} +2 -2
- package/dist/cli/chunks/{validate-AAP773B3.js → validate-KMUV5FUA.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-ANZWRCJU.js} +2 -2
- package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-SXXC4NMS.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-2LWSKMBU.js} +2 -2
- package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
- package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-JJMSJFZP.js} +2 -2
- package/dist/cli/chunks/witness-chain-repair-OX7VFW6T.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
- package/dist/cli/chunks/witness-key-manager-3DS4L7LE.js +2 -0
- package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-ARWAMHD3.js} +28 -28
- package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
- package/dist/cli/chunks/wrappers-J6KGTUSJ.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 +50 -9
- package/dist/cli/commands/security.d.ts +16 -0
- package/dist/cli/commands/security.js +76 -9
- package/dist/cli/commands/test.js +6 -7
- package/dist/cli/commands/workflow.js +9 -5
- package/dist/cli/handlers/init-guard.d.ts +33 -0
- package/dist/cli/handlers/init-guard.js +66 -0
- package/dist/cli/handlers/init-handler.d.ts +3 -0
- package/dist/cli/handlers/init-handler.js +64 -54
- package/dist/cli/handlers/interfaces.js +5 -1
- package/dist/cli/index.js +11 -0
- 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 +13 -1
- package/dist/cli/utils/ci-output.js +21 -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/security-handlers.js +22 -6
- 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 +12 -3
- package/dist/coordination/protocols/quality-gate.js +10 -6
- package/dist/coordination/protocols/security-audit.js +11 -0
- package/dist/coordination/result-saver.d.ts +31 -0
- package/dist/coordination/result-saver.js +146 -46
- 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 +35 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +42 -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 +13 -8
- 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 +50 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +49 -3
- 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 +197 -112
- package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
- package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
- package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
- package/dist/domains/security-compliance/interfaces.d.ts +30 -0
- package/dist/domains/security-compliance/plugin.d.ts +7 -1
- package/dist/domains/security-compliance/plugin.js +19 -0
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
- package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
- package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
- package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
- package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
- package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
- package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
- package/dist/domains/security-compliance/services/security-auditor.js +133 -92
- 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/retry-handler.js +17 -6
- package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
- package/dist/domains/test-execution/services/test-executor.js +239 -109
- 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 +180 -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 +908 -896
- package/dist/mcp/handlers/domain-handler-configs.d.ts +35 -1
- package/dist/mcp/handlers/domain-handler-configs.js +42 -4
- package/dist/mcp/handlers/handler-factory.js +40 -14
- package/dist/mcp/protocol-server.js +29 -3
- 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 +10 -0
- package/dist/optimization/session-cache.d.ts +19 -1
- package/dist/optimization/session-cache.js +36 -2
- package/dist/plugins/cache.js +2 -1
- package/dist/plugins/sources/github.js +2 -1
- package/dist/plugins/sources/npm.js +2 -1
- package/dist/shared/aqe-managed-dirs.d.ts +24 -0
- package/dist/shared/aqe-managed-dirs.js +56 -0
- package/dist/shared/events/domain-events.d.ts +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/shared/security/index.d.ts +2 -2
- package/dist/shared/security/index.js +1 -1
- package/dist/shared/security/osv-client.d.ts +79 -132
- package/dist/shared/security/osv-client.js +344 -167
- package/dist/shared/security/osv-lookup.d.ts +124 -0
- package/dist/shared/security/osv-lookup.js +246 -0
- package/dist/shared/security/osv-types.d.ts +119 -0
- package/dist/shared/security/osv-types.js +6 -0
- package/dist/workers/interfaces.d.ts +15 -2
- package/dist/workers/namespaced-keys.d.ts +16 -0
- package/dist/workers/namespaced-keys.js +24 -0
- 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 +3 -3
- package/dist/workers/quality-daemon/persistent-memory.js +4 -4
- package/dist/workers/worker-manager.js +10 -3
- package/dist/workers/workers/coverage-tracker.js +69 -33
- package/dist/workers/workers/defect-predictor.d.ts +25 -8
- package/dist/workers/workers/defect-predictor.js +223 -216
- package/dist/workers/workers/performance-baseline.d.ts +24 -9
- package/dist/workers/workers/performance-baseline.js +187 -230
- package/dist/workers/workers/quality-gate.d.ts +11 -9
- package/dist/workers/workers/quality-gate.js +125 -267
- package/dist/workers/workers/regression-monitor.d.ts +18 -1
- package/dist/workers/workers/regression-monitor.js +276 -117
- package/dist/workers/workers/security-scan-records.d.ts +111 -0
- package/dist/workers/workers/security-scan-records.js +128 -0
- package/dist/workers/workers/security-scan.d.ts +25 -7
- package/dist/workers/workers/security-scan.js +187 -164
- package/package.json +2 -2
- 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-BO4PKNYP.js +0 -102
- 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-GTSOFCMQ.js +0 -2
- 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/security-7723AZZ4.js +0 -13
- 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
|
@@ -7,13 +7,16 @@ import { spawn } from 'node:child_process';
|
|
|
7
7
|
import { existsSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
8
8
|
import { tmpdir } from 'node:os';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
10
11
|
import { v4 as uuidv4 } from 'uuid';
|
|
11
12
|
import { ok, err } from '../../../shared/types/index.js';
|
|
12
13
|
import { TEST_EXECUTION_CONSTANTS, LLM_ANALYSIS_CONSTANTS } from '../../constants.js';
|
|
13
14
|
import { toErrorMessage, toError } from '../../../shared/error-utils.js';
|
|
14
15
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
15
16
|
import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-random.js';
|
|
16
|
-
import {
|
|
17
|
+
import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
18
|
+
import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
|
|
19
|
+
import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
|
|
17
20
|
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
18
21
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
19
22
|
import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
@@ -78,7 +81,7 @@ export class TestExecutorService {
|
|
|
78
81
|
};
|
|
79
82
|
// Store results
|
|
80
83
|
this.runResults.set(runId, runResult);
|
|
81
|
-
await this.storeResults(runId, runResult);
|
|
84
|
+
await this.storeResults(runId, runResult, request.testFiles);
|
|
82
85
|
// Create and store stats
|
|
83
86
|
const stats = {
|
|
84
87
|
runId,
|
|
@@ -133,7 +136,7 @@ export class TestExecutorService {
|
|
|
133
136
|
};
|
|
134
137
|
// Store results
|
|
135
138
|
this.runResults.set(runId, runResult);
|
|
136
|
-
await this.storeResults(runId, runResult);
|
|
139
|
+
await this.storeResults(runId, runResult, request.testFiles);
|
|
137
140
|
// Create and store stats
|
|
138
141
|
const stats = {
|
|
139
142
|
runId,
|
|
@@ -303,11 +306,13 @@ Provide:
|
|
|
303
306
|
const failedTests = [];
|
|
304
307
|
const coverages = [];
|
|
305
308
|
const allFileCoverages = [];
|
|
309
|
+
const executionResults = [];
|
|
306
310
|
let passed = 0;
|
|
307
311
|
let failed = 0;
|
|
308
312
|
let skipped = 0;
|
|
309
313
|
for (const file of testFiles) {
|
|
310
314
|
const result = await this.executeTestFile(file, framework, timeout);
|
|
315
|
+
executionResults.push(result);
|
|
311
316
|
passed += result.passed;
|
|
312
317
|
failed += result.failed;
|
|
313
318
|
skipped += result.skipped;
|
|
@@ -319,16 +324,61 @@ Provide:
|
|
|
319
324
|
allFileCoverages.push(...result.fileCoverages);
|
|
320
325
|
}
|
|
321
326
|
}
|
|
327
|
+
// Separate runner invocations each have their own coverage map. Averaging
|
|
328
|
+
// percentages double-counts source files and misses disjoint hits (#1030).
|
|
329
|
+
// If any run lacks raw counters, there is no honest combined measurement.
|
|
330
|
+
const merged = testFiles.length > 1 && !this.config.simulateForTesting
|
|
331
|
+
? this.mergeSequentialCoverage(executionResults)
|
|
332
|
+
: undefined;
|
|
333
|
+
const separateRuns = testFiles.length > 1 && !this.config.simulateForTesting;
|
|
322
334
|
return {
|
|
323
335
|
total: passed + failed + skipped,
|
|
324
336
|
passed,
|
|
325
337
|
failed,
|
|
326
338
|
skipped,
|
|
327
339
|
failedTests,
|
|
328
|
-
coverage: this.aggregateCoverage(coverages),
|
|
329
|
-
fileCoverages:
|
|
340
|
+
coverage: separateRuns ? merged?.summary : this.aggregateCoverage(coverages),
|
|
341
|
+
fileCoverages: separateRuns ? merged?.perFile
|
|
342
|
+
: allFileCoverages.length > 0 ? allFileCoverages : undefined,
|
|
330
343
|
};
|
|
331
344
|
}
|
|
345
|
+
mergeSequentialCoverage(results) {
|
|
346
|
+
if (results.some(result => !result.rawCoverageMap))
|
|
347
|
+
return undefined;
|
|
348
|
+
const merged = {};
|
|
349
|
+
for (const result of results) {
|
|
350
|
+
for (const [rawPath, entry] of Object.entries(result.rawCoverageMap)) {
|
|
351
|
+
if (!isRecord(entry) || !isRecord(entry.statementMap) || !isRecord(entry.fnMap)
|
|
352
|
+
|| !isRecord(entry.branchMap) || !isRecord(entry.s) || !isRecord(entry.f)
|
|
353
|
+
|| !isRecord(entry.b))
|
|
354
|
+
return undefined;
|
|
355
|
+
const file = fileCoverageKey(rawPath);
|
|
356
|
+
const prior = merged[file];
|
|
357
|
+
if (prior) {
|
|
358
|
+
if (!isDeepStrictEqual(prior.statementMap, entry.statementMap)
|
|
359
|
+
|| !isDeepStrictEqual(prior.fnMap, entry.fnMap)
|
|
360
|
+
|| !isDeepStrictEqual(prior.branchMap, entry.branchMap))
|
|
361
|
+
return undefined;
|
|
362
|
+
for (const counter of ['s', 'f', 'b']) {
|
|
363
|
+
const hits = mergeHitCounts(prior[counter], entry[counter]);
|
|
364
|
+
if (!hits)
|
|
365
|
+
return undefined;
|
|
366
|
+
prior[counter] = hits;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
const s = mergeHitCounts(entry.s, entry.s);
|
|
371
|
+
const f = mergeHitCounts(entry.f, entry.f);
|
|
372
|
+
const b = mergeHitCounts(entry.b, entry.b);
|
|
373
|
+
if (!s || !f || !b)
|
|
374
|
+
return undefined;
|
|
375
|
+
merged[file] = { ...entry, path: file, s, f, b };
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
const coverage = this.extractCoverageFromJson({ coverageMap: merged });
|
|
380
|
+
return coverage.summary ? { summary: coverage.summary, perFile: coverage.perFile } : undefined;
|
|
381
|
+
}
|
|
332
382
|
async executeTestFile(file, framework, timeout) {
|
|
333
383
|
return this.executeTestFiles([file], framework, timeout);
|
|
334
384
|
}
|
|
@@ -458,13 +508,14 @@ Provide:
|
|
|
458
508
|
const parseResult = this.parseTestOutput(reportText, stderr, fileLabel, framework, code);
|
|
459
509
|
// Read only this invocation's coverage artifacts. A previous or
|
|
460
510
|
// concurrent run's project coverage directory is not evidence.
|
|
461
|
-
if (parseResult.success &&
|
|
511
|
+
if (parseResult.success && coverageDirectory) {
|
|
462
512
|
const diskCoverage = this.readCoverageFromDisk(coverageDirectory);
|
|
463
513
|
if (diskCoverage) {
|
|
464
|
-
parseResult.value.coverage
|
|
465
|
-
if (diskCoverage.perFile.length > 0) {
|
|
514
|
+
parseResult.value.coverage ??= diskCoverage.summary;
|
|
515
|
+
if (!parseResult.value.fileCoverages && diskCoverage.perFile.length > 0) {
|
|
466
516
|
parseResult.value.fileCoverages = diskCoverage.perFile;
|
|
467
517
|
}
|
|
518
|
+
parseResult.value.rawCoverageMap ??= diskCoverage.rawMap;
|
|
468
519
|
}
|
|
469
520
|
}
|
|
470
521
|
finish(parseResult);
|
|
@@ -659,6 +710,7 @@ Provide:
|
|
|
659
710
|
failedTests,
|
|
660
711
|
coverage: covData.summary,
|
|
661
712
|
fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
|
|
713
|
+
rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
|
|
662
714
|
});
|
|
663
715
|
}
|
|
664
716
|
catch {
|
|
@@ -713,6 +765,7 @@ Provide:
|
|
|
713
765
|
failedTests,
|
|
714
766
|
coverage: covData.summary,
|
|
715
767
|
fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
|
|
768
|
+
rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
|
|
716
769
|
});
|
|
717
770
|
}
|
|
718
771
|
catch {
|
|
@@ -958,17 +1011,22 @@ Provide:
|
|
|
958
1011
|
if (coverages.length === 0) {
|
|
959
1012
|
return undefined;
|
|
960
1013
|
}
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
1014
|
+
// #1015: average each metric over the entries that collected it; a
|
|
1015
|
+
// metric nobody collected stays null.
|
|
1016
|
+
const mean = (values) => {
|
|
1017
|
+
const present = values.filter((v) => typeof v === 'number' && Number.isFinite(v));
|
|
1018
|
+
return present.length > 0
|
|
1019
|
+
? Math.round((present.reduce((a, v) => a + v, 0) / present.length) * 100) / 100
|
|
1020
|
+
: null;
|
|
1021
|
+
};
|
|
1022
|
+
const line = mean(coverages.map(c => c.line));
|
|
1023
|
+
if (line === null)
|
|
1024
|
+
return undefined;
|
|
967
1025
|
return {
|
|
968
|
-
line
|
|
969
|
-
branch:
|
|
970
|
-
function:
|
|
971
|
-
statement:
|
|
1026
|
+
line,
|
|
1027
|
+
branch: mean(coverages.map(c => c.branch)),
|
|
1028
|
+
function: mean(coverages.map(c => c.function)),
|
|
1029
|
+
statement: mean(coverages.map(c => c.statement)),
|
|
972
1030
|
};
|
|
973
1031
|
}
|
|
974
1032
|
/**
|
|
@@ -989,59 +1047,61 @@ Provide:
|
|
|
989
1047
|
// Jest shape: { coverageSummary: { total: { lines: { pct }, branches: { pct }, ... } } }
|
|
990
1048
|
const total = json?.coverageSummary?.total ?? json?.coverageMap?.total;
|
|
991
1049
|
if (total?.lines?.pct !== undefined) {
|
|
1050
|
+
const line = summaryPct(total.lines);
|
|
992
1051
|
return {
|
|
993
|
-
summary: {
|
|
994
|
-
line
|
|
995
|
-
branch:
|
|
996
|
-
function:
|
|
997
|
-
statement:
|
|
1052
|
+
summary: line === null ? undefined : {
|
|
1053
|
+
line,
|
|
1054
|
+
branch: summaryPct(total.branches),
|
|
1055
|
+
function: summaryPct(total.functions),
|
|
1056
|
+
statement: summaryPct(total.statements),
|
|
998
1057
|
},
|
|
999
1058
|
perFile,
|
|
1000
1059
|
};
|
|
1001
1060
|
}
|
|
1002
|
-
// Vitest v8 shape: coverageMap is keyed by file path
|
|
1061
|
+
// Vitest v8 shape: coverageMap is keyed by file path (istanbul entries)
|
|
1003
1062
|
const coverageMap = json?.coverageMap;
|
|
1004
1063
|
if (coverageMap && typeof coverageMap === 'object') {
|
|
1005
1064
|
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
|
-
};
|
|
1065
|
+
const totals = { line: [0, 0], branch: [0, 0], function: [0, 0], statement: [0, 0] };
|
|
1066
|
+
for (const filePath of files) {
|
|
1067
|
+
const entry = coverageMap[filePath];
|
|
1068
|
+
const s = entry?.s ?? {};
|
|
1069
|
+
const f = entry?.f ?? {};
|
|
1070
|
+
const b = entry?.b ?? {};
|
|
1071
|
+
// #1012: line coverage per SOURCE LINE (istanbul's own rule), not per statement.
|
|
1072
|
+
const lineHits = istanbulLineHits({ statementMap: entry?.statementMap ?? {}, s });
|
|
1073
|
+
const lines = [[...lineHits.values()].filter(v => v > 0).length, lineHits.size];
|
|
1074
|
+
const statements = [Object.values(s).filter(v => v > 0).length, Object.keys(s).length];
|
|
1075
|
+
const fns = [Object.values(f).filter(v => v > 0).length, Object.keys(f).length];
|
|
1076
|
+
const branchCounts = Object.values(b).flatMap(v => (Array.isArray(v) ? v : [v]));
|
|
1077
|
+
const branches = [branchCounts.filter(c => c > 0).length, branchCounts.length];
|
|
1078
|
+
if (lines[1] === 0)
|
|
1079
|
+
continue;
|
|
1080
|
+
// #1015: istanbul's 0/0 (no branches / no functions) is "not
|
|
1081
|
+
// collected" — null — not 100%.
|
|
1082
|
+
perFile.push({
|
|
1083
|
+
path: filePath,
|
|
1084
|
+
line: ratio(lines),
|
|
1085
|
+
branch: ratio(branches),
|
|
1086
|
+
function: ratio(fns),
|
|
1087
|
+
statement: ratio(statements),
|
|
1088
|
+
});
|
|
1089
|
+
for (const [key, [covered, count]] of [['line', lines], ['branch', branches], ['function', fns], ['statement', statements]]) {
|
|
1090
|
+
totals[key][0] += covered;
|
|
1091
|
+
totals[key][1] += count;
|
|
1043
1092
|
}
|
|
1044
1093
|
}
|
|
1094
|
+
if (perFile.length > 0) {
|
|
1095
|
+
return {
|
|
1096
|
+
summary: {
|
|
1097
|
+
line: ratio(totals.line),
|
|
1098
|
+
branch: ratio(totals.branch),
|
|
1099
|
+
function: ratio(totals.function),
|
|
1100
|
+
statement: ratio(totals.statement),
|
|
1101
|
+
},
|
|
1102
|
+
perFile,
|
|
1103
|
+
};
|
|
1104
|
+
}
|
|
1045
1105
|
}
|
|
1046
1106
|
}
|
|
1047
1107
|
catch {
|
|
@@ -1058,8 +1118,8 @@ Provide:
|
|
|
1058
1118
|
try {
|
|
1059
1119
|
// Check common coverage output paths
|
|
1060
1120
|
const candidates = [
|
|
1061
|
-
join(coverageDirectory, 'coverage-summary.json'),
|
|
1062
1121
|
join(coverageDirectory, 'coverage-final.json'),
|
|
1122
|
+
join(coverageDirectory, 'coverage-summary.json'),
|
|
1063
1123
|
];
|
|
1064
1124
|
for (const filePath of candidates) {
|
|
1065
1125
|
if (!existsSync(filePath))
|
|
@@ -1073,26 +1133,33 @@ Provide:
|
|
|
1073
1133
|
if (key === 'total')
|
|
1074
1134
|
continue;
|
|
1075
1135
|
// Normalize path: strip cwd prefix, reject traversal sequences
|
|
1076
|
-
|
|
1077
|
-
|
|
1136
|
+
// Reject traversal; keep the key absolute (#1027 N7: one key form).
|
|
1137
|
+
const relative = key.replace(process.cwd() + '/', '').replace(process.cwd() + '\\', '');
|
|
1138
|
+
if (relative.includes('..'))
|
|
1078
1139
|
continue;
|
|
1140
|
+
const normalizedPath = fileCoverageKey(key);
|
|
1079
1141
|
const entry = value;
|
|
1080
|
-
|
|
1142
|
+
const line = summaryPct(entry?.lines);
|
|
1143
|
+
if (line !== null) {
|
|
1144
|
+
// #1015: a metric with total 0 is not collected (null), not its 100 pct.
|
|
1081
1145
|
perFile.push({
|
|
1082
1146
|
path: normalizedPath,
|
|
1083
|
-
line
|
|
1084
|
-
branch: entry.branches
|
|
1085
|
-
function: entry.functions
|
|
1086
|
-
statement: entry.statements
|
|
1147
|
+
line,
|
|
1148
|
+
branch: summaryPct(entry.branches),
|
|
1149
|
+
function: summaryPct(entry.functions),
|
|
1150
|
+
statement: summaryPct(entry.statements),
|
|
1087
1151
|
});
|
|
1088
1152
|
}
|
|
1089
1153
|
}
|
|
1154
|
+
const line = summaryPct(json.total.lines);
|
|
1155
|
+
if (line === null)
|
|
1156
|
+
continue;
|
|
1090
1157
|
return {
|
|
1091
1158
|
summary: {
|
|
1092
|
-
line
|
|
1093
|
-
branch: json.total.branches
|
|
1094
|
-
function: json.total.functions
|
|
1095
|
-
statement: json.total.statements
|
|
1159
|
+
line,
|
|
1160
|
+
branch: summaryPct(json.total.branches),
|
|
1161
|
+
function: summaryPct(json.total.functions),
|
|
1162
|
+
statement: summaryPct(json.total.statements),
|
|
1096
1163
|
},
|
|
1097
1164
|
perFile,
|
|
1098
1165
|
};
|
|
@@ -1101,7 +1168,7 @@ Provide:
|
|
|
1101
1168
|
if (typeof json === 'object' && !json.total) {
|
|
1102
1169
|
const result = this.extractCoverageFromJson({ coverageMap: json });
|
|
1103
1170
|
if (result.summary) {
|
|
1104
|
-
return { summary: result.summary, perFile: result.perFile };
|
|
1171
|
+
return { summary: result.summary, perFile: result.perFile, rawMap: json };
|
|
1105
1172
|
}
|
|
1106
1173
|
}
|
|
1107
1174
|
}
|
|
@@ -1111,50 +1178,69 @@ Provide:
|
|
|
1111
1178
|
}
|
|
1112
1179
|
return undefined;
|
|
1113
1180
|
}
|
|
1114
|
-
async storeResults(runId, result) {
|
|
1115
|
-
|
|
1181
|
+
async storeResults(runId, result, testFiles) {
|
|
1182
|
+
// #1028 N1: the record names the test files it ran, so per-test duration
|
|
1183
|
+
// is compared only between runs of the same test set.
|
|
1184
|
+
const files = testFiles && testFiles.length > 0 ? [...new Set(testFiles)].sort() : undefined;
|
|
1185
|
+
await this.memory.set(`test-run:${runId}`, files ? { ...result, testFiles: files } : result, {
|
|
1116
1186
|
namespace: 'test-execution',
|
|
1117
1187
|
persist: true,
|
|
1118
1188
|
});
|
|
1189
|
+
// A runner ERROR has no trustworthy result: it persists no evidence.
|
|
1190
|
+
if (result.status === 'error')
|
|
1191
|
+
return;
|
|
1192
|
+
const runStatus = result.failed > 0 || result.status !== 'passed' ? 'failed' : 'passed';
|
|
1193
|
+
const coverage = result.coverage && Number.isFinite(result.coverage.line) ? result.coverage : undefined;
|
|
1194
|
+
try {
|
|
1195
|
+
// #1027 NB1: this run's testsPassing and (when measured) its coverage,
|
|
1196
|
+
// written together under this runId — the same writer as
|
|
1197
|
+
// `aqe test execute`. Coverage from a run whose tests FAILED (N4) is
|
|
1198
|
+
// then never read next to a stale testsPassing from an earlier run.
|
|
1199
|
+
await writeTestRunEvidence(this.memory, {
|
|
1200
|
+
runId, passed: result.passed, failed: result.failed, skipped: result.skipped,
|
|
1201
|
+
}, { source: 'test-execution', ...(coverage ? { coverage: coverage.line } : {}) });
|
|
1202
|
+
}
|
|
1203
|
+
catch {
|
|
1204
|
+
// Non-critical — don't break test storage if evidence storage fails
|
|
1205
|
+
}
|
|
1119
1206
|
// Store coverage data so quality-assess and quality-gate can read it.
|
|
1120
1207
|
// Note: coverage:previous rotation is owned by coverage-analyzer (the
|
|
1121
1208
|
// canonical coverage service) to avoid double-rotation race conditions.
|
|
1122
|
-
if (
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1209
|
+
if (!coverage)
|
|
1210
|
+
return;
|
|
1211
|
+
try {
|
|
1212
|
+
// Same CoverageSummary shape as coverage-analyzer, stamped with its
|
|
1213
|
+
// provenance (#1008/#1015) so readers can trust it. An uncollected
|
|
1214
|
+
// metric stays null — never 0, never istanbul's 0/0 = 100%.
|
|
1215
|
+
await this.memory.set('coverage:latest', {
|
|
1216
|
+
line: coverage.line,
|
|
1217
|
+
branch: coverage.branch ?? null,
|
|
1218
|
+
function: coverage.function ?? null,
|
|
1219
|
+
statement: coverage.statement ?? null,
|
|
1220
|
+
files: result.fileCoverages?.length ?? 0,
|
|
1221
|
+
measured: true,
|
|
1222
|
+
runStatus,
|
|
1223
|
+
runId,
|
|
1224
|
+
}, { persist: true });
|
|
1225
|
+
// Store per-file coverage via memory.set() (not storeVector) so that
|
|
1226
|
+
// quality-analyzer's getStoredCoverage() can read it with memory.get()
|
|
1227
|
+
for (const fc of result.fileCoverages ?? []) {
|
|
1228
|
+
if (!Number.isFinite(fc.line))
|
|
1229
|
+
continue;
|
|
1230
|
+
// #1027 N7: one key form — the absolute path.
|
|
1231
|
+
await this.memory.set(`coverage:file:${fileCoverageKey(fc.path)}`, {
|
|
1232
|
+
line: fc.line,
|
|
1233
|
+
branch: fc.branch ?? null,
|
|
1234
|
+
function: fc.function ?? null,
|
|
1235
|
+
statement: fc.statement ?? null,
|
|
1236
|
+
measured: true,
|
|
1237
|
+
runStatus,
|
|
1132
1238
|
}, { 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
1239
|
}
|
|
1157
1240
|
}
|
|
1241
|
+
catch {
|
|
1242
|
+
// Non-critical — don't break test storage if coverage store fails
|
|
1243
|
+
}
|
|
1158
1244
|
}
|
|
1159
1245
|
}
|
|
1160
1246
|
// ============================================================================
|
|
@@ -1166,4 +1252,48 @@ Provide:
|
|
|
1166
1252
|
export function createTestExecutorService(dependencies, config) {
|
|
1167
1253
|
return new TestExecutorService(dependencies, config);
|
|
1168
1254
|
}
|
|
1255
|
+
/** covered/total as a 2-decimal percentage, or null when there is nothing to cover. */
|
|
1256
|
+
function ratio([covered, total]) {
|
|
1257
|
+
return total > 0 ? Math.round((covered / total) * 10000) / 100 : null;
|
|
1258
|
+
}
|
|
1259
|
+
/**
|
|
1260
|
+
* A coverage-summary metric's percentage. istanbul writes `pct: 100` for a
|
|
1261
|
+
* metric with `total: 0`; that is "not collected" — null (#1015).
|
|
1262
|
+
*/
|
|
1263
|
+
function summaryPct(metric) {
|
|
1264
|
+
if (!metric || typeof metric.pct !== 'number' || !Number.isFinite(metric.pct))
|
|
1265
|
+
return null;
|
|
1266
|
+
if (typeof metric.total === 'number' && metric.total === 0)
|
|
1267
|
+
return null;
|
|
1268
|
+
return metric.pct;
|
|
1269
|
+
}
|
|
1270
|
+
function isRecord(value) {
|
|
1271
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
1272
|
+
}
|
|
1273
|
+
/** A test covers a counter if any invocation hit it. Reject incompatible maps. */
|
|
1274
|
+
function mergeHitCounts(left, right) {
|
|
1275
|
+
if (!isRecord(left) || !isRecord(right))
|
|
1276
|
+
return undefined;
|
|
1277
|
+
const keys = Object.keys(left);
|
|
1278
|
+
if (!isDeepStrictEqual(keys.sort(), Object.keys(right).sort()))
|
|
1279
|
+
return undefined;
|
|
1280
|
+
const merged = {};
|
|
1281
|
+
for (const key of keys) {
|
|
1282
|
+
const a = left[key];
|
|
1283
|
+
const b = right[key];
|
|
1284
|
+
if (typeof a === 'number' && Number.isFinite(a) && a >= 0
|
|
1285
|
+
&& typeof b === 'number' && Number.isFinite(b) && b >= 0) {
|
|
1286
|
+
merged[key] = Math.max(a, b);
|
|
1287
|
+
}
|
|
1288
|
+
else if (Array.isArray(a) && Array.isArray(b) && a.length === b.length
|
|
1289
|
+
&& a.every(v => typeof v === 'number' && Number.isFinite(v) && v >= 0)
|
|
1290
|
+
&& b.every(v => typeof v === 'number' && Number.isFinite(v) && v >= 0)) {
|
|
1291
|
+
merged[key] = a.map((v, i) => Math.max(v, b[i]));
|
|
1292
|
+
}
|
|
1293
|
+
else {
|
|
1294
|
+
return undefined;
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
return merged;
|
|
1298
|
+
}
|
|
1169
1299
|
//# 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(),
|