agentic-qe 3.15.15 → 3.15.17

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 (526) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +168 -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-OMILP6KH.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-6BUOFQZA.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-HPDK3JI3.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-5QKUTWK5.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-OXH5CCOS.js +2 -0
  12. package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-7OKPMNHD.js} +2 -2
  13. package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-HZ35LESR.js} +4 -4
  14. package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-XI575SVK.js} +3 -3
  15. package/dist/cli/chunks/base-MAK2BLTG.js +2 -0
  16. package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-YO5X7ZJS.js} +2 -2
  17. package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-GCQZFZGQ.js} +3 -3
  18. package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-N6G44UU2.js} +2 -2
  19. package/dist/cli/chunks/{browser-6LACARWE.js → browser-EVKPTLOI.js} +2 -2
  20. package/dist/cli/chunks/browser-workflow-IR3VF2TL.js +2 -0
  21. package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-2EQK7B5L.js} +2 -2
  22. package/dist/cli/chunks/chunk-2PCEMDIX.js +757 -0
  23. package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-2UUZCQSD.js} +7 -7
  24. package/dist/cli/chunks/chunk-2YWYW7NU.js +21 -0
  25. package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-45223KK6.js} +6 -6
  26. package/dist/cli/chunks/chunk-4EJLHNER.js +12 -0
  27. package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-4L6WX5KC.js} +1 -1
  28. package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-4NKZU2JZ.js} +2 -2
  29. package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-4UKTIQDT.js} +2 -2
  30. package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-4YM45Z5B.js} +1 -1
  31. package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-5FSPELOG.js} +2 -2
  32. package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-5WATBVU6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-5WYZVSL2.js} +1 -1
  34. package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-6LSZCEW2.js} +1 -1
  35. package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-6V6BD6PH.js} +1 -1
  36. package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-74MDUIAZ.js} +1 -1
  37. package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-776K4ZLE.js} +2 -2
  38. package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-7BSOO3CY.js} +2 -2
  39. package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-7SNSI4VY.js} +1 -1
  40. package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-A4BVDYIL.js} +1 -1
  41. package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-AGCS5GSO.js} +2 -2
  42. package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-AVHYJ3XP.js} +2 -2
  43. package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-BE7ZHM34.js} +2 -2
  44. package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-BHQ2DLJU.js} +1 -1
  45. package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-BKHEQIRZ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-G242G224.js → chunk-BSIWI4ES.js} +2 -2
  47. package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-C7QLLMYI.js} +1 -1
  48. package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-CMN7PU2H.js} +2 -2
  49. package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-COTQ44YO.js} +2 -2
  50. package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-CQER6IJ5.js} +1 -1
  51. package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-CVPXHDQU.js} +1 -1
  52. package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-CVYPMGUM.js} +2 -2
  53. package/dist/cli/chunks/chunk-CXCMATZ6.js +3 -0
  54. package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-D75GLKEL.js} +2 -2
  55. package/dist/cli/chunks/chunk-DCDSN67A.js +2 -0
  56. package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-DHKSPOUQ.js} +2 -2
  57. package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-DJDVD6RM.js} +2 -2
  58. package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-DNVRTJKB.js} +2 -2
  59. package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-DS5IFRY6.js} +2 -2
  60. package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-E7XIMOKW.js} +2 -2
  61. package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-ECKHDHR2.js} +2 -2
  62. package/dist/cli/chunks/chunk-EPVPXHL7.js +2 -0
  63. package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-ERYADKMZ.js} +4 -4
  64. package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-EUWG2JG4.js} +2 -2
  65. package/dist/cli/chunks/chunk-FAQ24UHB.js +29 -0
  66. package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-FBBPRVNF.js} +2 -2
  67. package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-FBSBXCZS.js} +2 -2
  68. package/dist/cli/chunks/chunk-G2X3OLMN.js +153 -0
  69. package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-GG7PMTHD.js} +1 -1
  70. package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-GN6OE3JT.js} +1 -1
  71. package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-GPPTRKEM.js} +2 -2
  72. package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-H2LHWZRE.js} +2 -2
  73. package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-HAQJFUAQ.js} +2 -2
  74. package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-HD6W6PHV.js} +2 -2
  75. package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-HFZD5KLR.js} +1 -1
  76. package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-HRUHHHVR.js} +2 -2
  77. package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-HVT7RMGV.js} +1 -1
  78. package/dist/cli/chunks/chunk-HWQPMUSN.js +2 -0
  79. package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-HZ5O7G2P.js} +1 -1
  80. package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-IHQGNDMX.js} +2 -2
  81. package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-IJSROBM6.js} +18 -18
  82. package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-IJZFJPHS.js} +2 -2
  83. package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-IKB3M7OF.js} +1 -1
  84. package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-INI3Q4CN.js} +1 -1
  85. package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-IOWEBPXJ.js} +2 -2
  86. package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-IQL6XRF5.js} +2 -2
  87. package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-IRHXGCQR.js} +2 -2
  88. package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-J3QFJI2Y.js} +6 -6
  89. package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-J6QRNQJF.js} +11 -11
  90. package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-J7Q5TXFZ.js} +2 -2
  91. package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-JHKKIJT2.js} +2 -2
  92. package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-JI33PMPZ.js} +1 -1
  93. package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-JRIJM4LE.js} +3 -3
  94. package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-JVWZAE2H.js} +2 -2
  95. package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-K7WAI662.js} +1 -1
  96. package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-KB34MTFZ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-KPIPVSIP.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-KR2TAAF6.js} +1 -1
  99. package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-KT2QCXO6.js} +2 -2
  100. package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-KTORRIX3.js} +2 -2
  101. package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-LCWEQRZI.js} +2 -2
  102. package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-LG5PPJT7.js} +1 -1
  103. package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-LIF6UWHV.js} +2 -2
  104. package/dist/cli/chunks/chunk-LN7NKE3N.js +27 -0
  105. package/dist/cli/chunks/chunk-LOLSZG5J.js +2 -0
  106. package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-LOMT4UC2.js} +2 -2
  107. package/dist/cli/chunks/chunk-LRKLATSH.js +2 -0
  108. package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-LRY6UIRI.js} +2 -2
  109. package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-LV7UIK4Q.js} +2 -2
  110. package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-M2YI5YUR.js} +2 -2
  111. package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-MCXW3DKE.js} +2 -2
  112. package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-MGZ6XZHU.js} +1 -1
  113. package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-MLMD3I75.js} +1 -1
  114. package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-MVVVGQJ6.js} +2 -2
  115. package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-ND72UDVH.js} +2 -2
  116. package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-NE3LRUNC.js} +4 -4
  117. package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-NKUHMA4T.js} +2 -2
  118. package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-NQFDJ6BT.js} +1 -1
  119. package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-NZJVDOUN.js} +31 -31
  120. package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-O7VJ3VKD.js} +2 -2
  121. package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-OJIUIEI4.js} +1 -1
  122. package/dist/cli/chunks/chunk-OO2M2QUV.js +12 -0
  123. package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-ORQ2YBRR.js} +2 -2
  124. package/dist/cli/chunks/chunk-OWIQR6N2.js +4 -0
  125. package/dist/cli/chunks/chunk-OWIZBZLN.js +14 -0
  126. package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-P3D7SEHW.js} +1 -1
  127. package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-P4OB6WDJ.js} +1 -1
  128. package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PCL5JRKN.js} +2 -2
  129. package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-PIWGKGWP.js} +2 -2
  130. package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-PK34KJH7.js} +2 -2
  131. package/dist/cli/chunks/chunk-POPSZDI2.js +65 -0
  132. package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-Q6F3DYZN.js} +2 -2
  133. package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-QJSSUBO3.js} +2 -2
  134. package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-QN7HP2UW.js} +235 -173
  135. package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-QSQNXBD2.js} +2 -2
  136. package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-QTQDX4TZ.js} +33 -33
  137. package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-R3KBOQ3O.js} +2 -2
  138. package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-REY52O7J.js} +1 -1
  139. package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-RKCN4B26.js} +2 -2
  140. package/dist/cli/chunks/chunk-S3DT5TPR.js +14 -0
  141. package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-S3TBOKAZ.js} +22 -22
  142. package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-SAEECT23.js} +2 -2
  143. package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-SAZ4PJBR.js} +2 -2
  144. package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-SFITYZLV.js} +2 -2
  145. package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-SRBCBVSI.js} +2 -2
  146. package/dist/cli/chunks/chunk-SUAZ5Z47.js +63 -0
  147. package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-TDZ6N43D.js} +2 -2
  148. package/dist/cli/chunks/chunk-TIVKDIF7.js +2 -0
  149. package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-TM75GAXG.js} +2 -2
  150. package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-TWBZONKT.js} +2 -2
  151. package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-U4S74IIZ.js} +1 -1
  152. package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-U5SMBJ6F.js} +2 -2
  153. package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-UHJVZEQA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-UOVCTK5L.js} +2 -2
  155. package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-VDEKVIP5.js} +2 -2
  156. package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-VITV7AEC.js} +2 -2
  157. package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-VKREKVFI.js} +2 -2
  158. package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-VLTDW7XJ.js} +2 -2
  159. package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-VQFV2IPV.js} +1 -1
  160. package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-VYPVU3JF.js} +2 -2
  161. package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-WAOEQA3W.js} +2 -2
  162. package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-WBDWHHKP.js} +2 -2
  163. package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-WX4PO65Q.js} +2 -2
  164. package/dist/cli/chunks/chunk-X2DWHGCC.js +6 -0
  165. package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-X5QD76IU.js} +2 -2
  166. package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-XBTGEYED.js} +2 -2
  167. package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-XEMCHGAJ.js} +2 -2
  168. package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-XEYFZLIT.js} +1 -1
  169. package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-XFTX3KLE.js} +1 -1
  170. package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-XPTCQKVE.js} +1 -1
  171. package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-YAJOBZE5.js} +2 -2
  172. package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-YCVLKU6H.js} +2 -2
  173. package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-YD2C6EPN.js} +2 -2
  174. package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-YKRLUTK7.js} +2 -2
  175. package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-YMUY3TES.js} +6 -6
  176. package/dist/cli/chunks/chunk-YR5QBUHZ.js +6 -0
  177. package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-Z7SKUC6P.js} +1 -1
  178. package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-ZAQMRFBB.js} +2 -2
  179. package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-ZC3KDNJW.js} +3 -3
  180. package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-ZGV7L4MW.js} +1 -1
  181. package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-ZN35XSKF.js} +2 -2
  182. package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-ZNXM6WVL.js} +2 -2
  183. package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-ZP5AWQRO.js} +2 -2
  184. package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-ZTP3DQ5M.js} +1 -1
  185. package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-ZVMSSCTH.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZWUF27P4.js +2 -0
  187. package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-3RTTTS2D.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-XRUR3I4K.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-E5IAMU2U.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-SHR2P44P.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-ZDDILFMF.js} +2 -2
  192. package/dist/cli/chunks/client-NO5FOWT4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-BGYVUM6G.js} +2 -2
  194. package/dist/cli/chunks/{code-WY3GJXHX.js → code-PJ4MC3MC.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-IW2P22YG.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-A7WZ6OGL.js} +2 -2
  197. package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-KS23WD5J.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-Q7GLSR2E.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-SK55BFW2.js} +2 -2
  200. package/dist/cli/chunks/copilot-installer-3N5J3WTM.js +3 -0
  201. package/dist/cli/chunks/core-handlers-JNAZPXE2.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-NENVSO4A.js} +2 -2
  203. package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-5L7UQWDH.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-HEBM767Z.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-XXBO2ZE6.js} +2 -2
  206. package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-CDCQU3LR.js} +3 -3
  207. package/dist/cli/chunks/daemon-JEBJGEUK.js +18 -0
  208. package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-HOMMF7FA.js} +2 -2
  209. package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-FXCOUG6X.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-GXQ7FMTY.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-TI3JBAPC.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-R7LTUM32.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-LBIAFHIQ.js} +2 -2
  214. package/dist/cli/chunks/dream-GQDCEJMS.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-33KLHDD5.js +3 -0
  216. package/dist/cli/chunks/embedding-space-HHLWTBF5.js +2 -0
  217. package/dist/cli/chunks/{eval-OQELIWJK.js → eval-KDOZMAXJ.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-X45PECQN.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-462V6UUB.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-G66OT3AS.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-NIRQ4YDM.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-33USPLB5.js +2 -0
  223. package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-PXWGB7CU.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-7MUW3M5M.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-5237PB35.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-LIXLC5IH.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-62D5UH27.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-GSGUMQQC.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-OSQPW7JP.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-GX6WG2GB.js} +2 -2
  231. package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-GUWHL7VC.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-FRWP4BOY.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-SRWLLCU3.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-AVOPRHHO.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-7KF3AQXV.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-P4N6EVZS.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-LRGWOJMD.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-XWWAXY25.js +2 -0
  239. package/dist/cli/chunks/kernel-ZEJPNDBW.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-7R2EPOQ6.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-QNM7DPOB.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-RRZQS7KY.js +2 -0
  243. package/dist/cli/chunks/{learning-FZTD72CF.js → learning-7OIZBPXZ.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-SIDXES23.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-3OSW67LC.js +2 -0
  246. package/dist/cli/chunks/{load-YKTPOYBE.js → load-EI2E2C3S.js} +2 -2
  247. package/dist/cli/chunks/load-test-7TRIH2WJ.js +2 -0
  248. package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-IOE5WOCS.js} +2 -2
  249. package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DLYGJAP7.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-G7ZW6Q2B.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-TPF3KCO5.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-WHH4YCHM.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-63FDZAMS.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-3LA776KK.js} +5 -5
  255. package/dist/cli/chunks/pattern-null-store-OU3ZC3NR.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-NW54QUGI.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-P3TYX6J6.js} +2 -2
  258. package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-FNA2WLI6.js} +2 -2
  259. package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-NJS7BC2S.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-NIAVL2OT.js} +2 -2
  261. package/dist/cli/chunks/project-root-GMOFJEKD.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-AD345XRO.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-JU5C4JHY.js} +2 -2
  264. package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-35VOSLYP.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-NLTP26RC.js +2 -0
  266. package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-ET74X7HN.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-FEDQISNB.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-2TB4FWS6.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-II6CXTCI.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-DTBPYCEB.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-LYQEMR4J.js} +2 -2
  272. package/dist/cli/chunks/router-PLM3MWME.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-I7VOX2HU.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-DJOJFPII.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-VXYGJDPW.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-GQZHFWO2.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-3TVKBCAM.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-XUHKLMT6.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-5GUTYOWS.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-GA2ZYOEG.js} +2 -2
  281. package/dist/cli/chunks/safe-db-RZPQGLGQ.js +2 -0
  282. package/dist/cli/chunks/schedule-G7JMQDUX.js +2 -0
  283. package/dist/cli/chunks/scheduler-4SEGPCKD.js +2 -0
  284. package/dist/cli/chunks/{security-A3IMVLFM.js → security-MM6YOECX.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-6AHPA3V5.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-EYAVY2GZ.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IVE4SQXR.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-A3PLB4CZ.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-OSSFAP4Z.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-PGY5XUNO.js} +2 -2
  291. package/dist/cli/chunks/{sync-NTUR53PI.js → sync-CWEHYGNN.js} +2 -2
  292. package/dist/cli/chunks/sync-PM6D7EQF.js +2 -0
  293. package/dist/cli/chunks/task-handler-LHMQ75W4.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-S2TX5FTR.js} +4 -4
  295. package/dist/cli/chunks/test-4EGZZ6NJ.js +34 -0
  296. package/dist/cli/chunks/test-runner-process-72YACW6M.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-YJQHH3XE.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-DJNETMVW.js +2 -0
  299. package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-WPNOJR6H.js} +2 -2
  300. package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-4MRPXCPU.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-UVWSDXFR.js +2 -0
  302. package/dist/cli/chunks/{types-4AOKZYOX.js → types-6P5FB4EB.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-2VMGSGQL.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-3KULVD3N.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-QCSLU2SV.js +2 -0
  306. package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-4ICTN63Y.js} +2 -2
  307. package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-HQF5GZ7L.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-45JYG7VW.js} +2 -2
  309. package/dist/cli/chunks/visual-security-ZYP2KPH7.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-UOTWZLNH.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-WDWSBXGN.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-5QRT7EMX.js +2 -0
  313. package/dist/cli/chunks/witness-chain-DOYMNPC7.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-CUF2AFQB.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-JB42X62J.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-LXXO6L2G.js} +2 -2
  317. package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-6ARK47NF.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-RYDDWIXN.js +2 -0
  319. package/dist/cli/chunks/wrappers-CYQBOMPL.js +2 -0
  320. package/dist/cli/commands/code.js +4 -0
  321. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  322. package/dist/cli/commands/test.js +26 -4
  323. package/dist/cli/handlers/task-handler.d.ts +5 -0
  324. package/dist/cli/handlers/task-handler.js +21 -1
  325. package/dist/cli/utils/task-result.d.ts +11 -0
  326. package/dist/cli/utils/task-result.js +39 -0
  327. package/dist/coordination/handlers/test-execution-handlers.js +137 -59
  328. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  329. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  330. package/dist/domains/code-intelligence/coordinator.js +46 -13
  331. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +37 -7
  333. package/dist/domains/code-intelligence/services/semantic-analyzer.js +135 -62
  334. package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
  335. package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
  336. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  337. package/dist/domains/quality-assessment/coordinator.js +2 -1
  338. package/dist/domains/test-execution/coordinator.d.ts +3 -1
  339. package/dist/domains/test-execution/coordinator.js +21 -7
  340. package/dist/domains/test-execution/interfaces.d.ts +17 -0
  341. package/dist/domains/test-execution/plugin.js +8 -2
  342. package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
  343. package/dist/domains/test-execution/services/flaky-detector.js +26 -8
  344. package/dist/domains/test-execution/services/retry-handler.d.ts +9 -1
  345. package/dist/domains/test-execution/services/retry-handler.js +56 -12
  346. package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
  347. package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
  348. package/dist/domains/test-execution/services/test-executor.d.ts +6 -1
  349. package/dist/domains/test-execution/services/test-executor.js +97 -14
  350. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  351. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  352. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  353. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  354. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  355. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  356. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  357. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  358. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  359. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  360. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  361. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  362. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  363. package/dist/feedback/coverage-learner.js +13 -9
  364. package/dist/feedback/test-outcome-tracker.js +13 -9
  365. package/dist/governance/witness-chain.d.ts +5 -0
  366. package/dist/governance/witness-chain.js +22 -6
  367. package/dist/init/copilot-installer.d.ts +6 -0
  368. package/dist/init/copilot-installer.js +37 -17
  369. package/dist/init/platform-config-generator.d.ts +10 -0
  370. package/dist/init/platform-config-generator.js +26 -1
  371. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  373. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  374. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  375. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  376. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  377. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  378. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  379. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  380. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  381. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  382. package/dist/kernel/unified-memory.d.ts +32 -0
  383. package/dist/kernel/unified-memory.js +76 -8
  384. package/dist/learning/aqe-learning-engine.js +1 -1
  385. package/dist/learning/embed-and-insert-pattern.js +4 -2
  386. package/dist/learning/embedder-endpoint-client.d.ts +76 -0
  387. package/dist/learning/embedder-endpoint-client.js +201 -13
  388. package/dist/learning/embedding-space-registry.d.ts +75 -0
  389. package/dist/learning/embedding-space-registry.js +142 -0
  390. package/dist/learning/embedding-space.d.ts +12 -0
  391. package/dist/learning/embedding-space.js +17 -0
  392. package/dist/learning/experience-capture-middleware.js +25 -13
  393. package/dist/learning/experience-capture.js +1 -1
  394. package/dist/learning/experience-consolidation.d.ts +18 -0
  395. package/dist/learning/experience-consolidation.js +55 -8
  396. package/dist/learning/experience-space-verification.d.ts +71 -0
  397. package/dist/learning/experience-space-verification.js +147 -0
  398. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  399. package/dist/learning/pattern-lifecycle.js +153 -76
  400. package/dist/learning/pattern-null-store.d.ts +5 -0
  401. package/dist/learning/pattern-null-store.js +8 -0
  402. package/dist/learning/pattern-promotion.js +6 -3
  403. package/dist/learning/pattern-store.d.ts +6 -0
  404. package/dist/learning/pattern-store.js +19 -6
  405. package/dist/learning/qe-reasoning-bank.js +2 -2
  406. package/dist/learning/real-embeddings.d.ts +3 -0
  407. package/dist/learning/real-embeddings.js +52 -12
  408. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  409. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  410. package/dist/learning/rvf-pattern-store.js +6 -2
  411. package/dist/learning/sqlite-persistence.d.ts +6 -0
  412. package/dist/learning/sqlite-persistence.js +10 -0
  413. package/dist/mcp/bundle.js +699 -619
  414. package/dist/mcp/entry.js +4 -0
  415. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  416. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  417. package/dist/mcp/protocol-server.js +1 -0
  418. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  419. package/dist/mcp/types.d.ts +6 -0
  420. package/dist/optimization/session-cache.d.ts +17 -1
  421. package/dist/optimization/session-cache.js +40 -36
  422. package/dist/planning/goap-planner.d.ts +6 -0
  423. package/dist/planning/goap-planner.js +35 -19
  424. package/dist/planning/plan-executor.js +24 -15
  425. package/dist/routing/co-execution-repository.js +12 -9
  426. package/dist/routing/routing-feedback.d.ts +8 -0
  427. package/dist/routing/routing-feedback.js +46 -24
  428. package/dist/routing/routing-outcomes-migration.js +7 -2
  429. package/dist/shared/embeddings/index.d.ts +2 -2
  430. package/dist/shared/embeddings/index.js +1 -1
  431. package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
  432. package/dist/shared/embeddings/nomic-embedder.js +19 -11
  433. package/dist/shared/embeddings/ollama-client.d.ts +28 -2
  434. package/dist/shared/embeddings/ollama-client.js +84 -22
  435. package/dist/shared/embeddings/types.d.ts +15 -0
  436. package/dist/shared/embeddings/types.js +4 -0
  437. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  438. package/dist/shared/llm/spend-ledger.js +64 -39
  439. package/dist/shared/pytest-junit-report.d.ts +93 -0
  440. package/dist/shared/pytest-junit-report.js +241 -0
  441. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  442. package/dist/shared/sqlite-lock-wait.js +37 -0
  443. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  444. package/dist/shared/sqlite-write-queue.js +38 -0
  445. package/dist/shared/test-runner-project.d.ts +119 -0
  446. package/dist/shared/test-runner-project.js +301 -0
  447. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  448. package/dist/skills/security-visual-testing/index.js +49 -35
  449. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  450. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  451. package/dist/workers/workers/learning-consolidation.js +8 -7
  452. package/package.json +1 -1
  453. package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
  454. package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
  455. package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
  456. package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
  457. package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
  458. package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
  459. package/dist/cli/chunks/chunk-4D4CWP72.js +0 -2
  460. package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
  461. package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
  462. package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
  463. package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
  464. package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
  465. package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
  466. package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
  467. package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
  468. package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
  469. package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
  470. package/dist/cli/chunks/chunk-TX2CHQD7.js +0 -2
  471. package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
  472. package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
  473. package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
  474. package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
  475. package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
  476. package/dist/cli/chunks/copilot-installer-BHPDSELY.js +0 -3
  477. package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
  478. package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
  479. package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
  480. package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
  481. package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
  482. package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
  483. package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
  484. package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
  485. package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
  486. package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
  487. package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
  488. package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
  489. package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
  490. package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
  491. package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
  492. package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
  493. package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
  494. package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
  495. package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
  496. package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
  497. package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
  498. package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
  499. package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
  500. package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
  501. package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
  502. package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
  503. package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
  504. package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
  505. package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
  506. package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
  507. package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
  508. package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
  509. package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
  510. package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
  511. package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
  512. package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
  513. package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
  514. package/dist/cli/chunks/test-O6FK3FVF.js +0 -34
  515. package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
  516. package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
  517. package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
  518. package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
  519. package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
  520. package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
  521. package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
  522. package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
  523. package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
  524. package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
  525. package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
  526. package/dist/cli/chunks/wrappers-5QFMCKXL.js +0 -2
