agentic-qe 3.15.10 → 3.15.11
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 +114 -0
- package/README.md +8 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/a2a/agent-cards/generator.js +6 -3
- package/dist/adapters/a2a/tasks/task-router.js +3 -1
- package/dist/adapters/trajectory-adapter.js +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
- package/dist/agents/overlay-loader.js +26 -21
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-TIDSQ3ZK.js} +2 -2
- package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-G3EPBVA7.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-ARC5C7GW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
- package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-36DTATJV.js} +4 -4
- package/dist/cli/chunks/{arena-EKOOFVST.js → arena-K4I4QDXB.js} +2 -2
- package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-WQSJSJZF.js} +3 -3
- package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BB4K67MT.js} +2 -2
- package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-CU3GOIU3.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-NJQX7ZNB.js} +2 -2
- package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-6YJF4FQW.js} +2 -2
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
- package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-25P77WA5.js} +1 -1
- package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-2CW7VRPH.js} +8 -8
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
- package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-2KFFEKSI.js} +2 -2
- package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-2VLYUF7U.js} +2 -2
- package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-325QCVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-35M2X3C5.js} +2 -2
- package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-3RHOPP7A.js} +1 -1
- package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-4HJKQIX5.js} +2 -2
- package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
- package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-4RAQ7PJA.js} +2 -2
- package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4RH5I24Q.js} +2 -2
- package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-4UBVAJFO.js} +3 -3
- package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-4UX35V7P.js} +2 -2
- package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-4X4MWMHB.js} +2 -2
- package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-55CH76ZO.js} +3 -3
- package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-57LNKSW7.js} +2 -2
- package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
- package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-5HQP4SLM.js} +2 -2
- package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-5MNASJOH.js} +2 -2
- package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-5MTWCCZJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-5N25I53C.js} +2 -2
- package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-5WYZHDIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-5YLOLACR.js} +2 -2
- package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-672XOJDG.js} +1 -1
- package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-6NA3KZZT.js} +3 -3
- package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
- package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-76SNL7GU.js} +2 -2
- package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-7HEMJHPP.js} +2 -2
- package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7R5HC56U.js} +1 -1
- package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-AFFN6E6Q.js} +2 -2
- package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-AMZKAJLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-AP3ADWDK.js} +2 -2
- package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-APPZATXA.js} +2 -2
- package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-AUUJBXWX.js} +2 -2
- package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-BTVWA35P.js} +2 -2
- package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-BZPE3LDO.js} +2 -2
- package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-CFWGGRE7.js} +1 -1
- package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-CIAL4YRY.js} +2 -2
- package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-CO3DX2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-DDEOZPWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-DOBZPSKE.js} +1 -1
- package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-DOFREOPQ.js} +2 -2
- package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-E44NNCEU.js} +2 -2
- package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-E6PF35JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-4SJYIX54.js → chunk-EBPJY4DI.js} +2 -2
- package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-EH2S6AOR.js} +2 -2
- package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-EIDJNT5C.js} +1 -1
- package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-EJPK7OTR.js} +2 -2
- package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-EK5GMOSO.js} +1 -1
- package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-ERN43HOX.js} +151 -149
- package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-ETVAYGCB.js} +11 -11
- package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-EWPUQCN4.js} +2 -2
- package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-FL32MTKT.js} +2 -2
- package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
- package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-FUYOOKTH.js} +5 -5
- package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FWSGPE3V.js} +3 -3
- package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-FZHSG75I.js} +2 -2
- package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-G2IJFNZS.js} +2 -2
- package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-G4CKPWF6.js} +1 -1
- package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-G4FAPO57.js} +2 -2
- package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-G77MLBDF.js} +2 -2
- package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-GBFUANTC.js} +1 -1
- package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-GVKVJJQX.js} +2 -2
- package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-GWJWSLDA.js} +2 -2
- package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-H43AFUKL.js} +2 -2
- package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
- package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-HDJUYAZG.js} +1 -1
- package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-HDNWSKHA.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-HFFPYC4G.js} +2 -2
- package/dist/cli/chunks/{chunk-WSF24I3D.js → chunk-HJ3XNTTJ.js} +2 -2
- package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-HYXUN7BW.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-I36CRDHF.js} +2 -2
- package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-I4K2HTQU.js} +1 -1
- package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-IENZSO3K.js} +2 -2
- package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
- package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-IOZRKXR5.js} +2 -2
- package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-ITL3IN2E.js} +2 -2
- package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-ITPGWGQS.js} +14 -14
- package/dist/cli/chunks/{chunk-NSHU347M.js → chunk-IW6WDGHM.js} +1 -1
- package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-J4JMCZVA.js} +2 -2
- package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-JFLU7L3W.js} +2 -2
- package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-JGJXXAS6.js} +4 -4
- package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-JUMICXM6.js} +2 -2
- package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-K2HBNYAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-K7V2WZNF.js} +1 -1
- package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-KDI5JOYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-KJCIMNHS.js} +1 -1
- package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-KKYO2NKV.js} +2 -2
- package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-KSE5TDM5.js} +2 -2
- package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-KSLLHFVY.js} +1 -1
- package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-KXS3Y2AX.js} +2 -2
- package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-LBX7M4LW.js} +2 -2
- package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-LCVEEII4.js} +2 -2
- package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-LD5CFK53.js} +32 -32
- package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-LPU6PAJE.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-LQ4NUC6Q.js} +2 -2
- package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
- package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-LXQ3B4RY.js} +2 -2
- package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-M5RQ6U3G.js} +2 -2
- package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-M5XYIQYZ.js} +2 -2
- package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
- package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-MIK4RBEH.js} +1 -1
- package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-NC6K7SCQ.js} +2 -2
- package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-NKTWKYHB.js} +2 -2
- package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-NPZOBSAN.js} +2 -2
- package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-NQZNMCZU.js} +2 -2
- package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-NT7JRHMH.js} +1 -1
- package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-NTB342NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-O4JAKWWM.js} +13 -13
- package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-OD5D4LSZ.js} +2 -2
- package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-OH5V5EJW.js} +2 -2
- package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-OHR7C777.js} +2 -2
- package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-OURITHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-OV5RPLKV.js} +2 -2
- package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-OYJC3YON.js} +2 -2
- package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-QDESWOZP.js} +2 -2
- package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
- package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-R5LGV6GZ.js} +2 -2
- package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-RBZCA7SD.js} +2 -2
- package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
- package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
- package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-RTY7VSZB.js} +2 -2
- package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-S6IYEBAI.js} +2 -2
- package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-SMVVAVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-T5KHJ3J7.js} +5 -5
- package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-TCYSBC7Y.js} +1 -1
- package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-TFW7CCKS.js} +1 -1
- package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
- package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-U3LJNNVJ.js} +5 -5
- package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-UKKYMW3S.js} +2 -2
- package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-UMVSWQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-UTTSH4NH.js} +3 -3
- package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-V5AADCBC.js} +1 -1
- package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-V7DA4HAK.js} +1 -1
- package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-VBK2YAYY.js} +2 -2
- package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-VEEYL2CZ.js} +2 -2
- package/dist/cli/chunks/{chunk-PPSAMXYN.js → chunk-VLD7Z2ED.js} +3 -3
- package/dist/cli/chunks/{chunk-N6PIIK6G.js → chunk-VO3DRK4P.js} +2 -2
- package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-VWUZSNVC.js} +1 -1
- package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-VYTILW4R.js} +2 -2
- package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-WCAVIJ64.js} +1 -1
- package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-WCVCOT4E.js} +2 -2
- package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-WM3SRRA6.js} +2 -2
- package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-X3PZCXWG.js} +1 -1
- package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-X4J73KP3.js} +1 -1
- package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-XDI5X3FR.js} +1 -1
- package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-XGBU3KEM.js} +2 -2
- package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-XGPTZUKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-XJKZ7FTR.js} +2 -2
- package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-XNLIWQYE.js} +2 -2
- package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-XS2XF3YG.js} +6 -5
- package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
- package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-YBBT3YYG.js} +1 -1
- package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-YNOCQ2SL.js} +1 -1
- package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-YOCULVHR.js} +1 -1
- package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-YPX2TV3M.js} +1 -1
- package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-Z2EA7A4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-ZMC543GI.js} +2 -2
- package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
- package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-ZP75ASUU.js} +1 -1
- package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-ZQHDA4O7.js} +1 -1
- package/dist/cli/chunks/{ci-MSKMVH5X.js → ci-6GUFAZMJ.js} +2 -2
- package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-J665XNOX.js} +2 -2
- package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-PEQQQWVD.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-HHB2JSKH.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-JKUJRWPN.js} +2 -2
- package/dist/cli/chunks/client-HL2COSFM.js +2 -0
- package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-Y77BWTAN.js} +2 -2
- package/dist/cli/chunks/{code-ZDJRIL3S.js → code-LV2HAGJY.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-4GKKSETB.js} +2 -2
- package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-WMKBYE5Y.js} +2 -2
- package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-SBGFAOIJ.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-AQHFIJXC.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-26AYFS2E.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4UD3DK55.js} +2 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-TP4NZCG4.js} +2 -2
- package/dist/cli/chunks/{coverage-B7MCGNTE.js → coverage-B2KIXHAI.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
- package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-AVZEQZ4W.js} +2 -2
- package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-P574WWBW.js} +4 -4
- package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-XM2A7LQU.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
- package/dist/cli/chunks/{detect-56SKAGWX.js → detect-TYR7HT23.js} +2 -2
- package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-2DGVQGLS.js} +2 -2
- package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-RRA4ZOMF.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-IVZEZ5RB.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-DOBI67K6.js} +2 -2
- package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
- package/dist/cli/chunks/{eval-GNB574IM.js → eval-QV4LVPUF.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-DAPKT763.js} +3 -3
- package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-WVRFPHX7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-DEFTUIYT.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-O7ZXDDCD.js} +2 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
- package/dist/cli/chunks/{fleet-2Y3ZE6CE.js → fleet-FVAUMKUT.js} +22 -22
- package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-LS4LZJDR.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-RFTERD4K.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
- package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-PHL3F2PR.js} +2 -2
- package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-GYJ6D4QM.js} +30 -30
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-ZIMM647V.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
- package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-VOMBXJXG.js} +2 -2
- package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-PSMUBWK5.js} +26 -25
- package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
- package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-2YNTFBWJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-XHJDPVAZ.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
- package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-GNSIDRNG.js} +3 -3
- package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-LQDM7IU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
- package/dist/cli/chunks/{load-HPHKDGGL.js → load-YATHI72E.js} +2 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
- package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-4Y6GDLYK.js} +2 -2
- package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-OUW3L7H2.js} +5 -5
- package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
- package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-UBZJXAD2.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-AMMNWVH5.js} +2 -2
- package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-Y44WDOER.js} +19 -19
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-ESR42RME.js} +2 -2
- package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-EDTS6OSC.js} +2 -2
- package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-5WONJSUX.js} +2 -2
- package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-IJXPCLD4.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
- package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
- package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
- package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-DRD3GVNW.js} +2 -2
- package/dist/cli/chunks/{prove-H52QGC6B.js → prove-KTGW2HMJ.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
- package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-DV2WPRRS.js} +2 -2
- package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-HFUAFVZC.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
- package/dist/cli/chunks/{real-embeddings-RWGOVOXO.js → real-embeddings-RQRVOKVM.js} +2 -2
- package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-QWSKS5OY.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-RBAYRCHX.js} +2 -2
- package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
- package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
- package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-FMPP3XKO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-KZZT4HWF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
- package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
- package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
- package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
- package/dist/cli/chunks/{security-VSPNKCDS.js → security-CUEA3UIM.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
- package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-IAHA3M6B.js} +2 -2
- package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-AFUCASTX.js} +2 -2
- package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-AQRV6JJ6.js} +2 -2
- package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-GX7FMJHL.js} +2 -2
- package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-XW5TLZ7M.js} +2 -2
- package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-TFKVUTNF.js} +2 -2
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
- package/dist/cli/chunks/{test-UWA377D4.js → test-D2XDJNDX.js} +11 -11
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
- package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-TS6I2PR7.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-HBBLPCZ3.js} +2 -2
- package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-3MBUX4PR.js} +2 -2
- package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-ZWMQO3L2.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
- package/dist/cli/chunks/{types-PJS2FGPF.js → types-5YEMGPSQ.js} +2 -2
- package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
- package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
- package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-2TPBKIHI.js} +2 -2
- package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XRAXXFW6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-IYSCS3BZ.js} +2 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-U6XWFRVT.js} +2 -2
- package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
- package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-K7YX2AO6.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-YBNKMOP6.js} +2 -2
- package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-UAJUILFQ.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
- package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-AVZ3GPAL.js} +2 -2
- package/dist/cli/commands/fleet.js +4 -1
- package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
- package/dist/cli/commands/test.js +5 -2
- package/dist/cli/handlers/init-handler.d.ts +12 -0
- package/dist/cli/handlers/init-handler.js +27 -12
- package/dist/cli/utils/ci-output.d.ts +2 -0
- package/dist/cli/utils/ci-output.js +2 -0
- package/dist/cli/utils/progress.d.ts +16 -2
- package/dist/cli/utils/progress.js +31 -14
- package/dist/coordination/consensus/consensus-engine.js +3 -1
- package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
- package/dist/coordination/handlers/coverage-collection.js +3 -1
- package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
- package/dist/coordination/handlers/coverage-runner.js +6 -22
- package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
- package/dist/coordination/handlers/coverage-stderr.js +39 -0
- package/dist/coordination/handlers/coverage-target.js +6 -3
- package/dist/coordination/handlers/handler-utils.js +3 -1
- package/dist/coordination/handlers/requirements-handlers.js +3 -2
- package/dist/coordination/handlers/security-handlers.js +34 -20
- package/dist/coordination/queen-coordinator.js +8 -3
- package/dist/coordination/task-executability.d.ts +12 -0
- package/dist/coordination/task-executability.js +27 -0
- package/dist/coordination/workflow-orchestrator.d.ts +6 -0
- package/dist/coordination/workflow-orchestrator.js +22 -8
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
- package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
- package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
- package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
- package/dist/domains/learning-optimization/services/production-intel.js +3 -1
- package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
- package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
- package/dist/domains/security-compliance/services/security-auditor.js +3 -2
- package/dist/domains/test-execution/coordinator.d.ts +2 -1
- package/dist/domains/test-execution/coordinator.js +5 -14
- package/dist/domains/test-execution/interfaces.d.ts +11 -1
- package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
- package/dist/domains/test-execution/services/retry-outcome.js +53 -0
- package/dist/domains/test-generation/coordinator.js +2 -2
- package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
- package/dist/domains/test-generation/services/test-generator.js +2 -2
- package/dist/governance/evolution-pipeline-integration.js +3 -1
- package/dist/hooks/cross-phase-hooks.js +3 -1
- package/dist/init/init-wizard-steps.js +5 -1
- package/dist/init/phases/04-database.js +7 -0
- package/dist/init/phases/12-verification.js +14 -4
- package/dist/init/settings-merge.js +7 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +7 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
- package/dist/integrations/ruvector/filter-adapter.js +2 -1
- package/dist/learning/dream/insight-generator.js +5 -4
- package/dist/learning/memory-auditor.js +3 -1
- package/dist/learning/qe-patterns.js +2 -1
- package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
- package/dist/learning/real-qe-reasoning-bank.js +70 -38
- package/dist/mcp/bundle.js +486 -481
- package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
- package/dist/mcp/handlers/domain-handler-configs.js +8 -2
- package/dist/mcp/handlers/task-handlers.d.ts +13 -0
- package/dist/mcp/handlers/task-handlers.js +42 -16
- package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
- package/dist/mcp/protocol-server.js +8 -8
- package/dist/mcp/qe-tool-bridge.js +3 -0
- package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
- package/dist/mcp/services/reasoning-bank-service.js +4 -0
- package/dist/mcp/tool-annotations.js +4 -1
- package/dist/mcp/tools/coherence/check.js +1 -0
- package/dist/mcp/tools/coherence/consensus.js +4 -2
- package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
- package/dist/mcp/tools/mincut/index.js +3 -0
- package/dist/mcp/tools/quality-assessment/gate.js +7 -0
- package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
- package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
- package/dist/mcp/tools/security-compliance/scan.js +4 -2
- package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
- package/dist/mcp/tools/test-execution/execute.js +3 -2
- package/dist/memory/crdt/crdt-store.js +5 -0
- package/dist/memory/crdt/lww-register.js +12 -2
- package/dist/optimization/early-exit-token-optimizer.js +3 -1
- package/dist/planning/goap-planner.js +5 -0
- package/dist/planning/plan-executor.js +5 -0
- package/dist/shared/io/confined-read.d.ts +74 -0
- package/dist/shared/io/confined-read.js +256 -0
- package/dist/shared/io/file-reader.d.ts +6 -6
- package/dist/shared/io/file-reader.js +16 -42
- package/dist/shared/llm/providers/claude-code.js +4 -1
- package/dist/shared/native-module-errors.d.ts +51 -0
- package/dist/shared/native-module-errors.js +129 -0
- package/dist/shared/safe-db.js +14 -4
- package/dist/shared/security/osv-client.js +4 -1
- package/dist/shared/types/test-frameworks.js +2 -2
- package/dist/sync/readers/json-reader.js +2 -1
- package/dist/validation/anchor-set.d.ts +6 -0
- package/dist/validation/anchor-set.js +9 -1
- package/dist/validation/quality-gate-runner.d.ts +7 -1
- package/dist/validation/quality-gate-runner.js +3 -3
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
- package/dist/cli/chunks/base-GTB6POYE.js +0 -2
- package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
- package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
- package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
- package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
- package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
- package/dist/cli/chunks/chunk-DURHK377.js +0 -742
- package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
- package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
- package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
- package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
- package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
- package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
- package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
- package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
- package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
- package/dist/cli/chunks/client-POSVREVS.js +0 -2
- package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
- package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
- package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
- package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
- package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
- package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
- package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
- package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
- package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
- package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
- package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
- package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
- package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
- package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
- package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
- package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
- package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
- package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
- package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
- package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
- package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
- package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
- package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
- package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
- package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
- package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
- package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
- package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
- package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
|
@@ -21,6 +21,8 @@ export interface TestExecuteResult {
|
|
|
21
21
|
total: number;
|
|
22
22
|
passed: number;
|
|
23
23
|
failed: number;
|
|
24
|
+
/** #1170: tests that failed and then passed on a retry; counted in `passed`. */
|
|
25
|
+
flaky?: number;
|
|
24
26
|
duration: number;
|
|
25
27
|
/** Measured line coverage of the run, or null when none was collected (#1027 N5). */
|
|
26
28
|
coverage?: number | null;
|
|
@@ -15,6 +15,7 @@ import { buildRiskDecisionFromQualityGate, validateRiskDecision, } from '../../c
|
|
|
15
15
|
import { INSUFFICIENT_EVIDENCE, } from '../../domains/quality-assessment/quality-evidence.js';
|
|
16
16
|
import { validateRequestedMetrics, } from '../../domains/quality-assessment/evidence-sufficiency.js';
|
|
17
17
|
import { validateBehaviorExamples } from '../../domains/test-generation/services/behavior-example-validation.js';
|
|
18
|
+
import { DEFAULT_TEST_RETRY_COUNT } from '../../domains/test-execution/services/retry-outcome.js';
|
|
18
19
|
const SUPPORTED_LANGUAGES = Object.keys(DEFAULT_FRAMEWORKS);
|
|
19
20
|
/**
|
|
20
21
|
* Normalize a language string from MCP input. Returns the canonical
|
|
@@ -67,7 +68,7 @@ export const testGenerateConfig = {
|
|
|
67
68
|
let framework;
|
|
68
69
|
if (params.framework) {
|
|
69
70
|
framework = params.framework;
|
|
70
|
-
const fwLang = FRAMEWORK_TO_LANGUAGE[framework];
|
|
71
|
+
const fwLang = Object.hasOwn(FRAMEWORK_TO_LANGUAGE, framework) ? FRAMEWORK_TO_LANGUAGE[framework] : undefined; // #1157
|
|
71
72
|
if (fwLang && fwLang !== language) {
|
|
72
73
|
// typescript<->javascript is a soft compatibility — JS frameworks
|
|
73
74
|
// can target both. Treat as same family.
|
|
@@ -190,7 +191,8 @@ export const testExecuteConfig = {
|
|
|
190
191
|
testSuites: params.testSuites || [],
|
|
191
192
|
parallel: params.parallel !== false,
|
|
192
193
|
parallelism: params.parallelism || 4,
|
|
193
|
-
|
|
194
|
+
// #1170: the same default as `aqe test execute`.
|
|
195
|
+
retryCount: params.retryCount ?? DEFAULT_TEST_RETRY_COUNT,
|
|
194
196
|
timeout: params.timeout || 60000,
|
|
195
197
|
collectCoverage: params.collectCoverage || false,
|
|
196
198
|
reportFormat: params.reportFormat || 'json',
|
|
@@ -203,6 +205,8 @@ export const testExecuteConfig = {
|
|
|
203
205
|
const total = data.total || 0;
|
|
204
206
|
const passed = data.passed || 0;
|
|
205
207
|
const failed = data.failed || 0;
|
|
208
|
+
// #1170: tests that passed on a retry; already counted in `passed`.
|
|
209
|
+
const flaky = typeof data.flaky === 'number' && data.flaky > 0 ? data.flaky : undefined;
|
|
206
210
|
// #1027 N5: no measured coverage → null, never a hardcoded 0.
|
|
207
211
|
const coverage = typeof data.coverage === 'number' && Number.isFinite(data.coverage) ? data.coverage : null;
|
|
208
212
|
// #1110: report only what was measured. A figure with no measurement is
|
|
@@ -275,6 +279,7 @@ export const testExecuteConfig = {
|
|
|
275
279
|
summary: {
|
|
276
280
|
totalTests: total,
|
|
277
281
|
passRate: total > 0 ? (passed / total) * 100 : 0,
|
|
282
|
+
...(flaky !== undefined ? { flaky } : {}),
|
|
278
283
|
...(avgTestDuration !== undefined ? { avgDuration: avgTestDuration } : {}),
|
|
279
284
|
...(efficiency !== null ? { parallelEfficiency: efficiency } : {}),
|
|
280
285
|
},
|
|
@@ -285,6 +290,7 @@ export const testExecuteConfig = {
|
|
|
285
290
|
total,
|
|
286
291
|
passed,
|
|
287
292
|
failed,
|
|
293
|
+
...(flaky !== undefined ? { flaky } : {}),
|
|
288
294
|
duration,
|
|
289
295
|
coverage,
|
|
290
296
|
savedFiles,
|
|
@@ -35,6 +35,17 @@ export interface TaskOrchestrateParams {
|
|
|
35
35
|
requirements?: string[];
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* #1022: how learned patterns informed task_orchestrate.
|
|
40
|
+
* - 'vector': embedding similarity plus text matching
|
|
41
|
+
* - 'lexical-only': no embedding runtime; text matching only, no similarity
|
|
42
|
+
* scores, and experience guidance unavailable
|
|
43
|
+
* - 'unavailable': the ReasoningBank could not start; no learned guidance
|
|
44
|
+
*/
|
|
45
|
+
export interface OrchestrateLearningStatus {
|
|
46
|
+
patternSearch: 'vector' | 'lexical-only' | 'unavailable';
|
|
47
|
+
reason?: string;
|
|
48
|
+
}
|
|
38
49
|
export interface TaskOrchestrateResult {
|
|
39
50
|
taskId: string;
|
|
40
51
|
/** The task type submitted to the domain. */
|
|
@@ -57,6 +68,8 @@ export interface TaskOrchestrateResult {
|
|
|
57
68
|
rationale: string;
|
|
58
69
|
decisionTimeMs: number;
|
|
59
70
|
};
|
|
71
|
+
/** #1022: how learned patterns informed this orchestration */
|
|
72
|
+
learning: OrchestrateLearningStatus;
|
|
60
73
|
}
|
|
61
74
|
export declare function handleTaskOrchestrate(params: TaskOrchestrateParams): Promise<ToolResult<TaskOrchestrateResult>>;
|
|
62
75
|
export interface ModelRouteParams {
|
|
@@ -232,6 +232,39 @@ export async function handleTaskCancel(params) {
|
|
|
232
232
|
};
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* #1022: gather experience guidance and pattern hints for task_orchestrate.
|
|
237
|
+
* Learned guidance is optional: a missing embedder, or a ReasoningBank that
|
|
238
|
+
* cannot start, must not fail the orchestration. The returned status says
|
|
239
|
+
* which kind of matching produced the hints.
|
|
240
|
+
*/
|
|
241
|
+
async function getOrchestrateLearningContext(task, guidanceDomain, patternDomain) {
|
|
242
|
+
let service;
|
|
243
|
+
try {
|
|
244
|
+
service = await getReasoningBankService();
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
return {
|
|
248
|
+
experienceGuidance: null,
|
|
249
|
+
patternHintMatches: [],
|
|
250
|
+
learning: { patternSearch: 'unavailable', reason: toErrorMessage(error) },
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
const experienceGuidance = await service.getExperienceGuidance(task, guidanceDomain);
|
|
254
|
+
// Bring HNSW A (qe_patterns) into the routing decision alongside HNSW C
|
|
255
|
+
// (experienceGuidance). Without this, only past trajectories influenced
|
|
256
|
+
// routing — the catalog of consolidated long-term patterns was never
|
|
257
|
+
// consulted for new tasks. Fail-soft: empty array on error.
|
|
258
|
+
const patternHintMatches = await service
|
|
259
|
+
.searchPatternMatches(task, { limit: 5, domain: patternDomain })
|
|
260
|
+
.catch(() => []);
|
|
261
|
+
const status = service.getPatternSearchStatus();
|
|
262
|
+
return {
|
|
263
|
+
experienceGuidance,
|
|
264
|
+
patternHintMatches,
|
|
265
|
+
learning: { patternSearch: status.mode, ...(status.reason ? { reason: status.reason } : {}) },
|
|
266
|
+
};
|
|
267
|
+
}
|
|
235
268
|
export async function handleTaskOrchestrate(params) {
|
|
236
269
|
if (!isFleetInitialized()) {
|
|
237
270
|
return {
|
|
@@ -270,18 +303,7 @@ export async function handleTaskOrchestrate(params) {
|
|
|
270
303
|
},
|
|
271
304
|
});
|
|
272
305
|
// INTEGRATION FIX: Get ReasoningBank guidance for the task
|
|
273
|
-
const
|
|
274
|
-
const experienceGuidance = await reasoningBankService.getExperienceGuidance(params.task, params.context?.project);
|
|
275
|
-
// Bring HNSW A (qe_patterns) into the routing decision alongside HNSW C
|
|
276
|
-
// (experienceGuidance). Without this, only past trajectories influenced
|
|
277
|
-
// routing — the catalog of consolidated long-term patterns was never
|
|
278
|
-
// consulted for new tasks. Fail-soft: empty array on error.
|
|
279
|
-
const patternHintMatches = await reasoningBankService
|
|
280
|
-
.searchPatternMatches(params.task, {
|
|
281
|
-
limit: 5,
|
|
282
|
-
domain: params.context?.project ?? inferredDomain,
|
|
283
|
-
})
|
|
284
|
-
.catch(() => []);
|
|
306
|
+
const { experienceGuidance, patternHintMatches, learning } = await getOrchestrateLearningContext(params.task, params.context?.project, params.context?.project ?? inferredDomain);
|
|
285
307
|
// Parse task description to determine task type
|
|
286
308
|
const taskType = inferTaskType(params.task);
|
|
287
309
|
const priority = mapPriority(params.priority || 'medium');
|
|
@@ -355,6 +377,7 @@ export async function handleTaskOrchestrate(params) {
|
|
|
355
377
|
rationale: routingResult.decision.rationale,
|
|
356
378
|
decisionTimeMs: routingResult.decision.metadata.decisionTimeMs,
|
|
357
379
|
},
|
|
380
|
+
learning,
|
|
358
381
|
},
|
|
359
382
|
};
|
|
360
383
|
}
|
|
@@ -446,10 +469,12 @@ export async function handleTaskOrchestrate(params) {
|
|
|
446
469
|
}
|
|
447
470
|
// INTEGRATION FIX: Start trajectory tracking for learning
|
|
448
471
|
const taskId = result.value;
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
472
|
+
if (learning.patternSearch !== 'unavailable') {
|
|
473
|
+
await startTaskTrajectory(taskId, params.task, {
|
|
474
|
+
agent: 'queen-coordinator',
|
|
475
|
+
domain: params.context?.project,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
453
478
|
// Issue N1: Trajectory auto-close is handled by subscribeTrajectoryEvents(),
|
|
454
479
|
// which listens for TaskCompleted/TaskFailed on the event router.
|
|
455
480
|
// No per-task polling needed.
|
|
@@ -485,6 +510,7 @@ export async function handleTaskOrchestrate(params) {
|
|
|
485
510
|
rationale: routingResult.decision.rationale,
|
|
486
511
|
decisionTimeMs: routingResult.decision.metadata.decisionTimeMs,
|
|
487
512
|
},
|
|
513
|
+
learning,
|
|
488
514
|
},
|
|
489
515
|
};
|
|
490
516
|
}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Exposes the structured 13-step requirements validation pipeline
|
|
5
5
|
* as an MCP tool that users can invoke directly.
|
|
6
6
|
*/
|
|
7
|
-
import { readFileSync, existsSync } from 'fs';
|
|
8
7
|
import { runPipeline, formatPipelineReport } from '../../validation/pipeline.js';
|
|
9
8
|
import { createRequirementsPipeline, REQUIREMENTS_VALIDATION_STEPS } from '../../validation/steps/requirements.js';
|
|
10
9
|
import { toErrorMessage } from '../../shared/error-utils.js';
|
|
11
10
|
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../shared/io/payload-path-guard.js';
|
|
11
|
+
import { ConfinedReadError, readConfinedText } from '../../shared/io/confined-read.js';
|
|
12
12
|
/**
|
|
13
13
|
* Run the structured validation pipeline on a document.
|
|
14
14
|
*/
|
|
@@ -23,17 +23,17 @@ export async function handleValidationPipeline(params) {
|
|
|
23
23
|
const confined = await requirePayloadPath('validation_pipeline', 'filePath', params.filePath, { allowMissing: true, maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
24
24
|
if (!confined.success)
|
|
25
25
|
return { success: false, error: confined.error.message };
|
|
26
|
-
|
|
27
|
-
if (!existsSync(absPath)) {
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
error: `File not found: ${params.filePath}`,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
26
|
+
// #1161: read from the validated descriptor, not the name checked above.
|
|
33
27
|
try {
|
|
34
|
-
content =
|
|
28
|
+
content = await readConfinedText(confined.value, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
35
29
|
}
|
|
36
30
|
catch (readErr) {
|
|
31
|
+
if (readErr instanceof ConfinedReadError && readErr.reason === 'not-found') {
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
error: `File not found: ${params.filePath}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
37
|
return {
|
|
38
38
|
success: false,
|
|
39
39
|
error: `Failed to read file: ${toErrorMessage(readErr)}`,
|
|
@@ -627,7 +627,7 @@ export class MCPProtocolServer {
|
|
|
627
627
|
parameters: [
|
|
628
628
|
{ name: 'topology', type: 'string', description: 'Swarm topology type', enum: ['hierarchical', 'mesh', 'ring', 'adaptive'] },
|
|
629
629
|
{ name: 'maxAgents', type: 'number', description: 'Maximum number of agents', default: 15 },
|
|
630
|
-
{ name: 'enabledDomains', type: 'array', description: 'Domains to enable' },
|
|
630
|
+
{ name: 'enabledDomains', type: 'array', description: 'Domains to enable', items: { type: 'string' } },
|
|
631
631
|
{ name: 'lazyLoading', type: 'boolean', description: 'Enable lazy loading', default: true },
|
|
632
632
|
],
|
|
633
633
|
},
|
|
@@ -669,7 +669,7 @@ export class MCPProtocolServer {
|
|
|
669
669
|
parameters: [
|
|
670
670
|
{ name: 'type', type: 'string', description: 'Task type', required: true },
|
|
671
671
|
{ name: 'priority', type: 'string', description: 'Task priority', enum: ['p0', 'p1', 'p2', 'p3'], default: 'p1' },
|
|
672
|
-
{ name: 'targetDomains', type: 'array', description: 'Target domains (e.g. ["coverage-analysis"]); unknown domains are rejected' },
|
|
672
|
+
{ name: 'targetDomains', type: 'array', description: 'Target domains (e.g. ["coverage-analysis"]); unknown domains are rejected', items: { type: 'string' } },
|
|
673
673
|
{ name: 'payload', type: 'object', description: 'Task payload data' },
|
|
674
674
|
],
|
|
675
675
|
},
|
|
@@ -882,7 +882,7 @@ export class MCPProtocolServer {
|
|
|
882
882
|
description: `Execute test files in parallel with automatic retry on flaky failures. ${SAVE_RESULTS_HINT} Example: test_execute_parallel({ testFiles: ["tests/auth.test.ts"], parallel: true })`,
|
|
883
883
|
category: 'domain',
|
|
884
884
|
parameters: [
|
|
885
|
-
{ name: 'testFiles', type: 'array', description: 'Nonempty list of concrete test file paths (relative to the project working directory or absolute). Expand glob patterns before calling; glob patterns are rejected.' },
|
|
885
|
+
{ name: 'testFiles', type: 'array', description: 'Nonempty list of concrete test file paths (relative to the project working directory or absolute). Expand glob patterns before calling; glob patterns are rejected.', items: { type: 'string' } },
|
|
886
886
|
{ name: 'parallel', type: 'boolean', description: 'Enable parallel execution', default: true },
|
|
887
887
|
saveResultsParameter('test_execute_parallel'),
|
|
888
888
|
],
|
|
@@ -1110,7 +1110,7 @@ export class MCPProtocolServer {
|
|
|
1110
1110
|
category: 'memory',
|
|
1111
1111
|
parameters: [
|
|
1112
1112
|
{ name: 'sourceAgentId', type: 'string', description: 'Source agent ID', required: true },
|
|
1113
|
-
{ name: 'targetAgentIds', type: 'array', description: 'Target agent IDs', required: true },
|
|
1113
|
+
{ name: 'targetAgentIds', type: 'array', description: 'Target agent IDs', required: true, items: { type: 'string' } },
|
|
1114
1114
|
{ name: 'knowledgeDomain', type: 'string', description: 'Knowledge domain', required: true },
|
|
1115
1115
|
],
|
|
1116
1116
|
},
|
|
@@ -1127,7 +1127,7 @@ export class MCPProtocolServer {
|
|
|
1127
1127
|
parameters: [
|
|
1128
1128
|
{ name: 'task', type: 'string', description: 'Task description to analyze', required: true },
|
|
1129
1129
|
{ name: 'codeContext', type: 'string', description: 'Optional code context for complexity analysis' },
|
|
1130
|
-
{ name: 'filePaths', type: 'array', description: 'Optional file paths involved' },
|
|
1130
|
+
{ name: 'filePaths', type: 'array', description: 'Optional file paths involved', items: { type: 'string' } },
|
|
1131
1131
|
{ name: 'manualTier', type: 'number', description: 'Manual tier override (0-4)' },
|
|
1132
1132
|
{ name: 'isCritical', type: 'boolean', description: 'Mark as critical task (allows budget overrides)' },
|
|
1133
1133
|
{ name: 'agentType', type: 'string', description: 'Agent type making the request' },
|
|
@@ -1194,7 +1194,7 @@ export class MCPProtocolServer {
|
|
|
1194
1194
|
description: 'Trigger infrastructure recovery for detected failures and optionally re-run affected tests. Example: infra_healing_recover({ services: ["postgres"], rerunTests: true })',
|
|
1195
1195
|
category: 'infra-healing',
|
|
1196
1196
|
parameters: [
|
|
1197
|
-
{ name: 'services', type: 'array', description: 'Specific services to recover (empty = all failing)' },
|
|
1197
|
+
{ name: 'services', type: 'array', description: 'Specific services to recover (empty = all failing)', items: { type: 'string' } },
|
|
1198
1198
|
{ name: 'rerunTests', type: 'boolean', description: 'Re-run affected tests after recovery', default: true },
|
|
1199
1199
|
],
|
|
1200
1200
|
},
|
|
@@ -1283,7 +1283,7 @@ export class MCPProtocolServer {
|
|
|
1283
1283
|
category: 'cross-phase',
|
|
1284
1284
|
isConcurrencySafe: true,
|
|
1285
1285
|
parameters: [
|
|
1286
|
-
{ name: 'signals', type: 'array', description: 'Signals to format', required: true },
|
|
1286
|
+
{ name: 'signals', type: 'array', description: 'Signals to format', required: true, items: { type: 'object' } },
|
|
1287
1287
|
],
|
|
1288
1288
|
},
|
|
1289
1289
|
handler: (params) => handleFormatSignals(params),
|
|
@@ -1309,7 +1309,7 @@ export class MCPProtocolServer {
|
|
|
1309
1309
|
{ name: 'filePath', type: 'string', description: 'Path to the document to validate' },
|
|
1310
1310
|
{ name: 'content', type: 'string', description: 'Inline content to validate (alternative to filePath)' },
|
|
1311
1311
|
{ name: 'pipeline', type: 'string', description: 'Pipeline type (default: requirements)', default: 'requirements' },
|
|
1312
|
-
{ name: 'steps', type: 'array', description: 'Specific step IDs to run (default: all 13)' },
|
|
1312
|
+
{ name: 'steps', type: 'array', description: 'Specific step IDs to run (default: all 13)', items: { type: 'string' } },
|
|
1313
1313
|
{ name: 'continueOnFailure', type: 'boolean', description: 'Continue past blocking failures', default: false },
|
|
1314
1314
|
{ name: 'format', type: 'string', description: 'Output format: markdown or json', default: 'json' },
|
|
1315
1315
|
],
|
|
@@ -46,6 +46,9 @@ function schemaToParameters(tool) {
|
|
|
46
46
|
required: requiredSet.has(name) || undefined,
|
|
47
47
|
default: prop.default,
|
|
48
48
|
enum: prop.enum,
|
|
49
|
+
// #1185: keep the element schema; clients such as VS Code Copilot
|
|
50
|
+
// reject a tool whose array parameter has no items.
|
|
51
|
+
items: prop.items,
|
|
49
52
|
});
|
|
50
53
|
}
|
|
51
54
|
return params;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - Synchronous learning (no fire-and-forget)
|
|
13
13
|
*/
|
|
14
14
|
import { type Trajectory, type TrajectoryStep as TrackerTrajectoryStep, type TrajectoryOptions, type ExperienceGuidance, type EnhancedReasoningBankAdapterStats } from '../../integrations/agentic-flow/reasoning-bank/index.js';
|
|
15
|
-
import { type RealQERoutingRequest, type RealQERoutingResult, type RealQEReasoningBankStats, type RealQEPatternSearchResult } from '../../learning/real-qe-reasoning-bank.js';
|
|
15
|
+
import { type RealQERoutingRequest, type RealQERoutingResult, type RealQEReasoningBankStats, type PatternSearchStatus, type RealQEPatternSearchResult } from '../../learning/real-qe-reasoning-bank.js';
|
|
16
16
|
import type { QEPattern, QEDomain } from '../../learning/qe-patterns.js';
|
|
17
17
|
/**
|
|
18
18
|
* Task outcome record for learning
|
|
@@ -208,6 +208,8 @@ export declare class ReasoningBankService {
|
|
|
208
208
|
limit?: number;
|
|
209
209
|
domain?: QEDomain;
|
|
210
210
|
}): Promise<RealQEPatternSearchResult[]>;
|
|
211
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
212
|
+
getPatternSearchStatus(): PatternSearchStatus;
|
|
211
213
|
/**
|
|
212
214
|
* Get service statistics
|
|
213
215
|
*/
|
|
@@ -515,6 +515,10 @@ export class ReasoningBankService {
|
|
|
515
515
|
return [];
|
|
516
516
|
}
|
|
517
517
|
}
|
|
518
|
+
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
519
|
+
getPatternSearchStatus() {
|
|
520
|
+
return this.enhancedAdapter.getPatternSearchStatus();
|
|
521
|
+
}
|
|
518
522
|
/**
|
|
519
523
|
* Get service statistics
|
|
520
524
|
*/
|
|
@@ -58,7 +58,10 @@ function conservativeDisposition() {
|
|
|
58
58
|
export const BUILT_IN_TOOL_SAFETY_INVENTORY = Object.freeze(Object.fromEntries(BUILT_IN_TOOL_NAMES.map((name) => [name, conservativeDisposition()])));
|
|
59
59
|
/** Resolve explicit metadata over inventory metadata over conservative defaults. */
|
|
60
60
|
export function resolveToolAnnotations(name, annotations) {
|
|
61
|
-
|
|
61
|
+
// #1157: own entries only; a tool named `constructor` is not in the inventory.
|
|
62
|
+
const reviewedDisposition = Object.hasOwn(BUILT_IN_TOOL_SAFETY_INVENTORY, name)
|
|
63
|
+
? BUILT_IN_TOOL_SAFETY_INVENTORY[name]
|
|
64
|
+
: undefined;
|
|
62
65
|
return Object.freeze({
|
|
63
66
|
...(reviewedDisposition?.annotations ?? CONSERVATIVE_TOOL_ANNOTATIONS),
|
|
64
67
|
// Dynamic and plugin-supplied names cannot self-assert optimistic hints.
|
|
@@ -19,6 +19,7 @@ const COHERENCE_CHECK_SCHEMA = {
|
|
|
19
19
|
nodes: {
|
|
20
20
|
type: 'array',
|
|
21
21
|
description: 'Array of nodes to check for coherence. Each node must have an id and embedding vector.',
|
|
22
|
+
items: { type: 'object', description: 'Node with id, embedding vector, optional weight and metadata' },
|
|
22
23
|
},
|
|
23
24
|
energyThreshold: {
|
|
24
25
|
type: 'number',
|
|
@@ -54,11 +54,13 @@ const COHERENCE_CONSENSUS_SCHEMA = {
|
|
|
54
54
|
agentId: { type: 'string', description: 'Agent identifier', minLength: 1 },
|
|
55
55
|
agentType: { type: 'string', description: 'Agent type (default: worker)' },
|
|
56
56
|
// `verdict` may be a string, number, or boolean, which this schema
|
|
57
|
-
// type cannot express
|
|
57
|
+
// type cannot express. It is required, but checked in execute():
|
|
58
|
+
// listing it in `required` without a property is invalid in strict
|
|
59
|
+
// JSON Schema (#1185).
|
|
58
60
|
confidence: { type: 'number', description: 'Confidence in the verdict', minimum: 0, maximum: 1 },
|
|
59
61
|
reasoning: { type: 'string', description: 'Optional reasoning text' },
|
|
60
62
|
},
|
|
61
|
-
required: ['agentId', '
|
|
63
|
+
required: ['agentId', 'confidence'],
|
|
62
64
|
},
|
|
63
65
|
},
|
|
64
66
|
confidenceThreshold: {
|
|
@@ -318,6 +318,7 @@ export class LearningOptimizeTool extends MCPToolBase {
|
|
|
318
318
|
// Not enough data - recommend default strategy
|
|
319
319
|
const contextForRecommendation = {
|
|
320
320
|
tags: [targetDomain, objective.metric],
|
|
321
|
+
objective: { metric: objective.metric, direction: objective.direction },
|
|
321
322
|
};
|
|
322
323
|
const recommendResult = await metricsOptimizer.recommendStrategy(contextForRecommendation);
|
|
323
324
|
if (!recommendResult.success)
|
|
@@ -362,7 +363,6 @@ export class LearningOptimizeTool extends MCPToolBase {
|
|
|
362
363
|
let sourcePatterns = 0;
|
|
363
364
|
let transferredPatterns = 0;
|
|
364
365
|
let adaptedPatterns = 0;
|
|
365
|
-
let totalRelevance = 0;
|
|
366
366
|
if (queryResult.success) {
|
|
367
367
|
sourcePatterns = queryResult.value.length;
|
|
368
368
|
// Transfer each piece of knowledge to target domain
|
|
@@ -370,7 +370,6 @@ export class LearningOptimizeTool extends MCPToolBase {
|
|
|
370
370
|
const transferResult = await transferSpecialist.transferKnowledge(knowledge, targetDomain);
|
|
371
371
|
if (transferResult.success) {
|
|
372
372
|
transferredPatterns++;
|
|
373
|
-
totalRelevance += transferResult.value.relevanceScore;
|
|
374
373
|
// Count as adapted if relevance changed significantly
|
|
375
374
|
if (Math.abs(transferResult.value.relevanceScore - knowledge.relevanceScore) > 0.1) {
|
|
376
375
|
adaptedPatterns++;
|
|
@@ -39,10 +39,12 @@ export class MinCutHealthTool extends MCPToolBase {
|
|
|
39
39
|
agents: {
|
|
40
40
|
type: 'array',
|
|
41
41
|
description: 'Agent vertices to add to the graph before analysis',
|
|
42
|
+
items: { type: 'object', description: 'Agent vertex { id, domain, weight? }' },
|
|
42
43
|
},
|
|
43
44
|
edges: {
|
|
44
45
|
type: 'array',
|
|
45
46
|
description: 'Edges to add between agents',
|
|
47
|
+
items: { type: 'object', description: 'Edge { source, target, weight? }' },
|
|
46
48
|
},
|
|
47
49
|
includeWeakVertices: {
|
|
48
50
|
type: 'boolean',
|
|
@@ -210,6 +212,7 @@ export class MinCutStrengthenTool extends MCPToolBase {
|
|
|
210
212
|
targetVertices: {
|
|
211
213
|
type: 'array',
|
|
212
214
|
description: 'Specific vertices to strengthen',
|
|
215
|
+
items: { type: 'string', description: 'Vertex ID' },
|
|
213
216
|
},
|
|
214
217
|
apply: {
|
|
215
218
|
type: 'boolean',
|
|
@@ -13,6 +13,8 @@ import { MCPToolBase } from '../base.js';
|
|
|
13
13
|
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
14
14
|
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../../shared/io/payload-path-guard.js';
|
|
15
15
|
import { findProjectRoot } from '../../../kernel/project-root.js';
|
|
16
|
+
import { readConfinedText } from '../../../shared/io/confined-read.js';
|
|
17
|
+
import { parseAnchorSet } from '../../../validation/anchor-set.js';
|
|
16
18
|
import { getLLMRouter } from '../base.js';
|
|
17
19
|
import { runQualityGate, } from '../../../validation/quality-gate-runner.js';
|
|
18
20
|
import { createRouterFrontierJudge, createUnavailableJudge, } from '../../../validation/frontier-judge.js';
|
|
@@ -37,11 +39,15 @@ export class QualityGateTool extends MCPToolBase {
|
|
|
37
39
|
// #1126: a caller-named anchor must be a regular file inside the project
|
|
38
40
|
// (relative paths resolve against the project root, as the runner does).
|
|
39
41
|
let anchorPath;
|
|
42
|
+
let anchor;
|
|
40
43
|
if (params.anchorPath !== undefined) {
|
|
41
44
|
const confined = await requirePayloadPath('qe/quality/gate', 'anchorPath', params.anchorPath, { basePath: findProjectRoot(), maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
42
45
|
if (!confined.success)
|
|
43
46
|
return { success: false, error: confined.error.message };
|
|
44
47
|
anchorPath = confined.value;
|
|
48
|
+
// #1161: the runner gets the anchor read from the validated descriptor,
|
|
49
|
+
// so a file swapped after the check is never read by name.
|
|
50
|
+
anchor = parseAnchorSet(await readConfinedText(anchorPath, { maxBytes: MAX_PAYLOAD_FILE_BYTES }), params.anchorPath);
|
|
45
51
|
}
|
|
46
52
|
const router = await getLLMRouter(context);
|
|
47
53
|
const judge = router
|
|
@@ -59,6 +65,7 @@ export class QualityGateTool extends MCPToolBase {
|
|
|
59
65
|
checklistId: params.checklistId,
|
|
60
66
|
judge,
|
|
61
67
|
anchorPath,
|
|
68
|
+
anchor,
|
|
62
69
|
verificationManifest: params.verificationManifest,
|
|
63
70
|
});
|
|
64
71
|
return { success: true, data: result };
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { MCPToolBase } from '../base.js';
|
|
15
15
|
import { createQualityCriteriaService, HTSM_CATEGORIES, NEVER_OMIT_CATEGORIES, } from '../../../domains/requirements-validation/index.js';
|
|
16
|
-
import { existsSync, readFileSync } from 'fs';
|
|
17
16
|
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
18
17
|
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../../shared/io/payload-path-guard.js';
|
|
18
|
+
import { ConfinedReadError, readConfinedText } from '../../../shared/io/confined-read.js';
|
|
19
19
|
// ============================================================================
|
|
20
20
|
// Tool Implementation
|
|
21
21
|
// ============================================================================
|
|
@@ -128,8 +128,15 @@ export class QualityCriteriaTool extends MCPToolBase {
|
|
|
128
128
|
const confined = await requirePayloadPath('quality-criteria', 'epicPath', epicPath, { allowMissing: true, maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
129
129
|
if (!confined.success)
|
|
130
130
|
return { success: false, error: confined.error.message };
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
// #1161: read from the validated descriptor; a missing file stays empty.
|
|
132
|
+
try {
|
|
133
|
+
content = await readConfinedText(confined.value, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
|
|
134
|
+
}
|
|
135
|
+
catch (readErr) {
|
|
136
|
+
if (!(readErr instanceof ConfinedReadError) || readErr.reason !== 'not-found') {
|
|
137
|
+
return { success: false, error: toErrorMessage(readErr) };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
133
140
|
}
|
|
134
141
|
if (!content && !epicPath) {
|
|
135
142
|
return {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { MCPToolBase, getMemoryBackend } from '../base.js';
|
|
11
11
|
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
12
12
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
13
|
+
import { getOwn } from '../../../shared/utils/safe-record.js';
|
|
13
14
|
import { ALL_SECURITY_PATTERNS, SECRET_PATTERNS, } from '../../../domains/security-compliance/services/scanners/security-patterns.js';
|
|
14
15
|
import { writeQualityEvidence } from '../../../domains/quality-assessment/quality-evidence.js';
|
|
15
16
|
// ============================================================================
|
|
@@ -460,7 +461,8 @@ const KNOWN_VULNERABLE_NPM = {
|
|
|
460
461
|
function checkKnownVulnerableDeps(deps, manifest) {
|
|
461
462
|
const vulns = [];
|
|
462
463
|
for (const [name, version] of Object.entries(deps)) {
|
|
463
|
-
|
|
464
|
+
// #1157: a dependency named `constructor` is a package, not a table entry.
|
|
465
|
+
const known = getOwn(KNOWN_VULNERABLE_NPM, name);
|
|
464
466
|
if (known) {
|
|
465
467
|
const cleanVersion = version.replace(/^[\^~>=<]+/, '');
|
|
466
468
|
if (compareVersions(cleanVersion, known.maxSafe) < 0) {
|
|
@@ -512,7 +514,7 @@ function extractRequirementsTxtDeps(content) {
|
|
|
512
514
|
function checkKnownVulnerablePythonDeps(deps, manifest) {
|
|
513
515
|
const vulns = [];
|
|
514
516
|
for (const dep of deps) {
|
|
515
|
-
const known = KNOWN_VULNERABLE_PYTHON
|
|
517
|
+
const known = getOwn(KNOWN_VULNERABLE_PYTHON, dep);
|
|
516
518
|
if (known) {
|
|
517
519
|
vulns.push({
|
|
518
520
|
id: `DEP-py-${dep}-${known.cve}`,
|
|
@@ -130,7 +130,7 @@ const E2E_EXECUTE_SCHEMA = {
|
|
|
130
130
|
name: { type: 'string', description: 'Test case name' },
|
|
131
131
|
description: { type: 'string', description: 'Test case description' },
|
|
132
132
|
baseUrl: { type: 'string', description: 'Base URL for the test' },
|
|
133
|
-
steps: { type: 'array', description: 'Test steps to execute' },
|
|
133
|
+
steps: { type: 'array', description: 'Test steps to execute', items: { type: 'object', description: 'Test step' } },
|
|
134
134
|
viewport: {
|
|
135
135
|
type: 'object',
|
|
136
136
|
description: 'Browser viewport configuration',
|
|
@@ -149,7 +149,7 @@ const E2E_EXECUTE_SCHEMA = {
|
|
|
149
149
|
id: { type: 'string', description: 'Test suite ID' },
|
|
150
150
|
name: { type: 'string', description: 'Test suite name' },
|
|
151
151
|
description: { type: 'string', description: 'Test suite description' },
|
|
152
|
-
testCases: { type: 'array', description: 'Test cases in the suite' },
|
|
152
|
+
testCases: { type: 'array', description: 'Test cases in the suite', items: { type: 'object', description: 'Test case' } },
|
|
153
153
|
parallel: { type: 'boolean', description: 'Run tests in parallel' },
|
|
154
154
|
maxWorkers: { type: 'number', description: 'Maximum parallel workers' },
|
|
155
155
|
},
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { MCPToolBase } from '../base.js';
|
|
10
10
|
import { toErrorMessage } from '../../../shared/error-utils.js';
|
|
11
11
|
import { secureRandom, secureRandomFloat } from '../../../shared/utils/crypto-random.js';
|
|
12
|
+
import { DEFAULT_TEST_RETRY_COUNT } from '../../../domains/test-execution/services/retry-outcome.js';
|
|
12
13
|
// ============================================================================
|
|
13
14
|
// Tool Implementation
|
|
14
15
|
// ============================================================================
|
|
@@ -22,7 +23,7 @@ export class TestExecuteTool extends MCPToolBase {
|
|
|
22
23
|
timeout: 300000,
|
|
23
24
|
};
|
|
24
25
|
async execute(params, context) {
|
|
25
|
-
const { testFiles = [], testSuites = [], pattern, parallel = true, parallelism = 4, retryCount =
|
|
26
|
+
const { testFiles = [], testSuites = [], pattern, parallel = true, parallelism = 4, retryCount = DEFAULT_TEST_RETRY_COUNT, collectCoverage = false, failFast = false, } = params;
|
|
26
27
|
const startTime = Date.now();
|
|
27
28
|
try {
|
|
28
29
|
// Determine files to test
|
|
@@ -164,7 +165,7 @@ const TEST_EXECUTE_SCHEMA = {
|
|
|
164
165
|
description: 'Number of retries for failed tests',
|
|
165
166
|
minimum: 0,
|
|
166
167
|
maximum: 5,
|
|
167
|
-
default:
|
|
168
|
+
default: DEFAULT_TEST_RETRY_COUNT,
|
|
168
169
|
},
|
|
169
170
|
timeout: {
|
|
170
171
|
type: 'number',
|
|
@@ -309,6 +309,9 @@ export function createCRDTStore(config) {
|
|
|
309
309
|
applyState(incoming) {
|
|
310
310
|
// Apply registers
|
|
311
311
|
for (const [key, state] of Object.entries(incoming.registers)) {
|
|
312
|
+
// One malformed peer entry must not block unrelated state from converging.
|
|
313
|
+
if (typeof state?.timestamp !== 'number' || !Number.isFinite(state.timestamp))
|
|
314
|
+
continue;
|
|
312
315
|
if (!registers.has(key)) {
|
|
313
316
|
registers.set(key, createLWWRegisterFromState(nodeId, state));
|
|
314
317
|
}
|
|
@@ -431,6 +434,8 @@ export function createCRDTStore(config) {
|
|
|
431
434
|
// Apply delta similar to full state, but only for included keys
|
|
432
435
|
if (delta.registers) {
|
|
433
436
|
for (const [key, state] of Object.entries(delta.registers)) {
|
|
437
|
+
if (typeof state?.timestamp !== 'number' || !Number.isFinite(state.timestamp))
|
|
438
|
+
continue;
|
|
434
439
|
if (!registers.has(key)) {
|
|
435
440
|
registers.set(key, createLWWRegisterFromState(nodeId, state));
|
|
436
441
|
}
|
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module memory/crdt/lww-register
|
|
9
9
|
*/
|
|
10
|
+
function assertFiniteTimestamp(timestamp) {
|
|
11
|
+
if (!Number.isFinite(timestamp)) {
|
|
12
|
+
throw new RangeError('LWW register timestamp must be a finite number');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
10
15
|
// =============================================================================
|
|
11
16
|
// LWW Register Implementation
|
|
12
17
|
// =============================================================================
|
|
@@ -26,10 +31,12 @@
|
|
|
26
31
|
* ```
|
|
27
32
|
*/
|
|
28
33
|
export function createLWWRegister(nodeId, initialValue, initialTimestamp) {
|
|
34
|
+
const timestamp = initialTimestamp ?? (initialValue !== undefined ? Date.now() : 0);
|
|
35
|
+
assertFiniteTimestamp(timestamp);
|
|
29
36
|
// Internal state
|
|
30
37
|
let state = {
|
|
31
38
|
value: initialValue,
|
|
32
|
-
timestamp
|
|
39
|
+
timestamp,
|
|
33
40
|
nodeId: initialValue !== undefined ? nodeId : '',
|
|
34
41
|
version: initialValue !== undefined ? 1 : 0,
|
|
35
42
|
lastUpdated: Date.now(),
|
|
@@ -51,6 +58,7 @@ export function createLWWRegister(nodeId, initialValue, initialTimestamp) {
|
|
|
51
58
|
},
|
|
52
59
|
set(value, timestamp) {
|
|
53
60
|
let ts = timestamp ?? Date.now();
|
|
61
|
+
assertFiniteTimestamp(ts);
|
|
54
62
|
// Without an explicit timestamp the write means "now": a second write by
|
|
55
63
|
// this node within one clock tick (or after a backwards clock step) must
|
|
56
64
|
// still supersede its own earlier write, not tie with it and be dropped.
|
|
@@ -88,6 +96,8 @@ export function createLWWRegister(nodeId, initialValue, initialTimestamp) {
|
|
|
88
96
|
// (0) would otherwise beat a real write at a negative timestamp.
|
|
89
97
|
if (incoming.version === 0)
|
|
90
98
|
return;
|
|
99
|
+
// NaN breaks total ordering; infinity would permanently outrank finite writes.
|
|
100
|
+
assertFiniteTimestamp(incoming.timestamp);
|
|
91
101
|
// Only update if incoming timestamp wins
|
|
92
102
|
if (state.version === 0 ||
|
|
93
103
|
compareTimestamps(incoming.timestamp, incoming.nodeId, state.timestamp, state.nodeId) > 0) {
|
|
@@ -134,7 +144,7 @@ export function isLWWRegisterState(value) {
|
|
|
134
144
|
return false;
|
|
135
145
|
}
|
|
136
146
|
const state = value;
|
|
137
|
-
return (typeof state.timestamp === 'number' &&
|
|
147
|
+
return (typeof state.timestamp === 'number' && Number.isFinite(state.timestamp) &&
|
|
138
148
|
typeof state.nodeId === 'string' &&
|
|
139
149
|
typeof state.version === 'number' &&
|
|
140
150
|
typeof state.lastUpdated === 'number' &&
|