agentic-qe 3.15.15 → 3.15.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +90 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/audit/witness-chain.d.ts +7 -0
  5. package/dist/audit/witness-chain.js +10 -0
  6. package/dist/cli/bundle.js +6 -6
  7. package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-45NWEKVS.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-LVHMYFEF.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
  12. package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-CZKHXDDS.js} +2 -2
  13. package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-ELDZH3CZ.js} +4 -4
  14. package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-5MT4T47Z.js} +3 -3
  15. package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
  16. package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-6TGYPC2B.js} +2 -2
  17. package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-HQWZFO52.js} +3 -3
  18. package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-WVILM4SO.js} +2 -2
  19. package/dist/cli/chunks/{browser-6LACARWE.js → browser-RX5ALU3H.js} +2 -2
  20. package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
  21. package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-24OX5TQJ.js} +1 -1
  22. package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-24QHCVX6.js} +1 -1
  23. package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-2H4XH6FT.js} +2 -2
  24. package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-2YZ4G6NW.js} +1 -1
  25. package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
  26. package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-32GN3JKR.js} +1 -1
  27. package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-3HD7E6HN.js} +2 -2
  28. package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-4D4DENG6.js} +2 -2
  29. package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-4LQFBY5L.js} +6 -6
  30. package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-4NFQLP6R.js} +1 -1
  31. package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-525CFDUE.js} +2 -2
  32. package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
  33. package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-5JZRZI4S.js} +2 -2
  34. package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-5LAVKGLH.js} +2 -2
  35. package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
  36. package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-5PBLPQ5T.js} +2 -2
  37. package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
  38. package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-5SPCGMBB.js} +2 -2
  39. package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-5V3TI2LG.js} +1 -1
  40. package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-5VZL4UVN.js} +2 -2
  41. package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-63GMRQ25.js} +1 -1
  42. package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-63ZKI4PX.js} +6 -6
  43. package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-67Z5R7RJ.js} +2 -2
  44. package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-6DPYNAOK.js} +2 -2
  45. package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-6ICX3FEG.js} +3 -3
  46. package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-6XXZDV2C.js} +2 -2
  47. package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-6ZBXSOX6.js} +2 -2
  48. package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-72XSEQMW.js} +2 -2
  49. package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-7TE5ONQQ.js} +1 -1
  50. package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-A5GBXCP5.js} +2 -2
  51. package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-AAMLQ2LF.js} +3 -3
  52. package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
  53. package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-AGRV5B3T.js} +2 -2
  54. package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-AJMJNQMP.js} +1 -1
  55. package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-AR67RJPY.js} +2 -2
  56. package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-ASEOFRIG.js} +2 -2
  57. package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-BEKDKVQT.js} +2 -2
  58. package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-BY5OF7OH.js} +2 -2
  59. package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-C5FP5GW3.js} +2 -2
  60. package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-C6D5AHBO.js} +2 -2
  61. package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-CAKMOVZ6.js} +2 -2
  62. package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-CEYSYSK5.js} +2 -2
  63. package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-CGGUM2YJ.js} +2 -2
  64. package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-CJSHWQXP.js} +2 -2
  65. package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-CRPIYUTJ.js} +2 -2
  66. package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-D6COXLYE.js} +2 -2
  67. package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-DTMAS2GB.js} +2 -2
  68. package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-DVYHMDFR.js} +470 -411
  69. package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
  70. package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-E3D4GPLP.js} +3 -3
  71. package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-EA4YQVKS.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4D4CWP72.js → chunk-EGYE5UPQ.js} +2 -2
  73. package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-EK7OLYOZ.js} +2 -2
  74. package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-F742SZAX.js} +2 -2
  75. package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-FBDVGRSC.js} +1 -1
  76. package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-FDDC72IA.js} +2 -2
  77. package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-FL64OUBA.js} +2 -2
  78. package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-FLNAW7C4.js} +2 -2
  79. package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-G5RHFBAY.js} +2 -2
  80. package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-GAHNO6JJ.js} +2 -2
  81. package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-GFWHUQSF.js} +2 -2
  82. package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-GJYHWYXR.js} +2 -2
  83. package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-GQ6TUIKY.js} +1 -1
  84. package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-GSKMOPL7.js} +2 -2
  85. package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-HCH4Y6XX.js} +2 -2
  86. package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-HGWXF45W.js} +1 -1
  87. package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-HJ6ZGVTB.js} +2 -2
  88. package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-HLUXXCHF.js} +1 -1
  89. package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-HVRRLYX6.js} +4 -4
  90. package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-I7MQIM2U.js} +1 -1
  91. package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-IESR7TNB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-IHRXZZQM.js} +1 -1
  93. package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-IOKYCMTJ.js} +6 -6
  94. package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-IOQ6ZQ5W.js} +1 -1
  95. package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-IOYG4VFL.js} +2 -2
  96. package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-IUBJVHNB.js} +2 -2
  97. package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-J442IZLE.js} +1 -1
  98. package/dist/cli/chunks/{chunk-G242G224.js → chunk-J4ELZNLY.js} +2 -2
  99. package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
  100. package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
  101. package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-JHQCRRJI.js} +2 -2
  102. package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-JQ3DYUMS.js} +2 -2
  103. package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-KITOPKRG.js} +2 -2
  104. package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-KKU2QGSJ.js} +2 -2
  105. package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
  106. package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-KNSRL6NO.js} +2 -2
  107. package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-KPRCB5LT.js} +2 -2
  108. package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-KQYJ4VQ5.js} +1 -1
  109. package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-KU2AUFGX.js} +2 -2
  110. package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-KVF4NXGQ.js} +2 -2
  111. package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-KXCLACFG.js} +2 -2
  112. package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-L2DWPVNJ.js} +1 -1
  113. package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-L6QSTQME.js} +2 -2
  114. package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-LE4QJREF.js} +1 -1
  115. package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-LKTTUHLF.js} +2 -2
  116. package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-LQLPB2T6.js} +2 -2
  117. package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-LRSX2FJM.js} +1 -1
  118. package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
  119. package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
  120. package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-MAFQV4U4.js} +2 -2
  121. package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-MD43XRX5.js} +1 -1
  122. package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-MI5MFHRA.js} +2 -2
  123. package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-MO55CVMT.js} +32 -32
  124. package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-N7HL5PHH.js} +1 -1
  125. package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
  126. package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-NDJ7P2EP.js} +1 -1
  127. package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-NO3IV5Q5.js} +1 -1
  128. package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-NQXXI77K.js} +2 -2
  129. package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-NVEWF4JV.js} +1 -1
  130. package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-NZU4ACBZ.js} +2 -2
  131. package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
  132. package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-OAEE6JWQ.js} +2 -2
  133. package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-OCV2XEWQ.js} +2 -2
  134. package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-P3EYRILV.js} +2 -2
  135. package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PEQDY4BO.js} +2 -2
  136. package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-PF7RBAYL.js} +2 -2
  137. package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-PHT5N7SC.js} +2 -2
  138. package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-PINSJCM3.js} +1 -1
  139. package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-PPUZWYUG.js} +2 -2
  140. package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-QPEOLAAS.js} +1 -1
  141. package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-QQWBWEJS.js} +18 -18
  142. package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-QVDCVD5D.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-RJIEG3NA.js} +2 -2
  144. package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-RV74I3YO.js} +2 -2
  145. package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-S75SOOZL.js} +2 -2
  146. package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-SASBO5Y5.js} +2 -2
  147. package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-SDLWKRVL.js} +2 -2
  148. package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-SHKOCGNK.js} +2 -2
  149. package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-SI6DPU5D.js} +1 -1
  150. package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-SJ6Y4725.js} +2 -2
  151. package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-SR52XP5F.js} +1 -1
  152. package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-SSUAAX3F.js} +2 -2
  153. package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-SSYAQZXA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-SUDMM5SO.js} +2 -2
  155. package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-TIUKLYAI.js} +1 -1
  156. package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-TVGI32MB.js} +33 -33
  157. package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-U2A7NHZA.js} +2 -2
  158. package/dist/cli/chunks/{chunk-TX2CHQD7.js → chunk-UE5ZOZR2.js} +2 -2
  159. package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-UHEOGZLX.js} +11 -11
  160. package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
  161. package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-V5NHZV7S.js} +2 -2
  162. package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-VJCIEHEF.js} +1 -1
  163. package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-VMDFFTCK.js} +1 -1
  164. package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
  165. package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-VWPM27GU.js} +2 -2
  166. package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-VXFLJNCA.js} +2 -2
  167. package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-W5HQUIML.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-WP4RETKG.js} +2 -2
  169. package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-XIIQ5QTT.js} +2 -2
  170. package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-XIQW7EFL.js} +2 -2
  171. package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-XWUWX7BV.js} +4 -4
  172. package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-Y4PFUMOU.js} +1 -1
  173. package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
  174. package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-YLMNVLDK.js} +1 -1
  175. package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-YNMJEDN5.js} +2 -2
  176. package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-YPBSUGMI.js} +1 -1
  177. package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-YRAX7SFJ.js} +2 -2
  178. package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-YTHTQPWR.js} +1 -1
  179. package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-YU2BDRSD.js} +1 -1
  180. package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
  181. package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-ZFL436FN.js} +2 -2
  182. package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-ZJH5MU2I.js} +2 -2
  183. package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-ZQ2XW3IP.js} +2 -2
  184. package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
  185. package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-MFUR4CWV.js} +2 -2
  186. package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-PNDLQ6XV.js} +2 -2
  187. package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-PFZ4M7NC.js} +2 -2
  188. package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-5HH6NLZN.js} +2 -2
  189. package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-QCKYLGLC.js} +2 -2
  190. package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
  191. package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-EASVPFXR.js} +2 -2
  192. package/dist/cli/chunks/{code-WY3GJXHX.js → code-UJXDVYRK.js} +4 -3
  193. package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-BZJ3UDP4.js} +2 -2
  194. package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-XSQZUVOZ.js} +2 -2
  195. package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-OWOOJFI2.js} +2 -2
  196. package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-KP5TOHDT.js} +2 -2
  197. package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-IFKQXLHM.js} +2 -2
  198. package/dist/cli/chunks/{copilot-installer-BHPDSELY.js → copilot-installer-IGJ6KGQY.js} +2 -2
  199. package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
  200. package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-MMDDNKZB.js} +2 -2
  201. package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-LUH2B7NT.js} +3 -3
  202. package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
  203. package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-4YLM5GWM.js} +2 -2
  204. package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
  205. package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-MZKVM4CJ.js} +3 -3
  206. package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-X4CYW665.js} +2 -2
  207. package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-7BM2XINO.js} +2 -2
  208. package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-Y5APLEYB.js} +2 -2
  209. package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-X3ZRJNAH.js} +2 -2
  210. package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-2UW5KQJB.js} +2 -2
  211. package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-35W4CIBV.js} +2 -2
  212. package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
  213. package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
  214. package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
  215. package/dist/cli/chunks/{eval-OQELIWJK.js → eval-4QA2SROK.js} +2 -2
  216. package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
  217. package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-FIORX6GN.js} +2 -2
  218. package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-6LYI2T4G.js} +2 -2
  219. package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-ZOO7LMIC.js} +2 -2
  220. package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
  221. package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-7WF53H4F.js} +3 -3
  222. package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
  223. package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-DEKKMOVW.js} +4 -4
  224. package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
  225. package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
  226. package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
  227. package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
  228. package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-4YOQC6L4.js} +2 -2
  229. package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-TAOKV4EJ.js} +23 -22
  230. package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
  231. package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-BODRJLHL.js} +2 -2
  232. package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-RKMYJNTU.js} +3 -3
  233. package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
  234. package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-MXHSLSB2.js} +2 -2
  235. package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-HUE57IFW.js} +6 -6
  236. package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
  237. package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
  238. package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-S333IKYQ.js} +2 -2
  239. package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-WM5DLQWC.js} +2 -2
  240. package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
  241. package/dist/cli/chunks/{learning-FZTD72CF.js → learning-LNHMQLH5.js} +3 -3
  242. package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-EWFXYZZR.js} +4 -4
  243. package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
  244. package/dist/cli/chunks/{load-YKTPOYBE.js → load-FGYGWVDK.js} +2 -2
  245. package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
  246. package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-2FHNAAOM.js} +2 -2
  247. package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DZMQ73AB.js} +5 -5
  248. package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
  249. package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
  250. package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-6F2UAEUW.js} +2 -2
  251. package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-XY3BGOTZ.js} +2 -2
  252. package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-B4CNKUOS.js} +5 -5
  253. package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
  254. package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
  255. package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-FG5RKVRO.js} +2 -2
  256. package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-3BT4KEVJ.js} +2 -2
  257. package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-WI4RIN7O.js} +2 -2
  258. package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
  259. package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
  260. package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
  261. package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-WNODKPGW.js} +2 -2
  262. package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-5RHAEPYZ.js} +2 -2
  263. package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
  264. package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-WPHR7BGQ.js} +2 -2
  265. package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-4RKTEZMX.js} +3 -3
  266. package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
  267. package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
  268. package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-TPAWHOHH.js} +2 -2
  269. package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-7AVHFNDI.js} +2 -2
  270. package/dist/cli/chunks/router-EP34O3KB.js +2 -0
  271. package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
  272. package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-YKEDVJSH.js} +2 -2
  273. package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-JUAMM354.js} +2 -2
  274. package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
  275. package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
  276. package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
  277. package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
  278. package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
  279. package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
  280. package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
  281. package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
  282. package/dist/cli/chunks/{security-A3IMVLFM.js → security-ORDN3RD2.js} +3 -3
  283. package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
  284. package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
  285. package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
  286. package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-OXRJYZXN.js} +2 -2
  287. package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-BCX5D4HY.js} +2 -2
  288. package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-LFG7RUU6.js} +2 -2
  289. package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
  290. package/dist/cli/chunks/{sync-NTUR53PI.js → sync-YJEE2K2L.js} +2 -2
  291. package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
  292. package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-CILP36I7.js} +4 -4
  293. package/dist/cli/chunks/{test-O6FK3FVF.js → test-SD457QJ6.js} +4 -4
  294. package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
  295. package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-ISI2O4Q5.js} +3 -3
  296. package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
  297. package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-XOC5KG7S.js} +2 -2
  298. package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-LSLQAARK.js} +2 -2
  299. package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
  300. package/dist/cli/chunks/{types-4AOKZYOX.js → types-5BLCGLCR.js} +2 -2
  301. package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
  302. package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
  303. package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
  304. package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-RQJYLK3J.js} +2 -2
  305. package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-QBHWXXCK.js} +2 -2
  306. package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-IKXBKFB5.js} +2 -2
  307. package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
  308. package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
  309. package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-HQGDZT5D.js} +2 -2
  310. package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
  311. package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
  312. package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
  313. package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
  314. package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-RXYQNFJB.js} +2 -2
  315. package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-FBKCA4H6.js} +4 -4
  316. package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
  317. package/dist/cli/chunks/wrappers-TWSKBTWD.js +2 -0
  318. package/dist/cli/commands/code.js +4 -0
  319. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  320. package/dist/cli/handlers/task-handler.d.ts +5 -0
  321. package/dist/cli/handlers/task-handler.js +21 -1
  322. package/dist/cli/utils/task-result.d.ts +11 -0
  323. package/dist/cli/utils/task-result.js +39 -0
  324. package/dist/coordination/handlers/test-execution-handlers.js +92 -58
  325. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  326. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  327. package/dist/domains/code-intelligence/coordinator.js +46 -13
  328. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  329. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
  330. package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
  331. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  332. package/dist/domains/quality-assessment/coordinator.js +2 -1
  333. package/dist/domains/test-execution/coordinator.js +10 -5
  334. package/dist/domains/test-execution/interfaces.d.ts +12 -0
  335. package/dist/domains/test-execution/plugin.js +6 -2
  336. package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
  337. package/dist/domains/test-execution/services/retry-handler.js +14 -9
  338. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  339. package/dist/domains/test-execution/services/test-executor.js +28 -9
  340. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  341. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  342. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  343. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  344. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  345. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  346. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  347. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  348. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  349. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  350. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  351. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  352. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  353. package/dist/feedback/coverage-learner.js +13 -9
  354. package/dist/feedback/test-outcome-tracker.js +13 -9
  355. package/dist/governance/witness-chain.d.ts +5 -0
  356. package/dist/governance/witness-chain.js +22 -6
  357. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  358. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  359. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  360. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  361. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  362. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  363. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  364. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  365. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  366. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  367. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  368. package/dist/kernel/unified-memory.d.ts +24 -0
  369. package/dist/kernel/unified-memory.js +63 -8
  370. package/dist/learning/aqe-learning-engine.js +1 -1
  371. package/dist/learning/embed-and-insert-pattern.js +4 -2
  372. package/dist/learning/embedder-endpoint-client.d.ts +31 -0
  373. package/dist/learning/embedder-endpoint-client.js +103 -10
  374. package/dist/learning/embedding-space.d.ts +12 -0
  375. package/dist/learning/embedding-space.js +17 -0
  376. package/dist/learning/experience-capture-middleware.js +25 -13
  377. package/dist/learning/experience-capture.js +1 -1
  378. package/dist/learning/experience-consolidation.d.ts +18 -0
  379. package/dist/learning/experience-consolidation.js +55 -8
  380. package/dist/learning/experience-space-verification.d.ts +71 -0
  381. package/dist/learning/experience-space-verification.js +147 -0
  382. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  383. package/dist/learning/pattern-lifecycle.js +153 -76
  384. package/dist/learning/pattern-null-store.d.ts +5 -0
  385. package/dist/learning/pattern-null-store.js +8 -0
  386. package/dist/learning/pattern-promotion.js +6 -3
  387. package/dist/learning/pattern-store.d.ts +6 -0
  388. package/dist/learning/pattern-store.js +19 -6
  389. package/dist/learning/qe-reasoning-bank.js +2 -2
  390. package/dist/learning/real-embeddings.js +3 -1
  391. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  392. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  393. package/dist/learning/rvf-pattern-store.js +6 -2
  394. package/dist/learning/sqlite-persistence.d.ts +6 -0
  395. package/dist/learning/sqlite-persistence.js +10 -0
  396. package/dist/mcp/bundle.js +641 -570
  397. package/dist/mcp/entry.js +4 -0
  398. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  399. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  400. package/dist/mcp/protocol-server.js +1 -0
  401. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  402. package/dist/mcp/types.d.ts +6 -0
  403. package/dist/optimization/session-cache.d.ts +17 -1
  404. package/dist/optimization/session-cache.js +40 -36
  405. package/dist/planning/goap-planner.d.ts +6 -0
  406. package/dist/planning/goap-planner.js +35 -19
  407. package/dist/planning/plan-executor.js +24 -15
  408. package/dist/routing/co-execution-repository.js +12 -9
  409. package/dist/routing/routing-feedback.d.ts +8 -0
  410. package/dist/routing/routing-feedback.js +46 -24
  411. package/dist/routing/routing-outcomes-migration.js +7 -2
  412. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  413. package/dist/shared/llm/spend-ledger.js +64 -39
  414. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  415. package/dist/shared/sqlite-lock-wait.js +37 -0
  416. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  417. package/dist/shared/sqlite-write-queue.js +38 -0
  418. package/dist/shared/test-runner-project.d.ts +69 -0
  419. package/dist/shared/test-runner-project.js +186 -0
  420. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  421. package/dist/skills/security-visual-testing/index.js +49 -35
  422. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  423. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  424. package/dist/workers/workers/learning-consolidation.js +8 -7
  425. package/package.json +1 -1
  426. package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
  427. package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
  428. package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
  429. package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
  430. package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
  431. package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
  432. package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
  433. package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
  434. package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
  435. package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
  436. package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
  437. package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
  438. package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
  439. package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
  440. package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
  441. package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
  442. package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
  443. package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
  444. package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
  445. package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
  446. package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
  447. package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
  448. package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
  449. package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
  450. package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
  451. package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
  452. package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
  453. package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
  454. package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
  455. package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
  456. package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
  457. package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
  458. package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
  459. package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
  460. package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
  461. package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
  462. package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
  463. package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
  464. package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
  465. package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
  466. package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
  467. package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
  468. package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
  469. package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
  470. package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
  471. package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
  472. package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
  473. package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
  474. package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
  475. package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
  476. package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
  477. package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
  478. package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
  479. package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
  480. package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
  481. package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
  482. package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
  483. package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
  484. package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
  485. package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
  486. package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
  487. package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
  488. package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
  489. package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
  490. package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
  491. package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
  492. package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
  493. package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
  494. package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
  495. package/dist/cli/chunks/wrappers-5QFMCKXL.js +0 -2
