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
@@ -82,35 +82,60 @@ export function parseEndpoint(endpoint) {
82
82
  safeUrl: url.toString().replace(/\/$/, ''),
83
83
  };
84
84
  }
85
+ /**
86
+ * #1216: a connect or request timeout. The host did not answer within the
87
+ * budget, so the breaker opens on the first one instead of counting it as one
88
+ * failure of `failureThreshold`.
89
+ */
90
+ export class EmbedderEndpointTimeoutError extends Error {
91
+ phase;
92
+ limitMs;
93
+ constructor(phase, limitMs) {
94
+ super(`[EmbedderEndpointClient] ${phase} timeout after ${limitMs}ms`);
95
+ this.phase = phase;
96
+ this.limitMs = limitMs;
97
+ this.name = 'EmbedderEndpointTimeoutError';
98
+ }
99
+ }
85
100
  /**
86
101
  * Circuit breaker state.
87
102
  *
88
- * Tracks failure timestamps within `windowMs`. Opens when count reaches `threshold`.
103
+ * Tracks failure timestamps within `windowMs`. Opens when count reaches `threshold`,
104
+ * or at once on a timeout (#1216): timeouts arrive one timeout apart, so with a
105
+ * 30 s request timeout and a 60 s window they would never add up to three.
89
106
  * While open, every request fast-fails until the window expires. On recovery
90
107
  * (window elapses), the breaker calls `onRecover` so the client can invalidate
91
108
  * cached endpoint identity — endpoint restarts often coincide with model swaps.
109
+ * Whenever it opens, it calls `onTrip` so the client can abandon requests
110
+ * still waiting on the host.
92
111
  */
