agentic-qe 3.15.8 → 3.15.10
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/skills-manifest.json +1 -1
- package/CHANGELOG.md +434 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2ui/catalog/component-schemas.js +2 -1
- package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
- package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
- package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
- package/dist/adapters/ag-ui/json-patch.js +10 -6
- package/dist/agents/claim-verifier/claim-verifier-service.js +13 -8
- package/dist/audit/witness-chain.d.ts +1 -1
- package/dist/bridge/captured-experience-bridge.js +12 -13
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
- package/dist/cli/chunks/{agent-handler-2NQFHAWE.js → agent-handler-SVXSHEET.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-457ECHHK.js → agent-memory-branch-WKQH36XL.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
- package/dist/cli/chunks/{arena-JV3WSEHU.js → arena-EKOOFVST.js} +2 -2
- package/dist/cli/chunks/{arena-IYBQ3GPY.js → arena-OPS36NFZ.js} +4 -4
- package/dist/cli/chunks/{audit-5OS3T3K6.js → audit-AO5NDZRI.js} +3 -3
- package/dist/cli/chunks/base-GTB6POYE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IQKBFVAO.js → better-sqlite3-TFLVEMMY.js} +2 -2
- package/dist/cli/chunks/{brain-handler-KA3SGAFM.js → brain-handler-ADBBJPYW.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-QZDU2VOQ.js → branch-enumerator-HGHUYYL5.js} +2 -2
- package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
- package/dist/cli/chunks/{chunk-CRUQ6RXU.js → chunk-2SXBBUM6.js} +2 -2
- package/dist/cli/chunks/{chunk-4GUVVGJX.js → chunk-2T7RRL6G.js} +1 -1
- package/dist/cli/chunks/{chunk-OJWEZYLR.js → chunk-2XGVTYVX.js} +2 -2
- package/dist/cli/chunks/{chunk-LVHZK7GW.js → chunk-2ZI5FKSF.js} +2 -2
- package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
- package/dist/cli/chunks/{chunk-62T7U25U.js → chunk-37OWRCUN.js} +1 -1
- package/dist/cli/chunks/{chunk-UQLAN5TX.js → chunk-3P34JFQH.js} +5 -5
- package/dist/cli/chunks/{chunk-UDCYQLTD.js → chunk-3Y7SPD72.js} +2 -2
- package/dist/cli/chunks/{chunk-PPIM7B5G.js → chunk-4G63WT4F.js} +2 -2
- package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
- package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
- package/dist/cli/chunks/{chunk-4TZLZRZ4.js → chunk-5LPYV3TK.js} +1 -1
- package/dist/cli/chunks/{chunk-YUP3APSN.js → chunk-62OAY5KJ.js} +1 -1
- package/dist/cli/chunks/{chunk-VQRBBR27.js → chunk-6C3II5OM.js} +2 -2
- package/dist/cli/chunks/{chunk-RG42LDOB.js → chunk-6GP6W46M.js} +2 -2
- package/dist/cli/chunks/{chunk-KMZW2P3R.js → chunk-6KIL6CMD.js} +2 -2
- package/dist/cli/chunks/{chunk-UKKFZJME.js → chunk-6MVVSSID.js} +1 -1
- package/dist/cli/chunks/{chunk-VVK4ECVJ.js → chunk-6P7424AO.js} +2 -2
- package/dist/cli/chunks/{chunk-A2UGPKCS.js → chunk-6PX4OXQO.js} +2 -2
- package/dist/cli/chunks/{chunk-JLTGO5BB.js → chunk-6S3WJGUV.js} +2 -2
- package/dist/cli/chunks/{chunk-GSOK4M6V.js → chunk-6TB6YOCZ.js} +1 -1
- package/dist/cli/chunks/{chunk-VWRNG3UK.js → chunk-6X5DHU6Q.js} +1 -1
- package/dist/cli/chunks/{chunk-5YOO5QSE.js → chunk-6XCMKIZN.js} +1 -1
- package/dist/cli/chunks/{chunk-4C3RYBTT.js → chunk-7LFZ4CHM.js} +2 -2
- package/dist/cli/chunks/{chunk-O4RRVTXN.js → chunk-7OZVZIBE.js} +2 -2
- package/dist/cli/chunks/{chunk-2JCLACCS.js → chunk-7PJIR4ST.js} +2 -2
- package/dist/cli/chunks/{chunk-NWFBF3KT.js → chunk-7TB6FK4B.js} +1 -1
- package/dist/cli/chunks/{chunk-FJAO4UX2.js → chunk-7ZCDZHDB.js} +2 -2
- package/dist/cli/chunks/chunk-A55QKKT2.js +2 -0
- package/dist/cli/chunks/{chunk-ZOVAZTXE.js → chunk-ABFFWZPC.js} +273 -278
- package/dist/cli/chunks/{chunk-FWXNFPLS.js → chunk-ACWFKES2.js} +2 -2
- package/dist/cli/chunks/{chunk-IJSFZO7P.js → chunk-AH3ZD3NJ.js} +2 -2
- package/dist/cli/chunks/{chunk-7SLEUVPZ.js → chunk-AI4VYSFS.js} +2 -2
- package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
- package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
- package/dist/cli/chunks/{chunk-2GSAAUW3.js → chunk-B6LTH6YV.js} +2 -2
- package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
- package/dist/cli/chunks/{chunk-7XGM7Q2N.js → chunk-C522H7XR.js} +54 -33
- package/dist/cli/chunks/{chunk-7DHSHD5B.js → chunk-CESIR27V.js} +2 -2
- package/dist/cli/chunks/{chunk-V7VZSNDK.js → chunk-CFBEBXLO.js} +3 -3
- package/dist/cli/chunks/{chunk-NZATJ2C6.js → chunk-CMBLM26R.js} +2 -2
- package/dist/cli/chunks/{chunk-7CVMT64N.js → chunk-CZ2IF6MC.js} +1 -1
- package/dist/cli/chunks/{chunk-YVWMJZ6O.js → chunk-CZGOSJQ4.js} +2 -2
- package/dist/cli/chunks/{chunk-TMNEK7TP.js → chunk-D6DA2KFD.js} +2 -2
- package/dist/cli/chunks/{chunk-UTNKMPTC.js → chunk-DBMNJSBV.js} +1 -1
- package/dist/cli/chunks/{chunk-JFWQFB3S.js → chunk-DE4YJQJF.js} +2 -2
- package/dist/cli/chunks/{chunk-767SR7WH.js → chunk-DEF34AFL.js} +2 -2
- package/dist/cli/chunks/{chunk-ZWMFKZEQ.js → chunk-DKAC3E3B.js} +2 -2
- package/dist/cli/chunks/{chunk-CDLG3Q2O.js → chunk-DMFTELBS.js} +2 -2
- package/dist/cli/chunks/{chunk-P4UT4LBE.js → chunk-DNRWGATA.js} +10 -10
- package/dist/cli/chunks/{chunk-PUYQ6EKC.js → chunk-DT7SIJOA.js} +2 -2
- package/dist/cli/chunks/{chunk-ST7ASEJO.js → chunk-DURHK377.js} +69 -69
- package/dist/cli/chunks/{chunk-V4QJ3MMT.js → chunk-EAU5KDFO.js} +1 -1
- package/dist/cli/chunks/{chunk-BLZEOGQE.js → chunk-EDLFX4ZB.js} +2 -2
- package/dist/cli/chunks/{chunk-ZBI7PJFX.js → chunk-EN2QSKFF.js} +2 -2
- package/dist/cli/chunks/{chunk-U7CIY3YR.js → chunk-ERQKYIP7.js} +2 -2
- package/dist/cli/chunks/{chunk-X7ZQIFES.js → chunk-ESUO3GTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-SHEVM5PF.js → chunk-EWFECZ2U.js} +2 -2
- package/dist/cli/chunks/{chunk-JWPYMRIX.js → chunk-FAUCT5KR.js} +3 -3
- package/dist/cli/chunks/{chunk-KMVFBYJO.js → chunk-FB6TI3BH.js} +2 -2
- package/dist/cli/chunks/{chunk-22DOS3PM.js → chunk-FBXTQNRH.js} +2 -2
- package/dist/cli/chunks/{chunk-W5A36V3Z.js → chunk-FESZBPUB.js} +2 -2
- package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
- package/dist/cli/chunks/{chunk-VWSGWYRB.js → chunk-FKL3R5JQ.js} +2 -2
- package/dist/cli/chunks/{chunk-2DPHFCMW.js → chunk-FPUDRSFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-VKFVJCIH.js → chunk-FZOWULMH.js} +1 -1
- package/dist/cli/chunks/{chunk-HXCGV5UJ.js → chunk-G3CZCUPM.js} +2 -2
- package/dist/cli/chunks/{chunk-GENNJRNK.js → chunk-G5I6KGMW.js} +22 -22
- package/dist/cli/chunks/{chunk-J7FLNP5L.js → chunk-GHBNRMSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-I77D65X5.js → chunk-GJHWY3ZX.js} +2 -2
- package/dist/cli/chunks/{chunk-DKFSCJEF.js → chunk-GJMLK5UT.js} +2 -2
- package/dist/cli/chunks/{chunk-52YRSWPS.js → chunk-GRCIBCJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-NW7HTOSN.js → chunk-GWZZ7DAO.js} +2 -2
- package/dist/cli/chunks/{chunk-D4IBIMWI.js → chunk-GZLZCZ42.js} +2 -2
- package/dist/cli/chunks/{chunk-FEN2DHFM.js → chunk-H2PYU7MN.js} +1 -1
- package/dist/cli/chunks/{chunk-4I35ARWW.js → chunk-H32EPIR2.js} +1 -1
- package/dist/cli/chunks/{chunk-MUDBF2JC.js → chunk-H74Q7TJN.js} +1 -1
- package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
- package/dist/cli/chunks/{chunk-MMY52Y6R.js → chunk-I33O4BRQ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZG7UKWBB.js → chunk-IKISCIGH.js} +2 -2
- package/dist/cli/chunks/{chunk-SFPGLUXS.js → chunk-IPJ7Q3AJ.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZRNXEVI.js → chunk-IU2IV4NE.js} +1 -1
- package/dist/cli/chunks/{chunk-XOOBLZXR.js → chunk-JHIY4VCC.js} +2 -2
- package/dist/cli/chunks/{chunk-PJGQ2TKN.js → chunk-KG336OV3.js} +2 -2
- package/dist/cli/chunks/{chunk-YRH7KMTU.js → chunk-KI73QCR5.js} +2 -2
- package/dist/cli/chunks/{chunk-FAYXES7R.js → chunk-KNQ2ERFX.js} +2 -2
- package/dist/cli/chunks/{chunk-CQ3SBRDP.js → chunk-KOBVYY6H.js} +2 -2
- package/dist/cli/chunks/{chunk-3N627QRU.js → chunk-KSIWGGJI.js} +8 -8
- package/dist/cli/chunks/{chunk-2UN4JOTN.js → chunk-LMS3Y7JD.js} +2 -2
- package/dist/cli/chunks/{chunk-RSMPJWQH.js → chunk-LQEURY7C.js} +1 -1
- package/dist/cli/chunks/{chunk-NQDYOF35.js → chunk-LRZY4KS2.js} +2 -2
- package/dist/cli/chunks/{chunk-U3BWBP6B.js → chunk-M2QV7PT7.js} +2 -2
- package/dist/cli/chunks/{chunk-WLXGUQOZ.js → chunk-MA7JIQ6U.js} +2 -2
- package/dist/cli/chunks/{chunk-Y5ZBF7MA.js → chunk-MG27QY4D.js} +2 -2
- package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
- package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
- package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
- package/dist/cli/chunks/{chunk-DCYUHCPK.js → chunk-NGKNYIQZ.js} +1 -1
- package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
- package/dist/cli/chunks/{chunk-UTFMMZ57.js → chunk-NPPHWFA2.js} +3 -3
- package/dist/cli/chunks/chunk-NSHU347M.js +2 -0
- package/dist/cli/chunks/{chunk-NF63NHJH.js → chunk-NVYIZCSR.js} +2 -2
- package/dist/cli/chunks/{chunk-YNQPHRUZ.js → chunk-NW5JUCCG.js} +1 -1
- package/dist/cli/chunks/{chunk-G6CLO74Q.js → chunk-NZYLNXT6.js} +3 -3
- package/dist/cli/chunks/{chunk-R2NHGESM.js → chunk-OBAREPDC.js} +2 -2
- package/dist/cli/chunks/{chunk-X3HM7SV4.js → chunk-ODJNUMV3.js} +2 -2
- package/dist/cli/chunks/{chunk-OCLAMZJG.js → chunk-OEKP73MC.js} +2 -2
- package/dist/cli/chunks/{chunk-5MBNRTT5.js → chunk-OPFGRS5S.js} +2 -2
- package/dist/cli/chunks/{chunk-K5R3WUJP.js → chunk-OY2AHLSF.js} +1 -1
- package/dist/cli/chunks/{chunk-KJNUETCB.js → chunk-OY3NJNP2.js} +1 -1
- package/dist/cli/chunks/{chunk-P2EA62YS.js → chunk-PCEW6Q2C.js} +1 -1
- package/dist/cli/chunks/{chunk-HNGNRIZZ.js → chunk-PFG6VQ5Z.js} +2 -2
- package/dist/cli/chunks/{chunk-DN3AKAPY.js → chunk-PGYMKGOE.js} +2 -2
- package/dist/cli/chunks/{chunk-BEVWCF3Q.js → chunk-PPSAMXYN.js} +3 -3
- package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
- package/dist/cli/chunks/{chunk-6E7EOHMN.js → chunk-RPHY2DU6.js} +2 -2
- package/dist/cli/chunks/{chunk-7C6FMLQR.js → chunk-RWWOHCMG.js} +25 -20
- package/dist/cli/chunks/{chunk-5ONJ7AV6.js → chunk-S75EYIJG.js} +1 -1
- package/dist/cli/chunks/chunk-SKQUUE4F.js +5 -0
- package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
- package/dist/cli/chunks/{chunk-SWY6KGMF.js → chunk-SU5H66SD.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOHS32SI.js → chunk-SY2IB442.js} +2 -2
- package/dist/cli/chunks/{chunk-MV4S3TEC.js → chunk-TBLI254A.js} +2 -2
- package/dist/cli/chunks/{chunk-5DZDLOY6.js → chunk-TNMBRDCA.js} +3 -3
- package/dist/cli/chunks/{chunk-FEPFXXI7.js → chunk-TYFZXDGZ.js} +2 -2
- package/dist/cli/chunks/{chunk-A6GCO6ZU.js → chunk-U4OICXV2.js} +2 -2
- package/dist/cli/chunks/{chunk-G77Q22EN.js → chunk-U53ZB4IX.js} +2 -2
- package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
- package/dist/cli/chunks/{chunk-6GIC2263.js → chunk-UCJMVXO4.js} +2 -2
- package/dist/cli/chunks/{chunk-DAFMHM64.js → chunk-UHTTW3IT.js} +2 -2
- package/dist/cli/chunks/{chunk-2QRGIEQV.js → chunk-V2M2XCR5.js} +1 -1
- package/dist/cli/chunks/{chunk-XZQVC3GD.js → chunk-V2RSNVMW.js} +1 -1
- package/dist/cli/chunks/{chunk-GGSTLKY5.js → chunk-V6JBOIMX.js} +1 -1
- package/dist/cli/chunks/{chunk-BTMEOZYY.js → chunk-VFKF2XO7.js} +1 -1
- package/dist/cli/chunks/{chunk-4C7KE2EL.js → chunk-VFSYMOAL.js} +2 -2
- package/dist/cli/chunks/{chunk-D4O3TJI7.js → chunk-VJQYDYAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-PZ7FJ4UG.js → chunk-VKRTTFB6.js} +2 -2
- package/dist/cli/chunks/{chunk-CQ5G64EA.js → chunk-VWNFAW2M.js} +2 -2
- package/dist/cli/chunks/{chunk-DY37YMMQ.js → chunk-WBM6N6IM.js} +1 -1
- package/dist/cli/chunks/{chunk-K4N2MBCE.js → chunk-WDQ7IEZY.js} +2 -2
- package/dist/cli/chunks/{chunk-HI6OBDDY.js → chunk-WDVRE6GN.js} +2 -2
- package/dist/cli/chunks/{chunk-PICEGWGB.js → chunk-WQ4PYWSW.js} +1 -1
- package/dist/cli/chunks/{chunk-NHOMVBCI.js → chunk-WSF24I3D.js} +2 -2
- package/dist/cli/chunks/{chunk-LPSMVBB3.js → chunk-XBVUVFJK.js} +2 -2
- package/dist/cli/chunks/{chunk-J6LL25QJ.js → chunk-XEB3NLJR.js} +2 -2
- package/dist/cli/chunks/{chunk-SJMZZMHP.js → chunk-XFVTGAAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-KVMKYUOE.js → chunk-XLZYRTNO.js} +2 -2
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +6 -0
- package/dist/cli/chunks/{chunk-WAWKAYPY.js → chunk-Y76IAYQD.js} +1 -1
- package/dist/cli/chunks/{chunk-3LFLO2WK.js → chunk-YAKGBHO4.js} +2 -2
- package/dist/cli/chunks/{chunk-TC52M542.js → chunk-YBSBABOS.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUIZ5QT.js → chunk-YCGP5VFP.js} +2 -2
- package/dist/cli/chunks/{chunk-T2TDTBFV.js → chunk-YDAQK5UF.js} +1 -1
- package/dist/cli/chunks/{chunk-LHRVSK44.js → chunk-YK3BVZY6.js} +2 -2
- package/dist/cli/chunks/{chunk-QFYUZYRA.js → chunk-YK7JN5N7.js} +4 -4
- package/dist/cli/chunks/{chunk-IMSRWNWF.js → chunk-YKMU4LBV.js} +1 -1
- package/dist/cli/chunks/{chunk-NLYUC63R.js → chunk-YYTGXD3R.js} +2 -2
- package/dist/cli/chunks/{chunk-OWBFVAEH.js → chunk-Z2O2YJAF.js} +2 -2
- package/dist/cli/chunks/{chunk-KITKQUBX.js → chunk-Z7IYW5U7.js} +1 -1
- package/dist/cli/chunks/{chunk-4NTLGGXO.js → chunk-ZG5666GJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4YUBWU3E.js → chunk-ZXPY654C.js} +1 -1
- package/dist/cli/chunks/{ci-7NUCRGWO.js → ci-MSKMVH5X.js} +2 -2
- package/dist/cli/chunks/{ci-config-VQVECCFI.js → ci-config-7ODMNAUM.js} +2 -2
- package/dist/cli/chunks/{ci-output-P7GQ6TKF.js → ci-output-FXZ7ZZW3.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5YP6N6HE.js → circuit-breaker-4VOUEPOX.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-W5H7CMU6.js → claude-flow-setup-7D4SGLM4.js} +2 -2
- package/dist/cli/chunks/client-POSVREVS.js +2 -0
- package/dist/cli/chunks/{cline-installer-OYANSZ54.js → cline-installer-WRRT7BGQ.js} +2 -2
- package/dist/cli/chunks/{code-OMT4UEZI.js → code-ZDJRIL3S.js} +25 -24
- package/dist/cli/chunks/{code-index-extractor-M2JEWKNF.js → code-index-extractor-4S4SHM56.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YBS6N5O3.js → codex-installer-YTRHNDWR.js} +2 -2
- package/dist/cli/chunks/{completions-U7GS5RG6.js → completions-6N64JUXJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-QSXPIUIU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-W5TTT743.js → continuedev-installer-IIDR66LB.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-KC2RT24C.js → copilot-installer-SVVFY3S2.js} +2 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
- package/dist/cli/chunks/{cost-tracker-OQPVR6V4.js → cost-tracker-VGFS6IBX.js} +2 -2
- package/dist/cli/chunks/{coverage-TCO2A2NX.js → coverage-B7MCGNTE.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
- package/dist/cli/chunks/{cursor-installer-MH7GWD4L.js → cursor-installer-UPETT57E.js} +2 -2
- package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
- package/dist/cli/chunks/{daemon-UJEARJZ2.js → daemon-CQFNZLXU.js} +7 -7
- package/dist/cli/chunks/{dag-attention-scheduler-F3SUJU5O.js → dag-attention-scheduler-PJVABHON.js} +2 -2
- package/dist/cli/chunks/{detect-5QTCRB32.js → detect-56SKAGWX.js} +2 -2
- package/dist/cli/chunks/{dist-node-XKZPHDBO.js → dist-node-UYTYUMLN.js} +2 -2
- package/dist/cli/chunks/{domain-handler-V3UEADKW.js → domain-handler-YOYLBYJE.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7PES4UHZ.js → domain-plugins-7TARX2XF.js} +2 -2
- package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
- package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-D2HWORHF.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
- package/dist/cli/chunks/{eval-UF2UBAUC.js → eval-GNB574IM.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-2OUCEHHM.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KV5DKKHC.js → fast-paths-KTZ5SF54.js} +2 -2
- package/dist/cli/chunks/{feature-flags-MTW6NMR3.js → feature-flags-ITX5LQ57.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6YWMTNO5.js → feature-flags-KFHSR5YF.js} +2 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
- package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
- package/dist/cli/chunks/{gnn-wrapper-52V6ANOY.js → gnn-wrapper-RLFW3GSX.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-X7NHNRC7.js → heartbeat-handler-EM2URCYZ.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-DZBE3KMK.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-2AWWUJAZ.js → hnswlib-node-CBP73QHY.js} +2 -2
- package/dist/cli/chunks/{hooks-XLPVROL3.js → hooks-IP7XE34Z.js} +34 -34
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-6TI7YP6P.js → hypergraph-engine-ONAYHU25.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DBIBBOXS.js → hypergraph-handler-VINJRAID.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
- package/dist/cli/chunks/{init-guard-OSO6MIDD.js → init-guard-RYVV5R3Z.js} +2 -2
- package/dist/cli/chunks/{init-handler-7S7IHMUF.js → init-handler-MPRGWMOE.js} +6 -6
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
- package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-2KBRFXMA.js → kilocode-installer-OPD7JBRL.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-5VFR4OQZ.js → kiro-installer-M4OPUNK2.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
- package/dist/cli/chunks/{learning-G5NHL3DV.js → learning-4UWTQLMF.js} +24 -24
- package/dist/cli/chunks/{llm-router-4EAPPMHS.js → llm-router-SQ56FF6Z.js} +4 -4
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
- package/dist/cli/chunks/{load-UYMZPEY6.js → load-HPHKDGGL.js} +2 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
- package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
- package/dist/cli/chunks/{memory-QL53YIHP.js → memory-PFQ3KPVJ.js} +5 -5
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-PDDDXF2B.js → multi-model-executor-3VDRX6TZ.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-75D2SKOT.js → opencode-installer-PJ576R63.js} +2 -2
- package/dist/cli/chunks/{orchestrator-3WIZBV4T.js → orchestrator-72QP4UU7.js} +64 -19
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-TEX2JGHA.js → pattern-usage-recorder-754YQW7C.js} +2 -2
- package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
- package/dist/cli/chunks/{platform-WPSKRJE7.js → platform-3E3DXLYB.js} +2 -2
- package/dist/cli/chunks/{plugin-UUFOVVMU.js → plugin-7FUQAKRE.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-PDFSYWKZ.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
- package/dist/cli/chunks/{protocol-handler-3VRYRIQB.js → protocol-handler-BQRYMUTG.js} +2 -2
- package/dist/cli/chunks/{prove-2NAUROGF.js → prove-H52QGC6B.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
- package/dist/cli/chunks/{quality-ZIEI2WGA.js → quality-QO4XPAUM.js} +2 -2
- package/dist/cli/chunks/{quality-gate-KWJO4SWQ.js → quality-gate-FBKE5E6F.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-TSZ4UIAE.js → real-embeddings-RWGOVOXO.js} +2 -2
- package/dist/cli/chunks/{ref-validation-DWFFRETJ.js → ref-validation-LF76ZOBD.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-XTZHLUBO.js → roocode-installer-3BYEBTQ7.js} +2 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
- package/dist/cli/chunks/{routing-handler-GG525TDM.js → routing-handler-DST7BVCU.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-QKRJDM7Z.js → ruvector-commands-XE32PGKC.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-FF52OS6Q.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-M6DXTAZ4.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
- package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
- package/dist/cli/chunks/{security-EHXSW22U.js → security-VSPNKCDS.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-6EH7UVJL.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-WML274E7.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
- package/dist/cli/chunks/{standalone-memory-C7QKAXS4.js → standalone-memory-O4QUTK6L.js} +2 -2
- package/dist/cli/chunks/{status-handler-VLI7MRLM.js → status-handler-Z2BP6EOG.js} +2 -2
- package/dist/cli/chunks/{structural-health-3LPG6MQN.js → structural-health-R36WNLQG.js} +2 -2
- package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
- package/dist/cli/chunks/{sync-JFJEJBVK.js → sync-QF5Y3EMZ.js} +2 -2
- package/dist/cli/chunks/{task-handler-IED3K6E4.js → task-handler-43PYE75J.js} +13 -7
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
- package/dist/cli/chunks/{test-GPKT3CKZ.js → test-UWA377D4.js} +16 -16
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
- package/dist/cli/chunks/{test-scheduling-Z42XXZP6.js → test-scheduling-YQZPJRRN.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
- package/dist/cli/chunks/{token-usage-6Y2ERYIY.js → token-usage-DO6WLMXP.js} +2 -2
- package/dist/cli/chunks/{transformers-MB63T2XO.js → transformers-H5RGFKVO.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
- package/dist/cli/chunks/{types-J4J6QV3I.js → types-PJS2FGPF.js} +2 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
- package/dist/cli/chunks/{upgrade-U4XU7LFM.js → upgrade-4IC4F6AB.js} +2 -2
- package/dist/cli/chunks/{validate-B57HA4YK.js → validate-DHUWW7PF.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-UPPA4M6T.js → validate-swarm-OERQNOX5.js} +2 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GDZMUKOZ.js → web-tree-sitter-TV7DMKES.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-VJRWCHXP.js → windsurf-installer-QZPWSH37.js} +2 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-Z23FVABW.js → witness-chain-verifier-YXENHB42.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-745MJ7WO.js → witness-key-manager-HL26AGFO.js} +2 -2
- package/dist/cli/chunks/{workflow-T245QNQM.js → workflow-EOVVCN2E.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
- package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
- package/dist/cli/commands/code.js +8 -0
- package/dist/cli/commands/daemon.js +8 -0
- package/dist/cli/commands/fleet.js +27 -15
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
- package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
- package/dist/cli/commands/learning.js +5 -3
- package/dist/cli/commands/ruvector-commands.js +2 -1
- package/dist/cli/commands/test.js +6 -0
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/cli/utils/ci-output.d.ts +9 -0
- package/dist/cli/utils/fleet-operation.d.ts +32 -0
- package/dist/cli/utils/fleet-operation.js +71 -0
- package/dist/cli/utils/fleet-result.d.ts +31 -0
- package/dist/cli/utils/fleet-result.js +124 -0
- package/dist/context/sources/git-source.js +6 -2
- package/dist/coordination/handlers/code-intelligence-handlers.js +74 -7
- package/dist/coordination/handlers/coverage-collection.js +9 -10
- package/dist/coordination/handlers/coverage-handlers.js +31 -4
- package/dist/coordination/handlers/coverage-runner.d.ts +2 -1
- package/dist/coordination/handlers/coverage-runner.js +9 -2
- package/dist/coordination/handlers/coverage-target.d.ts +13 -3
- package/dist/coordination/handlers/coverage-target.js +224 -7
- package/dist/coordination/handlers/handler-types.d.ts +2 -0
- package/dist/coordination/handlers/requirements-handlers.js +16 -2
- package/dist/coordination/handlers/security-handlers.js +11 -1
- package/dist/coordination/handlers/test-execution-handlers.js +57 -12
- package/dist/coordination/index.d.ts +2 -2
- package/dist/coordination/index.js +1 -1
- package/dist/coordination/mincut/queen-integration.d.ts +39 -1
- package/dist/coordination/mincut/queen-integration.js +83 -6
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +35 -0
- package/dist/coordination/protocols/learning-consolidation-archive.js +34 -0
- package/dist/coordination/protocols/learning-consolidation.d.ts +62 -3
- package/dist/coordination/protocols/learning-consolidation.js +187 -60
- package/dist/coordination/queen-coordinator.d.ts +13 -2
- package/dist/coordination/queen-coordinator.js +43 -8
- package/dist/coordination/queen-event-handlers.js +15 -1
- package/dist/coordination/queen-lifecycle.js +9 -0
- package/dist/coordination/queen-task-management.d.ts +18 -24
- package/dist/coordination/queen-task-management.js +94 -127
- package/dist/coordination/queen-task-queue.d.ts +41 -0
- package/dist/coordination/queen-task-queue.js +194 -0
- package/dist/coordination/queen-types.d.ts +11 -1
- package/dist/coordination/queen-types.js +8 -0
- package/dist/coordination/queen-work-stealing.d.ts +6 -1
- package/dist/coordination/queen-work-stealing.js +7 -4
- package/dist/coordination/result-saver-adapters.d.ts +15 -0
- package/dist/coordination/result-saver-adapters.js +57 -0
- package/dist/coordination/result-saver.d.ts +1 -1
- package/dist/coordination/result-saver.js +8 -5
- package/dist/coordination/task-dag/dag-algorithms.d.ts +33 -0
- package/dist/coordination/task-dag/dag-algorithms.js +162 -0
- package/dist/coordination/task-dag/dag-obligations.d.ts +21 -0
- package/dist/coordination/task-dag/dag-obligations.js +83 -0
- package/dist/coordination/task-dag/dag.d.ts +69 -19
- package/dist/coordination/task-dag/dag.js +215 -269
- package/dist/coordination/task-dag/index.d.ts +12 -4
- package/dist/coordination/task-dag/index.js +11 -3
- package/dist/coordination/task-dag/prerequisite-ledger.d.ts +84 -0
- package/dist/coordination/task-dag/prerequisite-ledger.js +252 -0
- package/dist/coordination/task-dag/scheduler.d.ts +19 -9
- package/dist/coordination/task-dag/scheduler.js +36 -12
- package/dist/coordination/task-dag/types.d.ts +160 -1
- package/dist/coordination/task-dag/types.js +2 -1
- package/dist/coordination/task-executability.d.ts +18 -0
- package/dist/coordination/task-executability.js +31 -0
- package/dist/coordination/task-executor.d.ts +1 -0
- package/dist/coordination/task-executor.js +5 -0
- package/dist/coordination/yaml-pipeline-loader.js +5 -2
- package/dist/domains/code-intelligence/coordinator.js +35 -9
- package/dist/domains/code-intelligence/index-path-guard.d.ts +52 -0
- package/dist/domains/code-intelligence/index-path-guard.js +95 -0
- package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
- package/dist/domains/code-intelligence/plugin.js +5 -1
- package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +6 -0
- package/dist/domains/code-intelligence/services/knowledge-graph.js +42 -5
- package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
- package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
- package/dist/domains/contract-testing/coordinator.js +3 -1
- package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
- package/dist/domains/contract-testing/services/contract-validator.js +6 -4
- package/dist/domains/contract-testing/services/schema-validator.js +8 -5
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/plugin.js +11 -2
- package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
- package/dist/domains/defect-intelligence/prediction-history.js +68 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +29 -12
- package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
- package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
- package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
- package/dist/domains/learning-optimization/active-patterns.d.ts +14 -14
- package/dist/domains/learning-optimization/active-patterns.js +17 -14
- package/dist/domains/learning-optimization/coordinator-helpers.js +2 -3
- package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
- package/dist/domains/learning-optimization/coordinator.js +52 -107
- package/dist/domains/learning-optimization/index.d.ts +1 -1
- package/dist/domains/learning-optimization/interfaces.d.ts +62 -6
- package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
- package/dist/domains/learning-optimization/pattern-archive.js +56 -0
- package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
- package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
- package/dist/domains/learning-optimization/plugin.js +11 -1
- package/dist/domains/learning-optimization/reward-source.d.ts +50 -0
- package/dist/domains/learning-optimization/reward-source.js +65 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +7 -5
- package/dist/domains/learning-optimization/services/learning-coordinator.js +98 -75
- package/dist/domains/learning-optimization/services/metrics-optimizer.d.ts +14 -4
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +129 -63
- package/dist/domains/learning-optimization/services/transfer-specialist.js +25 -15
- package/dist/domains/security-compliance/plugin.js +17 -3
- package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
- package/dist/domains/security-compliance/sast-path-guard.js +17 -0
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
- package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
- package/dist/domains/test-execution/coordinator.d.ts +5 -0
- package/dist/domains/test-execution/coordinator.js +35 -20
- package/dist/domains/test-execution/interfaces.d.ts +41 -0
- package/dist/domains/test-execution/plugin.js +19 -4
- package/dist/domains/test-execution/services/flaky-detector.js +9 -7
- package/dist/domains/test-execution/services/retry-handler.js +46 -7
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +32 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +87 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
- package/dist/domains/test-execution/services/test-executor.js +31 -9
- package/dist/domains/test-generation/plugin.js +7 -2
- package/dist/domains/test-generation/services/test-data-generator.js +3 -1
- package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
- package/dist/hooks/cross-phase-hooks.js +2 -1
- package/dist/init/fleet-integration.js +2 -0
- package/dist/init/init-wizard-steps.js +2 -0
- package/dist/init/phases/06-code-intelligence.js +2 -0
- package/dist/init/phases/10-workers.js +51 -6
- package/dist/integrations/browser/agent-browser/client.js +37 -52
- package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
- package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
- package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
- package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
- package/dist/integrations/browser/web-content-fetcher.js +9 -3
- package/dist/integrations/vibium/client.js +2 -2
- package/dist/integrations/vibium/runtime.d.ts +1 -1
- package/dist/integrations/vibium/runtime.js +14 -11
- package/dist/kernel/anti-drift-middleware.d.ts +44 -5
- package/dist/kernel/anti-drift-middleware.js +147 -11
- package/dist/kernel/interfaces.d.ts +5 -0
- package/dist/kernel/unified-memory-schemas.d.ts +3 -2
- package/dist/kernel/unified-memory-schemas.js +3 -2
- package/dist/kernel/unified-memory.js +25 -6
- package/dist/learning/dream/dream-commit.d.ts +65 -0
- package/dist/learning/dream/dream-commit.js +104 -0
- package/dist/learning/dream/dream-engine.d.ts +81 -31
- package/dist/learning/dream/dream-engine.js +225 -168
- package/dist/learning/dream/dream-insights-pruner.d.ts +24 -4
- package/dist/learning/dream/dream-insights-pruner.js +85 -11
- package/dist/learning/dream/index.d.ts +3 -2
- package/dist/learning/dream/index.js +3 -1
- package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
- package/dist/learning/dream/rvcow-branch-manager.js +8 -1
- package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
- package/dist/learning/dream/speculative-dreamer.js +64 -111
- package/dist/learning/dream/spreading-activation.d.ts +2 -1
- package/dist/learning/dream/spreading-activation.js +15 -6
- package/dist/learning/experience-capture.d.ts +9 -0
- package/dist/learning/experience-capture.js +18 -4
- package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
- package/dist/learning/qe-reasoning-bank.js +22 -11
- package/dist/learning/skill-validation-learner.d.ts +2 -0
- package/dist/learning/skill-validation-learner.js +29 -21
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +16 -2
- package/dist/learning/usage-outcome.d.ts +68 -0
- package/dist/learning/usage-outcome.js +84 -0
- package/dist/mcp/background-workers.d.ts +13 -1
- package/dist/mcp/background-workers.js +23 -3
- package/dist/mcp/bundle.js +602 -551
- package/dist/mcp/handlers/core-handlers.js +11 -0
- package/dist/mcp/handlers/domain-handler-configs.d.ts +19 -0
- package/dist/mcp/handlers/domain-handler-configs.js +76 -30
- package/dist/mcp/handlers/handler-factory.d.ts +2 -1
- package/dist/mcp/handlers/handler-factory.js +37 -15
- package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
- package/dist/mcp/handlers/orchestrate-routes.js +88 -0
- package/dist/mcp/handlers/task-handlers.d.ts +3 -0
- package/dist/mcp/handlers/task-handlers.js +69 -6
- package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
- package/dist/mcp/metrics/metrics-collector.d.ts +11 -9
- package/dist/mcp/metrics/metrics-collector.js +13 -26
- package/dist/mcp/protocol-server.js +10 -3
- package/dist/mcp/security/schema-validator.js +3 -2
- package/dist/mcp/tools/code-intelligence/c4.js +11 -1
- package/dist/mcp/tools/coverage-analysis/index.js +31 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
- package/dist/mcp/tools/learning-optimization/dream.js +38 -34
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +52 -5
- package/dist/mcp/tools/learning-optimization/optimize.js +164 -80
- package/dist/mcp/tools/quality-assessment/gate.js +12 -1
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -2
- package/dist/memory/crdt/lww-register.js +11 -1
- package/dist/migration/agent-compat.js +7 -5
- package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
- package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
- package/dist/routing/calibration/ema-calibrator.js +3 -1
- package/dist/shared/base-domain-plugin.d.ts +4 -0
- package/dist/shared/base-domain-plugin.js +6 -0
- package/dist/shared/git/git-analyzer.d.ts +49 -0
- package/dist/shared/git/git-analyzer.js +159 -319
- package/dist/shared/git/git-process.d.ts +22 -0
- package/dist/shared/git/git-process.js +37 -0
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -0
- package/dist/shared/io/payload-path-guard.d.ts +75 -0
- package/dist/shared/io/payload-path-guard.js +190 -0
- package/dist/shared/llm/cache.js +4 -1
- package/dist/shared/llm/router/agent-router-config.js +2 -1
- package/dist/shared/llm/translation/tool-translator.js +2 -1
- package/dist/shared/security/compliance-patterns.js +3 -1
- package/dist/shared/test-runner-args.d.ts +5 -0
- package/dist/shared/test-runner-args.js +6 -1
- package/dist/shared/test-runner-process.d.ts +32 -0
- package/dist/shared/test-runner-process.js +105 -0
- package/dist/shared/test-runner-verdict.d.ts +9 -1
- package/dist/shared/test-runner-verdict.js +15 -4
- package/dist/shared/types/index.d.ts +9 -0
- package/dist/shared/types/index.js +13 -0
- package/dist/shared/utils/namespaced-search.d.ts +56 -0
- package/dist/shared/utils/namespaced-search.js +71 -0
- package/dist/shared/utils/safe-expression-evaluator.js +4 -3
- package/dist/strange-loop/infra-healing/infra-action-executor.js +7 -3
- package/dist/strange-loop/infra-healing/infra-healing-orchestrator.js +10 -9
- package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
- package/dist/validation/gate-reexecute.js +7 -4
- package/dist/workers/daemon.d.ts +2 -0
- package/dist/workers/daemon.js +23 -6
- package/dist/workers/namespaced-keys.d.ts +4 -7
- package/dist/workers/namespaced-keys.js +4 -15
- package/dist/workers/quality-daemon/ci-monitor.js +9 -5
- package/dist/workers/quality-daemon/git-watcher.js +9 -9
- package/dist/workers/worker-env.d.ts +16 -8
- package/dist/workers/worker-env.js +25 -12
- package/dist/workers/worker-manager.js +4 -0
- package/dist/workers/workers/defect-predictor.d.ts +8 -3
- package/dist/workers/workers/defect-predictor.js +48 -49
- package/dist/workers/workers/learning-consolidation.d.ts +3 -1
- package/dist/workers/workers/learning-consolidation.js +22 -8
- package/dist/workflows/browser/workflow-loader.js +8 -5
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-FC4EY447.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-W3V5P7LE.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-AUAL6UBL.js +0 -2
- package/dist/cli/chunks/base-2XML4WH7.js +0 -2
- package/dist/cli/chunks/browser-ZL7OLKJQ.js +0 -4
- package/dist/cli/chunks/browser-workflow-2IFEUAAK.js +0 -2
- package/dist/cli/chunks/chunk-4GYFONJB.js +0 -4
- package/dist/cli/chunks/chunk-6CKTLVYV.js +0 -2
- package/dist/cli/chunks/chunk-7H3GNRNA.js +0 -4
- package/dist/cli/chunks/chunk-EUVSSIGR.js +0 -12
- package/dist/cli/chunks/chunk-I4U7YCXG.js +0 -180
- package/dist/cli/chunks/chunk-J7RCI25Q.js +0 -2
- package/dist/cli/chunks/chunk-KNHLOANK.js +0 -4
- package/dist/cli/chunks/chunk-KNQUHGNY.js +0 -2
- package/dist/cli/chunks/chunk-LZWBUVCK.js +0 -5
- package/dist/cli/chunks/chunk-PIEKGKW6.js +0 -12
- package/dist/cli/chunks/chunk-PWA6XBW4.js +0 -120
- package/dist/cli/chunks/chunk-X6VYQVUM.js +0 -2
- package/dist/cli/chunks/chunk-YTYS2XSY.js +0 -2
- package/dist/cli/chunks/chunk-Z3LDUPLQ.js +0 -6
- package/dist/cli/chunks/client-RFUSQRUZ.js +0 -2
- package/dist/cli/chunks/core-handlers-ZC7QB432.js +0 -2
- package/dist/cli/chunks/cross-domain-router-GRBK7YFZ.js +0 -2
- package/dist/cli/chunks/daemon-JER6HE2J.js +0 -12
- package/dist/cli/chunks/domain-transfer-NF7UJW7B.js +0 -2
- package/dist/cli/chunks/dream-VALD726W.js +0 -2
- package/dist/cli/chunks/file-discovery-VL73ASNI.js +0 -2
- package/dist/cli/chunks/fleet-GJ66QFXK.js +0 -43
- package/dist/cli/chunks/heartbeat-scheduler-FSX7A3ZA.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-UX2QT6RL.js +0 -2
- package/dist/cli/chunks/hnsw-index-WRDDAMXH.js +0 -2
- package/dist/cli/chunks/hybrid-backend-O67NGIB5.js +0 -2
- package/dist/cli/chunks/impact-analyzer-6VXWWYWM.js +0 -2
- package/dist/cli/chunks/init-wizard-VH34J4TL.js +0 -2
- package/dist/cli/chunks/kernel-KJD24NO7.js +0 -2
- package/dist/cli/chunks/knowledge-graph-343O2HEZ.js +0 -2
- package/dist/cli/chunks/llm-router-service-2M4BT2AO.js +0 -2
- package/dist/cli/chunks/load-test-OTQ2JQ5F.js +0 -2
- package/dist/cli/chunks/mcp-NOTDZBW5.js +0 -2
- package/dist/cli/chunks/memory-backend-4QSNRRV6.js +0 -2
- package/dist/cli/chunks/memory-handlers-YFFYRSM6.js +0 -2
- package/dist/cli/chunks/pattern-null-store-5USH5MNR.js +0 -2
- package/dist/cli/chunks/pipeline-7ATPA6LU.js +0 -19
- package/dist/cli/chunks/project-root-SRTA6TBL.js +0 -2
- package/dist/cli/chunks/protocol-executor-4WYPCNBS.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-I4D6SFS4.js +0 -2
- package/dist/cli/chunks/queen-coordinator-24UMTZTE.js +0 -2
- package/dist/cli/chunks/router-AUD4GATI.js +0 -2
- package/dist/cli/chunks/routing-feedback-2FE6SIKQ.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-P5LEUF25.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-ZCYD5YJS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-QGV6BW2W.js +0 -2
- package/dist/cli/chunks/safe-db-Q6JUKG2A.js +0 -2
- package/dist/cli/chunks/schedule-44OSMGE5.js +0 -2
- package/dist/cli/chunks/scheduler-V3HO2QQT.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-N5T7DWMR.js +0 -2
- package/dist/cli/chunks/sync-4IMMQEPT.js +0 -2
- package/dist/cli/chunks/task-handlers-FH6DNTHW.js +0 -9
- package/dist/cli/chunks/token-bootstrap-HMM3AHXM.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-56GDQCMR.js +0 -2
- package/dist/cli/chunks/unified-memory-RQ3Q4CU3.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZOP5FEYX.js +0 -2
- package/dist/cli/chunks/unified-persistence-72OCJJKK.js +0 -2
- package/dist/cli/chunks/visual-security-7F5UV23J.js +0 -2
- package/dist/cli/chunks/witness-chain-KZ57QUFE.js +0 -2
- package/dist/cli/chunks/witness-chain-LFASSMZK.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-TPHN4DXN.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-ZNWEUYBN.js +0 -2
- package/dist/cli/chunks/wrappers-WCAYIQUX.js +0 -2
|
@@ -69,9 +69,41 @@ export interface ITestRunResult {
|
|
|
69
69
|
skipped: number;
|
|
70
70
|
duration: number;
|
|
71
71
|
failedTests: IFailedTest[];
|
|
72
|
+
/**
|
|
73
|
+
* #1110: every test case as listed in the runner's own JSON report. Absent
|
|
74
|
+
* when the runner gave no per-test entries for the whole run (e.g. a
|
|
75
|
+
* summary-line fallback); never synthesized from counts.
|
|
76
|
+
*/
|
|
77
|
+
testCases?: ITestCaseResult[];
|
|
72
78
|
coverage?: ICoverageData;
|
|
73
79
|
/** Per-file coverage data for granular quality assessment */
|
|
74
80
|
fileCoverages?: IFileCoverageData[];
|
|
81
|
+
/** #1130: what the requested retries of failed tests did. Absent when none were requested. */
|
|
82
|
+
retries?: IRunRetrySummary;
|
|
83
|
+
}
|
|
84
|
+
/** #1130: the measured outcome of a run's retries, per failed test. */
|
|
85
|
+
export interface IRunRetrySummary {
|
|
86
|
+
/** Reruns that executed a test (an unmatched retry runs nothing and is not counted). */
|
|
87
|
+
totalRetries: number;
|
|
88
|
+
nowPassing: number;
|
|
89
|
+
stillFailing: number;
|
|
90
|
+
tests: Array<{
|
|
91
|
+
name: string;
|
|
92
|
+
file: string;
|
|
93
|
+
attempts: number;
|
|
94
|
+
passed: boolean;
|
|
95
|
+
unmatched?: boolean;
|
|
96
|
+
}>;
|
|
97
|
+
}
|
|
98
|
+
/** One test case taken verbatim from a runner report (#1110). */
|
|
99
|
+
export interface ITestCaseResult {
|
|
100
|
+
name: string;
|
|
101
|
+
file: string;
|
|
102
|
+
status: 'passed' | 'failed' | 'skipped';
|
|
103
|
+
/** Runner-reported duration in ms; omitted when the runner reported none. */
|
|
104
|
+
duration?: number;
|
|
105
|
+
/** The runner's failure message for a failed test, when it reported one. */
|
|
106
|
+
failureMessage?: string;
|
|
75
107
|
}
|
|
76
108
|
export interface IFileCoverageData {
|
|
77
109
|
path: string;
|
|
@@ -128,6 +160,15 @@ export interface IRetryResult {
|
|
|
128
160
|
nowPassing: number;
|
|
129
161
|
stillFailing: number;
|
|
130
162
|
flakyDetected: string[];
|
|
163
|
+
/** Failed tests whose retry filter selected no test, so none was rerun (#1141). */
|
|
164
|
+
unmatched?: string[];
|
|
165
|
+
/** #1130: the outcome per retried test. */
|
|
166
|
+
tests?: Array<{
|
|
167
|
+
testId: string;
|
|
168
|
+
attempts: number;
|
|
169
|
+
passed: boolean;
|
|
170
|
+
unmatched?: boolean;
|
|
171
|
+
}>;
|
|
131
172
|
}
|
|
132
173
|
export interface IExecutionStats {
|
|
133
174
|
runId: string;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { err } from '../../shared/types/index.js';
|
|
6
6
|
import { BaseDomainPlugin } from '../domain-interface.js';
|
|
7
|
+
import { requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
7
8
|
import { createTestExecutionCoordinator } from './coordinator.js';
|
|
8
9
|
import { getGlobalInfraHealing } from '../../strange-loop/infra-healing/global-instance.js';
|
|
9
10
|
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
@@ -60,11 +61,22 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
|
|
|
60
61
|
if (!this.coordinator) {
|
|
61
62
|
return err(new Error('Coordinator not initialized'));
|
|
62
63
|
}
|
|
64
|
+
// #1126: a runner executes the files it is given, so only files and
|
|
65
|
+
// directories (#909 Jest targets) inside the project, passed on as the
|
|
66
|
+
// real paths that were checked. A missing one is still reported by the
|
|
67
|
+
// runner.
|
|
68
|
+
let testFiles;
|
|
69
|
+
if (payload.testFiles !== undefined) {
|
|
70
|
+
const confined = await requirePayloadFiles('execute-tests', 'testFiles', payload.testFiles, { allowMissing: true, allowDirectory: true });
|
|
71
|
+
if (!confined.success)
|
|
72
|
+
return confined;
|
|
73
|
+
testFiles = confined.value;
|
|
74
|
+
}
|
|
63
75
|
// Support both simple and full request formats
|
|
64
|
-
if (
|
|
76
|
+
if (testFiles) {
|
|
65
77
|
// Simple request format
|
|
66
78
|
const request = {
|
|
67
|
-
testFiles
|
|
79
|
+
testFiles,
|
|
68
80
|
parallel: payload.parallel,
|
|
69
81
|
retryCount: payload.retryCount,
|
|
70
82
|
timeout: payload.timeout,
|
|
@@ -75,7 +87,7 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
|
|
|
75
87
|
else if (payload.framework) {
|
|
76
88
|
// Full request format
|
|
77
89
|
const request = {
|
|
78
|
-
testFiles:
|
|
90
|
+
testFiles: [],
|
|
79
91
|
framework: payload.framework,
|
|
80
92
|
timeout: payload.timeout,
|
|
81
93
|
env: payload.env,
|
|
@@ -96,8 +108,11 @@ export class TestExecutionPlugin extends BaseDomainPlugin {
|
|
|
96
108
|
if (!testFiles) {
|
|
97
109
|
return err(new Error('Invalid detect-flaky payload: missing testFiles'));
|
|
98
110
|
}
|
|
111
|
+
const confined = await requirePayloadFiles('detect-flaky', 'testFiles', testFiles, { allowMissing: true, allowDirectory: true });
|
|
112
|
+
if (!confined.success)
|
|
113
|
+
return confined;
|
|
99
114
|
return this.coordinator.detectFlaky({
|
|
100
|
-
testFiles,
|
|
115
|
+
testFiles: confined.value,
|
|
101
116
|
runs: runs ?? 5,
|
|
102
117
|
threshold: threshold ?? 0.1,
|
|
103
118
|
});
|
|
@@ -15,6 +15,7 @@ import { getTestRunnerExecutionError } from '../../../shared/test-runner-verdict
|
|
|
15
15
|
import { createVitestJsonReport, needsVitestJsonReportFile } from '../../../shared/vitest-json-report.js';
|
|
16
16
|
import { isJestCommand, jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
17
17
|
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
18
|
+
import { redactFailureText } from './runner-test-cases.js';
|
|
18
19
|
const DEFAULT_FLAKY_CONFIG = {
|
|
19
20
|
simulateForTesting: false,
|
|
20
21
|
simulatedFlakinessRate: RETRY_CONSTANTS.DEFAULT_FLAKY_RATE,
|
|
@@ -132,7 +133,8 @@ export class FlakyDetectorService {
|
|
|
132
133
|
async recordExecution(testId, result) {
|
|
133
134
|
// Add to in-memory history
|
|
134
135
|
const history = this.testHistory.get(testId) ?? [];
|
|
135
|
-
history.
|
|
136
|
+
// #1122: test-history is persisted, so failure text is stored redacted.
|
|
137
|
+
history.push(result.error ? { ...result, error: redactFailureText(result.error) } : result);
|
|
136
138
|
// Keep only last 100 executions
|
|
137
139
|
if (history.length > 100) {
|
|
138
140
|
history.shift();
|
|
@@ -336,7 +338,7 @@ export class FlakyDetectorService {
|
|
|
336
338
|
runId,
|
|
337
339
|
passed: code === 0,
|
|
338
340
|
duration,
|
|
339
|
-
error: code !== 0 ? stderr || `Exit code: ${code}` : undefined,
|
|
341
|
+
error: code !== 0 ? redactFailureText(stderr || `Exit code: ${code}`) : undefined,
|
|
340
342
|
timestamp: new Date(),
|
|
341
343
|
context: {
|
|
342
344
|
parallelRuns: 1,
|
|
@@ -365,7 +367,7 @@ export class FlakyDetectorService {
|
|
|
365
367
|
passed: code === 0,
|
|
366
368
|
duration,
|
|
367
369
|
error: code !== 0
|
|
368
|
-
? stderr || `Exit code: ${code}, Parse error: ${parseError}`
|
|
370
|
+
? redactFailureText(stderr || `Exit code: ${code}, Parse error: ${parseError}`)
|
|
369
371
|
: undefined,
|
|
370
372
|
timestamp: new Date(),
|
|
371
373
|
context: {
|
|
@@ -479,8 +481,8 @@ export class FlakyDetectorService {
|
|
|
479
481
|
runId,
|
|
480
482
|
passed: test.status === 'passed',
|
|
481
483
|
duration: test.duration || 0,
|
|
482
|
-
error: test.status === 'failed'
|
|
483
|
-
? test.failureMessages
|
|
484
|
+
error: test.status === 'failed' && test.failureMessages
|
|
485
|
+
? redactFailureText(test.failureMessages.join('\n'))
|
|
484
486
|
: undefined,
|
|
485
487
|
timestamp: new Date(),
|
|
486
488
|
context: {
|
|
@@ -505,8 +507,8 @@ export class FlakyDetectorService {
|
|
|
505
507
|
runId,
|
|
506
508
|
passed: assertion.status === 'passed',
|
|
507
509
|
duration: assertion.duration || 0,
|
|
508
|
-
error: assertion.status === 'failed'
|
|
509
|
-
? assertion.failureMessages
|
|
510
|
+
error: assertion.status === 'failed' && assertion.failureMessages
|
|
511
|
+
? redactFailureText(assertion.failureMessages.join('\n'))
|
|
510
512
|
: undefined,
|
|
511
513
|
timestamp: new Date(),
|
|
512
514
|
context: {
|
|
@@ -14,6 +14,7 @@ import { toError } from '../../../shared/error-utils.js';
|
|
|
14
14
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
15
15
|
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
16
16
|
import { terminateTestRunner, trackTestRunnerExit } from '../../../shared/test-runner-process.js';
|
|
17
|
+
import { redactFailureText } from './runner-test-cases.js';
|
|
17
18
|
/**
|
|
18
19
|
* Whether a runner-reported test file and the requested target are the same
|
|
19
20
|
* file. Runners report real paths, so a target given through a symlink must be
|
|
@@ -104,6 +105,8 @@ export class RetryHandlerService {
|
|
|
104
105
|
const nowPassing = [];
|
|
105
106
|
const stillFailing = [];
|
|
106
107
|
const flakyDetected = [];
|
|
108
|
+
const unmatched = [];
|
|
109
|
+
const tests = [];
|
|
107
110
|
for (const test of failedTests) {
|
|
108
111
|
const result = await this.retryTest(test, maxRetries, backoff, baseDelay, maxDelay, onRetry);
|
|
109
112
|
stats.totalRetries += result.attempts;
|
|
@@ -118,11 +121,18 @@ export class RetryHandlerService {
|
|
|
118
121
|
else {
|
|
119
122
|
stillFailing.push(test.testId);
|
|
120
123
|
stats.failed++;
|
|
124
|
+
if (result.unmatched)
|
|
125
|
+
unmatched.push(test.testId);
|
|
121
126
|
}
|
|
127
|
+
tests.push({
|
|
128
|
+
testId: test.testId, attempts: result.attempts, passed: result.passed,
|
|
129
|
+
...(result.unmatched ? { unmatched: true } : {}),
|
|
130
|
+
});
|
|
122
131
|
// Record retry history
|
|
123
132
|
await this.recordRetry(test.testId, result);
|
|
124
133
|
}
|
|
125
134
|
stats.flakyDetected = flakyDetected;
|
|
135
|
+
stats.unmatched = unmatched;
|
|
126
136
|
stats.endTime = Date.now();
|
|
127
137
|
this.runStats.set(runId, stats);
|
|
128
138
|
// Persist stats
|
|
@@ -136,6 +146,8 @@ export class RetryHandlerService {
|
|
|
136
146
|
nowPassing: nowPassing.length,
|
|
137
147
|
stillFailing: stillFailing.length,
|
|
138
148
|
flakyDetected,
|
|
149
|
+
unmatched,
|
|
150
|
+
tests,
|
|
139
151
|
};
|
|
140
152
|
return ok(retryResult);
|
|
141
153
|
}
|
|
@@ -218,7 +230,8 @@ export class RetryHandlerService {
|
|
|
218
230
|
}
|
|
219
231
|
async retryTest(test, maxRetries, backoff, baseDelay, maxDelay, onRetry) {
|
|
220
232
|
let attempts = 0;
|
|
221
|
-
|
|
233
|
+
// #1122: the final error is persisted in retry-history, so keep it redacted.
|
|
234
|
+
let lastError = redactFailureText(test.error);
|
|
222
235
|
while (attempts < maxRetries) {
|
|
223
236
|
// Check if should retry
|
|
224
237
|
const shouldRetry = await this.shouldRetry(test.testId, attempts, lastError);
|
|
@@ -232,9 +245,16 @@ export class RetryHandlerService {
|
|
|
232
245
|
if (onRetry) {
|
|
233
246
|
onRetry(test.testId, attempts + 1);
|
|
234
247
|
}
|
|
235
|
-
attempts++;
|
|
236
248
|
// Execute test (simulated - in real implementation, would run actual test)
|
|
237
249
|
const result = await this.executeTest(test);
|
|
250
|
+
// #1141: a filter that selected no test reran nothing. Report that
|
|
251
|
+
// instead of counting it as a retry, and stop: another attempt would
|
|
252
|
+
// select nothing again.
|
|
253
|
+
if (result.unmatched) {
|
|
254
|
+
logger.warn(`Retry of "${test.testName}" matched no test in ${test.file}; nothing was rerun.`);
|
|
255
|
+
return { testId: test.testId, passed: false, attempts, finalError: lastError, unmatched: true };
|
|
256
|
+
}
|
|
257
|
+
attempts++;
|
|
238
258
|
if (result.passed) {
|
|
239
259
|
return {
|
|
240
260
|
testId: test.testId,
|
|
@@ -243,7 +263,7 @@ export class RetryHandlerService {
|
|
|
243
263
|
finalError: undefined,
|
|
244
264
|
};
|
|
245
265
|
}
|
|
246
|
-
lastError = result.error
|
|
266
|
+
lastError = result.error !== undefined ? redactFailureText(result.error) : lastError;
|
|
247
267
|
}
|
|
248
268
|
return {
|
|
249
269
|
testId: test.testId,
|
|
@@ -477,9 +497,16 @@ export class RetryHandlerService {
|
|
|
477
497
|
const result = safeJsonParse(vitestMatch[0]);
|
|
478
498
|
// Vitest's positional file filter uses prefix matching. A passing
|
|
479
499
|
// sibling must not clear a failure in the requested file (#972).
|
|
480
|
-
const
|
|
481
|
-
&& sameTestFile(file.name, targetFile, this.config.cwd ?? process.cwd())
|
|
482
|
-
&& file.assertionResults?.some(assertion => assertion.status ===
|
|
500
|
+
const targetHas = (status) => result.testResults?.some((file) => typeof file.name === 'string'
|
|
501
|
+
&& (!targetFile || sameTestFile(file.name, targetFile, this.config.cwd ?? process.cwd()))
|
|
502
|
+
&& file.assertionResults?.some(assertion => assertion.status === status)) === true;
|
|
503
|
+
const targetPassed = !targetFile || targetHas('passed');
|
|
504
|
+
const nothingRan = targetFile
|
|
505
|
+
? Array.isArray(result.testResults) && !targetPassed && !targetHas('failed')
|
|
506
|
+
: result.numPassedTests === 0;
|
|
507
|
+
if (nothingRan && result.numFailedTests === 0 && result.numFailedTestSuites === 0) {
|
|
508
|
+
return UNMATCHED;
|
|
509
|
+
}
|
|
483
510
|
if (exitCode === 0 && result.success !== false
|
|
484
511
|
&& result.numFailedTests === 0 && result.numFailedTestSuites === 0
|
|
485
512
|
&& Number.isFinite(result.numPassedTests) && result.numPassedTests > 0
|
|
@@ -501,6 +528,10 @@ export class RetryHandlerService {
|
|
|
501
528
|
const jestMatch = stdout.match(/\{[\s\S]*"numFailedTests"[\s\S]*\}/);
|
|
502
529
|
if (jestMatch) {
|
|
503
530
|
const result = safeJsonParse(jestMatch[0]);
|
|
531
|
+
if (result.numPassedTests === 0 && result.numFailedTests === 0
|
|
532
|
+
&& result.numFailedTestSuites === 0) {
|
|
533
|
+
return UNMATCHED;
|
|
534
|
+
}
|
|
504
535
|
if (exitCode === 0 && result.success !== false
|
|
505
536
|
&& result.numFailedTests === 0 && result.numFailedTestSuites === 0
|
|
506
537
|
&& Number.isFinite(result.numPassedTests) && result.numPassedTests > 0) {
|
|
@@ -517,6 +548,8 @@ export class RetryHandlerService {
|
|
|
517
548
|
const mochaMatch = stdout.match(/\{[\s\S]*"stats"[\s\S]*"failures"[\s\S]*\}/);
|
|
518
549
|
if (mochaMatch) {
|
|
519
550
|
const result = safeJsonParse(mochaMatch[0]);
|
|
551
|
+
if (result.stats?.passes === 0 && result.stats?.failures === 0)
|
|
552
|
+
return UNMATCHED;
|
|
520
553
|
if (exitCode === 0 && result.stats?.failures === 0
|
|
521
554
|
&& Number.isFinite(result.stats?.passes) && result.stats.passes > 0) {
|
|
522
555
|
return { passed: true };
|
|
@@ -538,7 +571,7 @@ export class RetryHandlerService {
|
|
|
538
571
|
const errorOutput = stderr || stdout || `Test failed with exit code ${exitCode}`;
|
|
539
572
|
return {
|
|
540
573
|
passed: false,
|
|
541
|
-
error: errorOutput.substring(0, 1000), // Truncate long error messages
|
|
574
|
+
error: redactFailureText(errorOutput).substring(0, 1000), // Truncate long error messages
|
|
542
575
|
};
|
|
543
576
|
}
|
|
544
577
|
calculateDelay(attempt, backoff, baseDelay, maxDelay) {
|
|
@@ -573,6 +606,7 @@ export class RetryHandlerService {
|
|
|
573
606
|
attempts: result.attempts,
|
|
574
607
|
passed: result.passed,
|
|
575
608
|
error: result.finalError,
|
|
609
|
+
...(result.unmatched ? { unmatched: true } : {}),
|
|
576
610
|
timestamp: new Date(),
|
|
577
611
|
});
|
|
578
612
|
// Keep last 50 entries
|
|
@@ -616,4 +650,9 @@ export class RetryHandlerService {
|
|
|
616
650
|
};
|
|
617
651
|
}
|
|
618
652
|
}
|
|
653
|
+
const UNMATCHED = {
|
|
654
|
+
passed: false,
|
|
655
|
+
unmatched: true,
|
|
656
|
+
error: 'The retry filter matched no test, so nothing was rerun.',
|
|
657
|
+
};
|
|
619
658
|
//# sourceMappingURL=retry-handler.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1110: per-test results read from a Vitest/Jest JSON report.
|
|
3
|
+
*
|
|
4
|
+
* Both runners emit `testResults[].assertionResults[]`. Each entry becomes one
|
|
5
|
+
* test case with the runner's own name, status and duration; nothing is
|
|
6
|
+
* derived from aggregate counts.
|
|
7
|
+
*/
|
|
8
|
+
import type { ITestCaseResult } from '../interfaces';
|
|
9
|
+
/**
|
|
10
|
+
* #1122: failure text goes back over MCP and into saved results, so
|
|
11
|
+
* credential-shaped values (e.g. a connection string) are redacted first.
|
|
12
|
+
* The text is not shortened here; callers apply their own caps.
|
|
13
|
+
*/
|
|
14
|
+
export declare function redactFailureText(text: string): string;
|
|
15
|
+
/** Failed tests with `error` and `stack` redacted (#1122). */
|
|
16
|
+
export declare function redactFailedTests<T extends {
|
|
17
|
+
error: string;
|
|
18
|
+
stack?: string;
|
|
19
|
+
}>(tests: T[]): T[];
|
|
20
|
+
/**
|
|
21
|
+
* Test cases listed in a runner JSON report, or undefined when the report
|
|
22
|
+
* has no per-test entries.
|
|
23
|
+
*/
|
|
24
|
+
export declare function testCasesFromRunnerReport(report: {
|
|
25
|
+
testResults?: unknown;
|
|
26
|
+
}, fallbackFile: string): ITestCaseResult[] | undefined;
|
|
27
|
+
/** Concatenate per-run test cases; undefined unless every run listed its tests. */
|
|
28
|
+
export declare function mergeTestCases(runs: ReadonlyArray<{
|
|
29
|
+
testCases?: ITestCaseResult[];
|
|
30
|
+
total: number;
|
|
31
|
+
}>): ITestCaseResult[] | undefined;
|
|
32
|
+
//# sourceMappingURL=runner-test-cases.d.ts.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1110: per-test results read from a Vitest/Jest JSON report.
|
|
3
|
+
*
|
|
4
|
+
* Both runners emit `testResults[].assertionResults[]`. Each entry becomes one
|
|
5
|
+
* test case with the runner's own name, status and duration; nothing is
|
|
6
|
+
* derived from aggregate counts.
|
|
7
|
+
*/
|
|
8
|
+
import { redactLogText } from '../../../logging/redaction.js';
|
|
9
|
+
const SKIPPED_STATUSES = new Set(['skipped', 'pending', 'todo']);
|
|
10
|
+
/** Upper bound on a reported failure message, so one stack cannot swamp the output. */
|
|
11
|
+
const MAX_FAILURE_MESSAGE_LENGTH = 4000;
|
|
12
|
+
function failureMessageOf(assertion) {
|
|
13
|
+
if (!Array.isArray(assertion.failureMessages))
|
|
14
|
+
return undefined;
|
|
15
|
+
const joined = assertion.failureMessages.filter((m) => typeof m === 'string').join('\n').trim();
|
|
16
|
+
if (!joined)
|
|
17
|
+
return undefined;
|
|
18
|
+
const message = redactFailureText(joined);
|
|
19
|
+
return message.length > MAX_FAILURE_MESSAGE_LENGTH
|
|
20
|
+
? `${message.slice(0, MAX_FAILURE_MESSAGE_LENGTH)}… [truncated]`
|
|
21
|
+
: message;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* #1122: failure text goes back over MCP and into saved results, so
|
|
25
|
+
* credential-shaped values (e.g. a connection string) are redacted first.
|
|
26
|
+
* The text is not shortened here; callers apply their own caps.
|
|
27
|
+
*/
|
|
28
|
+
export function redactFailureText(text) {
|
|
29
|
+
return redactLogText(text, Number.POSITIVE_INFINITY);
|
|
30
|
+
}
|
|
31
|
+
/** Failed tests with `error` and `stack` redacted (#1122). */
|
|
32
|
+
export function redactFailedTests(tests) {
|
|
33
|
+
return tests.map(test => ({
|
|
34
|
+
...test,
|
|
35
|
+
error: redactFailureText(test.error),
|
|
36
|
+
...(typeof test.stack === 'string' ? { stack: redactFailureText(test.stack) } : {}),
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
function toStatus(status) {
|
|
40
|
+
if (status === 'passed' || status === 'failed')
|
|
41
|
+
return status;
|
|
42
|
+
return typeof status === 'string' && SKIPPED_STATUSES.has(status) ? 'skipped' : undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Test cases listed in a runner JSON report, or undefined when the report
|
|
46
|
+
* has no per-test entries.
|
|
47
|
+
*/
|
|
48
|
+
export function testCasesFromRunnerReport(report, fallbackFile) {
|
|
49
|
+
if (!Array.isArray(report.testResults))
|
|
50
|
+
return undefined;
|
|
51
|
+
const cases = [];
|
|
52
|
+
for (const fileResult of report.testResults) {
|
|
53
|
+
const file = typeof fileResult?.name === 'string' ? fileResult.name : fallbackFile;
|
|
54
|
+
const assertions = Array.isArray(fileResult?.assertionResults) ? fileResult.assertionResults : [];
|
|
55
|
+
for (const assertion of assertions) {
|
|
56
|
+
// A malformed entry is skipped; the caller's count check then drops the list.
|
|
57
|
+
if (!assertion || typeof assertion !== 'object')
|
|
58
|
+
continue;
|
|
59
|
+
const status = toStatus(assertion.status);
|
|
60
|
+
if (!status)
|
|
61
|
+
continue;
|
|
62
|
+
const name = typeof assertion.fullName === 'string' && assertion.fullName
|
|
63
|
+
? assertion.fullName
|
|
64
|
+
: typeof assertion.title === 'string' ? assertion.title : '';
|
|
65
|
+
if (!name)
|
|
66
|
+
continue;
|
|
67
|
+
const duration = typeof assertion.duration === 'number' && Number.isFinite(assertion.duration)
|
|
68
|
+
? assertion.duration
|
|
69
|
+
: undefined;
|
|
70
|
+
const failureMessage = status === 'failed' ? failureMessageOf(assertion) : undefined;
|
|
71
|
+
cases.push({
|
|
72
|
+
name, file, status,
|
|
73
|
+
...(duration !== undefined ? { duration } : {}),
|
|
74
|
+
...(failureMessage ? { failureMessage } : {}),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return cases.length > 0 ? cases : undefined;
|
|
79
|
+
}
|
|
80
|
+
/** Concatenate per-run test cases; undefined unless every run listed its tests. */
|
|
81
|
+
export function mergeTestCases(runs) {
|
|
82
|
+
if (runs.length === 0 || runs.some(run => run.total > 0 && !run.testCases))
|
|
83
|
+
return undefined;
|
|
84
|
+
const merged = runs.flatMap(run => run.testCases ?? []);
|
|
85
|
+
return merged.length > 0 ? merged : undefined;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=runner-test-cases.js.map
|
|
@@ -127,6 +127,11 @@ export declare class TestExecutorService implements ITestExecutionService {
|
|
|
127
127
|
* Parse vitest JSON output
|
|
128
128
|
*/
|
|
129
129
|
private parseVitestOutput;
|
|
130
|
+
/**
|
|
131
|
+
* #1110: the report's per-test entries, kept only when they account for
|
|
132
|
+
* every counted test; a partial list would misstate the run.
|
|
133
|
+
*/
|
|
134
|
+
private reportedTestCases;
|
|
130
135
|
/**
|
|
131
136
|
* Parse jest JSON output
|
|
132
137
|
*/
|
|
@@ -17,7 +17,8 @@ import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-rand
|
|
|
17
17
|
import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
18
18
|
import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
|
|
19
19
|
import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
|
|
20
|
-
import {
|
|
20
|
+
import { mergeTestCases, redactFailedTests, redactFailureText, testCasesFromRunnerReport } from './runner-test-cases.js';
|
|
21
|
+
import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
21
22
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
22
23
|
import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
23
24
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
@@ -75,7 +76,8 @@ export class TestExecutorService {
|
|
|
75
76
|
failed: results.failed,
|
|
76
77
|
skipped: results.skipped,
|
|
77
78
|
duration,
|
|
78
|
-
failedTests: results.failedTests,
|
|
79
|
+
failedTests: redactFailedTests(results.failedTests),
|
|
80
|
+
...(results.testCases ? { testCases: results.testCases } : {}),
|
|
79
81
|
coverage: results.coverage,
|
|
80
82
|
fileCoverages: results.fileCoverages,
|
|
81
83
|
};
|
|
@@ -130,7 +132,8 @@ export class TestExecutorService {
|
|
|
130
132
|
failed: aggregated.failed,
|
|
131
133
|
skipped: aggregated.skipped,
|
|
132
134
|
duration,
|
|
133
|
-
failedTests: aggregated.failedTests,
|
|
135
|
+
failedTests: redactFailedTests(aggregated.failedTests),
|
|
136
|
+
...(aggregated.testCases ? { testCases: aggregated.testCases } : {}),
|
|
134
137
|
coverage: aggregated.coverage,
|
|
135
138
|
fileCoverages: aggregated.fileCoverages,
|
|
136
139
|
};
|
|
@@ -257,7 +260,7 @@ export class TestExecutorService {
|
|
|
257
260
|
if (!this.isLLMAnalysisAvailable() || failures.length === 0)
|
|
258
261
|
return null;
|
|
259
262
|
try {
|
|
260
|
-
const failureSummary = failures.slice(0, 5).map(f => `- ${f.testName}: ${f.error
|
|
263
|
+
const failureSummary = failures.slice(0, 5).map(f => `- ${f.testName}: ${f.error ? redactFailureText(f.error).substring(0, 200) : 'Unknown error'}`).join('\n');
|
|
261
264
|
const response = await this.llmRouter.chat({
|
|
262
265
|
model: this.getModelForTier(this.config.llmModelTier),
|
|
263
266
|
messages: [{
|
|
@@ -331,12 +334,14 @@ Provide:
|
|
|
331
334
|
? this.mergeSequentialCoverage(executionResults)
|
|
332
335
|
: undefined;
|
|
333
336
|
const separateRuns = testFiles.length > 1 && !this.config.simulateForTesting;
|
|
337
|
+
const testCases = mergeTestCases(executionResults);
|
|
334
338
|
return {
|
|
335
339
|
total: passed + failed + skipped,
|
|
336
340
|
passed,
|
|
337
341
|
failed,
|
|
338
342
|
skipped,
|
|
339
343
|
failedTests,
|
|
344
|
+
...(testCases ? { testCases } : {}),
|
|
340
345
|
coverage: separateRuns ? merged?.summary : this.aggregateCoverage(coverages),
|
|
341
346
|
fileCoverages: separateRuns ? merged?.perFile
|
|
342
347
|
: allFileCoverages.length > 0 ? allFileCoverages : undefined,
|
|
@@ -502,7 +507,7 @@ Provide:
|
|
|
502
507
|
return;
|
|
503
508
|
}
|
|
504
509
|
if (reportText === undefined) {
|
|
505
|
-
finish(err(new
|
|
510
|
+
finish(err(new TestRunnerExecutionError(`The current Vitest JSON report is missing for ${fileLabel}.`)));
|
|
506
511
|
return;
|
|
507
512
|
}
|
|
508
513
|
const parseResult = this.parseTestOutput(reportText, stderr, fileLabel, framework, code);
|
|
@@ -619,7 +624,7 @@ Provide:
|
|
|
619
624
|
}
|
|
620
625
|
catch (error) {
|
|
621
626
|
return err(new Error(`Failed to parse test output for ${file}: ${toErrorMessage(error)}\n` +
|
|
622
|
-
`stdout: ${stdout
|
|
627
|
+
`stdout: ${capDiagnostics(stdout, 500)}\nstderr: ${capDiagnostics(stderr, 500)}`));
|
|
623
628
|
}
|
|
624
629
|
}
|
|
625
630
|
/**
|
|
@@ -702,12 +707,14 @@ Provide:
|
|
|
702
707
|
if (executionError)
|
|
703
708
|
return err(executionError);
|
|
704
709
|
const covData = this.extractCoverageFromJson(json);
|
|
710
|
+
const testCases = this.reportedTestCases(json, file, passed + failed + skipped);
|
|
705
711
|
return ok({
|
|
706
712
|
total: passed + failed + skipped,
|
|
707
713
|
passed,
|
|
708
714
|
failed,
|
|
709
715
|
skipped,
|
|
710
716
|
failedTests,
|
|
717
|
+
...(testCases ? { testCases } : {}),
|
|
711
718
|
coverage: covData.summary,
|
|
712
719
|
fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
|
|
713
720
|
rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
|
|
@@ -721,6 +728,14 @@ Provide:
|
|
|
721
728
|
// Example: "Tests 5 passed | 1 failed | 1 skipped (7)"
|
|
722
729
|
return this.parseTestSummaryLine(stdout, stderr, file, exitCode);
|
|
723
730
|
}
|
|
731
|
+
/**
|
|
732
|
+
* #1110: the report's per-test entries, kept only when they account for
|
|
733
|
+
* every counted test; a partial list would misstate the run.
|
|
734
|
+
*/
|
|
735
|
+
reportedTestCases(json, file, total) {
|
|
736
|
+
const cases = testCasesFromRunnerReport(json, file);
|
|
737
|
+
return cases && cases.length === total ? cases : undefined;
|
|
738
|
+
}
|
|
724
739
|
/**
|
|
725
740
|
* Parse jest JSON output
|
|
726
741
|
*/
|
|
@@ -757,12 +772,14 @@ Provide:
|
|
|
757
772
|
if (executionError)
|
|
758
773
|
return err(executionError);
|
|
759
774
|
const covData = this.extractCoverageFromJson(json);
|
|
775
|
+
const testCases = this.reportedTestCases(json, file, passed + failed + skipped);
|
|
760
776
|
return ok({
|
|
761
777
|
total: passed + failed + skipped,
|
|
762
778
|
passed,
|
|
763
779
|
failed,
|
|
764
780
|
skipped,
|
|
765
781
|
failedTests,
|
|
782
|
+
...(testCases ? { testCases } : {}),
|
|
766
783
|
coverage: covData.summary,
|
|
767
784
|
fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
|
|
768
785
|
rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
|
|
@@ -863,7 +880,7 @@ Provide:
|
|
|
863
880
|
];
|
|
864
881
|
for (const indicator of errorMessages) {
|
|
865
882
|
if (combinedOutput.includes(indicator)) {
|
|
866
|
-
return err(new Error(`Test execution failed for ${file} (exit code ${exitCode}):\n${combinedOutput
|
|
883
|
+
return err(new Error(`Test execution failed for ${file} (exit code ${exitCode}):\n${capDiagnostics(combinedOutput, 1000)}`));
|
|
867
884
|
}
|
|
868
885
|
}
|
|
869
886
|
}
|
|
@@ -877,7 +894,7 @@ Provide:
|
|
|
877
894
|
}
|
|
878
895
|
// Could not parse output - return error with details
|
|
879
896
|
return err(new Error(`Unable to parse test results for ${file}. Exit code: ${exitCode}\n` +
|
|
880
|
-
`Output: ${combinedOutput
|
|
897
|
+
`Output: ${capDiagnostics(combinedOutput, 500)}`));
|
|
881
898
|
}
|
|
882
899
|
/**
|
|
883
900
|
* Create generic failure entries when we know tests failed but can't parse details
|
|
@@ -991,6 +1008,9 @@ Provide:
|
|
|
991
1008
|
aggregated.skipped += result.skipped;
|
|
992
1009
|
aggregated.failedTests.push(...result.failedTests);
|
|
993
1010
|
}
|
|
1011
|
+
const testCases = mergeTestCases(results);
|
|
1012
|
+
if (testCases)
|
|
1013
|
+
aggregated.testCases = testCases;
|
|
994
1014
|
aggregated.coverage = this.aggregateCoverage(results.map(r => r.coverage).filter((c) => c !== undefined));
|
|
995
1015
|
// Collect per-file coverages from all worker results
|
|
996
1016
|
const allFileCoverages = results.flatMap(r => r.fileCoverages ?? []);
|
|
@@ -1182,7 +1202,9 @@ Provide:
|
|
|
1182
1202
|
// #1028 N1: the record names the test files it ran, so per-test duration
|
|
1183
1203
|
// is compared only between runs of the same test set.
|
|
1184
1204
|
const files = testFiles && testFiles.length > 0 ? [...new Set(testFiles)].sort() : undefined;
|
|
1185
|
-
|
|
1205
|
+
// Per-test entries are returned to the caller, not persisted with the run record.
|
|
1206
|
+
const { testCases: _testCases, ...record } = result;
|
|
1207
|
+
await this.memory.set(`test-run:${runId}`, files ? { ...record, testFiles: files } : record, {
|
|
1186
1208
|
namespace: 'test-execution',
|
|
1187
1209
|
persist: true,
|
|
1188
1210
|
});
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { err } from '../../shared/types/index.js';
|
|
6
6
|
import { BaseDomainPlugin } from '../domain-interface.js';
|
|
7
|
+
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
7
8
|
import { TestGenerationCoordinator, } from './coordinator.js';
|
|
8
9
|
// D9: live routing-feedback so free-tier outcomes lift routing confidence.
|
|
9
10
|
import { RoutingFeedbackCollector } from '../../routing/routing-feedback.js';
|
|
@@ -73,12 +74,16 @@ export class TestGenerationPlugin extends BaseDomainPlugin {
|
|
|
73
74
|
if (!this.coordinator) {
|
|
74
75
|
return err(new Error('Coordinator not initialized'));
|
|
75
76
|
}
|
|
76
|
-
const sourceFiles = payload.sourceFiles;
|
|
77
77
|
const testType = payload.testType;
|
|
78
78
|
const framework = payload.framework;
|
|
79
|
-
if (!sourceFiles || sourceFiles.length === 0) {
|
|
79
|
+
if (!Array.isArray(payload.sourceFiles) || payload.sourceFiles.length === 0) {
|
|
80
80
|
return err(new Error('Invalid generate-tests payload: missing sourceFiles'));
|
|
81
81
|
}
|
|
82
|
+
// #1126: the generator reads each file whole, so only project files.
|
|
83
|
+
const confined = await requirePayloadFiles('generate-tests', 'sourceFiles', payload.sourceFiles, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
84
|
+
if (!confined.success)
|
|
85
|
+
return confined;
|
|
86
|
+
const sourceFiles = confined.value;
|
|
82
87
|
const request = {
|
|
83
88
|
sourceFiles,
|
|
84
89
|
testType: testType ?? 'unit',
|
|
@@ -230,7 +230,9 @@ export class TestDataGeneratorService {
|
|
|
230
230
|
const parts = methodPath.split('.');
|
|
231
231
|
let result = f;
|
|
232
232
|
for (const part of parts) {
|
|
233
|
-
|
|
233
|
+
// #1136: a member every object inherits (`constructor`, `toString`)
|
|
234
|
+
// is not a faker method.
|
|
235
|
+
if (result && typeof result === 'object' && part in result && !(part in Object.prototype)) {
|
|
234
236
|
const next = result[part];
|
|
235
237
|
if (typeof next === 'function') {
|
|
236
238
|
result = next();
|