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
@@ -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
@@ -142,12 +142,15 @@ export class TestOutcomeTracker {
142
142
  /**
143
143
  * Persist a single outcome to DB (write-through)
144
144
  */
145
- persistOutcome(outcome) {
145
+ async persistOutcome(outcome) {
146
146
  if (!this.db)
147
147
  return;
148
148
  try {
149
- const database = this.db.getDatabase();
150
- database.prepare(`
149
+ const memory = this.db;
150
+ const database = memory.getDatabase();
151
+ // #1283: queued, so a locked memory.db does not freeze the MCP server's
152
+ // event loop while the tool call that recorded this test outcome waits.
153
+ await memory.writeWhenUnlocked(() => database.prepare(`
151
154
  INSERT OR REPLACE INTO test_outcomes (
152
155
  id, test_id, test_name, generated_by, pattern_id,
153
156
  framework, language, domain, passed, error_message,
@@ -156,10 +159,10 @@ export class TestOutcomeTracker {
156
159
  maintainability_score, complexity, lines_of_code,
157
160
  assertion_count, file_path, source_file_path, metadata_json
158
161
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
159
- `).run(outcome.id, outcome.testId, outcome.testName, outcome.generatedBy, outcome.patternId || null, outcome.framework, outcome.language, outcome.domain, outcome.passed ? 1 : 0, outcome.errorMessage || null, outcome.coverage.lines, outcome.coverage.branches, outcome.coverage.functions, outcome.mutationScore ?? null, outcome.executionTimeMs, outcome.flaky ? 1 : 0, outcome.flakinessScore ?? null, outcome.maintainabilityScore, outcome.complexity ?? null, outcome.linesOfCode ?? null, outcome.assertionCount ?? null, outcome.filePath || null, outcome.sourceFilePath || null, outcome.metadata ? JSON.stringify(outcome.metadata) : null);
162
+ `).run(outcome.id, outcome.testId, outcome.testName, outcome.generatedBy, outcome.patternId || null, outcome.framework, outcome.language, outcome.domain, outcome.passed ? 1 : 0, outcome.errorMessage || null, outcome.coverage.lines, outcome.coverage.branches, outcome.coverage.functions, outcome.mutationScore ?? null, outcome.executionTimeMs, outcome.flaky ? 1 : 0, outcome.flakinessScore ?? null, outcome.maintainabilityScore, outcome.complexity ?? null, outcome.linesOfCode ?? null, outcome.assertionCount ?? null, outcome.filePath || null, outcome.sourceFilePath || null, outcome.metadata ? JSON.stringify(outcome.metadata) : null));
160
163
  this.persistCount++;
161
164
  if (this.persistCount % TestOutcomeTracker.RETENTION_CLEANUP_INTERVAL === 0) {
162
- this.enforceRetention(database);
165
+ await this.enforceRetention(memory);
163
166
  }
164
167
  }
165
168
  catch (error) {
@@ -169,14 +172,15 @@ export class TestOutcomeTracker {
169
172
  /**
170
173
  * Delete oldest rows beyond retention limit
171
174
  */
172
- enforceRetention(database) {
175
+ async enforceRetention(memory) {
173
176
  try {
177
+ const database = memory.getDatabase();
174
178
  const maxRows = this.config.maxOutcomesInMemory * 2; // Keep 2x in-memory limit in DB
175
- database.prepare(`
179
+ await memory.writeWhenUnlocked(() => database.prepare(`
176
180
  DELETE FROM test_outcomes WHERE id NOT IN (
177
181
  SELECT id FROM test_outcomes ORDER BY created_at DESC LIMIT ?
178
182
  )
179
- `).run(maxRows);
183
+ `).run(maxRows));
180
184
  }
181
185
  catch (error) {
182
186
  console.warn('[TestOutcomeTracker] Retention cleanup failed:', toErrorMessage(error));
@@ -188,7 +192,7 @@ export class TestOutcomeTracker {
188
192
  async track(outcome) {
189
193
  // 1. Store outcome
190
194
  this.store.add(outcome);
191
- this.persistOutcome(outcome);
195
+ await this.persistOutcome(outcome);
192
196
  // 2. Update pattern metrics if pattern was used
193
197
  if (outcome.patternId) {
194
198
  this.updatePatternMetrics(outcome);
@@ -245,6 +245,11 @@ export declare class WitnessChain {
245
245
  export interface IWitnessChainPersistence {
246
246
  /** Store a receipt in SQLite. Called after each appendWitness(). */
247
247
  insertReceipt(receipt: WitnessReceipt): void;
248
+ /**
249
+ * Store a receipt without blocking on a locked database (#1283). When
250
+ * present, appendWitness() uses it instead of insertReceipt().
251
+ */
252
+ insertReceiptWhenUnlocked?(receipt: WitnessReceipt): Promise<void>;
248
253
  /** Load all receipts from SQLite, ordered by chainIndex. */
249
254
  loadAllReceipts(): WitnessReceipt[];
250
255
  /** Get the total count of persisted receipts. */
@@ -18,6 +18,7 @@
18
18
  import { createHash, randomUUID } from 'crypto';
19
19
  import { LoggerFactory } from '../logging/index.js';
20
20
  import { getRuVectorFeatureFlags } from '../integrations/ruvector/feature-flags.js';
21
+ import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
21
22
  const logger = LoggerFactory.create('witness-chain');
22
23
  // ============================================================================
23
24
  // SPRT Accumulator
@@ -387,14 +388,25 @@ export class PersistentWitnessChain extends WitnessChain {
387
388
  */
388
389
  appendWitness(decision) {
389
390
  const receipt = super.appendWitness(decision);
390
- try {
391
- this.persistence.insertReceipt(receipt);
392
- }
393
- catch (err) {
391
+ const warn = (err) => {
394
392
  logger.warn('Failed to persist witness receipt to SQLite', {
395
393
  chainIndex: receipt.chainIndex,
396
394
  error: err instanceof Error ? err.message : String(err),
397
395
  });
396
+ };
397
+ try {
398
+ // #1283: queue the insert when the backend can, so a locked memory.db
399
+ // does not freeze the MCP server's event loop. The receipt is already in
400
+ // the in-memory chain, which is what callers read.
401
+ if (this.persistence.insertReceiptWhenUnlocked) {
402
+ this.persistence.insertReceiptWhenUnlocked(receipt).catch(warn);
403
+ }
404
+ else {
405
+ this.persistence.insertReceipt(receipt);
406
+ }
407
+ }
408
+ catch (err) {
409
+ warn(err);
398
410
  }
399
411
  return receipt;
400
412
  }
@@ -440,9 +452,13 @@ export function createWitnessChainSQLitePersistence(db) {
440
452
  const countStmt = db.prepare(`
441
453
  SELECT COUNT(*) as cnt FROM witness_chain_receipts
442
454
  `);
455
+ const insertReceipt = (receipt) => {
456
+ insertStmt.run(receipt.id, receipt.chainIndex, receipt.timestamp, receipt.previousHash, receipt.hash, receipt.decision.type, receipt.decision.decision, JSON.stringify(receipt.decision.context), receipt.decision.evidence ?? null);
457
+ };
443
458
  return {
444
- insertReceipt(receipt) {
445
- insertStmt.run(receipt.id, receipt.chainIndex, receipt.timestamp, receipt.previousHash, receipt.hash, receipt.decision.type, receipt.decision.decision, JSON.stringify(receipt.decision.context), receipt.decision.evidence ?? null);
459
+ insertReceipt,
460
+ insertReceiptWhenUnlocked(receipt) {
461
+ return writeWhenUnlockedOn(db, () => insertReceipt(receipt));
446
462
  },
447
463
  loadAllReceipts() {
448
464
  const rows = loadAllStmt.all();
@@ -41,6 +41,11 @@ export interface Experience {
41
41
  readonly avgTokenSavings: number;
42
42
  /** Embedding for similarity search */
43
43
  readonly embedding?: number[];
44
+ /**
45
+ * #1217: embedding-space identity (ADR-097 spaceId) the embedding was
46
+ * computed in. Only vectors from the active space are compared.
47
+ */
48
+ readonly embeddingSpaceId?: string;
44
49
  /** Creation timestamp */
45
50
  readonly createdAt: Date;
46
51
  /** Last applied timestamp */
@@ -135,6 +140,12 @@ export declare class ExperienceReplay {
135
140
  private idToExperienceId;
136
141
  private experienceIdToHnswId;
137
142
  private nextHnswId;
143
+ /**
144
+ * #1217: embedding space the HNSW index holds vectors of. The index only
145
+ * holds vectors of one space, so a similarity is never measured across
146
+ * spaces. Null until the embedder's space is known.
147
+ */
148
+ private indexSpaceId;
138
149
  private recentExperiences;
139
150
  private reservoirBuffer;
140
151
  private stats;
@@ -157,6 +168,10 @@ export declare class ExperienceReplay {
157
168
  /**
158
169
  * Load embeddings into HNSW index for O(log n) similarity search
159
170
  * Performance: 150x-12,500x faster than linear scan
171
+ *
172
+ * #1217: loads only vectors of the given embedding space, as the pattern
173
+ * banks do (ADR-097). Vectors of another space, or without provenance, are
174
+ * not comparable with a query embedded in this one.
160
175
  */
161
176
  private loadEmbeddingIndex;
162
177
  /**
@@ -245,6 +260,13 @@ export declare class ExperienceReplay {
245
260
  dispose(): Promise<void>;
246
261
  private ensureInitialized;
247
262
  private rowToExperience;
263
+ /**
264
+ * #1217: add a stored vector to the HNSW index. A vector of another
265
+ * embedding space re-binds the index to that space (the active one, since
266
+ * the vector was just computed): the rows of that space are reloaded,
267
+ * including this one.
268
+ */
269
+ private indexExperience;
248
270
  private floatArrayToBuffer;
249
271
  private bufferToFloatArray;
250
272
  }