@@ -223,31 +223,38 @@ export class PatternEvolution {
223
223
  */
224
224
  async trackVersion(patternId, embedding, changes = [], trigger = 'manual') {
225
225
  this.ensureInitialized();
226
- // Get current version count
227
- const countStmt = this.prepared.get('getVersionCount');
228
- const countResult = countStmt?.get(patternId);
229
- const newVersion = (countResult?.count ?? 0) + 1;
230
- // Get pattern quality/success rate
231
- const patternStmt = this.prepared.get('getPattern');
232
- const pattern = patternStmt?.get(patternId);
233
226
  const id = uuidv4();
234
- const version = {
235
- id,
236
- patternId,
237
- version: newVersion,
238
- embedding,
239
- changes,
240
- qualityScore: pattern?.quality_score ?? 0.5,
241
- successRate: pattern?.success_rate ?? 0.5,
242
- timestamp: new Date(),
243
- trigger,
244
- };
245
- // Store in database
246
- const insertStmt = this.prepared.get('insertVersion');
247
- if (insertStmt) {
248
- const embeddingBuffer = this.floatArrayToBuffer(embedding);
249
- insertStmt.run(id, patternId, newVersion, embeddingBuffer, embedding.length, JSON.stringify(changes), version.qualityScore, version.successRate, trigger);
250
- }
227
+ const embeddingBuffer = this.floatArrayToBuffer(embedding);
228
+ // #1283: read the version count and insert the new version as one queued
229
+ // unit, so a locked memory.db does not freeze the MCP server and two
230
+ // concurrent calls cannot both claim the same version number.
231
+ const version = await this.write(() => {
232
+ // Get current version count
233
+ const countStmt = this.prepared.get('getVersionCount');
234
+ const countResult = countStmt?.get(patternId);
235
+ const newVersion = (countResult?.count ?? 0) + 1;
236
+ // Get pattern quality/success rate
237
+ const patternStmt = this.prepared.get('getPattern');
238
+ const pattern = patternStmt?.get(patternId);
239
+ const tracked = {
240
+ id,
241
+ patternId,
242
+ version: newVersion,
243
+ embedding,
244
+ changes,
245
+ qualityScore: pattern?.quality_score ?? 0.5,
246
+ successRate: pattern?.success_rate ?? 0.5,
247
+ timestamp: new Date(),
248
+ trigger,
249
+ };
250
+ // Store in database
251
+ const insertStmt = this.prepared.get('insertVersion');
252
+ if (insertStmt) {
253
+ insertStmt.run(id, patternId, newVersion, embeddingBuffer, embedding.length, JSON.stringify(changes), tracked.qualityScore, tracked.successRate, trigger);
254
+ }
255
+ return tracked;
256
+ });
257
+ const newVersion = version.version;
251
258
  // Update embedding cache
252
259
  this.embeddingCache.set(patternId, embedding);
253
260
  // Record evolution event
@@ -429,7 +436,8 @@ export class PatternEvolution {
429
436
  */
430
437
  async mergePatterns(patternId1, patternId2, mergedName) {
431
438
  this.ensureInitialized();
432
- if (!this.db)
439
+ const db = this.db;
440
+ if (!db)
433
441
  return null;
434
442
  const patternStmt = this.prepared.get('getPattern');
435
443
  const p1 = patternStmt?.get(patternId1);
@@ -442,13 +450,13 @@ export class PatternEvolution {
442
450
  : [p2, p1];
443
451
  // Update retained pattern name if provided
444
452
  if (mergedName) {
445
- this.db.prepare(`UPDATE qe_patterns SET name = ? WHERE id = ?`).run(mergedName, retained.id);
453
+ await this.write(() => db.prepare(`UPDATE qe_patterns SET name = ? WHERE id = ?`).run(mergedName, retained.id));
446
454
  }
447
455
  // Combine usage counts and recalculate success rate
448
456
  const totalUsage = (retained.usage_count ?? 0) + (archived.usage_count ?? 0);
449
457
  const totalSuccess = (retained.successful_uses ?? 0) + (archived.successful_uses ?? 0);
450
458
  const newSuccessRate = totalUsage > 0 ? totalSuccess / totalUsage : 0;
451
- this.db.prepare(`
459
+ await this.write(() => db.prepare(`
452
460
  UPDATE qe_patterns SET
453
461
  usage_count = ?,
454
462
  successful_uses = ?,
@@ -460,14 +468,15 @@ export class PatternEvolution {
460
468
  END,
461
469
  updated_at = datetime('now')
462
470
  WHERE id = ?
463
- `).run(totalUsage, totalSuccess, newSuccessRate, archived.last_used_at, archived.last_used_at, archived.last_used_at, retained.id);
471
+ `).run(totalUsage, totalSuccess, newSuccessRate, archived.last_used_at, archived.last_used_at, archived.last_used_at, retained.id));
464
472
  // Record merge relationship
465
473
  const relStmt = this.prepared.get('insertRelationship');
466
474
  if (relStmt) {
467
- relStmt.run(uuidv4(), archived.id, retained.id, 'merged', 1.0);
475
+ const relId = uuidv4();
476
+ await this.write(() => relStmt.run(relId, archived.id, retained.id, 'merged', 1.0));
468
477
  }
469
478
  // Archive the lower quality pattern (mark as archived)
470
- this.db.prepare(`UPDATE qe_patterns SET tier = 'archived' WHERE id = ?`).run(archived.id);
479
+ await this.write(() => db.prepare(`UPDATE qe_patterns SET tier = 'archived' WHERE id = ?`).run(archived.id));
471
480
  // Record events
472
481
  await this.recordEvent(retained.id, 'merged', { absorbedFrom: archived.id });
473
482
  await this.recordEvent(archived.id, 'archived', { mergedInto: retained.id });
@@ -497,8 +506,9 @@ export class PatternEvolution {
497
506
  for (const candidate of pruneCandidates) {
498
507
  if (candidate.reason === 'low-quality' || candidate.reason === 'obsolete') {
499
508
  // Actually delete the pattern
500
- if (this.db) {
501
- this.db.prepare(`DELETE FROM qe_patterns WHERE id = ?`).run(candidate.patternId);
509
+ const db = this.db;
510
+ if (db) {
511
+ await this.write(() => db.prepare(`DELETE FROM qe_patterns WHERE id = ?`).run(candidate.patternId));
502
512
  this.embeddingCache.delete(candidate.patternId);
503
513
  await this.recordEvent(candidate.patternId, 'pruned', { reason: candidate.reason });
504
514
  pruned++;
@@ -560,10 +570,18 @@ export class PatternEvolution {
560
570
  details,
561
571
  timestamp: new Date(),
562
572
  };
563
- insertStmt.run(event.id, patternId, eventType, JSON.stringify(details));
573
+ await this.write(() => insertStmt.run(event.id, patternId, eventType, JSON.stringify(details)));
564
574
  this.recentEvents.push(event);
565
575
  }
566
576
  }
577
+ /**
578
+ * Run a write through the shared connection's writeWhenUnlocked queue, so a
579
+ * locked memory.db does not freeze the MCP server's event loop while the
580
+ * hourly consolidation timer merges and prunes patterns (#1274).
581
+ */
582
+ write(fn) {
583
+ return this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(fn) : Promise.resolve(fn());
584
+ }
567
585
  /**
568
586
  * Get statistics
569
587
  */
@@ -75,7 +75,7 @@ export class TrajectoryTracker {
75
75
  // Load recent trajectories into buffer
76
76
  await this.loadRecentTrajectories();
77
77
  // Clean up orphaned trajectories from previous sessions (started > 1 hour ago, never completed)
78
- this.cleanupOrphanedTrajectories();
78
+ await this.cleanupOrphanedTrajectories();
79
79
  this.initialized = true;
80
80
  console.log('[TrajectoryTracker] Initialized');
81
81
  }
@@ -83,18 +83,20 @@ export class TrajectoryTracker {
83
83
  * Clean up orphaned trajectories that were started but never completed.
84
84
  * Marks them as failed with an auto-close reason. Runs at initialization.
85
85
  */
86
- cleanupOrphanedTrajectories() {
87
- if (!this.db)
86
+ async cleanupOrphanedTrajectories() {
87
+ const db = this.db;
88
+ if (!db || !this.unifiedMemory)
88
89
  return;
89
90
  try {
90
- const result = this.db.prepare(`
91
+ // #1263: retried asynchronously, so a locked DB does not freeze the MCP server.
92
+ const result = await this.unifiedMemory.writeWhenUnlocked(() => db.prepare(`
91
93
  UPDATE qe_trajectories
92
94
  SET success = 0,
93
95
  ended_at = datetime('now'),
94
96
  feedback = 'auto-closed: orphaned trajectory from previous session'
95
97
  WHERE success IS NULL
96
98
  AND started_at < datetime('now', '-1 hour')
97
- `).run();
99
+ `).run());
98
100
  if (result.changes > 0) {
99
101
  this.stats.trajectoriesAbandoned += result.changes;
100
102
  console.log(`[TrajectoryTracker] Cleaned up ${result.changes} orphaned trajectories`);
@@ -238,10 +240,13 @@ export class TrajectoryTracker {
238
240
  startedAt,
239
241
  context: options.context,
240
242
  });
241
- // Persist to SQLite
243
+ // Persist to SQLite. Queued (#1283): task_orchestrate starts a trajectory
244
+ // inside the tool call, and a locked memory.db must not freeze the MCP
245
+ // server's event loop. The later end update queues after this insert.
242
246
  const insertStmt = this.prepared.get('insertTrajectory');
243
247
  if (insertStmt) {
244
- insertStmt.run(id, task, options.agent || null, options.domain || null, startedAt.toISOString(), options.context ? JSON.stringify(options.context) : null);
248
+ const run = () => insertStmt.run(id, task, options.agent || null, options.domain || null, startedAt.toISOString(), options.context ? JSON.stringify(options.context) : null);
249
+ await (this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(run) : run());
245
250
  }
246
251
  this.stats.trajectoriesStarted++;
247
252
  // Set auto-end timeout
@@ -344,12 +349,15 @@ export class TrajectoryTracker {
344
349
  endedAt,
345
350
  feedback,
346
351
  };
347
- // Persist to SQLite
352
+ // Persist to SQLite. Queued (#1274): task completion events end
353
+ // trajectories in the background, and a locked memory.db must not freeze
354
+ // the MCP server's event loop.
348
355
  const updateStmt = this.prepared.get('updateTrajectory');
349
356
  if (updateStmt) {
350
- updateStmt.run(endedAt.toISOString(), success ? 1 : 0, JSON.stringify(active.steps), JSON.stringify({ metrics, context: active.context }), null, // embedding - computed later if needed
357
+ const run = () => updateStmt.run(endedAt.toISOString(), success ? 1 : 0, JSON.stringify(active.steps), JSON.stringify({ metrics, context: active.context }), null, // embedding - computed later if needed
351
358
  feedback ?? null, null, // related_patterns - computed later
352
359
  trajectoryId);
360
+ await (this.unifiedMemory ? this.unifiedMemory.writeWhenUnlocked(run) : run());
353
361
  }
354
362
  // Remove from active, add to recent buffer
355
363
  this.activeTrajectories.delete(trajectoryId);
@@ -84,6 +84,14 @@ export declare class EmbeddingCache {
84
84
  * Persist entry to disk
85
85
  */
86
86
  private persistToDisk;
87
+ /**
88
+ * Run a write on the cache's connection without blocking the caller
89
+ * (#1283). On the shared memory.db connection it goes through the write
90
+ * queue, so a locked database does not freeze the MCP server's event loop;
91
+ * on a private (legacy) connection it runs at once. A failure is logged,
92
+ * since the in-memory cache is already up to date.
93
+ */
94
+ private persist;
87
95
  /**
88
96
  * Flush writes that were queued during async DB initialization
89
97
  */
@@ -24,6 +24,7 @@ import { join } from 'path';
24
24
  import { existsSync, mkdirSync } from 'fs';
25
25
  import { getUnifiedMemory, findProjectRoot } from '../../../kernel/unified-memory.js';
26
26
  import { safeJsonParse } from '../../../shared/safe-json.js';
27
+ import { writeWhenUnlockedOn } from '../../../shared/sqlite-write-queue.js';
27
28
  /**
28
29
  * Embedding cache with LRU eviction and persistent storage
29
30
  */
@@ -183,8 +184,7 @@ export class EmbeddingCache {
183
184
  const cache = this.memoryCache.get(namespace);
184
185
  const deleted = cache?.delete(key) || false;
185
186
  if (deleted && this.persistent && this.db) {
186
- const stmt = this.db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?');
187
- stmt.run(key, namespace);
187
+ this.persist('delete', (db) => db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?').run(key, namespace));
188
188
  }
189
189
  return deleted;
190
190
  }
@@ -196,8 +196,7 @@ export class EmbeddingCache {
196
196
  const cache = this.memoryCache.get(namespace);
197
197
  cache?.clear();
198
198
  if (this.persistent && this.db) {
199
- const stmt = this.db.prepare('DELETE FROM embeddings WHERE namespace = ?');
200
- stmt.run(namespace);
199
+ this.persist('clear', (db) => db.prepare('DELETE FROM embeddings WHERE namespace = ?').run(namespace));
201
200
  }
202
201
  }
203
202
  else {
@@ -205,7 +204,7 @@ export class EmbeddingCache {
205
204
  cache.clear();
206
205
  }
207
206
  if (this.persistent && this.db) {
208
- this.db.exec('DELETE FROM embeddings');
207
+ this.persist('clear', (db) => db.exec('DELETE FROM embeddings'));
209
208
  }
210
209
  }
211
210
  }
@@ -243,8 +242,8 @@ export class EmbeddingCache {
243
242
  if (lruKey) {
244
243
  cache.delete(lruKey);
245
244
  if (this.persistent && this.db) {
246
- const stmt = this.db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?');
247
- stmt.run(lruKey, namespace);
245
+ const evicted = lruKey;
246
+ this.persist('evict', (db) => db.prepare('DELETE FROM embeddings WHERE key = ? AND namespace = ?').run(evicted, namespace));
248
247
  }
249
248
  }
250
249
  }
@@ -259,17 +258,32 @@ export class EmbeddingCache {
259
258
  const metadataJson = embedding.metadata
260
259
  ? JSON.stringify(embedding.metadata)
261
260
  : null;
262
- const stmt = this.db.prepare(`
261
+ const lastAccess = Date.now();
262
+ this.persist('persist', (db) => db.prepare(`
263
263
  INSERT OR REPLACE INTO embeddings
264
264
  (key, namespace, vector, dimension, text, timestamp, quantization, metadata, last_access)
265
265
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
266
- `);
267
- stmt.run(key, namespace, vectorBuffer, embedding.dimension, embedding.text, embedding.timestamp, embedding.quantization, metadataJson, Date.now());
266
+ `).run(key, namespace, vectorBuffer, embedding.dimension, embedding.text, embedding.timestamp, embedding.quantization, metadataJson, lastAccess));
268
267
  }
269
268
  catch (error) {
270
269
  console.warn('Failed to persist embedding:', error);
271
270
  }
272
271
  }
272
+ /**
273
+ * Run a write on the cache's connection without blocking the caller
274
+ * (#1283). On the shared memory.db connection it goes through the write
275
+ * queue, so a locked database does not freeze the MCP server's event loop;
276
+ * on a private (legacy) connection it runs at once. A failure is logged,
277
+ * since the in-memory cache is already up to date.
278
+ */
279
+ persist(action, write) {
280
+ const db = this.db;
281
+ if (!db)
282
+ return;
283
+ writeWhenUnlockedOn(db, () => write(db)).catch((error) => {
284
+ console.warn(`Failed to ${action} embedding cache entry:`, error);
285
+ });
286
+ }
273
287
  /**
274
288
  * Flush writes that were queued during async DB initialization
275
289
  */
@@ -77,6 +77,17 @@ export declare class DeltaTracker {
77
77
  initialize(): void;
78
78
  private prepareStatements;
79
79
  private ensureInitialized;
80
+ /**
81
+ * createGenesis() through the shared connection's write queue (#1283). The
82
+ * version check and the insert run as one queued unit.
83
+ */
84
+ createGenesisWhenUnlocked(patternId: string, snapshot: object, metadata?: Record<string, unknown>): Promise<DeltaEvent>;
85
+ /**
86
+ * recordDelta() through the shared connection's write queue (#1283). Reading
87
+ * the current version, the insert and retention run as one queued unit, so
88
+ * two deltas cannot get the same version number.
89
+ */
90
+ recordDeltaWhenUnlocked(patternId: string, before: object, after: object, metadata?: Record<string, unknown>): Promise<DeltaEvent>;
80
91
  /**
81
92
  * Create a genesis snapshot for a pattern (version 0).
82
93
  * The full object is stored in metadata.snapshot; patches are empty.
@@ -8,6 +8,7 @@
8
8
  * @module integrations/ruvector/delta-tracker
9
9
  */
10
10
  import { v4 as uuidv4 } from 'uuid';
11
+ import { writeWhenUnlockedOn } from '../../shared/sqlite-write-queue.js';
11
12
  import * as fastJsonPatchNs from 'fast-json-patch';
12
13
  // fast-json-patch ships two entry points with different export shapes: its CJS
13
14
  // entry (index.js) attaches named exports directly via Object.assign(exports,
@@ -156,6 +157,21 @@ export class DeltaTracker {
156
157
  // --------------------------------------------------------------------------
157
158
  // Public API
158
159
  // --------------------------------------------------------------------------
160
+ /**
161
+ * createGenesis() through the shared connection's write queue (#1283). The
162
+ * version check and the insert run as one queued unit.
163
+ */
164
+ createGenesisWhenUnlocked(patternId, snapshot, metadata) {
165
+ return writeWhenUnlockedOn(this.db, () => this.createGenesis(patternId, snapshot, metadata));
166
+ }
167
+ /**
168
+ * recordDelta() through the shared connection's write queue (#1283). Reading
169
+ * the current version, the insert and retention run as one queued unit, so
170
+ * two deltas cannot get the same version number.
171
+ */
172
+ recordDeltaWhenUnlocked(patternId, before, after, metadata) {
173
+ return writeWhenUnlockedOn(this.db, () => this.recordDelta(patternId, before, after, metadata));
174
+ }
159
175
  /**
160
176
  * Create a genesis snapshot for a pattern (version 0).
161
177
  * The full object is stored in metadata.snapshot; patches are empty.
@@ -95,6 +95,8 @@ export declare class PersistentSONAEngine {
95
95
  private initPromise;
96
96
  private pendingSaves;
97
97
  private saveTimer;
98
+ /** The deferred batch currently being written, if any (#1283). */
99
+ private flushInFlight;
98
100
  private consecutiveSaveFailures;
99
101
  private serverClient;
100
102
  constructor(config: PersistentSONAConfig);
@@ -419,6 +421,14 @@ export declare class PersistentSONAEngine {
419
421
  * Schedule batched save
420
422
  */
421
423
  private scheduleSave;
424
+ /**
425
+ * Write the batched patterns. Each write is queued on the shared connection
426
+ * (#1283): in the MCP server a locked memory.db no longer freezes the event
427
+ * loop for the whole busy_timeout per pattern; the write retries
428
+ * asynchronously instead. A row that still fails stays pending and the batch
429
+ * is retried with backoff, as before.
430
+ */
431
+ private flushPendingSaves;
422
432
  /**
423
433
  * Update pattern usage in SQLite
424
434
  */
@@ -29,6 +29,7 @@ import { getUnifiedPersistence } from '../../kernel/unified-persistence.js';
29
29
  import { toErrorMessage } from '../../shared/error-utils.js';
30
30
  import { safeJsonParse } from '../../shared/safe-json.js';
31
31
  import { LoggerFactory } from '../../logging/index.js';
32
+ import { writeWhenUnlockedOn } from '../../shared/sqlite-write-queue.js';
32
33
  const logger = LoggerFactory.create('sona-persistence');
33
34
  // ============================================================================
34
35
  // Schema (added to unified-memory.ts as part of migration)
@@ -112,6 +113,8 @@ export class PersistentSONAEngine {
112
113
  initPromise = null;
113
114
  pendingSaves = new Map();
114
115
  saveTimer = null;
116
+ /** The deferred batch currently being written, if any (#1283). */
117
+ flushInFlight = null;
115
118
  consecutiveSaveFailures = 0;
116
119
  serverClient = null;
117
120
  constructor(config) {
@@ -801,6 +804,10 @@ export class PersistentSONAEngine {
801
804
  * Close the engine
802
805
  */
803
806
  async close() {
807
+ // Let a deferred batch that is already writing finish first (#1283); it
808
+ // may schedule a retry, which the clearTimeout below then cancels.
809
+ if (this.flushInFlight)
810
+ await this.flushInFlight;
804
811
  // Flush pending saves
805
812
  if (this.saveTimer) {
806
813
  clearTimeout(this.saveTimer);
@@ -808,9 +815,9 @@ export class PersistentSONAEngine {
808
815
  }
809
816
  if (this.pendingSaves.size > 0) {
810
817
  const failures = [];
811
- for (const pattern of this.pendingSaves.values()) {
818
+ for (const pattern of Array.from(this.pendingSaves.values())) {
812
819
  try {
813
- this.savePatternToDb(pattern);
820
+ await writeWhenUnlockedOn(this.db, () => this.savePatternToDb(pattern));
814
821
  this.pendingSaves.delete(pattern.id);
815
822
  }
816
823
  catch (error) {
@@ -1085,33 +1092,51 @@ export class PersistentSONAEngine {
1085
1092
  }
1086
1093
  this.saveTimer = setTimeout(() => {
1087
1094
  this.saveTimer = null;
1088
- const patterns = Array.from(this.pendingSaves.values());
1089
- for (const pattern of patterns) {
1090
- try {
1091
- this.savePatternToDb(pattern);
1092
- this.pendingSaves.delete(pattern.id);
1093
- }
1094
- catch (error) {
1095
- logger.warn('Deferred SONA save failed; retaining pending pattern', {
1096
- patternId: pattern.id, error: toErrorMessage(error),
1097
- });
1098
- }
1099
- }
1100
- if (this.pendingSaves.size > 0) {
1101
- this.consecutiveSaveFailures++;
1102
- // Stop after five failed batches; close() can still flush retained rows.
1103
- if (this.consecutiveSaveFailures < 5 && this.db?.open) {
1104
- this.scheduleSave(Math.min(60000, Math.max(1000, this.config.autoSaveInterval) * 2 ** (this.consecutiveSaveFailures - 1)));
1105
- }
1106
- }
1107
- else {
1108
- this.consecutiveSaveFailures = 0;
1109
- }
1095
+ const flush = this.flushPendingSaves().finally(() => {
1096
+ if (this.flushInFlight === flush)
1097
+ this.flushInFlight = null;
1098
+ });
1099
+ this.flushInFlight = flush;
1110
1100
  }, delayMs);
1111
1101
  // The initial batch must flush on natural exit; only failure retries are optional.
1112
1102
  if (this.consecutiveSaveFailures > 0)
1113
1103
  this.saveTimer.unref();
1114
1104
  }
1105
+ /**
1106
+ * Write the batched patterns. Each write is queued on the shared connection
1107
+ * (#1283): in the MCP server a locked memory.db no longer freezes the event
1108
+ * loop for the whole busy_timeout per pattern; the write retries
1109
+ * asynchronously instead. A row that still fails stays pending and the batch
1110
+ * is retried with backoff, as before.
1111
+ */
1112
+ async flushPendingSaves() {
1113
+ const patterns = Array.from(this.pendingSaves.values());
1114
+ let failed = 0;
1115
+ for (const pattern of patterns) {
1116
+ try {
1117
+ await writeWhenUnlockedOn(this.db, () => this.savePatternToDb(pattern));
1118
+ // A newer snapshot queued during the write stays pending.
1119
+ if (this.pendingSaves.get(pattern.id) === pattern)
1120
+ this.pendingSaves.delete(pattern.id);
1121
+ }
1122
+ catch (error) {
1123
+ failed++;
1124
+ logger.warn('Deferred SONA save failed; retaining pending pattern', {
1125
+ patternId: pattern.id, error: toErrorMessage(error),
1126
+ });
1127
+ }
1128
+ }
1129
+ if (failed > 0) {
1130
+ this.consecutiveSaveFailures++;
1131
+ // Stop after five failed batches; close() can still flush retained rows.
1132
+ if (this.consecutiveSaveFailures < 5 && this.db?.open) {
1133
+ this.scheduleSave(Math.min(60000, Math.max(1000, this.config.autoSaveInterval) * 2 ** (this.consecutiveSaveFailures - 1)));
1134
+ }
1135
+ }
1136
+ else {
1137
+ this.consecutiveSaveFailures = 0;
1138
+ }
1139
+ }
1115
1140
  /**
1116
1141
  * Update pattern usage in SQLite
1117
1142
  */
@@ -69,6 +69,9 @@ export declare class UnifiedMemoryManager {
69
69
  private initialized;
70
70
  private vectorsLoaded;
71
71
  private initPromise;
72
+ /** Tail of the FIFO write queue and how many writes are in it (#1263). */
73
+ private writeQueue;
74
+ private queuedWrites;
72
75
  private preparedStatements;
73
76
  private vectorIndex;
74
77
  private crdtStore;
@@ -79,6 +82,8 @@ export declare class UnifiedMemoryManager {
79
82
  private constructor();
80
83
  static getInstance(config?: Partial<UnifiedMemoryConfig>): UnifiedMemoryManager;
81
84
  static getInstanceAsync(config?: Partial<UnifiedMemoryConfig>): Promise<UnifiedMemoryManager>;
85
+ /** The shared instance when it is initialized; never creates one. */
86
+ static peekInitialized(): UnifiedMemoryManager | null;
82
87
  static resetInstance(): void;
83
88
  initialize(options?: {
84
89
  signal?: AbortSignal;
@@ -115,6 +120,19 @@ export declare class UnifiedMemoryManager {
115
120
  */
116
121
  private migrateToV11GoapExecutionSteps;
117
122
  private loadVectorIndex;
123
+ /**
124
+ * Run a write on the shared connection (#1263). Under the MCP server's lock
125
+ * wait cap each attempt blocks for at most the cap and the write retries
126
+ * asynchronously, so a locked memory.db does not freeze the event loop. The
127
+ * write still fails with SQLITE_BUSY once the configured busyTimeout has
128
+ * passed. Without a cap (CLI) this is one attempt with the full busyTimeout.
129
+ *
130
+ * Writes run one at a time in call order (FIFO), so a later write to the
131
+ * same key cannot land before an earlier one that is still retrying. A
132
+ * failed write does not hold up the next. With nothing queued the first
133
+ * attempt runs synchronously, as the write did before.
134
+ */
135
+ writeWhenUnlocked<T>(fn: () => T): Promise<T>;
118
136
  kvSet(key: string, value: unknown, namespace?: string, ttl?: number): Promise<void>;
119
137
  kvGet<T>(key: string, namespace?: string): Promise<T | undefined>;
120
138
  kvDelete(key: string, namespace?: string): Promise<boolean>;
@@ -211,5 +229,19 @@ export declare class UnifiedMemoryManager {
211
229
  }
212
230
  export declare function getUnifiedMemory(config?: Partial<UnifiedMemoryConfig>): UnifiedMemoryManager;
213
231
  export declare function initializeUnifiedMemory(config?: Partial<UnifiedMemoryConfig>): Promise<UnifiedMemoryManager>;
232
+ /**
233
+ * The shared memory.db connection when UnifiedMemory is already initialized,
234
+ * else null. Never opens it: callers that run before it keep their
235
+ * no-database behavior (#1298).
236
+ */
237
+ export declare function getOpenUnifiedMemoryDatabase(): DatabaseType | null;
214
238
  export declare function resetUnifiedMemory(): void;
239
+ /**
240
+ * Run a write on `db` through the shared manager's writeWhenUnlocked queue
241
+ * when `db` is that manager's connection (#1274), for modules that hold only
242
+ * the raw connection. The write then neither blocks the MCP server's event
243
+ * loop for the whole busy_timeout nor lands before an earlier queued write.
244
+ * A write on any other connection runs now, as before.
245
+ */
246
+ export declare function writeWhenUnlockedOn<T>(db: DatabaseType, fn: () => T): Promise<T>;
215
247
  //# sourceMappingURL=unified-memory.d.ts.map