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.
Files changed (482) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +114 -0
  3. package/README.md +8 -0
  4. package/assets/skills/skills-manifest.json +1 -1
  5. package/dist/adapters/a2a/agent-cards/generator.js +6 -3
  6. package/dist/adapters/a2a/tasks/task-router.js +3 -1
  7. package/dist/adapters/trajectory-adapter.js +1 -1
  8. package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
  9. package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
  10. package/dist/agents/overlay-loader.js +26 -21
  11. package/dist/cli/bundle.js +6 -6
  12. package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-TIDSQ3ZK.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-G3EPBVA7.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-ARC5C7GW.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
  17. package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-36DTATJV.js} +4 -4
  18. package/dist/cli/chunks/{arena-EKOOFVST.js → arena-K4I4QDXB.js} +2 -2
  19. package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-WQSJSJZF.js} +3 -3
  20. package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BB4K67MT.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-CU3GOIU3.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-NJQX7ZNB.js} +2 -2
  24. package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-6YJF4FQW.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
  26. package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-25P77WA5.js} +1 -1
  27. package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-2CW7VRPH.js} +8 -8
  28. package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
  29. package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-2KFFEKSI.js} +2 -2
  30. package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-2VLYUF7U.js} +2 -2
  31. package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-325QCVDI.js} +2 -2
  32. package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-35M2X3C5.js} +2 -2
  33. package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-3RHOPP7A.js} +1 -1
  34. package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-4HJKQIX5.js} +2 -2
  35. package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
  36. package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-4RAQ7PJA.js} +2 -2
  37. package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4RH5I24Q.js} +2 -2
  38. package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-4UBVAJFO.js} +3 -3
  39. package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-4UX35V7P.js} +2 -2
  40. package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-4X4MWMHB.js} +2 -2
  41. package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-55CH76ZO.js} +3 -3
  42. package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-57LNKSW7.js} +2 -2
  43. package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
  44. package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-5HQP4SLM.js} +2 -2
  45. package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-5MNASJOH.js} +2 -2
  46. package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-5MTWCCZJ.js} +2 -2
  47. package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-5N25I53C.js} +2 -2
  48. package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-5WYZHDIZ.js} +1 -1
  49. package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-5YLOLACR.js} +2 -2
  50. package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-672XOJDG.js} +1 -1
  51. package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-6NA3KZZT.js} +3 -3
  52. package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
  53. package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-76SNL7GU.js} +2 -2
  54. package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-7HEMJHPP.js} +2 -2
  55. package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7R5HC56U.js} +1 -1
  56. package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-AFFN6E6Q.js} +2 -2
  57. package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-AMZKAJLJ.js} +2 -2
  58. package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-AP3ADWDK.js} +2 -2
  59. package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-APPZATXA.js} +2 -2
  60. package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-AUUJBXWX.js} +2 -2
  61. package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-BTVWA35P.js} +2 -2
  62. package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-BZPE3LDO.js} +2 -2
  63. package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-CFWGGRE7.js} +1 -1
  64. package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-CIAL4YRY.js} +2 -2
  65. package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-CO3DX2AX.js} +2 -2
  66. package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-DDEOZPWJ.js} +2 -2
  67. package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-DOBZPSKE.js} +1 -1
  68. package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-DOFREOPQ.js} +2 -2
  69. package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-E44NNCEU.js} +2 -2
  70. package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-E6PF35JZ.js} +2 -2
  71. package/dist/cli/chunks/{chunk-4SJYIX54.js → chunk-EBPJY4DI.js} +2 -2
  72. package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-EH2S6AOR.js} +2 -2
  73. package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-EIDJNT5C.js} +1 -1
  74. package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-EJPK7OTR.js} +2 -2
  75. package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-EK5GMOSO.js} +1 -1
  76. package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-ERN43HOX.js} +151 -149
  77. package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-ETVAYGCB.js} +11 -11
  78. package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-EWPUQCN4.js} +2 -2
  79. package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-FL32MTKT.js} +2 -2
  80. package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
  81. package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-FUYOOKTH.js} +5 -5
  82. package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FWSGPE3V.js} +3 -3
  83. package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-FZHSG75I.js} +2 -2
  84. package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-G2IJFNZS.js} +2 -2
  85. package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-G4CKPWF6.js} +1 -1
  86. package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-G4FAPO57.js} +2 -2
  87. package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-G77MLBDF.js} +2 -2
  88. package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-GBFUANTC.js} +1 -1
  89. package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-GVKVJJQX.js} +2 -2
  90. package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-GWJWSLDA.js} +2 -2
  91. package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-H43AFUKL.js} +2 -2
  92. package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
  93. package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-HDJUYAZG.js} +1 -1
  94. package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-HDNWSKHA.js} +2 -2
  95. package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-HFFPYC4G.js} +2 -2
  96. package/dist/cli/chunks/{chunk-WSF24I3D.js → chunk-HJ3XNTTJ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-HYXUN7BW.js} +1 -1
  98. package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-I36CRDHF.js} +2 -2
  99. package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-I4K2HTQU.js} +1 -1
  100. package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-IENZSO3K.js} +2 -2
  101. package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
  102. package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-IOZRKXR5.js} +2 -2
  103. package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-ITL3IN2E.js} +2 -2
  104. package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-ITPGWGQS.js} +14 -14
  105. package/dist/cli/chunks/{chunk-NSHU347M.js → chunk-IW6WDGHM.js} +1 -1
  106. package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-J4JMCZVA.js} +2 -2
  107. package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-JFLU7L3W.js} +2 -2
  108. package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-JGJXXAS6.js} +4 -4
  109. package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-JUMICXM6.js} +2 -2
  110. package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-K2HBNYAZ.js} +2 -2
  111. package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-K7V2WZNF.js} +1 -1
  112. package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-KDI5JOYZ.js} +2 -2
  113. package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-KJCIMNHS.js} +1 -1
  114. package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-KKYO2NKV.js} +2 -2
  115. package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-KSE5TDM5.js} +2 -2
  116. package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-KSLLHFVY.js} +1 -1
  117. package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-KXS3Y2AX.js} +2 -2
  118. package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-LBX7M4LW.js} +2 -2
  119. package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-LCVEEII4.js} +2 -2
  120. package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-LD5CFK53.js} +32 -32
  121. package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-LPU6PAJE.js} +2 -2
  122. package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-LQ4NUC6Q.js} +2 -2
  123. package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
  124. package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-LXQ3B4RY.js} +2 -2
  125. package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-M5RQ6U3G.js} +2 -2
  126. package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-M5XYIQYZ.js} +2 -2
  127. package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
  128. package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-MIK4RBEH.js} +1 -1
  129. package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-NC6K7SCQ.js} +2 -2
  130. package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-NKTWKYHB.js} +2 -2
  131. package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-NPZOBSAN.js} +2 -2
  132. package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-NQZNMCZU.js} +2 -2
  133. package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-NT7JRHMH.js} +1 -1
  134. package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-NTB342NJ.js} +1 -1
  135. package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-O4JAKWWM.js} +13 -13
  136. package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-OD5D4LSZ.js} +2 -2
  137. package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-OH5V5EJW.js} +2 -2
  138. package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-OHR7C777.js} +2 -2
  139. package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-OURITHFV.js} +2 -2
  140. package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-OV5RPLKV.js} +2 -2
  141. package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-OYJC3YON.js} +2 -2
  142. package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-QDESWOZP.js} +2 -2
  143. package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
  144. package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-R5LGV6GZ.js} +2 -2
  145. package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-RBZCA7SD.js} +2 -2
  146. package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
  147. package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
  148. package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-RTY7VSZB.js} +2 -2
  149. package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-S6IYEBAI.js} +2 -2
  150. package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-SMVVAVN2.js} +2 -2
  151. package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-T5KHJ3J7.js} +5 -5
  152. package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-TCYSBC7Y.js} +1 -1
  153. package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-TFW7CCKS.js} +1 -1
  154. package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
  155. package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-U3LJNNVJ.js} +5 -5
  156. package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-UKKYMW3S.js} +2 -2
  157. package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-UMVSWQNB.js} +2 -2
  158. package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-UTTSH4NH.js} +3 -3
  159. package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-V5AADCBC.js} +1 -1
  160. package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-V7DA4HAK.js} +1 -1
  161. package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-VBK2YAYY.js} +2 -2
  162. package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-VEEYL2CZ.js} +2 -2
  163. package/dist/cli/chunks/{chunk-PPSAMXYN.js → chunk-VLD7Z2ED.js} +3 -3
  164. package/dist/cli/chunks/{chunk-N6PIIK6G.js → chunk-VO3DRK4P.js} +2 -2
  165. package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-VWUZSNVC.js} +1 -1
  166. package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-VYTILW4R.js} +2 -2
  167. package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-WCAVIJ64.js} +1 -1
  168. package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-WCVCOT4E.js} +2 -2
  169. package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-WM3SRRA6.js} +2 -2
  170. package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-X3PZCXWG.js} +1 -1
  171. package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-X4J73KP3.js} +1 -1
  172. package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-XDI5X3FR.js} +1 -1
  173. package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-XGBU3KEM.js} +2 -2
  174. package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-XGPTZUKQ.js} +2 -2
  175. package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-XJKZ7FTR.js} +2 -2
  176. package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-XNLIWQYE.js} +2 -2
  177. package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-XS2XF3YG.js} +6 -5
  178. package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
  179. package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-YBBT3YYG.js} +1 -1
  180. package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-YNOCQ2SL.js} +1 -1
  181. package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-YOCULVHR.js} +1 -1
  182. package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-YPX2TV3M.js} +1 -1
  183. package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-Z2EA7A4Z.js} +1 -1
  184. package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-ZMC543GI.js} +2 -2
  185. package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
  186. package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-ZP75ASUU.js} +1 -1
  187. package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-ZQHDA4O7.js} +1 -1
  188. package/dist/cli/chunks/{ci-MSKMVH5X.js → ci-6GUFAZMJ.js} +2 -2
  189. package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-J665XNOX.js} +2 -2
  190. package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-PEQQQWVD.js} +2 -2
  191. package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-HHB2JSKH.js} +2 -2
  192. package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-JKUJRWPN.js} +2 -2
  193. package/dist/cli/chunks/client-HL2COSFM.js +2 -0
  194. package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-Y77BWTAN.js} +2 -2
  195. package/dist/cli/chunks/{code-ZDJRIL3S.js → code-LV2HAGJY.js} +3 -3
  196. package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-4GKKSETB.js} +2 -2
  197. package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-WMKBYE5Y.js} +2 -2
  198. package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-SBGFAOIJ.js} +2 -2
  199. package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-AQHFIJXC.js} +2 -2
  200. package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-26AYFS2E.js} +2 -2
  201. package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4UD3DK55.js} +2 -2
  202. package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
  203. package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-TP4NZCG4.js} +2 -2
  204. package/dist/cli/chunks/{coverage-B7MCGNTE.js → coverage-B2KIXHAI.js} +3 -3
  205. package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
  206. package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-AVZEQZ4W.js} +2 -2
  207. package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-P574WWBW.js} +4 -4
  208. package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-XM2A7LQU.js} +3 -3
  209. package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
  210. package/dist/cli/chunks/{detect-56SKAGWX.js → detect-TYR7HT23.js} +2 -2
  211. package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-2DGVQGLS.js} +2 -2
  212. package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-RRA4ZOMF.js} +2 -2
  213. package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-IVZEZ5RB.js} +2 -2
  214. package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-DOBI67K6.js} +2 -2
  215. package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
  216. package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
  217. package/dist/cli/chunks/{eval-GNB574IM.js → eval-QV4LVPUF.js} +2 -2
  218. package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-DAPKT763.js} +3 -3
  219. package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-WVRFPHX7.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-DEFTUIYT.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-O7ZXDDCD.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
  223. package/dist/cli/chunks/{fleet-2Y3ZE6CE.js → fleet-FVAUMKUT.js} +22 -22
  224. package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-LS4LZJDR.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-RFTERD4K.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-PHL3F2PR.js} +2 -2
  231. package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-GYJ6D4QM.js} +30 -30
  232. package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-ZIMM647V.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
  236. package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-VOMBXJXG.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-PSMUBWK5.js} +26 -25
  238. package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
  239. package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-2YNTFBWJ.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-XHJDPVAZ.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
  243. package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-GNSIDRNG.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-LQDM7IU2.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
  246. package/dist/cli/chunks/{load-HPHKDGGL.js → load-YATHI72E.js} +2 -2
  247. package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
  248. package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-4Y6GDLYK.js} +2 -2
  249. package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-OUW3L7H2.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-UBZJXAD2.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-AMMNWVH5.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-Y44WDOER.js} +19 -19
  255. package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-ESR42RME.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-EDTS6OSC.js} +2 -2
  258. package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-5WONJSUX.js} +2 -2
  259. package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-IJXPCLD4.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
  261. package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-DRD3GVNW.js} +2 -2
  264. package/dist/cli/chunks/{prove-H52QGC6B.js → prove-KTGW2HMJ.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
  266. package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-DV2WPRRS.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-HFUAFVZC.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
  269. package/dist/cli/chunks/{real-embeddings-RWGOVOXO.js → real-embeddings-RQRVOKVM.js} +2 -2
  270. package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-QWSKS5OY.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-RBAYRCHX.js} +2 -2
  272. package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-FMPP3XKO.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-KZZT4HWF.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
  278. package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
  279. package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
  281. package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
  282. package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
  283. package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
  284. package/dist/cli/chunks/{security-VSPNKCDS.js → security-CUEA3UIM.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-IAHA3M6B.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-AFUCASTX.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-AQRV6JJ6.js} +2 -2
  291. package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-GX7FMJHL.js} +2 -2
  292. package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-XW5TLZ7M.js} +2 -2
  293. package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-TFKVUTNF.js} +2 -2
  294. package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
  295. package/dist/cli/chunks/{test-UWA377D4.js → test-D2XDJNDX.js} +11 -11
  296. package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-TS6I2PR7.js} +3 -3
  298. package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-HBBLPCZ3.js} +2 -2
  299. package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-3MBUX4PR.js} +2 -2
  300. package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-ZWMQO3L2.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
  302. package/dist/cli/chunks/{types-PJS2FGPF.js → types-5YEMGPSQ.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
  306. package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-2TPBKIHI.js} +2 -2
  307. package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XRAXXFW6.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-IYSCS3BZ.js} +2 -2
  309. package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-U6XWFRVT.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
  313. package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
  314. package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-K7YX2AO6.js} +2 -2
  315. package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-YBNKMOP6.js} +2 -2
  317. package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-UAJUILFQ.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
  319. package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-AVZ3GPAL.js} +2 -2
  320. package/dist/cli/commands/fleet.js +4 -1
  321. package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
  322. package/dist/cli/commands/test.js +5 -2
  323. package/dist/cli/handlers/init-handler.d.ts +12 -0
  324. package/dist/cli/handlers/init-handler.js +27 -12
  325. package/dist/cli/utils/ci-output.d.ts +2 -0
  326. package/dist/cli/utils/ci-output.js +2 -0
  327. package/dist/cli/utils/progress.d.ts +16 -2
  328. package/dist/cli/utils/progress.js +31 -14
  329. package/dist/coordination/consensus/consensus-engine.js +3 -1
  330. package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
  331. package/dist/coordination/handlers/coverage-collection.js +3 -1
  332. package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
  333. package/dist/coordination/handlers/coverage-runner.js +6 -22
  334. package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
  335. package/dist/coordination/handlers/coverage-stderr.js +39 -0
  336. package/dist/coordination/handlers/coverage-target.js +6 -3
  337. package/dist/coordination/handlers/handler-utils.js +3 -1
  338. package/dist/coordination/handlers/requirements-handlers.js +3 -2
  339. package/dist/coordination/handlers/security-handlers.js +34 -20
  340. package/dist/coordination/queen-coordinator.js +8 -3
  341. package/dist/coordination/task-executability.d.ts +12 -0
  342. package/dist/coordination/task-executability.js +27 -0
  343. package/dist/coordination/workflow-orchestrator.d.ts +6 -0
  344. package/dist/coordination/workflow-orchestrator.js +22 -8
  345. package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
  346. package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
  347. package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
  348. package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
  349. package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
  350. package/dist/domains/learning-optimization/services/production-intel.js +3 -1
  351. package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
  352. package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
  353. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
  354. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
  355. package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
  356. package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
  357. package/dist/domains/security-compliance/services/security-auditor.js +3 -2
  358. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  359. package/dist/domains/test-execution/coordinator.js +5 -14
  360. package/dist/domains/test-execution/interfaces.d.ts +11 -1
  361. package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
  362. package/dist/domains/test-execution/services/retry-outcome.js +53 -0
  363. package/dist/domains/test-generation/coordinator.js +2 -2
  364. package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
  365. package/dist/domains/test-generation/services/test-generator.js +2 -2
  366. package/dist/governance/evolution-pipeline-integration.js +3 -1
  367. package/dist/hooks/cross-phase-hooks.js +3 -1
  368. package/dist/init/init-wizard-steps.js +5 -1
  369. package/dist/init/phases/04-database.js +7 -0
  370. package/dist/init/phases/12-verification.js +14 -4
  371. package/dist/init/settings-merge.js +7 -4
  372. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +7 -0
  373. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
  374. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
  375. package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
  376. package/dist/integrations/ruvector/filter-adapter.js +2 -1
  377. package/dist/learning/dream/insight-generator.js +5 -4
  378. package/dist/learning/memory-auditor.js +3 -1
  379. package/dist/learning/qe-patterns.js +2 -1
  380. package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
  381. package/dist/learning/real-qe-reasoning-bank.js +70 -38
  382. package/dist/mcp/bundle.js +486 -481
  383. package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
  384. package/dist/mcp/handlers/domain-handler-configs.js +8 -2
  385. package/dist/mcp/handlers/task-handlers.d.ts +13 -0
  386. package/dist/mcp/handlers/task-handlers.js +42 -16
  387. package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
  388. package/dist/mcp/protocol-server.js +8 -8
  389. package/dist/mcp/qe-tool-bridge.js +3 -0
  390. package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
  391. package/dist/mcp/services/reasoning-bank-service.js +4 -0
  392. package/dist/mcp/tool-annotations.js +4 -1
  393. package/dist/mcp/tools/coherence/check.js +1 -0
  394. package/dist/mcp/tools/coherence/consensus.js +4 -2
  395. package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
  396. package/dist/mcp/tools/mincut/index.js +3 -0
  397. package/dist/mcp/tools/quality-assessment/gate.js +7 -0
  398. package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
  399. package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
  400. package/dist/mcp/tools/security-compliance/scan.js +4 -2
  401. package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
  402. package/dist/mcp/tools/test-execution/execute.js +3 -2
  403. package/dist/memory/crdt/crdt-store.js +5 -0
  404. package/dist/memory/crdt/lww-register.js +12 -2
  405. package/dist/optimization/early-exit-token-optimizer.js +3 -1
  406. package/dist/planning/goap-planner.js +5 -0
  407. package/dist/planning/plan-executor.js +5 -0
  408. package/dist/shared/io/confined-read.d.ts +74 -0
  409. package/dist/shared/io/confined-read.js +256 -0
  410. package/dist/shared/io/file-reader.d.ts +6 -6
  411. package/dist/shared/io/file-reader.js +16 -42
  412. package/dist/shared/llm/providers/claude-code.js +4 -1
  413. package/dist/shared/native-module-errors.d.ts +51 -0
  414. package/dist/shared/native-module-errors.js +129 -0
  415. package/dist/shared/safe-db.js +14 -4
  416. package/dist/shared/security/osv-client.js +4 -1
  417. package/dist/shared/types/test-frameworks.js +2 -2
  418. package/dist/sync/readers/json-reader.js +2 -1
  419. package/dist/validation/anchor-set.d.ts +6 -0
  420. package/dist/validation/anchor-set.js +9 -1
  421. package/dist/validation/quality-gate-runner.d.ts +7 -1
  422. package/dist/validation/quality-gate-runner.js +3 -3
  423. package/package.json +1 -1
  424. package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
  425. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
  426. package/dist/cli/chunks/base-GTB6POYE.js +0 -2
  427. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
  428. package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
  429. package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
  430. package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
  431. package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
  432. package/dist/cli/chunks/chunk-DURHK377.js +0 -742
  433. package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
  434. package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
  435. package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
  436. package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
  437. package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
  438. package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
  439. package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
  440. package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
  441. package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
  442. package/dist/cli/chunks/client-POSVREVS.js +0 -2
  443. package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
  444. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
  445. package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
  446. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
  447. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
  448. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
  449. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
  450. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
  451. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
  452. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
  453. package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
  454. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
  455. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
  456. package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
  457. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
  458. package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
  459. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
  460. package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
  461. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
  462. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
  463. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
  464. package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
  465. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
  466. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
  467. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
  468. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
  469. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
  470. package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
  471. package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
  472. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
  473. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
  474. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
  475. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
  476. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
  477. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
  478. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
  479. package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
  480. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
  481. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
  482. 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
