agentic-qe 3.15.15 → 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 (495) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +90 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/audit/witness-chain.d.ts +7 -0
  5. package/dist/audit/witness-chain.js +10 -0
  6. package/dist/cli/bundle.js +6 -6
  7. package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-45NWEKVS.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-LVHMYFEF.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
  12. package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-CZKHXDDS.js} +2 -2
  13. package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-ELDZH3CZ.js} +4 -4
  14. package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-5MT4T47Z.js} +3 -3
  15. package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
  16. package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-6TGYPC2B.js} +2 -2
  17. package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-HQWZFO52.js} +3 -3
  18. package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-WVILM4SO.js} +2 -2
  19. package/dist/cli/chunks/{browser-6LACARWE.js → browser-RX5ALU3H.js} +2 -2
  20. package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
  21. package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-24OX5TQJ.js} +1 -1
  22. package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-24QHCVX6.js} +1 -1
  23. package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-2H4XH6FT.js} +2 -2
  24. package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-2YZ4G6NW.js} +1 -1
  25. package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
  26. package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-32GN3JKR.js} +1 -1
  27. package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-3HD7E6HN.js} +2 -2
  28. package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-4D4DENG6.js} +2 -2
  29. package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-4LQFBY5L.js} +6 -6
  30. package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-4NFQLP6R.js} +1 -1
  31. package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-525CFDUE.js} +2 -2
  32. package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
  33. package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-5JZRZI4S.js} +2 -2
  34. package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-5LAVKGLH.js} +2 -2
  35. package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
  36. package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-5PBLPQ5T.js} +2 -2
  37. package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
  38. package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-5SPCGMBB.js} +2 -2
  39. package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-5V3TI2LG.js} +1 -1
  40. package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-5VZL4UVN.js} +2 -2
  41. package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-63GMRQ25.js} +1 -1
  42. package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-63ZKI4PX.js} +6 -6
  43. package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-67Z5R7RJ.js} +2 -2
  44. package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-6DPYNAOK.js} +2 -2
  45. package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-6ICX3FEG.js} +3 -3
  46. package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-6XXZDV2C.js} +2 -2
  47. package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-6ZBXSOX6.js} +2 -2
  48. package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-72XSEQMW.js} +2 -2
  49. package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-7TE5ONQQ.js} +1 -1
  50. package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-A5GBXCP5.js} +2 -2
  51. package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-AAMLQ2LF.js} +3 -3
  52. package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
  53. package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-AGRV5B3T.js} +2 -2
  54. package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-AJMJNQMP.js} +1 -1
  55. package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-AR67RJPY.js} +2 -2
  56. package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-ASEOFRIG.js} +2 -2
  57. package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-BEKDKVQT.js} +2 -2
  58. package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-BY5OF7OH.js} +2 -2
  59. package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-C5FP5GW3.js} +2 -2
  60. package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-C6D5AHBO.js} +2 -2
  61. package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-CAKMOVZ6.js} +2 -2
  62. package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-CEYSYSK5.js} +2 -2
  63. package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-CGGUM2YJ.js} +2 -2
  64. package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-CJSHWQXP.js} +2 -2
  65. package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-CRPIYUTJ.js} +2 -2
  66. package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-D6COXLYE.js} +2 -2
  67. package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-DTMAS2GB.js} +2 -2
  68. package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-DVYHMDFR.js} +470 -411
  69. package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
  70. package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-E3D4GPLP.js} +3 -3
  71. package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-EA4YQVKS.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4D4CWP72.js → chunk-EGYE5UPQ.js} +2 -2
  73. package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-EK7OLYOZ.js} +2 -2
  74. package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-F742SZAX.js} +2 -2
  75. package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-FBDVGRSC.js} +1 -1
  76. package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-FDDC72IA.js} +2 -2
  77. package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-FL64OUBA.js} +2 -2
  78. package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-FLNAW7C4.js} +2 -2
  79. package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-G5RHFBAY.js} +2 -2
  80. package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-GAHNO6JJ.js} +2 -2
  81. package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-GFWHUQSF.js} +2 -2
  82. package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-GJYHWYXR.js} +2 -2
  83. package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-GQ6TUIKY.js} +1 -1
  84. package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-GSKMOPL7.js} +2 -2
  85. package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-HCH4Y6XX.js} +2 -2
  86. package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-HGWXF45W.js} +1 -1
  87. package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-HJ6ZGVTB.js} +2 -2
  88. package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-HLUXXCHF.js} +1 -1
  89. package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-HVRRLYX6.js} +4 -4
  90. package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-I7MQIM2U.js} +1 -1
  91. package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-IESR7TNB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-IHRXZZQM.js} +1 -1
  93. package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-IOKYCMTJ.js} +6 -6
  94. package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-IOQ6ZQ5W.js} +1 -1
  95. package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-IOYG4VFL.js} +2 -2
  96. package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-IUBJVHNB.js} +2 -2
  97. package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-J442IZLE.js} +1 -1
  98. package/dist/cli/chunks/{chunk-G242G224.js → chunk-J4ELZNLY.js} +2 -2
  99. package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
  100. package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
  101. package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-JHQCRRJI.js} +2 -2
  102. package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-JQ3DYUMS.js} +2 -2
  103. package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-KITOPKRG.js} +2 -2
  104. package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-KKU2QGSJ.js} +2 -2
  105. package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
  106. package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-KNSRL6NO.js} +2 -2
  107. package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-KPRCB5LT.js} +2 -2
  108. package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-KQYJ4VQ5.js} +1 -1
  109. package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-KU2AUFGX.js} +2 -2
  110. package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-KVF4NXGQ.js} +2 -2
  111. package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-KXCLACFG.js} +2 -2
  112. package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-L2DWPVNJ.js} +1 -1
  113. package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-L6QSTQME.js} +2 -2
  114. package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-LE4QJREF.js} +1 -1
  115. package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-LKTTUHLF.js} +2 -2
  116. package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-LQLPB2T6.js} +2 -2
  117. package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-LRSX2FJM.js} +1 -1
  118. package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
  119. package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
  120. package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-MAFQV4U4.js} +2 -2
  121. package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-MD43XRX5.js} +1 -1
  122. package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-MI5MFHRA.js} +2 -2
  123. package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-MO55CVMT.js} +32 -32
  124. package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-N7HL5PHH.js} +1 -1
  125. package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
  126. package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-NDJ7P2EP.js} +1 -1
  127. package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-NO3IV5Q5.js} +1 -1
  128. package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-NQXXI77K.js} +2 -2
  129. package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-NVEWF4JV.js} +1 -1
  130. package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-NZU4ACBZ.js} +2 -2
  131. package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
  132. package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-OAEE6JWQ.js} +2 -2
  133. package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-OCV2XEWQ.js} +2 -2
  134. package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-P3EYRILV.js} +2 -2
  135. package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PEQDY4BO.js} +2 -2
  136. package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-PF7RBAYL.js} +2 -2
  137. package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-PHT5N7SC.js} +2 -2
  138. package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-PINSJCM3.js} +1 -1
  139. package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-PPUZWYUG.js} +2 -2
  140. package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-QPEOLAAS.js} +1 -1
  141. package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-QQWBWEJS.js} +18 -18
  142. package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-QVDCVD5D.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-RJIEG3NA.js} +2 -2
  144. package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-RV74I3YO.js} +2 -2
  145. package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-S75SOOZL.js} +2 -2
  146. package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-SASBO5Y5.js} +2 -2
  147. package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-SDLWKRVL.js} +2 -2
  148. package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-SHKOCGNK.js} +2 -2
  149. package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-SI6DPU5D.js} +1 -1
  150. package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-SJ6Y4725.js} +2 -2
  151. package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-SR52XP5F.js} +1 -1
  152. package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-SSUAAX3F.js} +2 -2
  153. package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-SSYAQZXA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-SUDMM5SO.js} +2 -2
  155. package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-TIUKLYAI.js} +1 -1
  156. package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-TVGI32MB.js} +33 -33
  157. package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-U2A7NHZA.js} +2 -2
  158. package/dist/cli/chunks/{chunk-TX2CHQD7.js → chunk-UE5ZOZR2.js} +2 -2
  159. package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-UHEOGZLX.js} +11 -11
  160. package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
  161. package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-V5NHZV7S.js} +2 -2
  162. package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-VJCIEHEF.js} +1 -1
  163. package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-VMDFFTCK.js} +1 -1
  164. package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
  165. package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-VWPM27GU.js} +2 -2
  166. package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-VXFLJNCA.js} +2 -2
  167. package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-W5HQUIML.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-WP4RETKG.js} +2 -2
  169. package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-XIIQ5QTT.js} +2 -2
  170. package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-XIQW7EFL.js} +2 -2
  171. package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-XWUWX7BV.js} +4 -4
  172. package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-Y4PFUMOU.js} +1 -1
  173. package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
  174. package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-YLMNVLDK.js} +1 -1
  175. package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-YNMJEDN5.js} +2 -2
  176. package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-YPBSUGMI.js} +1 -1
  177. package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-YRAX7SFJ.js} +2 -2
  178. package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-YTHTQPWR.js} +1 -1
  179. package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-YU2BDRSD.js} +1 -1
  180. package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
  181. package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-ZFL436FN.js} +2 -2
  182. package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-ZJH5MU2I.js} +2 -2
  183. package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-ZQ2XW3IP.js} +2 -2
  184. package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
  185. package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-MFUR4CWV.js} +2 -2
  186. package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-PNDLQ6XV.js} +2 -2
  187. package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-PFZ4M7NC.js} +2 -2
  188. package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-5HH6NLZN.js} +2 -2
  189. package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-QCKYLGLC.js} +2 -2
  190. package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
  191. package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-EASVPFXR.js} +2 -2
  192. package/dist/cli/chunks/{code-WY3GJXHX.js → code-UJXDVYRK.js} +4 -3
  193. package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-BZJ3UDP4.js} +2 -2
  194. package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-XSQZUVOZ.js} +2 -2
  195. package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-OWOOJFI2.js} +2 -2
  196. package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-KP5TOHDT.js} +2 -2
  197. package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-IFKQXLHM.js} +2 -2
  198. package/dist/cli/chunks/{copilot-installer-BHPDSELY.js → copilot-installer-IGJ6KGQY.js} +2 -2
  199. package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
  200. package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-MMDDNKZB.js} +2 -2
  201. package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-LUH2B7NT.js} +3 -3
  202. package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
  203. package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-4YLM5GWM.js} +2 -2
  204. package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
  205. package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-MZKVM4CJ.js} +3 -3
  206. package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-X4CYW665.js} +2 -2
  207. package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-7BM2XINO.js} +2 -2
  208. package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-Y5APLEYB.js} +2 -2
  209. package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-X3ZRJNAH.js} +2 -2
  210. package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-2UW5KQJB.js} +2 -2
  211. package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-35W4CIBV.js} +2 -2
  212. package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
  213. package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
  214. package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
  215. package/dist/cli/chunks/{eval-OQELIWJK.js → eval-4QA2SROK.js} +2 -2
  216. package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
  217. package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-FIORX6GN.js} +2 -2
  218. package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-6LYI2T4G.js} +2 -2
  219. package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-ZOO7LMIC.js} +2 -2
  220. package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
  221. package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-7WF53H4F.js} +3 -3
  222. package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
  223. package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-DEKKMOVW.js} +4 -4
  224. package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
  225. package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
  226. package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
  227. package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
  228. package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-4YOQC6L4.js} +2 -2
  229. package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-TAOKV4EJ.js} +23 -22
  230. package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
  231. package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-BODRJLHL.js} +2 -2
  232. package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-RKMYJNTU.js} +3 -3
  233. package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
  234. package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-MXHSLSB2.js} +2 -2
  235. package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-HUE57IFW.js} +6 -6
  236. package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
  237. package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
  238. package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-S333IKYQ.js} +2 -2
  239. package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-WM5DLQWC.js} +2 -2
  240. package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
  241. package/dist/cli/chunks/{learning-FZTD72CF.js → learning-LNHMQLH5.js} +3 -3
  242. package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-EWFXYZZR.js} +4 -4
  243. package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
  244. package/dist/cli/chunks/{load-YKTPOYBE.js → load-FGYGWVDK.js} +2 -2
  245. package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
  246. package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-2FHNAAOM.js} +2 -2
  247. package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DZMQ73AB.js} +5 -5
  248. package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
  249. package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
  250. package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-6F2UAEUW.js} +2 -2
  251. package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-XY3BGOTZ.js} +2 -2
  252. package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-B4CNKUOS.js} +5 -5
  253. package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
  254. package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
  255. package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-FG5RKVRO.js} +2 -2
  256. package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-3BT4KEVJ.js} +2 -2
  257. package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-WI4RIN7O.js} +2 -2
  258. package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
  259. package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
  260. package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
  261. package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-WNODKPGW.js} +2 -2
  262. package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-5RHAEPYZ.js} +2 -2
  263. package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
  264. package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-WPHR7BGQ.js} +2 -2
  265. package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-4RKTEZMX.js} +3 -3
  266. package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
  267. package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
  268. package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-TPAWHOHH.js} +2 -2
  269. package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-7AVHFNDI.js} +2 -2
  270. package/dist/cli/chunks/router-EP34O3KB.js +2 -0
  271. package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
  272. package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-YKEDVJSH.js} +2 -2
  273. package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-JUAMM354.js} +2 -2
  274. package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
  275. package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
  276. package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
  277. package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
  278. package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
  279. package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
  280. package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
  281. package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
  282. package/dist/cli/chunks/{security-A3IMVLFM.js → security-ORDN3RD2.js} +3 -3
  283. package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
  284. package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
  285. package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
  286. package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-OXRJYZXN.js} +2 -2
  287. package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-BCX5D4HY.js} +2 -2
  288. package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-LFG7RUU6.js} +2 -2
  289. package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
  290. package/dist/cli/chunks/{sync-NTUR53PI.js → sync-YJEE2K2L.js} +2 -2
  291. package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
  292. package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-CILP36I7.js} +4 -4
  293. package/dist/cli/chunks/{test-O6FK3FVF.js → test-SD457QJ6.js} +4 -4
  294. package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
  295. package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-ISI2O4Q5.js} +3 -3
  296. package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
  297. package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-XOC5KG7S.js} +2 -2
  298. package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-LSLQAARK.js} +2 -2
  299. package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
  300. package/dist/cli/chunks/{types-4AOKZYOX.js → types-5BLCGLCR.js} +2 -2
  301. package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
  302. package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
  303. package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
  304. package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-RQJYLK3J.js} +2 -2
  305. package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-QBHWXXCK.js} +2 -2
  306. package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-IKXBKFB5.js} +2 -2
  307. package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
  308. package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
  309. package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-HQGDZT5D.js} +2 -2
  310. package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
  311. package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
  312. package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
  313. package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
  314. package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-RXYQNFJB.js} +2 -2
  315. package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-FBKCA4H6.js} +4 -4
  316. package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
  317. package/dist/cli/chunks/wrappers-TWSKBTWD.js +2 -0
  318. package/dist/cli/commands/code.js +4 -0
  319. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  320. package/dist/cli/handlers/task-handler.d.ts +5 -0
  321. package/dist/cli/handlers/task-handler.js +21 -1
  322. package/dist/cli/utils/task-result.d.ts +11 -0
  323. package/dist/cli/utils/task-result.js +39 -0
  324. package/dist/coordination/handlers/test-execution-handlers.js +92 -58
  325. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  326. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  327. package/dist/domains/code-intelligence/coordinator.js +46 -13
  328. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  329. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
  330. package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
  331. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  332. package/dist/domains/quality-assessment/coordinator.js +2 -1
  333. package/dist/domains/test-execution/coordinator.js +10 -5
  334. package/dist/domains/test-execution/interfaces.d.ts +12 -0
  335. package/dist/domains/test-execution/plugin.js +6 -2
  336. package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
  337. package/dist/domains/test-execution/services/retry-handler.js +14 -9
  338. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  339. package/dist/domains/test-execution/services/test-executor.js +28 -9
  340. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  341. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  342. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  343. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  344. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  345. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  346. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  347. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  348. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  349. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  350. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  351. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  352. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  353. package/dist/feedback/coverage-learner.js +13 -9
  354. package/dist/feedback/test-outcome-tracker.js +13 -9
  355. package/dist/governance/witness-chain.d.ts +5 -0
  356. package/dist/governance/witness-chain.js +22 -6
  357. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  358. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  359. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  360. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  361. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  362. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  363. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  364. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  365. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  366. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  367. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  368. package/dist/kernel/unified-memory.d.ts +24 -0
  369. package/dist/kernel/unified-memory.js +63 -8
  370. package/dist/learning/aqe-learning-engine.js +1 -1
  371. package/dist/learning/embed-and-insert-pattern.js +4 -2
  372. package/dist/learning/embedder-endpoint-client.d.ts +31 -0
  373. package/dist/learning/embedder-endpoint-client.js +103 -10
  374. package/dist/learning/embedding-space.d.ts +12 -0
  375. package/dist/learning/embedding-space.js +17 -0
  376. package/dist/learning/experience-capture-middleware.js +25 -13
  377. package/dist/learning/experience-capture.js +1 -1
  378. package/dist/learning/experience-consolidation.d.ts +18 -0
  379. package/dist/learning/experience-consolidation.js +55 -8
  380. package/dist/learning/experience-space-verification.d.ts +71 -0
  381. package/dist/learning/experience-space-verification.js +147 -0
  382. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  383. package/dist/learning/pattern-lifecycle.js +153 -76
  384. package/dist/learning/pattern-null-store.d.ts +5 -0
  385. package/dist/learning/pattern-null-store.js +8 -0
  386. package/dist/learning/pattern-promotion.js +6 -3
  387. package/dist/learning/pattern-store.d.ts +6 -0
  388. package/dist/learning/pattern-store.js +19 -6
  389. package/dist/learning/qe-reasoning-bank.js +2 -2
  390. package/dist/learning/real-embeddings.js +3 -1
  391. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  392. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  393. package/dist/learning/rvf-pattern-store.js +6 -2
  394. package/dist/learning/sqlite-persistence.d.ts +6 -0
  395. package/dist/learning/sqlite-persistence.js +10 -0
  396. package/dist/mcp/bundle.js +641 -570
  397. package/dist/mcp/entry.js +4 -0
  398. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  399. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  400. package/dist/mcp/protocol-server.js +1 -0
  401. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  402. package/dist/mcp/types.d.ts +6 -0
  403. package/dist/optimization/session-cache.d.ts +17 -1
  404. package/dist/optimization/session-cache.js +40 -36
  405. package/dist/planning/goap-planner.d.ts +6 -0
  406. package/dist/planning/goap-planner.js +35 -19
  407. package/dist/planning/plan-executor.js +24 -15
  408. package/dist/routing/co-execution-repository.js +12 -9
  409. package/dist/routing/routing-feedback.d.ts +8 -0
  410. package/dist/routing/routing-feedback.js +46 -24
  411. package/dist/routing/routing-outcomes-migration.js +7 -2
  412. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  413. package/dist/shared/llm/spend-ledger.js +64 -39
  414. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  415. package/dist/shared/sqlite-lock-wait.js +37 -0
  416. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  417. package/dist/shared/sqlite-write-queue.js +38 -0
  418. package/dist/shared/test-runner-project.d.ts +69 -0
  419. package/dist/shared/test-runner-project.js +186 -0
  420. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  421. package/dist/skills/security-visual-testing/index.js +49 -35
  422. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  423. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  424. package/dist/workers/workers/learning-consolidation.js +8 -7
  425. package/package.json +1 -1
  426. package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
  427. package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
  428. package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
  429. package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
  430. package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
  431. package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
  432. package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
  433. package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
  434. package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
  435. package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
  436. package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
  437. package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
  438. package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
  439. package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
  440. package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
  441. package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
  442. package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
  443. package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
  444. package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
  445. package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
  446. package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
  447. package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
  448. package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
  449. package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
  450. package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
  451. package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
  452. package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
  453. package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
  454. package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
  455. package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
  456. package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
  457. package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
  458. package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
  459. package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
  460. package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
  461. package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
  462. package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
  463. package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
  464. package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
  465. package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
  466. package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
  467. package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
  468. package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
  469. package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
  470. package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
  471. package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
  472. package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
  473. package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
  474. package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
  475. package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
  476. package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
  477. package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
  478. package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
  479. package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
  480. package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
  481. package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
  482. package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
  483. package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
  484. package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
  485. package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
  486. package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
  487. package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
  488. package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
  489. package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
  490. package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
  491. package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
  492. package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
  493. package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
  494. package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
  495. package/dist/cli/chunks/wrappers-5QFMCKXL.js +0 -2
