ruvbot 0.1.0

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 (493) hide show
  1. package/.env.example +234 -0
  2. package/README.md +850 -0
  3. package/bin/cli.js +19 -0
  4. package/bin/ruvbot.js +47 -0
  5. package/dist/RuvBot.d.ts +125 -0
  6. package/dist/RuvBot.d.ts.map +1 -0
  7. package/dist/RuvBot.js +461 -0
  8. package/dist/RuvBot.js.map +1 -0
  9. package/dist/api/index.d.ts +27 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api/index.js +11 -0
  12. package/dist/api/index.js.map +1 -0
  13. package/dist/channels/ChannelRegistry.d.ts +94 -0
  14. package/dist/channels/ChannelRegistry.d.ts.map +1 -0
  15. package/dist/channels/ChannelRegistry.js +231 -0
  16. package/dist/channels/ChannelRegistry.js.map +1 -0
  17. package/dist/channels/adapters/BaseAdapter.d.ts +120 -0
  18. package/dist/channels/adapters/BaseAdapter.d.ts.map +1 -0
  19. package/dist/channels/adapters/BaseAdapter.js +104 -0
  20. package/dist/channels/adapters/BaseAdapter.js.map +1 -0
  21. package/dist/channels/adapters/DiscordAdapter.d.ts +67 -0
  22. package/dist/channels/adapters/DiscordAdapter.d.ts.map +1 -0
  23. package/dist/channels/adapters/DiscordAdapter.js +164 -0
  24. package/dist/channels/adapters/DiscordAdapter.js.map +1 -0
  25. package/dist/channels/adapters/SlackAdapter.d.ts +62 -0
  26. package/dist/channels/adapters/SlackAdapter.d.ts.map +1 -0
  27. package/dist/channels/adapters/SlackAdapter.js +160 -0
  28. package/dist/channels/adapters/SlackAdapter.js.map +1 -0
  29. package/dist/channels/adapters/TelegramAdapter.d.ts +93 -0
  30. package/dist/channels/adapters/TelegramAdapter.d.ts.map +1 -0
  31. package/dist/channels/adapters/TelegramAdapter.js +171 -0
  32. package/dist/channels/adapters/TelegramAdapter.js.map +1 -0
  33. package/dist/channels/index.d.ts +11 -0
  34. package/dist/channels/index.d.ts.map +1 -0
  35. package/dist/channels/index.js +26 -0
  36. package/dist/channels/index.js.map +1 -0
  37. package/dist/cli/commands/agent.d.ts +15 -0
  38. package/dist/cli/commands/agent.d.ts.map +1 -0
  39. package/dist/cli/commands/agent.js +271 -0
  40. package/dist/cli/commands/agent.js.map +1 -0
  41. package/dist/cli/commands/doctor.d.ts +17 -0
  42. package/dist/cli/commands/doctor.d.ts.map +1 -0
  43. package/dist/cli/commands/doctor.js +425 -0
  44. package/dist/cli/commands/doctor.js.map +1 -0
  45. package/dist/cli/commands/index.d.ts +11 -0
  46. package/dist/cli/commands/index.d.ts.map +1 -0
  47. package/dist/cli/commands/index.js +19 -0
  48. package/dist/cli/commands/index.js.map +1 -0
  49. package/dist/cli/commands/memory.d.ts +11 -0
  50. package/dist/cli/commands/memory.d.ts.map +1 -0
  51. package/dist/cli/commands/memory.js +180 -0
  52. package/dist/cli/commands/memory.js.map +1 -0
  53. package/dist/cli/commands/plugins.d.ts +12 -0
  54. package/dist/cli/commands/plugins.d.ts.map +1 -0
  55. package/dist/cli/commands/plugins.js +315 -0
  56. package/dist/cli/commands/plugins.js.map +1 -0
  57. package/dist/cli/commands/security.d.ts +14 -0
  58. package/dist/cli/commands/security.d.ts.map +1 -0
  59. package/dist/cli/commands/security.js +285 -0
  60. package/dist/cli/commands/security.js.map +1 -0
  61. package/dist/cli/index.d.ts +25 -0
  62. package/dist/cli/index.d.ts.map +1 -0
  63. package/dist/cli/index.js +415 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/core/BotConfig.d.ts +611 -0
  66. package/dist/core/BotConfig.d.ts.map +1 -0
  67. package/dist/core/BotConfig.js +224 -0
  68. package/dist/core/BotConfig.js.map +1 -0
  69. package/dist/core/BotState.d.ts +59 -0
  70. package/dist/core/BotState.d.ts.map +1 -0
  71. package/dist/core/BotState.js +224 -0
  72. package/dist/core/BotState.js.map +1 -0
  73. package/dist/core/agent/index.d.ts +51 -0
  74. package/dist/core/agent/index.d.ts.map +1 -0
  75. package/dist/core/agent/index.js +6 -0
  76. package/dist/core/agent/index.js.map +1 -0
  77. package/dist/core/entities/Agent.d.ts +42 -0
  78. package/dist/core/entities/Agent.d.ts.map +1 -0
  79. package/dist/core/entities/Agent.js +88 -0
  80. package/dist/core/entities/Agent.js.map +1 -0
  81. package/dist/core/entities/Message.d.ts +85 -0
  82. package/dist/core/entities/Message.d.ts.map +1 -0
  83. package/dist/core/entities/Message.js +158 -0
  84. package/dist/core/entities/Message.js.map +1 -0
  85. package/dist/core/entities/Session.d.ts +86 -0
  86. package/dist/core/entities/Session.d.ts.map +1 -0
  87. package/dist/core/entities/Session.js +186 -0
  88. package/dist/core/entities/Session.js.map +1 -0
  89. package/dist/core/entities/Skill.d.ts +83 -0
  90. package/dist/core/entities/Skill.d.ts.map +1 -0
  91. package/dist/core/entities/Skill.js +192 -0
  92. package/dist/core/entities/Skill.js.map +1 -0
  93. package/dist/core/entities/index.d.ts +8 -0
  94. package/dist/core/entities/index.d.ts.map +1 -0
  95. package/dist/core/entities/index.js +24 -0
  96. package/dist/core/entities/index.js.map +1 -0
  97. package/dist/core/entities/types.d.ts +677 -0
  98. package/dist/core/entities/types.d.ts.map +1 -0
  99. package/dist/core/entities/types.js +198 -0
  100. package/dist/core/entities/types.js.map +1 -0
  101. package/dist/core/errors.d.ts +76 -0
  102. package/dist/core/errors.d.ts.map +1 -0
  103. package/dist/core/errors.js +136 -0
  104. package/dist/core/errors.js.map +1 -0
  105. package/dist/core/index.d.ts +10 -0
  106. package/dist/core/index.d.ts.map +1 -0
  107. package/dist/core/index.js +25 -0
  108. package/dist/core/index.js.map +1 -0
  109. package/dist/core/session/index.d.ts +59 -0
  110. package/dist/core/session/index.d.ts.map +1 -0
  111. package/dist/core/session/index.js +6 -0
  112. package/dist/core/session/index.js.map +1 -0
  113. package/dist/core/skill/index.d.ts +75 -0
  114. package/dist/core/skill/index.d.ts.map +1 -0
  115. package/dist/core/skill/index.js +32 -0
  116. package/dist/core/skill/index.js.map +1 -0
  117. package/dist/core/types.d.ts +248 -0
  118. package/dist/core/types.d.ts.map +1 -0
  119. package/dist/core/types.js +14 -0
  120. package/dist/core/types.js.map +1 -0
  121. package/dist/esm/RuvBot.d.ts +125 -0
  122. package/dist/esm/RuvBot.d.ts.map +1 -0
  123. package/dist/esm/RuvBot.js +452 -0
  124. package/dist/esm/RuvBot.js.map +1 -0
  125. package/dist/esm/api/index.d.ts +27 -0
  126. package/dist/esm/api/index.d.ts.map +1 -0
  127. package/dist/esm/api/index.js +8 -0
  128. package/dist/esm/api/index.js.map +1 -0
  129. package/dist/esm/channels/ChannelRegistry.d.ts +94 -0
  130. package/dist/esm/channels/ChannelRegistry.d.ts.map +1 -0
  131. package/dist/esm/channels/ChannelRegistry.js +226 -0
  132. package/dist/esm/channels/ChannelRegistry.js.map +1 -0
  133. package/dist/esm/channels/adapters/BaseAdapter.d.ts +120 -0
  134. package/dist/esm/channels/adapters/BaseAdapter.d.ts.map +1 -0
  135. package/dist/esm/channels/adapters/BaseAdapter.js +100 -0
  136. package/dist/esm/channels/adapters/BaseAdapter.js.map +1 -0
  137. package/dist/esm/channels/adapters/DiscordAdapter.d.ts +67 -0
  138. package/dist/esm/channels/adapters/DiscordAdapter.d.ts.map +1 -0
  139. package/dist/esm/channels/adapters/DiscordAdapter.js +159 -0
  140. package/dist/esm/channels/adapters/DiscordAdapter.js.map +1 -0
  141. package/dist/esm/channels/adapters/SlackAdapter.d.ts +62 -0
  142. package/dist/esm/channels/adapters/SlackAdapter.d.ts.map +1 -0
  143. package/dist/esm/channels/adapters/SlackAdapter.js +155 -0
  144. package/dist/esm/channels/adapters/SlackAdapter.js.map +1 -0
  145. package/dist/esm/channels/adapters/TelegramAdapter.d.ts +93 -0
  146. package/dist/esm/channels/adapters/TelegramAdapter.d.ts.map +1 -0
  147. package/dist/esm/channels/adapters/TelegramAdapter.js +166 -0
  148. package/dist/esm/channels/adapters/TelegramAdapter.js.map +1 -0
  149. package/dist/esm/channels/index.d.ts +11 -0
  150. package/dist/esm/channels/index.d.ts.map +1 -0
  151. package/dist/esm/channels/index.js +14 -0
  152. package/dist/esm/channels/index.js.map +1 -0
  153. package/dist/esm/cli/commands/agent.d.ts +15 -0
  154. package/dist/esm/cli/commands/agent.d.ts.map +1 -0
  155. package/dist/esm/cli/commands/agent.js +265 -0
  156. package/dist/esm/cli/commands/agent.js.map +1 -0
  157. package/dist/esm/cli/commands/doctor.d.ts +17 -0
  158. package/dist/esm/cli/commands/doctor.d.ts.map +1 -0
  159. package/dist/esm/cli/commands/doctor.js +419 -0
  160. package/dist/esm/cli/commands/doctor.js.map +1 -0
  161. package/dist/esm/cli/commands/index.d.ts +11 -0
  162. package/dist/esm/cli/commands/index.d.ts.map +1 -0
  163. package/dist/esm/cli/commands/index.js +11 -0
  164. package/dist/esm/cli/commands/index.js.map +1 -0
  165. package/dist/esm/cli/commands/memory.d.ts +11 -0
  166. package/dist/esm/cli/commands/memory.d.ts.map +1 -0
  167. package/dist/esm/cli/commands/memory.js +174 -0
  168. package/dist/esm/cli/commands/memory.js.map +1 -0
  169. package/dist/esm/cli/commands/plugins.d.ts +12 -0
  170. package/dist/esm/cli/commands/plugins.d.ts.map +1 -0
  171. package/dist/esm/cli/commands/plugins.js +309 -0
  172. package/dist/esm/cli/commands/plugins.js.map +1 -0
  173. package/dist/esm/cli/commands/security.d.ts +14 -0
  174. package/dist/esm/cli/commands/security.d.ts.map +1 -0
  175. package/dist/esm/cli/commands/security.js +279 -0
  176. package/dist/esm/cli/commands/security.js.map +1 -0
  177. package/dist/esm/cli/index.d.ts +25 -0
  178. package/dist/esm/cli/index.d.ts.map +1 -0
  179. package/dist/esm/cli/index.js +408 -0
  180. package/dist/esm/cli/index.js.map +1 -0
  181. package/dist/esm/core/BotConfig.d.ts +611 -0
  182. package/dist/esm/core/BotConfig.d.ts.map +1 -0
  183. package/dist/esm/core/BotConfig.js +220 -0
  184. package/dist/esm/core/BotConfig.js.map +1 -0
  185. package/dist/esm/core/BotState.d.ts +59 -0
  186. package/dist/esm/core/BotState.d.ts.map +1 -0
  187. package/dist/esm/core/BotState.js +220 -0
  188. package/dist/esm/core/BotState.js.map +1 -0
  189. package/dist/esm/core/agent/index.d.ts +51 -0
  190. package/dist/esm/core/agent/index.d.ts.map +1 -0
  191. package/dist/esm/core/agent/index.js +5 -0
  192. package/dist/esm/core/agent/index.js.map +1 -0
  193. package/dist/esm/core/entities/Agent.d.ts +42 -0
  194. package/dist/esm/core/entities/Agent.d.ts.map +1 -0
  195. package/dist/esm/core/entities/Agent.js +84 -0
  196. package/dist/esm/core/entities/Agent.js.map +1 -0
  197. package/dist/esm/core/entities/Message.d.ts +85 -0
  198. package/dist/esm/core/entities/Message.d.ts.map +1 -0
  199. package/dist/esm/core/entities/Message.js +154 -0
  200. package/dist/esm/core/entities/Message.js.map +1 -0
  201. package/dist/esm/core/entities/Session.d.ts +86 -0
  202. package/dist/esm/core/entities/Session.d.ts.map +1 -0
  203. package/dist/esm/core/entities/Session.js +182 -0
  204. package/dist/esm/core/entities/Session.js.map +1 -0
  205. package/dist/esm/core/entities/Skill.d.ts +83 -0
  206. package/dist/esm/core/entities/Skill.d.ts.map +1 -0
  207. package/dist/esm/core/entities/Skill.js +188 -0
  208. package/dist/esm/core/entities/Skill.js.map +1 -0
  209. package/dist/esm/core/entities/index.d.ts +8 -0
  210. package/dist/esm/core/entities/index.d.ts.map +1 -0
  211. package/dist/esm/core/entities/index.js +8 -0
  212. package/dist/esm/core/entities/index.js.map +1 -0
  213. package/dist/esm/core/entities/types.d.ts +677 -0
  214. package/dist/esm/core/entities/types.d.ts.map +1 -0
  215. package/dist/esm/core/entities/types.js +195 -0
  216. package/dist/esm/core/entities/types.js.map +1 -0
  217. package/dist/esm/core/errors.d.ts +76 -0
  218. package/dist/esm/core/errors.d.ts.map +1 -0
  219. package/dist/esm/core/errors.js +120 -0
  220. package/dist/esm/core/errors.js.map +1 -0
  221. package/dist/esm/core/index.d.ts +10 -0
  222. package/dist/esm/core/index.d.ts.map +1 -0
  223. package/dist/esm/core/index.js +9 -0
  224. package/dist/esm/core/index.js.map +1 -0
  225. package/dist/esm/core/session/index.d.ts +59 -0
  226. package/dist/esm/core/session/index.d.ts.map +1 -0
  227. package/dist/esm/core/session/index.js +5 -0
  228. package/dist/esm/core/session/index.js.map +1 -0
  229. package/dist/esm/core/skill/index.d.ts +75 -0
  230. package/dist/esm/core/skill/index.d.ts.map +1 -0
  231. package/dist/esm/core/skill/index.js +28 -0
  232. package/dist/esm/core/skill/index.js.map +1 -0
  233. package/dist/esm/core/types.d.ts +248 -0
  234. package/dist/esm/core/types.d.ts.map +1 -0
  235. package/dist/esm/core/types.js +10 -0
  236. package/dist/esm/core/types.js.map +1 -0
  237. package/dist/esm/index.d.ts +26 -0
  238. package/dist/esm/index.d.ts.map +1 -0
  239. package/dist/esm/index.js +32 -0
  240. package/dist/esm/index.js.map +1 -0
  241. package/dist/esm/infrastructure/index.d.ts +9 -0
  242. package/dist/esm/infrastructure/index.d.ts.map +1 -0
  243. package/dist/esm/infrastructure/index.js +10 -0
  244. package/dist/esm/infrastructure/index.js.map +1 -0
  245. package/dist/esm/infrastructure/messaging/index.d.ts +43 -0
  246. package/dist/esm/infrastructure/messaging/index.d.ts.map +1 -0
  247. package/dist/esm/infrastructure/messaging/index.js +5 -0
  248. package/dist/esm/infrastructure/messaging/index.js.map +1 -0
  249. package/dist/esm/infrastructure/persistence/index.d.ts +62 -0
  250. package/dist/esm/infrastructure/persistence/index.d.ts.map +1 -0
  251. package/dist/esm/infrastructure/persistence/index.js +5 -0
  252. package/dist/esm/infrastructure/persistence/index.js.map +1 -0
  253. package/dist/esm/infrastructure/workers/index.d.ts +47 -0
  254. package/dist/esm/infrastructure/workers/index.d.ts.map +1 -0
  255. package/dist/esm/infrastructure/workers/index.js +13 -0
  256. package/dist/esm/infrastructure/workers/index.js.map +1 -0
  257. package/dist/esm/integration/index.d.ts +9 -0
  258. package/dist/esm/integration/index.d.ts.map +1 -0
  259. package/dist/esm/integration/index.js +9 -0
  260. package/dist/esm/integration/index.js.map +1 -0
  261. package/dist/esm/integration/providers/AnthropicProvider.d.ts +48 -0
  262. package/dist/esm/integration/providers/AnthropicProvider.d.ts.map +1 -0
  263. package/dist/esm/integration/providers/AnthropicProvider.js +292 -0
  264. package/dist/esm/integration/providers/AnthropicProvider.js.map +1 -0
  265. package/dist/esm/integration/providers/OpenRouterProvider.d.ts +62 -0
  266. package/dist/esm/integration/providers/OpenRouterProvider.d.ts.map +1 -0
  267. package/dist/esm/integration/providers/OpenRouterProvider.js +445 -0
  268. package/dist/esm/integration/providers/OpenRouterProvider.js.map +1 -0
  269. package/dist/esm/integration/providers/index.d.ts +67 -0
  270. package/dist/esm/integration/providers/index.d.ts.map +1 -0
  271. package/dist/esm/integration/providers/index.js +7 -0
  272. package/dist/esm/integration/providers/index.js.map +1 -0
  273. package/dist/esm/integration/slack/index.d.ts +67 -0
  274. package/dist/esm/integration/slack/index.d.ts.map +1 -0
  275. package/dist/esm/integration/slack/index.js +5 -0
  276. package/dist/esm/integration/slack/index.js.map +1 -0
  277. package/dist/esm/integration/webhooks/index.d.ts +43 -0
  278. package/dist/esm/integration/webhooks/index.d.ts.map +1 -0
  279. package/dist/esm/integration/webhooks/index.js +5 -0
  280. package/dist/esm/integration/webhooks/index.js.map +1 -0
  281. package/dist/esm/integrations/index.d.ts +38 -0
  282. package/dist/esm/integrations/index.d.ts.map +1 -0
  283. package/dist/esm/integrations/index.js +8 -0
  284. package/dist/esm/integrations/index.js.map +1 -0
  285. package/dist/esm/learning/embeddings/WasmEmbedder.d.ts +61 -0
  286. package/dist/esm/learning/embeddings/WasmEmbedder.d.ts.map +1 -0
  287. package/dist/esm/learning/embeddings/WasmEmbedder.js +219 -0
  288. package/dist/esm/learning/embeddings/WasmEmbedder.js.map +1 -0
  289. package/dist/esm/learning/embeddings/index.d.ts +35 -0
  290. package/dist/esm/learning/embeddings/index.d.ts.map +1 -0
  291. package/dist/esm/learning/embeddings/index.js +5 -0
  292. package/dist/esm/learning/embeddings/index.js.map +1 -0
  293. package/dist/esm/learning/index.d.ts +12 -0
  294. package/dist/esm/learning/index.d.ts.map +1 -0
  295. package/dist/esm/learning/index.js +12 -0
  296. package/dist/esm/learning/index.js.map +1 -0
  297. package/dist/esm/learning/memory/MemoryManager.d.ts +155 -0
  298. package/dist/esm/learning/memory/MemoryManager.d.ts.map +1 -0
  299. package/dist/esm/learning/memory/MemoryManager.js +327 -0
  300. package/dist/esm/learning/memory/MemoryManager.js.map +1 -0
  301. package/dist/esm/learning/patterns/index.d.ts +64 -0
  302. package/dist/esm/learning/patterns/index.d.ts.map +1 -0
  303. package/dist/esm/learning/patterns/index.js +5 -0
  304. package/dist/esm/learning/patterns/index.js.map +1 -0
  305. package/dist/esm/learning/search/BM25Index.d.ts +88 -0
  306. package/dist/esm/learning/search/BM25Index.d.ts.map +1 -0
  307. package/dist/esm/learning/search/BM25Index.js +246 -0
  308. package/dist/esm/learning/search/BM25Index.js.map +1 -0
  309. package/dist/esm/learning/search/HybridSearch.d.ts +85 -0
  310. package/dist/esm/learning/search/HybridSearch.d.ts.map +1 -0
  311. package/dist/esm/learning/search/HybridSearch.js +238 -0
  312. package/dist/esm/learning/search/HybridSearch.js.map +1 -0
  313. package/dist/esm/learning/search/index.d.ts +10 -0
  314. package/dist/esm/learning/search/index.d.ts.map +1 -0
  315. package/dist/esm/learning/search/index.js +8 -0
  316. package/dist/esm/learning/search/index.js.map +1 -0
  317. package/dist/esm/learning/training/index.d.ts +95 -0
  318. package/dist/esm/learning/training/index.d.ts.map +1 -0
  319. package/dist/esm/learning/training/index.js +5 -0
  320. package/dist/esm/learning/training/index.js.map +1 -0
  321. package/dist/esm/plugins/PluginManager.d.ts +316 -0
  322. package/dist/esm/plugins/PluginManager.d.ts.map +1 -0
  323. package/dist/esm/plugins/PluginManager.js +481 -0
  324. package/dist/esm/plugins/PluginManager.js.map +1 -0
  325. package/dist/esm/plugins/index.d.ts +8 -0
  326. package/dist/esm/plugins/index.d.ts.map +1 -0
  327. package/dist/esm/plugins/index.js +8 -0
  328. package/dist/esm/plugins/index.js.map +1 -0
  329. package/dist/esm/security/AIDefenceGuard.d.ts +212 -0
  330. package/dist/esm/security/AIDefenceGuard.d.ts.map +1 -0
  331. package/dist/esm/security/AIDefenceGuard.js +570 -0
  332. package/dist/esm/security/AIDefenceGuard.js.map +1 -0
  333. package/dist/esm/security/index.d.ts +8 -0
  334. package/dist/esm/security/index.d.ts.map +1 -0
  335. package/dist/esm/security/index.js +8 -0
  336. package/dist/esm/security/index.js.map +1 -0
  337. package/dist/esm/server.d.ts +11 -0
  338. package/dist/esm/server.d.ts.map +1 -0
  339. package/dist/esm/server.js +405 -0
  340. package/dist/esm/server.js.map +1 -0
  341. package/dist/esm/skills/index.d.ts +15 -0
  342. package/dist/esm/skills/index.d.ts.map +1 -0
  343. package/dist/esm/skills/index.js +9 -0
  344. package/dist/esm/skills/index.js.map +1 -0
  345. package/dist/esm/swarm/ByzantineConsensus.d.ts +110 -0
  346. package/dist/esm/swarm/ByzantineConsensus.d.ts.map +1 -0
  347. package/dist/esm/swarm/ByzantineConsensus.js +267 -0
  348. package/dist/esm/swarm/ByzantineConsensus.js.map +1 -0
  349. package/dist/esm/swarm/SwarmCoordinator.d.ts +141 -0
  350. package/dist/esm/swarm/SwarmCoordinator.d.ts.map +1 -0
  351. package/dist/esm/swarm/SwarmCoordinator.js +381 -0
  352. package/dist/esm/swarm/SwarmCoordinator.js.map +1 -0
  353. package/dist/esm/swarm/index.d.ts +8 -0
  354. package/dist/esm/swarm/index.d.ts.map +1 -0
  355. package/dist/esm/swarm/index.js +8 -0
  356. package/dist/esm/swarm/index.js.map +1 -0
  357. package/dist/esm/types.d.ts +120 -0
  358. package/dist/esm/types.d.ts.map +1 -0
  359. package/dist/esm/types.js +10 -0
  360. package/dist/esm/types.js.map +1 -0
  361. package/dist/esm/utils/logger.d.ts +23 -0
  362. package/dist/esm/utils/logger.d.ts.map +1 -0
  363. package/dist/esm/utils/logger.js +77 -0
  364. package/dist/esm/utils/logger.js.map +1 -0
  365. package/dist/index.d.ts +26 -0
  366. package/dist/index.d.ts.map +1 -0
  367. package/dist/index.js +52 -0
  368. package/dist/index.js.map +1 -0
  369. package/dist/infrastructure/index.d.ts +9 -0
  370. package/dist/infrastructure/index.d.ts.map +1 -0
  371. package/dist/infrastructure/index.js +28 -0
  372. package/dist/infrastructure/index.js.map +1 -0
  373. package/dist/infrastructure/messaging/index.d.ts +43 -0
  374. package/dist/infrastructure/messaging/index.d.ts.map +1 -0
  375. package/dist/infrastructure/messaging/index.js +6 -0
  376. package/dist/infrastructure/messaging/index.js.map +1 -0
  377. package/dist/infrastructure/persistence/index.d.ts +62 -0
  378. package/dist/infrastructure/persistence/index.d.ts.map +1 -0
  379. package/dist/infrastructure/persistence/index.js +6 -0
  380. package/dist/infrastructure/persistence/index.js.map +1 -0
  381. package/dist/infrastructure/workers/index.d.ts +47 -0
  382. package/dist/infrastructure/workers/index.d.ts.map +1 -0
  383. package/dist/infrastructure/workers/index.js +16 -0
  384. package/dist/infrastructure/workers/index.js.map +1 -0
  385. package/dist/integration/index.d.ts +9 -0
  386. package/dist/integration/index.d.ts.map +1 -0
  387. package/dist/integration/index.js +25 -0
  388. package/dist/integration/index.js.map +1 -0
  389. package/dist/integration/providers/AnthropicProvider.d.ts +48 -0
  390. package/dist/integration/providers/AnthropicProvider.d.ts.map +1 -0
  391. package/dist/integration/providers/AnthropicProvider.js +297 -0
  392. package/dist/integration/providers/AnthropicProvider.js.map +1 -0
  393. package/dist/integration/providers/OpenRouterProvider.d.ts +62 -0
  394. package/dist/integration/providers/OpenRouterProvider.d.ts.map +1 -0
  395. package/dist/integration/providers/OpenRouterProvider.js +452 -0
  396. package/dist/integration/providers/OpenRouterProvider.js.map +1 -0
  397. package/dist/integration/providers/index.d.ts +67 -0
  398. package/dist/integration/providers/index.d.ts.map +1 -0
  399. package/dist/integration/providers/index.js +16 -0
  400. package/dist/integration/providers/index.js.map +1 -0
  401. package/dist/integration/slack/index.d.ts +67 -0
  402. package/dist/integration/slack/index.d.ts.map +1 -0
  403. package/dist/integration/slack/index.js +6 -0
  404. package/dist/integration/slack/index.js.map +1 -0
  405. package/dist/integration/webhooks/index.d.ts +43 -0
  406. package/dist/integration/webhooks/index.d.ts.map +1 -0
  407. package/dist/integration/webhooks/index.js +6 -0
  408. package/dist/integration/webhooks/index.js.map +1 -0
  409. package/dist/integrations/index.d.ts +38 -0
  410. package/dist/integrations/index.d.ts.map +1 -0
  411. package/dist/integrations/index.js +11 -0
  412. package/dist/integrations/index.js.map +1 -0
  413. package/dist/learning/embeddings/WasmEmbedder.d.ts +61 -0
  414. package/dist/learning/embeddings/WasmEmbedder.d.ts.map +1 -0
  415. package/dist/learning/embeddings/WasmEmbedder.js +224 -0
  416. package/dist/learning/embeddings/WasmEmbedder.js.map +1 -0
  417. package/dist/learning/embeddings/index.d.ts +35 -0
  418. package/dist/learning/embeddings/index.d.ts.map +1 -0
  419. package/dist/learning/embeddings/index.js +6 -0
  420. package/dist/learning/embeddings/index.js.map +1 -0
  421. package/dist/learning/index.d.ts +12 -0
  422. package/dist/learning/index.d.ts.map +1 -0
  423. package/dist/learning/index.js +28 -0
  424. package/dist/learning/index.js.map +1 -0
  425. package/dist/learning/memory/MemoryManager.d.ts +155 -0
  426. package/dist/learning/memory/MemoryManager.d.ts.map +1 -0
  427. package/dist/learning/memory/MemoryManager.js +332 -0
  428. package/dist/learning/memory/MemoryManager.js.map +1 -0
  429. package/dist/learning/patterns/index.d.ts +64 -0
  430. package/dist/learning/patterns/index.d.ts.map +1 -0
  431. package/dist/learning/patterns/index.js +6 -0
  432. package/dist/learning/patterns/index.js.map +1 -0
  433. package/dist/learning/search/BM25Index.d.ts +88 -0
  434. package/dist/learning/search/BM25Index.d.ts.map +1 -0
  435. package/dist/learning/search/BM25Index.js +251 -0
  436. package/dist/learning/search/BM25Index.js.map +1 -0
  437. package/dist/learning/search/HybridSearch.d.ts +85 -0
  438. package/dist/learning/search/HybridSearch.d.ts.map +1 -0
  439. package/dist/learning/search/HybridSearch.js +243 -0
  440. package/dist/learning/search/HybridSearch.js.map +1 -0
  441. package/dist/learning/search/index.d.ts +10 -0
  442. package/dist/learning/search/index.d.ts.map +1 -0
  443. package/dist/learning/search/index.js +16 -0
  444. package/dist/learning/search/index.js.map +1 -0
  445. package/dist/learning/training/index.d.ts +95 -0
  446. package/dist/learning/training/index.d.ts.map +1 -0
  447. package/dist/learning/training/index.js +6 -0
  448. package/dist/learning/training/index.js.map +1 -0
  449. package/dist/plugins/PluginManager.d.ts +316 -0
  450. package/dist/plugins/PluginManager.d.ts.map +1 -0
  451. package/dist/plugins/PluginManager.js +488 -0
  452. package/dist/plugins/PluginManager.js.map +1 -0
  453. package/dist/plugins/index.d.ts +8 -0
  454. package/dist/plugins/index.d.ts.map +1 -0
  455. package/dist/plugins/index.js +17 -0
  456. package/dist/plugins/index.js.map +1 -0
  457. package/dist/security/AIDefenceGuard.d.ts +212 -0
  458. package/dist/security/AIDefenceGuard.d.ts.map +1 -0
  459. package/dist/security/AIDefenceGuard.js +578 -0
  460. package/dist/security/AIDefenceGuard.js.map +1 -0
  461. package/dist/security/index.d.ts +8 -0
  462. package/dist/security/index.d.ts.map +1 -0
  463. package/dist/security/index.js +18 -0
  464. package/dist/security/index.js.map +1 -0
  465. package/dist/server.d.ts +11 -0
  466. package/dist/server.d.ts.map +1 -0
  467. package/dist/server.js +410 -0
  468. package/dist/server.js.map +1 -0
  469. package/dist/skills/index.d.ts +15 -0
  470. package/dist/skills/index.d.ts.map +1 -0
  471. package/dist/skills/index.js +13 -0
  472. package/dist/skills/index.js.map +1 -0
  473. package/dist/swarm/ByzantineConsensus.d.ts +110 -0
  474. package/dist/swarm/ByzantineConsensus.d.ts.map +1 -0
  475. package/dist/swarm/ByzantineConsensus.js +272 -0
  476. package/dist/swarm/ByzantineConsensus.js.map +1 -0
  477. package/dist/swarm/SwarmCoordinator.d.ts +141 -0
  478. package/dist/swarm/SwarmCoordinator.d.ts.map +1 -0
  479. package/dist/swarm/SwarmCoordinator.js +386 -0
  480. package/dist/swarm/SwarmCoordinator.js.map +1 -0
  481. package/dist/swarm/index.d.ts +8 -0
  482. package/dist/swarm/index.d.ts.map +1 -0
  483. package/dist/swarm/index.js +16 -0
  484. package/dist/swarm/index.js.map +1 -0
  485. package/dist/types.d.ts +120 -0
  486. package/dist/types.d.ts.map +1 -0
  487. package/dist/types.js +14 -0
  488. package/dist/types.js.map +1 -0
  489. package/dist/utils/logger.d.ts +23 -0
  490. package/dist/utils/logger.d.ts.map +1 -0
  491. package/dist/utils/logger.js +80 -0
  492. package/dist/utils/logger.js.map +1 -0
  493. package/package.json +139 -0
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ /**
3
+ * BM25Index - Full-Text Search with BM25 Scoring
4
+ *
5
+ * Implements the Okapi BM25 ranking algorithm for keyword-based search.
6
+ * Used in hybrid search to complement vector similarity search.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.BM25Index = void 0;
10
+ exports.createBM25Index = createBM25Index;
11
+ // ============================================================================
12
+ // BM25Index Implementation
13
+ // ============================================================================
14
+ class BM25Index {
15
+ k1;
16
+ b;
17
+ // Document storage
18
+ documents = new Map();
19
+ // Inverted index: term -> Set of document IDs
20
+ invertedIndex = new Map();
21
+ // Document frequency: term -> number of documents containing term
22
+ docFrequency = new Map();
23
+ // Document lengths (number of tokens)
24
+ docLengths = new Map();
25
+ // Average document length
26
+ avgDocLength = 0;
27
+ // Stopwords to filter
28
+ stopwords = new Set([
29
+ 'a', 'an', 'the', 'and', 'or', 'but', 'is', 'are', 'was', 'were',
30
+ 'be', 'been', 'being', 'have', 'has', 'had', 'do', 'does', 'did',
31
+ 'will', 'would', 'could', 'should', 'may', 'might', 'must', 'shall',
32
+ 'can', 'need', 'dare', 'ought', 'used', 'to', 'of', 'in', 'for',
33
+ 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
34
+ 'before', 'after', 'above', 'below', 'between', 'under', 'again',
35
+ 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why',
36
+ 'how', 'all', 'each', 'few', 'more', 'most', 'other', 'some', 'such',
37
+ 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too',
38
+ 'very', 's', 't', 'just', 'don', 'now', 'i', 'me', 'my', 'myself',
39
+ 'we', 'our', 'ours', 'ourselves', 'you', 'your', 'yours', 'yourself',
40
+ 'he', 'him', 'his', 'himself', 'she', 'her', 'hers', 'herself',
41
+ 'it', 'its', 'itself', 'they', 'them', 'their', 'theirs', 'themselves',
42
+ 'what', 'which', 'who', 'whom', 'this', 'that', 'these', 'those',
43
+ ]);
44
+ constructor(config = {}) {
45
+ this.k1 = config.k1 ?? 1.2;
46
+ this.b = config.b ?? 0.75;
47
+ }
48
+ /**
49
+ * Add a document to the index
50
+ */
51
+ add(id, content) {
52
+ // Tokenize content
53
+ const tokens = this.tokenize(content);
54
+ // Store document
55
+ const doc = { id, content, tokens };
56
+ this.documents.set(id, doc);
57
+ this.docLengths.set(id, tokens.length);
58
+ // Update inverted index
59
+ const uniqueTerms = new Set(tokens);
60
+ for (const term of uniqueTerms) {
61
+ if (!this.invertedIndex.has(term)) {
62
+ this.invertedIndex.set(term, new Set());
63
+ }
64
+ this.invertedIndex.get(term).add(id);
65
+ // Update document frequency
66
+ this.docFrequency.set(term, (this.docFrequency.get(term) ?? 0) + 1);
67
+ }
68
+ // Update average document length
69
+ this.updateAvgDocLength();
70
+ }
71
+ /**
72
+ * Remove a document from the index
73
+ */
74
+ delete(id) {
75
+ const doc = this.documents.get(id);
76
+ if (!doc)
77
+ return false;
78
+ // Remove from inverted index
79
+ const uniqueTerms = new Set(doc.tokens ?? this.tokenize(doc.content));
80
+ for (const term of uniqueTerms) {
81
+ const termDocs = this.invertedIndex.get(term);
82
+ if (termDocs) {
83
+ termDocs.delete(id);
84
+ if (termDocs.size === 0) {
85
+ this.invertedIndex.delete(term);
86
+ this.docFrequency.delete(term);
87
+ }
88
+ else {
89
+ this.docFrequency.set(term, (this.docFrequency.get(term) ?? 1) - 1);
90
+ }
91
+ }
92
+ }
93
+ // Remove document
94
+ this.documents.delete(id);
95
+ this.docLengths.delete(id);
96
+ // Update average document length
97
+ this.updateAvgDocLength();
98
+ return true;
99
+ }
100
+ /**
101
+ * Search the index with BM25 scoring
102
+ */
103
+ search(query, topK = 10) {
104
+ const queryTerms = this.tokenize(query);
105
+ if (queryTerms.length === 0)
106
+ return [];
107
+ const scores = new Map();
108
+ const N = this.documents.size;
109
+ for (const term of queryTerms) {
110
+ const docs = this.invertedIndex.get(term);
111
+ if (!docs)
112
+ continue;
113
+ // Document frequency for IDF
114
+ const df = this.docFrequency.get(term) ?? 0;
115
+ // IDF with smoothing
116
+ const idf = Math.log((N - df + 0.5) / (df + 0.5) + 1);
117
+ for (const docId of docs) {
118
+ const docLength = this.docLengths.get(docId) ?? 0;
119
+ const doc = this.documents.get(docId);
120
+ if (!doc)
121
+ continue;
122
+ // Term frequency in document
123
+ const tf = this.termFrequency(term, doc.tokens ?? []);
124
+ // BM25 score for this term
125
+ const numerator = tf * (this.k1 + 1);
126
+ const denominator = tf + this.k1 * (1 - this.b + this.b * (docLength / this.avgDocLength));
127
+ const termScore = idf * (numerator / denominator);
128
+ // Accumulate score
129
+ if (!scores.has(docId)) {
130
+ scores.set(docId, { score: 0, matchedTerms: [] });
131
+ }
132
+ const existing = scores.get(docId);
133
+ existing.score += termScore;
134
+ if (!existing.matchedTerms.includes(term)) {
135
+ existing.matchedTerms.push(term);
136
+ }
137
+ }
138
+ }
139
+ // Sort by score and return top K
140
+ return Array.from(scores.entries())
141
+ .map(([id, { score, matchedTerms }]) => ({ id, score, matchedTerms }))
142
+ .sort((a, b) => b.score - a.score)
143
+ .slice(0, topK);
144
+ }
145
+ /**
146
+ * Get document by ID
147
+ */
148
+ get(id) {
149
+ return this.documents.get(id);
150
+ }
151
+ /**
152
+ * Check if document exists
153
+ */
154
+ has(id) {
155
+ return this.documents.has(id);
156
+ }
157
+ /**
158
+ * Get index size
159
+ */
160
+ size() {
161
+ return this.documents.size;
162
+ }
163
+ /**
164
+ * Clear all documents
165
+ */
166
+ clear() {
167
+ this.documents.clear();
168
+ this.invertedIndex.clear();
169
+ this.docFrequency.clear();
170
+ this.docLengths.clear();
171
+ this.avgDocLength = 0;
172
+ }
173
+ /**
174
+ * Get index statistics
175
+ */
176
+ getStats() {
177
+ return {
178
+ documentCount: this.documents.size,
179
+ uniqueTerms: this.invertedIndex.size,
180
+ avgDocLength: this.avgDocLength,
181
+ k1: this.k1,
182
+ b: this.b,
183
+ };
184
+ }
185
+ // ==========================================================================
186
+ // Private Methods
187
+ // ==========================================================================
188
+ /**
189
+ * Tokenize text into normalized terms
190
+ */
191
+ tokenize(text) {
192
+ return text
193
+ .toLowerCase()
194
+ // Split on non-alphanumeric characters
195
+ .split(/[^a-z0-9]+/)
196
+ // Filter empty strings and stopwords
197
+ .filter(token => token.length > 1 && !this.stopwords.has(token))
198
+ // Stem basic suffixes (simple Porter-like stemming)
199
+ .map(token => this.stem(token));
200
+ }
201
+ /**
202
+ * Simple stemming (basic suffix removal)
203
+ */
204
+ stem(word) {
205
+ // Very basic stemming - just remove common suffixes
206
+ if (word.length > 5) {
207
+ if (word.endsWith('ing'))
208
+ return word.slice(0, -3);
209
+ if (word.endsWith('ed'))
210
+ return word.slice(0, -2);
211
+ if (word.endsWith('es'))
212
+ return word.slice(0, -2);
213
+ if (word.endsWith('s') && !word.endsWith('ss'))
214
+ return word.slice(0, -1);
215
+ if (word.endsWith('ly'))
216
+ return word.slice(0, -2);
217
+ if (word.endsWith('tion'))
218
+ return word.slice(0, -4) + 't';
219
+ }
220
+ return word;
221
+ }
222
+ /**
223
+ * Count term frequency in tokens
224
+ */
225
+ termFrequency(term, tokens) {
226
+ return tokens.filter(t => t === term).length;
227
+ }
228
+ /**
229
+ * Update average document length
230
+ */
231
+ updateAvgDocLength() {
232
+ if (this.docLengths.size === 0) {
233
+ this.avgDocLength = 0;
234
+ return;
235
+ }
236
+ let total = 0;
237
+ for (const length of this.docLengths.values()) {
238
+ total += length;
239
+ }
240
+ this.avgDocLength = total / this.docLengths.size;
241
+ }
242
+ }
243
+ exports.BM25Index = BM25Index;
244
+ // ============================================================================
245
+ // Factory Function
246
+ // ============================================================================
247
+ function createBM25Index(config) {
248
+ return new BM25Index(config);
249
+ }
250
+ exports.default = BM25Index;
251
+ //# sourceMappingURL=BM25Index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BM25Index.js","sourceRoot":"","sources":["../../../src/learning/search/BM25Index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAoSH,0CAEC;AA/QD,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,MAAa,SAAS;IACH,EAAE,CAAS;IACX,CAAC,CAAS;IAE3B,mBAAmB;IACX,SAAS,GAA0B,IAAI,GAAG,EAAE,CAAC;IAErD,8CAA8C;IACtC,aAAa,GAA6B,IAAI,GAAG,EAAE,CAAC;IAE5D,kEAAkE;IAC1D,YAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEtD,sCAAsC;IAC9B,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEpD,0BAA0B;IAClB,YAAY,GAAW,CAAC,CAAC;IAEjC,sBAAsB;IACL,SAAS,GAAG,IAAI,GAAG,CAAC;QACnC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;QAChE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;QAChE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;QACnE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;QAC/D,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ;QACnE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;QAChE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;QAClE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;QACpE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;QAC9D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;QACjE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU;QACpE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS;QAC9D,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY;QACtE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;KACjE,CAAC,CAAC;IAEH,YAAY,SAA8B,EAAE;QAC1C,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,GAAG,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU,EAAE,OAAe;QAC7B,mBAAmB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEtC,iBAAiB;QACjB,MAAM,GAAG,GAAa,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvC,wBAAwB;QACxB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEtC,4BAA4B;YAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAU;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAEvB,6BAA6B;QAC7B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpB,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3B,iCAAiC;QACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa,EAAE,OAAe,EAAE;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqD,CAAC;QAC5E,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAE9B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,6BAA6B;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,qBAAqB;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAEtD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,CAAC,GAAG;oBAAE,SAAS;gBAEnB,6BAA6B;gBAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBAEtD,2BAA2B;gBAC3B,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACrC,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC3F,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC;gBAElD,mBAAmB;gBACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;gBACpC,QAAQ,CAAC,KAAK,IAAI,SAAS,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;aACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,QAAQ;QAON,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YAClC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;YACpC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,CAAC,EAAE,IAAI,CAAC,CAAC;SACV,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAE7E;;OAEG;IACK,QAAQ,CAAC,IAAY;QAC3B,OAAO,IAAI;aACR,WAAW,EAAE;YACd,uCAAuC;aACtC,KAAK,CAAC,YAAY,CAAC;YACpB,qCAAqC;aACpC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChE,oDAAoD;aACnD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,IAAI,CAAC,IAAY;QACvB,oDAAoD;QACpD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAY,EAAE,MAAgB;QAClD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,KAAK,IAAI,MAAM,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACnD,CAAC;CACF;AAnQD,8BAmQC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,SAAgB,eAAe,CAAC,MAA4B;IAC1D,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * HybridSearch - Combined Vector + Keyword Search
3
+ *
4
+ * Implements Reciprocal Rank Fusion (RRF) to combine vector similarity
5
+ * and BM25 keyword search for improved recall and precision.
6
+ */
7
+ import { BM25Index } from './BM25Index.js';
8
+ import type { Embedder, VectorIndex } from '../memory/MemoryManager.js';
9
+ export interface HybridSearchConfig {
10
+ vector: {
11
+ enabled: boolean;
12
+ weight: number;
13
+ };
14
+ keyword: {
15
+ enabled: boolean;
16
+ weight: number;
17
+ k1?: number;
18
+ b?: number;
19
+ };
20
+ fusion: {
21
+ method: 'rrf' | 'linear' | 'weighted';
22
+ k: number;
23
+ candidateMultiplier: number;
24
+ };
25
+ }
26
+ export interface HybridSearchResult {
27
+ id: string;
28
+ vectorScore: number;
29
+ keywordScore: number;
30
+ fusedScore: number;
31
+ matchedTerms?: string[];
32
+ }
33
+ export interface HybridSearchOptions {
34
+ topK?: number;
35
+ threshold?: number;
36
+ vectorOnly?: boolean;
37
+ keywordOnly?: boolean;
38
+ }
39
+ export declare const DEFAULT_HYBRID_CONFIG: HybridSearchConfig;
40
+ export declare class HybridSearch {
41
+ private readonly config;
42
+ private vectorIndex;
43
+ private embedder;
44
+ private bm25Index;
45
+ private initialized;
46
+ constructor(config?: Partial<HybridSearchConfig>);
47
+ /**
48
+ * Initialize with vector index and embedder
49
+ */
50
+ initialize(vectorIndex: VectorIndex, embedder: Embedder): void;
51
+ /**
52
+ * Check if initialized
53
+ */
54
+ isInitialized(): boolean;
55
+ /**
56
+ * Add document to both indices
57
+ */
58
+ add(id: string, content: string, embedding?: Float32Array): Promise<void>;
59
+ /**
60
+ * Remove document from both indices
61
+ */
62
+ delete(id: string): boolean;
63
+ /**
64
+ * Hybrid search combining vector and keyword
65
+ */
66
+ search(query: string, options?: HybridSearchOptions): Promise<HybridSearchResult[]>;
67
+ /**
68
+ * Get statistics
69
+ */
70
+ getStats(): {
71
+ config: HybridSearchConfig;
72
+ bm25Stats: ReturnType<BM25Index['getStats']>;
73
+ vectorIndexSize: number;
74
+ };
75
+ /**
76
+ * Clear both indices
77
+ */
78
+ clear(): void;
79
+ private vectorSearch;
80
+ private keywordSearch;
81
+ private fuseResults;
82
+ }
83
+ export declare function createHybridSearch(config?: Partial<HybridSearchConfig>): HybridSearch;
84
+ export default HybridSearch;
85
+ //# sourceMappingURL=HybridSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridSearch.d.ts","sourceRoot":"","sources":["../../../src/learning/search/HybridSearch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAMxE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,CAAC,CAAC,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;QACtC,CAAC,EAAE,MAAM,CAAC;QACV,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD,eAAO,MAAM,qBAAqB,EAAE,kBAgBnC,CAAC;AAMF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAapD;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAM9D;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/E;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAc3B;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA0ChC;;OAEG;IACH,QAAQ,IAAI;QACV,MAAM,EAAE,kBAAkB,CAAC;QAC3B,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,eAAe,EAAE,MAAM,CAAC;KACzB;IAQD;;OAEG;IACH,KAAK,IAAI,IAAI;YASC,YAAY;YAoBZ,aAAa;IAuB3B,OAAO,CAAC,WAAW;CAwEpB;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAErF;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ /**
3
+ * HybridSearch - Combined Vector + Keyword Search
4
+ *
5
+ * Implements Reciprocal Rank Fusion (RRF) to combine vector similarity
6
+ * and BM25 keyword search for improved recall and precision.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.HybridSearch = exports.DEFAULT_HYBRID_CONFIG = void 0;
10
+ exports.createHybridSearch = createHybridSearch;
11
+ const BM25Index_js_1 = require("./BM25Index.js");
12
+ // ============================================================================
13
+ // Default Configuration
14
+ // ============================================================================
15
+ exports.DEFAULT_HYBRID_CONFIG = {
16
+ vector: {
17
+ enabled: true,
18
+ weight: 0.7,
19
+ },
20
+ keyword: {
21
+ enabled: true,
22
+ weight: 0.3,
23
+ k1: 1.2,
24
+ b: 0.75,
25
+ },
26
+ fusion: {
27
+ method: 'rrf',
28
+ k: 60,
29
+ candidateMultiplier: 3,
30
+ },
31
+ };
32
+ // ============================================================================
33
+ // HybridSearch Implementation
34
+ // ============================================================================
35
+ class HybridSearch {
36
+ config;
37
+ vectorIndex = null;
38
+ embedder = null;
39
+ bm25Index;
40
+ initialized = false;
41
+ constructor(config = {}) {
42
+ this.config = {
43
+ vector: { ...exports.DEFAULT_HYBRID_CONFIG.vector, ...config.vector },
44
+ keyword: { ...exports.DEFAULT_HYBRID_CONFIG.keyword, ...config.keyword },
45
+ fusion: { ...exports.DEFAULT_HYBRID_CONFIG.fusion, ...config.fusion },
46
+ };
47
+ this.bm25Index = new BM25Index_js_1.BM25Index({
48
+ k1: this.config.keyword.k1,
49
+ b: this.config.keyword.b,
50
+ });
51
+ }
52
+ /**
53
+ * Initialize with vector index and embedder
54
+ */
55
+ initialize(vectorIndex, embedder) {
56
+ this.vectorIndex = vectorIndex;
57
+ this.embedder = embedder;
58
+ this.initialized = true;
59
+ }
60
+ /**
61
+ * Check if initialized
62
+ */
63
+ isInitialized() {
64
+ return this.initialized;
65
+ }
66
+ /**
67
+ * Add document to both indices
68
+ */
69
+ async add(id, content, embedding) {
70
+ // Add to BM25 index
71
+ if (this.config.keyword.enabled) {
72
+ this.bm25Index.add(id, content);
73
+ }
74
+ // Add to vector index
75
+ if (this.config.vector.enabled && this.vectorIndex) {
76
+ if (!embedding && this.embedder) {
77
+ embedding = await this.embedder.embed(content);
78
+ }
79
+ if (embedding) {
80
+ await this.vectorIndex.add(id, embedding);
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Remove document from both indices
86
+ */
87
+ delete(id) {
88
+ let deleted = false;
89
+ if (this.config.keyword.enabled) {
90
+ deleted = this.bm25Index.delete(id) || deleted;
91
+ }
92
+ if (this.config.vector.enabled && this.vectorIndex) {
93
+ deleted = this.vectorIndex.delete(id) || deleted;
94
+ }
95
+ return deleted;
96
+ }
97
+ /**
98
+ * Hybrid search combining vector and keyword
99
+ */
100
+ async search(query, options = {}) {
101
+ // Return empty results for empty query
102
+ if (!query || query.trim().length === 0) {
103
+ return [];
104
+ }
105
+ const { topK = 10, threshold = 0, vectorOnly = false, keywordOnly = false, } = options;
106
+ const fetchK = topK * this.config.fusion.candidateMultiplier;
107
+ // Parallel search on both indices
108
+ const [vectorResults, keywordResults] = await Promise.all([
109
+ this.vectorSearch(query, fetchK, vectorOnly || !this.config.keyword.enabled),
110
+ this.keywordSearch(query, fetchK, keywordOnly || !this.config.vector.enabled),
111
+ ]);
112
+ // If only one mode is enabled/requested, return those results
113
+ if (vectorOnly || !this.config.keyword.enabled) {
114
+ return vectorResults
115
+ .filter(r => r.fusedScore >= threshold)
116
+ .slice(0, topK);
117
+ }
118
+ if (keywordOnly || !this.config.vector.enabled) {
119
+ return keywordResults
120
+ .filter(r => r.fusedScore >= threshold)
121
+ .slice(0, topK);
122
+ }
123
+ // Fuse results
124
+ const fused = this.fuseResults(vectorResults, keywordResults);
125
+ return fused
126
+ .filter(r => r.fusedScore >= threshold)
127
+ .slice(0, topK);
128
+ }
129
+ /**
130
+ * Get statistics
131
+ */
132
+ getStats() {
133
+ return {
134
+ config: this.config,
135
+ bm25Stats: this.bm25Index.getStats(),
136
+ vectorIndexSize: this.vectorIndex?.size() ?? 0,
137
+ };
138
+ }
139
+ /**
140
+ * Clear both indices
141
+ */
142
+ clear() {
143
+ this.bm25Index.clear();
144
+ this.vectorIndex?.clear();
145
+ }
146
+ // ==========================================================================
147
+ // Private Methods
148
+ // ==========================================================================
149
+ async vectorSearch(query, topK, returnDirectly) {
150
+ if (!this.config.vector.enabled || !this.vectorIndex || !this.embedder) {
151
+ return [];
152
+ }
153
+ const queryEmbedding = await this.embedder.embed(query);
154
+ const results = await this.vectorIndex.search(queryEmbedding, topK);
155
+ return results.map((r) => ({
156
+ id: r.id,
157
+ vectorScore: r.score,
158
+ keywordScore: 0,
159
+ fusedScore: returnDirectly ? r.score : 0,
160
+ }));
161
+ }
162
+ async keywordSearch(query, topK, returnDirectly) {
163
+ if (!this.config.keyword.enabled) {
164
+ return [];
165
+ }
166
+ const results = this.bm25Index.search(query, topK);
167
+ // Normalize BM25 scores to 0-1 range
168
+ const maxScore = results.length > 0 ? results[0].score : 1;
169
+ return results.map(r => ({
170
+ id: r.id,
171
+ vectorScore: 0,
172
+ keywordScore: maxScore > 0 ? r.score / maxScore : 0,
173
+ fusedScore: returnDirectly ? (maxScore > 0 ? r.score / maxScore : 0) : 0,
174
+ matchedTerms: r.matchedTerms,
175
+ }));
176
+ }
177
+ fuseResults(vectorResults, keywordResults) {
178
+ const { method, k } = this.config.fusion;
179
+ const { weight: vectorWeight } = this.config.vector;
180
+ const { weight: keywordWeight } = this.config.keyword;
181
+ // Normalize weights
182
+ const totalWeight = vectorWeight + keywordWeight;
183
+ const normVectorWeight = vectorWeight / totalWeight;
184
+ const normKeywordWeight = keywordWeight / totalWeight;
185
+ // Create maps for quick lookup
186
+ const vectorMap = new Map(vectorResults.map((r, i) => [r.id, { ...r, rank: i + 1 }]));
187
+ const keywordMap = new Map(keywordResults.map((r, i) => [r.id, { ...r, rank: i + 1 }]));
188
+ // Collect all unique IDs
189
+ const allIds = new Set([
190
+ ...vectorResults.map(r => r.id),
191
+ ...keywordResults.map(r => r.id),
192
+ ]);
193
+ // Calculate fused scores
194
+ const fusedResults = [];
195
+ for (const id of allIds) {
196
+ const vectorResult = vectorMap.get(id);
197
+ const keywordResult = keywordMap.get(id);
198
+ const vectorScore = vectorResult?.vectorScore ?? 0;
199
+ const keywordScore = keywordResult?.keywordScore ?? 0;
200
+ let fusedScore;
201
+ switch (method) {
202
+ case 'rrf': {
203
+ // Reciprocal Rank Fusion
204
+ const vectorRRF = vectorResult ? 1 / (k + vectorResult.rank) : 0;
205
+ const keywordRRF = keywordResult ? 1 / (k + keywordResult.rank) : 0;
206
+ fusedScore = normVectorWeight * vectorRRF + normKeywordWeight * keywordRRF;
207
+ break;
208
+ }
209
+ case 'linear': {
210
+ // Linear combination of scores
211
+ fusedScore = normVectorWeight * vectorScore + normKeywordWeight * keywordScore;
212
+ break;
213
+ }
214
+ case 'weighted':
215
+ default: {
216
+ // Weighted average with presence bonus
217
+ const presence = (vectorResult ? 1 : 0) + (keywordResult ? 1 : 0);
218
+ const presenceBonus = presence === 2 ? 0.1 : 0;
219
+ fusedScore = normVectorWeight * vectorScore + normKeywordWeight * keywordScore + presenceBonus;
220
+ break;
221
+ }
222
+ }
223
+ fusedResults.push({
224
+ id,
225
+ vectorScore,
226
+ keywordScore,
227
+ fusedScore,
228
+ matchedTerms: keywordResult?.matchedTerms,
229
+ });
230
+ }
231
+ // Sort by fused score
232
+ return fusedResults.sort((a, b) => b.fusedScore - a.fusedScore);
233
+ }
234
+ }
235
+ exports.HybridSearch = HybridSearch;
236
+ // ============================================================================
237
+ // Factory Function
238
+ // ============================================================================
239
+ function createHybridSearch(config) {
240
+ return new HybridSearch(config);
241
+ }
242
+ exports.default = HybridSearch;
243
+ //# sourceMappingURL=HybridSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridSearch.js","sourceRoot":"","sources":["../../../src/learning/search/HybridSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Search module exports
3
+ *
4
+ * Provides hybrid search combining vector similarity and BM25 keyword search.
5
+ */
6
+ export { BM25Index, createBM25Index } from './BM25Index.js';
7
+ export type { BM25Config, Document, BM25Result } from './BM25Index.js';
8
+ export { HybridSearch, createHybridSearch, DEFAULT_HYBRID_CONFIG, } from './HybridSearch.js';
9
+ export type { HybridSearchConfig, HybridSearchResult, HybridSearchOptions, } from './HybridSearch.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/learning/search/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * Search module exports
4
+ *
5
+ * Provides hybrid search combining vector similarity and BM25 keyword search.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DEFAULT_HYBRID_CONFIG = exports.createHybridSearch = exports.HybridSearch = exports.createBM25Index = exports.BM25Index = void 0;
9
+ var BM25Index_js_1 = require("./BM25Index.js");
10
+ Object.defineProperty(exports, "BM25Index", { enumerable: true, get: function () { return BM25Index_js_1.BM25Index; } });
11
+ Object.defineProperty(exports, "createBM25Index", { enumerable: true, get: function () { return BM25Index_js_1.createBM25Index; } });
12
+ var HybridSearch_js_1 = require("./HybridSearch.js");
13
+ Object.defineProperty(exports, "HybridSearch", { enumerable: true, get: function () { return HybridSearch_js_1.HybridSearch; } });
14
+ Object.defineProperty(exports, "createHybridSearch", { enumerable: true, get: function () { return HybridSearch_js_1.createHybridSearch; } });
15
+ Object.defineProperty(exports, "DEFAULT_HYBRID_CONFIG", { enumerable: true, get: function () { return HybridSearch_js_1.DEFAULT_HYBRID_CONFIG; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/learning/search/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+CAA4D;AAAnD,yGAAA,SAAS,OAAA;AAAE,+GAAA,eAAe,OAAA;AAGnC,qDAI2B;AAHzB,+GAAA,YAAY,OAAA;AACZ,qHAAA,kBAAkB,OAAA;AAClB,wHAAA,qBAAqB,OAAA"}