- retryCount: params.retryCount ?? 3,
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 reasoningBankService = await getReasoningBankService();
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
- await startTaskTrajectory(taskId, params.task, {
450
- agent: 'queen-coordinator',
451
- domain: params.context?.project,
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
- const absPath = confined.value;
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 = readFileSync(absPath, 'utf-8');
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
- const reviewedDisposition = BUILT_IN_TOOL_SAFETY_INVENTORY[name];
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; it is required below and checked in execute().
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', 'verdict', 'confidence'],
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 };
@@ -37,6 +37,7 @@ const QX_ANALYZE_SCHEMA = {
37
37
  heuristics: {
38
38
  type: 'array',
39
39
  description: 'Specific heuristics to apply (default: all)',
40
+ items: { type: 'string', description: 'Heuristic name' },
40
41
  },
41
42
  minOracleSeverity: {
42
43
  type: 'string',
@@ -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
- if (existsSync(confined.value))
132
- content = readFileSync(confined.value, 'utf-8');
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
- const known = KNOWN_VULNERABLE_NPM[name];
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[dep];
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 = 3, timeout = 60000, collectCoverage = false, reportFormat = 'json', failFast = false, } = params;
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: 3,
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: initialTimestamp ?? (initialValue !== undefined ? Date.now() : 0),
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' &&