agentic-qe 3.15.5 → 3.15.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
- package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +121 -0
- package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
- package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
- package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-KAMYBU3S.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-2CAW3KUM.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
- package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-4OFLJ3R2.js} +2 -2
- package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-QCCVIOAH.js} +4 -4
- package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-RBDQJQJB.js} +3 -3
- package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-5JRACCDQ.js} +2 -2
- package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-W4QIIRT4.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-IBNGI572.js} +2 -2
- package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-GMSCVAOI.js} +2 -2
- package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
- package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-22OZIJAD.js} +2 -2
- package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-24ZSGYC6.js} +1 -1
- package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-2CIDFR2H.js} +3 -3
- package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2IWPJUVV.js} +5 -5
- package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-2ZTWPMTK.js} +2 -2
- package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34MDMFET.js} +2 -2
- package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-3DJNKNBR.js} +66 -65
- package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-3NJ7O3OH.js} +2 -2
- package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
- package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
- package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-47Q7JL3V.js} +2 -2
- package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
- package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-4KOVHQXK.js} +2 -2
- package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-4POOJYXA.js} +1 -1
- package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-5DH5QI7G.js} +26 -26
- package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-5GIJU2ZY.js} +2 -2
- package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-5HAPS6VD.js} +2 -2
- package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-5LST62QR.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-5MT7DMD7.js} +2 -2
- package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-5NC7QEJ6.js} +4 -4
- package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-5UPIL62W.js} +3 -3
- package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-5VUIXDY2.js} +2 -2
- package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
- package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-624QRKQX.js} +1 -1
- package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-66NW3ZB4.js} +2 -2
- package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-6HWARQWV.js} +2 -2
- package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6MXAJBEA.js} +1 -1
- package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6R3FBFCJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-6RDVY26I.js} +2 -2
- package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-6T6AHVLF.js} +1 -1
- package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-6WOZUSSN.js} +2 -2
- package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
- package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
- package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-7SAMMQVS.js} +1 -1
- package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-7TJZDRDU.js} +1 -1
- package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-7TVIX4WL.js} +2 -2
- package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-7VTKR44N.js} +2 -2
- package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-7XTANLTN.js} +1 -1
- package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
- package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-A74J23QB.js} +2 -2
- package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-A7ANPS4E.js} +2 -2
- package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-AJT3XDRD.js} +2 -2
- package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-ALCIUWFC.js} +1 -1
- package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-AUN4FG7V.js} +1 -1
- package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-AUOSHM63.js} +2 -2
- package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-AX26QJ6T.js} +2 -2
- package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-B7RHBKHL.js} +2 -2
- package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-BAYGQRNP.js} +2 -2
- package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-BIXRTOH3.js} +18 -18
- package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-BO7UFNYV.js} +2 -2
- package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-BUTGIVKW.js} +1 -1
- package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-BXATKI5S.js} +2 -2
- package/dist/cli/chunks/{chunk-BO4PKNYP.js → chunk-CCL436IU.js} +32 -27
- package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-CEXNW5TR.js} +1 -1
- package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-CLAMMGY3.js} +2 -2
- package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-CR66HNAE.js} +1 -1
- package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-CZBIREL5.js} +2 -2
- package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-D5N2O5EH.js} +2 -2
- package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-DA7DGDTI.js} +2 -2
- package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-DLSFT6PO.js} +2 -2
- package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-DQNUPEY5.js} +2 -2
- package/dist/cli/chunks/{chunk-GTSOFCMQ.js → chunk-EECF4CMA.js} +1 -1
- package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-EF5UHDCG.js} +1 -1
- package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-EJ4KZFZN.js} +1 -1
- package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-ELI4GDQO.js} +2 -2
- package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-F3KS3TAB.js} +2 -2
- package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-F7A2UBZO.js} +2 -2
- package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-FOJRPEIP.js} +2 -2
- package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-FQ5N666N.js} +1 -1
- package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-FU7LNUD7.js} +2 -2
- package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-GFB6BZWU.js} +2 -2
- package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-GI5HWS4H.js} +1 -1
- package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-GNYOHZVV.js} +1 -1
- package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-GVRFSXY6.js} +2 -2
- package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-GWM4M5NF.js} +1 -1
- package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-HAN4MS5T.js} +2 -2
- package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-HEGGV2PT.js} +2 -2
- package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-HOEWMEF2.js} +2 -2
- package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-HZFK2Z2Z.js} +1 -1
- package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
- package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-IEPWO4XP.js} +2 -2
- package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-ITIJ23K2.js} +2 -2
- package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-IVJIHZSM.js} +1 -1
- package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-JAPBSSFY.js} +1 -1
- package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-JCE76MPP.js} +2 -2
- package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-JPJEAK4G.js} +1 -1
- package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-JYKQVYX2.js} +2 -2
- package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-K55EAWZ5.js} +2 -2
- package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
- package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-KIDOBLUO.js} +2 -2
- package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-KYVIOC3C.js} +2 -2
- package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-L2TDHJR3.js} +2 -2
- package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-L4D3TPFP.js} +1 -1
- package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-LAY7NCQK.js} +3 -3
- package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-LCCTJ2PC.js} +2 -2
- package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-LJCEDTUM.js} +3 -3
- package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-LMAEMVPA.js} +1 -1
- package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-LZWJ5BMP.js} +2 -2
- package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-MP3FSUNB.js} +2 -2
- package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-MQCTLTGE.js} +2 -2
- package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-MQTA6KIO.js} +1 -1
- package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-NBUXM5X6.js} +10 -6
- package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-NHRF3V4B.js} +2 -2
- package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
- package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
- package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-ONPPBLRB.js} +2 -2
- package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-OPDZBRIL.js} +2 -2
- package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-OQ4S6B7P.js} +1 -1
- package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-ORBODZSO.js} +2 -2
- package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-ORFL3YXB.js} +2 -2
- package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-P7DXVL2S.js} +2 -2
- package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
- package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
- package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-Q2RBOC7V.js} +2 -2
- package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-QLKUCMZC.js} +1 -1
- package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QLYO3H7E.js} +9 -9
- package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-QS5KZYUZ.js} +2 -2
- package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-R363XXGH.js} +2 -2
- package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
- package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-RFDFET3O.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-RHIQ6QO5.js} +357 -351
- package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
- package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-RUTO67PT.js} +2 -2
- package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-RV6HSMKJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-SOSJWM3E.js} +4 -4
- package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-SV5BUYHH.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-TL5GV3PR.js} +8 -8
- package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-TLUIO37P.js} +2 -2
- package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-TUDENMAE.js} +2 -2
- package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
- package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-UB6DQGWM.js} +2 -2
- package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-UHHMAKPE.js} +1 -1
- package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-ULCHPPW2.js} +1 -1
- package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
- package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-VAYZ5QIE.js} +1 -1
- package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-VCONCVSY.js} +3 -3
- package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-VVF337SV.js} +2 -2
- package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-WKDWRRDT.js} +2 -2
- package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-X2DR27AY.js} +2 -2
- package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-X33F7NXH.js} +3 -3
- package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-XBEI2JBA.js} +2 -2
- package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-XBFQJZWX.js} +2 -2
- package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-XFPQIWEH.js} +3 -3
- package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-XPB5BVU6.js} +2 -2
- package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-XQ53PZEF.js} +3 -3
- package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-XZ46CI35.js} +2 -2
- package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
- package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-YNG7E26C.js} +2 -2
- package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-YXU35GGD.js} +1 -1
- package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-ZCP4P6O2.js} +2 -2
- package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-ZL5LJT7D.js} +2 -2
- package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-ZOUEQ6DL.js} +1 -1
- package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-ZSBD4FUX.js} +2 -2
- package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
- package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-ZUTFHGEO.js} +1 -1
- package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
- package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-2ZVV4OXL.js} +2 -2
- package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-E45OGVPR.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-X73ITYZC.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-W4PPH46C.js} +2 -2
- package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
- package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-NUEPMWDE.js} +2 -2
- package/dist/cli/chunks/{code-QSZTDINQ.js → code-6WQHBS7G.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-BXQIFIFT.js} +2 -2
- package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-Z337R2KH.js} +2 -2
- package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-F5DMYFHV.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-W2SYPZDI.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-ZCHUIFTN.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-M5JNODXF.js} +2 -2
- package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
- package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-LSYTHBHV.js} +2 -2
- package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
- package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
- package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-XPUA73UW.js} +2 -2
- package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-ITKDIYMW.js} +5 -5
- package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
- package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
- package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-DR7J6K4O.js} +2 -2
- package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-LAJJBOUT.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-OMSHCRMK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-EQXSKC5K.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-FKRAGVSW.js} +2 -2
- package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
- package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-JSNNASBW.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
- package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-YNMIBS2E.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-SRLXDKBI.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-VIR7O4L7.js} +2 -2
- package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
- package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-K2ED46EL.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-YYQI4WZM.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
- package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-SE3MJJYS.js} +2 -2
- package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-C572SRDH.js} +43 -43
- package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-35A6G3M5.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-U2756CWI.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
- package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
- package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
- package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-32PX5YH7.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-C4ROMMUS.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
- package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
- package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-XRKTTJTX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
- package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XVH6HW7E.js} +2 -2
- package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
- package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-IULSTM4Z.js} +2 -2
- package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-6K7IAU4T.js} +5 -5
- package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
- package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-VZDUYPLX.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-QUTXKNH4.js} +2 -2
- package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
- package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
- package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-O562GTOG.js} +2 -2
- package/dist/cli/chunks/{platform-2MCRKC25.js → platform-PM7Q2AZS.js} +2 -2
- package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
- package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
- package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
- package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-PPGNSAOS.js} +2 -2
- package/dist/cli/chunks/{prove-QWONEJWX.js → prove-WQ3BKRZG.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
- package/dist/cli/chunks/{quality-WFH54FY7.js → quality-C5WUU3AA.js} +2 -2
- package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-WSSRKD5U.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
- package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
- package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-DHKHXVZT.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-3PPODABV.js} +2 -2
- package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
- package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
- package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-JNXTGT6T.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-6YLROPVP.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
- package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
- package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
- package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
- package/dist/cli/chunks/{security-7723AZZ4.js → security-PWQTGDRU.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
- package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-46KKBSSV.js} +2 -2
- package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-35T5FTDQ.js} +2 -2
- package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-P7QPQWLO.js} +2 -2
- package/dist/cli/chunks/{sync-PDPORHVN.js → sync-W6Z4R4PL.js} +2 -2
- package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
- package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-5CX3ZYT7.js} +2 -2
- package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-DQZGOJNE.js} +3 -3
- package/dist/cli/chunks/{test-DMBJFQNL.js → test-TPP53VVV.js} +12 -12
- package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-WBV4UMQH.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
- package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-AKK37RB7.js} +2 -2
- package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-7MASPELS.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
- package/dist/cli/chunks/{types-K4FLXR2K.js → types-AZ3BTXDP.js} +2 -2
- package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
- package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
- package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-L7OTDKEK.js} +2 -2
- package/dist/cli/chunks/{validate-AAP773B3.js → validate-O3QVFIGP.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-2UGBGLTX.js} +2 -2
- package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-J75IYPRO.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-FQ5DBFCG.js} +2 -2
- package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
- package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-I7TN4MXZ.js} +2 -2
- package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
- package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
- package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-6BWTNVV6.js} +28 -28
- package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
- package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
- package/dist/cli/commands/ci.js +47 -25
- package/dist/cli/commands/coverage.d.ts +1 -28
- package/dist/cli/commands/coverage.js +63 -134
- package/dist/cli/commands/daemon.js +7 -1
- package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
- package/dist/cli/commands/learning.js +47 -7
- package/dist/cli/commands/test.js +6 -7
- package/dist/cli/commands/workflow.js +9 -5
- package/dist/cli/handlers/init-guard.d.ts +13 -0
- package/dist/cli/handlers/init-guard.js +23 -0
- package/dist/cli/handlers/init-handler.d.ts +3 -0
- package/dist/cli/handlers/init-handler.js +9 -0
- package/dist/cli/handlers/interfaces.js +5 -1
- package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
- package/dist/cli/scheduler/persistent-scheduler.js +107 -41
- package/dist/cli/utils/ci-output.d.ts +8 -1
- package/dist/cli/utils/ci-output.js +13 -2
- package/dist/cli/utils/coverage-data.d.ts +3 -0
- package/dist/cli/utils/coverage-data.js +14 -39
- package/dist/cli/utils/coverage-verdict.d.ts +130 -0
- package/dist/cli/utils/coverage-verdict.js +193 -0
- package/dist/cli/utils/file-discovery.js +5 -0
- package/dist/coordination/deterministic-actions.js +24 -13
- package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
- package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
- package/dist/coordination/handlers/coverage-handlers.js +34 -6
- package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
- package/dist/coordination/handlers/coverage-runner.js +105 -10
- package/dist/coordination/handlers/coverage-target.d.ts +1 -0
- package/dist/coordination/handlers/coverage-target.js +4 -1
- package/dist/coordination/handlers/handler-types.d.ts +9 -0
- package/dist/coordination/handlers/handler-utils.d.ts +14 -1
- package/dist/coordination/handlers/handler-utils.js +46 -22
- package/dist/coordination/handlers/quality-handlers.js +108 -18
- package/dist/coordination/handlers/test-execution-handlers.js +4 -1
- package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
- package/dist/coordination/protocols/defect-investigation.js +6 -3
- package/dist/coordination/protocols/quality-gate.js +10 -6
- package/dist/coordination/result-saver.d.ts +22 -0
- package/dist/coordination/result-saver.js +113 -43
- package/dist/coordination/task-executor.d.ts +7 -0
- package/dist/coordination/task-executor.js +32 -3
- package/dist/domains/code-intelligence/plugin.js +4 -0
- package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
- package/dist/domains/coverage-analysis/coordinator.js +18 -6
- package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
- package/dist/domains/coverage-analysis/interfaces.js +6 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
- package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
- package/dist/domains/defect-intelligence/plugin.js +4 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
- package/dist/domains/learning-optimization/coordinator.js +4 -0
- package/dist/domains/learning-optimization/plugin.js +4 -0
- package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
- package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
- package/dist/domains/quality-assessment/coordinator.js +10 -6
- package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
- package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
- package/dist/domains/quality-assessment/index.d.ts +1 -1
- package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +48 -2
- package/dist/domains/quality-assessment/quality-evidence.js +62 -0
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.js +192 -109
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
- package/dist/domains/test-execution/interfaces.d.ts +10 -6
- package/dist/domains/test-execution/plugin.js +4 -0
- package/dist/domains/test-execution/services/test-executor.js +152 -102
- package/dist/domains/test-generation/coordinator.js +4 -0
- package/dist/domains/test-generation/plugin.js +4 -0
- package/dist/feedback/coverage-learner.js +4 -1
- package/dist/feedback/coverage-session-provenance.d.ts +29 -0
- package/dist/feedback/coverage-session-provenance.js +39 -0
- package/dist/init/orchestrator.js +2 -0
- package/dist/init/phases/09-assets.d.ts +4 -0
- package/dist/init/phases/09-assets.js +35 -0
- package/dist/init/retired-assets.d.ts +86 -0
- package/dist/init/retired-assets.js +230 -0
- package/dist/init/skills-installer.d.ts +2 -0
- package/dist/init/skills-installer.js +4 -0
- package/dist/init/types.d.ts +3 -0
- package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
- package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
- package/dist/integrations/ruvector/server-client.js +4 -12
- package/dist/kernel/project-root.d.ts +17 -0
- package/dist/kernel/project-root.js +54 -2
- package/dist/kernel/shared-dirs.d.ts +66 -0
- package/dist/kernel/shared-dirs.js +168 -0
- package/dist/learning/daily-log.js +2 -1
- package/dist/learning/experience-capture-middleware.d.ts +22 -0
- package/dist/learning/experience-capture-middleware.js +35 -0
- package/dist/learning/learnable-result.d.ts +16 -0
- package/dist/learning/learnable-result.js +24 -0
- package/dist/learning/pattern-mutation-error.d.ts +8 -0
- package/dist/learning/pattern-mutation-error.js +12 -0
- package/dist/learning/qe-reasoning-bank.d.ts +10 -0
- package/dist/learning/qe-reasoning-bank.js +50 -1
- package/dist/learning/rvf-reconcile.d.ts +39 -0
- package/dist/learning/rvf-reconcile.js +40 -0
- package/dist/learning/sqlite-persistence.d.ts +14 -0
- package/dist/learning/sqlite-persistence.js +36 -0
- package/dist/mcp/bundle.js +516 -504
- package/dist/mcp/handlers/domain-handler-configs.d.ts +31 -1
- package/dist/mcp/handlers/domain-handler-configs.js +37 -3
- package/dist/mcp/handlers/handler-factory.js +40 -14
- package/dist/mcp/protocol-server.js +27 -2
- package/dist/mcp/tool-cache-scope.d.ts +31 -0
- package/dist/mcp/tool-cache-scope.js +71 -0
- package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
- package/dist/mcp/types.d.ts +4 -0
- package/dist/optimization/session-cache.d.ts +19 -1
- package/dist/optimization/session-cache.js +36 -2
- package/dist/plugins/cache.js +2 -1
- package/dist/plugins/sources/github.js +2 -1
- package/dist/plugins/sources/npm.js +2 -1
- package/dist/shared/aqe-managed-dirs.d.ts +24 -0
- package/dist/shared/aqe-managed-dirs.js +56 -0
- package/dist/shared/events/domain-events.d.ts +18 -3
- package/dist/shared/events/domain-events.js +4 -0
- package/dist/shared/http/http-client.d.ts +6 -0
- package/dist/shared/http/http-client.js +13 -15
- package/dist/shared/io/file-reader.d.ts +26 -0
- package/dist/shared/io/file-reader.js +111 -17
- package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
- package/dist/shared/llm/providers/response-deadline.js +17 -5
- package/dist/shared/metrics/code-metrics.d.ts +24 -0
- package/dist/shared/metrics/code-metrics.js +93 -6
- package/dist/shared/metrics/index.d.ts +1 -1
- package/dist/workers/interfaces.d.ts +9 -1
- package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
- package/dist/workers/quality-daemon/coverage-delta.js +13 -6
- package/dist/workers/quality-daemon/index.js +6 -5
- package/dist/workers/quality-daemon/notification-service.js +3 -3
- package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
- package/dist/workers/quality-daemon/persistent-memory.js +2 -2
- package/dist/workers/worker-manager.js +5 -1
- package/dist/workers/workers/coverage-tracker.js +69 -33
- package/dist/workers/workers/regression-monitor.d.ts +18 -1
- package/dist/workers/workers/regression-monitor.js +276 -117
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
- package/dist/cli/chunks/base-6ORFD62I.js +0 -2
- package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
- package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
- package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
- package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
- package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
- package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
- package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
- package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
- package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
- package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
- package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
- package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
- package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
- package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
- package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
- package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
- package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
- package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
- package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
- package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
- package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
- package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
- package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
- package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
- package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
- package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
- package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
- package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
- package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
- package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
- package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
- package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
- package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
- package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
- package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
- package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
- package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
- package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
- package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
- package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
- package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
- package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
- package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
- package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
- package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
- package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
- package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
- package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
- package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
- package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
- package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
- package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
- package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
- package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
- package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
|
@@ -10,6 +10,7 @@ import { DomainHandlerConfig } from './handler-factory';
|
|
|
10
10
|
import { TestGenerateParams, TestGenerateResult, TestExecuteParams, CoverageAnalyzeParams, CoverageAnalyzeResult, QualityAssessParams, SecurityScanParams, ContractValidateParams, AccessibilityTestParams, ChaosTestParams } from '../types';
|
|
11
11
|
import type { SecurityScanEvidence } from '../../domains/security-compliance/scan-evidence.js';
|
|
12
12
|
import type { SecurityCoverage } from '../../domains/security-compliance/interfaces.js';
|
|
13
|
+
import type { ExcludedQualityFile, PartialQualityMetric } from '../../domains/quality-assessment/interfaces.js';
|
|
13
14
|
import { type RiskDecision } from '../../contracts/verdicts.js';
|
|
14
15
|
import { type EvaluatedQualityCheck } from '../../domains/quality-assessment/quality-evidence.js';
|
|
15
16
|
import { type MeasuredFailure } from '../../domains/quality-assessment/evidence-sufficiency.js';
|
|
@@ -20,7 +21,8 @@ export interface TestExecuteResult {
|
|
|
20
21
|
passed: number;
|
|
21
22
|
failed: number;
|
|
22
23
|
duration: number;
|
|
23
|
-
coverage
|
|
24
|
+
/** Measured line coverage of the run, or null when none was collected (#1027 N5). */
|
|
25
|
+
coverage?: number | null;
|
|
24
26
|
workerStats?: Record<string, unknown>;
|
|
25
27
|
retryStats?: Record<string, unknown>;
|
|
26
28
|
results?: unknown[];
|
|
@@ -58,6 +60,22 @@ export interface QualityAssessResult {
|
|
|
58
60
|
evidenceStatus?: 'measured' | 'insufficient-evidence';
|
|
59
61
|
/** #996: requested metrics with no measured data (reported as -1 in `metrics`). */
|
|
60
62
|
unmeasured?: string[];
|
|
63
|
+
/** #1011: why each unmeasured metric has no value (e.g. a file could not be parsed). */
|
|
64
|
+
unmeasuredReasons?: Record<string, string>;
|
|
65
|
+
/** #1021: metrics measured over part of the scope (files that failed to read or parse are listed). */
|
|
66
|
+
partialMetrics?: PartialQualityMetric[];
|
|
67
|
+
/** #1021: files left out of the analysis (binary, generated, minified, .d.ts, reader policy); first 50. */
|
|
68
|
+
excludedFiles?: ExcludedQualityFile[];
|
|
69
|
+
/** #1021: total number of excluded files. */
|
|
70
|
+
excludedCount?: number;
|
|
71
|
+
/** #1021: the directory, file, or 'sourceFiles' that was analysed. */
|
|
72
|
+
scope?: string;
|
|
73
|
+
/**
|
|
74
|
+
* #1021 round 2b: the metrics `qualityScore` was computed from, present when
|
|
75
|
+
* the score covers only part of the request (insufficient evidence) or of the
|
|
76
|
+
* files (partial metrics). Such a score is not a verdict.
|
|
77
|
+
*/
|
|
78
|
+
scoreBasis?: string[];
|
|
61
79
|
/** #996: measured metrics that fail their own limit; any entry blocks. */
|
|
62
80
|
measuredFailures?: MeasuredFailure[];
|
|
63
81
|
/** #996: false for static analysis (runGate omitted/false) — no quality gate ran. */
|
|
@@ -201,6 +219,18 @@ export interface CodeIndexResult {
|
|
|
201
219
|
symbolsExtracted: number;
|
|
202
220
|
relationsFound: number;
|
|
203
221
|
duration: number;
|
|
222
|
+
/**
|
|
223
|
+
* #999 MCP-CLI parity: project metrics collected by the code-intelligence
|
|
224
|
+
* coordinator, rooted at the target (as `aqe code index` does). Absent when
|
|
225
|
+
* no project root resolves or the metric step is unavailable.
|
|
226
|
+
*/
|
|
227
|
+
projectMetrics?: {
|
|
228
|
+
root: string;
|
|
229
|
+
loc: number;
|
|
230
|
+
locByLanguage: Record<string, number>;
|
|
231
|
+
tests: number;
|
|
232
|
+
toolsUsed: string[];
|
|
233
|
+
};
|
|
204
234
|
savedFiles?: string[];
|
|
205
235
|
/** #933: true when result files were written; see savedFiles for their paths. */
|
|
206
236
|
resultsSaved?: boolean;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { generateV2LearningFeedback, analyzeComplexity, generateV2AIInsights, generateV2Tests, detectAntiPatterns, generateTestId, } from './handler-factory.js';
|
|
10
10
|
import { describeSavedResults } from './save-results-option.js';
|
|
11
11
|
import { MetricsCollector } from '../metrics/index.js';
|
|
12
|
+
import { CallerInputError } from '../../shared/error-utils.js';
|
|
12
13
|
import { DEFAULT_FRAMEWORKS, FRAMEWORK_TO_LANGUAGE, } from '../../shared/types/test-frameworks.js';
|
|
13
14
|
import { buildRiskDecisionFromQualityGate, validateRiskDecision, } from '../../contracts/verdicts.js';
|
|
14
15
|
import { INSUFFICIENT_EVIDENCE, } from '../../domains/quality-assessment/quality-evidence.js';
|
|
@@ -202,7 +203,8 @@ export const testExecuteConfig = {
|
|
|
202
203
|
const total = data.total || 0;
|
|
203
204
|
const passed = data.passed || 0;
|
|
204
205
|
const failed = data.failed || 0;
|
|
205
|
-
|
|
206
|
+
// #1027 N5: no measured coverage → null, never a hardcoded 0.
|
|
207
|
+
const coverage = typeof data.coverage === 'number' && Number.isFinite(data.coverage) ? data.coverage : null;
|
|
206
208
|
const parallelism = params?.parallelism || 4;
|
|
207
209
|
const realRetryStats = MetricsCollector.getRetryStats();
|
|
208
210
|
const workersUsed = MetricsCollector.getWorkersUsed();
|
|
@@ -307,7 +309,8 @@ export const coverageAnalyzeConfig = {
|
|
|
307
309
|
const rawLine = summary?.line ?? data.lineCoverage;
|
|
308
310
|
const lineCoverage = rawLine ?? null;
|
|
309
311
|
const rawStatement = summary?.statement ?? data.statementCoverage;
|
|
310
|
-
|
|
312
|
+
// #1027 N7: an explicit null (no statement data, e.g. lcov) stays null.
|
|
313
|
+
const statementCoverage = rawStatement === undefined ? lineCoverage : rawStatement;
|
|
311
314
|
const learning = generateV2LearningFeedback('coverage-analyzer');
|
|
312
315
|
// Map gap analysis from real data — never fabricate file paths
|
|
313
316
|
const detailedGaps = gaps.map((gap, i) => {
|
|
@@ -405,6 +408,7 @@ export const coverageAnalyzeConfig = {
|
|
|
405
408
|
coverageMethod: data.coverageMethod ?? 'unknown',
|
|
406
409
|
branchDataCollected,
|
|
407
410
|
functionDataCollected,
|
|
411
|
+
...(data.runStatus === 'passed' || data.runStatus === 'failed' ? { runStatus: data.runStatus } : {}),
|
|
408
412
|
// #995: the target has no measurement at all — distinct from a measured 0%.
|
|
409
413
|
...(data.unmeasured === true ? { unmeasured: true } : {}),
|
|
410
414
|
...(data.warning ? { warning: data.warning } : {}),
|
|
@@ -428,8 +432,20 @@ export const qualityAssessConfig = {
|
|
|
428
432
|
const metrics = params.metrics === undefined
|
|
429
433
|
? ['coverage', 'complexity', 'maintainability']
|
|
430
434
|
: validateRequestedMetrics(params.metrics);
|
|
435
|
+
// #1021: scope the analysis instead of silently analysing <cwd>/src.
|
|
436
|
+
// Containment in the project root is enforced by the handler.
|
|
437
|
+
// CallerInputError: a caller mistake, never a component failure (round 2b).
|
|
438
|
+
if (params.target !== undefined && (typeof params.target !== 'string' || params.target.trim() === '')) {
|
|
439
|
+
throw new CallerInputError('target must be a non-empty string path.');
|
|
440
|
+
}
|
|
441
|
+
if (params.sourceFiles !== undefined && (!Array.isArray(params.sourceFiles) || params.sourceFiles.length === 0
|
|
442
|
+
|| params.sourceFiles.some((f) => typeof f !== 'string' || f.trim() === ''))) {
|
|
443
|
+
throw new CallerInputError('sourceFiles must be a non-empty array of file paths.');
|
|
444
|
+
}
|
|
431
445
|
return {
|
|
432
446
|
runGate: params.runGate ?? false,
|
|
447
|
+
...(params.target !== undefined ? { target: params.target } : {}),
|
|
448
|
+
...(params.sourceFiles !== undefined ? { sourceFiles: params.sourceFiles } : {}),
|
|
433
449
|
threshold: params.threshold || 80,
|
|
434
450
|
// #996: only a caller-supplied threshold overrides the configured/default
|
|
435
451
|
// per-metric limits; the 80 fallback above must not.
|
|
@@ -453,6 +469,15 @@ export const qualityAssessConfig = {
|
|
|
453
469
|
? data.measuredFailures
|
|
454
470
|
: undefined;
|
|
455
471
|
const failedMetrics = (measuredFailures ?? []).map((f) => f.metric);
|
|
472
|
+
// #1011: reasons travel only as a string-to-string map.
|
|
473
|
+
const unmeasuredReasons = data.unmeasuredReasons && typeof data.unmeasuredReasons === 'object'
|
|
474
|
+
&& Object.values(data.unmeasuredReasons).every((r) => typeof r === 'string')
|
|
475
|
+
? data.unmeasuredReasons
|
|
476
|
+
: undefined;
|
|
477
|
+
// -1 = no measured score; never quote it as a score.
|
|
478
|
+
const measuredScore = typeof data.qualityScore === 'number' && data.qualityScore >= 0
|
|
479
|
+
? data.qualityScore
|
|
480
|
+
: undefined;
|
|
456
481
|
const passed = !insufficient && failedMetrics.length === 0 && data.passed === true;
|
|
457
482
|
// ADR-103: attach a schema-validated RiskDecision envelope at the MCP
|
|
458
483
|
// boundary (additive — existing fields unchanged). Omit rather than
|
|
@@ -461,7 +486,7 @@ export const qualityAssessConfig = {
|
|
|
461
486
|
passed: insufficient || failedMetrics.length > 0
|
|
462
487
|
? false
|
|
463
488
|
: typeof data.passed === 'boolean' ? data.passed : undefined,
|
|
464
|
-
qualityScore:
|
|
489
|
+
qualityScore: measuredScore,
|
|
465
490
|
recommendations: data.recommendations || [],
|
|
466
491
|
unmeasured: insufficient ? (unmeasured?.length ? unmeasured : ['unknown']) : [],
|
|
467
492
|
failedMetrics,
|
|
@@ -480,6 +505,14 @@ export const qualityAssessConfig = {
|
|
|
480
505
|
? { evidenceStatus: insufficient ? INSUFFICIENT_EVIDENCE : 'measured' }
|
|
481
506
|
: {}),
|
|
482
507
|
...(unmeasured ? { unmeasured } : {}),
|
|
508
|
+
...(unmeasuredReasons ? { unmeasuredReasons } : {}),
|
|
509
|
+
// #1021: partial evidence, exclusions and the analysed scope travel with the verdict.
|
|
510
|
+
...(Array.isArray(data.partialMetrics) ? { partialMetrics: data.partialMetrics } : {}),
|
|
511
|
+
...(Array.isArray(data.excludedFiles) ? { excludedFiles: data.excludedFiles } : {}),
|
|
512
|
+
...(typeof data.excludedCount === 'number' ? { excludedCount: data.excludedCount } : {}),
|
|
513
|
+
...(typeof data.scope === 'string' ? { scope: data.scope } : {}),
|
|
514
|
+
...(Array.isArray(data.scoreBasis) && data.scoreBasis.every((m) => typeof m === 'string')
|
|
515
|
+
? { scoreBasis: data.scoreBasis } : {}),
|
|
483
516
|
...(measuredFailures ? { measuredFailures } : {}),
|
|
484
517
|
...(gateEvaluated !== undefined ? { gateEvaluated } : {}),
|
|
485
518
|
...(confidence !== undefined ? { confidence } : {}),
|
|
@@ -721,6 +754,7 @@ export const codeIndexConfig = {
|
|
|
721
754
|
filesIndexed: data.filesIndexed || 0,
|
|
722
755
|
symbolsExtracted: data.symbolsExtracted || 0,
|
|
723
756
|
relationsFound: data.relationsFound || 0,
|
|
757
|
+
...(data.projectMetrics ? { projectMetrics: data.projectMetrics } : {}),
|
|
724
758
|
duration,
|
|
725
759
|
savedFiles,
|
|
726
760
|
}),
|
|
@@ -14,9 +14,10 @@ import { randomUUID } from 'crypto';
|
|
|
14
14
|
import { getFleetState, isFleetInitialized } from './core-handlers.js';
|
|
15
15
|
import { createTaskExecutor } from '../../coordination/task-executor.js';
|
|
16
16
|
import { getTaskRouter } from '../services/task-router.js';
|
|
17
|
-
import { toErrorMessage } from '../../shared/error-utils.js';
|
|
17
|
+
import { isCallerInputError, toErrorMessage } from '../../shared/error-utils.js';
|
|
18
18
|
import { describeSavedResults, readSaveResultsOption } from './save-results-option.js';
|
|
19
19
|
import { createInitializedFeedbackLoop, getQualityFeedbackLoop } from '../../feedback/feedback-loop.js';
|
|
20
|
+
import { isLearnableResult } from '../../learning/learnable-result.js';
|
|
20
21
|
// ============================================================================
|
|
21
22
|
// Shared Utilities (exported for response mappers)
|
|
22
23
|
// ============================================================================
|
|
@@ -171,7 +172,10 @@ async function recordDomainFeedback(domain, data, durationMs, params) {
|
|
|
171
172
|
await loop.recordTestOutcome(outcome);
|
|
172
173
|
}
|
|
173
174
|
}
|
|
174
|
-
|
|
175
|
+
// #1014: only MEASURED coverage becomes a coverage_sessions row. An
|
|
176
|
+
// estimate or an UNMEASURED target wrote after_lines = the estimate / 0.0,
|
|
177
|
+
// which gate-check, threshold-check and the coverage-learner then read.
|
|
178
|
+
if (domain === 'coverage-analysis' && data && isLearnableResult(domain, data)) {
|
|
175
179
|
// Extract coverage session data and record for learning
|
|
176
180
|
const session = {
|
|
177
181
|
id: randomUUID(),
|
|
@@ -203,6 +207,14 @@ async function recordDomainFeedback(domain, data, durationMs, params) {
|
|
|
203
207
|
durationMs,
|
|
204
208
|
startedAt: new Date(Date.now() - durationMs),
|
|
205
209
|
completedAt: new Date(),
|
|
210
|
+
// #1014: provenance stamp — readers ignore legacy rows of this agent
|
|
211
|
+
// without it (see feedback/coverage-session-provenance.ts).
|
|
212
|
+
context: {
|
|
213
|
+
measured: true,
|
|
214
|
+
coverageMethod: data.coverageMethod ?? 'instrumented-report',
|
|
215
|
+
branchDataCollected: data.branchCoverage !== null && data.branchCoverage !== undefined,
|
|
216
|
+
functionDataCollected: data.functionCoverage !== null && data.functionCoverage !== undefined,
|
|
217
|
+
},
|
|
206
218
|
};
|
|
207
219
|
await loop.recordCoverageSession(session);
|
|
208
220
|
}
|
|
@@ -646,16 +658,22 @@ export function createDomainHandler(config) {
|
|
|
646
658
|
const mappedResult = mapToResult(submitResult.value, data, result.duration, result.savedFiles, params);
|
|
647
659
|
// #933: every result-saving tool reports what it wrote, the same way.
|
|
648
660
|
Object.assign(mappedResult, describeSavedResults(saveResults, result.savedFiles));
|
|
649
|
-
//
|
|
650
|
-
|
|
651
|
-
//
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
//
|
|
661
|
+
// #1014: a run without evidence (a coverage estimate, an UNMEASURED
|
|
662
|
+
// target, an insufficient-evidence gate) still succeeds as a tool call,
|
|
663
|
+
// but is not recorded as successful learning anywhere below.
|
|
664
|
+
const learnable = isLearnableResult(domain, data) && isLearnableResult('', mappedResult);
|
|
665
|
+
if (learnable) {
|
|
666
|
+
// Step 5b: Record pattern usage on success (Phase 5.3 — fire-and-forget)
|
|
667
|
+
recordPatternUsageAsync(routingResult?.patternHints, true, domain, result.duration);
|
|
668
|
+
// Step 5c: Capture real execution learning (fire-and-forget)
|
|
669
|
+
captureExecutionLearning(`qe-${domain}`, taskType, params, data, result.duration).catch(() => { }); // Swallow errors — learning is non-critical
|
|
670
|
+
// Step 5d: Record feedback for test_outcomes / coverage_sessions
|
|
671
|
+
try {
|
|
672
|
+
await recordDomainFeedback(domain, data, result.duration, params);
|
|
673
|
+
}
|
|
674
|
+
catch {
|
|
675
|
+
// Non-critical — don't fail handler if feedback recording fails
|
|
676
|
+
}
|
|
659
677
|
}
|
|
660
678
|
return {
|
|
661
679
|
success: true,
|
|
@@ -665,11 +683,19 @@ export function createDomainHandler(config) {
|
|
|
665
683
|
catch (error) {
|
|
666
684
|
// Step 6: Error handling
|
|
667
685
|
const errorMessage = toErrorMessage(error);
|
|
668
|
-
//
|
|
669
|
-
|
|
686
|
+
// A caller-input error thrown before the task runs (e.g. by
|
|
687
|
+
// mapToPayload's shape checks) is the caller's mistake, not a domain
|
|
688
|
+
// failure: it is marked for the experience middleware and not recorded
|
|
689
|
+
// as a pattern-usage failure.
|
|
690
|
+
const callerError = isCallerInputError(error);
|
|
691
|
+
if (!callerError) {
|
|
692
|
+
// Record pattern usage on failure (Phase 5.3 — fire-and-forget)
|
|
693
|
+
recordPatternUsageAsync(routingResult?.patternHints, false, domain, 0);
|
|
694
|
+
}
|
|
670
695
|
return {
|
|
671
696
|
success: false,
|
|
672
697
|
error: `Failed to ${taskType.replace(/-/g, ' ')}: ${errorMessage}`,
|
|
698
|
+
...(callerError ? { data: { callerError: true } } : {}),
|
|
673
699
|
};
|
|
674
700
|
}
|
|
675
701
|
};
|
|
@@ -477,9 +477,16 @@ export class MCPProtocolServer {
|
|
|
477
477
|
const { getSessionCache } = await import('../optimization/session-cache.js');
|
|
478
478
|
const cache = getSessionCache();
|
|
479
479
|
const { domain, action } = parseToolDomainAction(name);
|
|
480
|
+
// #998: key on the project root, working directory and a fingerprint
|
|
481
|
+
// of every path argument, not on the raw arguments alone. A call that
|
|
482
|
+
// reads a directory tree is neither served from nor stored in cache.
|
|
483
|
+
const { buildToolCacheScope } = await import('./tool-cache-scope.js');
|
|
484
|
+
const { scope, reusable } = buildToolCacheScope(name, processedCtx.params);
|
|
480
485
|
cacheGeneration = cache.getGeneration();
|
|
481
|
-
cacheFingerprint =
|
|
482
|
-
|
|
486
|
+
cacheFingerprint = reusable
|
|
487
|
+
? cache.computeFingerprint(domain, action, processedCtx.params || {}, scope)
|
|
488
|
+
: null;
|
|
489
|
+
const hit = cacheFingerprint ? cache.get(cacheFingerprint) : null;
|
|
483
490
|
if (hit) {
|
|
484
491
|
// Cache hit — return the stored result without running the handler.
|
|
485
492
|
const cachedText = JSON.stringify(hit.result, null, 2);
|
|
@@ -887,6 +894,10 @@ export class MCPProtocolServer {
|
|
|
887
894
|
description: `Analyze code coverage with O(log n) sublinear algorithm and ML-powered gap detection. ${SAVE_RESULTS_HINT} Example: coverage_analyze_sublinear({ target: "src/", detectGaps: true })`,
|
|
888
895
|
category: 'domain',
|
|
889
896
|
isConcurrencySafe: true,
|
|
897
|
+
// #998: never replay from the session cache. The result measures
|
|
898
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
899
|
+
// cached answer goes stale as soon as those inputs change.
|
|
900
|
+
isCacheable: false,
|
|
890
901
|
parameters: [
|
|
891
902
|
{ name: 'target', type: 'string', description: 'Target path to analyze', required: true },
|
|
892
903
|
{ name: 'detectGaps', type: 'boolean', description: 'Detect coverage gaps', default: true },
|
|
@@ -902,9 +913,15 @@ export class MCPProtocolServer {
|
|
|
902
913
|
description: `Assess code quality metrics and optionally run a pass/fail quality gate. Unmeasured metrics never pass. ${SAVE_RESULTS_HINT} Example: quality_assess({ runGate: true })`,
|
|
903
914
|
category: 'domain',
|
|
904
915
|
isConcurrencySafe: true,
|
|
916
|
+
// #998: never replay from the session cache. The result measures
|
|
917
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
918
|
+
// cached answer goes stale as soon as those inputs change.
|
|
919
|
+
isCacheable: false,
|
|
905
920
|
parameters: [
|
|
906
921
|
{ name: 'runGate', type: 'boolean', description: 'Evaluate all seven canonical measured quality checks; requires complete, valid evidence from the last 24 hours. Returns individual checks, not a static aggregate score. Missing, stale or malformed evidence fails with status "insufficient-evidence" and lists the metrics in unmeasured. When false, only static analysis runs (gateEvaluated: false).', default: false },
|
|
907
922
|
{ name: 'metrics', type: 'array', description: 'Static-analysis metrics to assess (default coverage, complexity, maintainability). Known: coverage, complexity, maintainability, duplication, testability, security. Any requested metric without measured data gives status "insufficient-evidence", passed: false, and lists it in unmeasured; a measured metric failing its threshold blocks.', items: { type: 'string' } },
|
|
923
|
+
{ name: 'target', type: 'string', description: 'File or directory to analyse, resolved against the project root and required to stay inside it (default: src/, else the root). Binary, generated, minified and .d.ts files are excluded and listed in excludedFiles; files that fail to parse are listed in partialMetrics.' },
|
|
924
|
+
{ name: 'sourceFiles', type: 'array', description: 'Explicit files to analyse (each inside the project root); takes precedence over target. If a listed file cannot be read or parsed, the affected metrics are unmeasured.', items: { type: 'string' } },
|
|
908
925
|
saveResultsParameter('quality_assess'),
|
|
909
926
|
],
|
|
910
927
|
},
|
|
@@ -974,6 +991,10 @@ export class MCPProtocolServer {
|
|
|
974
991
|
description: `Predict potential defects using AI analysis of code complexity and change history. ${SAVE_RESULTS_HINT} Example: defect_predict({ target: "src/auth/" })`,
|
|
975
992
|
category: 'domain',
|
|
976
993
|
isConcurrencySafe: true,
|
|
994
|
+
// #998: never replay from the session cache. The result measures
|
|
995
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
996
|
+
// cached answer goes stale as soon as those inputs change.
|
|
997
|
+
isCacheable: false,
|
|
977
998
|
parameters: [
|
|
978
999
|
{ name: 'target', type: 'string', description: 'Target path', required: true },
|
|
979
1000
|
saveResultsParameter('defect_predict'),
|
|
@@ -1002,6 +1023,10 @@ export class MCPProtocolServer {
|
|
|
1002
1023
|
description: `Index source code into the knowledge graph for dependency and impact analysis. ${SAVE_RESULTS_HINT} Example: code_index({ target: "src/" })`,
|
|
1003
1024
|
category: 'domain',
|
|
1004
1025
|
isConcurrencySafe: true,
|
|
1026
|
+
// #998: never replay from the session cache. The result measures
|
|
1027
|
+
// mutable project state (source tree, test runs, reports on disk), so a
|
|
1028
|
+
// cached answer goes stale as soon as those inputs change.
|
|
1029
|
+
isCacheable: false,
|
|
1005
1030
|
parameters: [
|
|
1006
1031
|
{ name: 'target', type: 'string', description: 'Target path', required: true },
|
|
1007
1032
|
saveResultsParameter('code_index'),
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP result-cache scope (#998)
|
|
3
|
+
*
|
|
4
|
+
* The protocol server reuses results of read-only tools through the session
|
|
5
|
+
* cache. A result is only reusable for the same project and the same inputs,
|
|
6
|
+
* so the cache key carries:
|
|
7
|
+
* - the resolved project root and working directory, and
|
|
8
|
+
* - for each path argument, its absolute path plus an mtime/size fingerprint,
|
|
9
|
+
* so an edited requirements file misses the cache.
|
|
10
|
+
*
|
|
11
|
+
* A directory argument cannot be fingerprinted cheaply (editing a file inside
|
|
12
|
+
* it does not change the directory's mtime), so a call that reads a directory
|
|
13
|
+
* tree is reported as not reusable and runs every time.
|
|
14
|
+
*
|
|
15
|
+
* @module mcp/tool-cache-scope
|
|
16
|
+
*/
|
|
17
|
+
import type { CacheScope } from '../optimization/session-cache.js';
|
|
18
|
+
/** Argument names that tools treat as filesystem paths. */
|
|
19
|
+
export declare const PATH_ARGUMENTS: readonly ["target", "requirementsPath", "contractPath", "testPath", "path", "filePath", "file"];
|
|
20
|
+
export interface ToolCacheScope {
|
|
21
|
+
scope: CacheScope;
|
|
22
|
+
/** False when the call reads a directory tree, so no cached result may be reused. */
|
|
23
|
+
reusable: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build the cache scope for one tool call: project root, working directory
|
|
27
|
+
* and a fingerprint of every path argument (relative ones resolved to
|
|
28
|
+
* absolute paths against the working directory).
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildToolCacheScope(toolName: string, params: Record<string, unknown> | undefined): ToolCacheScope;
|
|
31
|
+
//# sourceMappingURL=tool-cache-scope.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - MCP result-cache scope (#998)
|
|
3
|
+
*
|
|
4
|
+
* The protocol server reuses results of read-only tools through the session
|
|
5
|
+
* cache. A result is only reusable for the same project and the same inputs,
|
|
6
|
+
* so the cache key carries:
|
|
7
|
+
* - the resolved project root and working directory, and
|
|
8
|
+
* - for each path argument, its absolute path plus an mtime/size fingerprint,
|
|
9
|
+
* so an edited requirements file misses the cache.
|
|
10
|
+
*
|
|
11
|
+
* A directory argument cannot be fingerprinted cheaply (editing a file inside
|
|
12
|
+
* it does not change the directory's mtime), so a call that reads a directory
|
|
13
|
+
* tree is reported as not reusable and runs every time.
|
|
14
|
+
*
|
|
15
|
+
* @module mcp/tool-cache-scope
|
|
16
|
+
*/
|
|
17
|
+
import * as fs from 'fs';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
import { findProjectRoot } from '../kernel/project-root.js';
|
|
20
|
+
/** Argument names that tools treat as filesystem paths. */
|
|
21
|
+
export const PATH_ARGUMENTS = [
|
|
22
|
+
'target', 'requirementsPath', 'contractPath', 'testPath', 'path', 'filePath', 'file',
|
|
23
|
+
];
|
|
24
|
+
function fingerprintPath(value, cwd) {
|
|
25
|
+
const absolute = path.resolve(cwd, value);
|
|
26
|
+
try {
|
|
27
|
+
const stat = fs.statSync(absolute);
|
|
28
|
+
return {
|
|
29
|
+
path: absolute,
|
|
30
|
+
exists: true,
|
|
31
|
+
kind: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',
|
|
32
|
+
size: stat.size,
|
|
33
|
+
mtimeMs: stat.mtimeMs,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return { path: absolute, exists: false };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Tools that scan the working directory tree when their path argument is
|
|
42
|
+
* omitted. Such a call reads mutable files that no fingerprint here covers.
|
|
43
|
+
*/
|
|
44
|
+
const IMPLICIT_DIRECTORY_ARGUMENT = {
|
|
45
|
+
requirements_validate: 'requirementsPath',
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Build the cache scope for one tool call: project root, working directory
|
|
49
|
+
* and a fingerprint of every path argument (relative ones resolved to
|
|
50
|
+
* absolute paths against the working directory).
|
|
51
|
+
*/
|
|
52
|
+
export function buildToolCacheScope(toolName, params) {
|
|
53
|
+
const cwd = process.cwd();
|
|
54
|
+
const projectRoot = path.resolve(findProjectRoot());
|
|
55
|
+
const inputs = {};
|
|
56
|
+
let reusable = true;
|
|
57
|
+
for (const name of PATH_ARGUMENTS) {
|
|
58
|
+
const value = params?.[name];
|
|
59
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
60
|
+
const fingerprint = fingerprintPath(value, cwd);
|
|
61
|
+
inputs[name] = fingerprint;
|
|
62
|
+
if (fingerprint.kind === 'directory')
|
|
63
|
+
reusable = false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const implicit = IMPLICIT_DIRECTORY_ARGUMENT[toolName];
|
|
67
|
+
if (implicit && inputs[implicit] === undefined)
|
|
68
|
+
reusable = false;
|
|
69
|
+
return { scope: { projectRoot, cwd, inputs }, reusable };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=tool-cache-scope.js.map
|
|
@@ -14,6 +14,7 @@ import { SemanticAnalyzerService } from '../../../domains/code-intelligence/serv
|
|
|
14
14
|
import { ImpactAnalyzerService } from '../../../domains/code-intelligence/services/impact-analyzer.js';
|
|
15
15
|
import * as fs from 'fs';
|
|
16
16
|
import * as path from 'path';
|
|
17
|
+
import { isAqeManagedDir } from '../../../shared/aqe-managed-dirs.js';
|
|
17
18
|
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
18
19
|
// ============================================================================
|
|
19
20
|
// Tool Implementation
|
|
@@ -405,7 +406,7 @@ export class CodeAnalyzeTool extends MCPToolBase {
|
|
|
405
406
|
/**
|
|
406
407
|
* Find source files in a directory
|
|
407
408
|
*/
|
|
408
|
-
async findSourceFiles(dir) {
|
|
409
|
+
async findSourceFiles(dir, isRoot = true) {
|
|
409
410
|
const files = [];
|
|
410
411
|
const extensions = ['.ts', '.tsx', '.js', '.jsx'];
|
|
411
412
|
const ignoreDirs = ['node_modules', '.git', 'dist', 'build', 'coverage'];
|
|
@@ -414,8 +415,9 @@ export class CodeAnalyzeTool extends MCPToolBase {
|
|
|
414
415
|
for (const entry of entries) {
|
|
415
416
|
const fullPath = path.join(dir, entry.name);
|
|
416
417
|
if (entry.isDirectory()) {
|
|
417
|
-
|
|
418
|
-
|
|
418
|
+
// #999: AQE state/assets (.agentic-qe anywhere; .claude at the root or next to .agentic-qe)
|
|
419
|
+
if (!ignoreDirs.includes(entry.name) && !isAqeManagedDir(dir, entry.name, isRoot)) {
|
|
420
|
+
const subFiles = await this.findSourceFiles(fullPath, false);
|
|
419
421
|
files.push(...subFiles);
|
|
420
422
|
}
|
|
421
423
|
}
|
package/dist/mcp/types.d.ts
CHANGED
|
@@ -221,6 +221,10 @@ export interface QualityAssessParams {
|
|
|
221
221
|
runGate?: boolean;
|
|
222
222
|
threshold?: number;
|
|
223
223
|
metrics?: string[];
|
|
224
|
+
/** #1021: file or directory to analyse, relative to (and contained in) the project root. Default: src/ (or the root). */
|
|
225
|
+
target?: string;
|
|
226
|
+
/** #1021: explicit files to analyse, each contained in the project root. Takes precedence over target. */
|
|
227
|
+
sourceFiles?: string[];
|
|
224
228
|
/** #933: write result files under .agentic-qe/results/ (default true). false skips them. */
|
|
225
229
|
saveResults?: boolean;
|
|
226
230
|
}
|
|
@@ -22,6 +22,19 @@ export interface CachedOperation {
|
|
|
22
22
|
hitCount: number;
|
|
23
23
|
lastHitAt: number;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Where a cached operation ran (#998). Arguments alone do not identify a
|
|
27
|
+
* result: the same relative `target: "."` means a different tree in another
|
|
28
|
+
* project, and a file argument means different content after an edit.
|
|
29
|
+
*/
|
|
30
|
+
export interface CacheScope {
|
|
31
|
+
/** Resolved project root. Defaults to `findProjectRoot()`. */
|
|
32
|
+
projectRoot?: string;
|
|
33
|
+
/** Working directory relative arguments resolve against. Defaults to `process.cwd()`. */
|
|
34
|
+
cwd?: string;
|
|
35
|
+
/** Fingerprints of the inputs the operation reads (absolute path, mtime, size). */
|
|
36
|
+
inputs?: Record<string, unknown>;
|
|
37
|
+
}
|
|
25
38
|
export interface SessionCacheConfig {
|
|
26
39
|
/** Enable the cache (default: true) */
|
|
27
40
|
enabled: boolean;
|
|
@@ -62,8 +75,13 @@ export declare class SessionOperationCache {
|
|
|
62
75
|
*
|
|
63
76
|
* Including the version means an upgrade misses cleanly rather than serving
|
|
64
77
|
* stale answers; entries from the old build simply age out.
|
|
78
|
+
*
|
|
79
|
+
* The scope (project root, working directory and input fingerprints) is part
|
|
80
|
+
* of the key too (#998): without it a relative target returned another
|
|
81
|
+
* project's cached result. When no scope is passed, the current project root
|
|
82
|
+
* and working directory are used, so every caller is project-scoped.
|
|
65
83
|
*/
|
|
66
|
-
computeFingerprint(domain: string, action: string, input: Record<string, unknown
|
|
84
|
+
computeFingerprint(domain: string, action: string, input: Record<string, unknown>, scope?: CacheScope): string;
|
|
67
85
|
/**
|
|
68
86
|
* Look up a cached result by fingerprint.
|
|
69
87
|
* Returns null on miss or expired entry.
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* - TTL-based expiry, LRU-ish eviction at capacity
|
|
14
14
|
*/
|
|
15
15
|
import { createHash } from 'crypto';
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
import { findProjectRoot } from '../kernel/project-root.js';
|
|
16
18
|
/**
|
|
17
19
|
* Build identity mixed into every cache fingerprint so persisted entries never
|
|
18
20
|
* outlive the code that produced them. `__CLI_VERSION__` is substituted at bundle
|
|
@@ -54,6 +56,31 @@ function canonicalStringify(value) {
|
|
|
54
56
|
}
|
|
55
57
|
return encode(normalized);
|
|
56
58
|
}
|
|
59
|
+
function resolveScope(scope) {
|
|
60
|
+
let projectRoot = scope?.projectRoot;
|
|
61
|
+
if (!projectRoot) {
|
|
62
|
+
try {
|
|
63
|
+
projectRoot = findProjectRoot();
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
projectRoot = '';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
let cwd = scope?.cwd;
|
|
70
|
+
if (!cwd) {
|
|
71
|
+
try {
|
|
72
|
+
cwd = process.cwd();
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
cwd = '';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
projectRoot: projectRoot ? path.resolve(projectRoot) : '',
|
|
80
|
+
cwd: cwd ? path.resolve(cwd) : '',
|
|
81
|
+
inputs: scope?.inputs ?? {},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
57
84
|
// ============================================================================
|
|
58
85
|
// Implementation
|
|
59
86
|
// ============================================================================
|
|
@@ -81,9 +108,16 @@ export class SessionOperationCache {
|
|
|
81
108
|
*
|
|
82
109
|
* Including the version means an upgrade misses cleanly rather than serving
|
|
83
110
|
* stale answers; entries from the old build simply age out.
|
|
111
|
+
*
|
|
112
|
+
* The scope (project root, working directory and input fingerprints) is part
|
|
113
|
+
* of the key too (#998): without it a relative target returned another
|
|
114
|
+
* project's cached result. When no scope is passed, the current project root
|
|
115
|
+
* and working directory are used, so every caller is project-scoped.
|
|
84
116
|
*/
|
|
85
|
-
computeFingerprint(domain, action, input) {
|
|
86
|
-
const canonical = canonicalStringify({
|
|
117
|
+
computeFingerprint(domain, action, input, scope) {
|
|
118
|
+
const canonical = canonicalStringify({
|
|
119
|
+
action, build: getBuildIdentity(), domain, input, scope: resolveScope(scope),
|
|
120
|
+
});
|
|
87
121
|
return createHash('sha256').update(canonical).digest('hex').slice(0, 16);
|
|
88
122
|
}
|
|
89
123
|
/**
|
package/dist/plugins/cache.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import * as fs from 'fs';
|
|
9
9
|
import * as path from 'path';
|
|
10
10
|
import { validVersion, newestVersionFirst } from './version-policy.js';
|
|
11
|
+
import { getProjectStorePath } from '../kernel/project-root.js';
|
|
11
12
|
// ============================================================================
|
|
12
13
|
// PluginCache
|
|
13
14
|
// ============================================================================
|
|
@@ -16,7 +17,7 @@ export class PluginCache {
|
|
|
16
17
|
keepVersions;
|
|
17
18
|
constructor(options = {}) {
|
|
18
19
|
this.cacheDir = options.cacheDir
|
|
19
|
-
??
|
|
20
|
+
?? getProjectStorePath('plugins');
|
|
20
21
|
this.keepVersions = options.keepVersions ?? 2;
|
|
21
22
|
}
|
|
22
23
|
/** Check if a specific version is cached. */
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import { execFileSync } from 'child_process';
|
|
9
9
|
import { parseManifest } from '../manifest.js';
|
|
10
|
+
import { getProjectStorePath } from '../../kernel/project-root.js';
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Input Validation
|
|
12
13
|
// ============================================================================
|
|
@@ -28,7 +29,7 @@ export class GitHubPluginSource {
|
|
|
28
29
|
type = 'github';
|
|
29
30
|
cacheDir;
|
|
30
31
|
constructor(cacheDir) {
|
|
31
|
-
this.cacheDir = cacheDir ??
|
|
32
|
+
this.cacheDir = cacheDir ?? getProjectStorePath('plugins-cache');
|
|
32
33
|
}
|
|
33
34
|
async resolve(location) {
|
|
34
35
|
const pluginPath = await this.getPluginPath(location);
|
|
@@ -9,6 +9,7 @@ import * as path from 'path';
|
|
|
9
9
|
import * as fs from 'fs';
|
|
10
10
|
import { execFileSync } from 'child_process';
|
|
11
11
|
import { parseManifest } from '../manifest.js';
|
|
12
|
+
import { getProjectStorePath } from '../../kernel/project-root.js';
|
|
12
13
|
// ============================================================================
|
|
13
14
|
// Input Validation
|
|
14
15
|
// ============================================================================
|
|
@@ -30,7 +31,7 @@ export class NpmPluginSource {
|
|
|
30
31
|
type = 'npm';
|
|
31
32
|
cacheDir;
|
|
32
33
|
constructor(cacheDir) {
|
|
33
|
-
this.cacheDir = cacheDir ??
|
|
34
|
+
this.cacheDir = cacheDir ?? getProjectStorePath('plugins-cache', 'npm');
|
|
34
35
|
}
|
|
35
36
|
async resolve(location) {
|
|
36
37
|
const pluginPath = await this.getPluginPath(location);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AQE-managed directories that source walkers must not treat as project code
|
|
3
|
+
* (#999, review N4 / round 2b).
|
|
4
|
+
*
|
|
5
|
+
* - `.agentic-qe/` is AQE runtime state (workers, results, DBs) at ANY depth;
|
|
6
|
+
* it is never source.
|
|
7
|
+
* - `.claude/` holds the assets `aqe init` writes (helpers, skills, agents).
|
|
8
|
+
* It is AQE-managed at the walk root, and nested only when it sits next to
|
|
9
|
+
* a `.agentic-qe/` (a nested `aqe init` in a monorepo package). A nested
|
|
10
|
+
* `.claude/` with no AQE install beside it (e.g. a Claude Code plugin's own
|
|
11
|
+
* `.claude/hooks/*.ts`) is the package's source and is walked.
|
|
12
|
+
*/
|
|
13
|
+
export declare const AQE_STATE_DIR = ".agentic-qe";
|
|
14
|
+
export declare const AQE_CLAUDE_DIR = ".claude";
|
|
15
|
+
/** True when directory `name` inside `parentDir` is AQE-managed (never project source). */
|
|
16
|
+
export declare function isAqeManagedDir(parentDir: string, name: string, isWalkRoot: boolean): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Root-relative ('/'-separated) paths of the AQE-managed `.claude` directories
|
|
19
|
+
* under `projectRoot`: the root one (if present) and every `.claude` that has a
|
|
20
|
+
* sibling `.agentic-qe`. Used to anchor cloc/tokei excludes. Bounded walk that
|
|
21
|
+
* skips `skipDirs` and dot-directories.
|
|
22
|
+
*/
|
|
23
|
+
export declare function findAqeClaudeDirs(projectRoot: string, skipDirs?: readonly string[], maxDepth?: number): string[];
|
|
24
|
+
//# sourceMappingURL=aqe-managed-dirs.d.ts.map
|