@@ -25,6 +25,20 @@ export interface WorkflowStatus {
25
25
  progress: number;
26
26
  error?: string;
27
27
  }
28
+ /**
29
+ * A color-contrast violation as axe-core measured it (#1228). A colour the
30
+ * browser did not report is null and an unreported ratio is -1, with
31
+ * measured: false.
32
+ */
33
+ export interface ContrastIssue {
34
+ element: string;
35
+ foreground: string | null;
36
+ background: string | null;
37
+ ratio: number;
38
+ required: number;
39
+ measured: boolean;
40
+ notMeasuredReason?: string;
41
+ }
28
42
  /**
29
43
  * Coordinator configuration
30
44
  */
@@ -140,13 +154,7 @@ export declare class VisualAccessibilityCoordinator extends BaseDomainCoordinato
140
154
  url: string;
141
155
  wcagLevel?: 'A' | 'AA' | 'AAA';
142
156
  }): Promise<Result<{
143
- issues: Array<{
144
- element: string;
145
- foreground: string;
146
- background: string;
147
- ratio: number;
148
- required: number;
149
- }>;
157
+ issues: ContrastIssue[];
150
158
  }, Error>>;
151
159
  /**
152
160
  * Test responsive design across multiple viewports
@@ -11,6 +11,7 @@ import { cosineSimilarity } from '../../shared/utils/vector-math.js';
11
11
  import { createVisualTesterServiceWithDependencies, } from './services/visual-tester.js';
12
12
  import { AccessibilityTesterService, } from './services/accessibility-tester.js';
13
13
  import { ResponsiveTesterService, } from './services/responsive-tester.js';
14
+ import { contrastValues, contrastValuesMeasured, defaultRequiredRatio } from './services/accessibility-contrast.js';
14
15
  import { A2CAlgorithm } from '../../integrations/rl-suite/algorithms/a2c.js';
15
16
  import { createQEFlashAttention } from '../../integrations/ruvector/wrappers.js';
16
17
  // CQ-002: Base domain coordinator
@@ -589,13 +590,20 @@ export class VisualAccessibilityCoordinator extends BaseDomainCoordinator {
589
590
  }
590
591
  // Filter for color contrast violations
591
592
  const contrastViolations = auditResult.value.violations.filter((v) => v.id.includes('color-contrast') || v.id.includes('contrast'));
592
- const issues = contrastViolations.flatMap((violation) => violation.nodes.map((node) => ({
593
- element: node.target.join(' '),
594
- foreground: '#000000',
595
- background: '#ffffff',
596
- ratio: 1.0,
597
- required: level === 'AAA' ? 7.0 : 4.5,
598
- })));
593
+ // #1228: the colours and ratio axe-core measured; unreported values are null / -1
594
+ const issues = contrastViolations.flatMap((violation) => violation.nodes.map((node) => {
595
+ const values = node.contrast ?? contrastValues(undefined, node.failureSummary);
596
+ const measured = contrastValuesMeasured(values);
597
+ return {
598
+ element: node.target.join(' '),
599
+ foreground: values.foreground,
600
+ background: values.background,
601
+ ratio: values.ratio ?? -1,
602
+ required: values.requiredRatio ?? defaultRequiredRatio(level),
603
+ measured,
604
+ ...(measured ? {} : { notMeasuredReason: 'axe-core did not report the colours and ratio for this element' }),
605
+ };
606
+ }));
599
607
  return ok({ issues });
600
608
  }
601
609
  catch (error) {
@@ -187,18 +187,36 @@ export interface ViolationNode {
187
187
  readonly target: string[];
188
188
  readonly failureSummary: string;
189
189
  readonly fixSuggestion?: string;
190
+ /** Colours and ratio axe-core reported for a contrast violation (#1228). */
191
+ readonly contrast?: ContrastValues;
192
+ }
193
+ /**
194
+ * Colours and contrast ratio as the browser measured them (#1228).
195
+ * A value the browser did not report is null, never a default colour or ratio.
196
+ */
197
+ export interface ContrastValues {
198
+ readonly foreground: string | null;
199
+ readonly background: string | null;
200
+ readonly ratio: number | null;
201
+ /** The ratio axe-core required for this element (3:1 for large text), when reported. */
202
+ readonly requiredRatio: number | null;
190
203
  }
