agentic-qe 3.15.14 → 3.15.16

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 (513) hide show
  1. package/.claude/agents/v3/templates/qx-report-template.html +1 -1
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +136 -0
  4. package/assets/agents/v3/templates/qx-report-template.html +1 -1
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/audit/witness-chain.d.ts +7 -0
  7. package/dist/audit/witness-chain.js +10 -0
  8. package/dist/cli/bundle.js +6 -6
  9. package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
  10. package/dist/cli/chunks/agent-booster-wasm-45NWEKVS.js +2 -0
  11. package/dist/cli/chunks/{agent-handler-P3IY7XEE.js → agent-handler-LVHMYFEF.js} +2 -2
  12. package/dist/cli/chunks/{agent-memory-branch-WWKC2H3G.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
  13. package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
  14. package/dist/cli/chunks/{arena-EIV5OALF.js → arena-CZKHXDDS.js} +2 -2
  15. package/dist/cli/chunks/{arena-4BMFF6BS.js → arena-ELDZH3CZ.js} +4 -4
  16. package/dist/cli/chunks/{audit-DNTI453H.js → audit-5MT4T47Z.js} +3 -3
  17. package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
  18. package/dist/cli/chunks/{better-sqlite3-TQBQGNC6.js → better-sqlite3-6TGYPC2B.js} +2 -2
  19. package/dist/cli/chunks/{brain-handler-HY57CNAO.js → brain-handler-HQWZFO52.js} +3 -3
  20. package/dist/cli/chunks/{branch-enumerator-THPMZPHQ.js → branch-enumerator-WVILM4SO.js} +2 -2
  21. package/dist/cli/chunks/{browser-O6JJOZCK.js → browser-RX5ALU3H.js} +2 -2
  22. package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
  23. package/dist/cli/chunks/{chunk-CIINJHOX.js → chunk-24OX5TQJ.js} +1 -1
  24. package/dist/cli/chunks/{chunk-6P4Q4RTC.js → chunk-24QHCVX6.js} +1 -1
  25. package/dist/cli/chunks/{chunk-U6IOQKCT.js → chunk-2H4XH6FT.js} +2 -2
  26. package/dist/cli/chunks/{chunk-OGEIHS76.js → chunk-2YZ4G6NW.js} +1 -1
  27. package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
  28. package/dist/cli/chunks/{chunk-5PLBQZ5J.js → chunk-32GN3JKR.js} +1 -1
  29. package/dist/cli/chunks/{chunk-AJVLVF7V.js → chunk-3HD7E6HN.js} +2 -2
  30. package/dist/cli/chunks/{chunk-X7CUI7KH.js → chunk-4D4DENG6.js} +2 -2
  31. package/dist/cli/chunks/{chunk-E2JLAW3U.js → chunk-4LQFBY5L.js} +6 -6
  32. package/dist/cli/chunks/{chunk-E3QIQMMN.js → chunk-4NFQLP6R.js} +1 -1
  33. package/dist/cli/chunks/{chunk-7Y3LXH57.js → chunk-525CFDUE.js} +2 -2
  34. package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
  35. package/dist/cli/chunks/{chunk-X6Q2N5S5.js → chunk-5JZRZI4S.js} +2 -2
  36. package/dist/cli/chunks/{chunk-MB4UKUBV.js → chunk-5LAVKGLH.js} +2 -2
  37. package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
  38. package/dist/cli/chunks/{chunk-NKOLILT7.js → chunk-5PBLPQ5T.js} +2 -2
  39. package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
  40. package/dist/cli/chunks/{chunk-7T6L3LFN.js → chunk-5SPCGMBB.js} +2 -2
  41. package/dist/cli/chunks/{chunk-2QLE6NDW.js → chunk-5V3TI2LG.js} +1 -1
  42. package/dist/cli/chunks/{chunk-A2T56XVL.js → chunk-5VZL4UVN.js} +2 -2
  43. package/dist/cli/chunks/{chunk-TWOV3I3A.js → chunk-63GMRQ25.js} +1 -1
  44. package/dist/cli/chunks/{chunk-YGOSSVY5.js → chunk-63ZKI4PX.js} +6 -6
  45. package/dist/cli/chunks/{chunk-FHPNWHY7.js → chunk-67Z5R7RJ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-PCQZIAXB.js → chunk-6DPYNAOK.js} +2 -2
  47. package/dist/cli/chunks/{chunk-WCM6WE7G.js → chunk-6ICX3FEG.js} +3 -3
  48. package/dist/cli/chunks/{chunk-JB7R77SH.js → chunk-6XXZDV2C.js} +2 -2
  49. package/dist/cli/chunks/{chunk-FJOIBZUB.js → chunk-6ZBXSOX6.js} +2 -2
  50. package/dist/cli/chunks/{chunk-WZQADC5R.js → chunk-72XSEQMW.js} +2 -2
  51. package/dist/cli/chunks/{chunk-AYLEH2UF.js → chunk-7TE5ONQQ.js} +1 -1
  52. package/dist/cli/chunks/{chunk-7QUSNBAA.js → chunk-A5GBXCP5.js} +2 -2
  53. package/dist/cli/chunks/{chunk-7724KXM2.js → chunk-AAMLQ2LF.js} +3 -3
  54. package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
  55. package/dist/cli/chunks/{chunk-2UZBLC5H.js → chunk-AGRV5B3T.js} +2 -2
  56. package/dist/cli/chunks/{chunk-V6SE2ZU2.js → chunk-AJMJNQMP.js} +1 -1
  57. package/dist/cli/chunks/{chunk-2HPNGK7A.js → chunk-AR67RJPY.js} +2 -2
  58. package/dist/cli/chunks/{chunk-G7HGUQAE.js → chunk-ASEOFRIG.js} +2 -2
  59. package/dist/cli/chunks/{chunk-7TH4PJSU.js → chunk-BEKDKVQT.js} +2 -2
  60. package/dist/cli/chunks/{chunk-M5JEA6ZY.js → chunk-BY5OF7OH.js} +2 -2
  61. package/dist/cli/chunks/{chunk-OLUOVNUF.js → chunk-C5FP5GW3.js} +2 -2
  62. package/dist/cli/chunks/{chunk-R5RRWLRI.js → chunk-C6D5AHBO.js} +2 -2
  63. package/dist/cli/chunks/{chunk-K7GFYFBO.js → chunk-CAKMOVZ6.js} +2 -2
  64. package/dist/cli/chunks/{chunk-6NIGSY5L.js → chunk-CEYSYSK5.js} +2 -2
  65. package/dist/cli/chunks/{chunk-U4TML2VD.js → chunk-CGGUM2YJ.js} +2 -2
  66. package/dist/cli/chunks/{chunk-YE54T2NQ.js → chunk-CJSHWQXP.js} +2 -2
  67. package/dist/cli/chunks/{chunk-7SQTLUEN.js → chunk-CRPIYUTJ.js} +2 -2
  68. package/dist/cli/chunks/{chunk-65EE2EST.js → chunk-D6COXLYE.js} +2 -2
  69. package/dist/cli/chunks/{chunk-4WLIOPHX.js → chunk-DTMAS2GB.js} +2 -2
  70. package/dist/cli/chunks/{chunk-E7QTWGPI.js → chunk-DVYHMDFR.js} +470 -411
  71. package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
  72. package/dist/cli/chunks/{chunk-HSDWPQQY.js → chunk-E3D4GPLP.js} +3 -3
  73. package/dist/cli/chunks/{chunk-JJHLGGPP.js → chunk-EA4YQVKS.js} +1 -1
  74. package/dist/cli/chunks/{chunk-EIEEST4T.js → chunk-EGYE5UPQ.js} +2 -2
  75. package/dist/cli/chunks/{chunk-O756AOUX.js → chunk-EK7OLYOZ.js} +2 -2
  76. package/dist/cli/chunks/{chunk-57DRT6UA.js → chunk-F742SZAX.js} +2 -2
  77. package/dist/cli/chunks/{chunk-6OI5SK7M.js → chunk-FBDVGRSC.js} +1 -1
  78. package/dist/cli/chunks/{chunk-H3C5FJRH.js → chunk-FDDC72IA.js} +2 -2
  79. package/dist/cli/chunks/{chunk-IQRPR4KB.js → chunk-FL64OUBA.js} +2 -2
  80. package/dist/cli/chunks/{chunk-BNG4J3CE.js → chunk-FLNAW7C4.js} +2 -2
  81. package/dist/cli/chunks/{chunk-C3OIBFAA.js → chunk-G5RHFBAY.js} +2 -2
  82. package/dist/cli/chunks/{chunk-NPCXGX7N.js → chunk-GAHNO6JJ.js} +2 -2
  83. package/dist/cli/chunks/{chunk-PNRPVQGI.js → chunk-GFWHUQSF.js} +2 -2
  84. package/dist/cli/chunks/{chunk-OCN53CCK.js → chunk-GJYHWYXR.js} +2 -2
  85. package/dist/cli/chunks/{chunk-5Z4MO2F3.js → chunk-GQ6TUIKY.js} +1 -1
  86. package/dist/cli/chunks/{chunk-N736GLWZ.js → chunk-GSKMOPL7.js} +2 -2
  87. package/dist/cli/chunks/{chunk-43XHGWYH.js → chunk-HCH4Y6XX.js} +2 -2
  88. package/dist/cli/chunks/{chunk-QP6GL3O5.js → chunk-HGWXF45W.js} +1 -1
  89. package/dist/cli/chunks/{chunk-PGN4TARY.js → chunk-HJ6ZGVTB.js} +2 -2
  90. package/dist/cli/chunks/{chunk-M2TG7VDK.js → chunk-HLUXXCHF.js} +1 -1
  91. package/dist/cli/chunks/{chunk-UMHFTQTR.js → chunk-HVRRLYX6.js} +4 -4
  92. package/dist/cli/chunks/{chunk-L7PC675Y.js → chunk-I7MQIM2U.js} +1 -1
  93. package/dist/cli/chunks/{chunk-JSSU4RIK.js → chunk-IESR7TNB.js} +2 -2
  94. package/dist/cli/chunks/{chunk-H4LYXLAT.js → chunk-IHRXZZQM.js} +1 -1
  95. package/dist/cli/chunks/{chunk-HV43NX4A.js → chunk-IOKYCMTJ.js} +6 -6
  96. package/dist/cli/chunks/{chunk-NZQYJCO6.js → chunk-IOQ6ZQ5W.js} +1 -1
  97. package/dist/cli/chunks/{chunk-JO26SG47.js → chunk-IOYG4VFL.js} +2 -2
  98. package/dist/cli/chunks/{chunk-6O63ZTVX.js → chunk-IUBJVHNB.js} +2 -2
  99. package/dist/cli/chunks/{chunk-XSPMLJCQ.js → chunk-J442IZLE.js} +1 -1
  100. package/dist/cli/chunks/{chunk-LTGQJYYO.js → chunk-J4ELZNLY.js} +2 -2
  101. package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
  102. package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
  103. package/dist/cli/chunks/{chunk-TOJF3ZG4.js → chunk-JHQCRRJI.js} +2 -2
  104. package/dist/cli/chunks/{chunk-QUZ745UQ.js → chunk-JQ3DYUMS.js} +2 -2
  105. package/dist/cli/chunks/{chunk-P2TPH3TC.js → chunk-KITOPKRG.js} +2 -2
  106. package/dist/cli/chunks/{chunk-QNQE3EOH.js → chunk-KKU2QGSJ.js} +2 -2
  107. package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
  108. package/dist/cli/chunks/{chunk-L5VSLPMW.js → chunk-KNSRL6NO.js} +2 -2
  109. package/dist/cli/chunks/{chunk-INGXD5IX.js → chunk-KPRCB5LT.js} +2 -2
  110. package/dist/cli/chunks/{chunk-GY4P7KAI.js → chunk-KQYJ4VQ5.js} +1 -1
  111. package/dist/cli/chunks/{chunk-Z2S7DNFP.js → chunk-KU2AUFGX.js} +2 -2
  112. package/dist/cli/chunks/{chunk-O5CEL447.js → chunk-KVF4NXGQ.js} +2 -2
  113. package/dist/cli/chunks/{chunk-2IJO3657.js → chunk-KXCLACFG.js} +2 -2
  114. package/dist/cli/chunks/{chunk-ZJGFQK27.js → chunk-L2DWPVNJ.js} +1 -1
  115. package/dist/cli/chunks/{chunk-E7OR6V3V.js → chunk-L6QSTQME.js} +2 -2
  116. package/dist/cli/chunks/{chunk-RE6JTSDM.js → chunk-LE4QJREF.js} +1 -1
  117. package/dist/cli/chunks/{chunk-DSQESXL4.js → chunk-LKTTUHLF.js} +2 -2
  118. package/dist/cli/chunks/{chunk-YGC5QKQ4.js → chunk-LQLPB2T6.js} +2 -2
  119. package/dist/cli/chunks/{chunk-VGZOPQQY.js → chunk-LRSX2FJM.js} +1 -1
  120. package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
  121. package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
  122. package/dist/cli/chunks/{chunk-56NSE3LJ.js → chunk-MAFQV4U4.js} +2 -2
  123. package/dist/cli/chunks/{chunk-MKYOE7NE.js → chunk-MD43XRX5.js} +1 -1
  124. package/dist/cli/chunks/{chunk-3TF27MG5.js → chunk-MI5MFHRA.js} +2 -2
  125. package/dist/cli/chunks/{chunk-JK6PMLQQ.js → chunk-MO55CVMT.js} +32 -32
  126. package/dist/cli/chunks/{chunk-X6NJOT3V.js → chunk-N7HL5PHH.js} +1 -1
  127. package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
  128. package/dist/cli/chunks/{chunk-WUGXXNK4.js → chunk-NDJ7P2EP.js} +1 -1
  129. package/dist/cli/chunks/{chunk-D5GB5PUU.js → chunk-NO3IV5Q5.js} +1 -1
  130. package/dist/cli/chunks/{chunk-3XACRXBY.js → chunk-NQXXI77K.js} +2 -2
  131. package/dist/cli/chunks/{chunk-EC65UZ77.js → chunk-NVEWF4JV.js} +1 -1
  132. package/dist/cli/chunks/{chunk-JI67T6Q2.js → chunk-NZU4ACBZ.js} +2 -2
  133. package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
  134. package/dist/cli/chunks/{chunk-YEFTK4HD.js → chunk-OAEE6JWQ.js} +2 -2
  135. package/dist/cli/chunks/{chunk-JAOCHPYX.js → chunk-OCV2XEWQ.js} +2 -2
  136. package/dist/cli/chunks/{chunk-IDBA5GK2.js → chunk-P3EYRILV.js} +2 -2
  137. package/dist/cli/chunks/{chunk-4RPBODN5.js → chunk-PEQDY4BO.js} +2 -2
  138. package/dist/cli/chunks/{chunk-CPPYZYXC.js → chunk-PF7RBAYL.js} +2 -2
  139. package/dist/cli/chunks/{chunk-WCPSR4MJ.js → chunk-PHT5N7SC.js} +2 -2
  140. package/dist/cli/chunks/{chunk-O2AAYJUV.js → chunk-PINSJCM3.js} +1 -1
  141. package/dist/cli/chunks/{chunk-HEDGFKC5.js → chunk-PPUZWYUG.js} +2 -2
  142. package/dist/cli/chunks/{chunk-XMCSKYDE.js → chunk-QPEOLAAS.js} +1 -1
  143. package/dist/cli/chunks/{chunk-7MUO4DEH.js → chunk-QQWBWEJS.js} +18 -18
  144. package/dist/cli/chunks/{chunk-UFP7SN5V.js → chunk-QVDCVD5D.js} +2 -2
  145. package/dist/cli/chunks/{chunk-NHEG2DLN.js → chunk-RJIEG3NA.js} +2 -2
  146. package/dist/cli/chunks/{chunk-KJ5A54ZH.js → chunk-RV74I3YO.js} +2 -2
  147. package/dist/cli/chunks/{chunk-UDSB3XCG.js → chunk-S75SOOZL.js} +2 -2
  148. package/dist/cli/chunks/{chunk-BPDAQB3F.js → chunk-SASBO5Y5.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VJBJRFUO.js → chunk-SDLWKRVL.js} +9 -9
  150. package/dist/cli/chunks/{chunk-J6ASX536.js → chunk-SHKOCGNK.js} +2 -2
  151. package/dist/cli/chunks/{chunk-J35JWDJE.js → chunk-SI6DPU5D.js} +1 -1
  152. package/dist/cli/chunks/{chunk-V3MGY76S.js → chunk-SJ6Y4725.js} +2 -2
  153. package/dist/cli/chunks/{chunk-FTYRPEJS.js → chunk-SR52XP5F.js} +1 -1
  154. package/dist/cli/chunks/{chunk-ZUE524JL.js → chunk-SSUAAX3F.js} +2 -2
  155. package/dist/cli/chunks/{chunk-VG32EEUG.js → chunk-SSYAQZXA.js} +2 -2
  156. package/dist/cli/chunks/{chunk-HTVGHHX2.js → chunk-SUDMM5SO.js} +2 -2
  157. package/dist/cli/chunks/{chunk-K2SMP4OD.js → chunk-TIUKLYAI.js} +1 -1
  158. package/dist/cli/chunks/{chunk-VCVRZD4Y.js → chunk-TVGI32MB.js} +33 -33
  159. package/dist/cli/chunks/{chunk-CAZM63TP.js → chunk-U2A7NHZA.js} +2 -2
  160. package/dist/cli/chunks/{chunk-WBC6WB32.js → chunk-UE5ZOZR2.js} +2 -2
  161. package/dist/cli/chunks/{chunk-BQJ7CV53.js → chunk-UHEOGZLX.js} +12 -12
  162. package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
  163. package/dist/cli/chunks/{chunk-XN3KCKAM.js → chunk-V5NHZV7S.js} +2 -2
  164. package/dist/cli/chunks/{chunk-UNYTHZDZ.js → chunk-VJCIEHEF.js} +1 -1
  165. package/dist/cli/chunks/{chunk-5Y7UFHJD.js → chunk-VMDFFTCK.js} +1 -1
  166. package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
  167. package/dist/cli/chunks/{chunk-UPWLMIDY.js → chunk-VWPM27GU.js} +2 -2
  168. package/dist/cli/chunks/{chunk-USAKCGHC.js → chunk-VXFLJNCA.js} +2 -2
  169. package/dist/cli/chunks/{chunk-WKI46WWN.js → chunk-W5HQUIML.js} +2 -2
  170. package/dist/cli/chunks/{chunk-Z54G2YOL.js → chunk-WP4RETKG.js} +2 -2
  171. package/dist/cli/chunks/{chunk-IRPNEXOU.js → chunk-XIIQ5QTT.js} +2 -2
  172. package/dist/cli/chunks/{chunk-O32BFQV4.js → chunk-XIQW7EFL.js} +2 -2
  173. package/dist/cli/chunks/{chunk-TW6Z6W4X.js → chunk-XWUWX7BV.js} +13 -13
  174. package/dist/cli/chunks/{chunk-57FX3GP6.js → chunk-Y4PFUMOU.js} +1 -1
  175. package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
  176. package/dist/cli/chunks/{chunk-4T7XV5KQ.js → chunk-YLMNVLDK.js} +1 -1
  177. package/dist/cli/chunks/{chunk-TSP6SU5V.js → chunk-YNMJEDN5.js} +2 -2
  178. package/dist/cli/chunks/{chunk-PWQWKYBG.js → chunk-YPBSUGMI.js} +1 -1
  179. package/dist/cli/chunks/{chunk-QP2HLKTS.js → chunk-YRAX7SFJ.js} +2 -2
  180. package/dist/cli/chunks/{chunk-O3ERGUXH.js → chunk-YTHTQPWR.js} +1 -1
  181. package/dist/cli/chunks/{chunk-MR2OPUSA.js → chunk-YU2BDRSD.js} +1 -1
  182. package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
  183. package/dist/cli/chunks/{chunk-2W5MQDHM.js → chunk-ZFL436FN.js} +2 -2
  184. package/dist/cli/chunks/{chunk-7MISCSL5.js → chunk-ZJH5MU2I.js} +2 -2
  185. package/dist/cli/chunks/{chunk-52KOPIMI.js → chunk-ZQ2XW3IP.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
  187. package/dist/cli/chunks/{ci-UMA2SMNW.js → ci-MFUR4CWV.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-UQSILJFQ.js → ci-config-PNDLQ6XV.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-U6YZLLKH.js → ci-output-PFZ4M7NC.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-ATYQP6X2.js → circuit-breaker-5HH6NLZN.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-6YHFD7AN.js → claude-flow-setup-QCKYLGLC.js} +2 -2
  192. package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-EPE7IOZE.js → cline-installer-EASVPFXR.js} +2 -2
  194. package/dist/cli/chunks/{code-NUEJ4XYO.js → code-UJXDVYRK.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-D4DBT6OL.js → code-index-extractor-BZJ3UDP4.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-633SM4LR.js → codex-installer-XSQZUVOZ.js} +4 -4
  197. package/dist/cli/chunks/{completions-WUKVIW3L.js → completions-OWOOJFI2.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-F73ACR5H.js → complexity-analyzer-KP5TOHDT.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-QH42TKMS.js → continuedev-installer-IFKQXLHM.js} +2 -2
  200. package/dist/cli/chunks/{copilot-installer-Y3XC7BTT.js → copilot-installer-IGJ6KGQY.js} +2 -2
  201. package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-57QPV7E3.js → cost-tracker-MMDDNKZB.js} +2 -2
  203. package/dist/cli/chunks/{coverage-IBCHMBCR.js → coverage-LUH2B7NT.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-F4UYQHIN.js → cursor-installer-4YLM5GWM.js} +2 -2
  206. package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
  207. package/dist/cli/chunks/{daemon-XR4Q6YZF.js → daemon-MZKVM4CJ.js} +3 -3
  208. package/dist/cli/chunks/{dag-attention-scheduler-ZR5ZD3TW.js → dag-attention-scheduler-X4CYW665.js} +2 -2
  209. package/dist/cli/chunks/{detect-GEGYURLL.js → detect-7BM2XINO.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-JU3KT2JO.js → dist-node-Y5APLEYB.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-7QI3FJGE.js → domain-handler-X3ZRJNAH.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-O2YRM2PD.js → domain-plugins-2UW5KQJB.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-7J3S2OS6.js → domain-transfer-35W4CIBV.js} +2 -2
  214. package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
  216. package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
  217. package/dist/cli/chunks/{eval-RVMCIUOR.js → eval-4QA2SROK.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-QUKPKWKZ.js → fast-paths-FIORX6GN.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-K7JXNKJI.js → feature-flags-6LYI2T4G.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-5JCSKL2P.js → feature-flags-ZOO7LMIC.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
  223. package/dist/cli/chunks/{fleet-II4Q6HXK.js → fleet-7WF53H4F.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-M7VO2EMS.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-ND5CY26N.js → heartbeat-handler-DEKKMOVW.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-N3AUUUU7.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-NZY3E5EN.js → hnswlib-node-4YOQC6L4.js} +2 -2
  231. package/dist/cli/chunks/{hooks-QVJDTII5.js → hooks-TAOKV4EJ.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-ZRY6MTDV.js → hypergraph-engine-BODRJLHL.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-56DO4XZQ.js → hypergraph-handler-RKMYJNTU.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DTF4EVUY.js → init-guard-MXHSLSB2.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-M6CNQHMX.js → init-handler-HUE57IFW.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
  239. package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-IJN7XKBH.js → kilocode-installer-S333IKYQ.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-UKKPGPDC.js → kiro-installer-WM5DLQWC.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
  243. package/dist/cli/chunks/{learning-W2HETWQ4.js → learning-LNHMQLH5.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-Y546K4VX.js → llm-router-EWFXYZZR.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
  246. package/dist/cli/chunks/{load-MKAB2AXE.js → load-FGYGWVDK.js} +2 -2
  247. package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
  248. package/dist/cli/chunks/{mcp-AZKUS6K3.js → mcp-2FHNAAOM.js} +2 -2
  249. package/dist/cli/chunks/{memory-ZDOQN2KU.js → memory-DZMQ73AB.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-WWVXDHG4.js → multi-model-executor-6F2UAEUW.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-YUJNXXWS.js → opencode-installer-XY3BGOTZ.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-Z6PWPLRE.js → orchestrator-B4CNKUOS.js} +17 -17
  255. package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-TPWPX32U.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-4BBGTE4M.js → pipeline-FG5RKVRO.js} +2 -2
  258. package/dist/cli/chunks/{platform-5GSHXCV5.js → platform-3BT4KEVJ.js} +2 -2
  259. package/dist/cli/chunks/{plugin-OFDVF5HS.js → plugin-WI4RIN7O.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NC6MUYGJ.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
  261. package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-MPOAAEPA.js → protocol-handler-WNODKPGW.js} +2 -2
  264. package/dist/cli/chunks/{prove-CDKMAIVM.js → prove-5RHAEPYZ.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
  266. package/dist/cli/chunks/{quality-ZH4F7R7R.js → quality-WPHR7BGQ.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-IDRMW6OE.js → quality-gate-4RKTEZMX.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-Z5GCGVXK.js → ref-validation-TPAWHOHH.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-IZ2S7PH2.js → roocode-installer-7AVHFNDI.js} +2 -2
  272. package/dist/cli/chunks/router-EP34O3KB.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-NAX35VUW.js → routing-handler-YKEDVJSH.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-5YW2SOFF.js → ruvector-commands-JUAMM354.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-IPGCAT6C.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
  281. package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
  282. package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
  283. package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
  284. package/dist/cli/chunks/{security-3IH4BO5Z.js → security-ORDN3RD2.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-ABY7PAY2.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-6KENLN2W.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-RLFAUGOW.js → standalone-memory-OXRJYZXN.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-FCOZBPE5.js → status-handler-BCX5D4HY.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-4RDA5UUM.js → structural-health-LFG7RUU6.js} +2 -2
  291. package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
  292. package/dist/cli/chunks/{sync-KGEEXXCC.js → sync-YJEE2K2L.js} +2 -2
  293. package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-6H7L2UT4.js → task-handlers-CILP36I7.js} +4 -4
  295. package/dist/cli/chunks/{test-S7IG6EIX.js → test-SD457QJ6.js} +4 -4
  296. package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-7XYXI4L2.js → test-scheduling-ISI2O4Q5.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
  299. package/dist/cli/chunks/{token-usage-Y2YTPOFE.js → token-usage-XOC5KG7S.js} +2 -2
  300. package/dist/cli/chunks/{transformers-UCJ3HHHC.js → transformers-LSLQAARK.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
  302. package/dist/cli/chunks/{types-6CMFPETH.js → types-5BLCGLCR.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
  306. package/dist/cli/chunks/{upgrade-K25DN6WU.js → upgrade-RQJYLK3J.js} +2 -2
  307. package/dist/cli/chunks/{validate-T4V3TBY3.js → validate-QBHWXXCK.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-XSRC576T.js → validate-swarm-IKXBKFB5.js} +2 -2
  309. package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-YOZXHRTN.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-ITPU2IYL.js → windsurf-installer-HQGDZT5D.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
  313. package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-DTDSVKOG.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-EWACWGAW.js → witness-key-manager-RXYQNFJB.js} +2 -2
  317. package/dist/cli/chunks/{workflow-ZIQ4FV42.js → workflow-FBKCA4H6.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
  319. package/dist/cli/chunks/wrappers-TWSKBTWD.js +2 -0
  320. package/dist/cli/commands/code.js +4 -0
  321. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  322. package/dist/cli/handlers/task-handler.d.ts +5 -0
  323. package/dist/cli/handlers/task-handler.js +21 -1
  324. package/dist/cli/utils/task-result.d.ts +11 -0
  325. package/dist/cli/utils/task-result.js +39 -0
  326. package/dist/coordination/handlers/test-execution-handlers.js +92 -58
  327. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  328. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  329. package/dist/domains/code-intelligence/coordinator.js +46 -13
  330. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  331. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
  333. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  334. package/dist/domains/quality-assessment/coordinator.js +2 -1
  335. package/dist/domains/test-execution/coordinator.js +10 -5
  336. package/dist/domains/test-execution/interfaces.d.ts +12 -0
  337. package/dist/domains/test-execution/plugin.js +6 -2
  338. package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
  339. package/dist/domains/test-execution/services/retry-handler.js +14 -9
  340. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  341. package/dist/domains/test-execution/services/test-executor.js +28 -9
  342. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  343. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  344. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  345. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  346. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  347. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  348. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  349. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  350. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  351. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  352. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  353. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  354. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  355. package/dist/feedback/coverage-learner.js +13 -9
  356. package/dist/feedback/test-outcome-tracker.js +13 -9
  357. package/dist/governance/witness-chain.d.ts +5 -0
  358. package/dist/governance/witness-chain.js +22 -6
  359. package/dist/init/init-wizard-hooks.d.ts +1 -1
  360. package/dist/init/init-wizard-hooks.js +7 -8
  361. package/dist/init/phases/08-mcp.js +9 -0
  362. package/dist/init/settings-merge.d.ts +13 -0
  363. package/dist/init/settings-merge.js +49 -2
  364. package/dist/integrations/agent-booster-wasm/agent_booster_wasm.js +849 -0
  365. package/dist/integrations/agent-booster-wasm/agent_booster_wasm_bg.wasm +0 -0
  366. package/dist/integrations/agent-booster-wasm/index.d.ts +8 -0
  367. package/dist/integrations/agent-booster-wasm/index.js +25 -2
  368. package/dist/integrations/agent-booster-wasm/package.json +16 -0
  369. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  370. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  371. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  373. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  374. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  375. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  376. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  377. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  378. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  379. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  380. package/dist/kernel/unified-memory.d.ts +24 -0
  381. package/dist/kernel/unified-memory.js +63 -8
  382. package/dist/learning/aqe-learning-engine.js +1 -1
  383. package/dist/learning/dream/dream-engine.d.ts +3 -2
  384. package/dist/learning/dream/dream-engine.js +42 -24
  385. package/dist/learning/dream/dream-lock-retry.d.ts +38 -0
  386. package/dist/learning/dream/dream-lock-retry.js +66 -0
  387. package/dist/learning/dream/speculative-dreamer.js +1 -1
  388. package/dist/learning/embed-and-insert-pattern.js +4 -2
  389. package/dist/learning/embedder-endpoint-client.d.ts +31 -0
  390. package/dist/learning/embedder-endpoint-client.js +103 -10
  391. package/dist/learning/embedding-space.d.ts +12 -0
  392. package/dist/learning/embedding-space.js +17 -0
  393. package/dist/learning/experience-capture-middleware.js +25 -13
  394. package/dist/learning/experience-capture.js +1 -1
  395. package/dist/learning/experience-consolidation.d.ts +18 -0
  396. package/dist/learning/experience-consolidation.js +55 -8
  397. package/dist/learning/experience-space-verification.d.ts +71 -0
  398. package/dist/learning/experience-space-verification.js +147 -0
  399. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  400. package/dist/learning/pattern-lifecycle.js +153 -76
  401. package/dist/learning/pattern-null-store.d.ts +5 -0
  402. package/dist/learning/pattern-null-store.js +8 -0
  403. package/dist/learning/pattern-promotion.js +6 -3
  404. package/dist/learning/pattern-store.d.ts +6 -0
  405. package/dist/learning/pattern-store.js +19 -6
  406. package/dist/learning/qe-reasoning-bank.js +2 -2
  407. package/dist/learning/real-embeddings.js +3 -1
  408. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  409. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  410. package/dist/learning/rvf-pattern-store.js +6 -2
  411. package/dist/learning/sqlite-persistence.d.ts +6 -0
  412. package/dist/learning/sqlite-persistence.js +10 -0
  413. package/dist/mcp/bundle.js +642 -571
  414. package/dist/mcp/entry.js +4 -0
  415. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  416. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  417. package/dist/mcp/protocol-server.js +1 -0
  418. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  419. package/dist/mcp/types.d.ts +6 -0
  420. package/dist/optimization/session-cache.d.ts +17 -1
  421. package/dist/optimization/session-cache.js +40 -36
  422. package/dist/planning/goap-planner.d.ts +6 -0
  423. package/dist/planning/goap-planner.js +35 -19
  424. package/dist/planning/plan-executor.js +24 -15
  425. package/dist/routing/co-execution-repository.js +12 -9
  426. package/dist/routing/routing-feedback.d.ts +8 -0
  427. package/dist/routing/routing-feedback.js +46 -24
  428. package/dist/routing/routing-outcomes-migration.js +7 -2
  429. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  430. package/dist/shared/llm/spend-ledger.js +64 -39
  431. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  432. package/dist/shared/sqlite-lock-wait.js +37 -0
  433. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  434. package/dist/shared/sqlite-write-queue.js +38 -0
  435. package/dist/shared/test-runner-project.d.ts +69 -0
  436. package/dist/shared/test-runner-project.js +186 -0
  437. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  438. package/dist/skills/security-visual-testing/index.js +49 -35
  439. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  440. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  441. package/dist/workers/workers/learning-consolidation.js +8 -7
  442. package/package.json +4 -2
  443. package/dist/cli/chunks/adapter-23KA2YW7.js +0 -2
  444. package/dist/cli/chunks/agent-booster-wasm-2DLAEZK6.js +0 -2
  445. package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +0 -2
  446. package/dist/cli/chunks/base-XPWGYDKD.js +0 -2
  447. package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +0 -2
  448. package/dist/cli/chunks/chunk-3FITMWWJ.js +0 -21
  449. package/dist/cli/chunks/chunk-ARRBXCII.js +0 -4
  450. package/dist/cli/chunks/chunk-BBYJBZHG.js +0 -14
  451. package/dist/cli/chunks/chunk-BM3EJLMV.js +0 -153
  452. package/dist/cli/chunks/chunk-D3ZZ2NLL.js +0 -62
  453. package/dist/cli/chunks/chunk-DLTB5KCR.js +0 -2
  454. package/dist/cli/chunks/chunk-DRLSJJIC.js +0 -6
  455. package/dist/cli/chunks/chunk-HAYKLXCT.js +0 -744
  456. package/dist/cli/chunks/chunk-HHBF2BZC.js +0 -65
  457. package/dist/cli/chunks/chunk-K7RT6ITZ.js +0 -2
  458. package/dist/cli/chunks/chunk-L752CNG3.js +0 -13
  459. package/dist/cli/chunks/chunk-MQXWG55U.js +0 -12
  460. package/dist/cli/chunks/chunk-WM2QRIRD.js +0 -14
  461. package/dist/cli/chunks/chunk-WRC3HLUY.js +0 -29
  462. package/dist/cli/chunks/chunk-XTZGAG6P.js +0 -27
  463. package/dist/cli/chunks/chunk-YKQWIXUY.js +0 -2
  464. package/dist/cli/chunks/client-E43GWLQH.js +0 -2
  465. package/dist/cli/chunks/core-handlers-R5A3SQDY.js +0 -2
  466. package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +0 -2
  467. package/dist/cli/chunks/daemon-BYYPIJ7G.js +0 -18
  468. package/dist/cli/chunks/dream-6C4NURSE.js +0 -2
  469. package/dist/cli/chunks/embed-and-insert-pattern-URES5Q6J.js +0 -3
  470. package/dist/cli/chunks/experience-capture-middleware-SYJQSBKE.js +0 -40
  471. package/dist/cli/chunks/file-discovery-J5IE5KP7.js +0 -2
  472. package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +0 -2
  473. package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +0 -2
  474. package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +0 -2
  475. package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +0 -2
  476. package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +0 -2
  477. package/dist/cli/chunks/init-wizard-RTLCRWDT.js +0 -2
  478. package/dist/cli/chunks/kernel-2OWIGGGT.js +0 -2
  479. package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +0 -2
  480. package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +0 -2
  481. package/dist/cli/chunks/load-test-D6QYNIVT.js +0 -2
  482. package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +0 -2
  483. package/dist/cli/chunks/memory-handlers-3SQVY7FE.js +0 -2
  484. package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +0 -2
  485. package/dist/cli/chunks/project-root-DDGBWDP6.js +0 -2
  486. package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +0 -2
  487. package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +0 -2
  488. package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +0 -2
  489. package/dist/cli/chunks/real-embeddings-I2UVNNB3.js +0 -2
  490. package/dist/cli/chunks/router-FT5WJPUH.js +0 -2
  491. package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +0 -2
  492. package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +0 -2
  493. package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +0 -2
  494. package/dist/cli/chunks/rvf-migration-coordinator-VUIZHTVG.js +0 -2
  495. package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +0 -2
  496. package/dist/cli/chunks/safe-db-TDZKUOZJ.js +0 -2
  497. package/dist/cli/chunks/schedule-CRKTRY2A.js +0 -2
  498. package/dist/cli/chunks/scheduler-6ZBDVQWN.js +0 -2
  499. package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +0 -2
  500. package/dist/cli/chunks/sync-54LUAUTK.js +0 -2
  501. package/dist/cli/chunks/task-handler-K3OXHYKU.js +0 -62
  502. package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +0 -2
  503. package/dist/cli/chunks/token-bootstrap-3QMABE45.js +0 -2
  504. package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +0 -2
  505. package/dist/cli/chunks/unified-memory-QARWQKJ2.js +0 -2
  506. package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +0 -2
  507. package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +0 -2
  508. package/dist/cli/chunks/visual-security-O4ALMCXQ.js +0 -2
  509. package/dist/cli/chunks/witness-chain-B3YW5NMS.js +0 -2
  510. package/dist/cli/chunks/witness-chain-PIYR72HJ.js +0 -2
  511. package/dist/cli/chunks/witness-chain-repair-YUG7E3UX.js +0 -2
  512. package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +0 -2
  513. package/dist/cli/chunks/wrappers-PW2O27LL.js +0 -2
@@ -6,6 +6,7 @@ import { Result } from '../../../shared/types/index.js';
6
6
  import { AccessibilityReport, WCAGCriterion, ContrastAnalysis, KeyboardNavigationReport, KeyboardIssue, AuditOptions } from '../interfaces.js';
7
7
  import type { VibiumClient, AccessibilityResult as VibiumAccessibilityResult } from '../../../integrations/vibium/index.js';
8
8
  import type { IBrowserClient, IAgentBrowserClient } from '../../../integrations/browser/index.js';
9
+ import { type AxeContrastData } from './accessibility-contrast.js';
9
10
  /**
10
11
  * Axe-core result structure from browser evaluation
11
12
  */
@@ -22,6 +23,8 @@ export interface AxeCoreResult {
22
23
  html: string;
23
24
  target: string[];
24
25
  failureSummary?: string;
26
+ /** color-contrast check data: the measured colours and ratio (#1228) */
27
+ contrast?: AxeContrastData;
25
28
  }>;
26
29
  }>;
27
30
  passes: string[];
@@ -38,13 +41,18 @@ export declare function isAgentBrowserClient(client: IBrowserClient): client is
38
41
  */
39
42
  export declare function getAxeTagsForWcagLevel(level: 'A' | 'AA' | 'AAA'): string[];
40
43
  /**
41
- * Map Vibium Severity type to our impact type
44
+ * Map an axe-core impact or a Vibium severity to our impact type
42
45
  */
43
46
  export declare function mapImpactSeverity(severity: string): 'critical' | 'serious' | 'moderate' | 'minor';
44
47
  /**
45
48
  * Extract error message from a Result
46
49
  */
47
50
  export declare function getErrorMessage<T, E extends Error>(result: Result<T, E>): string;
51
+ /**
52
+ * Browser-side statements that load axe-core into the page when it is not
53
+ * loaded yet. For use inside an async function.
54
+ */
55
+ export declare const AXE_LOADER_JS = "\n // Check if axe is already loaded\n if (typeof axe === 'undefined') {\n // Inject axe-core from CDN\n const script = document.createElement('script');\n script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.8.4/axe.min.js';\n script.crossOrigin = 'anonymous';\n document.head.appendChild(script);\n\n // Wait for script to load\n await new Promise((resolve, reject) => {\n script.onload = resolve;\n script.onerror = () => reject(new Error('Failed to load axe-core'));\n setTimeout(() => reject(new Error('Timeout loading axe-core')), 10000);\n });\n }";
48
56
  /**
49
57
  * Inject and run axe-core in the browser context
50
58
  */
@@ -62,9 +70,11 @@ export declare function mapAxeResultToReport(url: string, axeResult: AxeCoreResu
62
70
  */
63
71
  export declare function mapVibiumResultToReport(url: string, vibiumResult: VibiumAccessibilityResult, wcagLevel: 'A' | 'AA' | 'AAA'): AccessibilityReport;
64
72
  /**
65
- * Extract contrast analysis from Vibium accessibility result
73
+ * Extract contrast analysis from Vibium accessibility result.
74
+ * Only elements the audit reported are listed, with the values it reported
75
+ * (#1228). An error means the contrast rule produced no result.
66
76
  */
67
- export declare function extractContrastFromVibiumResult(vibiumResult: VibiumAccessibilityResult, defaultWCAGLevel: 'A' | 'AA' | 'AAA'): ContrastAnalysis[];
77
+ export declare function extractContrastFromVibiumResult(vibiumResult: VibiumAccessibilityResult, defaultWCAGLevel: 'A' | 'AA' | 'AAA'): Result<ContrastAnalysis[], Error>;
68
78
  /**
69
79
  * Run accessibility audit using unified browser client (agent-browser or other)
70
80
  */
@@ -100,6 +110,11 @@ export declare function checkKeyboardWithVibium(vibiumClient: VibiumClient, url:
100
110
  headless: boolean;
101
111
  timeout: number;
102
112
  }): Promise<Result<KeyboardNavigationReport, Error>>;
113
+ /**
114
+ * What an automated keyboard check does not measure (#1228): it lists the
115
+ * focusable elements and runs rule checks, but tabs through nothing.
116
+ */
117
+ export declare const KEYBOARD_NOT_MEASURED: readonly string[];
103
118
  /**
104
119
  * Get element type from tag name
105
120
  */
@@ -6,6 +6,7 @@ import { LoggerFactory } from '../../../logging/index.js';
6
6
  import { ok, err } from '../../../shared/types/index.js';
7
7
  import { toError } from '../../../shared/error-utils.js';
8
8
  import { safeJsonParse } from '../../../shared/safe-json.js';
9
+ import { AXE_CONTRAST_DATA_JS, contrastValues, isContrastRule, toContrastAnalysis, } from './accessibility-contrast.js';
9
10
  /**
10
11
  * WCAG 2.2 criteria definitions (shared reference)
11
12
  */
@@ -51,11 +52,16 @@ export function getAxeTagsForWcagLevel(level) {
51
52
  return [...aaTags, 'wcag2aaa', 'wcag21aaa', 'wcag22aaa'];
52
53
  }
53
54
  /**
54
- * Map Vibium Severity type to our impact type
55
+ * Map an axe-core impact or a Vibium severity to our impact type
55
56
  */
56
57
  export function mapImpactSeverity(severity) {
57
58
  const severityMap = {
59
+ // axe-core impacts (#1270)
58
60
  critical: 'critical',
61
+ serious: 'serious',
62
+ moderate: 'moderate',
63
+ minor: 'minor',
64
+ // Vibium severities
59
65
  high: 'serious',
60
66
  medium: 'moderate',
61
67
  low: 'minor',
@@ -76,13 +82,10 @@ export function getErrorMessage(result) {
76
82
  // Axe-Core Injection & Execution
77
83
  // ============================================================================
78
84
  /**
79
- * Inject and run axe-core in the browser context
85
+ * Browser-side statements that load axe-core into the page when it is not
86
+ * loaded yet. For use inside an async function.
80
87
  */
81
- export async function runAxeCore(client, wcagLevel, options) {
82
- const tags = getAxeTagsForWcagLevel(wcagLevel);
83
- const excludeSelectors = options?.excludeSelectors ?? [];
84
- const axeScript = `
85
- (async function() {
88
+ export const AXE_LOADER_JS = `
86
89
  // Check if axe is already loaded
87
90
  if (typeof axe === 'undefined') {
88
91
  // Inject axe-core from CDN
@@ -97,7 +100,16 @@ export async function runAxeCore(client, wcagLevel, options) {
97
100
  script.onerror = () => reject(new Error('Failed to load axe-core'));
98
101
  setTimeout(() => reject(new Error('Timeout loading axe-core')), 10000);
99
102
  });
100
- }
103
+ }`;
104
+ /**
105
+ * Inject and run axe-core in the browser context
106
+ */
107
+ export async function runAxeCore(client, wcagLevel, options) {
108
+ const tags = getAxeTagsForWcagLevel(wcagLevel);
109
+ const excludeSelectors = options?.excludeSelectors ?? [];
110
+ const axeScript = `
111
+ (async function() {
112
+ ${AXE_LOADER_JS}
101
113
 
102
114
  // Configure and run axe
103
115
  const config = {
@@ -122,7 +134,8 @@ export async function runAxeCore(client, wcagLevel, options) {
122
134
  selector: n.target.join(' > '),
123
135
  html: n.html,
124
136
  target: n.target,
125
- failureSummary: n.failureSummary
137
+ failureSummary: n.failureSummary,
138
+ contrast: (${AXE_CONTRAST_DATA_JS})(n)
126
139
  }))
127
140
  })),
128
141
  passes: results.passes.map(p => p.id),
@@ -188,6 +201,8 @@ export function mapAxeResultToReport(url, axeResult, wcagLevel) {
188
201
  html: n.html,
189
202
  target: n.target,
190
203
  failureSummary: n.failureSummary ?? '',
204
+ // #1228: keep the colours and ratio axe-core measured
205
+ ...(isContrastRule(v.id) ? { contrast: contrastValues(n.contrast, n.failureSummary) } : {}),
191
206
  })),
192
207
  }));
