agentic-qe 3.13.5 → 3.13.7

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 (346) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +73 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +5 -5
  5. package/dist/cli/chunks/adapter-UIYF2P3E.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-XDKGG2GP.js → agent-booster-wasm-UOGKPGRU.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-CTPXGR5P.js → agent-handler-Q5R4WGEK.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-MG5OV7AY.js → agent-memory-branch-NHG52BFD.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-CKTFFDJ4.js +2 -0
  10. package/dist/cli/chunks/{arena-FAHVOHNG.js → arena-IV4MYEYB.js} +2 -2
  11. package/dist/cli/chunks/{arena-NYO4EUNQ.js → arena-PMAHTPQB.js} +4 -4
  12. package/dist/cli/chunks/{audit-6544RL5D.js → audit-PVN2O2AU.js} +3 -3
  13. package/dist/cli/chunks/base-I3FB7F6R.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-MTEONNCQ.js → better-sqlite3-4KVBGOT6.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-DPKCUQUC.js → brain-handler-GSJJVXQW.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-SU2KHC2C.js → branch-enumerator-OQU3U6FI.js} +2 -2
  17. package/dist/cli/chunks/{browser-ITDN72YJ.js → browser-CXOMLHII.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-NQ5SWXEP.js +2 -0
  19. package/dist/cli/chunks/{chunk-EROQSNGD.js → chunk-224MLOCT.js} +2 -2
  20. package/dist/cli/chunks/{chunk-JX5IY2YK.js → chunk-2LJNRAUF.js} +1 -1
  21. package/dist/cli/chunks/{chunk-YGMCRJSC.js → chunk-2QAJDG4E.js} +2 -2
  22. package/dist/cli/chunks/{chunk-W7H46LAX.js → chunk-3KVQOIOI.js} +1 -1
  23. package/dist/cli/chunks/{chunk-6L5V3JGJ.js → chunk-3MDGSITG.js} +1 -1
  24. package/dist/cli/chunks/{chunk-AKZ6PWHM.js → chunk-3SBO6CDL.js} +2 -2
  25. package/dist/cli/chunks/{chunk-D4P6BKGF.js → chunk-45QJQSLD.js} +3 -3
  26. package/dist/cli/chunks/{chunk-EXXWOOUL.js → chunk-46H7GRXK.js} +3 -3
  27. package/dist/cli/chunks/{chunk-74QRMQFR.js → chunk-4LGZGIQL.js} +2 -2
  28. package/dist/cli/chunks/{chunk-KAVYTFAS.js → chunk-4PNXUJMO.js} +2 -2
  29. package/dist/cli/chunks/{chunk-3XKCC7LE.js → chunk-5EFWFB3L.js} +1 -1
  30. package/dist/cli/chunks/{chunk-JID7JO7K.js → chunk-5FWWHLQ3.js} +2 -2
  31. package/dist/cli/chunks/{chunk-CD4YWKJ2.js → chunk-5LGNTDKU.js} +2 -2
  32. package/dist/cli/chunks/{chunk-IS3P5VBL.js → chunk-5VE4GP67.js} +2 -2
  33. package/dist/cli/chunks/{chunk-YG45ZONW.js → chunk-6COKVAQM.js} +2 -2
  34. package/dist/cli/chunks/{chunk-EPMUAKU2.js → chunk-6F5UFJIA.js} +2 -2
  35. package/dist/cli/chunks/{chunk-IC5JGTM4.js → chunk-6VMQH2G3.js} +1 -1
  36. package/dist/cli/chunks/{chunk-AX4XIG4G.js → chunk-6YUBBESI.js} +2 -2
  37. package/dist/cli/chunks/{chunk-54C3OHES.js → chunk-75MQX436.js} +1 -1
  38. package/dist/cli/chunks/{chunk-THQ5ZBWP.js → chunk-7644FEFM.js} +2 -2
  39. package/dist/cli/chunks/{chunk-XNGYWOAK.js → chunk-77OIG5EX.js} +2 -2
  40. package/dist/cli/chunks/{chunk-WZI2REDL.js → chunk-7CYA7JBH.js} +2 -2
  41. package/dist/cli/chunks/{chunk-VRV7CXEM.js → chunk-7F2KPWTO.js} +1 -1
  42. package/dist/cli/chunks/{chunk-G47WJMHM.js → chunk-7XA2YLCK.js} +1 -1
  43. package/dist/cli/chunks/chunk-7ZSEZOEQ.js +15 -0
  44. package/dist/cli/chunks/{chunk-OGUPLNRY.js → chunk-A3QP6NWO.js} +1 -1
  45. package/dist/cli/chunks/{chunk-6ZCAZ3TR.js → chunk-A3XAWNOW.js} +2 -2
  46. package/dist/cli/chunks/{chunk-ZUIPUO7Q.js → chunk-ABWZERCN.js} +1 -1
  47. package/dist/cli/chunks/chunk-AF7EKTC3.js +2 -0
  48. package/dist/cli/chunks/{chunk-LELWVGN6.js → chunk-ALN3LOMK.js} +1 -1
  49. package/dist/cli/chunks/{chunk-UGER2PGN.js → chunk-AUJZUMJ2.js} +4 -4
  50. package/dist/cli/chunks/{chunk-ND7IWTVQ.js → chunk-AXHKDE6N.js} +2 -2
  51. package/dist/cli/chunks/{chunk-YFD6K7AS.js → chunk-BCF6GEFU.js} +23 -23
  52. package/dist/cli/chunks/{chunk-6H3I36DL.js → chunk-BP63FIKW.js} +2 -2
  53. package/dist/cli/chunks/{chunk-YSWI3APU.js → chunk-BUHD5KMR.js} +2 -2
  54. package/dist/cli/chunks/{chunk-PSD2L2JB.js → chunk-BX32VXZP.js} +2 -2
  55. package/dist/cli/chunks/{chunk-2QI3OJAC.js → chunk-C4LN2HKE.js} +3 -3
  56. package/dist/cli/chunks/{chunk-K55D3PAR.js → chunk-CMDMOKGH.js} +3 -3
  57. package/dist/cli/chunks/{chunk-HBYVYLBN.js → chunk-COM3MXBJ.js} +2 -2
  58. package/dist/cli/chunks/{chunk-42KQE5H6.js → chunk-CPDTUQGT.js} +3 -3
  59. package/dist/cli/chunks/{chunk-YU4U3BUY.js → chunk-CT5ZBNWB.js} +1 -1
  60. package/dist/cli/chunks/{chunk-TU5S33SD.js → chunk-DM3S4WNW.js} +2 -2
  61. package/dist/cli/chunks/{chunk-GHSP4AC5.js → chunk-DNAB56KC.js} +1 -1
  62. package/dist/cli/chunks/{chunk-VE5STFDP.js → chunk-DPEI46VM.js} +2 -2
  63. package/dist/cli/chunks/{chunk-DIRFXY3J.js → chunk-DRTXG2DG.js} +2 -2
  64. package/dist/cli/chunks/{chunk-SQDHFTGQ.js → chunk-DXLDSACI.js} +3 -3
  65. package/dist/cli/chunks/{chunk-SN57SNLU.js → chunk-EPYGDRMU.js} +2 -2
  66. package/dist/cli/chunks/{chunk-MX35PIGJ.js → chunk-EV7S4J35.js} +2 -2
  67. package/dist/cli/chunks/{chunk-OF5UL3FA.js → chunk-EXIV2D3R.js} +1 -1
  68. package/dist/cli/chunks/{chunk-2KPGJ4LO.js → chunk-EXXAQ3ZT.js} +2 -2
  69. package/dist/cli/chunks/{chunk-NVZ3QROA.js → chunk-F55LPGNQ.js} +2 -2
  70. package/dist/cli/chunks/{chunk-OJZ5LI3O.js → chunk-FFJ4T5P7.js} +1 -1
  71. package/dist/cli/chunks/{chunk-CHFZHORO.js → chunk-FT3I5BNS.js} +5 -5
  72. package/dist/cli/chunks/{chunk-OUWZTYRZ.js → chunk-FWU55NEY.js} +2 -2
  73. package/dist/cli/chunks/chunk-GAYYOIRM.js +2 -0
  74. package/dist/cli/chunks/{chunk-ZWLFEZQC.js → chunk-GC5TDDOT.js} +1 -1
  75. package/dist/cli/chunks/{chunk-5YIGAWBO.js → chunk-GDCPI6GS.js} +2 -2
  76. package/dist/cli/chunks/{chunk-DK7MV2W3.js → chunk-GIRACYH4.js} +1 -1
  77. package/dist/cli/chunks/{chunk-UUFLYBUO.js → chunk-GK6U2SQ2.js} +2 -2
  78. package/dist/cli/chunks/{chunk-2XZWYKXQ.js → chunk-GYQEFUG7.js} +1 -1
  79. package/dist/cli/chunks/{chunk-7LR4VP2I.js → chunk-H6SKPDAR.js} +1 -1
  80. package/dist/cli/chunks/{chunk-76OWM3ZO.js → chunk-H7GTLWPW.js} +2 -2
  81. package/dist/cli/chunks/{chunk-AJYJFIKO.js → chunk-HA6OYSPC.js} +2 -2
  82. package/dist/cli/chunks/{chunk-QLD2WVWN.js → chunk-HFZYYDV5.js} +2 -2
  83. package/dist/cli/chunks/{chunk-HZV3J4VQ.js → chunk-HG2QGS2M.js} +2 -2
  84. package/dist/cli/chunks/{chunk-PKCVQ2I4.js → chunk-HPSL2WBW.js} +1 -1
  85. package/dist/cli/chunks/{chunk-FW6OPDA6.js → chunk-HT4NYS4F.js} +1 -1
  86. package/dist/cli/chunks/{chunk-EGI6SKQD.js → chunk-HYQZHUGU.js} +4 -4
  87. package/dist/cli/chunks/{chunk-2RZ2S6YR.js → chunk-IE3FM6U3.js} +2 -2
  88. package/dist/cli/chunks/chunk-IVNRCF65.js +2 -0
  89. package/dist/cli/chunks/{chunk-FQPYD6YE.js → chunk-J5TFIVO2.js} +1 -1
  90. package/dist/cli/chunks/{chunk-43BXSNKU.js → chunk-J6EK6TC2.js} +2 -2
  91. package/dist/cli/chunks/{chunk-WDDU4I5Z.js → chunk-JDPYQDKI.js} +1 -1
  92. package/dist/cli/chunks/{chunk-ZE3WS57T.js → chunk-KS2HVX52.js} +2 -2
  93. package/dist/cli/chunks/{chunk-DFBJPOJR.js → chunk-L4I2JS74.js} +2 -2
  94. package/dist/cli/chunks/{chunk-2CF3XZAS.js → chunk-L74WFBDA.js} +2 -2
  95. package/dist/cli/chunks/{chunk-QIHKSRUZ.js → chunk-LBMJYLGR.js} +2 -2
  96. package/dist/cli/chunks/{chunk-S2EUFKHL.js → chunk-LHYN6YTN.js} +2 -2
  97. package/dist/cli/chunks/{chunk-JTUTZUED.js → chunk-LPUWOM7Y.js} +2 -2
  98. package/dist/cli/chunks/{chunk-6BEMH5K5.js → chunk-LY7UPFTJ.js} +1 -1
  99. package/dist/cli/chunks/{chunk-LARAXKTZ.js → chunk-MBLO72OZ.js} +2 -2
  100. package/dist/cli/chunks/{chunk-7A4EXSMN.js → chunk-ME4KYCIL.js} +2 -2
  101. package/dist/cli/chunks/{chunk-YIEMVVUH.js → chunk-MPGZE4PD.js} +2 -2
  102. package/dist/cli/chunks/{chunk-AKYOY5KR.js → chunk-MYCMFN33.js} +2 -2
  103. package/dist/cli/chunks/{chunk-ZOD37GNG.js → chunk-N2PG6TYS.js} +3 -3
  104. package/dist/cli/chunks/{chunk-RKXN5TVS.js → chunk-NGBJH26X.js} +1 -1
  105. package/dist/cli/chunks/{chunk-HMNBNGNO.js → chunk-NLK5WBOS.js} +1 -1
  106. package/dist/cli/chunks/{chunk-PNDWHSZO.js → chunk-NQPS7FM5.js} +2 -2
  107. package/dist/cli/chunks/{chunk-GUO6JZMS.js → chunk-NY332ER7.js} +2 -2
  108. package/dist/cli/chunks/{chunk-64GTU5LR.js → chunk-OCAJJUPV.js} +2 -2
  109. package/dist/cli/chunks/{chunk-DVYNBMMP.js → chunk-ON57SN44.js} +2 -2
  110. package/dist/cli/chunks/{chunk-BAJK26EI.js → chunk-ORV3E477.js} +2 -2
  111. package/dist/cli/chunks/{chunk-BX5MY65W.js → chunk-P354IPGG.js} +1 -1
  112. package/dist/cli/chunks/{chunk-FYWTMDID.js → chunk-PTQYCACC.js} +2 -2
  113. package/dist/cli/chunks/{chunk-V2T7QEPV.js → chunk-Q6BYBRNA.js} +1 -1
  114. package/dist/cli/chunks/{chunk-Q3J5OTZ2.js → chunk-Q6LE7RY6.js} +1 -1
  115. package/dist/cli/chunks/{chunk-7SQXEYII.js → chunk-QDTIOZHQ.js} +2 -2
  116. package/dist/cli/chunks/{chunk-BI6OTPC6.js → chunk-QFHUATTI.js} +2 -2
  117. package/dist/cli/chunks/{chunk-KRCIC4JK.js → chunk-QGZLVH3E.js} +2 -2
  118. package/dist/cli/chunks/{chunk-RDHBUCKQ.js → chunk-QM2QPZOR.js} +10 -10
  119. package/dist/cli/chunks/{chunk-557BFPDB.js → chunk-QV7PAJHO.js} +2 -2
  120. package/dist/cli/chunks/{chunk-7M4X6WTF.js → chunk-QVQYDUMR.js} +2 -2
  121. package/dist/cli/chunks/{chunk-WLY2J6JP.js → chunk-QVXMF6DS.js} +2 -2
  122. package/dist/cli/chunks/{chunk-PEHSTLU7.js → chunk-RBFX56HK.js} +1 -1
  123. package/dist/cli/chunks/{chunk-6RV3W2UZ.js → chunk-RJ5G3IZY.js} +1 -1
  124. package/dist/cli/chunks/{chunk-Z5YNYVFO.js → chunk-RQ4GKJ6H.js} +1 -1
  125. package/dist/cli/chunks/{chunk-GITS44TM.js → chunk-RSJVIUDH.js} +2 -2
  126. package/dist/cli/chunks/{chunk-7PHF2JM3.js → chunk-S2SNDC2D.js} +1 -1
  127. package/dist/cli/chunks/{chunk-G73XY2NK.js → chunk-S3RAJZ2A.js} +2 -2
  128. package/dist/cli/chunks/{chunk-7BLXINIL.js → chunk-S6CNNFVF.js} +25 -25
  129. package/dist/cli/chunks/{chunk-L6I2Q6UQ.js → chunk-SI56H5MC.js} +1 -1
  130. package/dist/cli/chunks/{chunk-OQ4HOHBI.js → chunk-TMTWC6M6.js} +2 -2
  131. package/dist/cli/chunks/{chunk-BUN4WBPW.js → chunk-U5SAFRHE.js} +2 -2
  132. package/dist/cli/chunks/{chunk-NFE4RV2Q.js → chunk-ULKMV4XT.js} +2 -2
  133. package/dist/cli/chunks/{chunk-ELC3UEML.js → chunk-UMWO6V7E.js} +1 -1
  134. package/dist/cli/chunks/{chunk-R4VDRE75.js → chunk-UOFNGPDM.js} +1 -1
  135. package/dist/cli/chunks/{chunk-ZMA5OWIQ.js → chunk-UZRZCM2M.js} +4 -4
  136. package/dist/cli/chunks/{chunk-U5GGDJ44.js → chunk-VA4JFEA6.js} +2 -2
  137. package/dist/cli/chunks/{chunk-AAGOBPIJ.js → chunk-VHQZBUOP.js} +2 -2
  138. package/dist/cli/chunks/{chunk-3EWWP3AO.js → chunk-VLWOF654.js} +1 -1
  139. package/dist/cli/chunks/{chunk-UWM4CCK7.js → chunk-VPQP342J.js} +1 -1
  140. package/dist/cli/chunks/{chunk-M7456ZW5.js → chunk-VXTNM7PA.js} +1 -1
  141. package/dist/cli/chunks/{chunk-VNRWJ5JZ.js → chunk-W3T6WFQK.js} +2 -2
  142. package/dist/cli/chunks/{chunk-23AO43XW.js → chunk-X5R4M2PW.js} +1 -1
  143. package/dist/cli/chunks/{chunk-JOJ2UFHM.js → chunk-XI2EEMNJ.js} +2 -2
  144. package/dist/cli/chunks/{chunk-4Z7JP7CD.js → chunk-XNQWCGR5.js} +2 -2
  145. package/dist/cli/chunks/{chunk-RGBYJAKQ.js → chunk-XQWHBFR4.js} +3 -3
  146. package/dist/cli/chunks/{chunk-4E2NA2GY.js → chunk-XVCB7KRX.js} +2 -2
  147. package/dist/cli/chunks/{chunk-QHX7VLVT.js → chunk-XVZZETXQ.js} +2 -2
  148. package/dist/cli/chunks/{chunk-MF6OT43N.js → chunk-XZMMFR2F.js} +1 -1
  149. package/dist/cli/chunks/{chunk-APMLMLSL.js → chunk-XZP7AYHS.js} +1 -1
  150. package/dist/cli/chunks/{chunk-CPIAZGHF.js → chunk-Y2NOIPIR.js} +2 -2
  151. package/dist/cli/chunks/{chunk-5I5KMIFY.js → chunk-YIAAXMQN.js} +2 -2
  152. package/dist/cli/chunks/{chunk-L6H4MWVN.js → chunk-YJUME3OF.js} +2 -2
  153. package/dist/cli/chunks/{chunk-WSSFH23M.js → chunk-YSB6GH53.js} +1 -1
  154. package/dist/cli/chunks/{chunk-GWBV26SE.js → chunk-Z7KEY7LW.js} +2 -2
  155. package/dist/cli/chunks/{chunk-PDOL3FGO.js → chunk-ZIN7U72B.js} +3 -3
  156. package/dist/cli/chunks/{chunk-ZQ7XQLLV.js → chunk-ZRETM57V.js} +3 -3
  157. package/dist/cli/chunks/{chunk-XACF7ZLM.js → chunk-ZWOIE55K.js} +2 -2
  158. package/dist/cli/chunks/{ci-IRCNFD32.js → ci-CXCKYXKG.js} +2 -2
  159. package/dist/cli/chunks/{ci-output-NFOUNDJ2.js → ci-output-OOHIVRSH.js} +2 -2
  160. package/dist/cli/chunks/{circuit-breaker-GB7SQRD2.js → circuit-breaker-32GSBTWS.js} +2 -2
  161. package/dist/cli/chunks/{claude-flow-setup-STFKPPVL.js → claude-flow-setup-4S5KMQV7.js} +2 -2
  162. package/dist/cli/chunks/client-63SX5VIZ.js +2 -0
  163. package/dist/cli/chunks/{cline-installer-MLKKIHIV.js → cline-installer-WPHR3JAY.js} +2 -2
  164. package/dist/cli/chunks/{code-ZRCJC42H.js → code-UN2SHAOD.js} +2 -2
  165. package/dist/cli/chunks/{code-index-extractor-VWDYYQY2.js → code-index-extractor-ML7FPQRV.js} +2 -2
  166. package/dist/cli/chunks/{codex-installer-I5BTWYQV.js → codex-installer-CNQM7D2K.js} +2 -2
  167. package/dist/cli/chunks/{completions-5JCAFTQV.js → completions-ULBMFDYW.js} +2 -2
  168. package/dist/cli/chunks/{complexity-analyzer-6JLLAPGO.js → complexity-analyzer-DNOF6MWS.js} +2 -2
  169. package/dist/cli/chunks/{continuedev-installer-YBOLMUZR.js → continuedev-installer-SALVVLBA.js} +2 -2
  170. package/dist/cli/chunks/{copilot-installer-GDBJZBXS.js → copilot-installer-2QQT7KAX.js} +2 -2
  171. package/dist/cli/chunks/core-handlers-LMFAYPU2.js +2 -0
  172. package/dist/cli/chunks/{cost-tracker-NEAVGEZI.js → cost-tracker-KJHJMCPN.js} +2 -2
  173. package/dist/cli/chunks/{coverage-DXS5XNAA.js → coverage-A4XD3KK2.js} +3 -3
  174. package/dist/cli/chunks/cross-domain-router-SVZLA5ZT.js +2 -0
  175. package/dist/cli/chunks/{cursor-installer-3KEMFIFA.js → cursor-installer-HKSSBI5E.js} +2 -2
  176. package/dist/cli/chunks/{daemon-JN377KTA.js → daemon-HMRQGUXY.js} +4 -4
  177. package/dist/cli/chunks/{daemon-FT2J6VY4.js → daemon-PHEIMUIL.js} +3 -3
  178. package/dist/cli/chunks/{dag-attention-scheduler-EJFEWFXI.js → dag-attention-scheduler-WLUSL2PN.js} +2 -2
  179. package/dist/cli/chunks/{detect-E5MN6N3L.js → detect-CVP3I7EK.js} +2 -2
  180. package/dist/cli/chunks/{dist-node-ZFSAQMFD.js → dist-node-BGMG54IM.js} +2 -2
  181. package/dist/cli/chunks/{domain-handler-S7VFZ2MY.js → domain-handler-BBKVSCEY.js} +2 -2
  182. package/dist/cli/chunks/{domain-transfer-LGHT3FN4.js → domain-transfer-YGSL3GPA.js} +2 -2
  183. package/dist/cli/chunks/dream-SHNPRLRM.js +2 -0
  184. package/dist/cli/chunks/{embed-and-insert-pattern-OVQS6IKK.js → embed-and-insert-pattern-QSHUNRQG.js} +2 -2
  185. package/dist/cli/chunks/{eval-45UWDD2R.js → eval-K3EQBGVU.js} +2 -2
  186. package/dist/cli/chunks/{experience-capture-middleware-XDRJSNPY.js → experience-capture-middleware-EVQXI6U2.js} +3 -3
  187. package/dist/cli/chunks/{fast-paths-VEDCJL75.js → fast-paths-RCUTEKJN.js} +2 -2
  188. package/dist/cli/chunks/{feature-flags-TGA3NWVL.js → feature-flags-CG4UQ3QX.js} +2 -2
  189. package/dist/cli/chunks/{feature-flags-NOTQVBLP.js → feature-flags-WNH7NIHC.js} +2 -2
  190. package/dist/cli/chunks/{file-discovery-AHMR6IGX.js → file-discovery-HEK73IOG.js} +2 -2
  191. package/dist/cli/chunks/{fleet-CQBUCH2S.js → fleet-DYJZVSGZ.js} +3 -3
  192. package/dist/cli/chunks/{gnn-wrapper-SOZCIONJ.js → gnn-wrapper-562P4VXW.js} +2 -2
  193. package/dist/cli/chunks/{heartbeat-handler-6XNV4DGM.js → heartbeat-handler-XHIRKGM2.js} +4 -4
  194. package/dist/cli/chunks/heartbeat-scheduler-U72YZ3NB.js +2 -0
  195. package/dist/cli/chunks/hnsw-adapter-U2GLM5AE.js +2 -0
  196. package/dist/cli/chunks/hnsw-index-32LSC37N.js +2 -0
  197. package/dist/cli/chunks/{hnsw-legacy-bridge-UILVP37N.js → hnsw-legacy-bridge-H2PYZ2TT.js} +2 -2
  198. package/dist/cli/chunks/{hnswlib-node-OHJQOSAH.js → hnswlib-node-3AJM5KVO.js} +2 -2
  199. package/dist/cli/chunks/{hooks-QVDOGEHG.js → hooks-N7F7Z362.js} +47 -47
  200. package/dist/cli/chunks/hybrid-router-4IEDWMTZ.js +2 -0
  201. package/dist/cli/chunks/{hypergraph-engine-YMVPBXZS.js → hypergraph-engine-MVY2ADYA.js} +2 -2
  202. package/dist/cli/chunks/{hypergraph-handler-SHUNZXUK.js → hypergraph-handler-IOS5X4ZI.js} +3 -3
  203. package/dist/cli/chunks/impact-analyzer-22V4R3YH.js +2 -0
  204. package/dist/cli/chunks/{init-handler-JE5FYJAV.js → init-handler-UWEA63JI.js} +6 -6
  205. package/dist/cli/chunks/init-wizard-PPI7JDU6.js +2 -0
  206. package/dist/cli/chunks/kernel-PL2K5MLT.js +2 -0
  207. package/dist/cli/chunks/{kilocode-installer-TVP4YOOK.js → kilocode-installer-LUH2XG4P.js} +2 -2
  208. package/dist/cli/chunks/{kiro-installer-XBSGANX7.js → kiro-installer-F2ZG3FIZ.js} +2 -2
  209. package/dist/cli/chunks/knowledge-graph-AOE6FEQR.js +2 -0
  210. package/dist/cli/chunks/learning-XBMJWGAV.js +119 -0
  211. package/dist/cli/chunks/{llm-router-FXXJHARR.js → llm-router-DRX7E7XI.js} +4 -4
  212. package/dist/cli/chunks/llm-router-service-3XZI7TE5.js +2 -0
  213. package/dist/cli/chunks/{load-IVF6G2SK.js → load-Y4QJSQQS.js} +2 -2
  214. package/dist/cli/chunks/load-test-6DIMN4MM.js +2 -0
  215. package/dist/cli/chunks/{mcp-VXSDVG3H.js → mcp-62XB5F5Q.js} +2 -2
  216. package/dist/cli/chunks/{memory-BINJV3M6.js → memory-ONR7ZN3X.js} +7 -7
  217. package/dist/cli/chunks/memory-backend-UAMIFHQQ.js +2 -0
  218. package/dist/cli/chunks/memory-handlers-4IAS3VY7.js +2 -0
  219. package/dist/cli/chunks/{multi-model-executor-RJHYK6JI.js → multi-model-executor-6IUW6I3H.js} +2 -2
  220. package/dist/cli/chunks/{opencode-installer-VCTF5ETL.js → opencode-installer-W47DIP2D.js} +2 -2
  221. package/dist/cli/chunks/{orchestrator-5SKZ2BOK.js → orchestrator-FKO5AACT.js} +5 -5
  222. package/dist/cli/chunks/pattern-null-store-35S3ZRS6.js +2 -0
  223. package/dist/cli/chunks/{pattern-usage-recorder-AY2DAOQO.js → pattern-usage-recorder-VEPEFTCF.js} +2 -2
  224. package/dist/cli/chunks/{pipeline-EMBMC75N.js → pipeline-RIITAMZ2.js} +2 -2
  225. package/dist/cli/chunks/{platform-GADIFXCI.js → platform-SA5TZEZD.js} +2 -2
  226. package/dist/cli/chunks/{plugin-Q234ZAAY.js → plugin-F4AN3WVB.js} +2 -2
  227. package/dist/cli/chunks/{prime-radiant-advanced-wasm-CXXKYB2P.js → prime-radiant-advanced-wasm-Y35DFGMR.js} +2 -2
  228. package/dist/cli/chunks/protocol-executor-PHJMZT27.js +2 -0
  229. package/dist/cli/chunks/{protocol-handler-ZZRFBVNA.js → protocol-handler-UCURNXLA.js} +2 -2
  230. package/dist/cli/chunks/{prove-7674ATXK.js → prove-WS57IMPA.js} +2 -2
  231. package/dist/cli/chunks/provider-manager-TKDL73H3.js +2 -0
  232. package/dist/cli/chunks/qe-reasoning-bank-DHEF6CTL.js +2 -0
  233. package/dist/cli/chunks/{quality-QCIGVN2S.js → quality-6UEGUSJX.js} +2 -2
  234. package/dist/cli/chunks/{quality-gate-AKV564GE.js → quality-gate-Z4FU2NR2.js} +3 -3
  235. package/dist/cli/chunks/queen-coordinator-57MCIW2B.js +2 -0
  236. package/dist/cli/chunks/{real-embeddings-74POUVMX.js → real-embeddings-DFB2TSY3.js} +2 -2
  237. package/dist/cli/chunks/{roocode-installer-INBL5AG7.js → roocode-installer-TVENBIIA.js} +2 -2
  238. package/dist/cli/chunks/router-V656FUDE.js +2 -0
  239. package/dist/cli/chunks/routing-feedback-77GLEBXR.js +2 -0
  240. package/dist/cli/chunks/{routing-handler-C7HMM7RL.js → routing-handler-LZFOVMDI.js} +2 -2
  241. package/dist/cli/chunks/{ruvector-commands-PT6LRVCW.js → ruvector-commands-HYSHR2XO.js} +2 -2
  242. package/dist/cli/chunks/{rvf-dual-writer-PRKROTP3.js → rvf-dual-writer-ZDCAEQDN.js} +2 -2
  243. package/dist/cli/chunks/{rvf-migration-adapter-ZI2XW4UX.js → rvf-migration-adapter-64U4XRDC.js} +2 -2
  244. package/dist/cli/chunks/{rvf-migration-coordinator-5JTGP35V.js → rvf-migration-coordinator-C3WP56PE.js} +2 -2
  245. package/dist/cli/chunks/rvf-native-adapter-34Q74G5N.js +2 -0
  246. package/dist/cli/chunks/{rvf-store-integrity-3B5TZTFR.js → rvf-store-integrity-HNVPA6JZ.js} +2 -2
  247. package/dist/cli/chunks/safe-db-Y754OIYY.js +2 -0
  248. package/dist/cli/chunks/schedule-GMKXLREO.js +2 -0
  249. package/dist/cli/chunks/scheduler-OIHBKLRQ.js +2 -0
  250. package/dist/cli/chunks/{security-IMIWSAHW.js → security-KIR5E67V.js} +3 -3
  251. package/dist/cli/chunks/{shared-rvf-adapter-UDKJNX6I.js → shared-rvf-adapter-AEMVXITE.js} +2 -2
  252. package/dist/cli/chunks/{shared-rvf-dual-writer-FQOBQ6S5.js → shared-rvf-dual-writer-J55TEO2S.js} +2 -2
  253. package/dist/cli/chunks/sqlite-persistence-QLTL46UG.js +2 -0
  254. package/dist/cli/chunks/{status-handler-7WON7M7F.js → status-handler-65JO3QZE.js} +2 -2
  255. package/dist/cli/chunks/{structural-health-JTKTO3A4.js → structural-health-Y5ZIQWSV.js} +2 -2
  256. package/dist/cli/chunks/{sync-6ABYTAOL.js → sync-DCMEOJAW.js} +2 -2
  257. package/dist/cli/chunks/{sync-UJSHBY3B.js → sync-TSFE2JJR.js} +2 -2
  258. package/dist/cli/chunks/{task-handler-5TZNOCCB.js → task-handler-RWGEJWEH.js} +2 -2
  259. package/dist/cli/chunks/{task-handlers-G7ZUGBHM.js → task-handlers-BXS6YXRM.js} +3 -3
  260. package/dist/cli/chunks/{test-BSJ6MVTG.js → test-3W2FHMQX.js} +4 -4
  261. package/dist/cli/chunks/{test-scheduling-OSJJXIYQ.js → test-scheduling-XNH4DWBN.js} +3 -3
  262. package/dist/cli/chunks/{token-bootstrap-MRNFR4YI.js → token-bootstrap-MB3MJMZM.js} +2 -2
  263. package/dist/cli/chunks/{token-usage-YQN7ND7G.js → token-usage-YO56DQAT.js} +2 -2
  264. package/dist/cli/chunks/{transformers-QL3AG25C.js → transformers-VQ6LTFGM.js} +2 -2
  265. package/dist/cli/chunks/{tree-sitter-wasm-parser-BECZRRZP.js → tree-sitter-wasm-parser-XSFCTQKS.js} +2 -2
  266. package/dist/cli/chunks/{types-FQSNLPWS.js → types-72CNMUHH.js} +2 -2
  267. package/dist/cli/chunks/unified-memory-EG7MANFS.js +2 -0
  268. package/dist/cli/chunks/unified-memory-hnsw-GBZ5WSQU.js +2 -0
  269. package/dist/cli/chunks/unified-persistence-NZRIIHU5.js +2 -0
  270. package/dist/cli/chunks/{upgrade-2ICXXV6D.js → upgrade-P6ZEWWUQ.js} +2 -2
  271. package/dist/cli/chunks/{validate-LPAUH2F4.js → validate-Q6HN2RTN.js} +2 -2
  272. package/dist/cli/chunks/{validate-swarm-VWVE2GM7.js → validate-swarm-JAOHXMJD.js} +2 -2
  273. package/dist/cli/chunks/{vibium-U3LBEI4K.js → vibium-2A7PDY4D.js} +2 -2
  274. package/dist/cli/chunks/visual-security-IEPJVARC.js +2 -0
  275. package/dist/cli/chunks/{web-tree-sitter-QGZXQPXU.js → web-tree-sitter-YE53Z4LF.js} +2 -2
  276. package/dist/cli/chunks/{windsurf-installer-GGLQJWUI.js → windsurf-installer-RPTAPUTS.js} +2 -2
  277. package/dist/cli/chunks/{witness-chain-47A2AXUS.js → witness-chain-CTWDOKUD.js} +2 -2
  278. package/dist/cli/chunks/witness-chain-ZNAEFUIY.js +2 -0
  279. package/dist/cli/chunks/{witness-key-manager-FVS7UOWM.js → witness-key-manager-UC3ZLEZI.js} +2 -2
  280. package/dist/cli/chunks/{workflow-KIZPLTYW.js → workflow-ZETHCXEN.js} +4 -4
  281. package/dist/cli/chunks/workflow-orchestrator-B4BRRXDJ.js +2 -0
  282. package/dist/cli/chunks/{wrappers-ER6XCMT6.js → wrappers-JJCXXF7Y.js} +2 -2
  283. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +16 -27
  284. package/dist/cli/commands/learning.js +66 -0
  285. package/dist/cli/commands/memory.js +3 -0
  286. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +2 -0
  287. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +14 -0
  288. package/dist/kernel/hybrid-backend.d.ts +3 -2
  289. package/dist/kernel/hybrid-backend.js +6 -2
  290. package/dist/kernel/interfaces.d.ts +12 -2
  291. package/dist/kernel/memory-backend.d.ts +3 -2
  292. package/dist/kernel/memory-backend.js +11 -1
  293. package/dist/kernel/native-hnsw-backend.js +8 -6
  294. package/dist/kernel/unified-memory.d.ts +3 -1
  295. package/dist/kernel/unified-memory.js +59 -9
  296. package/dist/learning/real-embeddings.js +1 -1
  297. package/dist/learning/sqlite-persistence.d.ts +3 -2
  298. package/dist/learning/sqlite-persistence.js +7 -8
  299. package/dist/mcp/bundle.js +277 -277
  300. package/dist/mcp/handlers/memory-handlers.d.ts +2 -0
  301. package/dist/mcp/handlers/memory-handlers.js +15 -7
  302. package/dist/mcp/types.d.ts +10 -0
  303. package/package.json +4 -2
  304. package/dist/cli/chunks/adapter-QGJAFSG5.js +0 -2
  305. package/dist/cli/chunks/aqe-learning-engine-ZU735SG7.js +0 -2
  306. package/dist/cli/chunks/base-EKTX2PRE.js +0 -2
  307. package/dist/cli/chunks/browser-workflow-BUPIMI3E.js +0 -2
  308. package/dist/cli/chunks/chunk-BKI5NFQ5.js +0 -2
  309. package/dist/cli/chunks/chunk-ELKWYWTD.js +0 -2
  310. package/dist/cli/chunks/chunk-WAELEQP5.js +0 -2
  311. package/dist/cli/chunks/chunk-X53GJW2E.js +0 -15
  312. package/dist/cli/chunks/client-M4WF22UT.js +0 -2
  313. package/dist/cli/chunks/core-handlers-3MNFXL44.js +0 -2
  314. package/dist/cli/chunks/cross-domain-router-Q5X6ZLJY.js +0 -2
  315. package/dist/cli/chunks/dream-5QB6JABW.js +0 -2
  316. package/dist/cli/chunks/heartbeat-scheduler-ZRLIMPKO.js +0 -2
  317. package/dist/cli/chunks/hnsw-adapter-R4VAEQ2B.js +0 -2
  318. package/dist/cli/chunks/hnsw-index-GTUOS6DF.js +0 -2
  319. package/dist/cli/chunks/hybrid-router-CYEXFWDT.js +0 -2
  320. package/dist/cli/chunks/impact-analyzer-HMJ7LAXR.js +0 -2
  321. package/dist/cli/chunks/init-wizard-OIK6S3PQ.js +0 -2
  322. package/dist/cli/chunks/kernel-NZCGR72Y.js +0 -2
  323. package/dist/cli/chunks/knowledge-graph-HA7XW46B.js +0 -2
  324. package/dist/cli/chunks/learning-O4ZXQVRE.js +0 -117
  325. package/dist/cli/chunks/llm-router-service-FVGQSXYC.js +0 -2
  326. package/dist/cli/chunks/load-test-IQTO35GE.js +0 -2
  327. package/dist/cli/chunks/memory-backend-YGSOJ7SI.js +0 -2
  328. package/dist/cli/chunks/memory-handlers-BJNFJZFP.js +0 -2
  329. package/dist/cli/chunks/pattern-null-store-4WN5O2PF.js +0 -2
  330. package/dist/cli/chunks/protocol-executor-EYTJXPXY.js +0 -2
  331. package/dist/cli/chunks/provider-manager-TM3JHYLL.js +0 -2
  332. package/dist/cli/chunks/qe-reasoning-bank-6JLFP3HE.js +0 -2
  333. package/dist/cli/chunks/queen-coordinator-OKGOKGHI.js +0 -2
  334. package/dist/cli/chunks/router-J45OF4SP.js +0 -2
  335. package/dist/cli/chunks/routing-feedback-VTZFH57X.js +0 -2
  336. package/dist/cli/chunks/rvf-native-adapter-BDPUBFNP.js +0 -2
  337. package/dist/cli/chunks/safe-db-FHJBWJIB.js +0 -2
  338. package/dist/cli/chunks/schedule-LP7YYT4P.js +0 -2
  339. package/dist/cli/chunks/scheduler-BOZWGKJG.js +0 -2
  340. package/dist/cli/chunks/sqlite-persistence-TDM36AHF.js +0 -2
  341. package/dist/cli/chunks/unified-memory-6PHUOZRH.js +0 -2
  342. package/dist/cli/chunks/unified-memory-hnsw-WYSFH3PS.js +0 -2
  343. package/dist/cli/chunks/unified-persistence-QBGHDCCO.js +0 -2
  344. package/dist/cli/chunks/visual-security-LH7DRCDS.js +0 -2
  345. package/dist/cli/chunks/witness-chain-2BDZOPJ2.js +0 -2
  346. package/dist/cli/chunks/workflow-orchestrator-UYOPFK2T.js +0 -2
@@ -59,6 +59,7 @@ export class ExperienceReplay {
59
59
  db = null;
60
60
  prepared = new Map();
61
61
  initialized = false;
62
+ initializationPromise = null;
62
63
  // Real HNSW index for O(log n) similarity search (150x-12,500x faster than linear scan)
63
64
  hnswIndex;
64
65
  // Mapping from HNSW numeric IDs to experience string IDs
@@ -95,6 +96,19 @@ export class ExperienceReplay {
95
96
  async initialize() {
96
97
  if (this.initialized)
97
98
  return;
99
+ if (this.initializationPromise)
100
+ return this.initializationPromise;
101
+ this.initializationPromise = this.initializeOnce();
102
+ try {
103
+ await this.initializationPromise;
104
+ }
105
+ catch (error) {
106
+ // Allow a later caller to retry after a failed initialization.
107
+ this.initializationPromise = null;
108
+ throw error;
109
+ }
110
+ }
111
+ async initializeOnce() {
98
112
  this.unifiedMemory = getUnifiedMemory();
99
113
  await this.unifiedMemory.initialize();
100
114
  this.db = this.unifiedMemory.getDatabase();
@@ -9,7 +9,7 @@
9
9
  * This is a facade over UnifiedMemoryManager that maintains
10
10
  * backward compatibility with existing MemoryBackend interface.
11
11
  */
12
- import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult } from './interfaces';
12
+ import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult, VectorSearchProvenance } from './interfaces';
13
13
  import { UnifiedMemoryManager } from './unified-memory';
14
14
  /**
15
15
  * SQLite connection configuration (legacy - kept for API compatibility)
@@ -123,7 +123,8 @@ export declare class HybridMemoryBackend implements MemoryBackend {
123
123
  * Vector similarity search
124
124
  * Now uses unified memory's persistent vector storage
125
125
  */
126
- vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
126
+ vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
127
+ getVectorSearchProvenance(): VectorSearchProvenance;
127
128
  /**
128
129
  * Store vector embedding
129
130
  * Now persists to unified memory.db
@@ -154,9 +154,9 @@ export class HybridMemoryBackend {
154
154
  * Vector similarity search
155
155
  * Now uses unified memory's persistent vector storage
156
156
  */
157
- async vectorSearch(embedding, k) {
157
+ async vectorSearch(embedding, k, keyPrefix) {
158
158
  this.ensureInitialized();
159
- const results = await this.unifiedMemory.vectorSearch(embedding, k);
159
+ const results = await this.unifiedMemory.vectorSearch(embedding, k, undefined, keyPrefix);
160
160
  // Convert to VectorSearchResult format
161
161
  return results.map(r => ({
162
162
  key: r.id,
@@ -164,6 +164,10 @@ export class HybridMemoryBackend {
164
164
  metadata: r.metadata,
165
165
  }));
166
166
  }
167
+ getVectorSearchProvenance() {
168
+ this.ensureInitialized();
169
+ return this.unifiedMemory.getVectorSearchProvenance();
170
+ }
167
171
  /**
168
172
  * Store vector embedding
169
173
  * Now persists to unified memory.db
@@ -215,8 +215,10 @@ export interface MemoryBackend extends Initializable, Disposable {
215
215
  has(key: string, options?: RetrieveOptions): Promise<boolean>;
216
216
  /** Search by pattern (`options.namespace` mirrors `get`). */
217
217
  search(pattern: string, limit?: number, options?: RetrieveOptions): Promise<string[]>;
218
- /** Vector similarity search (HNSW) */
219
- vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
218
+ /** Vector similarity search (HNSW), optionally scoped by logical key prefix. */
219
+ vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
220
+ /** Describe the index and guarantees used by vectorSearch. */
221
+ getVectorSearchProvenance?(): VectorSearchProvenance;
220
222
  /** Store vector embedding */
221
223
  storeVector(key: string, embedding: number[], metadata?: unknown): Promise<void>;
222
224
  /**
@@ -232,6 +234,14 @@ export interface MemoryBackend extends Initializable, Disposable {
232
234
  */
233
235
  hasCodeIntelligenceIndex(): Promise<boolean>;
234
236
  }
237
+ export interface VectorSearchProvenance {
238
+ backend: 'in-memory' | 'native-hnsw' | 'progressive-hnsw';
239
+ indexType: 'flat' | 'hnsw';
240
+ approximate: boolean;
241
+ estimatedRecall: number;
242
+ /** Largest K covered by request-independent HNSW traversal breadth. */
243
+ qualifiedMaxK?: number;
244
+ }
235
245
  export interface StoreOptions {
236
246
  ttl?: number;
237
247
  namespace?: string;
@@ -2,7 +2,7 @@
2
2
  * Agentic QE v3 - Memory Backend
3
3
  * Hybrid memory implementation (in-memory + optional persistence)
4
4
  */
5
- import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult } from './interfaces';
5
+ import { MemoryBackend, StoreOptions, RetrieveOptions, VectorSearchResult, VectorSearchProvenance } from './interfaces';
6
6
  export declare class InMemoryBackend implements MemoryBackend {
7
7
  private store;
8
8
  private vectors;
@@ -14,7 +14,8 @@ export declare class InMemoryBackend implements MemoryBackend {
14
14
  delete(key: string, options?: RetrieveOptions): Promise<boolean>;
15
15
  has(key: string, options?: RetrieveOptions): Promise<boolean>;
16
16
  search(pattern: string, limit?: number, options?: RetrieveOptions): Promise<string[]>;
17
- vectorSearch(embedding: number[], k: number): Promise<VectorSearchResult[]>;
17
+ vectorSearch(embedding: number[], k: number, keyPrefix?: string): Promise<VectorSearchResult[]>;
18
+ getVectorSearchProvenance(): VectorSearchProvenance;
18
19
  storeVector(key: string, embedding: number[], metadata?: unknown): Promise<void>;
19
20
  private buildKey;
20
21
  private cleanup;
@@ -76,9 +76,11 @@ export class InMemoryBackend {
76
76
  }
77
77
  return results;
78
78
  }
79
- async vectorSearch(embedding, k) {
79
+ async vectorSearch(embedding, k, keyPrefix) {
80
80
  const results = [];
81
81
  for (const [key, entry] of this.vectors.entries()) {
82
+ if (keyPrefix && !key.startsWith(keyPrefix))
83
+ continue;
82
84
  const score = cosineSimilarity(embedding, entry.embedding);
83
85
  results.push({ key, score, metadata: entry.metadata });
84
86
  }
@@ -87,6 +89,14 @@ export class InMemoryBackend {
87
89
  .sort((a, b) => b.score - a.score)
88
90
  .slice(0, k);
89
91
  }
92
+ getVectorSearchProvenance() {
93
+ return {
94
+ backend: 'in-memory',
95
+ indexType: 'flat',
96
+ approximate: false,
97
+ estimatedRecall: 1,
98
+ };
99
+ }
90
100
  async storeVector(key, embedding, metadata) {
91
101
  this.vectors.set(key, { embedding, metadata });
92
102
  }
@@ -275,12 +275,14 @@ export class NativeHnswBackend {
275
275
  const start = performance.now();
276
276
  const normalizedQuery = this.normalizeVector(query);
277
277
  const actualK = Math.min(k, this.liveIds.size);
278
- // Overshoot k by 2x (capped at index size) so that defensive dedup
279
- // below can drop any duplicate-label entries hnswlib may return after
280
- // long add/remove churn and still leave us with at least k unique
281
- // results when possible.
282
- const overshoot = Math.min(actualK * 2, this.liveIds.size);
283
- const native = this.nativeIndex.searchKnn(toNumberArray(normalizedQuery), overshoot);
278
+ // Keep the HNSW traversal breadth independent of the requested result
279
+ // count throughout the index's qualified range. hnswlib effectively uses
280
+ // max(k, efSearch) as its candidate breadth, so forwarding small K values
281
+ // directly can make top-20 and top-100 explore different graphs. Query a
282
+ // stable efSearch-sized pool with 2x defensive dedup headroom, then
283
+ // truncate. Requests above efSearch remain approximate and use 2x their K.
284
+ const searchBreadth = Math.min(this.liveIds.size, Math.max(actualK, this.config.efSearch) * 2);
285
+ const native = this.nativeIndex.searchKnn(toNumberArray(normalizedQuery), searchBreadth);
284
286
  // Convert hnswlib-node distances to similarity scores.
285
287
  // cosine space: distance = 1 - cos_sim, so similarity = 1 - distance
286
288
  // l2 space: distance = sum((x_i - y_i)^2), no clean similarity;
@@ -22,6 +22,7 @@
22
22
  * - unified-memory.ts: UnifiedMemoryManager class (this file, facade)
23
23
  */
24
24
  import { type Database as DatabaseType, type Statement } from 'better-sqlite3';
25
+ import type { VectorSearchProvenance } from './interfaces.js';
25
26
  export { validateTableName, ALLOWED_TABLE_NAMES } from '../shared/sql-safety.js';
26
27
  export { BinaryHeap, UnifiedHnswIndex, createHnswIndex } from './unified-memory-hnsw.js';
27
28
  import { type CRDTStore, type CRDTStoreState, type CRDTStoreDelta } from '../memory/crdt/index.js';
@@ -157,11 +158,12 @@ export declare class UnifiedMemoryManager {
157
158
  metadata?: unknown;
158
159
  } | undefined>;
159
160
  vectorDelete(id: string): Promise<boolean>;
160
- vectorSearch(query: number[], k?: number, namespace?: string): Promise<Array<{
161
+ vectorSearch(query: number[], k?: number, namespace?: string, keyPrefix?: string): Promise<Array<{
161
162
  id: string;
162
163
  score: number;
163
164
  metadata?: unknown;
164
165
  }>>;
166
+ getVectorSearchProvenance(): VectorSearchProvenance;
165
167
  vectorCount(namespace?: string): Promise<number>;
166
168
  /**
167
169
  * Count rows in a table. Used by fleet_status to report learning metrics.
@@ -27,7 +27,7 @@ import { toErrorMessage } from '../shared/error-utils.js';
27
27
  import * as fs from 'fs';
28
28
  import * as os from 'os';
29
29
  import * as path from 'path';
30
- import { MEMORY_CONSTANTS } from './constants.js';
30
+ import { HNSW_CONSTANTS, MEMORY_CONSTANTS } from './constants.js';
31
31
  import { LoggerFactory } from '../logging/index.js';
32
32
  import { HashChainGate } from '../integrations/ruvector/proof-gate.js';
33
33
  const logger = LoggerFactory.create('unified-memory');
@@ -733,23 +733,52 @@ export class UnifiedMemoryManager {
733
733
  this.vectorIndex.remove(id);
734
734
  return result.changes > 0;
735
735
  }
736
- async vectorSearch(query, k = 10, namespace) {
736
+ async vectorSearch(query, k = 10, namespace, keyPrefix) {
737
737
  this.ensureInitialized();
738
+ if (!Number.isInteger(k) || k <= 0)
739
+ return [];
738
740
  if (!this.vectorsLoaded) {
739
741
  await this.loadVectorIndex();
740
742
  }
741
- const results = this.vectorIndex.search(query, k * 2);
743
+ // Logical namespaces are encoded in vector ids (`namespace:key`), while
744
+ // the vectors table namespace identifies the physical backend. Widen the
745
+ // ANN query until enough logical matches are found so global top-K results
746
+ // cannot hide a valid namespaced hit.
747
+ const indexSize = this.vectorIndex.size();
748
+ // Unscoped searches need exactly K ranked candidates. Let the backend use
749
+ // its request-independent efSearch breadth so changing K within that
750
+ // qualified range cannot change the traversal. Logical namespace filters
751
+ // still require oversampling and iterative expansion because matching
752
+ // keys may be hidden behind global neighbors from other namespaces.
753
+ const isScoped = Boolean(namespace || keyPrefix);
754
+ let candidateCount = Math.min(indexSize, Math.max(isScoped ? k * 2 : k, 1));
755
+ const namespaceRows = namespace
756
+ ? this.db.prepare('SELECT id, namespace, metadata FROM vectors WHERE namespace = ?').all(namespace)
757
+ : undefined;
758
+ const namespaceMap = namespaceRows
759
+ ? new Map(namespaceRows.map(row => [row.id, row]))
760
+ : undefined;
761
+ let results = this.vectorIndex.search(query, candidateCount);
762
+ while (isScoped &&
763
+ results.filter(result => (!keyPrefix || result.id.startsWith(keyPrefix)) &&
764
+ (!namespaceMap || namespaceMap.has(result.id))).length < k &&
765
+ candidateCount < indexSize) {
766
+ candidateCount = Math.min(indexSize, candidateCount * 2);
767
+ results = this.vectorIndex.search(query, candidateCount);
768
+ }
742
769
  if (results.length === 0)
743
770
  return [];
744
- const ids = results.map(r => r.id);
745
- const placeholders = ids.map(() => '?').join(',');
746
- const rows = this.db.prepare(`SELECT id, namespace, metadata FROM vectors WHERE id IN (${placeholders})`).all(...ids);
747
- const metadataMap = new Map(rows.map(row => [row.id, row]));
771
+ const metadataMap = namespaceMap ?? (() => {
772
+ const ids = results.map(r => r.id);
773
+ const placeholders = ids.map(() => '?').join(',');
774
+ const rows = this.db.prepare(`SELECT id, namespace, metadata FROM vectors WHERE id IN (${placeholders})`).all(...ids);
775
+ return new Map(rows.map(row => [row.id, row]));
776
+ })();
748
777
  if (namespace) {
749
778
  const filteredResults = [];
750
779
  for (const result of results) {
751
780
  const row = metadataMap.get(result.id);
752
- if (row && row.namespace === namespace) {
781
+ if (row && row.namespace === namespace && (!keyPrefix || result.id.startsWith(keyPrefix))) {
753
782
  filteredResults.push({
754
783
  id: result.id, score: result.score,
755
784
  metadata: row.metadata ? safeJsonParse(row.metadata) : undefined,
@@ -760,7 +789,10 @@ export class UnifiedMemoryManager {
760
789
  }
761
790
  return filteredResults;
762
791
  }
763
- return results.slice(0, k).map(result => {
792
+ const scopedResults = keyPrefix
793
+ ? results.filter(result => result.id.startsWith(keyPrefix)).slice(0, k)
794
+ : results.slice(0, k);
795
+ return scopedResults.map(result => {
764
796
  const row = metadataMap.get(result.id);
765
797
  return {
766
798
  id: result.id, score: result.score,
@@ -768,6 +800,24 @@ export class UnifiedMemoryManager {
768
800
  };
769
801
  });
770
802
  }
803
+ getVectorSearchProvenance() {
804
+ const provider = this.vectorIndex.getProvider();
805
+ if (!provider.isNativeBackend()) {
806
+ return {
807
+ backend: 'progressive-hnsw',
808
+ indexType: 'flat',
809
+ approximate: false,
810
+ estimatedRecall: 1,
811
+ };
812
+ }
813
+ return {
814
+ backend: 'native-hnsw',
815
+ indexType: 'hnsw',
816
+ approximate: true,
817
+ estimatedRecall: this.vectorIndex.recall(),
818
+ qualifiedMaxK: HNSW_CONSTANTS.EF_SEARCH,
819
+ };
820
+ }
771
821
  async vectorCount(namespace) {
772
822
  this.ensureInitialized();
773
823
  if (namespace) {
@@ -137,7 +137,7 @@ async function initializeModel(config = {}) {
137
137
  catch {
138
138
  throw new Error('In-process embeddings require the optional package "@huggingface/transformers", ' +
139
139
  'which is not installed. Either run `npm install @huggingface/transformers`, or ' +
140
- 'configure an embedding endpoint (EmbeddingConfig.endpoint / AQE_EMBEDDING_ENDPOINT) ' +
140
+ 'configure an embedding endpoint (EmbeddingConfig.endpoint / AQE_EMBEDDER_ENDPOINT) ' +
141
141
  'so no local model is loaded.');
142
142
  }
143
143
  pipeline = transformers.pipeline;
@@ -224,8 +224,9 @@ export declare class SQLitePatternStore {
224
224
  };
225
225
  /**
226
226
  * Backfill embeddings for patterns that don't have them.
227
- * Uses real all-MiniLM-L6-v2 transformer embeddings via @xenova/transformers.
228
- * Falls back to hash-based embeddings if ONNX is unavailable.
227
+ * Uses real all-MiniLM-L6-v2 transformer embeddings via @huggingface/transformers
228
+ * or the configured external endpoint. Refuses hash proxies because mixing
229
+ * embedding spaces makes semantic retrieval results invalid.
229
230
  * Skips bench/test patterns (id LIKE 'bench-%').
230
231
  *
231
232
  * @param batchSize - Patterns per inference batch (default: 32, matches model batch size)
@@ -923,8 +923,9 @@ export class SQLitePatternStore {
923
923
  }
924
924
  /**
925
925
  * Backfill embeddings for patterns that don't have them.
926
- * Uses real all-MiniLM-L6-v2 transformer embeddings via @xenova/transformers.
927
- * Falls back to hash-based embeddings if ONNX is unavailable.
926
+ * Uses real all-MiniLM-L6-v2 transformer embeddings via @huggingface/transformers
927
+ * or the configured external endpoint. Refuses hash proxies because mixing
928
+ * embedding spaces makes semantic retrieval results invalid.
928
929
  * Skips bench/test patterns (id LIKE 'bench-%').
929
930
  *
930
931
  * @param batchSize - Patterns per inference batch (default: 32, matches model batch size)
@@ -957,7 +958,7 @@ export class SQLitePatternStore {
957
958
  let processed = 0;
958
959
  let skipped = 0;
959
960
  let errors = 0;
960
- let method = 'transformer';
961
+ const method = 'transformer';
961
962
  // Process in batches: compute embeddings async, then insert in sync transaction
962
963
  for (let i = 0; i < patternsWithout.length; i += batchSize) {
963
964
  const batch = patternsWithout.slice(i, i + batchSize);
@@ -996,11 +997,9 @@ export class SQLitePatternStore {
996
997
  throw new Error(`[SQLitePatternStore] external embedder endpoint failed during backfill; ` +
997
998
  `aborting to protect HNSW index. Original error: ${toErrorMessage(e)}`);
998
999
  }
999
- // In-process transformer path: hash fallback is acceptable because the
1000
- // entire index in this mode is hash-based anyway.
1001
- console.warn(`[SQLitePatternStore] Transformer unavailable, falling back to hash embeddings: ${toErrorMessage(e)}`);
1002
- method = 'hash-fallback';
1003
- embeddings = textsWithIds.map(t => hashEmbedding(t.text, dimension));
1000
+ throw new Error(`[SQLitePatternStore] semantic embedding unavailable; refusing to write hash proxies. ` +
1001
+ `Install @huggingface/transformers or configure AQE_EMBEDDER_ENDPOINT. ` +
1002
+ `Original error: ${toErrorMessage(e)}`);
1004
1003
  }
1005
1004
  // Insert computed embeddings in a sync transaction
1006
1005
  const embeddingTag = method === 'transformer' ? 'transformer-backfill' : 'hash-backfill';