@@ -0,0 +1,147 @@
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
+ import { cosineSimilarity } from '../shared/utils/vector-math.js';
17
+ import { safeJsonParse } from '../shared/safe-json.js';
18
+ import { scrubReasoningBlocks } from '../shared/reasoning-scrub.js';
19
+ import { EMBEDDING_ROUND_TRIP_MIN_COSINE } from './embedding-space.js';
20
+ const CURSOR_NAMESPACE = '_system';
21
+ const cursorKey = (spaceId) => `experience-space-verified-rowid:${spaceId}`;
22
+ /**
23
+ * The texts the row's writer may have embedded. Each is only a candidate:
24
+ * a row is attributed only when one reproduces its stored vector.
25
+ * - experience-capture middleware and the CLI hooks: `${domain}: ${task}`,
26
+ * capped at 512 chars (the hooks store task capped at 500, so a longer
27
+ * task cannot be rebuilt and will not match);
28
+ * - ExperienceReplay's start-up backfill: the same, scrubbed (ADR-099);
29
+ * - ExperienceReplay.storeExperience (source 'experience-replay'):
30
+ * `${task} ${strategy} ${keyActions}`, strategy in `agent`, key actions
31
+ * in steps_json.
32
+ */
33
+ export function legacyExperienceEmbeddingTexts(row) {
34
+ const domainTask = `${row.domain ?? ''}: ${row.task}`;
35
+ const texts = new Set([
36
+ domainTask.slice(0, 512),
37
+ scrubReasoningBlocks(domainTask).slice(0, 512),
38
+ ]);
39
+ if (row.source === 'experience-replay') {
40
+ const keyActions = safeJsonParse(row.steps_json || '[]');
41
+ if (Array.isArray(keyActions)) {
42
+ texts.add(`${row.task} ${row.agent ?? ''} ${keyActions.join(' ')}`);
43
+ }
44
+ }
45
+ return [...texts];
46
+ }
47
+ function storedVector(row) {
48
+ if (row.embedding.length < row.embedding_dimension * 4)
49
+ return null;
50
+ const v = [];
51
+ for (let i = 0; i < row.embedding_dimension; i++)
52
+ v.push(row.embedding.readFloatLE(i * 4));
53
+ return v;
54
+ }
55
+ function readCursor(db, spaceId) {
56
+ try {
57
+ const row = db.prepare('SELECT value FROM kv_store WHERE namespace = ? AND key = ?')
58
+ .get(CURSOR_NAMESPACE, cursorKey(spaceId));
59
+ return row ? Number(row.value) || 0 : 0;
60
+ }
61
+ catch {
62
+ return 0; // no kv_store: check from the start
63
+ }
64
+ }
65
+ function writeCursor(db, spaceId, rowid) {
66
+ try {
67
+ db.prepare('INSERT OR REPLACE INTO kv_store (key, namespace, value) VALUES (?, ?, ?)')
68
+ .run(cursorKey(spaceId), CURSOR_NAMESPACE, String(rowid));
69
+ }
70
+ catch {
71
+ // Without kv_store the next start checks these rows again.
72
+ }
73
+ }
74
+ /**
75
+ * Check up to `limit` legacy rows (vector, no embedding_space_id) and set
76
+ * embedding_space_id on those whose stored vector the active embedder
77
+ * reproduces. Never writes a vector. Stops at the first embedder failure.
78
+ */
79
+ export async function verifyLegacyExperienceSpaces(db, options) {
80
+ const write = options.write ?? ((fn) => fn());
81
+ const result = { spaceId: null, checked: 0, stamped: [], left: 0 };
82
+ // The cursor is per space, so the space must be known first: embedding
83
+ // anything initializes the embedder if needed.
84
+ let spaceId = options.activeSpaceId();
85
+ const rowsAfter = (cursor) => db.prepare(`
86
+ SELECT rowid, id, task, agent, domain, steps_json, source, embedding, embedding_dimension
87
+ FROM captured_experiences
88
+ WHERE rowid > ? AND embedding IS NOT NULL AND embedding_space_id IS NULL
89
+ AND embedding_dimension > 0 AND consolidated_into IS NULL
90
+ ORDER BY rowid LIMIT ?
91
+ `).all(cursor, options.limit ?? 200);
92
+ let rows = rowsAfter(spaceId ? readCursor(db, spaceId) : 0);
93
+ if (rows.length === 0)
94
+ return result;
95
+ if (!spaceId) {
96
+ await options.embed(legacyExperienceEmbeddingTexts(rows[0])[0]);
97
+ spaceId = options.activeSpaceId();
98
+ if (!spaceId)
99
+ return result;
100
+ rows = rowsAfter(readCursor(db, spaceId));
101
+ }
102
+ result.spaceId = spaceId;
103
+ const stamp = db.prepare(`
104
+ UPDATE captured_experiences SET embedding_space_id = ?
105
+ WHERE id = ? AND embedding_space_id IS NULL AND embedding = ?
106
+ `);
107
+ let lastRowid = 0;
108
+ try {
109
+ for (const row of rows) {
110
+ const stored = storedVector(row);
111
+ let matched = false;
112
+ if (stored) {
113
+ for (const text of legacyExperienceEmbeddingTexts(row)) {
114
+ const recomputed = await options.embed(text);
115
+ if (options.activeSpaceId() !== spaceId)
116
+ return result; // embedder changed mid-pass
117
+ if (recomputed.length === stored.length
118
+ && cosineSimilarity(stored, recomputed) >= EMBEDDING_ROUND_TRIP_MIN_COSINE) {
119
+ matched = true;
120
+ break;
121
+ }
122
+ }
123
+ }
124
+ if (matched) {
125
+ // Only the provenance column, and only if the vector is still the one checked.
126
+ const changes = (await write(() => stamp.run(spaceId, row.id, row.embedding))).changes;
127
+ if (changes > 0)
128
+ result.stamped.push(row.id);
129
+ else
130
+ result.left++;
131
+ }
132
+ else {
133
+ result.left++;
134
+ }
135
+ result.checked++;
136
+ lastRowid = row.rowid;
137
+ }
138
+ }
139
+ finally {
140
+ // Rows checked so far are not checked again in this space, even when an
141
+ // embedder failure ends the pass early.
142
+ if (lastRowid > 0)
143
+ await write(() => writeCursor(db, spaceId, lastRowid));
144
+ }
145
+ return result;
146
+ }
147
+ //# sourceMappingURL=experience-space-verification.js.map
@@ -156,10 +156,6 @@ export declare class PatternLifecycleManager {
156
156
  private _compressionService;
157
157
  set compressionService(svc: TemporalCompressionService | null);
158
158
  constructor(db: DatabaseType, config?: Partial<PatternLifecycleConfig>);
159
- /**
160
- * Ensure required schema extensions exist
161
- */
162
- private ensureSchema;
163
159
  /**
164
160
  * Get recent experiences from captured_experiences table.
165
161
  */
@@ -202,6 +198,9 @@ export declare class PatternLifecycleManager {
202
198
  * Promote pattern to long-term tier
203
199
  */
204
200
  promotePattern(patternId: string): boolean;
201
+ /** Whether `patternId` passes the advisory check and the frozen promote rule. */
202
+ private promotionVerified;
203
+ private writePromotion;
205
204
  /**
206
205
  * Promote all eligible patterns
207
206
  */
@@ -209,6 +208,16 @@ export declare class PatternLifecycleManager {
209
208
  promoted: number;
210
209
  checked: number;
211
210
  };
211
+ /**
212
+ * promoteEligiblePatterns for the MCP server's background workers (#1283):
213
+ * each promotion is queued on the shared connection, so a locked memory.db
214
+ * does not freeze the event loop. Same selection, rule and result.
215
+ */
216
+ promoteEligiblePatternsWhenUnlocked(): Promise<{
217
+ promoted: number;
218
+ checked: number;
219
+ }>;
220
+ private selectShortTermPatternIds;
212
221
  /**
213
222
  * Run a promotion sweep — convenience alias for pre-compaction hook.
214
223
  * Iterates short-term patterns, checks promotion criteria, promotes eligible ones.
@@ -225,6 +234,8 @@ export declare class PatternLifecycleManager {
225
234
  * Deprecate a pattern (soft delete)
226
235
  */
227
236
  deprecatePattern(patternId: string, reason?: string): boolean;
237
+ /** Soft-delete a pattern and record why, in one unit so a queued retry repeats both. */
238
+ private writeDeprecation;
228
239
  /**
229
240
  * Deprecate all patterns that meet deprecation criteria
230
241
  */
@@ -232,6 +243,15 @@ export declare class PatternLifecycleManager {
232
243
  deprecated: number;
233
244
  checked: number;
234
245
  };
246
+ /**
247
+ * deprecateStalePatterns for the MCP server's background workers (#1283):
248
+ * each deprecation is queued on the shared connection. Same criteria and result.
249
+ */
250
+ deprecateStalePatternsWhenUnlocked(): Promise<{
251
+ deprecated: number;
252
+ checked: number;
253
+ }>;
254
+ private selectActivePatternIds;
235
255
  /**
236
256
  * Apply confidence decay to patterns that haven't been used recently
237
257
  */
@@ -239,6 +259,15 @@ export declare class PatternLifecycleManager {
239
259
  updated: number;
240
260
  decayed: number;
241
261
  };
262
+ /**
263
+ * applyConfidenceDecay for the MCP server's background workers (#1283): the
264
+ * decay UPDATE is queued on the shared connection. Same cutoff and result.
265
+ */
266
+ applyConfidenceDecayWhenUnlocked(daysSinceLastRun?: number): Promise<{
267
+ updated: number;
268
+ decayed: number;
269
+ }>;
270
+ private writeConfidenceDecay;
242
271
  /**
243
272
  * Record pattern usage success/failure
244
273
  */
@@ -303,6 +332,13 @@ export declare class PatternLifecycleManager {
303
332
  */
304
333
  private rowToPattern;
305
334
  }
335
+ /**
336
+ * Create a pattern lifecycle manager for the MCP server's background workers
337
+ * (#1283). A database that predates the lifecycle columns gets its ALTER
338
+ * TABLEs through the shared connection's write queue first, so a locked
339
+ * memory.db does not freeze the event loop on the worker's first tick.
340
+ */
341
+ export declare function createPatternLifecycleManagerWhenUnlocked(db: DatabaseType, config?: Partial<PatternLifecycleConfig>): Promise<PatternLifecycleManager>;
306
342
  /**
307
343
  * Create a pattern lifecycle manager
308
344
  */
@@ -15,6 +15,7 @@ import { tierAllowsPromotion, DEFAULT_PROVENANCE_TIER } from './provenance-tier.
15
15
  import { reExecutePathGate, pathGateFingerprint, pathSealedHash, verifyPathPromotion, } from '../validation/gate-reexecute.js';
16
16
  import { LoggerFactory } from '../logging/index.js';
17
17
  import { isTemporalCompressionEnabled } from '../integrations/ruvector/feature-flags.js';
18
+ import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
18
19
  const logger = LoggerFactory.create('pattern-lifecycle');
19
20
  /**
20
21
  * Default lifecycle configuration
@@ -100,69 +101,7 @@ export class PatternLifecycleManager {
100
101
  this.db = db;
101
102
  this.config = { ...DEFAULT_LIFECYCLE_CONFIG, ...config };
102
103
  this.asymmetricEngine = new AsymmetricLearningEngine(this.config.asymmetricLearning);
103
- this.ensureSchema();
104
- }
105
- /**
106
- * Ensure required schema extensions exist
107
- */
108
- ensureSchema() {
109
- // Add deprecated_at column if not exists
110
- try {
111
- this.db.prepare(`
112
- SELECT deprecated_at FROM qe_patterns LIMIT 1
113
- `).get();
114
- }
115
- catch (e) {
116
- // Column doesn't exist, add it
117
- logger.debug('Adding missing deprecated_at column', { error: e instanceof Error ? e.message : String(e) });
118
- this.db.exec(`
119
- ALTER TABLE qe_patterns ADD COLUMN deprecated_at TEXT DEFAULT NULL
120
- `);
121
- console.log('[PatternLifecycle] Added deprecated_at column to qe_patterns');
122
- }
123
- // Add consecutive_failures column if not exists
124
- try {
125
- this.db.prepare(`
126
- SELECT consecutive_failures FROM qe_patterns LIMIT 1
127
- `).get();
128
- }
129
- catch (e) {
130
- logger.debug('Adding missing consecutive_failures column', { error: e instanceof Error ? e.message : String(e) });
131
- this.db.exec(`
132
- ALTER TABLE qe_patterns ADD COLUMN consecutive_failures INTEGER DEFAULT 0
133
- `);
134
- console.log('[PatternLifecycle] Added consecutive_failures column to qe_patterns');
135
- }
136
- // Add promotion_date column if not exists
137
- try {
138
- this.db.prepare(`
139
- SELECT promotion_date FROM qe_patterns LIMIT 1
140
- `).get();
141
- }
142
- catch (e) {
143
- logger.debug('Adding missing promotion_date column', { error: e instanceof Error ? e.message : String(e) });
144
- this.db.exec(`
145
- ALTER TABLE qe_patterns ADD COLUMN promotion_date TEXT DEFAULT NULL
146
- `);
147
- console.log('[PatternLifecycle] Added promotion_date column to qe_patterns');
148
- }
149
- // ADR-121: provenance_tier — additive, conservative-default migration.
150
- // The DEFAULT backfills every existing row as 'proxy:structural', which can
151
- // never over-credit legacy history. Rows re-derived from execution evidence
152
- // are re-tiered upward through the normal write path (never up-tiered here).
153
- // Distinct from the lifecycle `tier` (short-term/long-term) column.
154
- try {
155
- this.db.prepare(`
156
- SELECT provenance_tier FROM qe_patterns LIMIT 1
157
- `).get();
158
- }
159
- catch (e) {
160
- logger.debug('Adding missing provenance_tier column', { error: e instanceof Error ? e.message : String(e) });
161
- this.db.exec(`
162
- ALTER TABLE qe_patterns ADD COLUMN provenance_tier TEXT DEFAULT '${DEFAULT_PROVENANCE_TIER}'
163
- `);
164
- console.log(`[PatternLifecycle] Added provenance_tier column to qe_patterns (backfilled '${DEFAULT_PROVENANCE_TIER}')`);
165
- }
104
+ ensurePatternLifecycleSchema(this.db);
166
105
  }
167
106
  // ============================================================================
168
107
  // Experience Extraction
@@ -431,6 +370,14 @@ Pattern extracted from ${exp.count} successful experiences.`;
431
370
  * Promote pattern to long-term tier
432
371
  */
433
372
  promotePattern(patternId) {
373
+ if (!this.promotionVerified(patternId))
374
+ return false;
375
+ this.writePromotion(patternId);
376
+ console.log(`[PatternLifecycle] Promoted pattern ${patternId} to long-term`);
377
+ return true;
378
+ }
379
+ /** Whether `patternId` passes the advisory check and the frozen promote rule. */
380
+ promotionVerified(patternId) {
434
381
  const check = this.checkPromotion(patternId);
435
382
  if (!check.shouldPromote) {
436
383
  return false;
@@ -465,6 +412,9 @@ Pattern extracted from ${exp.count} successful experiences.`;
465
412
  console.warn(`[PatternLifecycle] Refusing to promote ${patternId}: ${rerun.reason} (${verdict.reason})`);
466
413
  return false;
467
414
  }
415
+ return true;
416
+ }
417
+ writePromotion(patternId) {
468
418
  this.db.prepare(`
469
419
  UPDATE qe_patterns
470
420
  SET tier = 'long-term',
@@ -473,17 +423,12 @@ Pattern extracted from ${exp.count} successful experiences.`;
473
423
  updated_at = datetime('now')
474
424
  WHERE id = ?
475
425
  `).run(patternId);
476
- console.log(`[PatternLifecycle] Promoted pattern ${patternId} to long-term`);
477
- return true;
478
426
  }
479
427
  /**
480
428
  * Promote all eligible patterns
481
429
  */
482
430
  promoteEligiblePatterns() {
483
- const shortTermPatterns = this.db.prepare(`
484
- SELECT id FROM qe_patterns
485
- WHERE tier = 'short-term' AND deprecated_at IS NULL
486
- `).all();
431
+ const shortTermPatterns = this.selectShortTermPatternIds();
487
432
  let promoted = 0;
488
433
  for (const { id } of shortTermPatterns) {
489
434
  if (this.promotePattern(id)) {
@@ -492,6 +437,29 @@ Pattern extracted from ${exp.count} successful experiences.`;
492
437
  }
493
438
  return { promoted, checked: shortTermPatterns.length };
494
439
  }