193
208
  const passes = axeResult.passes.map(ruleId => ({
@@ -271,42 +286,24 @@ export function mapVibiumResultToReport(url, vibiumResult, wcagLevel) {
271
286
  };
272
287
  }
273
288
  /**
274
- * Extract contrast analysis from Vibium accessibility result
289
+ * Extract contrast analysis from Vibium accessibility result.
290
+ * Only elements the audit reported are listed, with the values it reported
291
+ * (#1228). An error means the contrast rule produced no result.
275
292
  */
276
293
  export function extractContrastFromVibiumResult(vibiumResult, defaultWCAGLevel) {
277
294
  const analyses = [];
278
295
  for (const violation of vibiumResult.violations) {
279
- if (violation.rule.includes('contrast') || violation.id.includes('contrast')) {
296
+ if (isContrastRule(violation.rule) || isContrastRule(violation.id)) {
280
297
  for (const node of violation.nodes) {
281
- const colorMatch = node.failureSummary.match(/foreground:?\s*([#\w\d]+).*?background:?\s*([#\w\d]+)/i);
282
- const ratioMatch = node.failureSummary.match(/ratio\s*[:\s]*(\d+\.?\d*)/i);
283
- analyses.push({
284
- element: node.selector,
285
- foreground: colorMatch?.[1] || '#000000',
286
- background: colorMatch?.[2] || '#ffffff',
287
- ratio: ratioMatch ? parseFloat(ratioMatch[1]) : 1.0,
288
- requiredRatio: defaultWCAGLevel === 'AAA' ? 7 : 4.5,
289
- passes: false,
290
- wcagLevel: defaultWCAGLevel,
291
- });
298
+ analyses.push(toContrastAnalysis(node.selector, contrastValues(undefined, node.failureSummary), false, defaultWCAGLevel));
292
299
  }
293
300
  }
294
301
  }
295
- if (analyses.length === 0 && vibiumResult.passedRules.some(r => r.includes('contrast'))) {
296
- const commonElements = ['h1', 'p', 'a', 'button'];
297
- for (const element of commonElements) {
298
- analyses.push({
299
- element,
300
- foreground: '#333333',
301
- background: '#ffffff',
302
- ratio: 12.63,
303
- requiredRatio: defaultWCAGLevel === 'AAA' ? 7 : 4.5,
304
- passes: true,
305
- wcagLevel: defaultWCAGLevel,
306
- });
307
- }
302
+ if (analyses.length === 0 && !vibiumResult.passedRules.some(isContrastRule)) {
303
+ return err(new Error('the contrast rule reported neither a violation nor a pass'));
308
304
  }
309
- return analyses;
305
+ // A passing rule is reported without its elements, so no element is listed for it.
306
+ return ok(analyses);
310
307
  }
311
308
  // ============================================================================
312
309
  // Browser Audit Methods
@@ -454,8 +451,7 @@ export async function checkContrastWithVibium(vibiumClient, url, defaultWCAGLeve
454
451
  if (!a11yResult.success) {
455
452
  return err(new Error(`Contrast check failed: ${getErrorMessage(a11yResult)}`));
456
453
  }
457
- const analyses = extractContrastFromVibiumResult(a11yResult.value, defaultWCAGLevel);
458
- return ok(analyses);
454
+ return extractContrastFromVibiumResult(a11yResult.value, defaultWCAGLevel);
459
455
  }
460
456
  finally {
461
457
  await vibiumClient.quit();
@@ -497,7 +493,8 @@ export async function checkKeyboardWithVibium(vibiumClient, url, defaultWCAGLeve
497
493
  index,
498
494
  selector: elem.selector,
499
495
  elementType: getElementType(elem.tagName),
500
- hasVisibleFocus: true,
496
+ // #1228: the focus indicator is not checked, so it is not reported as visible
497
+ hasVisibleFocus: null,
501
498
  }));
502
499
  const a11yResult = await vibiumClient.checkAccessibility({
503
500
  wcagLevel: defaultWCAGLevel,
@@ -507,6 +504,10 @@ export async function checkKeyboardWithVibium(vibiumClient, url, defaultWCAGLeve
507
504
  });
508
505
  const issues = [];
509
506
  const traps = [];
507
+ const notMeasured = [...KEYBOARD_NOT_MEASURED];
508
+ if (!a11yResult.success) {
509
+ notMeasured.push(`keyboard rule checks (${getErrorMessage(a11yResult)})`);
510
+ }
510
511
  if (a11yResult.success) {
511
512
  for (const violation of a11yResult.value.violations) {
512
513
  if (violation.rule.includes('focus') || violation.rule.includes('keyboard')) {
@@ -535,6 +536,7 @@ export async function checkKeyboardWithVibium(vibiumClient, url, defaultWCAGLeve
535
536
  tabOrder,
536
537
  issues,
537
538
  traps,
539
+ notMeasured,
538
540
  };
539
541
  return ok(report);
540
542
  }
@@ -549,6 +551,14 @@ export async function checkKeyboardWithVibium(vibiumClient, url, defaultWCAGLeve
549
551
  // ============================================================================
550
552
  // Keyboard Helpers
551
553
  // ============================================================================
554
+ /**
555
+ * What an automated keyboard check does not measure (#1228): it lists the
556
+ * focusable elements and runs rule checks, but tabs through nothing.
557
+ */
558
+ export const KEYBOARD_NOT_MEASURED = [
559
+ 'visible focus indicator (hasVisibleFocus is null)',
560
+ 'focus traps (no element was tabbed through)',
561
+ ];
552
562
  /**
553
563
  * Get element type from tag name
554
564
  */
@@ -572,7 +582,7 @@ export function mapKeyboardIssueType(rule) {
572
582
  if (rule.includes('skip') || rule.includes('bypass')) {
573
583
  return 'skip-link-missing';
574
584
  }
575
- if (rule.includes('order') || rule.includes('sequence')) {
585
+ if (rule.includes('order') || rule.includes('sequence') || rule.includes('tabindex')) {
576
586
  return 'incorrect-tab-order';
577
587
  }
578
588
  return 'non-interactive-focusable';
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Agentic QE v3 - Contrast and keyboard checks through the unified browser client (#1228)
3
+ *
4
+ * The page audit runs through agent-browser (the default browser for audits);
5
+ * these checks use the same client, so they are measured whenever the audit is.
6
+ * Each runs axe-core in the loaded page and reports only what it returned.
7
+ */
8
+ import { Result } from '../../../shared/types/index.js';
9
+ import type { IBrowserClient } from '../../../integrations/browser/index.js';
10
+ import type { ContrastAnalysis, KeyboardNavigationReport } from '../interfaces.js';
11
+ type WcagLevel = 'A' | 'AA' | 'AAA';
12
+ type BrowserConfig = {
13
+ headless: boolean;
14
+ timeout: number;
15
+ };
16
+ /**
17
+ * Check colour contrast with axe-core's contrast rule. Lists every element the
18
+ * rule checked, failing and passing, with the colours and ratio it measured.
19
+ */
20
+ export declare function checkContrastWithBrowserClient(client: IBrowserClient, url: string, wcagLevel: WcagLevel, browserConfig: BrowserConfig): Promise<Result<ContrastAnalysis[], Error>>;
21
+ /**
22
+ * Check keyboard navigation: the focusable elements in document order and
23
+ * axe-core's keyboard rules. Focus indicators and traps are not measured.
24
+ */
25
+ export declare function checkKeyboardWithBrowserClient(client: IBrowserClient, url: string, browserConfig: BrowserConfig): Promise<Result<KeyboardNavigationReport, Error>>;
26
+ export {};
27
+ //# sourceMappingURL=accessibility-tester-checks.d.ts.map
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Agentic QE v3 - Contrast and keyboard checks through the unified browser client (#1228)
3
+ *
4
+ * The page audit runs through agent-browser (the default browser for audits);
5
+ * these checks use the same client, so they are measured whenever the audit is.
6
+ * Each runs axe-core in the loaded page and reports only what it returned.
7
+ */
8
+ import { ok, err } from '../../../shared/types/index.js';
9
+ import { toError } from '../../../shared/error-utils.js';
10
+ import { safeJsonParse } from '../../../shared/safe-json.js';
11
+ import { AXE_LOADER_JS, KEYBOARD_NOT_MEASURED, getElementType, mapKeyboardIssueType } from './accessibility-tester-browser.js';
12
+ import { AXE_CONTRAST_DATA_JS, contrastValues, toContrastAnalysis } from './accessibility-contrast.js';
13
+ /** axe-core rules that concern keyboard operation and focus order. */
14
+ const KEYBOARD_RULES = ['bypass', 'tabindex', 'scrollable-region-focusable', 'accesskeys', 'frame-focusable-content'];
15
+ /** Browser-side helper that builds a CSS selector for an element. */
16
+ const CSS_PATH_JS = `function (el) {
17
+ if (el.id) return '#' + CSS.escape(el.id);
18
+ var parts = [];
19
+ while (el && el.nodeType === 1 && el !== document.documentElement) {
20
+ var part = el.tagName.toLowerCase();
21
+ var parent = el.parentElement;
22
+ if (parent) {
23
+ var same = Array.prototype.filter.call(parent.children, function (c) { return c.tagName === el.tagName; });
24
+ if (same.length > 1) part += ':nth-of-type(' + (same.indexOf(el) + 1) + ')';
25
+ }
26
+ parts.unshift(part);
27
+ el = parent;
28
+ }
29
+ return parts.join(' > ');
30
+ }`;
31
+ /**
32
+ * Check colour contrast with axe-core's contrast rule. Lists every element the
33
+ * rule checked, failing and passing, with the colours and ratio it measured.
34
+ */
35
+ export async function checkContrastWithBrowserClient(client, url, wcagLevel, browserConfig) {
36
+ const rule = wcagLevel === 'AAA' ? 'color-contrast-enhanced' : 'color-contrast';
37
+ const script = `
38
+ (async function() {
39
+ ${AXE_LOADER_JS}
40
+ const contrastOf = ${AXE_CONTRAST_DATA_JS};
41
+ const results = await axe.run(document, { runOnly: { type: 'rule', values: ['${rule}'] } });
42
+ const nodesOf = (rules) => rules.flatMap(r => r.nodes.map(n => ({
43
+ selector: n.target.join(' > '),
44
+ failureSummary: n.failureSummary,
45
+ contrast: contrastOf(n)
46
+ })));
47
+ return JSON.stringify({ violations: nodesOf(results.violations), passes: nodesOf(results.passes) });
48
+ })();
49
+ `;
50
+ const result = await withLoadedPage(client, url, browserConfig, () => evaluateJson(client, script, 'contrast check'));
51
+ if (!result.success)
52
+ return result;
53
+ return ok([
54
+ ...result.value.violations.map((n) => toContrastAnalysis(n.selector, contrastValues(n.contrast, n.failureSummary), false, wcagLevel)),
55
+ ...result.value.passes.map((n) => toContrastAnalysis(n.selector, contrastValues(n.contrast, n.failureSummary), true, wcagLevel)),
56
+ ]);
57
+ }
58
+ /**
59
+ * Check keyboard navigation: the focusable elements in document order and
60
+ * axe-core's keyboard rules. Focus indicators and traps are not measured.
61
+ */
62
+ export async function checkKeyboardWithBrowserClient(client, url, browserConfig) {
63
+ const script = `
64
+ (async function() {
65
+ ${AXE_LOADER_JS}
66
+ const cssPath = ${CSS_PATH_JS};
67
+ const candidates = document.querySelectorAll('a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])');
68
+ const focusable = Array.from(candidates)
69
+ .filter(el => !el.disabled && el.getClientRects().length > 0)
70
+ .map(el => ({ selector: cssPath(el), tagName: el.tagName }));
71
+ const results = await axe.run(document, { runOnly: { type: 'rule', values: ${JSON.stringify(KEYBOARD_RULES)} } });
72
+ return JSON.stringify({
73
+ focusable,
74
+ violations: results.violations.map(v => ({
75
+ id: v.id,
76
+ nodes: v.nodes.map(n => ({ selector: n.target.join(' > '), failureSummary: n.failureSummary }))
77
+ }))
78
+ });
79
+ })();
80
+ `;
81
+ const result = await withLoadedPage(client, url, browserConfig, () => evaluateJson(client, script, 'keyboard check'));
82
+ if (!result.success)
83
+ return result;
84
+ const tabOrder = result.value.focusable.map((el, index) => ({
85
+ index,
86
+ selector: el.selector,
87
+ elementType: getElementType(el.tagName),
88
+ hasVisibleFocus: null,
89
+ }));
90
+ const issues = result.value.violations.flatMap((v) => v.nodes.map((n) => ({
91
+ type: mapKeyboardIssueType(v.id),
92
+ selector: n.selector,
93
+ description: n.failureSummary ?? v.id,
94
+ })));
95
+ return ok({
96
+ url,
97
+ focusableElements: tabOrder.length,
98
+ tabOrder,
99
+ issues,
100
+ traps: [],
101
+ notMeasured: [...KEYBOARD_NOT_MEASURED],
102
+ });
103
+ }
104
+ async function withLoadedPage(client, url, browserConfig, run) {
105
+ try {
106
+ const launchResult = await client.launch({ headless: browserConfig.headless });
107
+ if (!launchResult.success) {
108
+ return err(new Error(`Failed to launch browser: ${launchResult.error?.message ?? 'Unknown error'}`));
109
+ }
110
+ try {
111
+ const navResult = await client.navigate(url);
112
+ if (!navResult.success) {
113
+ return err(new Error(`Failed to navigate to ${url}: ${navResult.error?.message ?? 'Unknown error'}`));
114
+ }
115
+ return await run();
116
+ }
117
+ finally {
118
+ await client.quit();
119
+ }
120
+ }
121
+ catch (error) {
122
+ return err(toError(error));
123
+ }
124
+ }
125
+ async function evaluateJson(client, script, label) {
126
+ const evalResult = await client.evaluate(script);
127
+ if (!evalResult.success) {
128
+ return err(new Error(`Failed to run the ${label}: ${evalResult.error?.message ?? 'Unknown error'}`));
129
+ }
130
+ try {
131
+ return ok(safeJsonParse(evalResult.value));
132
+ }
133
+ catch (parseError) {
134
+ return err(new Error(`Failed to parse the ${label} results: ${parseError}`));
135
+ }
136
+ }
137
+ //# sourceMappingURL=accessibility-tester-checks.js.map
@@ -65,6 +65,11 @@ export declare class AccessibilityTesterService implements IAccessibilityAuditin
65
65
  /** Simulation mode: synthetic results, labelled unmeasured and never stored. */
66
66
  private auditSimulated;
67
67
  checkContrast(url: string): Promise<Result<ContrastAnalysis[], Error>>;
68
+ /**
69
+ * Run a check with the browser client the page audit uses (agent-browser),
70
+ * then Vibium (#1228). The error is the not-measured reason when neither ran.
71
+ */
72
+ private runBrowserCheck;
68
73
  validateWCAGLevel(url: string, level: 'A' | 'AA' | 'AAA'): Promise<Result<WCAGValidationResult, Error>>;
69
74
  checkKeyboardNavigation(url: string): Promise<Result<KeyboardNavigationReport, Error>>;
70
75
  private storeReport;
@@ -30,6 +30,7 @@ import { toError } from '../../../shared/error-utils.js';
30
30
  import { getBrowserClientForUseCase, } from '../../../integrations/browser/index.js';
31
31
  // Extracted modules
32
32
  import { WCAG_CRITERIA, getErrorMessage, auditWithBrowserClient, auditWithVibium, auditElementWithVibium, checkContrastWithVibium, checkKeyboardWithVibium, } from './accessibility-tester-browser.js';
33
+ import { checkContrastWithBrowserClient, checkKeyboardWithBrowserClient, } from './accessibility-tester-checks.js';
33
34
  import { initializeRules, filterRulesByLevel, runSimulatedRule, hashUrl, } from './accessibility-tester-heuristics.js';
34
35
  const DEFAULT_CONFIG = {
35
36
  defaultWCAGLevel: 'AA',
@@ -245,26 +246,47 @@ export class AccessibilityTesterService {
245
246
  // ============================================================================
246
247
  async checkContrast(url) {
247
248
  try {
248
- // v2 (#1145): never serve a guessed result cached by an earlier version.
249
- const cacheKey = `visual-accessibility:contrast:v2:${hashUrl(url)}`;
249
+ // v3 (#1145, #1228): never serve a guessed result cached by an earlier version.
250
+ const cacheKey = `visual-accessibility:contrast:v3:${hashUrl(url)}`;
250
251
  const cached = await this.memory.get(cacheKey);
251
252
  if (cached)
252
253
  return ok(cached);
253
- if (!this.shouldUseBrowserMode() || !this.vibiumClient) {
254
- return err(notMeasuredError('Color contrast', url, this.notMeasuredReason([])));
255
- }
256
- const browserResult = await checkContrastWithVibium(this.vibiumClient, url, this.config.defaultWCAGLevel, this.config.browserConfig);
257
- if (!browserResult.success) {
258
- return err(notMeasuredError('Color contrast', url, this.notMeasuredReason([getErrorMessage(browserResult)])));
259
- }
260
- const analyses = browserResult.value;
261
- await this.memory.set(cacheKey, analyses, { namespace: 'visual-accessibility', ttl: 3600 });
262
- return ok(analyses);
254
+ const level = this.config.defaultWCAGLevel;
255
+ const result = await this.runBrowserCheck((client) => checkContrastWithBrowserClient(client, url, level, this.config.browserConfig), (vibium) => checkContrastWithVibium(vibium, url, level, this.config.browserConfig));
256
+ if (!result.success)
257
+ return err(notMeasuredError('Color contrast', url, result.error.message));
258
+ await this.memory.set(cacheKey, result.value, { namespace: 'visual-accessibility', ttl: 3600 });
259
+ return ok(result.value);
263
260
  }
264
261
  catch (error) {
265
262
  return err(toError(error));
266
263
  }
267
264
  }
265
+ /**
266
+ * Run a check with the browser client the page audit uses (agent-browser),
267
+ * then Vibium (#1228). The error is the not-measured reason when neither ran.
268
+ */
269
+ async runBrowserCheck(withClient, withVibium) {
270
+ const failures = [];
271
+ if (this.shouldUseBrowserMode()) {
272
+ const browserClient = await this.getBrowserClient();
273
+ if (browserClient) {
274
+ const result = await withClient(browserClient);
275
+ if (result.success)
276
+ return result;
277
+ failures.push(getErrorMessage(result));
278
+ logger.warn(`Browser client check failed: ${getErrorMessage(result)}`);
279
+ }
280
+ if (this.vibiumClient) {
281
+ const result = await withVibium(this.vibiumClient);
282
+ if (result.success)
283
+ return result;
284
+ failures.push(getErrorMessage(result));
285
+ logger.warn(`Vibium check failed: ${getErrorMessage(result)}`);
286
+ }
287
+ }
288
+ return err(new Error(this.notMeasuredReason(failures)));
289
+ }
268
290
  // ============================================================================
269
291
  // WCAG Validation
270
292
  // ============================================================================
@@ -297,22 +319,19 @@ export class AccessibilityTesterService {
297
319
  // ============================================================================
298
320
  async checkKeyboardNavigation(url) {
299
321
  try {
300
- const cacheKey = `visual-accessibility:keyboard:v2:${hashUrl(url)}`;
322
+ // v3 (#1228): earlier versions cached hasVisibleFocus: true without measuring it.
323
+ const cacheKey = `visual-accessibility:keyboard:v3:${hashUrl(url)}`;
301
324
  const cached = await this.memory.get(cacheKey);
302
325
  if (cached)
303
326
  return ok(cached);
304
- if (!this.shouldUseBrowserMode() || !this.config.enableKeyboardCheck || !this.vibiumClient) {
305
- const reason = this.config.enableKeyboardCheck
306
- ? this.notMeasuredReason([]) : 'the keyboard check is disabled';
307
- return err(notMeasuredError('Keyboard navigation', url, reason));
327
+ if (!this.config.enableKeyboardCheck) {
328
+ return err(notMeasuredError('Keyboard navigation', url, 'the keyboard check is disabled'));
308
329
  }
309
- const browserResult = await checkKeyboardWithVibium(this.vibiumClient, url, this.config.defaultWCAGLevel, this.config.browserConfig);
310
- if (!browserResult.success) {
311
- return err(notMeasuredError('Keyboard navigation', url, this.notMeasuredReason([getErrorMessage(browserResult)])));
312
- }
313
- const report = browserResult.value;
314
- await this.memory.set(cacheKey, report, { namespace: 'visual-accessibility', ttl: 3600 });
315
- return ok(report);
330
+ const result = await this.runBrowserCheck((client) => checkKeyboardWithBrowserClient(client, url, this.config.browserConfig), (vibium) => checkKeyboardWithVibium(vibium, url, this.config.defaultWCAGLevel, this.config.browserConfig));
331
+ if (!result.success)
332
+ return err(notMeasuredError('Keyboard navigation', url, result.error.message));
333
+ await this.memory.set(cacheKey, result.value, { namespace: 'visual-accessibility', ttl: 3600 });
334
+ return ok(result.value);
316
335
  }
317
336
  catch (error) {
318
337
  return err(toError(error));
@@ -178,9 +178,8 @@ export declare class BrowserSwarmCoordinator {
178
178
  /**
179
179
  * Run accessibility audit across all viewports
180
180
  *
181
- * Navigates to the URL and runs accessibility audits in each viewport.
182
- * Note: This is a placeholder implementation. Real accessibility auditing
183
- * would require integration with axe-core or similar tools.
181
+ * Navigates to the URL and runs axe-core in each viewport. A viewport whose
182
+ * audit did not run is listed under failures, never as a clean report (#1228).
184
183
  *
185
184
  * @param url - URL to audit
186
185
  * @returns Accessibility audit results by viewport
@@ -24,6 +24,7 @@ import { v4 as uuidv4 } from 'uuid';
24
24
  import { ok, err } from '../../../shared/types/index.js';
25
25
  import { FilePath } from '../../../shared/value-objects/index.js';
26
26
  import { toError } from '../../../shared/error-utils.js';
27
+ import { runAxeCore, mapAxeResultToReport } from './accessibility-tester-browser.js';
27
28
  import { getBrowserClientForUseCase, } from '../../../integrations/browser/index.js';
28
29
  /**
29
30
  * Standard viewport configurations for common devices
@@ -304,9 +305,8 @@ export class BrowserSwarmCoordinator {
304
305
  /**
305
306
  * Run accessibility audit across all viewports
306
307
  *
307
- * Navigates to the URL and runs accessibility audits in each viewport.
308
- * Note: This is a placeholder implementation. Real accessibility auditing
309
- * would require integration with axe-core or similar tools.
308
+ * Navigates to the URL and runs axe-core in each viewport. A viewport whose
309
+ * audit did not run is listed under failures, never as a clean report (#1228).
310
310
  *
311
311
  * @param url - URL to audit
312
312
  * @returns Accessibility audit results by viewport
@@ -326,17 +326,11 @@ export class BrowserSwarmCoordinator {
326
326
  if (this.isAgentBrowserClient(session.client)) {
327
327
  await session.client.setViewport(viewport.width, viewport.height);
328
328
  }
329
- // TODO: Integrate with axe-core or similar accessibility testing tool
330
- // For now, return a placeholder report
331
- const report = {
332
- url,
333
- timestamp: new Date(),
334
- violations: [],
335
- passes: [],
336
- incomplete: [],
337
- score: 100,
338
- wcagLevel: 'AA',
339
- };
329
+ const axeResult = await runAxeCore(session.client, 'AA');
330
+ if (!axeResult.success) {
331
+ throw new Error(`Accessibility NOT MEASURED in this viewport: ${axeResult.error.message}`);
332
+ }
333
+ const report = { ...mapAxeResultToReport(url, axeResult.value, 'AA'), measured: true };
340
334
  return report;
341
335
  });
342
336
  // Process results
@@ -171,12 +171,15 @@ export class CoverageLearner {
171
171
  /**
172
172
  * Persist a coverage session to the database
173
173
  */
174
- persistSession(session) {
174
+ async persistSession(session) {
175
175
  if (!this.db)
176
176
  return;
177
177
  try {
178
- const database = this.db.getDatabase();
179
- database.prepare(`
178
+ const memory = this.db;
179
+ const database = memory.getDatabase();
180
+ // #1283: queued, so a locked memory.db does not freeze the MCP server's
181
+ // event loop while the tool call that recorded this coverage session waits.
182
+ await memory.writeWhenUnlocked(() => database.prepare(`
180
183
  INSERT OR REPLACE INTO coverage_sessions (
181
184
  id, target_path, agent_id, technique,
182
185
  before_lines, before_branches, before_functions,
@@ -184,10 +187,10 @@ export class CoverageLearner {
184
187
  tests_generated, tests_passed, gaps_json,
185
188
  duration_ms, started_at, completed_at, context_json
186
189
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
187
- `).run(session.id, session.targetPath, session.agentId, session.technique, session.beforeCoverage.lines, session.beforeCoverage.branches, session.beforeCoverage.functions, session.afterCoverage.lines, session.afterCoverage.branches, session.afterCoverage.functions, session.testsGenerated, session.testsPassed, JSON.stringify(session.gapsTargeted), session.durationMs, session.startedAt instanceof Date ? session.startedAt.toISOString() : session.startedAt, session.completedAt instanceof Date ? session.completedAt.toISOString() : session.completedAt, session.context ? JSON.stringify(session.context) : null);
190
+ `).run(session.id, session.targetPath, session.agentId, session.technique, session.beforeCoverage.lines, session.beforeCoverage.branches, session.beforeCoverage.functions, session.afterCoverage.lines, session.afterCoverage.branches, session.afterCoverage.functions, session.testsGenerated, session.testsPassed, JSON.stringify(session.gapsTargeted), session.durationMs, session.startedAt instanceof Date ? session.startedAt.toISOString() : session.startedAt, session.completedAt instanceof Date ? session.completedAt.toISOString() : session.completedAt, session.context ? JSON.stringify(session.context) : null));
188
191
  this.persistCount++;
189
192
  if (this.persistCount % CoverageLearner.RETENTION_CLEANUP_INTERVAL === 0) {
190
- this.enforceRetention(database);
193
+ await this.enforceRetention(memory);
191
194
  }
192
195
  }
193
196
  catch (error) {
@@ -197,14 +200,15 @@ export class CoverageLearner {
197
200
  /**
198
201
  * Delete oldest rows beyond retention limit
199
202
  */
200
- enforceRetention(database) {
203
+ async enforceRetention(memory) {
201
204
  try {
205
+ const database = memory.getDatabase();
202
206
  const maxRows = this.config.maxOutcomesInMemory * 2;
203
- database.prepare(`
207
+ await memory.writeWhenUnlocked(() => database.prepare(`
204
208
  DELETE FROM coverage_sessions WHERE id NOT IN (
205
209
  SELECT id FROM coverage_sessions ORDER BY created_at DESC LIMIT ?
206
210
  )
207
- `).run(maxRows);
211
+ `).run(maxRows));
208
212
  }
209
213
  catch (error) {
210
214
  console.warn('[CoverageLearner] Retention cleanup failed:', toErrorMessage(error));
@@ -216,7 +220,7 @@ export class CoverageLearner {
216
220
  async learnFromSession(session) {
217
221
  // Store session
218
222
  this.sessionStore.add(session);
219
- this.persistSession(session);
223
+ await this.persistSession(session);
220
224
  // Calculate improvement
221
225
  const improvement = this.calculateOverallImprovement(session);
222
226
  // Only learn from significant improvements