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
|
@@ -8,8 +8,10 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
8
8
|
import { ok, err } from '../../../shared/types/index.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
|
-
import { writeQualityEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
11
|
+
import { writeQualityEvidence, writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
12
|
+
import { measuredCoverageSummary } from '../../quality-assessment/coverage-report-event.js';
|
|
12
13
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
14
|
+
import { collectedMetrics, collectedSummary, fileCoverageKey } from '../collected-metrics.js';
|
|
13
15
|
/**
|
|
14
16
|
* Whether an analyze request carries instrumented (measured) coverage (#1008).
|
|
15
17
|
* Fail-closed: an explicit `request.measured` wins; otherwise only data a
|
|
@@ -82,17 +84,21 @@ export class CoverageAnalyzerService {
|
|
|
82
84
|
// written over a measurement, and never stored where a quality gate,
|
|
83
85
|
// quality_assess or another reader would take it as measured.
|
|
84
86
|
const measured = isMeasuredCoverage(request);
|
|
87
|
+
// #1027 B2: a metric the report never collected is null wherever it is
|
|
88
|
+
// persisted or compared — never the 0 calculateMetrics yields for it.
|
|
89
|
+
const collected = collectedMetrics(coverageData.files);
|
|
90
|
+
const stored = collectedSummary(summary, collected);
|
|
85
91
|
// Calculate delta from previous coverage (if stored)
|
|
86
|
-
const delta = measured ? await this.calculateDelta(
|
|
92
|
+
const delta = measured ? await this.calculateDelta(stored) : undefined;
|
|
87
93
|
// Generate recommendations based on analysis
|
|
88
94
|
const recommendations = this.generateRecommendations(coverageData, summary, threshold);
|
|
89
95
|
if (measured) {
|
|
90
96
|
// Store current coverage for future delta calculations
|
|
91
|
-
await this.storeCoverageSnapshot(
|
|
97
|
+
await this.storeCoverageSnapshot(stored, request.runStatus, request.testRun);
|
|
92
98
|
// Store coverage vectors for similarity search + KV for quality-analyzer
|
|
93
99
|
if (request.includeFileDetails) {
|
|
94
|
-
await this.indexFileCoverageVectors(coverageData.files);
|
|
95
|
-
await this.storeFileCoverageKV(coverageData.files);
|
|
100
|
+
await this.indexFileCoverageVectors(coverageData.files, request.projectRoot);
|
|
101
|
+
await this.storeFileCoverageKV(coverageData.files, request.projectRoot, request.runStatus);
|
|
96
102
|
}
|
|
97
103
|
}
|
|
98
104
|
return ok({
|
|
@@ -101,6 +107,8 @@ export class CoverageAnalyzerService {
|
|
|
101
107
|
delta,
|
|
102
108
|
recommendations,
|
|
103
109
|
measured,
|
|
110
|
+
collected,
|
|
111
|
+
...(request.runStatus ? { runStatus: request.runStatus } : {}),
|
|
104
112
|
});
|
|
105
113
|
}
|
|
106
114
|
catch (error) {
|
|
@@ -421,14 +429,20 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
421
429
|
}
|
|
422
430
|
async calculateDelta(current) {
|
|
423
431
|
try {
|
|
424
|
-
|
|
432
|
+
// #1015: only a measured baseline with finite figures is a baseline. A
|
|
433
|
+
// legacy unstamped record (e.g. the `{"files":0}` bridge echo removed in
|
|
434
|
+
// #1013) gave a NaN delta that was reported as "stable".
|
|
435
|
+
const previous = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
425
436
|
if (!previous) {
|
|
426
437
|
return undefined;
|
|
427
438
|
}
|
|
439
|
+
// A metric not collected on EITHER side has no delta (0 — never NaN,
|
|
440
|
+
// never a fake swing against an uncollected 0, #1027 B2).
|
|
441
|
+
const diff = (now, before) => (now === null || before === null ? 0 : now - before);
|
|
428
442
|
const lineDelta = current.line - previous.line;
|
|
429
|
-
const branchDelta = current.branch
|
|
430
|
-
const functionDelta = current.function
|
|
431
|
-
const statementDelta = current.statement
|
|
443
|
+
const branchDelta = diff(current.branch, previous.branch);
|
|
444
|
+
const functionDelta = diff(current.function, previous.function);
|
|
445
|
+
const statementDelta = diff(current.statement, previous.statement);
|
|
432
446
|
const avgDelta = (lineDelta + branchDelta + functionDelta + statementDelta) / 4;
|
|
433
447
|
let trend;
|
|
434
448
|
if (avgDelta > 0.5) {
|
|
@@ -452,23 +466,36 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
452
466
|
return undefined;
|
|
453
467
|
}
|
|
454
468
|
}
|
|
455
|
-
async storeCoverageSnapshot(summary) {
|
|
469
|
+
async storeCoverageSnapshot(summary, runStatus, testRun) {
|
|
456
470
|
try {
|
|
457
|
-
// Rotate: copy current coverage:latest → coverage:previous before
|
|
458
|
-
|
|
471
|
+
// Rotate: copy current coverage:latest → coverage:previous before
|
|
472
|
+
// overwriting — only a measured record (#1015): legacy junk is dropped,
|
|
473
|
+
// never promoted to the baseline.
|
|
474
|
+
const existing = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
459
475
|
if (existing) {
|
|
460
476
|
await this.memory.set('coverage:previous', existing, { persist: true });
|
|
461
477
|
}
|
|
462
478
|
// Store latest snapshot, stamped with its provenance (#1008). Only
|
|
463
479
|
// measured coverage reaches this method.
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
480
|
+
// #1027: uncollected metrics are null; runStatus says if tests failed (N4).
|
|
481
|
+
const record = { ...summary, measured: true, ...(runStatus ? { runStatus } : {}) };
|
|
482
|
+
await this.memory.set('coverage:latest', record, { persist: true });
|
|
483
|
+
if (testRun) {
|
|
484
|
+
// #1027 NB1: the run's testsPassing and coverage, under one runId.
|
|
485
|
+
await writeTestRunEvidence(this.memory, testRun, { source: 'coverage-analysis', coverage: summary.line });
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
// No counts: a failing run's coverage carries runStatus but no runId,
|
|
489
|
+
// so the gate will not pair it with any testsPassing (fail-closed).
|
|
490
|
+
await writeQualityEvidence(this.memory, { coverage: summary.line }, {
|
|
491
|
+
measuredAt: new Date().toISOString(),
|
|
492
|
+
source: 'coverage-analysis',
|
|
493
|
+
...(runStatus ? { runStatus } : {}),
|
|
494
|
+
});
|
|
495
|
+
}
|
|
469
496
|
// Store historical snapshot
|
|
470
497
|
const timestamp = Date.now();
|
|
471
|
-
await this.memory.set(`coverage:history:${timestamp}`,
|
|
498
|
+
await this.memory.set(`coverage:history:${timestamp}`, record, {
|
|
472
499
|
persist: true,
|
|
473
500
|
namespace: 'coverage-history',
|
|
474
501
|
});
|
|
@@ -482,22 +509,22 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
482
509
|
* and defect-predictor can read it with memory.get().
|
|
483
510
|
* (The vector index via storeVector is kept for similarity search.)
|
|
484
511
|
*/
|
|
485
|
-
async storeFileCoverageKV(files) {
|
|
512
|
+
async storeFileCoverageKV(files, projectRoot, runStatus) {
|
|
486
513
|
for (const file of files) {
|
|
487
514
|
try {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
515
|
+
// #1014: a metric with no data is null (not collected), never 0%.
|
|
516
|
+
const pct = (m) => m.total > 0 ? Math.round((m.covered / m.total) * 10000) / 100 : null;
|
|
517
|
+
if (file.lines.total === 0)
|
|
518
|
+
continue;
|
|
519
|
+
// #1014: stamped, so readers can tell it from legacy unstamped
|
|
520
|
+
// estimate records written by <= 3.15.4.
|
|
521
|
+
await this.memory.set(`coverage:file:${fileCoverageKey(file.path, projectRoot)}`, {
|
|
522
|
+
line: pct(file.lines),
|
|
523
|
+
branch: pct(file.branches),
|
|
524
|
+
function: pct(file.functions),
|
|
525
|
+
statement: pct(file.statements),
|
|
526
|
+
measured: true,
|
|
527
|
+
...(runStatus ? { runStatus } : {}),
|
|
501
528
|
}, { persist: true });
|
|
502
529
|
}
|
|
503
530
|
catch {
|
|
@@ -505,12 +532,12 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
505
532
|
}
|
|
506
533
|
}
|
|
507
534
|
}
|
|
508
|
-
async indexFileCoverageVectors(files) {
|
|
535
|
+
async indexFileCoverageVectors(files, projectRoot) {
|
|
509
536
|
for (const file of files) {
|
|
510
537
|
try {
|
|
511
538
|
// Create a vector representation of the file coverage
|
|
512
539
|
const embedding = this.createCoverageEmbedding(file);
|
|
513
|
-
await this.memory.storeVector(`coverage:file:${file.path}`, embedding, {
|
|
540
|
+
await this.memory.storeVector(`coverage:file:${fileCoverageKey(file.path, projectRoot)}`, embedding, {
|
|
514
541
|
path: file.path,
|
|
515
542
|
lineCoverage: file.lines.covered / (file.lines.total || 1),
|
|
516
543
|
branchCoverage: file.branches.covered / (file.branches.total || 1),
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { LoggerFactory } from '../../../logging/index.js';
|
|
8
8
|
import { ok, err } from '../../../shared/types/index.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
|
+
import { isMeasuredGapRequest, } from '../interfaces.js';
|
|
10
11
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
12
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
12
13
|
import { createSafeRecord } from '../../../shared/utils/safe-record.js';
|
|
@@ -238,8 +239,12 @@ Return JSON in this exact format:
|
|
|
238
239
|
const prioritizedGaps = this.prioritizeGaps(gaps, prioritize);
|
|
239
240
|
// Calculate estimated effort
|
|
240
241
|
const estimatedEffort = this.calculateTotalEffort(prioritizedGaps);
|
|
241
|
-
// Store gap patterns for learning
|
|
242
|
-
|
|
242
|
+
// Store gap patterns for learning — only gaps in MEASURED coverage
|
|
243
|
+
// (#1014). A gap from a static estimate is a hypothesis: returned to the
|
|
244
|
+
// caller, never persisted as a gap-pattern vector.
|
|
245
|
+
if (isMeasuredGapRequest(request)) {
|
|
246
|
+
await this.storeGapPatterns(prioritizedGaps);
|
|
247
|
+
}
|
|
243
248
|
return ok({
|
|
244
249
|
gaps: prioritizedGaps,
|
|
245
250
|
totalUncoveredLines,
|
|
@@ -9,6 +9,7 @@ import { DefectPredictorService, } from './services/defect-predictor.js';
|
|
|
9
9
|
import { PatternLearnerService, } from './services/pattern-learner.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
11
|
import { RootCauseAnalyzerService, } from './services/root-cause-analyzer.js';
|
|
12
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
12
13
|
/**
|
|
13
14
|
* Defect Intelligence Domain Plugin
|
|
14
15
|
* Provides ML-based defect prediction and analysis capabilities
|
|
@@ -307,6 +308,9 @@ export class DefectIntelligencePlugin extends BaseDomainPlugin {
|
|
|
307
308
|
}
|
|
308
309
|
}
|
|
309
310
|
async handleCoverageGap(event) {
|
|
311
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
312
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
313
|
+
return;
|
|
310
314
|
// Coverage gap detected - assess defect risk
|
|
311
315
|
const payload = event.payload;
|
|
312
316
|
// High risk coverage gaps indicate defect-prone areas
|
|
@@ -14,6 +14,8 @@ import { TypeScriptParser } from '../../../shared/parsers/index.js';
|
|
|
14
14
|
import { toError } from '../../../shared/error-utils.js';
|
|
15
15
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
16
16
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
17
|
+
import { measuredCoverageSummary, measuredFileCoverage } from '../../quality-assessment/coverage-report-event.js';
|
|
18
|
+
import { fileCoverageLookupKeys } from '../../coverage-analysis/collected-metrics.js';
|
|
17
19
|
// LLMDefectAnalysis is imported from ../interfaces
|
|
18
20
|
const DEFAULT_CONFIG = {
|
|
19
21
|
defaultThreshold: 0.5,
|
|
@@ -160,7 +162,7 @@ Be specific and actionable. Focus on concrete issues, not generic advice.`,
|
|
|
160
162
|
}
|
|
161
163
|
return null;
|
|
162
164
|
}
|
|
163
|
-
catch
|
|
165
|
+
catch {
|
|
164
166
|
logger.warn('LLM analysis failed, using heuristics only');
|
|
165
167
|
return null;
|
|
166
168
|
}
|
|
@@ -497,7 +499,7 @@ Be specific and actionable. Focus on concrete issues, not generic advice.`,
|
|
|
497
499
|
// Count complexity indicators in code
|
|
498
500
|
const content = fileResult.value;
|
|
499
501
|
const ifCount = (content.match(/\bif\s*\(/g) || []).length;
|
|
500
|
-
const loopCount = (content.match(/\b(for|while|do)\s*[
|
|
502
|
+
const loopCount = (content.match(/\b(for|while|do)\s*[{(]/g) || []).length;
|
|
501
503
|
const switchCount = (content.match(/\bswitch\s*\(/g) || []).length;
|
|
502
504
|
const catchCount = (content.match(/\bcatch\s*\(/g) || []).length;
|
|
503
505
|
const ternaryCount = (content.match(/\?[^?:]+:/g) || []).length;
|
|
@@ -590,14 +592,17 @@ Be specific and actionable. Focus on concrete issues, not generic advice.`,
|
|
|
590
592
|
async getTestCoverage(file) {
|
|
591
593
|
try {
|
|
592
594
|
// Try per-file coverage (written by coverage-analyzer and test-executor)
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
595
|
+
// #1014: only measured records; legacy unstamped estimates are ignored.
|
|
596
|
+
for (const key of fileCoverageLookupKeys(file)) {
|
|
597
|
+
const fileCoverage = measuredFileCoverage(await this.memory.get(key));
|
|
598
|
+
if (fileCoverage) {
|
|
599
|
+
// Invert: low coverage = high defect risk
|
|
600
|
+
return 1 - fileCoverage.line / 100;
|
|
601
|
+
}
|
|
597
602
|
}
|
|
598
603
|
// Fall back to project-wide coverage
|
|
599
|
-
const summary = await this.memory.get('coverage:latest');
|
|
600
|
-
if (summary
|
|
604
|
+
const summary = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
605
|
+
if (summary) {
|
|
601
606
|
return 1 - summary.line / 100;
|
|
602
607
|
}
|
|
603
608
|
}
|
|
@@ -18,6 +18,7 @@ import { BaseDomainCoordinator, } from '../base-domain-coordinator.js';
|
|
|
18
18
|
// CQ-004: Extracted modules
|
|
19
19
|
import * as LearningHelpers from './coordinator-helpers.js';
|
|
20
20
|
import * as ConsensusHelpers from './coordinator-consensus.js';
|
|
21
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
21
22
|
const DEFAULT_CONFIG = {
|
|
22
23
|
maxConcurrentWorkflows: 3,
|
|
23
24
|
defaultTimeout: 120000, // 2 minutes
|
|
@@ -958,6 +959,9 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
958
959
|
});
|
|
959
960
|
}
|
|
960
961
|
async handleCoverageGap(event) {
|
|
962
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
963
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
964
|
+
return;
|
|
961
965
|
// Record as experience for learning
|
|
962
966
|
const { gapId, file, riskScore } = event.payload;
|
|
963
967
|
await this.learningService.recordExperience({
|
|
@@ -7,6 +7,7 @@ import { BaseDomainPlugin } from '../domain-interface.js';
|
|
|
7
7
|
import { LearningOptimizationCoordinator, } from './coordinator.js';
|
|
8
8
|
import { toError } from '../../shared/error-utils.js';
|
|
9
9
|
import { LearningCoordinatorService, TransferSpecialistService, MetricsOptimizerService, ProductionIntelService, } from './services/index.js';
|
|
10
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
10
11
|
/**
|
|
11
12
|
* Learning & Optimization Domain Plugin
|
|
12
13
|
* Provides cross-domain learning, pattern extraction, and strategy optimization
|
|
@@ -439,6 +440,9 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
439
440
|
await this.productionIntel.recordMetric('test_success_rate', successRate, 'ratio', 'test-execution', ['automated']);
|
|
440
441
|
}
|
|
441
442
|
async handleCoverageGap(event) {
|
|
443
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
444
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
445
|
+
return;
|
|
442
446
|
const payload = event.payload;
|
|
443
447
|
await this.learningService.recordExperience({
|
|
444
448
|
agentId: {
|
|
@@ -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
|