440
+ /**
441
+ * promoteEligiblePatterns for the MCP server's background workers (#1283):
442
+ * each promotion is queued on the shared connection, so a locked memory.db
443
+ * does not freeze the event loop. Same selection, rule and result.
444
+ */
445
+ async promoteEligiblePatternsWhenUnlocked() {
446
+ const shortTermPatterns = this.selectShortTermPatternIds();
447
+ let promoted = 0;
448
+ for (const { id } of shortTermPatterns) {
449
+ if (!this.promotionVerified(id))
450
+ continue;
451
+ await writeWhenUnlockedOn(this.db, () => this.writePromotion(id));
452
+ console.log(`[PatternLifecycle] Promoted pattern ${id} to long-term`);
453
+ promoted++;
454
+ }
455
+ return { promoted, checked: shortTermPatterns.length };
456
+ }
457
+ selectShortTermPatternIds() {
458
+ return this.db.prepare(`
459
+ SELECT id FROM qe_patterns
460
+ WHERE tier = 'short-term' AND deprecated_at IS NULL
461
+ `).all();
462
+ }
495
463
  /**
496
464
  * Run a promotion sweep — convenience alias for pre-compaction hook.
497
465
  * Iterates short-term patterns, checks promotion criteria, promotes eligible ones.
@@ -570,6 +538,12 @@ Pattern extracted from ${exp.count} successful experiences.`;
570
538
  return false;
571
539
  }
572
540
  const actualReason = reason || check.reason || 'manual';
541
+ this.writeDeprecation(patternId, actualReason);
542
+ console.log(`[PatternLifecycle] Deprecated pattern ${patternId}: ${actualReason}`);
543
+ return true;
544
+ }
545
+ /** Soft-delete a pattern and record why, in one unit so a queued retry repeats both. */
546
+ writeDeprecation(patternId, actualReason) {
573
547
  // Move to deprecated state (soft delete)
574
548
  this.db.prepare(`
575
549
  UPDATE qe_patterns
@@ -593,17 +567,12 @@ Pattern extracted from ${exp.count} successful experiences.`;
593
567
  WHERE id = ?
594
568
  `).run(JSON.stringify({ deprecation_metadata: metadata }), patternId);
595
569
  }
596
- console.log(`[PatternLifecycle] Deprecated pattern ${patternId}: ${actualReason}`);
597
- return true;
598
570
  }
599
571
  /**
600
572
  * Deprecate all patterns that meet deprecation criteria
601
573
  */
602
574
  deprecateStalePatterns() {
603
- const activePatterns = this.db.prepare(`
604
- SELECT id FROM qe_patterns
605
- WHERE deprecated_at IS NULL
606
- `).all();
575
+ const activePatterns = this.selectActivePatternIds();
607
576
  let deprecated = 0;
608
577
  for (const { id } of activePatterns) {
609
578
  const check = this.checkDeprecation(id);
@@ -614,6 +583,30 @@ Pattern extracted from ${exp.count} successful experiences.`;
614
583
  }
615
584
  return { deprecated, checked: activePatterns.length };
616
585
  }
