agentic-qe 3.15.14 → 3.15.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/.claude/agents/v3/templates/qx-report-template.html +1 -1
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +136 -0
  4. package/assets/agents/v3/templates/qx-report-template.html +1 -1
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/audit/witness-chain.d.ts +7 -0
  7. package/dist/audit/witness-chain.js +10 -0
  8. package/dist/cli/bundle.js +6 -6
  9. package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
  10. package/dist/cli/chunks/agent-booster-wasm-45NWEKVS.js +2 -0
  11. package/dist/cli/chunks/{agent-handler-P3IY7XEE.js → agent-handler-LVHMYFEF.js} +2 -2
  12. package/dist/cli/chunks/{agent-memory-branch-WWKC2H3G.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
  13. package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
  14. package/dist/cli/chunks/{arena-EIV5OALF.js → arena-CZKHXDDS.js} +2 -2
  15. package/dist/cli/chunks/{arena-4BMFF6BS.js → arena-ELDZH3CZ.js} +4 -4
  16. package/dist/cli/chunks/{audit-DNTI453H.js → audit-5MT4T47Z.js} +3 -3
  17. package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
  18. package/dist/cli/chunks/{better-sqlite3-TQBQGNC6.js → better-sqlite3-6TGYPC2B.js} +2 -2
  19. package/dist/cli/chunks/{brain-handler-HY57CNAO.js → brain-handler-HQWZFO52.js} +3 -3
  20. package/dist/cli/chunks/{branch-enumerator-THPMZPHQ.js → branch-enumerator-WVILM4SO.js} +2 -2
  21. package/dist/cli/chunks/{browser-O6JJOZCK.js → browser-RX5ALU3H.js} +2 -2
  22. package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
  23. package/dist/cli/chunks/{chunk-CIINJHOX.js → chunk-24OX5TQJ.js} +1 -1
  24. package/dist/cli/chunks/{chunk-6P4Q4RTC.js → chunk-24QHCVX6.js} +1 -1
  25. package/dist/cli/chunks/{chunk-U6IOQKCT.js → chunk-2H4XH6FT.js} +2 -2
  26. package/dist/cli/chunks/{chunk-OGEIHS76.js → chunk-2YZ4G6NW.js} +1 -1
  27. package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
  28. package/dist/cli/chunks/{chunk-5PLBQZ5J.js → chunk-32GN3JKR.js} +1 -1
  29. package/dist/cli/chunks/{chunk-AJVLVF7V.js → chunk-3HD7E6HN.js} +2 -2
  30. package/dist/cli/chunks/{chunk-X7CUI7KH.js → chunk-4D4DENG6.js} +2 -2
  31. package/dist/cli/chunks/{chunk-E2JLAW3U.js → chunk-4LQFBY5L.js} +6 -6
  32. package/dist/cli/chunks/{chunk-E3QIQMMN.js → chunk-4NFQLP6R.js} +1 -1
  33. package/dist/cli/chunks/{chunk-7Y3LXH57.js → chunk-525CFDUE.js} +2 -2
  34. package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
  35. package/dist/cli/chunks/{chunk-X6Q2N5S5.js → chunk-5JZRZI4S.js} +2 -2
  36. package/dist/cli/chunks/{chunk-MB4UKUBV.js → chunk-5LAVKGLH.js} +2 -2
  37. package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
  38. package/dist/cli/chunks/{chunk-NKOLILT7.js → chunk-5PBLPQ5T.js} +2 -2
  39. package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
  40. package/dist/cli/chunks/{chunk-7T6L3LFN.js → chunk-5SPCGMBB.js} +2 -2
  41. package/dist/cli/chunks/{chunk-2QLE6NDW.js → chunk-5V3TI2LG.js} +1 -1
  42. package/dist/cli/chunks/{chunk-A2T56XVL.js → chunk-5VZL4UVN.js} +2 -2
  43. package/dist/cli/chunks/{chunk-TWOV3I3A.js → chunk-63GMRQ25.js} +1 -1
  44. package/dist/cli/chunks/{chunk-YGOSSVY5.js → chunk-63ZKI4PX.js} +6 -6
  45. package/dist/cli/chunks/{chunk-FHPNWHY7.js → chunk-67Z5R7RJ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-PCQZIAXB.js → chunk-6DPYNAOK.js} +2 -2
  47. package/dist/cli/chunks/{chunk-WCM6WE7G.js → chunk-6ICX3FEG.js} +3 -3
  48. package/dist/cli/chunks/{chunk-JB7R77SH.js → chunk-6XXZDV2C.js} +2 -2
  49. package/dist/cli/chunks/{chunk-FJOIBZUB.js → chunk-6ZBXSOX6.js} +2 -2
  50. package/dist/cli/chunks/{chunk-WZQADC5R.js → chunk-72XSEQMW.js} +2 -2
  51. package/dist/cli/chunks/{chunk-AYLEH2UF.js → chunk-7TE5ONQQ.js} +1 -1
  52. package/dist/cli/chunks/{chunk-7QUSNBAA.js → chunk-A5GBXCP5.js} +2 -2
  53. package/dist/cli/chunks/{chunk-7724KXM2.js → chunk-AAMLQ2LF.js} +3 -3
  54. package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
  55. package/dist/cli/chunks/{chunk-2UZBLC5H.js → chunk-AGRV5B3T.js} +2 -2
  56. package/dist/cli/chunks/{chunk-V6SE2ZU2.js → chunk-AJMJNQMP.js} +1 -1
  57. package/dist/cli/chunks/{chunk-2HPNGK7A.js → chunk-AR67RJPY.js} +2 -2
  58. package/dist/cli/chunks/{chunk-G7HGUQAE.js → chunk-ASEOFRIG.js} +2 -2
  59. package/dist/cli/chunks/{chunk-7TH4PJSU.js → chunk-BEKDKVQT.js} +2 -2
  60. package/dist/cli/chunks/{chunk-M5JEA6ZY.js → chunk-BY5OF7OH.js} +2 -2
  61. package/dist/cli/chunks/{chunk-OLUOVNUF.js → chunk-C5FP5GW3.js} +2 -2
  62. package/dist/cli/chunks/{chunk-R5RRWLRI.js → chunk-C6D5AHBO.js} +2 -2
  63. package/dist/cli/chunks/{chunk-K7GFYFBO.js → chunk-CAKMOVZ6.js} +2 -2
  64. package/dist/cli/chunks/{chunk-6NIGSY5L.js → chunk-CEYSYSK5.js} +2 -2
  65. package/dist/cli/chunks/{chunk-U4TML2VD.js → chunk-CGGUM2YJ.js} +2 -2
  66. package/dist/cli/chunks/{chunk-YE54T2NQ.js → chunk-CJSHWQXP.js} +2 -2
  67. package/dist/cli/chunks/{chunk-7SQTLUEN.js → chunk-CRPIYUTJ.js} +2 -2
  68. package/dist/cli/chunks/{chunk-65EE2EST.js → chunk-D6COXLYE.js} +2 -2
  69. package/dist/cli/chunks/{chunk-4WLIOPHX.js → chunk-DTMAS2GB.js} +2 -2
  70. package/dist/cli/chunks/{chunk-E7QTWGPI.js → chunk-DVYHMDFR.js} +470 -411
  71. package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
  72. package/dist/cli/chunks/{chunk-HSDWPQQY.js → chunk-E3D4GPLP.js} +3 -3
  73. package/dist/cli/chunks/{chunk-JJHLGGPP.js → chunk-EA4YQVKS.js} +1 -1
  74. package/dist/cli/chunks/{chunk-EIEEST4T.js → chunk-EGYE5UPQ.js} +2 -2
  75. package/dist/cli/chunks/{chunk-O756AOUX.js → chunk-EK7OLYOZ.js} +2 -2
  76. package/dist/cli/chunks/{chunk-57DRT6UA.js → chunk-F742SZAX.js} +2 -2
  77. package/dist/cli/chunks/{chunk-6OI5SK7M.js → chunk-FBDVGRSC.js} +1 -1
  78. package/dist/cli/chunks/{chunk-H3C5FJRH.js → chunk-FDDC72IA.js} +2 -2
  79. package/dist/cli/chunks/{chunk-IQRPR4KB.js → chunk-FL64OUBA.js} +2 -2
  80. package/dist/cli/chunks/{chunk-BNG4J3CE.js → chunk-FLNAW7C4.js} +2 -2
  81. package/dist/cli/chunks/{chunk-C3OIBFAA.js → chunk-G5RHFBAY.js} +2 -2
  82. package/dist/cli/chunks/{chunk-NPCXGX7N.js → chunk-GAHNO6JJ.js} +2 -2
  83. package/dist/cli/chunks/{chunk-PNRPVQGI.js → chunk-GFWHUQSF.js} +2 -2
  84. package/dist/cli/chunks/{chunk-OCN53CCK.js → chunk-GJYHWYXR.js} +2 -2
  85. package/dist/cli/chunks/{chunk-5Z4MO2F3.js → chunk-GQ6TUIKY.js} +1 -1
  86. package/dist/cli/chunks/{chunk-N736GLWZ.js → chunk-GSKMOPL7.js} +2 -2
  87. package/dist/cli/chunks/{chunk-43XHGWYH.js → chunk-HCH4Y6XX.js} +2 -2
  88. package/dist/cli/chunks/{chunk-QP6GL3O5.js → chunk-HGWXF45W.js} +1 -1
  89. package/dist/cli/chunks/{chunk-PGN4TARY.js → chunk-HJ6ZGVTB.js} +2 -2
  90. package/dist/cli/chunks/{chunk-M2TG7VDK.js → chunk-HLUXXCHF.js} +1 -1
  91. package/dist/cli/chunks/{chunk-UMHFTQTR.js → chunk-HVRRLYX6.js} +4 -4
  92. package/dist/cli/chunks/{chunk-L7PC675Y.js → chunk-I7MQIM2U.js} +1 -1
  93. package/dist/cli/chunks/{chunk-JSSU4RIK.js → chunk-IESR7TNB.js} +2 -2
  94. package/dist/cli/chunks/{chunk-H4LYXLAT.js → chunk-IHRXZZQM.js} +1 -1
  95. package/dist/cli/chunks/{chunk-HV43NX4A.js → chunk-IOKYCMTJ.js} +6 -6
  96. package/dist/cli/chunks/{chunk-NZQYJCO6.js → chunk-IOQ6ZQ5W.js} +1 -1
  97. package/dist/cli/chunks/{chunk-JO26SG47.js → chunk-IOYG4VFL.js} +2 -2
  98. package/dist/cli/chunks/{chunk-6O63ZTVX.js → chunk-IUBJVHNB.js} +2 -2
  99. package/dist/cli/chunks/{chunk-XSPMLJCQ.js → chunk-J442IZLE.js} +1 -1
  100. package/dist/cli/chunks/{chunk-LTGQJYYO.js → chunk-J4ELZNLY.js} +2 -2
  101. package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
  102. package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
  103. package/dist/cli/chunks/{chunk-TOJF3ZG4.js → chunk-JHQCRRJI.js} +2 -2
  104. package/dist/cli/chunks/{chunk-QUZ745UQ.js → chunk-JQ3DYUMS.js} +2 -2
  105. package/dist/cli/chunks/{chunk-P2TPH3TC.js → chunk-KITOPKRG.js} +2 -2
  106. package/dist/cli/chunks/{chunk-QNQE3EOH.js → chunk-KKU2QGSJ.js} +2 -2
  107. package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
  108. package/dist/cli/chunks/{chunk-L5VSLPMW.js → chunk-KNSRL6NO.js} +2 -2
  109. package/dist/cli/chunks/{chunk-INGXD5IX.js → chunk-KPRCB5LT.js} +2 -2
  110. package/dist/cli/chunks/{chunk-GY4P7KAI.js → chunk-KQYJ4VQ5.js} +1 -1
  111. package/dist/cli/chunks/{chunk-Z2S7DNFP.js → chunk-KU2AUFGX.js} +2 -2
  112. package/dist/cli/chunks/{chunk-O5CEL447.js → chunk-KVF4NXGQ.js} +2 -2
  113. package/dist/cli/chunks/{chunk-2IJO3657.js → chunk-KXCLACFG.js} +2 -2
  114. package/dist/cli/chunks/{chunk-ZJGFQK27.js → chunk-L2DWPVNJ.js} +1 -1
  115. package/dist/cli/chunks/{chunk-E7OR6V3V.js → chunk-L6QSTQME.js} +2 -2
  116. package/dist/cli/chunks/{chunk-RE6JTSDM.js → chunk-LE4QJREF.js} +1 -1
  117. package/dist/cli/chunks/{chunk-DSQESXL4.js → chunk-LKTTUHLF.js} +2 -2
  118. package/dist/cli/chunks/{chunk-YGC5QKQ4.js → chunk-LQLPB2T6.js} +2 -2
  119. package/dist/cli/chunks/{chunk-VGZOPQQY.js → chunk-LRSX2FJM.js} +1 -1
  120. package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
  121. package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
  122. package/dist/cli/chunks/{chunk-56NSE3LJ.js → chunk-MAFQV4U4.js} +2 -2
  123. package/dist/cli/chunks/{chunk-MKYOE7NE.js → chunk-MD43XRX5.js} +1 -1
  124. package/dist/cli/chunks/{chunk-3TF27MG5.js → chunk-MI5MFHRA.js} +2 -2
  125. package/dist/cli/chunks/{chunk-JK6PMLQQ.js → chunk-MO55CVMT.js} +32 -32
  126. package/dist/cli/chunks/{chunk-X6NJOT3V.js → chunk-N7HL5PHH.js} +1 -1
  127. package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
  128. package/dist/cli/chunks/{chunk-WUGXXNK4.js → chunk-NDJ7P2EP.js} +1 -1
  129. package/dist/cli/chunks/{chunk-D5GB5PUU.js → chunk-NO3IV5Q5.js} +1 -1
  130. package/dist/cli/chunks/{chunk-3XACRXBY.js → chunk-NQXXI77K.js} +2 -2
  131. package/dist/cli/chunks/{chunk-EC65UZ77.js → chunk-NVEWF4JV.js} +1 -1
  132. package/dist/cli/chunks/{chunk-JI67T6Q2.js → chunk-NZU4ACBZ.js} +2 -2
  133. package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
  134. package/dist/cli/chunks/{chunk-YEFTK4HD.js → chunk-OAEE6JWQ.js} +2 -2
  135. package/dist/cli/chunks/{chunk-JAOCHPYX.js → chunk-OCV2XEWQ.js} +2 -2
  136. package/dist/cli/chunks/{chunk-IDBA5GK2.js → chunk-P3EYRILV.js} +2 -2
  137. package/dist/cli/chunks/{chunk-4RPBODN5.js → chunk-PEQDY4BO.js} +2 -2
  138. package/dist/cli/chunks/{chunk-CPPYZYXC.js → chunk-PF7RBAYL.js} +2 -2
  139. package/dist/cli/chunks/{chunk-WCPSR4MJ.js → chunk-PHT5N7SC.js} +2 -2
  140. package/dist/cli/chunks/{chunk-O2AAYJUV.js → chunk-PINSJCM3.js} +1 -1
  141. package/dist/cli/chunks/{chunk-HEDGFKC5.js → chunk-PPUZWYUG.js} +2 -2
  142. package/dist/cli/chunks/{chunk-XMCSKYDE.js → chunk-QPEOLAAS.js} +1 -1
  143. package/dist/cli/chunks/{chunk-7MUO4DEH.js → chunk-QQWBWEJS.js} +18 -18
  144. package/dist/cli/chunks/{chunk-UFP7SN5V.js → chunk-QVDCVD5D.js} +2 -2
  145. package/dist/cli/chunks/{chunk-NHEG2DLN.js → chunk-RJIEG3NA.js} +2 -2
  146. package/dist/cli/chunks/{chunk-KJ5A54ZH.js → chunk-RV74I3YO.js} +2 -2
  147. package/dist/cli/chunks/{chunk-UDSB3XCG.js → chunk-S75SOOZL.js} +2 -2
  148. package/dist/cli/chunks/{chunk-BPDAQB3F.js → chunk-SASBO5Y5.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VJBJRFUO.js → chunk-SDLWKRVL.js} +9 -9
  150. package/dist/cli/chunks/{chunk-J6ASX536.js → chunk-SHKOCGNK.js} +2 -2
  151. package/dist/cli/chunks/{chunk-J35JWDJE.js → chunk-SI6DPU5D.js} +1 -1
  152. package/dist/cli/chunks/{chunk-V3MGY76S.js → chunk-SJ6Y4725.js} +2 -2
  153. package/dist/cli/chunks/{chunk-FTYRPEJS.js → chunk-SR52XP5F.js} +1 -1
  154. package/dist/cli/chunks/{chunk-ZUE524JL.js → chunk-SSUAAX3F.js} +2 -2
  155. package/dist/cli/chunks/{chunk-VG32EEUG.js → chunk-SSYAQZXA.js} +2 -2
  156. package/dist/cli/chunks/{chunk-HTVGHHX2.js → chunk-SUDMM5SO.js} +2 -2
  157. package/dist/cli/chunks/{chunk-K2SMP4OD.js → chunk-TIUKLYAI.js} +1 -1
  158. package/dist/cli/chunks/{chunk-VCVRZD4Y.js → chunk-TVGI32MB.js} +33 -33
  159. package/dist/cli/chunks/{chunk-CAZM63TP.js → chunk-U2A7NHZA.js} +2 -2
  160. package/dist/cli/chunks/{chunk-WBC6WB32.js → chunk-UE5ZOZR2.js} +2 -2
  161. package/dist/cli/chunks/{chunk-BQJ7CV53.js → chunk-UHEOGZLX.js} +12 -12
  162. package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
  163. package/dist/cli/chunks/{chunk-XN3KCKAM.js → chunk-V5NHZV7S.js} +2 -2
  164. package/dist/cli/chunks/{chunk-UNYTHZDZ.js → chunk-VJCIEHEF.js} +1 -1
  165. package/dist/cli/chunks/{chunk-5Y7UFHJD.js → chunk-VMDFFTCK.js} +1 -1
  166. package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
  167. package/dist/cli/chunks/{chunk-UPWLMIDY.js → chunk-VWPM27GU.js} +2 -2
  168. package/dist/cli/chunks/{chunk-USAKCGHC.js → chunk-VXFLJNCA.js} +2 -2
  169. package/dist/cli/chunks/{chunk-WKI46WWN.js → chunk-W5HQUIML.js} +2 -2
  170. package/dist/cli/chunks/{chunk-Z54G2YOL.js → chunk-WP4RETKG.js} +2 -2
  171. package/dist/cli/chunks/{chunk-IRPNEXOU.js → chunk-XIIQ5QTT.js} +2 -2
  172. package/dist/cli/chunks/{chunk-O32BFQV4.js → chunk-XIQW7EFL.js} +2 -2
  173. package/dist/cli/chunks/{chunk-TW6Z6W4X.js → chunk-XWUWX7BV.js} +13 -13
  174. package/dist/cli/chunks/{chunk-57FX3GP6.js → chunk-Y4PFUMOU.js} +1 -1
  175. package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
  176. package/dist/cli/chunks/{chunk-4T7XV5KQ.js → chunk-YLMNVLDK.js} +1 -1
  177. package/dist/cli/chunks/{chunk-TSP6SU5V.js → chunk-YNMJEDN5.js} +2 -2
  178. package/dist/cli/chunks/{chunk-PWQWKYBG.js → chunk-YPBSUGMI.js} +1 -1
  179. package/dist/cli/chunks/{chunk-QP2HLKTS.js → chunk-YRAX7SFJ.js} +2 -2
  180. package/dist/cli/chunks/{chunk-O3ERGUXH.js → chunk-YTHTQPWR.js} +1 -1
  181. package/dist/cli/chunks/{chunk-MR2OPUSA.js → chunk-YU2BDRSD.js} +1 -1
  182. package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
  183. package/dist/cli/chunks/{chunk-2W5MQDHM.js → chunk-ZFL436FN.js} +2 -2
  184. package/dist/cli/chunks/{chunk-7MISCSL5.js → chunk-ZJH5MU2I.js} +2 -2
  185. package/dist/cli/chunks/{chunk-52KOPIMI.js → chunk-ZQ2XW3IP.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
  187. package/dist/cli/chunks/{ci-UMA2SMNW.js → ci-MFUR4CWV.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-UQSILJFQ.js → ci-config-PNDLQ6XV.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-U6YZLLKH.js → ci-output-PFZ4M7NC.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-ATYQP6X2.js → circuit-breaker-5HH6NLZN.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-6YHFD7AN.js → claude-flow-setup-QCKYLGLC.js} +2 -2
  192. package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-EPE7IOZE.js → cline-installer-EASVPFXR.js} +2 -2
  194. package/dist/cli/chunks/{code-NUEJ4XYO.js → code-UJXDVYRK.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-D4DBT6OL.js → code-index-extractor-BZJ3UDP4.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-633SM4LR.js → codex-installer-XSQZUVOZ.js} +4 -4
  197. package/dist/cli/chunks/{completions-WUKVIW3L.js → completions-OWOOJFI2.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-F73ACR5H.js → complexity-analyzer-KP5TOHDT.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-QH42TKMS.js → continuedev-installer-IFKQXLHM.js} +2 -2
  200. package/dist/cli/chunks/{copilot-installer-Y3XC7BTT.js → copilot-installer-IGJ6KGQY.js} +2 -2
  201. package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-57QPV7E3.js → cost-tracker-MMDDNKZB.js} +2 -2
  203. package/dist/cli/chunks/{coverage-IBCHMBCR.js → coverage-LUH2B7NT.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-F4UYQHIN.js → cursor-installer-4YLM5GWM.js} +2 -2
  206. package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
  207. package/dist/cli/chunks/{daemon-XR4Q6YZF.js → daemon-MZKVM4CJ.js} +3 -3
  208. package/dist/cli/chunks/{dag-attention-scheduler-ZR5ZD3TW.js → dag-attention-scheduler-X4CYW665.js} +2 -2
  209. package/dist/cli/chunks/{detect-GEGYURLL.js → detect-7BM2XINO.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-JU3KT2JO.js → dist-node-Y5APLEYB.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-7QI3FJGE.js → domain-handler-X3ZRJNAH.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-O2YRM2PD.js → domain-plugins-2UW5KQJB.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-7J3S2OS6.js → domain-transfer-35W4CIBV.js} +2 -2
  214. package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
  216. package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
  217. package/dist/cli/chunks/{eval-RVMCIUOR.js → eval-4QA2SROK.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-QUKPKWKZ.js → fast-paths-FIORX6GN.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-K7JXNKJI.js → feature-flags-6LYI2T4G.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-5JCSKL2P.js → feature-flags-ZOO7LMIC.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
  223. package/dist/cli/chunks/{fleet-II4Q6HXK.js → fleet-7WF53H4F.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-M7VO2EMS.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-ND5CY26N.js → heartbeat-handler-DEKKMOVW.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-N3AUUUU7.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-NZY3E5EN.js → hnswlib-node-4YOQC6L4.js} +2 -2
  231. package/dist/cli/chunks/{hooks-QVJDTII5.js → hooks-TAOKV4EJ.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-ZRY6MTDV.js → hypergraph-engine-BODRJLHL.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-56DO4XZQ.js → hypergraph-handler-RKMYJNTU.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DTF4EVUY.js → init-guard-MXHSLSB2.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-M6CNQHMX.js → init-handler-HUE57IFW.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
  239. package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-IJN7XKBH.js → kilocode-installer-S333IKYQ.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-UKKPGPDC.js → kiro-installer-WM5DLQWC.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
  243. package/dist/cli/chunks/{learning-W2HETWQ4.js → learning-LNHMQLH5.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-Y546K4VX.js → llm-router-EWFXYZZR.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
  246. package/dist/cli/chunks/{load-MKAB2AXE.js → load-FGYGWVDK.js} +2 -2
  247. package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
  248. package/dist/cli/chunks/{mcp-AZKUS6K3.js → mcp-2FHNAAOM.js} +2 -2
  249. package/dist/cli/chunks/{memory-ZDOQN2KU.js → memory-DZMQ73AB.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-WWVXDHG4.js → multi-model-executor-6F2UAEUW.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-YUJNXXWS.js → opencode-installer-XY3BGOTZ.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-Z6PWPLRE.js → orchestrator-B4CNKUOS.js} +17 -17
  255. package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-TPWPX32U.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-4BBGTE4M.js → pipeline-FG5RKVRO.js} +2 -2
  258. package/dist/cli/chunks/{platform-5GSHXCV5.js → platform-3BT4KEVJ.js} +2 -2
  259. package/dist/cli/chunks/{plugin-OFDVF5HS.js → plugin-WI4RIN7O.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NC6MUYGJ.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
  261. package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-MPOAAEPA.js → protocol-handler-WNODKPGW.js} +2 -2
  264. package/dist/cli/chunks/{prove-CDKMAIVM.js → prove-5RHAEPYZ.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
  266. package/dist/cli/chunks/{quality-ZH4F7R7R.js → quality-WPHR7BGQ.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-IDRMW6OE.js → quality-gate-4RKTEZMX.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-Z5GCGVXK.js → ref-validation-TPAWHOHH.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-IZ2S7PH2.js → roocode-installer-7AVHFNDI.js} +2 -2
  272. package/dist/cli/chunks/router-EP34O3KB.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-NAX35VUW.js → routing-handler-YKEDVJSH.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-5YW2SOFF.js → ruvector-commands-JUAMM354.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-IPGCAT6C.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
  281. package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
  282. package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
  283. package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
  284. package/dist/cli/chunks/{security-3IH4BO5Z.js → security-ORDN3RD2.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-ABY7PAY2.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-6KENLN2W.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-RLFAUGOW.js → standalone-memory-OXRJYZXN.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-FCOZBPE5.js → status-handler-BCX5D4HY.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-4RDA5UUM.js → structural-health-LFG7RUU6.js} +2 -2
  291. package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
  292. package/dist/cli/chunks/{sync-KGEEXXCC.js → sync-YJEE2K2L.js} +2 -2
  293. package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-6H7L2UT4.js → task-handlers-CILP36I7.js} +4 -4
  295. package/dist/cli/chunks/{test-S7IG6EIX.js → test-SD457QJ6.js} +4 -4
  296. package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-7XYXI4L2.js → test-scheduling-ISI2O4Q5.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
  299. package/dist/cli/chunks/{token-usage-Y2YTPOFE.js → token-usage-XOC5KG7S.js} +2 -2
  300. package/dist/cli/chunks/{transformers-UCJ3HHHC.js → transformers-LSLQAARK.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
  302. package/dist/cli/chunks/{types-6CMFPETH.js → types-5BLCGLCR.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
  306. package/dist/cli/chunks/{upgrade-K25DN6WU.js → upgrade-RQJYLK3J.js} +2 -2
  307. package/dist/cli/chunks/{validate-T4V3TBY3.js → validate-QBHWXXCK.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-XSRC576T.js → validate-swarm-IKXBKFB5.js} +2 -2
  309. package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-YOZXHRTN.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-ITPU2IYL.js → windsurf-installer-HQGDZT5D.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
  313. package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-DTDSVKOG.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-EWACWGAW.js → witness-key-manager-RXYQNFJB.js} +2 -2
  317. package/dist/cli/chunks/{workflow-ZIQ4FV42.js → workflow-FBKCA4H6.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
  319. package/dist/cli/chunks/wrappers-TWSKBTWD.js +2 -0
  320. package/dist/cli/commands/code.js +4 -0
  321. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  322. package/dist/cli/handlers/task-handler.d.ts +5 -0
  323. package/dist/cli/handlers/task-handler.js +21 -1
  324. package/dist/cli/utils/task-result.d.ts +11 -0
  325. package/dist/cli/utils/task-result.js +39 -0
  326. package/dist/coordination/handlers/test-execution-handlers.js +92 -58
  327. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  328. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  329. package/dist/domains/code-intelligence/coordinator.js +46 -13
  330. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  331. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
  333. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  334. package/dist/domains/quality-assessment/coordinator.js +2 -1
  335. package/dist/domains/test-execution/coordinator.js +10 -5
  336. package/dist/domains/test-execution/interfaces.d.ts +12 -0
  337. package/dist/domains/test-execution/plugin.js +6 -2
  338. package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
  339. package/dist/domains/test-execution/services/retry-handler.js +14 -9
  340. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  341. package/dist/domains/test-execution/services/test-executor.js +28 -9
  342. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  343. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  344. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  345. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  346. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  347. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  348. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  349. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  350. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  351. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  352. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  353. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  354. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  355. package/dist/feedback/coverage-learner.js +13 -9
  356. package/dist/feedback/test-outcome-tracker.js +13 -9
  357. package/dist/governance/witness-chain.d.ts +5 -0
  358. package/dist/governance/witness-chain.js +22 -6
  359. package/dist/init/init-wizard-hooks.d.ts +1 -1
  360. package/dist/init/init-wizard-hooks.js +7 -8
  361. package/dist/init/phases/08-mcp.js +9 -0
  362. package/dist/init/settings-merge.d.ts +13 -0
  363. package/dist/init/settings-merge.js +49 -2
  364. package/dist/integrations/agent-booster-wasm/agent_booster_wasm.js +849 -0
  365. package/dist/integrations/agent-booster-wasm/agent_booster_wasm_bg.wasm +0 -0
  366. package/dist/integrations/agent-booster-wasm/index.d.ts +8 -0
  367. package/dist/integrations/agent-booster-wasm/index.js +25 -2
  368. package/dist/integrations/agent-booster-wasm/package.json +16 -0
  369. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  370. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  371. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  373. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  374. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  375. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  376. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  377. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  378. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  379. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  380. package/dist/kernel/unified-memory.d.ts +24 -0
  381. package/dist/kernel/unified-memory.js +63 -8
  382. package/dist/learning/aqe-learning-engine.js +1 -1
  383. package/dist/learning/dream/dream-engine.d.ts +3 -2
  384. package/dist/learning/dream/dream-engine.js +42 -24
  385. package/dist/learning/dream/dream-lock-retry.d.ts +38 -0
  386. package/dist/learning/dream/dream-lock-retry.js +66 -0
  387. package/dist/learning/dream/speculative-dreamer.js +1 -1
  388. package/dist/learning/embed-and-insert-pattern.js +4 -2
  389. package/dist/learning/embedder-endpoint-client.d.ts +31 -0
  390. package/dist/learning/embedder-endpoint-client.js +103 -10
  391. package/dist/learning/embedding-space.d.ts +12 -0
  392. package/dist/learning/embedding-space.js +17 -0
  393. package/dist/learning/experience-capture-middleware.js +25 -13
  394. package/dist/learning/experience-capture.js +1 -1
  395. package/dist/learning/experience-consolidation.d.ts +18 -0
  396. package/dist/learning/experience-consolidation.js +55 -8
  397. package/dist/learning/experience-space-verification.d.ts +71 -0
  398. package/dist/learning/experience-space-verification.js +147 -0
  399. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  400. package/dist/learning/pattern-lifecycle.js +153 -76
  401. package/dist/learning/pattern-null-store.d.ts +5 -0
  402. package/dist/learning/pattern-null-store.js +8 -0
  403. package/dist/learning/pattern-promotion.js +6 -3
  404. package/dist/learning/pattern-store.d.ts +6 -0
  405. package/dist/learning/pattern-store.js +19 -6
  406. package/dist/learning/qe-reasoning-bank.js +2 -2
  407. package/dist/learning/real-embeddings.js +3 -1
  408. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  409. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  410. package/dist/learning/rvf-pattern-store.js +6 -2
  411. package/dist/learning/sqlite-persistence.d.ts +6 -0
  412. package/dist/learning/sqlite-persistence.js +10 -0
  413. package/dist/mcp/bundle.js +642 -571
  414. package/dist/mcp/entry.js +4 -0
  415. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  416. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  417. package/dist/mcp/protocol-server.js +1 -0
  418. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  419. package/dist/mcp/types.d.ts +6 -0
  420. package/dist/optimization/session-cache.d.ts +17 -1
  421. package/dist/optimization/session-cache.js +40 -36
  422. package/dist/planning/goap-planner.d.ts +6 -0
  423. package/dist/planning/goap-planner.js +35 -19
  424. package/dist/planning/plan-executor.js +24 -15
  425. package/dist/routing/co-execution-repository.js +12 -9
  426. package/dist/routing/routing-feedback.d.ts +8 -0
  427. package/dist/routing/routing-feedback.js +46 -24
  428. package/dist/routing/routing-outcomes-migration.js +7 -2
  429. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  430. package/dist/shared/llm/spend-ledger.js +64 -39
  431. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  432. package/dist/shared/sqlite-lock-wait.js +37 -0
  433. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  434. package/dist/shared/sqlite-write-queue.js +38 -0
  435. package/dist/shared/test-runner-project.d.ts +69 -0
  436. package/dist/shared/test-runner-project.js +186 -0
  437. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  438. package/dist/skills/security-visual-testing/index.js +49 -35
  439. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  440. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  441. package/dist/workers/workers/learning-consolidation.js +8 -7
  442. package/package.json +4 -2
  443. package/dist/cli/chunks/adapter-23KA2YW7.js +0 -2
  444. package/dist/cli/chunks/agent-booster-wasm-2DLAEZK6.js +0 -2
  445. package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +0 -2
  446. package/dist/cli/chunks/base-XPWGYDKD.js +0 -2
  447. package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +0 -2
  448. package/dist/cli/chunks/chunk-3FITMWWJ.js +0 -21
  449. package/dist/cli/chunks/chunk-ARRBXCII.js +0 -4
  450. package/dist/cli/chunks/chunk-BBYJBZHG.js +0 -14
  451. package/dist/cli/chunks/chunk-BM3EJLMV.js +0 -153
  452. package/dist/cli/chunks/chunk-D3ZZ2NLL.js +0 -62
  453. package/dist/cli/chunks/chunk-DLTB5KCR.js +0 -2
  454. package/dist/cli/chunks/chunk-DRLSJJIC.js +0 -6
  455. package/dist/cli/chunks/chunk-HAYKLXCT.js +0 -744
  456. package/dist/cli/chunks/chunk-HHBF2BZC.js +0 -65
  457. package/dist/cli/chunks/chunk-K7RT6ITZ.js +0 -2
  458. package/dist/cli/chunks/chunk-L752CNG3.js +0 -13
  459. package/dist/cli/chunks/chunk-MQXWG55U.js +0 -12
  460. package/dist/cli/chunks/chunk-WM2QRIRD.js +0 -14
  461. package/dist/cli/chunks/chunk-WRC3HLUY.js +0 -29
  462. package/dist/cli/chunks/chunk-XTZGAG6P.js +0 -27
  463. package/dist/cli/chunks/chunk-YKQWIXUY.js +0 -2
  464. package/dist/cli/chunks/client-E43GWLQH.js +0 -2
  465. package/dist/cli/chunks/core-handlers-R5A3SQDY.js +0 -2
  466. package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +0 -2
  467. package/dist/cli/chunks/daemon-BYYPIJ7G.js +0 -18
  468. package/dist/cli/chunks/dream-6C4NURSE.js +0 -2
  469. package/dist/cli/chunks/embed-and-insert-pattern-URES5Q6J.js +0 -3
  470. package/dist/cli/chunks/experience-capture-middleware-SYJQSBKE.js +0 -40
  471. package/dist/cli/chunks/file-discovery-J5IE5KP7.js +0 -2
  472. package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +0 -2
  473. package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +0 -2
  474. package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +0 -2
  475. package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +0 -2
  476. package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +0 -2
  477. package/dist/cli/chunks/init-wizard-RTLCRWDT.js +0 -2
  478. package/dist/cli/chunks/kernel-2OWIGGGT.js +0 -2
  479. package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +0 -2
  480. package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +0 -2
  481. package/dist/cli/chunks/load-test-D6QYNIVT.js +0 -2
  482. package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +0 -2
  483. package/dist/cli/chunks/memory-handlers-3SQVY7FE.js +0 -2
  484. package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +0 -2
  485. package/dist/cli/chunks/project-root-DDGBWDP6.js +0 -2
  486. package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +0 -2
  487. package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +0 -2
  488. package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +0 -2
  489. package/dist/cli/chunks/real-embeddings-I2UVNNB3.js +0 -2
  490. package/dist/cli/chunks/router-FT5WJPUH.js +0 -2
  491. package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +0 -2
  492. package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +0 -2
  493. package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +0 -2
  494. package/dist/cli/chunks/rvf-migration-coordinator-VUIZHTVG.js +0 -2
  495. package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +0 -2
  496. package/dist/cli/chunks/safe-db-TDZKUOZJ.js +0 -2
  497. package/dist/cli/chunks/schedule-CRKTRY2A.js +0 -2
  498. package/dist/cli/chunks/scheduler-6ZBDVQWN.js +0 -2
  499. package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +0 -2
  500. package/dist/cli/chunks/sync-54LUAUTK.js +0 -2
  501. package/dist/cli/chunks/task-handler-K3OXHYKU.js +0 -62
  502. package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +0 -2
  503. package/dist/cli/chunks/token-bootstrap-3QMABE45.js +0 -2
  504. package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +0 -2
  505. package/dist/cli/chunks/unified-memory-QARWQKJ2.js +0 -2
  506. package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +0 -2
  507. package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +0 -2
  508. package/dist/cli/chunks/visual-security-O4ALMCXQ.js +0 -2
  509. package/dist/cli/chunks/witness-chain-B3YW5NMS.js +0 -2
  510. package/dist/cli/chunks/witness-chain-PIYR72HJ.js +0 -2
  511. package/dist/cli/chunks/witness-chain-repair-YUG7E3UX.js +0 -2
  512. package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +0 -2
  513. package/dist/cli/chunks/wrappers-PW2O27LL.js +0 -2
@@ -75,7 +75,7 @@ export class TrajectoryTracker {
75
75
  // Load recent trajectories into buffer
76
76
  await this.loadRecentTrajectories();
77
77
  // Clean up orphaned trajectories from previous sessions (started > 1 hour ago, never completed)
78
- this.cleanupOrphanedTrajectories();
78
+ await this.cleanupOrphanedTrajectories();
79
79
  this.initialized = true;
80
80
  console.log('[TrajectoryTracker] Initialized');
81
81
  }
@@ -83,18 +83,20 @@ export class TrajectoryTracker {
83
83
  * Clean up orphaned trajectories that were started but never completed.
84
84
  * Marks them as failed with an auto-close reason. Runs at initialization.
85
85
  */
86
- cleanupOrphanedTrajectories() {
87
- if (!this.db)
86
+ async cleanupOrphanedTrajectories() {
87
+ const db = this.db;
88
+ if (!db || !this.unifiedMemory)
88
89
  return;
89
90
  try {
90
- const result = this.db.prepare(`
91
+ // #1263: retried asynchronously, so a locked DB does not freeze the MCP server.
92
+ const result = await this.unifiedMemory.writeWhenUnlocked(() => db.prepare(`
91
93
  UPDATE qe_trajectories
92
94
  SET success = 0,
93
95
  ended_at = datetime('now'),
94
96
  feedback = 'auto-closed: orphaned trajectory from previous session'
95
97
  WHERE success IS NULL
96
98
  AND started_at < datetime('now', '-1 hour')
97
- `).run();
99
+ `).run());
98
100
  if (result.changes > 0) {
99
101
  this.stats.trajectoriesAbandoned += result.changes;
100
102
  console.log(`[TrajectoryTracker] Cleaned up ${result.changes} orphaned trajectories`);
@@ -238,10 +240,13 @@ export class TrajectoryTracker {
238
240
  startedAt,
239
241
  context: options.context,
240
242
  });
241
- // Persist to SQLite
243
+ // Persist to SQLite. Queued (#1283): task_orchestrate starts a trajectory
244
+ // inside the tool call, and a locked memory.db must not freeze the MCP
245
+ // server's event loop. The later end update queues after this insert.
242
246
  const insertStmt = this.prepared.get('insertTrajectory');
243
247
  if (insertStmt) {
244
- insertStmt.run(id, task, options.agent || null, options.domain || null, startedAt.toISOString(), options.context ? JSON.stringify(options.context) : null);
248
+ const run = () => insertStmt.run(id, task, options.agent || null, options.domain || null, startedAt.toISOString(), options.context ? JSON.stringify(options.context) : null);
249
+ await (this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(run) : run());
245
250
  }
246
251
  this.stats.trajectoriesStarted++;
247
252
  // Set auto-end timeout
@@ -344,12 +349,15 @@ export class TrajectoryTracker {
344
349
  endedAt,
345
350
  feedback,
346
351
  };
347
- // Persist to SQLite
352
+ // Persist to SQLite. Queued (#1274): task completion events end
353
+ // trajectories in the background, and a locked memory.db must not freeze
354
+ // the MCP server's event loop.
348
355
  const updateStmt = this.prepared.get('updateTrajectory');
349
356
  if (updateStmt) {
350
- updateStmt.run(endedAt.toISOString(), success ? 1 : 0, JSON.stringify(active.steps), JSON.stringify({ metrics, context: active.context }), null, // embedding - computed later if needed
357
+ const run = () => updateStmt.run(endedAt.toISOString(), success ? 1 : 0, JSON.stringify(active.steps), JSON.stringify({ metrics, context: active.context }), null, // embedding - computed later if needed
351
358
  feedback ?? null, null, // related_patterns - computed later
352
359
  trajectoryId);
360
+ await (this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(run) : run());
353
361
  }
354
362
  // Remove from active, add to recent buffer
355
363
  this.activeTrajectories.delete(trajectoryId);
@@ -84,6 +84,14 @@ export declare class EmbeddingCache {
84
84
  * Persist entry to disk
85
85
  */
86
86
  private persistToDisk;
87
+ /**
88
+ * Run a write on the cache's connection without blocking the caller
89
+ * (#1283). On the shared memory.db connection it goes through the write
90
+ * queue, so a locked database does not freeze the MCP server's event loop;
91
+ * on a private (legacy) connection it runs at once. A failure is logged,
92
+ * since the in-memory cache is already up to date.
93
+ */
94
+ private persist;
87
95
  /**
88
96
  * Flush writes that were queued during async DB initialization
89
97
  */
@@ -24,6 +24,7 @@ import { join } from 'path';
24
24
  import { existsSync, mkdirSync } from 'fs';
25
25
  import { getUnifiedMemory, findProjectRoot } from '../../../kernel/unified-memory.js';
26
26
  import { safeJsonParse } from '../../../shared/safe-json.js';
27
+ import { writeWhenUnlockedOn } from '../../../shared/sqlite-write-queue.js';
27
28
  /**
28
29
  * Embedding cache with LRU eviction and persistent storage
29
30
  */
@@ -183,8 +184,7 @@ export class EmbeddingCache {
183
184
  const cache = this.memoryCache.get(namespace);
184
185
  const deleted = cache?.delete(key) || false;
185
186
  if (deleted && this.persistent && this.db) {
186
- const stmt = this.db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?');
187
- stmt.run(key, namespace);
187
+ this.persist('delete', (db) => db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?').run(key, namespace));
188
188
  }
189
189
  return deleted;
190
190
  }
@@ -196,8 +196,7 @@ export class EmbeddingCache {
196
196
  const cache = this.memoryCache.get(namespace);
197
197
  cache?.clear();
198
198
  if (this.persistent && this.db) {
199
- const stmt = this.db.prepare('DELETE FROM embeddings WHERE namespace = ?');
200
- stmt.run(namespace);
199
+ this.persist('clear', (db) => db.prepare('DELETE FROM embeddings WHERE namespace = ?').run(namespace));
201
200
  }
202
201
  }
203
202
  else {
@@ -205,7 +204,7 @@ export class EmbeddingCache {
205
204
  cache.clear();
206
205
  }
207
206
  if (this.persistent && this.db) {
208
- this.db.exec('DELETE FROM embeddings');
207
+ this.persist('clear', (db) => db.exec('DELETE FROM embeddings'));
209
208
  }
210
209
  }
211
210
  }
@@ -243,8 +242,8 @@ export class EmbeddingCache {
243
242
  if (lruKey) {
244
243
  cache.delete(lruKey);
245
244
  if (this.persistent && this.db) {
246
- const stmt = this.db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?');
247
- stmt.run(lruKey, namespace);
245
+ const evicted = lruKey;
246
+ this.persist('evict', (db) => db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?').run(evicted, namespace));
248
247
  }
249
248
  }
250
249
  }
@@ -259,17 +258,32 @@ export class EmbeddingCache {
259
258
  const metadataJson = embedding.metadata
260
259
  ? JSON.stringify(embedding.metadata)
261
260
  : null;
262
- const stmt = this.db.prepare(`
261
+ const lastAccess = Date.now();
262
+ this.persist('persist', (db) => db.prepare(`
263
263
  INSERT OR REPLACE INTO embeddings
264
264
  (key, namespace, vector, dimension, text, timestamp, quantization, metadata, last_access)
265
265
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
266
- `);
267
- stmt.run(key, namespace, vectorBuffer, embedding.dimension, embedding.text, embedding.timestamp, embedding.quantization, metadataJson, Date.now());
266
+ `).run(key, namespace, vectorBuffer, embedding.dimension, embedding.text, embedding.timestamp, embedding.quantization, metadataJson, lastAccess));
268
267
  }
269
268
  catch (error) {
270
269
  console.warn('Failed to persist embedding:', error);
271
270
  }
272
271
  }
272
+ /**
273
+ * Run a write on the cache's connection without blocking the caller
274
+ * (#1283). On the shared memory.db connection it goes through the write
275
+ * queue, so a locked database does not freeze the MCP server's event loop;
276
+ * on a private (legacy) connection it runs at once. A failure is logged,
277
+ * since the in-memory cache is already up to date.
278
+ */
279
+ persist(action, write) {
280
+ const db = this.db;
281
+ if (!db)
282
+ return;
283
+ writeWhenUnlockedOn(db, () => write(db)).catch((error) => {
284
+ console.warn(`Failed to ${action} embedding cache entry:`, error);
285
+ });
286
+ }
273
287
  /**
274
288
  * Flush writes that were queued during async DB initialization
275
289
  */
@@ -77,6 +77,17 @@ export declare class DeltaTracker {
77
77
  initialize(): void;
78
78
  private prepareStatements;
79
79
  private ensureInitialized;
80
+ /**
81
+ * createGenesis() through the shared connection's write queue (#1283). The
82
+ * version check and the insert run as one queued unit.
83
+ */
84
+ createGenesisWhenUnlocked(patternId: string, snapshot: object, metadata?: Record<string, unknown>): Promise<DeltaEvent>;
85
+ /**
86
+ * recordDelta() through the shared connection's write queue (#1283). Reading
87
+ * the current version, the insert and retention run as one queued unit, so
88
+ * two deltas cannot get the same version number.
89
+ */
90
+ recordDeltaWhenUnlocked(patternId: string, before: object, after: object, metadata?: Record<string, unknown>): Promise<DeltaEvent>;
80
91
  /**
81
92
  * Create a genesis snapshot for a pattern (version 0).
82
93
  * The full object is stored in metadata.snapshot; patches are empty.
@@ -8,6 +8,7 @@
8
8
  * @module integrations/ruvector/delta-tracker
9
9
  */
10
10
  import { v4 as uuidv4 } from 'uuid';
11
+ import { writeWhenUnlockedOn } from '../../shared/sqlite-write-queue.js';
11
12
  import * as fastJsonPatchNs from 'fast-json-patch';
12
13
  // fast-json-patch ships two entry points with different export shapes: its CJS
13
14
  // entry (index.js) attaches named exports directly via Object.assign(exports,
@@ -156,6 +157,21 @@ export class DeltaTracker {
156
157
  // --------------------------------------------------------------------------
157
158
  // Public API
158
159
  // --------------------------------------------------------------------------
160
+ /**
161
+ * createGenesis() through the shared connection's write queue (#1283). The
162
+ * version check and the insert run as one queued unit.
163
+ */
164
+ createGenesisWhenUnlocked(patternId, snapshot, metadata) {
165
+ return writeWhenUnlockedOn(this.db, () => this.createGenesis(patternId, snapshot, metadata));
166
+ }
167
+ /**
168
+ * recordDelta() through the shared connection's write queue (#1283). Reading
169
+ * the current version, the insert and retention run as one queued unit, so
170
+ * two deltas cannot get the same version number.
171
+ */
172
+ recordDeltaWhenUnlocked(patternId, before, after, metadata) {
173
+ return writeWhenUnlockedOn(this.db, () => this.recordDelta(patternId, before, after, metadata));
174
+ }
159
175
  /**
160
176
  * Create a genesis snapshot for a pattern (version 0).
161
177
  * The full object is stored in metadata.snapshot; patches are empty.
@@ -95,6 +95,8 @@ export declare class PersistentSONAEngine {
95
95
  private initPromise;
96
96
  private pendingSaves;
97
97
  private saveTimer;
98
+ /** The deferred batch currently being written, if any (#1283). */
99
+ private flushInFlight;
98
100
  private consecutiveSaveFailures;
99
101
  private serverClient;
100
102
  constructor(config: PersistentSONAConfig);
@@ -419,6 +421,14 @@ export declare class PersistentSONAEngine {
419
421
  * Schedule batched save
420
422
  */
421
423
  private scheduleSave;
424
+ /**
425
+ * Write the batched patterns. Each write is queued on the shared connection
426
+ * (#1283): in the MCP server a locked memory.db no longer freezes the event
427
+ * loop for the whole busy_timeout per pattern; the write retries
428
+ * asynchronously instead. A row that still fails stays pending and the batch
429
+ * is retried with backoff, as before.
430
+ */
431
+ private flushPendingSaves;
422
432
  /**
423
433
  * Update pattern usage in SQLite
424
434
  */
@@ -29,6 +29,7 @@ import { getUnifiedPersistence } from '../../kernel/unified-persistence.js';
29
29
  import { toErrorMessage } from '../../shared/error-utils.js';
30
30
  import { safeJsonParse } from '../../shared/safe-json.js';
31
31
  import { LoggerFactory } from '../../logging/index.js';
32
+ import { writeWhenUnlockedOn } from '../../shared/sqlite-write-queue.js';
32
33
  const logger = LoggerFactory.create('sona-persistence');
33
34
  // ============================================================================
34
35
  // Schema (added to unified-memory.ts as part of migration)
@@ -112,6 +113,8 @@ export class PersistentSONAEngine {
112
113
  initPromise = null;
113
114
  pendingSaves = new Map();
114
115
  saveTimer = null;
116
+ /** The deferred batch currently being written, if any (#1283). */
117
+ flushInFlight = null;
115
118
  consecutiveSaveFailures = 0;
116
119
  serverClient = null;
117
120
  constructor(config) {
@@ -801,6 +804,10 @@ export class PersistentSONAEngine {
801
804
  * Close the engine
802
805
  */
803
806
  async close() {
807
+ // Let a deferred batch that is already writing finish first (#1283); it
808
+ // may schedule a retry, which the clearTimeout below then cancels.
809
+ if (this.flushInFlight)
810
+ await this.flushInFlight;
804
811
  // Flush pending saves
805
812
  if (this.saveTimer) {
806
813
  clearTimeout(this.saveTimer);
@@ -808,9 +815,9 @@ export class PersistentSONAEngine {
808
815
  }
809
816
  if (this.pendingSaves.size > 0) {
810
817
  const failures = [];
811
- for (const pattern of this.pendingSaves.values()) {
818
+ for (const pattern of Array.from(this.pendingSaves.values())) {
812
819
  try {
813
- this.savePatternToDb(pattern);
820
+ await writeWhenUnlockedOn(this.db, () => this.savePatternToDb(pattern));
814
821
  this.pendingSaves.delete(pattern.id);
815
822
  }
816
823
  catch (error) {
@@ -1085,33 +1092,51 @@ export class PersistentSONAEngine {
1085
1092
  }
1086
1093
  this.saveTimer = setTimeout(() => {
1087
1094
  this.saveTimer = null;
1088
- const patterns = Array.from(this.pendingSaves.values());
1089
- for (const pattern of patterns) {
1090
- try {
1091
- this.savePatternToDb(pattern);
1092
- this.pendingSaves.delete(pattern.id);
1093
- }
1094
- catch (error) {
1095
- logger.warn('Deferred SONA save failed; retaining pending pattern', {
1096
- patternId: pattern.id, error: toErrorMessage(error),
1097
- });
1098
- }
1099
- }
1100
- if (this.pendingSaves.size > 0) {
1101
- this.consecutiveSaveFailures++;
1102
- // Stop after five failed batches; close() can still flush retained rows.
1103
- if (this.consecutiveSaveFailures < 5 && this.db?.open) {
1104
- this.scheduleSave(Math.min(60000, Math.max(1000, this.config.autoSaveInterval) * 2 ** (this.consecutiveSaveFailures - 1)));
1105
- }
1106
- }
1107
- else {
1108
- this.consecutiveSaveFailures = 0;
1109
- }
1095
+ const flush = this.flushPendingSaves().finally(() => {
1096
+ if (this.flushInFlight === flush)
1097
+ this.flushInFlight = null;
1098
+ });
1099
+ this.flushInFlight = flush;
1110
1100
  }, delayMs);
1111
1101
  // The initial batch must flush on natural exit; only failure retries are optional.
1112
1102
  if (this.consecutiveSaveFailures > 0)
1113
1103
  this.saveTimer.unref();
1114
1104
  }
1105
+ /**
1106
+ * Write the batched patterns. Each write is queued on the shared connection
1107
+ * (#1283): in the MCP server a locked memory.db no longer freezes the event
1108
+ * loop for the whole busy_timeout per pattern; the write retries
1109
+ * asynchronously instead. A row that still fails stays pending and the batch
1110
+ * is retried with backoff, as before.
1111
+ */
1112
+ async flushPendingSaves() {
1113
+ const patterns = Array.from(this.pendingSaves.values());
1114
+ let failed = 0;
1115
+ for (const pattern of patterns) {
1116
+ try {
1117
+ await writeWhenUnlockedOn(this.db, () => this.savePatternToDb(pattern));
1118
+ // A newer snapshot queued during the write stays pending.
1119
+ if (this.pendingSaves.get(pattern.id) === pattern)
1120
+ this.pendingSaves.delete(pattern.id);
1121
+ }
1122
+ catch (error) {
1123
+ failed++;
1124
+ logger.warn('Deferred SONA save failed; retaining pending pattern', {
1125
+ patternId: pattern.id, error: toErrorMessage(error),
1126
+ });
1127
+ }
1128
+ }
1129
+ if (failed > 0) {
1130
+ this.consecutiveSaveFailures++;
1131
+ // Stop after five failed batches; close() can still flush retained rows.
1132
+ if (this.consecutiveSaveFailures < 5 && this.db?.open) {
1133
+ this.scheduleSave(Math.min(60000, Math.max(1000, this.config.autoSaveInterval) * 2 ** (this.consecutiveSaveFailures - 1)));
1134
+ }
1135
+ }
1136
+ else {
1137
+ this.consecutiveSaveFailures = 0;
1138
+ }
1139
+ }
1115
1140
  /**
1116
1141
  * Update pattern usage in SQLite
1117
1142
  */
@@ -69,6 +69,9 @@ export declare class UnifiedMemoryManager {
69
69
  private initialized;
70
70
  private vectorsLoaded;
71
71
  private initPromise;
72
+ /** Tail of the FIFO write queue and how many writes are in it (#1263). */
73
+ private writeQueue;
74
+ private queuedWrites;
72
75
  private preparedStatements;
73
76
  private vectorIndex;
74
77
  private crdtStore;
@@ -115,6 +118,19 @@ export declare class UnifiedMemoryManager {
115
118
  */
116
119
  private migrateToV11GoapExecutionSteps;
117
120
  private loadVectorIndex;
121
+ /**
122
+ * Run a write on the shared connection (#1263). Under the MCP server's lock
123
+ * wait cap each attempt blocks for at most the cap and the write retries
124
+ * asynchronously, so a locked memory.db does not freeze the event loop. The
125
+ * write still fails with SQLITE_BUSY once the configured busyTimeout has
126
+ * passed. Without a cap (CLI) this is one attempt with the full busyTimeout.
127
+ *
128
+ * Writes run one at a time in call order (FIFO), so a later write to the
129
+ * same key cannot land before an earlier one that is still retrying. A
130
+ * failed write does not hold up the next. With nothing queued the first
131
+ * attempt runs synchronously, as the write did before.
132
+ */
133
+ writeWhenUnlocked<T>(fn: () => T): Promise<T>;
118
134
  kvSet(key: string, value: unknown, namespace?: string, ttl?: number): Promise<void>;
119
135
  kvGet<T>(key: string, namespace?: string): Promise<T | undefined>;
120
136
  kvDelete(key: string, namespace?: string): Promise<boolean>;
@@ -212,4 +228,12 @@ export declare class UnifiedMemoryManager {
212
228
  export declare function getUnifiedMemory(config?: Partial<UnifiedMemoryConfig>): UnifiedMemoryManager;
213
229
  export declare function initializeUnifiedMemory(config?: Partial<UnifiedMemoryConfig>): Promise<UnifiedMemoryManager>;
214
230
  export declare function resetUnifiedMemory(): void;
231
+ /**
232
+ * Run a write on `db` through the shared manager's writeWhenUnlocked queue
233
+ * when `db` is that manager's connection (#1274), for modules that hold only
234
+ * the raw connection. The write then neither blocks the MCP server's event
235
+ * loop for the whole busy_timeout nor lands before an earlier queued write.
236
+ * A write on any other connection runs now, as before.
237
+ */
238
+ export declare function writeWhenUnlockedOn<T>(db: DatabaseType, fn: () => T): Promise<T>;
215
239
  //# sourceMappingURL=unified-memory.d.ts.map
@@ -23,6 +23,9 @@
23
23
  */
24
24
  import { openDatabase as openSafeDatabase } from '../shared/safe-db.js';
25
25
  import { safeJsonParse } from '../shared/safe-json.js';
26
+ import { capBusyTimeout } from '../shared/sqlite-lock-wait.js';
27
+ import { registerWriteQueue, unregisterWriteQueue, writeWhenUnlockedOn as queueWriteOn, } from '../shared/sqlite-write-queue.js';
28
+ import { isBusyError, retryWhileBusy, withBusyTimeout } from '../learning/dream/dream-lock-retry.js';
26
29
  import { toErrorMessage } from '../shared/error-utils.js';
27
30
  import * as fs from 'fs';
28
31
  import * as os from 'os';
@@ -121,6 +124,9 @@ export class UnifiedMemoryManager {
121
124
  initialized = false;
122
125
  vectorsLoaded = false;
123
126
  initPromise = null;
127
+ /** Tail of the FIFO write queue and how many writes are in it (#1263). */
128
+ writeQueue = Promise.resolve();
129
+ queuedWrites = 0;
124
130
  preparedStatements = new Map();
125
131
  // ADR-071 Phase 2C: Always use UnifiedHnswIndex (old implementations decommissioned)
126
132
  vectorIndex = new UnifiedHnswIndex('qe-memory');
@@ -307,6 +313,8 @@ export class UnifiedMemoryManager {
307
313
  }
308
314
  this.vectorsLoaded = false;
309
315
  this.initialized = true;
316
+ // #1283: modules holding only the raw connection queue their writes here.
317
+ registerWriteQueue(this.db, (fn) => this.writeWhenUnlocked(fn));
310
318
  console.log(`[UnifiedMemory] Initialized: ${this.config.dbPath}`);
311
319
  this.warnIfDuplicateDatabases();
312
320
  }
@@ -558,14 +566,42 @@ export class UnifiedMemoryManager {
558
566
  // ============================================================================
559
567
  // KV Store Operations (v2 compatible)
560
568
  // ============================================================================
569
+ /**
570
+ * Run a write on the shared connection (#1263). Under the MCP server's lock
571
+ * wait cap each attempt blocks for at most the cap and the write retries
572
+ * asynchronously, so a locked memory.db does not freeze the event loop. The
573
+ * write still fails with SQLITE_BUSY once the configured busyTimeout has
574
+ * passed. Without a cap (CLI) this is one attempt with the full busyTimeout.
575
+ *
576
+ * Writes run one at a time in call order (FIFO), so a later write to the
577
+ * same key cannot land before an earlier one that is still retrying. A
578
+ * failed write does not hold up the next. With nothing queued the first
579
+ * attempt runs synchronously, as the write did before.
580
+ */
581
+ writeWhenUnlocked(fn) {
582
+ const run = () => retryWhileBusy(this.db, fn, {
583
+ waitMs: capBusyTimeout(this.config.busyTimeout),
584
+ budgetMs: this.config.busyTimeout,
585
+ });
586
+ // Queued writes yield to the event loop first, so one write's last attempt
587
+ // and the next one's first never block back to back.
588
+ const result = this.queuedWrites === 0
589
+ ? run()
590
+ : this.writeQueue.then(() => new Promise((r) => setImmediate(r))).then(run);
591
+ this.queuedWrites++;
592
+ const settled = result.then(() => undefined, () => undefined);
593
+ this.writeQueue = settled;
594
+ void settled.then(() => { this.queuedWrites--; });
595
+ return result;
596
+ }
561
597
  async kvSet(key, value, namespace = 'default', ttl) {
562
598
  this.ensureInitialized();
563
599
  const expiresAt = ttl ? Date.now() + ttl * 1000 : null;
564
600
  const serialized = JSON.stringify(value);
565
- this.db.prepare(`
601
+ await this.writeWhenUnlocked(() => this.db.prepare(`
566
602
  INSERT OR REPLACE INTO kv_store (key, namespace, value, expires_at)
567
603
  VALUES (?, ?, ?, ?)
568
- `).run(key, namespace, serialized, expiresAt);
604
+ `).run(key, namespace, serialized, expiresAt));
569
605
  // ADR-194: tamper-evident audit (no-op unless the proof-gate is enabled).
570
606
  this.auditWrite('kvSet', namespace, key, serialized);
571
607
  }
@@ -578,14 +614,22 @@ export class UnifiedMemoryManager {
578
614
  if (!row)
579
615
  return undefined;
580
616
  if (row.expires_at && Date.now() > row.expires_at) {
581
- this.db.prepare('DELETE FROM kv_store WHERE key = ? AND namespace = ?').run(key, namespace);
617
+ try {
618
+ withBusyTimeout(this.db, capBusyTimeout(this.config.busyTimeout), () => this.db.prepare('DELETE FROM kv_store WHERE key = ? AND namespace = ?').run(key, namespace));
619
+ }
620
+ catch (error) {
621
+ // #1263: a read must not wait on a locked DB to tidy up; the row stays
622
+ // expired (filtered here) and kvCleanupExpired removes it later.
623
+ if (!isBusyError(error))
624
+ throw error;
625
+ }
582
626
  return undefined;
583
627
  }
584
628
  return safeJsonParse(row.value);
585
629
  }
586
630
  async kvDelete(key, namespace = 'default') {
587
631
  this.ensureInitialized();
588
- const result = this.db.prepare('DELETE FROM kv_store WHERE key = ? AND namespace = ?').run(key, namespace);
632
+ const result = await this.writeWhenUnlocked(() => this.db.prepare('DELETE FROM kv_store WHERE key = ? AND namespace = ?').run(key, namespace));
589
633
  // ADR-194: audit deletes too (no-op unless the proof-gate is enabled).
590
634
  if (result.changes > 0)
591
635
  this.auditWrite('kvDelete', namespace, key, '');
@@ -613,7 +657,7 @@ export class UnifiedMemoryManager {
613
657
  }
614
658
  async kvCleanupExpired() {
615
659
  this.ensureInitialized();
616
- const result = this.db.prepare('DELETE FROM kv_store WHERE expires_at IS NOT NULL AND expires_at < ?').run(Date.now());
660
+ const result = await this.writeWhenUnlocked(() => this.db.prepare('DELETE FROM kv_store WHERE expires_at IS NOT NULL AND expires_at < ?').run(Date.now()));
617
661
  return result.changes;
618
662
  }
619
663
  // ============================================================================
@@ -716,10 +760,10 @@ export class UnifiedMemoryManager {
716
760
  this.ensureInitialized();
717
761
  const buffer = this.floatArrayToBuffer(embedding);
718
762
  const metadataJson = metadata ? JSON.stringify(metadata) : null;
719
- this.db.prepare(`
763
+ await this.writeWhenUnlocked(() => this.db.prepare(`
720
764
  INSERT OR REPLACE INTO vectors (id, namespace, embedding, dimensions, metadata, updated_at)
721
765
  VALUES (?, ?, ?, ?, ?, datetime('now'))
722
- `).run(id, namespace, buffer, embedding.length, metadataJson);
766
+ `).run(id, namespace, buffer, embedding.length, metadataJson));
723
767
  this.vectorIndex.add(id, embedding);
724
768
  }
725
769
  async vectorGet(id) {
@@ -736,7 +780,7 @@ export class UnifiedMemoryManager {
736
780
  }
737
781
  async vectorDelete(id) {
738
782
  this.ensureInitialized();
739
- const result = this.db.prepare('DELETE FROM vectors WHERE id = ?').run(id);
783
+ const result = await this.writeWhenUnlocked(() => this.db.prepare('DELETE FROM vectors WHERE id = ?').run(id));
740
784
  this.vectorIndex.remove(id);
741
785
  return result.changes > 0;
742
786
  }
@@ -1037,6 +1081,7 @@ export class UnifiedMemoryManager {
1037
1081
  // hnswlib-node has none of those constraints; multiple instances
1038
1082
  // coexist freely.
1039
1083
  this.vectorIndex.clear();
1084
+ unregisterWriteQueue(this.db);
1040
1085
  this.db.close();
1041
1086
  this.db = null;
1042
1087
  this.initialized = false;
@@ -1076,6 +1121,16 @@ export async function initializeUnifiedMemory(config) {
1076
1121
  export function resetUnifiedMemory() {
1077
1122
  UnifiedMemoryManager.resetInstance();
1078
1123
  }
1124
+ /**
1125
+ * Run a write on `db` through the shared manager's writeWhenUnlocked queue
1126
+ * when `db` is that manager's connection (#1274), for modules that hold only
1127
+ * the raw connection. The write then neither blocks the MCP server's event
1128
+ * loop for the whole busy_timeout nor lands before an earlier queued write.
1129
+ * A write on any other connection runs now, as before.
1130
+ */
1131
+ export function writeWhenUnlockedOn(db, fn) {
1132
+ return queueWriteOn(db, fn);
1133
+ }
1079
1134
  // ============================================================================
1080
1135
  // Process Exit Handlers
1081
1136
  // ============================================================================
@@ -155,7 +155,7 @@ export class AQELearningEngine {
155
155
  if (persistence.isInitialized()) {
156
156
  const { PatternNullStore } = await import('./pattern-null-store.js');
157
157
  const nullStore = new PatternNullStore(persistence.getDatabase());
158
- this.experienceCapture.setNullRecorder((record) => nullStore.recordNull(record));
158
+ this.experienceCapture.setNullRecorder((record) => nullStore.recordNullWhenUnlocked(record));
159
159
  }
160
160
  }
161
161
  catch (e) {
@@ -212,9 +212,10 @@ export declare class DreamEngine {
212
212
  * #1060: write the results of a `dream(…, { commit: false })` run, in the
213
213
  * same single transaction a normal dream uses. Returns the commit duration
214
214
  * in ms. Throws (and writes nothing) if the engine is closed or the write
215
- * fails.
215
+ * fails. #1253: async, because a locked database is retried without
216
+ * blocking the process.
216
217
  */
217
- commitDreamResult(result: DreamCycleResult): number;
218
+ commitDreamResult(result: DreamCycleResult): Promise<number>;
218
219
  /**
219
220
  * Commit a computed dream, then record it in the witness chain (#1060) and
220
221
  * run the default retention steps (#1239).