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
|
@@ -64,7 +64,8 @@ export interface RelatedFailure {
|
|
|
64
64
|
export interface CoverageContext {
|
|
65
65
|
file: string;
|
|
66
66
|
lineCoverage: number;
|
|
67
|
-
|
|
67
|
+
/** `null` = no branch data was collected (#1027 NB4) — never a borrowed figure. */
|
|
68
|
+
branchCoverage: number | null;
|
|
68
69
|
uncoveredLines: number[];
|
|
69
70
|
riskScore: number;
|
|
70
71
|
}
|
|
@@ -12,6 +12,8 @@ import { createEvent } from '../../shared/events/domain-events.js';
|
|
|
12
12
|
import { toError } from '../../shared/error-utils.js';
|
|
13
13
|
import { LoggerFactory } from '../../logging/index.js';
|
|
14
14
|
import { addToCount } from '../../shared/utils/safe-record.js';
|
|
15
|
+
import { measuredFileCoverage } from '../../domains/quality-assessment/coverage-report-event.js';
|
|
16
|
+
import { fileCoverageLookupKeys } from '../../domains/coverage-analysis/collected-metrics.js';
|
|
15
17
|
const logger = LoggerFactory.create('defect-investigation');
|
|
16
18
|
export const DefectInvestigationEvents = {
|
|
17
19
|
DefectInvestigationStarted: 'coordination.DefectInvestigationStarted',
|
|
@@ -605,12 +607,19 @@ export class DefectInvestigationProtocol {
|
|
|
605
607
|
async getCoverageContext(file) {
|
|
606
608
|
try {
|
|
607
609
|
// Try per-file coverage (written by coverage-analyzer and test-executor)
|
|
608
|
-
|
|
610
|
+
// #1014: only measured records; legacy unstamped estimates are ignored.
|
|
611
|
+
let coverage = null;
|
|
612
|
+
for (const key of fileCoverageLookupKeys(file)) {
|
|
613
|
+
coverage = measuredFileCoverage(await this.memory.get(key));
|
|
614
|
+
if (coverage)
|
|
615
|
+
break;
|
|
616
|
+
}
|
|
609
617
|
if (!coverage) {
|
|
610
618
|
return null;
|
|
611
619
|
}
|
|
612
|
-
// Calculate risk based on coverage
|
|
613
|
-
|
|
620
|
+
// Calculate risk based on coverage (an uncollected branch metric is
|
|
621
|
+
// left out, not counted as 0%).
|
|
622
|
+
const avgCoverage = coverage.branch === null ? coverage.line : (coverage.line + coverage.branch) / 2;
|
|
614
623
|
const riskScore = 1 - avgCoverage / 100;
|
|
615
624
|
return {
|
|
616
625
|
file,
|
|
@@ -10,6 +10,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
10
10
|
import { ok, err, } from '../../shared/types/index.js';
|
|
11
11
|
import { createEvent } from '../../shared/events/domain-events.js';
|
|
12
12
|
import { toErrorMessage, toError } from '../../shared/error-utils.js';
|
|
13
|
+
import { measuredCoverageSummary } from '../../domains/quality-assessment/coverage-report-event.js';
|
|
13
14
|
// ============================================================================
|
|
14
15
|
// Protocol Events
|
|
15
16
|
// ============================================================================
|
|
@@ -402,12 +403,14 @@ export class QualityGateProtocol {
|
|
|
402
403
|
async getCoverageMetrics(_releaseCandidate) {
|
|
403
404
|
try {
|
|
404
405
|
// Try to get latest coverage data from memory
|
|
405
|
-
|
|
406
|
+
// #1014: only a measured record is coverage evidence; a legacy
|
|
407
|
+
// unstamped or estimated record is "no data" (the gate fails closed).
|
|
408
|
+
const latestCoverage = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
406
409
|
if (!latestCoverage) {
|
|
407
410
|
return null;
|
|
408
411
|
}
|
|
409
|
-
// Get previous coverage for trend
|
|
410
|
-
const previousCoverage = await this.memory.get('coverage:previous');
|
|
412
|
+
// Get previous coverage for trend (measured baselines only, #1015)
|
|
413
|
+
const previousCoverage = measuredCoverageSummary(await this.memory.get('coverage:previous'));
|
|
411
414
|
let trend = 'stable';
|
|
412
415
|
if (previousCoverage) {
|
|
413
416
|
const delta = latestCoverage.line - previousCoverage.line;
|
|
@@ -418,9 +421,10 @@ export class QualityGateProtocol {
|
|
|
418
421
|
}
|
|
419
422
|
return {
|
|
420
423
|
line: latestCoverage.line,
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
+
// An uncollected metric has no evidence: 0 fails its check closed.
|
|
425
|
+
branch: latestCoverage.branch ?? 0,
|
|
426
|
+
function: latestCoverage.function ?? 0,
|
|
427
|
+
statement: latestCoverage.statement ?? 0,
|
|
424
428
|
trend,
|
|
425
429
|
};
|
|
426
430
|
}
|
|
@@ -137,6 +137,12 @@ export class SecurityAuditProtocol {
|
|
|
137
137
|
if (depResult.success) {
|
|
138
138
|
this.currentAudit = { ...this.currentAudit, dependencyResult: depResult.value };
|
|
139
139
|
await this.publishDependencyVulnerabilities(depResult.value.vulnerabilities);
|
|
140
|
+
// #1049: a failed or partial advisory lookup (or a result without a
|
|
141
|
+
// status, which cannot show it was complete) is not a clean dependency scan.
|
|
142
|
+
if (depResult.value.status !== 'complete') {
|
|
143
|
+
this.recordIncompleteCheck(depResult.value.error
|
|
144
|
+
?? `Dependency advisories could not be checked for ${depResult.value.uncheckedPackages?.length ?? 'unknown number of'} package(s)`);
|
|
145
|
+
}
|
|
140
146
|
}
|
|
141
147
|
else {
|
|
142
148
|
this.recordIncompleteCheck('Dependency scan did not complete');
|
|
@@ -280,6 +286,11 @@ export class SecurityAuditProtocol {
|
|
|
280
286
|
vulnerabilities: scanResult.value.vulnerabilities,
|
|
281
287
|
outdatedPackages: [],
|
|
282
288
|
summary: scanResult.value.summary,
|
|
289
|
+
status: scanResult.value.status,
|
|
290
|
+
measured: scanResult.value.measured,
|
|
291
|
+
packagesChecked: scanResult.value.packagesChecked,
|
|
292
|
+
uncheckedPackages: scanResult.value.uncheckedPackages,
|
|
293
|
+
...(scanResult.value.error ? { error: scanResult.value.error } : {}),
|
|
283
294
|
});
|
|
284
295
|
}
|
|
285
296
|
}
|
|
@@ -49,6 +49,11 @@ export interface TrendData {
|
|
|
49
49
|
export declare class ResultSaver {
|
|
50
50
|
private readonly baseDir;
|
|
51
51
|
private readonly resultsDir;
|
|
52
|
+
/**
|
|
53
|
+
* @param baseDir Store directory. Defaults to the resolved project's
|
|
54
|
+
* `.agentic-qe` (review of #1026 N2: a cwd-relative default wrote
|
|
55
|
+
* `<tmp>/.agentic-qe/results` when run from a shared dir).
|
|
56
|
+
*/
|
|
52
57
|
constructor(baseDir?: string);
|
|
53
58
|
/**
|
|
54
59
|
* Save task result in appropriate format(s)
|
|
@@ -71,12 +76,38 @@ export declare class ResultSaver {
|
|
|
71
76
|
private generateSecurityReport;
|
|
72
77
|
private generateQualityReport;
|
|
73
78
|
private ensureDirectories;
|
|
79
|
+
/** `YYYY-MM-DDTHH-MM-SS-mmm` (#1007: milliseconds, not seconds). */
|
|
74
80
|
private formatTimestamp;
|
|
81
|
+
/** Short task-id fragment plus random hex, unique per save. */
|
|
82
|
+
private uniqueSuffix;
|
|
83
|
+
/** Write `filePath` via a temp file and rename, replacing any previous version. */
|
|
84
|
+
private replaceFile;
|
|
85
|
+
/**
|
|
86
|
+
* Create `filePath` exclusively and record it. If the name is taken (a
|
|
87
|
+
* reused custom prefix), write to
|
|
88
|
+
* `name-1.ext`, `name-2.ext`, … instead of replacing the earlier file (#1007).
|
|
89
|
+
*/
|
|
90
|
+
private writeNewFile;
|
|
91
|
+
/**
|
|
92
|
+
* File name for a generated test source: the sanitized name capped at
|
|
93
|
+
* MAX_GENERATED_STEM_LENGTH characters (a long source file name would
|
|
94
|
+
* otherwise exceed the filesystem's 255-byte limit once the temp-file suffix
|
|
95
|
+
* is added) plus a short hash of the source path and full name. The hash keeps
|
|
96
|
+
* `src/one/math.ts` and `src/two/math.ts` (or a truncated long name) from
|
|
97
|
+
* overwriting each other, while the same test still maps to the same file.
|
|
98
|
+
*/
|
|
99
|
+
private generatedTestFilename;
|
|
75
100
|
private sanitizeFilename;
|
|
76
101
|
private getTestExtension;
|
|
77
102
|
private createFileEntry;
|
|
78
103
|
private extractSummary;
|
|
104
|
+
/**
|
|
105
|
+
* Append to index.json. Concurrent saves read-modify-write the same file, so
|
|
106
|
+
* updates are serialized per index path in this process and the file is
|
|
107
|
+
* replaced atomically, otherwise one save's entry is lost (#1007).
|
|
108
|
+
*/
|
|
79
109
|
private updateIndex;
|
|
110
|
+
private writeIndexEntry;
|
|
80
111
|
}
|
|
81
112
|
export declare function createResultSaver(baseDir?: string): ResultSaver;
|
|
82
113
|
//# sourceMappingURL=result-saver.d.ts.map
|
|
@@ -4,8 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from 'fs/promises';
|
|
6
6
|
import * as path from 'path';
|
|
7
|
-
import { createHash } from 'crypto';
|
|
7
|
+
import { createHash, randomBytes } from 'crypto';
|
|
8
8
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
9
|
+
import { getProjectStorePath } from '../kernel/project-root.js';
|
|
10
|
+
/** Cap on the sanitized stem of a generated test file name (see generatedTestFilename). */
|
|
11
|
+
const MAX_GENERATED_STEM_LENGTH = 100;
|
|
9
12
|
function securityReportExecution(data) {
|
|
10
13
|
return data.evidence?.completeness === 'complete' ? 'completed'
|
|
11
14
|
: data.evidence?.completeness === 'partial' ? 'partial'
|
|
@@ -77,7 +80,12 @@ const TEST_FILE_PATTERNS = {
|
|
|
77
80
|
export class ResultSaver {
|
|
78
81
|
baseDir;
|
|
79
82
|
resultsDir;
|
|
80
|
-
|
|
83
|
+
/**
|
|
84
|
+
* @param baseDir Store directory. Defaults to the resolved project's
|
|
85
|
+
* `.agentic-qe` (review of #1026 N2: a cwd-relative default wrote
|
|
86
|
+
* `<tmp>/.agentic-qe/results` when run from a shared dir).
|
|
87
|
+
*/
|
|
88
|
+
constructor(baseDir = getProjectStorePath()) {
|
|
81
89
|
this.baseDir = baseDir;
|
|
82
90
|
this.resultsDir = path.join(baseDir, 'results');
|
|
83
91
|
}
|
|
@@ -94,8 +102,13 @@ export class ResultSaver {
|
|
|
94
102
|
// Ensure directories exist
|
|
95
103
|
await this.ensureDirectories(taskType);
|
|
96
104
|
// Get timestamp string for filenames
|
|
105
|
+
// #1007: millisecond timestamp plus a per-save suffix. Names to the second
|
|
106
|
+
// let two saves in the same second overwrite each other. Report, manifest
|
|
107
|
+
// and data files are created exclusively (see writeNewFile), so even a
|
|
108
|
+
// reused custom prefix never replaces an earlier result. Generated test
|
|
109
|
+
// files are the exception: one file per test name (see replaceFile).
|
|
97
110
|
const tsStr = this.formatTimestamp(timestamp);
|
|
98
|
-
const prefix = options.filenamePrefix || tsStr
|
|
111
|
+
const prefix = options.filenamePrefix || `${tsStr}_${this.uniqueSuffix(taskId)}`;
|
|
99
112
|
// Save based on task type
|
|
100
113
|
switch (taskType) {
|
|
101
114
|
case 'generate-tests':
|
|
@@ -159,25 +172,37 @@ export class ResultSaver {
|
|
|
159
172
|
framework: options.framework || 'vitest',
|
|
160
173
|
tests: data.tests,
|
|
161
174
|
}, null, 2);
|
|
162
|
-
await
|
|
163
|
-
files.push(await this.createFileEntry(manifestPath, 'json'));
|
|
175
|
+
files.push(await this.writeNewFile(manifestPath, manifestContent, 'json'));
|
|
164
176
|
// Save individual test files if code is provided
|
|
165
177
|
if (data.tests) {
|
|
166
178
|
for (const test of data.tests) {
|
|
167
|
-
|
|
179
|
+
// The test-generation domain returns `testCode`; retain `code` for
|
|
180
|
+
// older callers of ResultSaver that already use that field.
|
|
181
|
+
const code = test.testCode ?? test.code;
|
|
182
|
+
if (code) {
|
|
168
183
|
const ext = this.getTestExtension(options.language || 'typescript', options.framework || 'vitest');
|
|
169
|
-
const testFilename = this.
|
|
184
|
+
const testFilename = this.generatedTestFilename(test, ext);
|
|
170
185
|
const testPath = path.join(testDir, testFilename);
|
|
171
|
-
|
|
172
|
-
|
|
186
|
+
// Review of #1026 N7: a generated test keeps one file per test name
|
|
187
|
+
// (replaced atomically), unlike reports, so numbered copies never
|
|
188
|
+
// pile up for a test runner to collect.
|
|
189
|
+
//
|
|
190
|
+
// One unwritable source file (e.g. a name the filesystem rejects)
|
|
191
|
+
// must not discard the manifest and report, so a per-file failure is
|
|
192
|
+
// skipped; `files` then lists only what is actually on disk.
|
|
193
|
+
try {
|
|
194
|
+
files.push(await this.replaceFile(testPath, code, 'source'));
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.warn(`ResultSaver: could not write generated test ${testFilename}: ${error.message}`);
|
|
198
|
+
}
|
|
173
199
|
}
|
|
174
200
|
}
|
|
175
201
|
}
|
|
176
202
|
// Save markdown report
|
|
177
203
|
const reportPath = path.join(this.resultsDir, 'tests', `${prefix}_report.md`);
|
|
178
204
|
const reportContent = this.generateTestReport(data, options);
|
|
179
|
-
await
|
|
180
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
205
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
181
206
|
return files;
|
|
182
207
|
}
|
|
183
208
|
async saveCoverage(result, prefix, options) {
|
|
@@ -189,8 +214,7 @@ export class ResultSaver {
|
|
|
189
214
|
const coverageDir = path.join(this.resultsDir, 'coverage');
|
|
190
215
|
// Save JSON
|
|
191
216
|
const jsonPath = path.join(coverageDir, `${prefix}_coverage.json`);
|
|
192
|
-
await
|
|
193
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
217
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
194
218
|
// Save LCOV format — ONLY for genuinely measured coverage.
|
|
195
219
|
//
|
|
196
220
|
// #569/ADR-126: LCOV has nowhere to record provenance. Emitting it for an
|
|
@@ -202,14 +226,12 @@ export class ResultSaver {
|
|
|
202
226
|
if (options.includeSecondary !== false && data.measured === true) {
|
|
203
227
|
const lcovPath = path.join(coverageDir, `${prefix}_coverage.lcov`);
|
|
204
228
|
const lcovContent = this.generateLcov(data);
|
|
205
|
-
await
|
|
206
|
-
files.push(await this.createFileEntry(lcovPath, 'lcov'));
|
|
229
|
+
files.push(await this.writeNewFile(lcovPath, lcovContent, 'lcov'));
|
|
207
230
|
}
|
|
208
231
|
// Save markdown report
|
|
209
232
|
const reportPath = path.join(coverageDir, `${prefix}_report.md`);
|
|
210
233
|
const reportContent = this.generateCoverageReport(data);
|
|
211
|
-
await
|
|
212
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
234
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
213
235
|
return files;
|
|
214
236
|
}
|
|
215
237
|
async saveSecurityScan(result, prefix, options) {
|
|
@@ -218,20 +240,17 @@ export class ResultSaver {
|
|
|
218
240
|
const securityDir = path.join(this.resultsDir, 'security');
|
|
219
241
|
// Save JSON
|
|
220
242
|
const jsonPath = path.join(securityDir, `${prefix}_scan.json`);
|
|
221
|
-
await
|
|
222
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
243
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
223
244
|
// Save SARIF format
|
|
224
245
|
if (options.includeSecondary !== false) {
|
|
225
246
|
const sarifPath = path.join(securityDir, `${prefix}_scan.sarif`);
|
|
226
247
|
const sarifContent = this.generateSarif(data);
|
|
227
|
-
await
|
|
228
|
-
files.push(await this.createFileEntry(sarifPath, 'sarif'));
|
|
248
|
+
files.push(await this.writeNewFile(sarifPath, sarifContent, 'sarif'));
|
|
229
249
|
}
|
|
230
250
|
// Save markdown report
|
|
231
251
|
const reportPath = path.join(securityDir, `${prefix}_report.md`);
|
|
232
252
|
const reportContent = this.generateSecurityReport(data);
|
|
233
|
-
await
|
|
234
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
253
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
235
254
|
return files;
|
|
236
255
|
}
|
|
237
256
|
async saveQualityAssessment(result, prefix, _options) {
|
|
@@ -240,13 +259,11 @@ export class ResultSaver {
|
|
|
240
259
|
const qualityDir = path.join(this.resultsDir, 'quality');
|
|
241
260
|
// Save JSON
|
|
242
261
|
const jsonPath = path.join(qualityDir, `${prefix}_assessment.json`);
|
|
243
|
-
await
|
|
244
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
262
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
245
263
|
// Save markdown report
|
|
246
264
|
const reportPath = path.join(qualityDir, `${prefix}_report.md`);
|
|
247
265
|
const reportContent = this.generateQualityReport(data);
|
|
248
|
-
await
|
|
249
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
266
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
250
267
|
return files;
|
|
251
268
|
}
|
|
252
269
|
async saveCodeIndex(result, prefix, _options) {
|
|
@@ -256,8 +273,7 @@ export class ResultSaver {
|
|
|
256
273
|
await fs.mkdir(indexDir, { recursive: true });
|
|
257
274
|
// Save JSON
|
|
258
275
|
const jsonPath = path.join(indexDir, `${prefix}_index.json`);
|
|
259
|
-
await
|
|
260
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
276
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
261
277
|
return files;
|
|
262
278
|
}
|
|
263
279
|
async saveDefectPrediction(result, prefix, _options) {
|
|
@@ -266,8 +282,7 @@ export class ResultSaver {
|
|
|
266
282
|
await fs.mkdir(defectDir, { recursive: true });
|
|
267
283
|
// Save JSON
|
|
268
284
|
const jsonPath = path.join(defectDir, `${prefix}_prediction.json`);
|
|
269
|
-
await
|
|
270
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
285
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
271
286
|
return files;
|
|
272
287
|
}
|
|
273
288
|
async saveContractValidation(result, prefix, _options) {
|
|
@@ -276,8 +291,7 @@ export class ResultSaver {
|
|
|
276
291
|
await fs.mkdir(contractDir, { recursive: true });
|
|
277
292
|
// Save JSON
|
|
278
293
|
const jsonPath = path.join(contractDir, `${prefix}_validation.json`);
|
|
279
|
-
await
|
|
280
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
294
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
281
295
|
return files;
|
|
282
296
|
}
|
|
283
297
|
async saveAccessibilityTest(result, prefix, _options) {
|
|
@@ -286,8 +300,7 @@ export class ResultSaver {
|
|
|
286
300
|
await fs.mkdir(a11yDir, { recursive: true });
|
|
287
301
|
// Save JSON
|
|
288
302
|
const jsonPath = path.join(a11yDir, `${prefix}_test.json`);
|
|
289
|
-
await
|
|
290
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
303
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
291
304
|
return files;
|
|
292
305
|
}
|
|
293
306
|
async saveChaosTest(result, prefix, _options) {
|
|
@@ -296,8 +309,7 @@ export class ResultSaver {
|
|
|
296
309
|
await fs.mkdir(chaosDir, { recursive: true });
|
|
297
310
|
// Save JSON
|
|
298
311
|
const jsonPath = path.join(chaosDir, `${prefix}_chaos.json`);
|
|
299
|
-
await
|
|
300
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
312
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
301
313
|
return files;
|
|
302
314
|
}
|
|
303
315
|
async saveGeneric(taskType, result, prefix) {
|
|
@@ -305,8 +317,7 @@ export class ResultSaver {
|
|
|
305
317
|
const genericDir = path.join(this.resultsDir, 'other');
|
|
306
318
|
await fs.mkdir(genericDir, { recursive: true });
|
|
307
319
|
const jsonPath = path.join(genericDir, `${prefix}_${taskType}.json`);
|
|
308
|
-
await
|
|
309
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
320
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
310
321
|
return files;
|
|
311
322
|
}
|
|
312
323
|
// ==========================================================================
|
|
@@ -486,7 +497,12 @@ ${data.recommendations.map((r, i) => `${i + 1}. ${r}`).join('\n')}
|
|
|
486
497
|
|
|
487
498
|
## Quality Score
|
|
488
499
|
|
|
489
|
-
${typeof data.qualityScore
|
|
500
|
+
${typeof data.qualityScore !== 'number' ? 'N/A — measured gate uses individual checks.'
|
|
501
|
+
: data.qualityScore < 0 ? 'Not measured — no requested metric had measured data (#1011).'
|
|
502
|
+
: data.evidenceStatus === 'insufficient-evidence'
|
|
503
|
+
? `Subset score over measured metrics: ${data.qualityScore.toFixed(1)} (not a verdict)`
|
|
504
|
+
+ (data.scoreBasis?.length ? `\nBased on: ${data.scoreBasis.join(', ')}` : '')
|
|
505
|
+
: `**${data.qualityScore.toFixed(1)}** / 100`}
|
|
490
506
|
|
|
491
507
|
## Metrics
|
|
492
508
|
|
|
@@ -502,7 +518,7 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
502
518
|
// ==========================================================================
|
|
503
519
|
// Utilities
|
|
504
520
|
// ==========================================================================
|
|
505
|
-
async ensureDirectories(
|
|
521
|
+
async ensureDirectories(_taskType) {
|
|
506
522
|
const dirs = [
|
|
507
523
|
this.resultsDir,
|
|
508
524
|
path.join(this.resultsDir, 'security'),
|
|
@@ -515,8 +531,67 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
515
531
|
await fs.mkdir(dir, { recursive: true });
|
|
516
532
|
}
|
|
517
533
|
}
|
|
534
|
+
/** `YYYY-MM-DDTHH-MM-SS-mmm` (#1007: milliseconds, not seconds). */
|
|
518
535
|
formatTimestamp(date) {
|
|
519
|
-
return date.toISOString().replace(/[:.]/g, '-').slice(0,
|
|
536
|
+
return date.toISOString().replace(/[:.]/g, '-').slice(0, 23);
|
|
537
|
+
}
|
|
538
|
+
/** Short task-id fragment plus random hex, unique per save. */
|
|
539
|
+
uniqueSuffix(taskId) {
|
|
540
|
+
const idPart = this.sanitizeFilename(taskId).slice(-12) || 'task';
|
|
541
|
+
return `${idPart}-${randomBytes(3).toString('hex')}`;
|
|
542
|
+
}
|
|
543
|
+
/** Write `filePath` via a temp file and rename, replacing any previous version. */
|
|
544
|
+
async replaceFile(filePath, content, format) {
|
|
545
|
+
const tmpPath = `${filePath}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
|
|
546
|
+
try {
|
|
547
|
+
await fs.writeFile(tmpPath, content, { flag: 'wx' });
|
|
548
|
+
await fs.rename(tmpPath, filePath);
|
|
549
|
+
}
|
|
550
|
+
catch (error) {
|
|
551
|
+
await fs.rm(tmpPath, { force: true });
|
|
552
|
+
throw error;
|
|
553
|
+
}
|
|
554
|
+
return this.createFileEntry(filePath, format);
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Create `filePath` exclusively and record it. If the name is taken (a
|
|
558
|
+
* reused custom prefix), write to
|
|
559
|
+
* `name-1.ext`, `name-2.ext`, … instead of replacing the earlier file (#1007).
|
|
560
|
+
*/
|
|
561
|
+
async writeNewFile(filePath, content, format) {
|
|
562
|
+
const dir = path.dirname(filePath);
|
|
563
|
+
const base = path.basename(filePath);
|
|
564
|
+
const dot = base.indexOf('.', 1);
|
|
565
|
+
const stem = dot > 0 ? base.slice(0, dot) : base;
|
|
566
|
+
const ext = dot > 0 ? base.slice(dot) : '';
|
|
567
|
+
for (let attempt = 0; attempt < 1000; attempt++) {
|
|
568
|
+
const candidate = attempt === 0 ? filePath : path.join(dir, `${stem}-${attempt}${ext}`);
|
|
569
|
+
try {
|
|
570
|
+
await fs.writeFile(candidate, content, { flag: 'wx' });
|
|
571
|
+
return this.createFileEntry(candidate, format);
|
|
572
|
+
}
|
|
573
|
+
catch (error) {
|
|
574
|
+
if (error.code !== 'EEXIST')
|
|
575
|
+
throw error;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
throw new Error(`ResultSaver: no free file name for ${filePath}`);
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* File name for a generated test source: the sanitized name capped at
|
|
582
|
+
* MAX_GENERATED_STEM_LENGTH characters (a long source file name would
|
|
583
|
+
* otherwise exceed the filesystem's 255-byte limit once the temp-file suffix
|
|
584
|
+
* is added) plus a short hash of the source path and full name. The hash keeps
|
|
585
|
+
* `src/one/math.ts` and `src/two/math.ts` (or a truncated long name) from
|
|
586
|
+
* overwriting each other, while the same test still maps to the same file.
|
|
587
|
+
*/
|
|
588
|
+
generatedTestFilename(test, ext) {
|
|
589
|
+
const stem = this.sanitizeFilename(test.name).slice(0, MAX_GENERATED_STEM_LENGTH) || 'test';
|
|
590
|
+
const hash = createHash('sha256')
|
|
591
|
+
.update(`${test.file ?? ''}\0${test.name}`)
|
|
592
|
+
.digest('hex')
|
|
593
|
+
.slice(0, 8);
|
|
594
|
+
return `${stem}-${hash}${ext}`;
|
|
520
595
|
}
|
|
521
596
|
sanitizeFilename(name) {
|
|
522
597
|
return name.replace(/[^a-zA-Z0-9_-]/g, '_').toLowerCase();
|
|
@@ -555,7 +630,10 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
555
630
|
};
|
|
556
631
|
case 'assess-quality':
|
|
557
632
|
return {
|
|
558
|
-
|
|
633
|
+
// #1021: -1 means "not measured", and a subset score under insufficient
|
|
634
|
+
// evidence is not a verdict; keep both out of the index and trends.
|
|
635
|
+
...(typeof data.qualityScore === 'number' && data.qualityScore >= 0
|
|
636
|
+
&& data.evidenceStatus !== 'insufficient-evidence' ? { qualityScore: data.qualityScore } : {}),
|
|
559
637
|
passed: data.passed,
|
|
560
638
|
...(data.evidenceStatus !== undefined ? { evidenceStatus: data.evidenceStatus } : {}),
|
|
561
639
|
};
|
|
@@ -568,8 +646,26 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
568
646
|
return {};
|
|
569
647
|
}
|
|
570
648
|
}
|
|
571
|
-
|
|
572
|
-
|
|
649
|
+
/**
|
|
650
|
+
* Append to index.json. Concurrent saves read-modify-write the same file, so
|
|
651
|
+
* updates are serialized per index path in this process and the file is
|
|
652
|
+
* replaced atomically, otherwise one save's entry is lost (#1007).
|
|
653
|
+
*/
|
|
654
|
+
updateIndex(taskId, taskType, timestamp, files, summary) {
|
|
655
|
+
const indexPath = path.resolve(this.resultsDir, 'index.json');
|
|
656
|
+
const previous = indexUpdateQueues.get(indexPath) ?? Promise.resolve();
|
|
657
|
+
const next = previous
|
|
658
|
+
.catch(() => undefined)
|
|
659
|
+
.then(() => this.writeIndexEntry(indexPath, taskId, taskType, timestamp, files, summary));
|
|
660
|
+
indexUpdateQueues.set(indexPath, next);
|
|
661
|
+
const settle = () => {
|
|
662
|
+
if (indexUpdateQueues.get(indexPath) === next)
|
|
663
|
+
indexUpdateQueues.delete(indexPath);
|
|
664
|
+
};
|
|
665
|
+
next.then(settle, settle);
|
|
666
|
+
return next;
|
|
667
|
+
}
|
|
668
|
+
async writeIndexEntry(indexPath, taskId, taskType, timestamp, files, summary) {
|
|
573
669
|
let index;
|
|
574
670
|
try {
|
|
575
671
|
const content = await fs.readFile(indexPath, 'utf-8');
|
|
@@ -598,9 +694,13 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
598
694
|
if (index.results.length > 100) {
|
|
599
695
|
index.results = index.results.slice(-100);
|
|
600
696
|
}
|
|
601
|
-
|
|
697
|
+
const tmpPath = `${indexPath}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
|
|
698
|
+
await fs.writeFile(tmpPath, JSON.stringify(index, null, 2));
|
|
699
|
+
await fs.rename(tmpPath, indexPath);
|
|
602
700
|
}
|
|
603
701
|
}
|
|
702
|
+
/** Pending index.json updates, keyed by absolute index path (#1007). */
|
|
703
|
+
const indexUpdateQueues = new Map();
|
|
604
704
|
// Factory function
|
|
605
705
|
export function createResultSaver(baseDir) {
|
|
606
706
|
return new ResultSaver(baseDir);
|
|
@@ -22,6 +22,7 @@ type CoverageAnalyzerService = import('../domains/coverage-analysis').CoverageAn
|
|
|
22
22
|
type SecurityScannerService = import('../domains/security-compliance').SecurityScannerService;
|
|
23
23
|
type KnowledgeGraphService = import('../domains/code-intelligence').KnowledgeGraphService;
|
|
24
24
|
type QualityAnalyzerService = import('../domains/quality-assessment').QualityAnalyzerService;
|
|
25
|
+
type ProjectMetricsCollector = import('./handlers/handler-types').ProjectMetricsCollector;
|
|
25
26
|
export interface TaskExecutorConfig {
|
|
26
27
|
timeout: number;
|
|
27
28
|
maxRetries: number;
|
|
@@ -106,6 +107,12 @@ export declare class DomainTaskExecutor implements TaskHandlerContext {
|
|
|
106
107
|
*/
|
|
107
108
|
private resolveLLMRouter;
|
|
108
109
|
getKnowledgeGraph(): KnowledgeGraphService;
|
|
110
|
+
/**
|
|
111
|
+
* #999: the code-intelligence coordinator, so the MCP index-code handler can
|
|
112
|
+
* run the same project-metric step as `aqe code index`. Loads the domain
|
|
113
|
+
* lazily; undefined when it is disabled or fails to load.
|
|
114
|
+
*/
|
|
115
|
+
getCodeIntelligenceCoordinator(): Promise<ProjectMetricsCollector | undefined>;
|
|
109
116
|
getQualityAnalyzer(): QualityAnalyzerService;
|
|
110
117
|
private registerHandlers;
|
|
111
118
|
/**
|
|
@@ -16,6 +16,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
16
16
|
import { isCallerInputError, toErrorMessage } from '../shared/error-utils.js';
|
|
17
17
|
import { InsufficientQualityEvidenceError } from '../domains/quality-assessment/quality-evidence.js';
|
|
18
18
|
import { createResultSaver } from './result-saver.js';
|
|
19
|
+
import { getProjectStorePath } from '../kernel/project-root.js';
|
|
19
20
|
import { createLogger } from '../logging/logger-factory.js';
|
|
20
21
|
import { getClaudeModelForTier } from '../shared/llm/model-registry.js';
|
|
21
22
|
// ADR-051: Agent Booster integration for Tier 0 tasks
|
|
@@ -54,9 +55,15 @@ function resolveQualityAnalyzerService(memory) {
|
|
|
54
55
|
const factory = DomainServiceRegistry.resolve(ServiceKeys.QualityAnalyzerService);
|
|
55
56
|
return factory(memory);
|
|
56
57
|
}
|
|
57
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* #996: structured details, only from error types known to carry them.
|
|
60
|
+
* #1021 round 2b: a caller-input error is marked so learners do not record
|
|
61
|
+
* the caller's mistake as a component failure.
|
|
62
|
+
*/
|
|
58
63
|
function errorDetailsOf(error) {
|
|
59
|
-
|
|
64
|
+
if (error instanceof InsufficientQualityEvidenceError)
|
|
65
|
+
return { ...error.toDetails() };
|
|
66
|
+
return isCallerInputError(error) ? { callerError: true } : undefined;
|
|
60
67
|
}
|
|
61
68
|
// ============================================================================
|
|
62
69
|
// ADR-051: Model Routing Support
|
|
@@ -141,7 +148,8 @@ export class DomainTaskExecutor {
|
|
|
141
148
|
maxRetries: config?.maxRetries ?? 3,
|
|
142
149
|
enableCaching: config?.enableCaching ?? true,
|
|
143
150
|
saveResults: config?.saveResults ?? true,
|
|
144
|
-
|
|
151
|
+
// Review of #1026 N2: resolve the project store, not a cwd-relative one.
|
|
152
|
+
resultsDir: config?.resultsDir ?? getProjectStorePath(),
|
|
145
153
|
defaultLanguage: config?.defaultLanguage ?? 'typescript',
|
|
146
154
|
defaultFramework: config?.defaultFramework ?? 'vitest',
|
|
147
155
|
};
|
|
@@ -240,6 +248,25 @@ export class DomainTaskExecutor {
|
|
|
240
248
|
}
|
|
241
249
|
return this.knowledgeGraph;
|
|
242
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* #999: the code-intelligence coordinator, so the MCP index-code handler can
|
|
253
|
+
* run the same project-metric step as `aqe code index`. Loads the domain
|
|
254
|
+
* lazily; undefined when it is disabled or fails to load.
|
|
255
|
+
*/
|
|
256
|
+
async getCodeIntelligenceCoordinator() {
|
|
257
|
+
try {
|
|
258
|
+
const api = this.kernel.getDomainAPIAsync
|
|
259
|
+
? await this.kernel.getDomainAPIAsync('code-intelligence')
|
|
260
|
+
: this.kernel.getDomainAPI('code-intelligence');
|
|
261
|
+
return typeof api?.getCoordinator === 'function' ? api.getCoordinator() : undefined;
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
logger.debug('code-intelligence coordinator unavailable for project metrics', {
|
|
265
|
+
error: error instanceof Error ? error.message : String(error),
|
|
266
|
+
});
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
243
270
|
getQualityAnalyzer() {
|
|
244
271
|
if (!this.qualityAnalyzer) {
|
|
245
272
|
this.qualityAnalyzer = resolveQualityAnalyzerService(this.kernel.memory);
|
|
@@ -498,12 +525,14 @@ export class DomainTaskExecutor {
|
|
|
498
525
|
await this.publishTaskFailed(task.id, errorMessage, domain, isCallerInputError(error));
|
|
499
526
|
// ADR-051: Record failed outcome
|
|
500
527
|
this.recordOutcome(task, routingTier, false, Date.now() - startTime).catch((e) => { logger.warn('recordOutcome failed', { error: e instanceof Error ? e.message : String(e), taskId: task.id }); });
|
|
528
|
+
const errorDetails = errorDetailsOf(error);
|
|
501
529
|
return {
|
|
502
530
|
taskId: task.id,
|
|
503
531
|
success: false,
|
|
504
532
|
error: errorMessage,
|
|
505
533
|
duration: Date.now() - startTime,
|
|
506
534
|
domain,
|
|
535
|
+
...(errorDetails ? { errorDetails } : {}),
|
|
507
536
|
};
|
|
508
537
|
}
|
|
509
538
|
}
|
|
@@ -9,6 +9,7 @@ import { KnowledgeGraphService, } from './services/knowledge-graph.js';
|
|
|
9
9
|
import { SemanticAnalyzerService, } from './services/semantic-analyzer.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
11
|
import { ImpactAnalyzerService, } from './services/impact-analyzer.js';
|
|
12
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
12
13
|
/**
|
|
13
14
|
* Code Intelligence Domain Plugin
|
|
14
15
|
* Provides knowledge graph, semantic search, and impact analysis capabilities
|
|
@@ -301,6 +302,9 @@ export class CodeIntelligencePlugin extends BaseDomainPlugin {
|
|
|
301
302
|
);
|
|
302
303
|
}
|
|
303
304
|
async handleCoverageGap(event) {
|
|
305
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
306
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
307
|
+
return;
|
|
304
308
|
// Coverage gap detected - update risk scores in knowledge graph
|
|
305
309
|
const payload = event.payload;
|
|
306
310
|
// Store coverage gap info for impact analysis
|