586
+ /**
587
+ * deprecateStalePatterns for the MCP server's background workers (#1283):
588
+ * each deprecation is queued on the shared connection. Same criteria and result.
589
+ */
590
+ async deprecateStalePatternsWhenUnlocked() {
591
+ const activePatterns = this.selectActivePatternIds();
592
+ let deprecated = 0;
593
+ for (const { id } of activePatterns) {
594
+ const check = this.checkDeprecation(id);
595
+ if (check.shouldDeprecate) {
596
+ const actualReason = check.reason || 'manual';
597
+ await writeWhenUnlockedOn(this.db, () => this.writeDeprecation(id, actualReason));
598
+ console.log(`[PatternLifecycle] Deprecated pattern ${id}: ${actualReason}`);
599
+ deprecated++;
600
+ }
601
+ }
602
+ return { deprecated, checked: activePatterns.length };
603
+ }
604
+ selectActivePatternIds() {
605
+ return this.db.prepare(`
606
+ SELECT id FROM qe_patterns
607
+ WHERE deprecated_at IS NULL
608
+ `).all();
609
+ }
617
610
  // ============================================================================
618
611
  // Confidence Decay
619
612
  // ============================================================================
@@ -621,6 +614,17 @@ Pattern extracted from ${exp.count} successful experiences.`;
621
614
  * Apply confidence decay to patterns that haven't been used recently
622
615
  */
623
616
  applyConfidenceDecay(daysSinceLastRun = 1) {
617
+ return this.writeConfidenceDecay(daysSinceLastRun, Date.now());
618
+ }
619
+ /**
620
+ * applyConfidenceDecay for the MCP server's background workers (#1283): the
621
+ * decay UPDATE is queued on the shared connection. Same cutoff and result.
622
+ */
623
+ async applyConfidenceDecayWhenUnlocked(daysSinceLastRun = 1) {
624
+ const now = Date.now();
625
+ return writeWhenUnlockedOn(this.db, () => this.writeConfidenceDecay(daysSinceLastRun, now));
626
+ }
627
+ writeConfidenceDecay(daysSinceLastRun, now) {
624
628
  // EWC++ (#510 item 6): per-row importance-weighted decay. The base decay
625
629
  // amount is shielded by `EWC_DECAY_PROTECTION * importance`, where
626
630
  // importance = success_rate (clamped) once usage_count >= the trust
@@ -629,7 +633,7 @@ Pattern extracted from ${exp.count} successful experiences.`;
629
633
  // so it isn't forgotten as fast as new low-value patterns.