93
112
  class CircuitBreaker {
94
113
  threshold;
95
114
  windowMs;
96
115
  onRecover;
116
+ onTrip;
97
117
  failures = [];
98
118
  trippedAt = null;
99
- constructor(threshold, windowMs, onRecover = () => { }) {
119
+ constructor(threshold, windowMs, onRecover = () => { }, onTrip = () => { }) {
100
120
  this.threshold = threshold;
101
121
  this.windowMs = windowMs;
102
122
  this.onRecover = onRecover;
123
+ this.onTrip = onTrip;
103
124
  }
104
125
  recordSuccess() {
105
126
  this.failures = [];
106
127
  this.trippedAt = null;
107
128
  }
108
- recordFailure() {
129
+ recordFailure(tripNow = false) {
130
+ // Requests abandoned when the breaker opened fail too; they must not
131
+ // extend the window.
132
+ if (this.trippedAt !== null)
133
+ return;
109
134
  const now = Date.now();
110
135
  this.failures = this.failures.filter((t) => now - t < this.windowMs);
111
136
  this.failures.push(now);
112
- if (this.failures.length >= this.threshold) {
113
- this.trippedAt = now;
137
+ if (tripNow || this.failures.length >= this.threshold) {
138
+ this.trip();
114
139
  }
115
140
  }
116
141
  isOpen() {
@@ -128,6 +153,7 @@ class CircuitBreaker {
128
153
  /** #1204: open (or re-open) the breaker for a full window from now. */
129
154
  trip() {
130
155
  this.trippedAt = Date.now();
156
+ this.onTrip();
131
157
  }
132
158
  /** For tests / observability */
133
159
  getState() {
@@ -145,6 +171,14 @@ export class EmbedderEndpointClient {
145
171
  cachedIdentity = null;
146
172
  /** True while a probe is in flight — prevents the embed() lazy-probe race. */
147
173
  probeInFlight = null;
174
+ /**
175
+ * #1216: set when the breaker window elapsed and no probe has succeeded
176
+ * since. The next probe is the breaker's half-open trial; it runs in the
177
+ * background so no caller waits on a host that may still not answer.
178
+ */
179
+ trialPending = false;
180
+ /** #1216: requests waiting on the host, abandoned when the breaker opens. */
181
+ inFlight = new Set();
148
182
  constructor(options) {
149
183
  this.opts = {
150
184
  endpoint: options.endpoint,
@@ -177,6 +211,35 @@ export class EmbedderEndpointClient {
177
211
  // On breaker recovery, drop identity so the next embed() re-probes.
178
212
  // Endpoint restarts (the common cause of recovery) often change models.
179
213
  this.cachedIdentity = null;
214
+ this.trialPending = true;
215
+ }, () => this.abandonInFlight());
216
+ }
217
+ /**
218
+ * #1216: the breaker opened, so the host is treated as down. Requests that
219
+ * are still waiting on it fail now rather than each waiting out its own
220
+ * timeout.
221
+ */
222
+ abandonInFlight() {
223
+ if (this.inFlight.size === 0)
224
+ return;
225
+ const err = new Error(`[EmbedderEndpointClient] circuit breaker opened for ${this.parsed.safeUrl} — request abandoned`);
226
+ for (const reject of [...this.inFlight])
227
+ reject(err);
228
+ }
229
+ /**
230
+ * #1216: true while the endpoint is not known to work: the breaker is open,
231
+ * or its window elapsed and the trial probe has not succeeded yet.
232
+ */
233
+ needsTrial() {
234
+ return this.breaker.isOpen() || this.trialPending;
235
+ }
236
+ /** Start the half-open trial probe in the background (one at a time). */
237
+ startTrialProbe() {
238
+ if (this.probeInFlight)
239
+ return;
240
+ this.probe().catch(() => {
241
+ // Still failing: keep fast-failing for another full window.
242
+ this.breaker.trip();
180
243
  });
181
244
  }
182
245
  /** Public, redacted endpoint URL for logs/metrics. */
@@ -201,6 +264,14 @@ export class EmbedderEndpointClient {
201
264
  }
202
265
  // Identity gate: every embed call must have a verified identity behind it.
203
266
  if (this.cachedIdentity === null) {
267
+ if (this.trialPending) {
268
+ // #1216: half-open. The endpoint failed until a window ago and may
269
+ // still not answer. Probe it in the background as the single trial
270
+ // and fail fast here; callers after a successful trial embed again.
271
+ this.startTrialProbe();
272
+ throw new Error(`[EmbedderEndpointClient] circuit breaker half-open for ${this.parsed.safeUrl} — ` +
273
+ `trial probe running, fast-failing`);
274
+ }
204
275
  await this.ensureProbed();
205
276
  }
206
277
  try {
@@ -210,7 +281,7 @@ export class EmbedderEndpointClient {
210
281
  return vectors;
211
282
  }
212
283
  catch (err) {
213
- this.breaker.recordFailure();
284
+ this.breaker.recordFailure(err instanceof EmbedderEndpointTimeoutError);
214
285
  throw err;
215
286
  }
216
287
  }
@@ -242,7 +313,7 @@ export class EmbedderEndpointClient {
242
313
  this.breaker.recordSuccess();
243
314
  }
244
315
  catch (err) {
245
- this.breaker.recordFailure();
316
+ this.breaker.recordFailure(err instanceof EmbedderEndpointTimeoutError);
246
317
  throw err;
247
318
  }
248
319
  if (!vec || vec.length !== this.opts.expectedDim) {
@@ -262,6 +333,7 @@ export class EmbedderEndpointClient {
262
333
  fingerprint,
263
334
  endpoint: this.parsed.safeUrl,
264
335
  };
336
+ this.trialPending = false;
265
337
  return this.cachedIdentity;
266
338
  }
267
339
  getCachedIdentity() {
@@ -374,18 +446,30 @@ export class EmbedderEndpointClient {
374
446
  const requestTimeoutMs = this.opts.requestTimeoutMs;
375
447
  return new Promise((resolve, reject) => {
376
448
  let settled = false;
449
+ // #1285: removes this request's listeners from its socket. Keep-alive
450
+ // sockets serve many requests; listeners left behind pile up and a
451
+ // finished request's timeout handler would fire for a later request.
452
+ let detachFromSocket = () => { };
377
453
  const safeResolve = (val) => {
378
454
  if (settled)
379
455
  return;
380
456
  settled = true;
457
+ detachFromSocket();
458
+ this.inFlight.delete(abandon);
381
459
  resolve(val);
382
460
  };
383
461
  const safeReject = (err) => {
384
462
  if (settled)
385
463
  return;
386
464
  settled = true;
465
+ detachFromSocket();
466
+ this.inFlight.delete(abandon);
387
467
  reject(err);
388
468
  };
469
+ const abandon = (err) => {
470
+ safeReject(err);
471
+ req.destroy(err);
472
+ };
389
473
  const req = requestFn(reqOptions, (res) => {
390
474
  const chunks = [];
391
475
  res.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
@@ -426,18 +510,27 @@ export class EmbedderEndpointClient {
426
510
  else {
427
511
  onConnect();
428
512
  }
429
- socket.on('timeout', () => {
513
+ const onTimeout = () => {
430
514
  // Distinguish phase for the error message.
431
515
  const phase = socket.connecting ? 'connect' : 'request';
432
516
  const limit = socket.connecting ? connectTimeoutMs : requestTimeoutMs;
433
- const err = new Error(`[EmbedderEndpointClient] ${phase} timeout after ${limit}ms`);
517
+ const err = new EmbedderEndpointTimeoutError(phase, limit);
434
518
  // Reject FIRST, then destroy. If we destroy first, the 'error' event
435
519
  // races us and we might lose the timeout-specific message.
436
520
  safeReject(err);
437
521
  req.destroy(err);
438
- });
522
+ };
523
+ socket.on('timeout', onTimeout);
524
+ detachFromSocket = () => {
525
+ socket.removeListener('timeout', onTimeout);
526
+ socket.removeListener('connect', onConnect);
527
+ };
528
+ // Settled before the socket was assigned: nothing of ours may stay on it.
529
+ if (settled)
530
+ detachFromSocket();
439
531
  });
440
532
  req.on('error', (err) => safeReject(err));
533
+ this.inFlight.add(abandon);
441
534
  req.write(body);
442
535
  req.end();
443
536
  });
@@ -57,6 +57,18 @@ export declare const EMBEDDING_RUNTIME_UNAVAILABLE_CAUSE: string;
57
57
  export declare function reportEmbeddingRuntimeUnavailable(): void;
58
58
  /** @internal test-only seam */
59
59
  export declare function __resetEmbeddingRuntimeNoticeForTests(): void;
60
+ /**
61
+ * #1217: record the embedding space of a vector stored on a
62
+ * captured_experiences row. ExperienceReplay compares only vectors of the
63
+ * active space. On a table without the column (it is added by
64
+ * ExperienceReplay's schema) the vector stays without provenance: it is never
65
+ * compared, and ExperienceReplay re-embeds it at its next start.
66
+ */
67
+ export declare function recordExperienceEmbeddingSpace(db: {
68
+ prepare(sql: string): {
69
+ run(...params: unknown[]): unknown;
70
+ };
71
+ }, experienceId: string, spaceId: string | undefined): void;
60
72
  /** Sidecar path used to bind a persistent ANN index to one embedding space. */
61
73
  export declare function embeddingSpaceManifestPath(indexPath: string): string;
62
74
  /**
@@ -120,6 +120,23 @@ export function reportEmbeddingRuntimeUnavailable() {
120
120
  export function __resetEmbeddingRuntimeNoticeForTests() {
121
121
  embeddingRuntimeNoticeShown = false;
122
122
  }
123
+ /**
124
+ * #1217: record the embedding space of a vector stored on a
125
+ * captured_experiences row. ExperienceReplay compares only vectors of the
126
+ * active space. On a table without the column (it is added by
127
+ * ExperienceReplay's schema) the vector stays without provenance: it is never
128
+ * compared, and ExperienceReplay re-embeds it at its next start.
129
+ */
130
+ export function recordExperienceEmbeddingSpace(db, experienceId, spaceId) {
131
+ if (!spaceId)
132
+ return;
133
+ try {
134
+ db.prepare('UPDATE captured_experiences SET embedding_space_id = ? WHERE id = ?').run(spaceId, experienceId);
135
+ }
136
+ catch {
137
+ // Older table without the column; see above.
138
+ }
139
+ }
123
140
  /** Sidecar path used to bind a persistent ANN index to one embedding space. */
124
141
  export function embeddingSpaceManifestPath(indexPath) {
125
142
  return `${indexPath}.space.json`;
@@ -16,6 +16,7 @@ import { getUnifiedMemory } from '../kernel/unified-memory.js';
16
16
  import { toErrorMessage } from '../shared/error-utils.js';
17
17
  import { createLogger } from '../logging/logger-factory.js';
18
18
  import { isLearnableResult } from './learnable-result.js';
19
+ import { recordExperienceEmbeddingSpace } from './embedding-space.js';
19
20
  const ecLogger = createLogger('ExperienceCapture');
20
21
  // ============================================================================
21
22
  // Active Experience Tracking
@@ -308,8 +309,9 @@ async function persistExperience(context, outcome) {
308
309
  console.warn('[ExperienceCaptureMiddleware] Memory manager not available');
309
310
  return;
310
311
  }
312
+ const memory = memoryManager;
311
313
  try {
312
- const db = memoryManager.getDatabase();
314
+ const db = memory.getDatabase();
313
315
  if (!db)
314
316
  return;
315
317
  const stmt = db.prepare(`
@@ -318,9 +320,11 @@ async function persistExperience(context, outcome) {
318
320
  routing_json, steps_json, result_json, error, started_at, completed_at, source)
319
321
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), ?)
320
322
  `);
321
- stmt.run(outcome.id, context.task, context.agent, context.domain, outcome.success ? 1 : 0, outcome.quality, outcome.durationMs, context.modelTier || null, safeJsonStringify(context.routing), safeJsonStringify(outcome.steps), safeJsonStringify(outcome.result), outcome.error || null, context.startedAt.toISOString(), 'middleware');
323
+ // #1274: queued, so a locked memory.db does not freeze the MCP server's
324
+ // event loop while experiences are captured.
325
+ await memory.writeWhenUnlocked(() => stmt.run(outcome.id, context.task, context.agent, context.domain, outcome.success ? 1 : 0, outcome.quality, outcome.durationMs, context.modelTier || null, safeJsonStringify(context.routing), safeJsonStringify(outcome.steps), safeJsonStringify(outcome.result), outcome.error || null, context.startedAt.toISOString(), 'middleware'));
322
326
  // Fire-and-forget: compute and store embedding for this experience
323
- computeExperienceEmbedding(db, outcome.id, context.task, context.domain).catch((e) => { ecLogger.warn('Embedding computation failed', { error: e instanceof Error ? e.message : String(e), experienceId: outcome.id, domain: context.domain }); });
327
+ computeExperienceEmbedding(memory, outcome.id, context.task, context.domain).catch((e) => { ecLogger.warn('Embedding computation failed', { error: e instanceof Error ? e.message : String(e), experienceId: outcome.id, domain: context.domain }); });
324
328
  }
325
329
  catch (error) {
326
330
  console.error('[ExperienceCaptureMiddleware] Failed to persist experience:', error);
@@ -330,19 +334,26 @@ async function persistExperience(context, outcome) {
330
334
  * Compute and store embedding for a captured experience (async, non-blocking).
331
335
  * Uses the shared ONNX transformer model (all-MiniLM-L6-v2, 384-dim).
332
336
  */
333
- async function computeExperienceEmbedding(db, experienceId, task, domain) {
337
+ async function computeExperienceEmbedding(memory, experienceId, task, domain) {
334
338
  try {
335
- const { computeRealEmbedding } = await import('./real-embeddings.js');
339
+ const { computeRealEmbedding, getActiveEmbeddingSpaceIdentity } = await import('./real-embeddings.js');
336
340
  const text = `${domain}: ${task}`.slice(0, 512); // Cap input length
337
341
  const embedding = await computeRealEmbedding(text);
338
342
  if (!embedding || embedding.length === 0)
339
343
  return;
340
344
  const buffer = Buffer.from(new Float32Array(embedding).buffer);
341
- db.prepare(`
342
- UPDATE captured_experiences
343
- SET embedding = ?, embedding_dimension = ?
344
- WHERE id = ? AND embedding IS NULL
345
- `).run(buffer, embedding.length, experienceId);
345
+ const db = memory.getDatabase();
346
+ await memory.writeWhenUnlocked(() => {
347
+ const updated = db.prepare(`
348
+ UPDATE captured_experiences
349
+ SET embedding = ?, embedding_dimension = ?
350
+ WHERE id = ? AND embedding IS NULL
351
+ `).run(buffer, embedding.length, experienceId);
352
+ // #1217 (ADR-097): store the vector's embedding space with it.
353
+ if (updated.changes > 0) {
354
+ recordExperienceEmbeddingSpace(db, experienceId, getActiveEmbeddingSpaceIdentity()?.spaceId);
355
+ }
356
+ });
346
357
  }
347
358
  catch {
348
359
  // Non-critical — embedding will be backfilled later if needed
@@ -354,8 +365,9 @@ async function computeExperienceEmbedding(db, experienceId, task, domain) {
354
365
  async function persistToSonaPatterns(context, outcome) {
355
366
  if (!memoryManager)
356
367
  return;
368
+ const memory = memoryManager;
357
369
  try {
358
- const db = memoryManager.getDatabase();
370
+ const db = memory.getDatabase();
359
371
  if (!db)
360
372
  return;
361
373
  // Only store successful patterns with decent quality
@@ -368,12 +380,12 @@ async function persistToSonaPatterns(context, outcome) {
368
380
  confidence, usage_count, metadata, created_at, updated_at)
369
381
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
370
382
  `);
371
- stmt.run(`sona-${outcome.id}`, 'task-execution', context.domain, context.agent, safeJsonStringify({ task: context.task.slice(0, 200) }), outcome.quality, 1, outcome.quality, outcome.quality, 1, safeJsonStringify({
383
+ await memory.writeWhenUnlocked(() => stmt.run(`sona-${outcome.id}`, 'task-execution', context.domain, context.agent, safeJsonStringify({ task: context.task.slice(0, 200) }), outcome.quality, 1, outcome.quality, outcome.quality, 1, safeJsonStringify({
372
384
  experienceId: outcome.id,
373
385
  durationMs: outcome.durationMs,
374
386
  stepsCount: outcome.steps.length,
375
387
  modelTier: context.modelTier,
376
- }));
388
+ })));
377
389
  }
378
390
  catch (error) {
379
391
  // Log but don't fail - sona_patterns might not exist
@@ -234,7 +234,7 @@ export class ExperienceCaptureService {
234
234
  const contextFingerprint = `${experience.domain ?? 'unknown'}:${experience.agent ?? 'unknown'}`;
235
235
  for (const patternId of experience.appliedPatterns) {
236
236
  try {
237
- this.nullRecorder({
237
+ await this.nullRecorder({
238
238
  patternId,
239
239
  contextFingerprint,
240
240
  failureMode: experience.testOutcome ?? experience.feedback ?? 'task-failure',
@@ -70,6 +70,11 @@ export interface ConsolidationConfig {
70
70
  contradictionSimilarityThreshold: number;
71
71
  /** Min quality gap that turns a near-duplicate into a contradiction (0-1). */
72
72
  contradictionQualityDelta: number;
73
+ /**
74
+ * #1281: embedding space (ADR-097 spaceId) whose vectors Phase 1 compares.
75
+ * Defaults to the active embedder's space.
76
+ */
77
+ embeddingSpaceId?: string;
73
78
  }
74
79
  export declare class ExperienceConsolidator {
75
80
  private readonly config;
@@ -94,9 +99,22 @@ export declare class ExperienceConsolidator {
94
99
  bootstrapDomain(domain: string): Promise<ConsolidationResult>;
95
100
  private clusterAndMerge;
96
101
  private reinforceQuality;
102
+ private reinforceQualityNow;
97
103
  private archiveValueless;
104
+ private archiveValuelessNow;
98
105
  private hardDeleteExcess;
106
+ private hardDeleteExcessNow;
107
+ /** #1281: the embedding space Phase 1 compares vectors in, or null if unknown. */
108
+ private resolveEmbeddingSpaceId;
109
+ /** Tables created before #1217 have no embedding_space_id column. */
110
+ private hasEmbeddingSpaceColumn;
99
111
  private ensureInitialized;
112
+ /**
113
+ * Queue a write on the shared connection (#1283): the learning worker runs
114
+ * consolidation inside the MCP server, where a locked memory.db must not
115
+ * freeze the event loop. On any other connection the write runs at once.
116
+ */
117
+ private write;
100
118
  private bufferToFloatArray;
101
119
  }
102
120
  /**
@@ -15,7 +15,8 @@
15
15
  * Ensures the Exp counter is monotonically non-decreasing.
16
16
  */
17
17
  import { v4 as uuidv4 } from 'uuid';
18
- import { getUnifiedMemory } from '../kernel/unified-memory.js';
18
+ import { getUnifiedMemory, writeWhenUnlockedOn } from '../kernel/unified-memory.js';
19
+ import { ensureEndpointEmbeddingSpaceIdentity, getActiveEmbeddingSpaceIdentity } from './real-embeddings.js';
19
20
  import { HNSWEmbeddingIndex } from '../integrations/embeddings/index/HNSWIndex.js';
20
21
  const DEFAULT_CONFIG = {
21
22
  mergeSimilarityThreshold: 0.85,
@@ -111,9 +112,9 @@ export class ExperienceConsolidator {
111
112
  result.merged = clusterResult.merged;
112
113
  result.contradicted = clusterResult.contradicted;
113
114
  // Phase 2: Quality Reinforcement
114
- result.qualityUpdated = this.reinforceQuality(domain);
115
+ result.qualityUpdated = await this.reinforceQuality(domain);
115
116
  // Phase 3: Archive Valueless
116
- result.archived = this.archiveValueless(domain);
117
+ result.archived = await this.archiveValueless(domain);
117
118
  // Safety valve: when the domain still exceeds hardThreshold after the
118
119
  // soft phases, archive (not delete) the oldest low-quality excess.
119
120
  // Result is attributed to `archived` — `hardDeleted` stays 0 since
@@ -121,7 +122,7 @@ export class ExperienceConsolidator {
121
122
  const afterCount = this.db.prepare("SELECT COUNT(*) as cnt FROM captured_experiences WHERE domain = ? AND consolidated_into IS NULL").get(domain).cnt;
122
123
  let safetyValveArchived = 0;
123
124
  if (afterCount > this.config.hardThreshold) {
124
- safetyValveArchived = this.hardDeleteExcess(domain, afterCount);
125
+ safetyValveArchived = await this.hardDeleteExcess(domain, afterCount);
125
126
  result.archived += safetyValveArchived;
126
127
  }
127
128
  result.activeRemaining = afterCount - safetyValveArchived;
@@ -150,7 +151,8 @@ export class ExperienceConsolidator {
150
151
  Object.assign(this.config, savedConfig);
151
152
  // Set bootstrap flag
152
153
  try {
153
- this.db.prepare("INSERT OR REPLACE INTO kv_store (key, value, namespace) VALUES (?, ?, 'system')").run(`consolidation_bootstrap_${domain}`, new Date().toISOString());
154
+ const bootstrappedAt = new Date().toISOString();
155
+ await this.write(() => this.db.prepare("INSERT OR REPLACE INTO kv_store (key, value, namespace) VALUES (?, ?, 'system')").run(`consolidation_bootstrap_${domain}`, bootstrappedAt));
154
156
  }
155
157
  catch {
156
158
  // kv_store may not exist in all setups
@@ -163,6 +165,12 @@ export class ExperienceConsolidator {
163
165
  // Phase 1: Cluster & Merge
164
166
  // ============================================================================
165
167
  async clusterAndMerge(domain) {
168
+ // #1281 (ADR-097): a cosine between vectors of different embedding spaces
169
+ // is meaningless, even at the same dimension. Only vectors recorded in the
170
+ // active space are compared; without a known space nothing is merged.
171
+ const spaceId = await this.resolveEmbeddingSpaceId();
172
+ if (!spaceId || !this.hasEmbeddingSpaceColumn())
173
+ return { merged: 0, contradicted: 0 };
166
174
  // Get active experiences with embeddings, sorted by quality DESC
167
175
  const candidates = this.db.prepare(`
168
176
  SELECT id, task, domain, quality, success, application_count,
@@ -170,8 +178,9 @@ export class ExperienceConsolidator {
170
178
  embedding, embedding_dimension, started_at
171
179
  FROM captured_experiences
172
180
  WHERE domain = ? AND consolidated_into IS NULL AND embedding IS NOT NULL
181
+ AND embedding_space_id = ?
173
182
  ORDER BY quality DESC
174
- `).all(domain);
183
+ `).all(domain, spaceId);
175
184
  if (candidates.length < 2)
176
185
  return { merged: 0, contradicted: 0 };
177
186
  // Build a temporary HNSW index for this domain
@@ -293,7 +302,7 @@ export class ExperienceConsolidator {
293
302
  boostSurvivor.run(mergedIds.length, boost, row.id);
294
303
  logConsolidation.run(uuidv4(), domain, 'merge', JSON.stringify(mergedIds), row.id, JSON.stringify({ count: mergedIds.length, boost }));
295
304
  });
296
- transaction();
305
+ await writeWhenUnlockedOn(this.db, transaction);
297
306
  }
298
307
  // Apply contradiction suppressions in a transaction. The loser is
299
308
  // soft-suppressed (consolidated_into = 'contradicted'), so it is excluded
@@ -306,7 +315,7 @@ export class ExperienceConsolidator {
306
315
  }
307
316
  logConsolidation.run(uuidv4(), domain, 'contradiction', JSON.stringify(contradictedIds), row.id, JSON.stringify({ count: contradictedIds.length, survivorQuality: row.quality }));
308
317
  });
309
- tx();
318
+ await writeWhenUnlockedOn(this.db, tx);
310
319
  }
311
320
  }
312
321
  // Clean up HNSW index
@@ -317,6 +326,10 @@ export class ExperienceConsolidator {
317
326
  // Phase 2: Quality Reinforcement
318
327
  // ============================================================================
319
328
  reinforceQuality(domain) {
329
+ // Read and update in one queued unit, so the update uses current values.
330
+ return this.write(() => this.reinforceQualityNow(domain));
331
+ }
332
+ reinforceQualityNow(domain) {
320
333
  // Get experiences with application history
321
334
  const experiences = this.db.prepare(`
322
335
  SELECT ce.id, ce.quality, ce.consolidation_count,
@@ -366,6 +379,9 @@ export class ExperienceConsolidator {
366
379
  // Phase 3: Archive Valueless
367
380
  // ============================================================================
368
381
  archiveValueless(domain) {
382
+ return this.write(() => this.archiveValuelessNow(domain));
383
+ }
384
+ archiveValuelessNow(domain) {
369
385
  const cutoffDate = new Date();
370
386
  cutoffDate.setDate(cutoffDate.getDate() - this.config.archiveMinAgeDays);
371
387
  const cutoffStr = cutoffDate.toISOString().replace('T', ' ').slice(0, 19);
@@ -415,6 +431,9 @@ export class ExperienceConsolidator {
415
431
  // ConsolidationResult.hardDeleted is kept zero for that reason; the
416
432
  // archive count is rolled into Phase 3's `archived` total.
417
433
  hardDeleteExcess(domain, currentCount) {
434
+ return this.write(() => this.hardDeleteExcessNow(domain, currentCount));
435
+ }
436
+ hardDeleteExcessNow(domain, currentCount) {
418
437
  const excess = currentCount - this.config.hardThreshold;
419
438
  if (excess <= 0)
420
439
  return 0;
@@ -455,11 +474,39 @@ export class ExperienceConsolidator {
455
474
  // ============================================================================
456
475
  // Utilities
457
476
  // ============================================================================
477
+ /** #1281: the embedding space Phase 1 compares vectors in, or null if unknown. */
478
+ async resolveEmbeddingSpaceId() {
479
+ if (this.config.embeddingSpaceId)
480
+ return this.config.embeddingSpaceId;
481
+ const active = getActiveEmbeddingSpaceIdentity()?.spaceId;
482
+ if (active)
483
+ return active;
484
+ try {
485
+ // A configured endpoint's identity, as the pattern stores resolve it (#754).
486
+ return (await ensureEndpointEmbeddingSpaceIdentity())?.spaceId ?? null;
487
+ }
488
+ catch {
489
+ return null;
490
+ }
491
+ }
492
+ /** Tables created before #1217 have no embedding_space_id column. */
493
+ hasEmbeddingSpaceColumn() {
494
+ const columns = this.db.prepare('PRAGMA table_info(captured_experiences)').all();
495
+ return columns.some(c => c.name === 'embedding_space_id');
496
+ }
458
497
  ensureInitialized() {
459
498
  if (!this.initialized || !this.db) {
460
499
  throw new Error('ExperienceConsolidator not initialized. Call initialize() first.');
461
500
  }
462
501
  }
502
+ /**
503
+ * Queue a write on the shared connection (#1283): the learning worker runs
504
+ * consolidation inside the MCP server, where a locked memory.db must not
505
+ * freeze the event loop. On any other connection the write runs at once.
506
+ */
507
+ write(fn) {
508
+ return writeWhenUnlockedOn(this.db, fn);
509
+ }
463
510
  bufferToFloatArray(buffer, dimension) {
464
511
  const arr = [];
465
512
  for (let i = 0; i < dimension; i++) {
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Attribute legacy experience vectors to an embedding space (#1217)
3
+ *
4
+ * captured_experiences rows written before #1217 carry a vector but no
5
+ * embedding_space_id, so ExperienceReplay never compares them. Their vectors
6
+ * are learning data and are never overwritten here. Instead each row's text is
7
+ * re-embedded with the recipe its writer used; when the result matches the
8
+ * stored vector (cosine >= EMBEDDING_ROUND_TRIP_MIN_COSINE), the stored vector
9
+ * came from the active space and only embedding_space_id is set. A row that
10
+ * does not match (another space, or text that can no longer be rebuilt) is
11
+ * left as it is: it stays excluded from comparison.
12
+ *
13
+ * Progress is kept per space in kv_store, so rows that did not match are not
14
+ * re-checked on every start; a different active space starts over.
15
+ */
16
+ interface VerifiableDatabase {
17
+ prepare(sql: string): {
18
+ all(...params: unknown[]): unknown[];
19
+ get(...params: unknown[]): unknown;
20
+ run(...params: unknown[]): {
21
+ changes: number;
22
+ };
23
+ };
24
+ }
25
+ export interface LegacyExperienceRow {
26
+ rowid: number;
27
+ id: string;
28
+ task: string;
29
+ agent: string | null;
30
+ domain: string | null;
31
+ steps_json: string | null;
32
+ source: string | null;
33
+ embedding: Buffer;
34
+ embedding_dimension: number;
35
+ }
36
+ export interface ExperienceSpaceVerificationOptions {
37
+ /** Embed text in the active space; throws when the embedder fails. */
38
+ embed: (text: string) => Promise<number[]>;
39
+ /** The active embedding space, read after embedding. */
40
+ activeSpaceId: () => string | undefined;
41
+ /** Rows to check in this pass. */
42
+ limit?: number;
43
+ /** Runs a write (e.g. UnifiedMemoryManager.writeWhenUnlocked). */
44
+ write?: <T>(fn: () => T) => Promise<T> | T;
45
+ }
46
+ export interface ExperienceSpaceVerificationResult {
47
+ spaceId: string | null;
48
+ checked: number;
49
+ stamped: string[];
50
+ left: number;
51
+ }
52
+ /**
53
+ * The texts the row's writer may have embedded. Each is only a candidate:
54
+ * a row is attributed only when one reproduces its stored vector.
55
+ * - experience-capture middleware and the CLI hooks: `${domain}: ${task}`,
56
+ * capped at 512 chars (the hooks store task capped at 500, so a longer
57
+ * task cannot be rebuilt and will not match);
58
+ * - ExperienceReplay's start-up backfill: the same, scrubbed (ADR-099);
59
+ * - ExperienceReplay.storeExperience (source 'experience-replay'):
60
+ * `${task} ${strategy} ${keyActions}`, strategy in `agent`, key actions
61
+ * in steps_json.
62
+ */
63
+ export declare function legacyExperienceEmbeddingTexts(row: LegacyExperienceRow): string[];
64
+ /**
65
+ * Check up to `limit` legacy rows (vector, no embedding_space_id) and set
66
+ * embedding_space_id on those whose stored vector the active embedder
67
+ * reproduces. Never writes a vector. Stops at the first embedder failure.
68
+ */
69
+ export declare function verifyLegacyExperienceSpaces(db: VerifiableDatabase, options: ExperienceSpaceVerificationOptions): Promise<ExperienceSpaceVerificationResult>;
70
+ export {};
71
+ //# sourceMappingURL=experience-space-verification.d.ts.map