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
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Shared CLI coverage verdict (#995, #1010, #1012)
|
|
3
|
+
*
|
|
4
|
+
* One resolution and one verdict for every CLI surface that reports coverage
|
|
5
|
+
* (`aqe coverage`, the `aqe ci` coverage phase), built on the same shared
|
|
6
|
+
* functions as the MCP `coverage_analyze_sublinear` handler
|
|
7
|
+
* (`resolveExistingCoverage`, `thresholdVerdict`, `reconcileRecommendations`):
|
|
8
|
+
*
|
|
9
|
+
* - measured — an instrumented report covers the target: judged on the
|
|
10
|
+
* metrics the report collected (an uncollected metric is null,
|
|
11
|
+
* never 0%, and is left out of the threshold);
|
|
12
|
+
* - unmeasured — the report has no entry for the target, the runner ran 0
|
|
13
|
+
* tests, or only test files were reported: no figure, exit 3;
|
|
14
|
+
* - estimate — no report exists, so the CLI shows a labelled STATIC
|
|
15
|
+
* ESTIMATE. It carries no threshold verdict, is never
|
|
16
|
+
* persisted as evidence, and also exits 3: nothing was measured;
|
|
17
|
+
* - error — the target is missing or the given report is unreadable.
|
|
18
|
+
*/
|
|
19
|
+
import chalk from 'chalk';
|
|
20
|
+
import { walkSourceFiles } from './file-discovery.js';
|
|
21
|
+
import { buildCoverageData, summarizeCoverage } from './coverage-data.js';
|
|
22
|
+
import { describeNoData, reconcileRecommendations, resolveExistingCoverage, thresholdVerdict, } from '../../coordination/handlers/coverage-target.js';
|
|
23
|
+
/** `aqe coverage` exit code when no coverage measurement exists for the target (#995). */
|
|
24
|
+
export const EXIT_UNMEASURED = 3;
|
|
25
|
+
/** Provenance labels, the same vocabulary as MCP `coverage_analyze_sublinear`. */
|
|
26
|
+
export const MEASURED_METHOD = 'instrumented-report';
|
|
27
|
+
export const ESTIMATE_METHOD = 'static-estimation';
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the coverage data for a CLI target (#995).
|
|
30
|
+
*
|
|
31
|
+
* Uses the SAME resolution and verdict as the MCP handler
|
|
32
|
+
* (`resolveExistingCoverage`), so CLI and MCP cannot disagree about what a
|
|
33
|
+
* report says for a target:
|
|
34
|
+
* - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
|
|
35
|
+
* directly;
|
|
36
|
+
* - a directory or source file is scoped against the instrumented report of
|
|
37
|
+
* its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
|
|
38
|
+
* - with no report at the project root, the CLI falls back to its labelled
|
|
39
|
+
* heuristic estimate (the CLI never runs the test suite).
|
|
40
|
+
*/
|
|
41
|
+
export async function resolveCliCoverageData(targetPath, log = message => console.log(message)) {
|
|
42
|
+
const existing = await resolveExistingCoverage(targetPath);
|
|
43
|
+
if (existing.status === 'target-missing') {
|
|
44
|
+
return { kind: 'no-data', reason: 'target-missing', message: describeNoData('target-missing', targetPath, null) };
|
|
45
|
+
}
|
|
46
|
+
if (existing.status === 'evaluated') {
|
|
47
|
+
const { evaluation, projectRoot } = existing;
|
|
48
|
+
if (evaluation.status === 'measured') {
|
|
49
|
+
const files = evaluation.files;
|
|
50
|
+
return { kind: 'data', data: { files, summary: summarizeCoverage(files), instrumented: true }, projectRoot };
|
|
51
|
+
}
|
|
52
|
+
return { kind: 'no-data', reason: evaluation.reason, message: describeNoData(evaluation.reason, targetPath, projectRoot) };
|
|
53
|
+
}
|
|
54
|
+
const sourceFiles = walkSourceFiles(existing.target, { includeTests: false });
|
|
55
|
+
if (sourceFiles.length === 0)
|
|
56
|
+
return { kind: 'no-sources' };
|
|
57
|
+
log(chalk.gray(` Analyzing ${sourceFiles.length} files...\n`));
|
|
58
|
+
return { kind: 'data', data: buildCoverageData(sourceFiles, existing.projectRoot), projectRoot: existing.projectRoot };
|
|
59
|
+
}
|
|
60
|
+
/** Which optional metrics an instrumented report actually carries. */
|
|
61
|
+
export function metricsCollected(data) {
|
|
62
|
+
return {
|
|
63
|
+
branch: data.files.some(f => f.branches.total > 0),
|
|
64
|
+
function: data.files.some(f => f.functions.total > 0),
|
|
65
|
+
// #1027 N7: lcov / Cobertura carry no statement detail.
|
|
66
|
+
statement: data.files.some(f => f.statements.total > 0),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const isError = (reason) => reason === 'target-missing' || reason === 'unreadable-report';
|
|
70
|
+
/** Caller-facing explanation of a static estimate. */
|
|
71
|
+
export function estimateMessage() {
|
|
72
|
+
return 'UNMEASURED: no coverage report exists for this project, so these figures are a ' +
|
|
73
|
+
'STATIC ESTIMATE derived from source shape — not measured coverage. No threshold verdict ' +
|
|
74
|
+
'is given and nothing is stored as evidence. Run your tests with coverage first ' +
|
|
75
|
+
'(e.g. `npm test -- --coverage`) and re-run.';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve, analyze and judge coverage for a CLI target. Shared by
|
|
79
|
+
* `aqe coverage` and the `aqe ci` coverage phase.
|
|
80
|
+
*/
|
|
81
|
+
export async function evaluateCliCoverage(api, targetPath, threshold, log) {
|
|
82
|
+
const resolved = await resolveCliCoverageData(targetPath, log);
|
|
83
|
+
if (resolved.kind === 'no-sources')
|
|
84
|
+
return resolved;
|
|
85
|
+
if (resolved.kind === 'no-data') {
|
|
86
|
+
return isError(resolved.reason)
|
|
87
|
+
? { kind: 'error', reason: resolved.reason, message: resolved.message }
|
|
88
|
+
: { kind: 'unmeasured', reason: resolved.reason, message: resolved.message };
|
|
89
|
+
}
|
|
90
|
+
const data = resolved.data;
|
|
91
|
+
const measured = data.instrumented;
|
|
92
|
+
// #1008: a heuristic estimate is shown, never persisted as coverage evidence.
|
|
93
|
+
const result = await api.analyze({
|
|
94
|
+
coverageData: data, threshold, includeFileDetails: true, measured,
|
|
95
|
+
...(resolved.projectRoot ? { projectRoot: resolved.projectRoot } : {}),
|
|
96
|
+
});
|
|
97
|
+
if (!result.success || !result.value) {
|
|
98
|
+
return { kind: 'analysis-failed', message: result.error?.message || 'Coverage analysis failed' };
|
|
99
|
+
}
|
|
100
|
+
const report = result.value;
|
|
101
|
+
if (!measured) {
|
|
102
|
+
return { kind: 'estimate', data, summary: { ...report.summary }, message: estimateMessage() };
|
|
103
|
+
}
|
|
104
|
+
// #995 review NB5: a metric the report never collected is null — not 0 —
|
|
105
|
+
// and is left out of the threshold verdict (same rule as MCP).
|
|
106
|
+
const collected = metricsCollected(data);
|
|
107
|
+
const verdict = thresholdVerdict(report.summary, threshold, collected);
|
|
108
|
+
return {
|
|
109
|
+
kind: 'measured',
|
|
110
|
+
data,
|
|
111
|
+
collected,
|
|
112
|
+
verdict,
|
|
113
|
+
summary: {
|
|
114
|
+
...report.summary,
|
|
115
|
+
branch: collected.branch ? report.summary.branch : null,
|
|
116
|
+
function: collected.function ? report.summary.function : null,
|
|
117
|
+
statement: collected.statement ? report.summary.statement : null,
|
|
118
|
+
},
|
|
119
|
+
// NB-A: the shortfall advice comes from the same verdict (shared with MCP).
|
|
120
|
+
recommendations: reconcileRecommendations(report.recommendations ?? [], verdict, threshold, collected),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Exit code: 0 meets (by more than 5%), 1 below / error, 2 within 5% above,
|
|
125
|
+
* 3 UNMEASURED (not in the report, 0 tests, test-only report, or estimate only).
|
|
126
|
+
*/
|
|
127
|
+
export function coverageExitCode(outcome, threshold) {
|
|
128
|
+
switch (outcome.kind) {
|
|
129
|
+
case 'measured': {
|
|
130
|
+
const { overall, meetsThreshold } = outcome.verdict;
|
|
131
|
+
if (!meetsThreshold)
|
|
132
|
+
return 1;
|
|
133
|
+
return overall < threshold + 5 ? 2 : 0;
|
|
134
|
+
}
|
|
135
|
+
case 'estimate':
|
|
136
|
+
case 'unmeasured':
|
|
137
|
+
return EXIT_UNMEASURED;
|
|
138
|
+
case 'no-sources':
|
|
139
|
+
return 0;
|
|
140
|
+
default:
|
|
141
|
+
return 1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** The `-F json` document for an outcome (same shape in every case). */
|
|
145
|
+
export function coverageJson(outcome, threshold, target) {
|
|
146
|
+
const nulls = { line: null, branch: null, function: null, statement: null };
|
|
147
|
+
switch (outcome.kind) {
|
|
148
|
+
case 'measured':
|
|
149
|
+
return {
|
|
150
|
+
summary: outcome.summary,
|
|
151
|
+
meetsThreshold: outcome.verdict.meetsThreshold,
|
|
152
|
+
threshold,
|
|
153
|
+
recommendations: outcome.recommendations,
|
|
154
|
+
measured: true,
|
|
155
|
+
estimated: false,
|
|
156
|
+
coverageMethod: MEASURED_METHOD,
|
|
157
|
+
branchDataCollected: outcome.collected.branch,
|
|
158
|
+
functionDataCollected: outcome.collected.function,
|
|
159
|
+
statementDataCollected: outcome.collected.statement,
|
|
160
|
+
...(outcome.data.unmeasuredFiles?.length ? { unmeasuredFiles: outcome.data.unmeasuredFiles } : {}),
|
|
161
|
+
};
|
|
162
|
+
case 'estimate':
|
|
163
|
+
return {
|
|
164
|
+
summary: outcome.summary,
|
|
165
|
+
meetsThreshold: null,
|
|
166
|
+
threshold,
|
|
167
|
+
measured: false,
|
|
168
|
+
estimated: true,
|
|
169
|
+
unmeasured: true,
|
|
170
|
+
coverageMethod: ESTIMATE_METHOD,
|
|
171
|
+
reason: 'no-coverage-report',
|
|
172
|
+
target,
|
|
173
|
+
warning: outcome.message,
|
|
174
|
+
};
|
|
175
|
+
case 'unmeasured':
|
|
176
|
+
case 'error':
|
|
177
|
+
return {
|
|
178
|
+
summary: nulls,
|
|
179
|
+
meetsThreshold: null,
|
|
180
|
+
threshold,
|
|
181
|
+
measured: false,
|
|
182
|
+
unmeasured: outcome.kind === 'unmeasured',
|
|
183
|
+
reason: outcome.reason,
|
|
184
|
+
target,
|
|
185
|
+
warning: outcome.message,
|
|
186
|
+
};
|
|
187
|
+
case 'analysis-failed':
|
|
188
|
+
return { summary: nulls, meetsThreshold: null, threshold, measured: false, target, error: outcome.message };
|
|
189
|
+
case 'no-sources':
|
|
190
|
+
return { summary: nulls, meetsThreshold: null, threshold, measured: false, target, warning: 'No source files found' };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=coverage-verdict.js.map
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
10
10
|
import { join, extname } from 'path';
|
|
11
|
+
import { isAqeManagedDir } from '../../shared/aqe-managed-dirs.js';
|
|
11
12
|
// ============================================================================
|
|
12
13
|
// Source File Extensions by Language
|
|
13
14
|
// ============================================================================
|
|
@@ -77,6 +78,10 @@ export function walkSourceFiles(targetPath, options = {}) {
|
|
|
77
78
|
if (entry.isDirectory()) {
|
|
78
79
|
if (SKIP_DIRS.has(entry.name))
|
|
79
80
|
continue;
|
|
81
|
+
// #999: AQE state/assets are not source (.agentic-qe anywhere; .claude
|
|
82
|
+
// at the root or next to a nested .agentic-qe)
|
|
83
|
+
if (isAqeManagedDir(dir, entry.name, depth === 0))
|
|
84
|
+
continue;
|
|
80
85
|
walk(join(dir, entry.name), depth + 1);
|
|
81
86
|
}
|
|
82
87
|
else if (entry.isFile()) {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* for live metrics — keeping execution fully deterministic (SQL-only).
|
|
11
11
|
*/
|
|
12
12
|
import { ok } from '../shared/types/index.js';
|
|
13
|
+
import { MEASURED_COVERAGE_SESSION_SQL } from '../feedback/coverage-session-provenance.js';
|
|
13
14
|
function tryGetDb() {
|
|
14
15
|
try {
|
|
15
16
|
// Dynamic import to avoid hard dependency — the module may not be initialised
|
|
@@ -45,8 +46,10 @@ const qualityGateCheck = {
|
|
|
45
46
|
try {
|
|
46
47
|
// Latest coverage from coverage_sessions
|
|
47
48
|
if (currentCoverage === null) {
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
// #1014: skip legacy estimate/unmeasured rows without provenance.
|
|
50
|
+
const row = db.prepare(`SELECT after_lines FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT 1`).get();
|
|
51
|
+
// #1027 N6: no measured session → unmeasured (null), never 0%.
|
|
52
|
+
currentCoverage = typeof row?.after_lines === 'number' ? row.after_lines : null;
|
|
50
53
|
}
|
|
51
54
|
// Test pass rate from recent test_outcomes
|
|
52
55
|
if (currentTestsPassingRate === null) {
|
|
@@ -70,16 +73,17 @@ const qualityGateCheck = {
|
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
|
-
// Apply defaults for anything still null
|
|
74
|
-
|
|
76
|
+
// Apply defaults for anything still null — except coverage (#1027 N6):
|
|
77
|
+
// unmeasured coverage stays null and fails its check (no evidence ≠ 0%).
|
|
78
|
+
const coverageMeasured = currentCoverage !== null;
|
|
75
79
|
currentTestsPassingRate = currentTestsPassingRate ?? 0;
|
|
76
80
|
currentBugs = currentBugs ?? 0;
|
|
77
|
-
const coveragePassed = currentCoverage >= coverageMin;
|
|
81
|
+
const coveragePassed = currentCoverage !== null && currentCoverage >= coverageMin;
|
|
78
82
|
const testsPassed = currentTestsPassingRate >= testsPassingMin;
|
|
79
83
|
const bugsPassed = currentBugs <= maxBugs;
|
|
80
84
|
const passed = coveragePassed && testsPassed && bugsPassed;
|
|
81
85
|
// Score is a normalized 0-1 value
|
|
82
|
-
const coverageScore = Math.min(currentCoverage / coverageMin, 1);
|
|
86
|
+
const coverageScore = currentCoverage === null ? 0 : Math.min(currentCoverage / coverageMin, 1);
|
|
83
87
|
const testsScore = Math.min(currentTestsPassingRate / testsPassingMin, 1);
|
|
84
88
|
const bugsScore = maxBugs > 0 ? Math.max(0, 1 - currentBugs / maxBugs) : (currentBugs === 0 ? 1 : 0);
|
|
85
89
|
const score = (coverageScore + testsScore + bugsScore) / 3;
|
|
@@ -88,7 +92,10 @@ const qualityGateCheck = {
|
|
|
88
92
|
score: Math.round(score * 100) / 100,
|
|
89
93
|
source: typeof input.currentCoverage === 'number' ? 'input' : 'database',
|
|
90
94
|
details: {
|
|
91
|
-
coverage: {
|
|
95
|
+
coverage: {
|
|
96
|
+
current: currentCoverage, threshold: coverageMin, passed: coveragePassed,
|
|
97
|
+
...(coverageMeasured ? {} : { unmeasured: true }),
|
|
98
|
+
},
|
|
92
99
|
testsPassing: { current: currentTestsPassingRate, threshold: testsPassingMin, passed: testsPassed },
|
|
93
100
|
bugs: { current: currentBugs, threshold: maxBugs, passed: bugsPassed },
|
|
94
101
|
},
|
|
@@ -112,25 +119,29 @@ const coverageThresholdCheck = {
|
|
|
112
119
|
const db = tryGetDb();
|
|
113
120
|
if (db) {
|
|
114
121
|
try {
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
// #1014: skip legacy estimate/unmeasured rows without provenance.
|
|
123
|
+
const row = db.prepare(`SELECT after_lines FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT 1`).get();
|
|
124
|
+
// #1027 N6: no measured session → unmeasured (null), never 0%.
|
|
125
|
+
currentCoverage = typeof row?.after_lines === 'number' ? row.after_lines : null;
|
|
117
126
|
}
|
|
118
127
|
catch {
|
|
119
|
-
currentCoverage =
|
|
128
|
+
currentCoverage = null;
|
|
120
129
|
}
|
|
121
130
|
}
|
|
122
131
|
else {
|
|
123
|
-
currentCoverage =
|
|
132
|
+
currentCoverage = null;
|
|
124
133
|
}
|
|
125
134
|
}
|
|
126
|
-
|
|
127
|
-
const
|
|
135
|
+
// Unmeasured coverage fails the check (no evidence), with no fake gap.
|
|
136
|
+
const passed = currentCoverage !== null && currentCoverage >= minCoverage;
|
|
137
|
+
const gap = currentCoverage === null ? null : passed ? 0 : Math.round((minCoverage - currentCoverage) * 100) / 100;
|
|
128
138
|
return ok({
|
|
129
139
|
currentCoverage,
|
|
130
140
|
passed,
|
|
131
141
|
gap,
|
|
132
142
|
minCoverage,
|
|
133
143
|
source,
|
|
144
|
+
...(currentCoverage === null ? { unmeasured: true } : {}),
|
|
134
145
|
});
|
|
135
146
|
},
|
|
136
147
|
};
|
|
@@ -5,5 +5,13 @@
|
|
|
5
5
|
* Covers: index-code, predict-defects
|
|
6
6
|
*/
|
|
7
7
|
import type { TaskHandlerContext } from './handler-types';
|
|
8
|
+
/** Project metric summary returned by the MCP index-code handler (#999). */
|
|
9
|
+
export interface IndexProjectMetricsSummary {
|
|
10
|
+
root: string;
|
|
11
|
+
loc: number;
|
|
12
|
+
locByLanguage: Record<string, number>;
|
|
13
|
+
tests: number;
|
|
14
|
+
toolsUsed: string[];
|
|
15
|
+
}
|
|
8
16
|
export declare function registerCodeIntelligenceHandlers(ctx: TaskHandlerContext): void;
|
|
9
17
|
//# sourceMappingURL=code-intelligence-handlers.d.ts.map
|
|
@@ -9,6 +9,39 @@ import * as path from 'path';
|
|
|
9
9
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
11
|
import { discoverSourceFiles } from './handler-utils.js';
|
|
12
|
+
import { resolveProjectRootFromPaths } from '../../domains/code-intelligence/project-root-resolver.js';
|
|
13
|
+
import { createLogger } from '../../logging/logger-factory.js';
|
|
14
|
+
const logger = createLogger('CodeIntelligenceHandlers');
|
|
15
|
+
async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
|
|
16
|
+
if (!ctx.getCodeIntelligenceCoordinator)
|
|
17
|
+
return undefined;
|
|
18
|
+
const root = resolveProjectRootFromPaths(indexedFiles, { target: path.resolve(targetPath) });
|
|
19
|
+
if (!root) {
|
|
20
|
+
logger.debug('Skipping project metrics: no project root resolved (filesystem root or no paths)');
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const coordinator = await ctx.getCodeIntelligenceCoordinator();
|
|
25
|
+
if (!coordinator)
|
|
26
|
+
return undefined;
|
|
27
|
+
const metrics = await coordinator.collectProjectMetrics(root);
|
|
28
|
+
if (!metrics.success) {
|
|
29
|
+
logger.debug(`Project metrics unavailable: ${metrics.error.message}`);
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
root,
|
|
34
|
+
loc: metrics.value.loc.total,
|
|
35
|
+
locByLanguage: metrics.value.loc.byLanguage,
|
|
36
|
+
tests: metrics.value.tests.total,
|
|
37
|
+
toolsUsed: metrics.value.toolsUsed,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
logger.debug(`Project metrics unavailable: ${toError(error).message}`);
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
12
45
|
export function registerCodeIntelligenceHandlers(ctx) {
|
|
13
46
|
// Register code indexing handler - REAL IMPLEMENTATION
|
|
14
47
|
ctx.registerHandler('index-code', async (task) => {
|
|
@@ -45,6 +78,11 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
45
78
|
return result;
|
|
46
79
|
}
|
|
47
80
|
const indexResult = result.value;
|
|
81
|
+
// #999 MCP-CLI parity: `aqe code index` runs the coordinator's project
|
|
82
|
+
// metric step (LOC, tests, tools); run the same step here, rooted at the
|
|
83
|
+
// caller's target the way #997 resolves it. Best-effort: indexing has
|
|
84
|
+
// already succeeded, so a metric failure only omits projectMetrics.
|
|
85
|
+
const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, filesToIndex);
|
|
48
86
|
// Detect languages from files
|
|
49
87
|
const detectedLanguages = new Set();
|
|
50
88
|
const extToLang = {
|
|
@@ -78,6 +116,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
|
|
|
78
116
|
duration: indexResult.duration,
|
|
79
117
|
errors: indexResult.errors,
|
|
80
118
|
warnings: indexResult.warnings,
|
|
119
|
+
...(projectMetrics ? { projectMetrics } : {}),
|
|
81
120
|
});
|
|
82
121
|
}
|
|
83
122
|
catch (error) {
|
|
@@ -8,7 +8,9 @@ import { ok, err } from '../../shared/types/index.js';
|
|
|
8
8
|
import { toError } from '../../shared/error-utils.js';
|
|
9
9
|
import { buildEstimatedCoverage, collectRustCoverage, findCargoRoot, isCoverageExecDisabled, isRustProject, } from './coverage-collection.js';
|
|
10
10
|
import { describeNoData, evaluateCoverageForTarget, isUnmeasured, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
|
|
11
|
-
import {
|
|
11
|
+
import { randomUUID } from 'crypto';
|
|
12
|
+
import { describeRunFailure, runJsCoverage, testRunStatus } from './coverage-runner.js';
|
|
13
|
+
import { collectedMetrics } from '../../domains/coverage-analysis/collected-metrics.js';
|
|
12
14
|
/**
|
|
13
15
|
* How long the project's test runner may take before its process tree is
|
|
14
16
|
* killed. `AQE_COVERAGE_TIMEOUT_MS` overrides the 120s default.
|
|
@@ -23,11 +25,15 @@ function recomputeSummary(files) {
|
|
|
23
25
|
const pct = (covered, total) => (total > 0 ? Math.round((covered / total) * 100) : 0);
|
|
24
26
|
const totalLines = sum(f => f.lines.total);
|
|
25
27
|
const coveredLines = sum(f => f.lines.covered);
|
|
28
|
+
// #1012: statements are statements (lcov carries its line figures there).
|
|
29
|
+
const totalStatements = sum(f => f.statements.total);
|
|
26
30
|
return {
|
|
27
31
|
line: pct(coveredLines, totalLines),
|
|
28
32
|
branch: pct(sum(f => f.branches.covered), sum(f => f.branches.total)),
|
|
29
33
|
function: pct(sum(f => f.functions.covered), sum(f => f.functions.total)),
|
|
30
|
-
statement:
|
|
34
|
+
statement: totalStatements > 0
|
|
35
|
+
? pct(sum(f => f.statements.covered), totalStatements)
|
|
36
|
+
: pct(coveredLines, totalLines),
|
|
31
37
|
files: files.length,
|
|
32
38
|
};
|
|
33
39
|
}
|
|
@@ -114,7 +120,19 @@ async function collectCoverage(targetPath) {
|
|
|
114
120
|
const evaluation = run.data
|
|
115
121
|
? evaluateCoverageForTarget(run.data, projectRoot, target, { numTotalTests: run.numTotalTests })
|
|
116
122
|
: { status: 'no-data', reason: 'no-tests-ran' };
|
|
117
|
-
|
|
123
|
+
const result = fromEvaluation(evaluation, run.exitedCleanly || run.data !== null, projectRoot);
|
|
124
|
+
if (result.collected) {
|
|
125
|
+
// #1027 N4/NB2: a run with failing tests still measured coverage; the
|
|
126
|
+
// failure is decided from the runner's counts, not its exit code.
|
|
127
|
+
result.runStatus = testRunStatus(run);
|
|
128
|
+
// #1027 NB1: the run's own testsPassing is recorded with its coverage.
|
|
129
|
+
if (typeof run.numPassedTests === 'number' && typeof run.numFailedTests === 'number') {
|
|
130
|
+
result.testRun = {
|
|
131
|
+
runId: randomUUID(), passed: run.numPassedTests, failed: run.numFailedTests, skipped: run.numPendingTests ?? 0,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
118
136
|
}
|
|
119
137
|
// No report at all: say exactly what happened to the run (not installed,
|
|
120
138
|
// timed out, crashed with stderr), then fall back to a labelled estimate.
|
|
@@ -167,7 +185,7 @@ export function registerCoverageHandlers(ctx) {
|
|
|
167
185
|
const analyzer = ctx.getCoverageAnalyzer();
|
|
168
186
|
const targetPath = payload.target || process.cwd();
|
|
169
187
|
const threshold = payload.threshold || 80;
|
|
170
|
-
const { collected, ranTests, noData, projectRoot, notes } = await collectCoverage(targetPath);
|
|
188
|
+
const { collected, ranTests, noData, projectRoot, notes, runStatus, testRun } = await collectCoverage(targetPath);
|
|
171
189
|
// #995 review N5: say so plainly instead of "no coverage data found".
|
|
172
190
|
if (noData === 'target-missing') {
|
|
173
191
|
return err(new Error(describeNoData('target-missing', targetPath, null)));
|
|
@@ -200,6 +218,10 @@ export function registerCoverageHandlers(ctx) {
|
|
|
200
218
|
threshold,
|
|
201
219
|
includeFileDetails: payload.detectGaps,
|
|
202
220
|
measured: !provenance.estimated,
|
|
221
|
+
// #1027 N7: per-file records use absolute keys; N4: failing-suite coverage is labelled.
|
|
222
|
+
...(projectRoot ? { projectRoot } : {}),
|
|
223
|
+
...(runStatus && !provenance.estimated ? { runStatus } : {}),
|
|
224
|
+
...(testRun && !provenance.estimated ? { testRun } : {}),
|
|
203
225
|
});
|
|
204
226
|
if (!analysisResult.success) {
|
|
205
227
|
return analysisResult;
|
|
@@ -240,7 +262,11 @@ export function registerCoverageHandlers(ctx) {
|
|
|
240
262
|
// than send a developer to fix a number that doesn't exist.
|
|
241
263
|
// #995 NB5/NB-A: the verdict and the shortfall advice come from the same
|
|
242
264
|
// collected-metrics computation (shared with the CLI), so they can't disagree.
|
|
243
|
-
|
|
265
|
+
// #1027 N7: lcov / Cobertura carry no statement data — n/a, out of the verdict.
|
|
266
|
+
const statementCollected = provenance.estimated || collectedMetrics(coverageData.files).statement;
|
|
267
|
+
const metricsCollected = {
|
|
268
|
+
branch: provenance.branchDataCollected, function: provenance.functionDataCollected, statement: statementCollected,
|
|
269
|
+
};
|
|
244
270
|
const verdict = thresholdVerdict(report.summary, threshold, metricsCollected);
|
|
245
271
|
const recommendations = reconcileRecommendations(report.recommendations, verdict, threshold, metricsCollected);
|
|
246
272
|
return ok({
|
|
@@ -249,7 +275,7 @@ export function registerCoverageHandlers(ctx) {
|
|
|
249
275
|
// 100% — when no branch data was collected.
|
|
250
276
|
branchCoverage: provenance.branchDataCollected ? round(report.summary.branch) : null,
|
|
251
277
|
functionCoverage: provenance.functionDataCollected ? round(report.summary.function) : null,
|
|
252
|
-
statementCoverage: round(report.summary.statement),
|
|
278
|
+
statementCoverage: statementCollected ? round(report.summary.statement) : null,
|
|
253
279
|
totalFiles: report.summary.files,
|
|
254
280
|
coverageByFile: coverageData.files.map(f => ({
|
|
255
281
|
file: f.path,
|
|
@@ -269,6 +295,8 @@ export function registerCoverageHandlers(ctx) {
|
|
|
269
295
|
coverageMethod: provenance.method,
|
|
270
296
|
branchDataCollected: provenance.branchDataCollected,
|
|
271
297
|
functionDataCollected: provenance.functionDataCollected,
|
|
298
|
+
statementDataCollected: statementCollected,
|
|
299
|
+
...(runStatus && !provenance.estimated ? { runStatus } : {}),
|
|
272
300
|
...(warnings.length > 0 ? { warning: warnings.join(' ') } : {}),
|
|
273
301
|
});
|
|
274
302
|
}
|
|
@@ -55,9 +55,25 @@ export interface JsCoverageRun {
|
|
|
55
55
|
* not be read — "unknown", which callers must not treat as 0.
|
|
56
56
|
*/
|
|
57
57
|
numTotalTests: number | null;
|
|
58
|
+
/**
|
|
59
|
+
* Per-outcome counts from the runner's JSON result (#1027 NB1/NB2), null
|
|
60
|
+
* when unknown. A failing suite is decided from these, not the exit code:
|
|
61
|
+
* vitest also exits non-zero for a coverage-threshold failure.
|
|
62
|
+
*/
|
|
63
|
+
numPassedTests?: number | null;
|
|
64
|
+
numFailedTests?: number | null;
|
|
65
|
+
numPendingTests?: number | null;
|
|
66
|
+
numFailedTestSuites?: number | null;
|
|
58
67
|
/** The runner's first error line plus the last ~2 KB of its stderr, for diagnosing a crash. */
|
|
59
68
|
stderrTail: string;
|
|
60
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Outcome of a coverage run's tests (#1027 NB2): 'failed' when the runner's
|
|
72
|
+
* own result reports a failed test or test suite, 'passed' when it reports
|
|
73
|
+
* none — whatever the exit code (a coverage-threshold failure exits 1 with
|
|
74
|
+
* every test passing). Without counts (nyc), the exit code decides.
|
|
75
|
+
*/
|
|
76
|
+
export declare function testRunStatus(run: JsCoverageRun): 'passed' | 'failed';
|
|
61
77
|
/**
|
|
62
78
|
* Summarise a runner's stderr for a caller: the FIRST error-looking line (or
|
|
63
79
|
* the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
|
|
@@ -70,6 +86,12 @@ export declare function summarizeStderr(head: string, tail: string, totalBytes:
|
|
|
70
86
|
* project root (hoisted monorepo installs live above the package).
|
|
71
87
|
*/
|
|
72
88
|
export declare function findPackageBin(projectRoot: string, pkg: string, binName?: string, maxDepth?: number): string | null;
|
|
89
|
+
/**
|
|
90
|
+
* Every `node_modules/.bin` from the project up to the workspace root,
|
|
91
|
+
* nearest first. Runners that shell out to sibling tools (nyc → mocha) need
|
|
92
|
+
* the hoisted ones too (#1012).
|
|
93
|
+
*/
|
|
94
|
+
export declare function runnerBinDirs(projectRoot: string): string[];
|
|
73
95
|
/**
|
|
74
96
|
* Pick the runner and its argv. No shell is involved: `command` is the Node
|
|
75
97
|
* binary and `args[0]` the runner's JS entry, so paths are passed verbatim.
|