630
634
  const baseDecayAmount = this.config.confidenceDecayRate * daysSinceLastRun;
631
635
  // Get patterns that haven't been used in the decay period
632
- const cutoffTime = Date.now() - (daysSinceLastRun * 24 * 60 * 60 * 1000);
636
+ const cutoffTime = now - (daysSinceLastRun * 24 * 60 * 60 * 1000);
633
637
  const result = this.db.prepare(`
634
638
  UPDATE qe_patterns
635
639
  SET confidence = MAX(?, confidence * (1 - ? * (1 - ? *
@@ -931,6 +935,79 @@ Pattern extracted from ${exp.count} successful experiences.`;
931
935
  // ============================================================================
932
936
  // Factory
933
937
  // ============================================================================
938
+ /**
939
+ * Add the lifecycle columns to qe_patterns if they are missing. Only writes
940
+ * (ALTER TABLE) on a database that predates them.
941
+ */
942
+ function ensurePatternLifecycleSchema(db) {
943
+ // Add deprecated_at column if not exists
944
+ try {
945
+ db.prepare(`
946
+ SELECT deprecated_at FROM qe_patterns LIMIT 1
947
+ `).get();
948
+ }
949
+ catch (e) {
950
+ // Column doesn't exist, add it
951
+ logger.debug('Adding missing deprecated_at column', { error: e instanceof Error ? e.message : String(e) });
952
+ db.exec(`
953
+ ALTER TABLE qe_patterns ADD COLUMN deprecated_at TEXT DEFAULT NULL
954
+ `);
955
+ console.log('[PatternLifecycle] Added deprecated_at column to qe_patterns');
956
+ }
957
+ // Add consecutive_failures column if not exists
958
+ try {
959
+ db.prepare(`
960
+ SELECT consecutive_failures FROM qe_patterns LIMIT 1
961
+ `).get();
962
+ }
963
+ catch (e) {
964
+ logger.debug('Adding missing consecutive_failures column', { error: e instanceof Error ? e.message : String(e) });
965
+ db.exec(`
966
+ ALTER TABLE qe_patterns ADD COLUMN consecutive_failures INTEGER DEFAULT 0
967
+ `);
968
+ console.log('[PatternLifecycle] Added consecutive_failures column to qe_patterns');
969
+ }
970
+ // Add promotion_date column if not exists
971
+ try {
972
+ db.prepare(`
973
+ SELECT promotion_date FROM qe_patterns LIMIT 1
974
+ `).get();
975
+ }
976
+ catch (e) {
977
+ logger.debug('Adding missing promotion_date column', { error: e instanceof Error ? e.message : String(e) });
978
+ db.exec(`
979
+ ALTER TABLE qe_patterns ADD COLUMN promotion_date TEXT DEFAULT NULL
980
+ `);
981
+ console.log('[PatternLifecycle] Added promotion_date column to qe_patterns');
982
+ }
983
+ // ADR-121: provenance_tier — additive, conservative-default migration.
984
+ // The DEFAULT backfills every existing row as 'proxy:structural', which can
985
+ // never over-credit legacy history. Rows re-derived from execution evidence
986
+ // are re-tiered upward through the normal write path (never up-tiered here).
987
+ // Distinct from the lifecycle `tier` (short-term/long-term) column.
988
+ try {
989
+ db.prepare(`
990
+ SELECT provenance_tier FROM qe_patterns LIMIT 1
991
+ `).get();
992
+ }
993
+ catch (e) {
994
+ logger.debug('Adding missing provenance_tier column', { error: e instanceof Error ? e.message : String(e) });
995
+ db.exec(`
996
+ ALTER TABLE qe_patterns ADD COLUMN provenance_tier TEXT DEFAULT '${DEFAULT_PROVENANCE_TIER}'
997
+ `);
998
+ console.log(`[PatternLifecycle] Added provenance_tier column to qe_patterns (backfilled '${DEFAULT_PROVENANCE_TIER}')`);
999
+ }
1000
+ }
1001
+ /**
1002
+ * Create a pattern lifecycle manager for the MCP server's background workers
1003
+ * (#1283). A database that predates the lifecycle columns gets its ALTER
1004
+ * TABLEs through the shared connection's write queue first, so a locked
1005
+ * memory.db does not freeze the event loop on the worker's first tick.
1006
+ */
1007
+ export async function createPatternLifecycleManagerWhenUnlocked(db, config) {
1008
+ await writeWhenUnlockedOn(db, () => ensurePatternLifecycleSchema(db));
1009
+ return new PatternLifecycleManager(db, config);
1010
+ }
934
1011
  /**
935
1012
  * Create a pattern lifecycle manager
936
1013
  */
@@ -20,6 +20,11 @@ export declare class PatternNullStore {
20
20
  constructor(db: DatabaseType);
21
21
  /** Record a failure; consolidates on repeat (pattern, context) pairs. */
22
22
  recordNull(record: PatternNullRecord): void;
23
+ /**
24
+ * recordNull() through the shared connection's write queue (#1283), so a
25
+ * locked memory.db does not freeze the MCP server's event loop.
26
+ */
27
+ recordNullWhenUnlocked(record: PatternNullRecord): Promise<void>;
23
28
  /** Batch summaries for retrieval-time surfacing. Missing patterns simply have no entry. */
24
29
  getNullSummaries(patternIds: string[]): Map<string, NullSummary>;
25
30
  /**
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { v4 as uuidv4 } from 'uuid';
16
16
  import { applyMigration } from '../migrations/20260611_add_pattern_nulls_table.js';
17
+ import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
17
18
  /** Weight of a context-matched null vs a null from elsewhere (ADR-110: local nulls outweigh remote successes). */
18
19
  const CONTEXT_MATCHED_WEIGHT = 0.15;
19
20
  const UNMATCHED_WEIGHT = 0.03;
@@ -38,6 +39,13 @@ export class PatternNullStore {
38
39
  updated_at = datetime('now')
39
40
  `).run(uuidv4(), record.patternId, record.contextFingerprint, record.failureMode, record.trajectoryRef ?? null, record.evidenceClass ?? 'EXECUTED');
40
41
  }
42
+ /**
43
+ * recordNull() through the shared connection's write queue (#1283), so a
44
+ * locked memory.db does not freeze the MCP server's event loop.
45
+ */
46
+ recordNullWhenUnlocked(record) {
47
+ return writeWhenUnlockedOn(this.db, () => this.recordNull(record));
48
+ }
41
49
  /** Batch summaries for retrieval-time surfacing. Missing patterns simply have no entry. */
42
50
  getNullSummaries(patternIds) {
43
51
  const out = new Map();
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { LoggerFactory } from '../logging/index.js';
9
9
  import { toErrorMessage } from '../shared/error-utils.js';
10
+ import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
10
11
  import { shouldPromotePattern, calculateQualityScore } from './qe-patterns.js';
11
12
  import { getWitnessChain } from '../audit/witness-chain.js';
12
13
  import { RELATED_DOMAINS } from './agent-routing.js';
@@ -76,7 +77,9 @@ export async function promotePattern(patternId, deps) {
76
77
  const result = await deps.patternStore.promote(patternId);
77
78
  if (result.success) {
78
79
  try {
79
- deps.getSqliteStore().promotePattern(patternId);
80
+ const store = deps.getSqliteStore();
81
+ // #1283: queued on the shared connection, so a locked memory.db does not freeze the MCP server.
82
+ await writeWhenUnlockedOn(store.getDatabase(), () => store.promotePattern(patternId));
80
83
  }
81
84
  catch (e) {
82
85
  logger.warn('SQLite pattern promotion persist failed', {
@@ -98,7 +101,7 @@ export async function promotePattern(patternId, deps) {
98
101
  if (peers.success) {
99
102
  for (const { pattern: peer } of peers.value) {
100
103
  if (peer.id !== patternId) {
101
- citationGraph.recordCoOccurrence(patternId, peer.id);
104
+ await writeWhenUnlockedOn(db, () => citationGraph.recordCoOccurrence(patternId, peer.id));
102
105
  }
103
106
  }
104
107
  }
@@ -126,7 +129,7 @@ export async function promotePattern(patternId, deps) {
126
129
  }
127
130
  }
128
131
  getWitnessChain()
129
- .then((wc) => wc.append('PATTERN_PROMOTE', { patternId }, 'reasoning-bank'))
132
+ .then((wc) => wc.appendWhenUnlocked('PATTERN_PROMOTE', { patternId }, 'reasoning-bank'))
130
133
  .catch((e) => {
131
134
  logger.warn('Witness chain PATTERN_PROMOTE failed', {
132
135
  error: toErrorMessage(e),
@@ -326,6 +326,12 @@ export declare class PatternStore implements IPatternStore {
326
326
  * Record pattern usage and update stats
327
327
  */
328
328
  recordUsage(id: string, success: boolean, metrics?: Record<string, unknown>, feedback?: string): Promise<Result<void>>;
329
+ /**
330
+ * Run a SQLite write through the store's writeWhenUnlocked queue (#1274):
331
+ * the hourly cleanup timer and fire-and-forget usage recording write here,
332
+ * and must not freeze the MCP server's event loop on a locked memory.db.
333
+ */
334
+ private persistToSqlite;
329
335
  /**
330
336
  * Promote pattern from short-term to long-term storage
331
337
  */