191
204
  /**
192
205
  * Color contrast analysis
193
206
  */
194
207
  export interface ContrastAnalysis {
195
208
  readonly element: string;
196
- readonly foreground: string;
197
- readonly background: string;
209
+ /** null when the browser did not report the colour (#1228). */
210
+ readonly foreground: string | null;
211
+ readonly background: string | null;
212
+ /** -1 when the browser did not report the ratio (#1228). */
198
213
  readonly ratio: number;
199
214
  readonly requiredRatio: number;
200
215
  readonly passes: boolean;
201
216
  readonly wcagLevel: 'A' | 'AA' | 'AAA';
217
+ /** false when the colours or ratio were not reported; see notMeasuredReason (#1228). */
218
+ readonly measured?: boolean;
219
+ readonly notMeasuredReason?: string;
202
220
  }
203
221
  export interface VisualRegressionDetectedEvent extends DomainEvent {
204
222
  readonly type: 'VisualRegressionDetectedEvent';
@@ -360,12 +378,18 @@ export interface KeyboardNavigationReport {
360
378
  readonly tabOrder: TabOrderItem[];
361
379
  readonly issues: KeyboardIssue[];
362
380
  readonly traps: FocusTrap[];
381
+ /**
382
+ * What this report did not measure (#1228). An empty `traps` list, or a
383
+ * null `hasVisibleFocus`, is not a clean result for an aspect listed here.
384
+ */
385
+ readonly notMeasured?: string[];
363
386
  }
364
387
  export interface TabOrderItem {
365
388
  readonly index: number;
366
389
  readonly selector: string;
367
390
  readonly elementType: string;
368
- readonly hasVisibleFocus: boolean;
391
+ /** null: the focus indicator was not measured (#1228). */
392
+ readonly hasVisibleFocus: boolean | null;
369
393
  }
370
394
  export interface KeyboardIssue {
371
395
  readonly type: 'no-focus-indicator' | 'skip-link-missing' | 'incorrect-tab-order' | 'non-interactive-focusable';
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Agentic QE v3 - Measured colour contrast values (#1228)
3
+ *
4
+ * axe-core reports the colours and ratio it measured for each element checked
5
+ * by its color-contrast rules: in the check data (fgColor, bgColor,
6
+ * contrastRatio, expectedContrastRatio) and in the failure summary text. These
7
+ * helpers carry those values through. A value the browser did not report is
8
+ * null (or a ratio of -1 in ContrastAnalysis), never a default colour or ratio.
9
+ */
10
+ import type { ContrastAnalysis, ContrastValues } from '../interfaces.js';
11
+ /** The fields of axe-core's color-contrast check data that AQE keeps. */
12
+ export interface AxeContrastData {
13
+ fgColor?: string;
14
+ bgColor?: string;
15
+ contrastRatio?: number;
16
+ expectedContrastRatio?: string;
17
+ }
18
+ /** axe-core rule ids that measure text contrast. */
19
+ export declare const CONTRAST_RULE_IDS: readonly ["color-contrast", "color-contrast-enhanced"];
20
+ export declare function isContrastRule(ruleId: string): boolean;
21
+ /**
22
+ * Browser-side expression `(node) => AxeContrastData | undefined` for an axe-core
23
+ * result node. Embedded in the scripts that run axe-core in the page.
24
+ */
25
+ export declare const AXE_CONTRAST_DATA_JS = "function (n) {\n var checks = [].concat(n.any || [], n.all || [], n.none || []);\n for (var i = 0; i < checks.length; i++) {\n var c = checks[i];\n if ((c.id === 'color-contrast' || c.id === 'color-contrast-enhanced') && c.data) {\n return {\n fgColor: c.data.fgColor,\n bgColor: c.data.bgColor,\n contrastRatio: c.data.contrastRatio,\n expectedContrastRatio: c.data.expectedContrastRatio\n };\n }\n }\n return undefined;\n}";
26
+ /**
27
+ * Read the values from axe-core's failure summary, e.g. "Element has insufficient
28
+ * color contrast of 2.32 (foreground color: #aaaaaa, background color: #ffffff,
29
+ * ...). Expected contrast ratio of 4.5:1".
30
+ */
31
+ export declare function parseContrastFailureSummary(summary: string | undefined): ContrastValues;
32
+ /** Values from axe-core's check data, with gaps filled from the failure summary. */
33
+ export declare function contrastValues(data: AxeContrastData | undefined, failureSummary?: string): ContrastValues;
34
+ export declare function contrastValuesMeasured(values: ContrastValues): boolean;
35
+ /** The ratio WCAG requires for normal text at a level, when axe-core did not say. */
36
+ export declare function defaultRequiredRatio(level: 'A' | 'AA' | 'AAA'): number;
37
+ /** One element's contrast result; unreported values stay unmeasured. */
38
+ export declare function toContrastAnalysis(element: string, values: ContrastValues, passes: boolean, wcagLevel: 'A' | 'AA' | 'AAA'): ContrastAnalysis;
39
+ //# sourceMappingURL=accessibility-contrast.d.ts.map
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Agentic QE v3 - Measured colour contrast values (#1228)
3
+ *
4
+ * axe-core reports the colours and ratio it measured for each element checked
5
+ * by its color-contrast rules: in the check data (fgColor, bgColor,
6
+ * contrastRatio, expectedContrastRatio) and in the failure summary text. These
7
+ * helpers carry those values through. A value the browser did not report is
8
+ * null (or a ratio of -1 in ContrastAnalysis), never a default colour or ratio.
9
+ */
10
+ /** axe-core rule ids that measure text contrast. */
11
+ export const CONTRAST_RULE_IDS = ['color-contrast', 'color-contrast-enhanced'];
12
+ export function isContrastRule(ruleId) {
13
+ return ruleId.includes('contrast');
14
+ }
15
+ /**
16
+ * Browser-side expression `(node) => AxeContrastData | undefined` for an axe-core
17
+ * result node. Embedded in the scripts that run axe-core in the page.
18
+ */
19
+ export const AXE_CONTRAST_DATA_JS = `function (n) {
20
+ var checks = [].concat(n.any || [], n.all || [], n.none || []);
21
+ for (var i = 0; i < checks.length; i++) {
22
+ var c = checks[i];
23
+ if ((c.id === 'color-contrast' || c.id === 'color-contrast-enhanced') && c.data) {
24
+ return {
25
+ fgColor: c.data.fgColor,
26
+ bgColor: c.data.bgColor,
27
+ contrastRatio: c.data.contrastRatio,
28
+ expectedContrastRatio: c.data.expectedContrastRatio
29
+ };
30
+ }
31
+ }
32
+ return undefined;
33
+ }`;
34
+ const COLOR = '(#[0-9a-f]{3,8}|rgba?\\([^)]*\\))';
35
+ /**
36
+ * Read the values from axe-core's failure summary, e.g. "Element has insufficient
37
+ * color contrast of 2.32 (foreground color: #aaaaaa, background color: #ffffff,
38
+ * ...). Expected contrast ratio of 4.5:1".
39
+ */
40
+ export function parseContrastFailureSummary(summary) {
41
+ const text = summary ?? '';
42
+ const ratio = text.match(/contrast (?:ratio )?of\s*(\d+(?:\.\d+)?)(?![\d.]|\s*:)/i);
43
+ const fg = text.match(new RegExp(`foreground colou?r:?\\s*${COLOR}`, 'i'));
44
+ const bg = text.match(new RegExp(`background colou?r:?\\s*${COLOR}`, 'i'));
45
+ const expected = text.match(/expected contrast ratio of\s*(\d+(?:\.\d+)?)\s*:\s*1/i);
46
+ return {
47
+ foreground: fg?.[1] ?? null,
48
+ background: bg?.[1] ?? null,
49
+ ratio: validRatio(ratio ? parseFloat(ratio[1]) : undefined),
50
+ requiredRatio: validRatio(expected ? parseFloat(expected[1]) : undefined),
51
+ };
52
+ }
53
+ /** Values from axe-core's check data, with gaps filled from the failure summary. */
54
+ export function contrastValues(data, failureSummary) {
55
+ const parsed = parseContrastFailureSummary(failureSummary);
56
+ const expected = data?.expectedContrastRatio?.match(/(\d+(?:\.\d+)?)/);
57
+ return {
58
+ foreground: nonEmpty(data?.fgColor) ?? parsed.foreground,
59
+ background: nonEmpty(data?.bgColor) ?? parsed.background,
60
+ ratio: validRatio(data?.contrastRatio) ?? parsed.ratio,
61
+ requiredRatio: validRatio(expected ? parseFloat(expected[1]) : undefined) ?? parsed.requiredRatio,
62
+ };
63
+ }
64
+ export function contrastValuesMeasured(values) {
65
+ return values.foreground !== null && values.background !== null && values.ratio !== null;
66
+ }
67
+ /** The ratio WCAG requires for normal text at a level, when axe-core did not say. */
68
+ export function defaultRequiredRatio(level) {
69
+ return level === 'AAA' ? 7 : 4.5;
70
+ }
71
+ /** One element's contrast result; unreported values stay unmeasured. */
72
+ export function toContrastAnalysis(element, values, passes, wcagLevel) {
73
+ const measured = contrastValuesMeasured(values);
74
+ return {
75
+ element,
76
+ foreground: values.foreground,
77
+ background: values.background,
78
+ ratio: values.ratio ?? -1,
79
+ requiredRatio: values.requiredRatio ?? defaultRequiredRatio(wcagLevel),
80
+ passes,
81
+ wcagLevel,
82
+ measured,
83
+ ...(measured ? {} : { notMeasuredReason: 'the browser did not report the colours and ratio for this element' }),
84
+ };
85
+ }
86
+ function validRatio(value) {
87
+ // A contrast ratio is between 1 and 21; axe-core reports 0 when it could not compute one.
88
+ return typeof value === 'number' && Number.isFinite(value) && value >= 1 ? value : null;
89
+ }
90
+ function nonEmpty(value) {
91
+ return typeof value === 'string' && value.trim() !== '' ? value : null;
92
+ }
93
+ //# sourceMappingURL=accessibility-contrast.js.map
@@ -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