@framers/agentos 0.1.120 → 0.1.122

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 (436) hide show
  1. package/README.md +21 -0
  2. package/dist/api/agency.d.ts.map +1 -1
  3. package/dist/api/agency.js +227 -84
  4. package/dist/api/agency.js.map +1 -1
  5. package/dist/api/analyzeVideo.d.ts +127 -0
  6. package/dist/api/analyzeVideo.d.ts.map +1 -0
  7. package/dist/api/analyzeVideo.js +136 -0
  8. package/dist/api/analyzeVideo.js.map +1 -0
  9. package/dist/api/detectScenes.d.ts +82 -0
  10. package/dist/api/detectScenes.d.ts.map +1 -0
  11. package/dist/api/detectScenes.js +67 -0
  12. package/dist/api/detectScenes.js.map +1 -0
  13. package/dist/api/generateImage.d.ts +7 -0
  14. package/dist/api/generateImage.d.ts.map +1 -1
  15. package/dist/api/generateImage.js +133 -9
  16. package/dist/api/generateImage.js.map +1 -1
  17. package/dist/api/generateMusic.d.ts +98 -0
  18. package/dist/api/generateMusic.d.ts.map +1 -0
  19. package/dist/api/generateMusic.js +319 -0
  20. package/dist/api/generateMusic.js.map +1 -0
  21. package/dist/api/generateSFX.d.ts +96 -0
  22. package/dist/api/generateSFX.d.ts.map +1 -0
  23. package/dist/api/generateSFX.js +317 -0
  24. package/dist/api/generateSFX.js.map +1 -0
  25. package/dist/api/generateVideo.d.ts +113 -0
  26. package/dist/api/generateVideo.d.ts.map +1 -0
  27. package/dist/api/generateVideo.js +342 -0
  28. package/dist/api/generateVideo.js.map +1 -0
  29. package/dist/api/model.d.ts.map +1 -1
  30. package/dist/api/model.js +8 -4
  31. package/dist/api/model.js.map +1 -1
  32. package/dist/api/performOCR.d.ts +169 -0
  33. package/dist/api/performOCR.d.ts.map +1 -0
  34. package/dist/api/performOCR.js +198 -0
  35. package/dist/api/performOCR.js.map +1 -0
  36. package/dist/api/provider-defaults.d.ts +7 -5
  37. package/dist/api/provider-defaults.d.ts.map +1 -1
  38. package/dist/api/provider-defaults.js +32 -10
  39. package/dist/api/provider-defaults.js.map +1 -1
  40. package/dist/api/strategies/debate.d.ts.map +1 -1
  41. package/dist/api/strategies/debate.js +1 -0
  42. package/dist/api/strategies/debate.js.map +1 -1
  43. package/dist/api/strategies/graph.d.ts.map +1 -1
  44. package/dist/api/strategies/graph.js +69 -13
  45. package/dist/api/strategies/graph.js.map +1 -1
  46. package/dist/api/strategies/hierarchical.d.ts.map +1 -1
  47. package/dist/api/strategies/hierarchical.js +1 -0
  48. package/dist/api/strategies/hierarchical.js.map +1 -1
  49. package/dist/api/strategies/parallel.d.ts.map +1 -1
  50. package/dist/api/strategies/parallel.js +1 -0
  51. package/dist/api/strategies/parallel.js.map +1 -1
  52. package/dist/api/strategies/review-loop.d.ts.map +1 -1
  53. package/dist/api/strategies/review-loop.js +1 -0
  54. package/dist/api/strategies/review-loop.js.map +1 -1
  55. package/dist/api/strategies/sequential.d.ts.map +1 -1
  56. package/dist/api/strategies/sequential.js +54 -48
  57. package/dist/api/strategies/sequential.js.map +1 -1
  58. package/dist/api/streamBuffer.d.ts +20 -0
  59. package/dist/api/streamBuffer.d.ts.map +1 -0
  60. package/dist/api/streamBuffer.js +81 -0
  61. package/dist/api/streamBuffer.js.map +1 -0
  62. package/dist/api/types.d.ts +145 -5
  63. package/dist/api/types.d.ts.map +1 -1
  64. package/dist/api/types.js.map +1 -1
  65. package/dist/channels/adapters/RedditChannelAdapter.js.map +1 -1
  66. package/dist/core/audio/AudioProcessor.d.ts.map +1 -1
  67. package/dist/core/audio/AudioProcessor.js +1 -0
  68. package/dist/core/audio/AudioProcessor.js.map +1 -1
  69. package/dist/core/audio/EnvironmentalCalibrator.d.ts.map +1 -1
  70. package/dist/core/audio/EnvironmentalCalibrator.js +1 -0
  71. package/dist/core/audio/EnvironmentalCalibrator.js.map +1 -1
  72. package/dist/core/audio/FallbackAudioProxy.d.ts +169 -0
  73. package/dist/core/audio/FallbackAudioProxy.d.ts.map +1 -0
  74. package/dist/core/audio/FallbackAudioProxy.js +236 -0
  75. package/dist/core/audio/FallbackAudioProxy.js.map +1 -0
  76. package/dist/core/audio/IAudioGenerator.d.ts +103 -0
  77. package/dist/core/audio/IAudioGenerator.d.ts.map +1 -0
  78. package/dist/core/audio/IAudioGenerator.js +24 -0
  79. package/dist/core/audio/IAudioGenerator.js.map +1 -0
  80. package/dist/core/audio/index.d.ts +54 -0
  81. package/dist/core/audio/index.d.ts.map +1 -1
  82. package/dist/core/audio/index.js +93 -0
  83. package/dist/core/audio/index.js.map +1 -1
  84. package/dist/core/audio/providers/AudioGenLocalProvider.d.ts +136 -0
  85. package/dist/core/audio/providers/AudioGenLocalProvider.d.ts.map +1 -0
  86. package/dist/core/audio/providers/AudioGenLocalProvider.js +235 -0
  87. package/dist/core/audio/providers/AudioGenLocalProvider.js.map +1 -0
  88. package/dist/core/audio/providers/ElevenLabsSFXProvider.d.ts +107 -0
  89. package/dist/core/audio/providers/ElevenLabsSFXProvider.d.ts.map +1 -0
  90. package/dist/core/audio/providers/ElevenLabsSFXProvider.js +154 -0
  91. package/dist/core/audio/providers/ElevenLabsSFXProvider.js.map +1 -0
  92. package/dist/core/audio/providers/FalAudioProvider.d.ts +207 -0
  93. package/dist/core/audio/providers/FalAudioProvider.d.ts.map +1 -0
  94. package/dist/core/audio/providers/FalAudioProvider.js +315 -0
  95. package/dist/core/audio/providers/FalAudioProvider.js.map +1 -0
  96. package/dist/core/audio/providers/MusicGenLocalProvider.d.ts +136 -0
  97. package/dist/core/audio/providers/MusicGenLocalProvider.d.ts.map +1 -0
  98. package/dist/core/audio/providers/MusicGenLocalProvider.js +235 -0
  99. package/dist/core/audio/providers/MusicGenLocalProvider.js.map +1 -0
  100. package/dist/core/audio/providers/ReplicateAudioProvider.d.ts +200 -0
  101. package/dist/core/audio/providers/ReplicateAudioProvider.d.ts.map +1 -0
  102. package/dist/core/audio/providers/ReplicateAudioProvider.js +346 -0
  103. package/dist/core/audio/providers/ReplicateAudioProvider.js.map +1 -0
  104. package/dist/core/audio/providers/StableAudioProvider.d.ts +138 -0
  105. package/dist/core/audio/providers/StableAudioProvider.d.ts.map +1 -0
  106. package/dist/core/audio/providers/StableAudioProvider.js +192 -0
  107. package/dist/core/audio/providers/StableAudioProvider.js.map +1 -0
  108. package/dist/core/audio/providers/SunoProvider.d.ts +182 -0
  109. package/dist/core/audio/providers/SunoProvider.d.ts.map +1 -0
  110. package/dist/core/audio/providers/SunoProvider.js +312 -0
  111. package/dist/core/audio/providers/SunoProvider.js.map +1 -0
  112. package/dist/core/audio/providers/UdioProvider.d.ts +177 -0
  113. package/dist/core/audio/providers/UdioProvider.d.ts.map +1 -0
  114. package/dist/core/audio/providers/UdioProvider.js +305 -0
  115. package/dist/core/audio/providers/UdioProvider.js.map +1 -0
  116. package/dist/core/audio/types.d.ts +257 -0
  117. package/dist/core/audio/types.d.ts.map +1 -0
  118. package/dist/core/audio/types.js +21 -0
  119. package/dist/core/audio/types.js.map +1 -0
  120. package/dist/core/images/FallbackImageProxy.d.ts +183 -0
  121. package/dist/core/images/FallbackImageProxy.d.ts.map +1 -0
  122. package/dist/core/images/FallbackImageProxy.js +283 -0
  123. package/dist/core/images/FallbackImageProxy.js.map +1 -0
  124. package/dist/core/images/IImageProvider.d.ts +1 -1
  125. package/dist/core/images/IImageProvider.d.ts.map +1 -1
  126. package/dist/core/images/index.d.ts +1 -0
  127. package/dist/core/images/index.d.ts.map +1 -1
  128. package/dist/core/images/index.js +1 -0
  129. package/dist/core/images/index.js.map +1 -1
  130. package/dist/core/llm/providers/AIModelProviderManager.d.ts +3 -1
  131. package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -1
  132. package/dist/core/llm/providers/AIModelProviderManager.js +8 -0
  133. package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -1
  134. package/dist/core/llm/providers/errors/ClaudeCodeProviderError.d.ts +52 -0
  135. package/dist/core/llm/providers/errors/ClaudeCodeProviderError.d.ts.map +1 -0
  136. package/dist/core/llm/providers/errors/ClaudeCodeProviderError.js +36 -0
  137. package/dist/core/llm/providers/errors/ClaudeCodeProviderError.js.map +1 -0
  138. package/dist/core/llm/providers/errors/GeminiCLIProviderError.d.ts +32 -0
  139. package/dist/core/llm/providers/errors/GeminiCLIProviderError.d.ts.map +1 -0
  140. package/dist/core/llm/providers/errors/GeminiCLIProviderError.js +27 -0
  141. package/dist/core/llm/providers/errors/GeminiCLIProviderError.js.map +1 -0
  142. package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.d.ts +38 -0
  143. package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.d.ts.map +1 -0
  144. package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.js +128 -0
  145. package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.js.map +1 -0
  146. package/dist/core/llm/providers/implementations/ClaudeCodeProvider.d.ts +107 -0
  147. package/dist/core/llm/providers/implementations/ClaudeCodeProvider.d.ts.map +1 -0
  148. package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js +504 -0
  149. package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js.map +1 -0
  150. package/dist/core/llm/providers/implementations/GeminiCLIBridge.d.ts +60 -0
  151. package/dist/core/llm/providers/implementations/GeminiCLIBridge.d.ts.map +1 -0
  152. package/dist/core/llm/providers/implementations/GeminiCLIBridge.js +177 -0
  153. package/dist/core/llm/providers/implementations/GeminiCLIBridge.js.map +1 -0
  154. package/dist/core/llm/providers/implementations/GeminiCLIProvider.d.ts +55 -0
  155. package/dist/core/llm/providers/implementations/GeminiCLIProvider.d.ts.map +1 -0
  156. package/dist/core/llm/providers/implementations/GeminiCLIProvider.js +447 -0
  157. package/dist/core/llm/providers/implementations/GeminiCLIProvider.js.map +1 -0
  158. package/dist/core/media/ProviderPreferences.d.ts +158 -0
  159. package/dist/core/media/ProviderPreferences.d.ts.map +1 -0
  160. package/dist/core/media/ProviderPreferences.js +183 -0
  161. package/dist/core/media/ProviderPreferences.js.map +1 -0
  162. package/dist/core/subprocess/CLIRegistry.d.ts +71 -0
  163. package/dist/core/subprocess/CLIRegistry.d.ts.map +1 -0
  164. package/dist/core/subprocess/CLIRegistry.js +210 -0
  165. package/dist/core/subprocess/CLIRegistry.js.map +1 -0
  166. package/dist/core/subprocess/CLISubprocessBridge.d.ts +117 -0
  167. package/dist/core/subprocess/CLISubprocessBridge.d.ts.map +1 -0
  168. package/dist/core/subprocess/CLISubprocessBridge.js +199 -0
  169. package/dist/core/subprocess/CLISubprocessBridge.js.map +1 -0
  170. package/dist/core/subprocess/errors.d.ts +76 -0
  171. package/dist/core/subprocess/errors.d.ts.map +1 -0
  172. package/dist/core/subprocess/errors.js +75 -0
  173. package/dist/core/subprocess/errors.js.map +1 -0
  174. package/dist/core/subprocess/index.d.ts +11 -0
  175. package/dist/core/subprocess/index.d.ts.map +1 -0
  176. package/dist/core/subprocess/index.js +10 -0
  177. package/dist/core/subprocess/index.js.map +1 -0
  178. package/dist/core/subprocess/types.d.ts +100 -0
  179. package/dist/core/subprocess/types.d.ts.map +1 -0
  180. package/dist/core/subprocess/types.js +9 -0
  181. package/dist/core/subprocess/types.js.map +1 -0
  182. package/dist/core/video/FallbackVideoProxy.d.ts +166 -0
  183. package/dist/core/video/FallbackVideoProxy.d.ts.map +1 -0
  184. package/dist/core/video/FallbackVideoProxy.js +228 -0
  185. package/dist/core/video/FallbackVideoProxy.js.map +1 -0
  186. package/dist/core/video/IVideoAnalyzer.d.ts +29 -0
  187. package/dist/core/video/IVideoAnalyzer.d.ts.map +1 -0
  188. package/dist/core/video/IVideoAnalyzer.js +12 -0
  189. package/dist/core/video/IVideoAnalyzer.js.map +1 -0
  190. package/dist/core/video/IVideoGenerator.d.ts +76 -0
  191. package/dist/core/video/IVideoGenerator.d.ts.map +1 -0
  192. package/dist/core/video/IVideoGenerator.js +13 -0
  193. package/dist/core/video/IVideoGenerator.js.map +1 -0
  194. package/dist/core/video/VideoAnalyzer.d.ts +278 -0
  195. package/dist/core/video/VideoAnalyzer.d.ts.map +1 -0
  196. package/dist/core/video/VideoAnalyzer.js +648 -0
  197. package/dist/core/video/VideoAnalyzer.js.map +1 -0
  198. package/dist/core/video/index.d.ts +55 -0
  199. package/dist/core/video/index.d.ts.map +1 -0
  200. package/dist/core/video/index.js +78 -0
  201. package/dist/core/video/index.js.map +1 -0
  202. package/dist/core/video/providers/FalVideoProvider.d.ts +195 -0
  203. package/dist/core/video/providers/FalVideoProvider.d.ts.map +1 -0
  204. package/dist/core/video/providers/FalVideoProvider.js +322 -0
  205. package/dist/core/video/providers/FalVideoProvider.js.map +1 -0
  206. package/dist/core/video/providers/ReplicateVideoProvider.d.ts +194 -0
  207. package/dist/core/video/providers/ReplicateVideoProvider.d.ts.map +1 -0
  208. package/dist/core/video/providers/ReplicateVideoProvider.js +356 -0
  209. package/dist/core/video/providers/ReplicateVideoProvider.js.map +1 -0
  210. package/dist/core/video/providers/RunwayVideoProvider.d.ts +175 -0
  211. package/dist/core/video/providers/RunwayVideoProvider.d.ts.map +1 -0
  212. package/dist/core/video/providers/RunwayVideoProvider.js +293 -0
  213. package/dist/core/video/providers/RunwayVideoProvider.js.map +1 -0
  214. package/dist/core/video/types.d.ts +441 -0
  215. package/dist/core/video/types.d.ts.map +1 -0
  216. package/dist/core/video/types.js +10 -0
  217. package/dist/core/video/types.js.map +1 -0
  218. package/dist/core/vision/SceneDetector.d.ts +180 -0
  219. package/dist/core/vision/SceneDetector.d.ts.map +1 -0
  220. package/dist/core/vision/SceneDetector.js +366 -0
  221. package/dist/core/vision/SceneDetector.js.map +1 -0
  222. package/dist/core/vision/index.d.ts +2 -1
  223. package/dist/core/vision/index.d.ts.map +1 -1
  224. package/dist/core/vision/index.js +1 -0
  225. package/dist/core/vision/index.js.map +1 -1
  226. package/dist/core/vision/types.d.ts +125 -0
  227. package/dist/core/vision/types.d.ts.map +1 -1
  228. package/dist/discovery/CapabilityDiscoveryEngine.d.ts +32 -0
  229. package/dist/discovery/CapabilityDiscoveryEngine.d.ts.map +1 -1
  230. package/dist/discovery/CapabilityDiscoveryEngine.js +46 -0
  231. package/dist/discovery/CapabilityDiscoveryEngine.js.map +1 -1
  232. package/dist/emergent/AdaptPersonalityTool.d.ts +158 -0
  233. package/dist/emergent/AdaptPersonalityTool.d.ts.map +1 -0
  234. package/dist/emergent/AdaptPersonalityTool.js +190 -0
  235. package/dist/emergent/AdaptPersonalityTool.js.map +1 -0
  236. package/dist/emergent/CreateWorkflowTool.d.ts +181 -0
  237. package/dist/emergent/CreateWorkflowTool.d.ts.map +1 -0
  238. package/dist/emergent/CreateWorkflowTool.js +307 -0
  239. package/dist/emergent/CreateWorkflowTool.js.map +1 -0
  240. package/dist/emergent/ManageSkillsTool.d.ts +154 -0
  241. package/dist/emergent/ManageSkillsTool.d.ts.map +1 -0
  242. package/dist/emergent/ManageSkillsTool.js +241 -0
  243. package/dist/emergent/ManageSkillsTool.js.map +1 -0
  244. package/dist/emergent/PersonalityMutationStore.d.ts +183 -0
  245. package/dist/emergent/PersonalityMutationStore.d.ts.map +1 -0
  246. package/dist/emergent/PersonalityMutationStore.js +222 -0
  247. package/dist/emergent/PersonalityMutationStore.js.map +1 -0
  248. package/dist/emergent/SelfEvaluateTool.d.ts +189 -0
  249. package/dist/emergent/SelfEvaluateTool.d.ts.map +1 -0
  250. package/dist/emergent/SelfEvaluateTool.js +353 -0
  251. package/dist/emergent/SelfEvaluateTool.js.map +1 -0
  252. package/dist/emergent/SelfImprovementConfig.d.ts +166 -0
  253. package/dist/emergent/SelfImprovementConfig.d.ts.map +1 -0
  254. package/dist/emergent/SelfImprovementConfig.js +43 -0
  255. package/dist/emergent/SelfImprovementConfig.js.map +1 -0
  256. package/dist/emergent/index.d.ts +1 -0
  257. package/dist/emergent/index.d.ts.map +1 -1
  258. package/dist/emergent/index.js +1 -0
  259. package/dist/emergent/index.js.map +1 -1
  260. package/dist/emergent/types.d.ts +9 -0
  261. package/dist/emergent/types.d.ts.map +1 -1
  262. package/dist/emergent/types.js.map +1 -1
  263. package/dist/extensions/MultiRegistryLoader.js.map +1 -1
  264. package/dist/index.d.ts +17 -2
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +12 -0
  267. package/dist/index.js.map +1 -1
  268. package/dist/memory/CognitiveMemoryManager.d.ts +40 -0
  269. package/dist/memory/CognitiveMemoryManager.d.ts.map +1 -1
  270. package/dist/memory/CognitiveMemoryManager.js +54 -1
  271. package/dist/memory/CognitiveMemoryManager.js.map +1 -1
  272. package/dist/memory/facade/Memory.d.ts +4 -0
  273. package/dist/memory/facade/Memory.d.ts.map +1 -1
  274. package/dist/memory/facade/Memory.js +140 -4
  275. package/dist/memory/facade/Memory.js.map +1 -1
  276. package/dist/memory/facade/types.d.ts +30 -2
  277. package/dist/memory/facade/types.d.ts.map +1 -1
  278. package/dist/memory/index.d.ts +1 -0
  279. package/dist/memory/index.d.ts.map +1 -1
  280. package/dist/memory/index.js +1 -0
  281. package/dist/memory/index.js.map +1 -1
  282. package/dist/memory/types.d.ts +15 -0
  283. package/dist/memory/types.d.ts.map +1 -1
  284. package/dist/query-router/QueryClassifier.d.ts +192 -21
  285. package/dist/query-router/QueryClassifier.d.ts.map +1 -1
  286. package/dist/query-router/QueryClassifier.js +604 -23
  287. package/dist/query-router/QueryClassifier.js.map +1 -1
  288. package/dist/query-router/QueryDispatcher.d.ts +106 -8
  289. package/dist/query-router/QueryDispatcher.d.ts.map +1 -1
  290. package/dist/query-router/QueryDispatcher.js +387 -8
  291. package/dist/query-router/QueryDispatcher.js.map +1 -1
  292. package/dist/query-router/QueryRouter.d.ts +198 -14
  293. package/dist/query-router/QueryRouter.d.ts.map +1 -1
  294. package/dist/query-router/QueryRouter.js +738 -50
  295. package/dist/query-router/QueryRouter.js.map +1 -1
  296. package/dist/query-router/index.d.ts +1 -1
  297. package/dist/query-router/index.d.ts.map +1 -1
  298. package/dist/query-router/index.js +1 -1
  299. package/dist/query-router/index.js.map +1 -1
  300. package/dist/query-router/types.d.ts +396 -3
  301. package/dist/query-router/types.d.ts.map +1 -1
  302. package/dist/query-router/types.js +35 -0
  303. package/dist/query-router/types.js.map +1 -1
  304. package/dist/rag/HydeRetriever.d.ts +108 -0
  305. package/dist/rag/HydeRetriever.d.ts.map +1 -1
  306. package/dist/rag/HydeRetriever.js +184 -0
  307. package/dist/rag/HydeRetriever.js.map +1 -1
  308. package/dist/rag/IRetrievalAugmentor.d.ts +15 -0
  309. package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
  310. package/dist/rag/RetrievalAugmentor.d.ts +58 -0
  311. package/dist/rag/RetrievalAugmentor.d.ts.map +1 -1
  312. package/dist/rag/RetrievalAugmentor.js +200 -32
  313. package/dist/rag/RetrievalAugmentor.js.map +1 -1
  314. package/dist/rag/VectorStoreManager.js +1 -1
  315. package/dist/rag/audit/RAGAuditCollector.d.ts +7 -0
  316. package/dist/rag/audit/RAGAuditCollector.d.ts.map +1 -1
  317. package/dist/rag/audit/RAGAuditCollector.js +10 -0
  318. package/dist/rag/audit/RAGAuditCollector.js.map +1 -1
  319. package/dist/rag/audit/RAGAuditTypes.d.ts +10 -1
  320. package/dist/rag/audit/RAGAuditTypes.d.ts.map +1 -1
  321. package/dist/rag/chunking/SemanticChunker.d.ts +210 -0
  322. package/dist/rag/chunking/SemanticChunker.d.ts.map +1 -0
  323. package/dist/rag/chunking/SemanticChunker.js +460 -0
  324. package/dist/rag/chunking/SemanticChunker.js.map +1 -0
  325. package/dist/rag/chunking/index.d.ts +10 -0
  326. package/dist/rag/chunking/index.d.ts.map +1 -0
  327. package/dist/rag/chunking/index.js +10 -0
  328. package/dist/rag/chunking/index.js.map +1 -0
  329. package/dist/rag/implementations/vector_stores/PineconeVectorStore.d.ts +103 -0
  330. package/dist/rag/implementations/vector_stores/PineconeVectorStore.d.ts.map +1 -0
  331. package/dist/rag/implementations/vector_stores/PineconeVectorStore.js +315 -0
  332. package/dist/rag/implementations/vector_stores/PineconeVectorStore.js.map +1 -0
  333. package/dist/rag/implementations/vector_stores/PostgresVectorStore.d.ts +107 -0
  334. package/dist/rag/implementations/vector_stores/PostgresVectorStore.d.ts.map +1 -0
  335. package/dist/rag/implementations/vector_stores/PostgresVectorStore.js +438 -0
  336. package/dist/rag/implementations/vector_stores/PostgresVectorStore.js.map +1 -0
  337. package/dist/rag/index.d.ts +15 -1
  338. package/dist/rag/index.d.ts.map +1 -1
  339. package/dist/rag/index.js +32 -0
  340. package/dist/rag/index.js.map +1 -1
  341. package/dist/rag/migration/MigrationEngine.d.ts +47 -0
  342. package/dist/rag/migration/MigrationEngine.d.ts.map +1 -0
  343. package/dist/rag/migration/MigrationEngine.js +168 -0
  344. package/dist/rag/migration/MigrationEngine.js.map +1 -0
  345. package/dist/rag/migration/adapters/PineconeSourceAdapter.d.ts +23 -0
  346. package/dist/rag/migration/adapters/PineconeSourceAdapter.d.ts.map +1 -0
  347. package/dist/rag/migration/adapters/PineconeSourceAdapter.js +63 -0
  348. package/dist/rag/migration/adapters/PineconeSourceAdapter.js.map +1 -0
  349. package/dist/rag/migration/adapters/PostgresSourceAdapter.d.ts +30 -0
  350. package/dist/rag/migration/adapters/PostgresSourceAdapter.d.ts.map +1 -0
  351. package/dist/rag/migration/adapters/PostgresSourceAdapter.js +71 -0
  352. package/dist/rag/migration/adapters/PostgresSourceAdapter.js.map +1 -0
  353. package/dist/rag/migration/adapters/PostgresTargetAdapter.d.ts +38 -0
  354. package/dist/rag/migration/adapters/PostgresTargetAdapter.d.ts.map +1 -0
  355. package/dist/rag/migration/adapters/PostgresTargetAdapter.js +114 -0
  356. package/dist/rag/migration/adapters/PostgresTargetAdapter.js.map +1 -0
  357. package/dist/rag/migration/adapters/QdrantSourceAdapter.d.ts +36 -0
  358. package/dist/rag/migration/adapters/QdrantSourceAdapter.d.ts.map +1 -0
  359. package/dist/rag/migration/adapters/QdrantSourceAdapter.js +109 -0
  360. package/dist/rag/migration/adapters/QdrantSourceAdapter.js.map +1 -0
  361. package/dist/rag/migration/adapters/QdrantTargetAdapter.d.ts +35 -0
  362. package/dist/rag/migration/adapters/QdrantTargetAdapter.d.ts.map +1 -0
  363. package/dist/rag/migration/adapters/QdrantTargetAdapter.js +110 -0
  364. package/dist/rag/migration/adapters/QdrantTargetAdapter.js.map +1 -0
  365. package/dist/rag/migration/adapters/SqliteSourceAdapter.d.ts +37 -0
  366. package/dist/rag/migration/adapters/SqliteSourceAdapter.d.ts.map +1 -0
  367. package/dist/rag/migration/adapters/SqliteSourceAdapter.js +72 -0
  368. package/dist/rag/migration/adapters/SqliteSourceAdapter.js.map +1 -0
  369. package/dist/rag/migration/adapters/SqliteTargetAdapter.d.ts +47 -0
  370. package/dist/rag/migration/adapters/SqliteTargetAdapter.d.ts.map +1 -0
  371. package/dist/rag/migration/adapters/SqliteTargetAdapter.js +93 -0
  372. package/dist/rag/migration/adapters/SqliteTargetAdapter.js.map +1 -0
  373. package/dist/rag/migration/types.d.ts +108 -0
  374. package/dist/rag/migration/types.d.ts.map +1 -0
  375. package/dist/rag/migration/types.js +11 -0
  376. package/dist/rag/migration/types.js.map +1 -0
  377. package/dist/rag/multimodal/MultimodalIndexer.d.ts +35 -0
  378. package/dist/rag/multimodal/MultimodalIndexer.d.ts.map +1 -1
  379. package/dist/rag/multimodal/MultimodalIndexer.js +66 -1
  380. package/dist/rag/multimodal/MultimodalIndexer.js.map +1 -1
  381. package/dist/rag/multimodal/types.d.ts +24 -0
  382. package/dist/rag/multimodal/types.d.ts.map +1 -1
  383. package/dist/rag/raptor/RaptorTree.d.ts +268 -0
  384. package/dist/rag/raptor/RaptorTree.d.ts.map +1 -0
  385. package/dist/rag/raptor/RaptorTree.js +443 -0
  386. package/dist/rag/raptor/RaptorTree.js.map +1 -0
  387. package/dist/rag/raptor/index.d.ts +11 -0
  388. package/dist/rag/raptor/index.d.ts.map +1 -0
  389. package/dist/rag/raptor/index.js +11 -0
  390. package/dist/rag/raptor/index.js.map +1 -0
  391. package/dist/rag/reranking/providers/CohereReranker.js.map +1 -1
  392. package/dist/rag/search/BM25Index.d.ts +282 -0
  393. package/dist/rag/search/BM25Index.d.ts.map +1 -0
  394. package/dist/rag/search/BM25Index.js +344 -0
  395. package/dist/rag/search/BM25Index.js.map +1 -0
  396. package/dist/rag/search/HybridSearcher.d.ts +198 -0
  397. package/dist/rag/search/HybridSearcher.d.ts.map +1 -0
  398. package/dist/rag/search/HybridSearcher.js +316 -0
  399. package/dist/rag/search/HybridSearcher.js.map +1 -0
  400. package/dist/rag/search/index.d.ts +12 -0
  401. package/dist/rag/search/index.d.ts.map +1 -0
  402. package/dist/rag/search/index.js +12 -0
  403. package/dist/rag/search/index.js.map +1 -0
  404. package/dist/rag/setup/DockerDetector.d.ts +67 -0
  405. package/dist/rag/setup/DockerDetector.d.ts.map +1 -0
  406. package/dist/rag/setup/DockerDetector.js +125 -0
  407. package/dist/rag/setup/DockerDetector.js.map +1 -0
  408. package/dist/rag/setup/PostgresSetup.d.ts +20 -0
  409. package/dist/rag/setup/PostgresSetup.d.ts.map +1 -0
  410. package/dist/rag/setup/PostgresSetup.js +133 -0
  411. package/dist/rag/setup/PostgresSetup.js.map +1 -0
  412. package/dist/rag/setup/QdrantSetup.d.ts +26 -0
  413. package/dist/rag/setup/QdrantSetup.d.ts.map +1 -0
  414. package/dist/rag/setup/QdrantSetup.js +96 -0
  415. package/dist/rag/setup/QdrantSetup.js.map +1 -0
  416. package/dist/rag/setup/types.d.ts +55 -0
  417. package/dist/rag/setup/types.d.ts.map +1 -0
  418. package/dist/rag/setup/types.js +6 -0
  419. package/dist/rag/setup/types.js.map +1 -0
  420. package/dist/rag/unified/UnifiedRetriever.d.ts +472 -0
  421. package/dist/rag/unified/UnifiedRetriever.d.ts.map +1 -0
  422. package/dist/rag/unified/UnifiedRetriever.js +887 -0
  423. package/dist/rag/unified/UnifiedRetriever.js.map +1 -0
  424. package/dist/rag/unified/index.d.ts +24 -0
  425. package/dist/rag/unified/index.d.ts.map +1 -0
  426. package/dist/rag/unified/index.js +23 -0
  427. package/dist/rag/unified/index.js.map +1 -0
  428. package/dist/rag/unified/types.d.ts +546 -0
  429. package/dist/rag/unified/types.d.ts.map +1 -0
  430. package/dist/rag/unified/types.js +177 -0
  431. package/dist/rag/unified/types.js.map +1 -0
  432. package/dist/speech/providers/AssemblyAISTTProvider.js.map +1 -1
  433. package/dist/speech/providers/AzureSpeechSTTProvider.js.map +1 -1
  434. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +1 -1
  435. package/dist/speech/providers/DeepgramBatchSTTProvider.js.map +1 -1
  436. package/package.json +5 -2
@@ -0,0 +1,198 @@
1
+ /**
2
+ * @fileoverview Hybrid dense+sparse searcher combining vector embeddings with BM25.
3
+ *
4
+ * Uses Reciprocal Rank Fusion (RRF) to merge results from both systems:
5
+ * - Dense: semantic understanding, handles paraphrasing and conceptual similarity
6
+ * - Sparse: keyword matching, handles exact terms, error codes, function names
7
+ *
8
+ * RRF formula (Cormack et al. 2009):
9
+ * ```
10
+ * score(d) = sum_{i} weight_i / (k + rank_i(d))
11
+ * ```
12
+ * where `k=60` (standard constant) and `rank_i(d)` is the rank of document `d`
13
+ * in result set `i`. Documents not present in a result set are assigned rank infinity.
14
+ *
15
+ * Alternative fusion methods:
16
+ * - **weighted-sum**: `score(d) = w_dense * norm_score_dense(d) + w_sparse * norm_score_sparse(d)`
17
+ * - **interleave**: Round-robin from each result set, deduplicating
18
+ *
19
+ * @module agentos/rag/search/HybridSearcher
20
+ * @see BM25Index for the sparse keyword index
21
+ * @see IVectorStore for the dense vector store interface
22
+ */
23
+ import type { IVectorStore, QueryOptions } from '../IVectorStore.js';
24
+ import type { IEmbeddingManager } from '../IEmbeddingManager.js';
25
+ import { BM25Index } from './BM25Index.js';
26
+ /**
27
+ * Configuration for the hybrid searcher.
28
+ *
29
+ * @interface HybridSearcherConfig
30
+ */
31
+ export interface HybridSearcherConfig {
32
+ /** Weight for dense (vector) results. Range: 0-1. Default: 0.7. */
33
+ denseWeight?: number;
34
+ /** Weight for sparse (BM25) results. Range: 0-1. Default: 0.3. */
35
+ sparseWeight?: number;
36
+ /** RRF constant k. Higher values flatten score differences. Default: 60. */
37
+ rrfK?: number;
38
+ /** Fusion method for merging ranked lists. Default: 'rrf'. */
39
+ fusionMethod?: 'rrf' | 'weighted-sum' | 'interleave';
40
+ }
41
+ /**
42
+ * A hybrid search result combining dense and sparse signals.
43
+ *
44
+ * @interface HybridResult
45
+ * @property {string} id - Document identifier.
46
+ * @property {number} score - Fused relevance score.
47
+ * @property {number} [denseScore] - Score from vector search (if present).
48
+ * @property {number} [sparseScore] - Score from BM25 search (if present).
49
+ * @property {number} [denseRank] - Rank in vector search results (1-based).
50
+ * @property {number} [sparseRank] - Rank in BM25 search results (1-based).
51
+ * @property {string} [textContent] - Document text content if available.
52
+ * @property {Record<string, unknown>} [metadata] - Document metadata.
53
+ */
54
+ export interface HybridResult {
55
+ /** Document identifier. */
56
+ id: string;
57
+ /** Fused relevance score (higher = more relevant). */
58
+ score: number;
59
+ /** Score from the dense (vector) search, if this document appeared in dense results. */
60
+ denseScore?: number;
61
+ /** Score from the sparse (BM25) search, if this document appeared in sparse results. */
62
+ sparseScore?: number;
63
+ /** 1-based rank in the dense search results. */
64
+ denseRank?: number;
65
+ /** 1-based rank in the sparse search results. */
66
+ sparseRank?: number;
67
+ /** Document text content if available from the vector store. */
68
+ textContent?: string;
69
+ /** Document metadata merged from both sources. */
70
+ metadata?: Record<string, unknown>;
71
+ }
72
+ /**
73
+ * Hybrid dense+sparse searcher combining vector embeddings with BM25.
74
+ *
75
+ * Uses Reciprocal Rank Fusion (RRF) to merge results from both retrieval
76
+ * systems, capturing both semantic similarity and exact keyword matches.
77
+ *
78
+ * @example Basic usage
79
+ * ```typescript
80
+ * const bm25 = new BM25Index();
81
+ * bm25.addDocuments(documents);
82
+ *
83
+ * const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
84
+ * denseWeight: 0.7,
85
+ * sparseWeight: 0.3,
86
+ * fusionMethod: 'rrf',
87
+ * });
88
+ *
89
+ * const results = await hybrid.search(
90
+ * 'error TS2304 type declarations',
91
+ * 'my-collection',
92
+ * 10,
93
+ * );
94
+ * ```
95
+ *
96
+ * @example Weighted sum fusion (when you have calibrated scores)
97
+ * ```typescript
98
+ * const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
99
+ * fusionMethod: 'weighted-sum',
100
+ * denseWeight: 0.6,
101
+ * sparseWeight: 0.4,
102
+ * });
103
+ * ```
104
+ */
105
+ export declare class HybridSearcher {
106
+ /** Dense vector store for semantic retrieval. */
107
+ private vectorStore;
108
+ /** Embedding manager for generating query embeddings. */
109
+ private embeddingManager;
110
+ /** Sparse BM25 index for keyword retrieval. */
111
+ private bm25Index;
112
+ /** Resolved configuration with defaults applied. */
113
+ private config;
114
+ /**
115
+ * Creates a new HybridSearcher.
116
+ *
117
+ * @param {IVectorStore} vectorStore - Dense vector store for semantic search.
118
+ * @param {IEmbeddingManager} embeddingManager - Manager for generating query embeddings.
119
+ * @param {BM25Index} bm25Index - BM25 sparse keyword index.
120
+ * @param {HybridSearcherConfig} [config] - Optional configuration overrides.
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * const searcher = new HybridSearcher(store, embeddings, bm25, {
125
+ * denseWeight: 0.7,
126
+ * sparseWeight: 0.3,
127
+ * });
128
+ * ```
129
+ */
130
+ constructor(vectorStore: IVectorStore, embeddingManager: IEmbeddingManager, bm25Index: BM25Index, config?: HybridSearcherConfig);
131
+ /**
132
+ * Searches both dense and sparse indexes, then fuses results.
133
+ *
134
+ * Pipeline:
135
+ * 1. Generate query embedding via the embedding manager
136
+ * 2. Query the dense vector store for semantically similar documents
137
+ * 3. Query the BM25 sparse index for keyword-matching documents
138
+ * 4. Fuse both result sets using the configured fusion method (RRF by default)
139
+ * 5. Return the top K results sorted by fused score
140
+ *
141
+ * @param {string} query - The search query text.
142
+ * @param {string} collectionName - Vector store collection to search.
143
+ * @param {number} [topK=10] - Maximum number of results to return.
144
+ * @param {Partial<QueryOptions>} [queryOptions] - Additional options for the vector store query.
145
+ * @returns {Promise<HybridResult[]>} Fused results sorted by relevance.
146
+ * @throws {Error} If embedding generation fails.
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const results = await hybrid.search('error TS2304', 'knowledge-base', 5);
151
+ * for (const r of results) {
152
+ * console.log(`${r.id}: fused=${r.score.toFixed(4)} dense=${r.denseRank} sparse=${r.sparseRank}`);
153
+ * }
154
+ * ```
155
+ */
156
+ search(query: string, collectionName: string, topK?: number, queryOptions?: Partial<QueryOptions>): Promise<HybridResult[]>;
157
+ /**
158
+ * Fuses results using Reciprocal Rank Fusion (RRF).
159
+ *
160
+ * Formula: `score(d) = sum_i weight_i / (k + rank_i(d))`
161
+ *
162
+ * Documents appearing in both result sets get contributions from both,
163
+ * naturally boosting documents ranked highly by both systems.
164
+ *
165
+ * @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
166
+ * @param {BM25Result[]} sparseResults - BM25 sparse search results.
167
+ * @param {number} topK - Maximum results to return.
168
+ * @returns {HybridResult[]} Fused results sorted by RRF score.
169
+ */
170
+ private fuseRRF;
171
+ /**
172
+ * Fuses results using weighted score summation with min-max normalization.
173
+ *
174
+ * Both score distributions are normalized to [0, 1] before weighting
175
+ * to account for the different scoring scales of dense (cosine similarity)
176
+ * and sparse (BM25 score) systems.
177
+ *
178
+ * @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
179
+ * @param {BM25Result[]} sparseResults - BM25 sparse search results.
180
+ * @param {number} topK - Maximum results to return.
181
+ * @returns {HybridResult[]} Fused results sorted by weighted score.
182
+ */
183
+ private fuseWeightedSum;
184
+ /**
185
+ * Fuses results using round-robin interleaving with deduplication.
186
+ *
187
+ * Alternates between picking the next-best dense result and the
188
+ * next-best sparse result, skipping documents already included.
189
+ * This provides a simple diversity-preserving fusion.
190
+ *
191
+ * @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
192
+ * @param {BM25Result[]} sparseResults - BM25 sparse search results.
193
+ * @param {number} topK - Maximum results to return.
194
+ * @returns {HybridResult[]} Interleaved results.
195
+ */
196
+ private fuseInterleave;
197
+ }
198
+ //# sourceMappingURL=HybridSearcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridSearcher.d.ts","sourceRoot":"","sources":["../../../src/rag/search/HybridSearcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAwC,MAAM,oBAAoB,CAAC;AAC3G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAI5D;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,KAAK,GAAG,cAAc,GAAG,YAAY,CAAC;CACtD;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,cAAc;IACzB,iDAAiD;IACjD,OAAO,CAAC,WAAW,CAAe;IAElC,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAoB;IAE5C,+CAA+C;IAC/C,OAAO,CAAC,SAAS,CAAY;IAE7B,oDAAoD;IACpD,OAAO,CAAC,MAAM,CAAiC;IAE/C;;;;;;;;;;;;;;;OAeG;gBAED,WAAW,EAAE,YAAY,EACzB,gBAAgB,EAAE,iBAAiB,EACnC,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,oBAAoB;IAa/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,MAAW,EACjB,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACnC,OAAO,CAAC,YAAY,EAAE,CAAC;IA0C1B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,OAAO;IAyDf;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,eAAe;IAoDvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;CA+CvB"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * @fileoverview Hybrid dense+sparse searcher combining vector embeddings with BM25.
3
+ *
4
+ * Uses Reciprocal Rank Fusion (RRF) to merge results from both systems:
5
+ * - Dense: semantic understanding, handles paraphrasing and conceptual similarity
6
+ * - Sparse: keyword matching, handles exact terms, error codes, function names
7
+ *
8
+ * RRF formula (Cormack et al. 2009):
9
+ * ```
10
+ * score(d) = sum_{i} weight_i / (k + rank_i(d))
11
+ * ```
12
+ * where `k=60` (standard constant) and `rank_i(d)` is the rank of document `d`
13
+ * in result set `i`. Documents not present in a result set are assigned rank infinity.
14
+ *
15
+ * Alternative fusion methods:
16
+ * - **weighted-sum**: `score(d) = w_dense * norm_score_dense(d) + w_sparse * norm_score_sparse(d)`
17
+ * - **interleave**: Round-robin from each result set, deduplicating
18
+ *
19
+ * @module agentos/rag/search/HybridSearcher
20
+ * @see BM25Index for the sparse keyword index
21
+ * @see IVectorStore for the dense vector store interface
22
+ */
23
+ // ── Hybrid Searcher ───────────────────────────────────────────────────────
24
+ /**
25
+ * Hybrid dense+sparse searcher combining vector embeddings with BM25.
26
+ *
27
+ * Uses Reciprocal Rank Fusion (RRF) to merge results from both retrieval
28
+ * systems, capturing both semantic similarity and exact keyword matches.
29
+ *
30
+ * @example Basic usage
31
+ * ```typescript
32
+ * const bm25 = new BM25Index();
33
+ * bm25.addDocuments(documents);
34
+ *
35
+ * const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
36
+ * denseWeight: 0.7,
37
+ * sparseWeight: 0.3,
38
+ * fusionMethod: 'rrf',
39
+ * });
40
+ *
41
+ * const results = await hybrid.search(
42
+ * 'error TS2304 type declarations',
43
+ * 'my-collection',
44
+ * 10,
45
+ * );
46
+ * ```
47
+ *
48
+ * @example Weighted sum fusion (when you have calibrated scores)
49
+ * ```typescript
50
+ * const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
51
+ * fusionMethod: 'weighted-sum',
52
+ * denseWeight: 0.6,
53
+ * sparseWeight: 0.4,
54
+ * });
55
+ * ```
56
+ */
57
+ export class HybridSearcher {
58
+ /**
59
+ * Creates a new HybridSearcher.
60
+ *
61
+ * @param {IVectorStore} vectorStore - Dense vector store for semantic search.
62
+ * @param {IEmbeddingManager} embeddingManager - Manager for generating query embeddings.
63
+ * @param {BM25Index} bm25Index - BM25 sparse keyword index.
64
+ * @param {HybridSearcherConfig} [config] - Optional configuration overrides.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const searcher = new HybridSearcher(store, embeddings, bm25, {
69
+ * denseWeight: 0.7,
70
+ * sparseWeight: 0.3,
71
+ * });
72
+ * ```
73
+ */
74
+ constructor(vectorStore, embeddingManager, bm25Index, config) {
75
+ this.vectorStore = vectorStore;
76
+ this.embeddingManager = embeddingManager;
77
+ this.bm25Index = bm25Index;
78
+ this.config = {
79
+ denseWeight: config?.denseWeight ?? 0.7,
80
+ sparseWeight: config?.sparseWeight ?? 0.3,
81
+ rrfK: config?.rrfK ?? 60,
82
+ fusionMethod: config?.fusionMethod ?? 'rrf',
83
+ };
84
+ }
85
+ /**
86
+ * Searches both dense and sparse indexes, then fuses results.
87
+ *
88
+ * Pipeline:
89
+ * 1. Generate query embedding via the embedding manager
90
+ * 2. Query the dense vector store for semantically similar documents
91
+ * 3. Query the BM25 sparse index for keyword-matching documents
92
+ * 4. Fuse both result sets using the configured fusion method (RRF by default)
93
+ * 5. Return the top K results sorted by fused score
94
+ *
95
+ * @param {string} query - The search query text.
96
+ * @param {string} collectionName - Vector store collection to search.
97
+ * @param {number} [topK=10] - Maximum number of results to return.
98
+ * @param {Partial<QueryOptions>} [queryOptions] - Additional options for the vector store query.
99
+ * @returns {Promise<HybridResult[]>} Fused results sorted by relevance.
100
+ * @throws {Error} If embedding generation fails.
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * const results = await hybrid.search('error TS2304', 'knowledge-base', 5);
105
+ * for (const r of results) {
106
+ * console.log(`${r.id}: fused=${r.score.toFixed(4)} dense=${r.denseRank} sparse=${r.sparseRank}`);
107
+ * }
108
+ * ```
109
+ */
110
+ async search(query, collectionName, topK = 10, queryOptions) {
111
+ // Fetch more candidates from each system to improve fusion quality
112
+ const candidateMultiplier = 3;
113
+ const candidateK = topK * candidateMultiplier;
114
+ // 1. Generate query embedding
115
+ const embeddingResponse = await this.embeddingManager.generateEmbeddings({
116
+ texts: [query],
117
+ });
118
+ if (!embeddingResponse.embeddings?.[0] ||
119
+ embeddingResponse.embeddings[0].length === 0) {
120
+ throw new Error('HybridSearcher: Failed to generate query embedding.');
121
+ }
122
+ const queryEmbedding = embeddingResponse.embeddings[0];
123
+ // 2. Execute both searches in parallel
124
+ const [denseResult, sparseResults] = await Promise.all([
125
+ this.vectorStore.query(collectionName, queryEmbedding, {
126
+ topK: candidateK,
127
+ includeTextContent: true,
128
+ includeMetadata: true,
129
+ ...queryOptions,
130
+ }),
131
+ Promise.resolve(this.bm25Index.search(query, candidateK)),
132
+ ]);
133
+ // 3. Fuse results
134
+ switch (this.config.fusionMethod) {
135
+ case 'weighted-sum':
136
+ return this.fuseWeightedSum(denseResult.documents, sparseResults, topK);
137
+ case 'interleave':
138
+ return this.fuseInterleave(denseResult.documents, sparseResults, topK);
139
+ case 'rrf':
140
+ default:
141
+ return this.fuseRRF(denseResult.documents, sparseResults, topK);
142
+ }
143
+ }
144
+ /**
145
+ * Fuses results using Reciprocal Rank Fusion (RRF).
146
+ *
147
+ * Formula: `score(d) = sum_i weight_i / (k + rank_i(d))`
148
+ *
149
+ * Documents appearing in both result sets get contributions from both,
150
+ * naturally boosting documents ranked highly by both systems.
151
+ *
152
+ * @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
153
+ * @param {BM25Result[]} sparseResults - BM25 sparse search results.
154
+ * @param {number} topK - Maximum results to return.
155
+ * @returns {HybridResult[]} Fused results sorted by RRF score.
156
+ */
157
+ fuseRRF(denseResults, sparseResults, topK) {
158
+ const resultMap = new Map();
159
+ const k = this.config.rrfK;
160
+ // Score from dense results
161
+ for (let rank = 0; rank < denseResults.length; rank++) {
162
+ const doc = denseResults[rank];
163
+ const rrfScore = this.config.denseWeight / (k + rank + 1); // rank is 1-based in formula
164
+ const existing = resultMap.get(doc.id);
165
+ if (existing) {
166
+ existing.score += rrfScore;
167
+ existing.denseScore = doc.similarityScore;
168
+ existing.denseRank = rank + 1;
169
+ existing.textContent = existing.textContent ?? doc.textContent;
170
+ }
171
+ else {
172
+ resultMap.set(doc.id, {
173
+ id: doc.id,
174
+ score: rrfScore,
175
+ denseScore: doc.similarityScore,
176
+ denseRank: rank + 1,
177
+ textContent: doc.textContent,
178
+ metadata: doc.metadata,
179
+ });
180
+ }
181
+ }
182
+ // Score from sparse results
183
+ for (let rank = 0; rank < sparseResults.length; rank++) {
184
+ const result = sparseResults[rank];
185
+ const rrfScore = this.config.sparseWeight / (k + rank + 1);
186
+ const existing = resultMap.get(result.id);
187
+ if (existing) {
188
+ existing.score += rrfScore;
189
+ existing.sparseScore = result.score;
190
+ existing.sparseRank = rank + 1;
191
+ existing.metadata = existing.metadata ?? result.metadata;
192
+ }
193
+ else {
194
+ resultMap.set(result.id, {
195
+ id: result.id,
196
+ score: rrfScore,
197
+ sparseScore: result.score,
198
+ sparseRank: rank + 1,
199
+ metadata: result.metadata,
200
+ });
201
+ }
202
+ }
203
+ // Sort by fused score descending and return top K
204
+ return Array.from(resultMap.values())
205
+ .sort((a, b) => b.score - a.score)
206
+ .slice(0, topK);
207
+ }
208
+ /**
209
+ * Fuses results using weighted score summation with min-max normalization.
210
+ *
211
+ * Both score distributions are normalized to [0, 1] before weighting
212
+ * to account for the different scoring scales of dense (cosine similarity)
213
+ * and sparse (BM25 score) systems.
214
+ *
215
+ * @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
216
+ * @param {BM25Result[]} sparseResults - BM25 sparse search results.
217
+ * @param {number} topK - Maximum results to return.
218
+ * @returns {HybridResult[]} Fused results sorted by weighted score.
219
+ */
220
+ fuseWeightedSum(denseResults, sparseResults, topK) {
221
+ // Normalize dense scores to [0, 1]
222
+ const denseScores = denseResults.map((d) => d.similarityScore);
223
+ const denseMin = Math.min(...denseScores, 0);
224
+ const denseMax = Math.max(...denseScores, 1);
225
+ const denseRange = denseMax - denseMin || 1;
226
+ // Normalize sparse scores to [0, 1]
227
+ const sparseScores = sparseResults.map((r) => r.score);
228
+ const sparseMin = Math.min(...sparseScores, 0);
229
+ const sparseMax = Math.max(...sparseScores, 1);
230
+ const sparseRange = sparseMax - sparseMin || 1;
231
+ const resultMap = new Map();
232
+ for (const doc of denseResults) {
233
+ const normalizedScore = (doc.similarityScore - denseMin) / denseRange;
234
+ resultMap.set(doc.id, {
235
+ id: doc.id,
236
+ score: this.config.denseWeight * normalizedScore,
237
+ denseScore: doc.similarityScore,
238
+ textContent: doc.textContent,
239
+ metadata: doc.metadata,
240
+ });
241
+ }
242
+ for (const result of sparseResults) {
243
+ const normalizedScore = (result.score - sparseMin) / sparseRange;
244
+ const existing = resultMap.get(result.id);
245
+ if (existing) {
246
+ existing.score += this.config.sparseWeight * normalizedScore;
247
+ existing.sparseScore = result.score;
248
+ existing.metadata = existing.metadata ?? result.metadata;
249
+ }
250
+ else {
251
+ resultMap.set(result.id, {
252
+ id: result.id,
253
+ score: this.config.sparseWeight * normalizedScore,
254
+ sparseScore: result.score,
255
+ metadata: result.metadata,
256
+ });
257
+ }
258
+ }
259
+ return Array.from(resultMap.values())
260
+ .sort((a, b) => b.score - a.score)
261
+ .slice(0, topK);
262
+ }
263
+ /**
264
+ * Fuses results using round-robin interleaving with deduplication.
265
+ *
266
+ * Alternates between picking the next-best dense result and the
267
+ * next-best sparse result, skipping documents already included.
268
+ * This provides a simple diversity-preserving fusion.
269
+ *
270
+ * @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
271
+ * @param {BM25Result[]} sparseResults - BM25 sparse search results.
272
+ * @param {number} topK - Maximum results to return.
273
+ * @returns {HybridResult[]} Interleaved results.
274
+ */
275
+ fuseInterleave(denseResults, sparseResults, topK) {
276
+ const results = [];
277
+ const seen = new Set();
278
+ let di = 0;
279
+ let si = 0;
280
+ while (results.length < topK && (di < denseResults.length || si < sparseResults.length)) {
281
+ // Pick from dense
282
+ while (di < denseResults.length && results.length < topK) {
283
+ const doc = denseResults[di++];
284
+ if (!seen.has(doc.id)) {
285
+ seen.add(doc.id);
286
+ results.push({
287
+ id: doc.id,
288
+ score: doc.similarityScore,
289
+ denseScore: doc.similarityScore,
290
+ denseRank: di,
291
+ textContent: doc.textContent,
292
+ metadata: doc.metadata,
293
+ });
294
+ break;
295
+ }
296
+ }
297
+ // Pick from sparse
298
+ while (si < sparseResults.length && results.length < topK) {
299
+ const result = sparseResults[si++];
300
+ if (!seen.has(result.id)) {
301
+ seen.add(result.id);
302
+ results.push({
303
+ id: result.id,
304
+ score: result.score,
305
+ sparseScore: result.score,
306
+ sparseRank: si,
307
+ metadata: result.metadata,
308
+ });
309
+ break;
310
+ }
311
+ }
312
+ }
313
+ return results;
314
+ }
315
+ }
316
+ //# sourceMappingURL=HybridSearcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridSearcher.js","sourceRoot":"","sources":["../../../src/rag/search/HybridSearcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Hybrid search module combining dense vector search with BM25 sparse retrieval.
3
+ *
4
+ * Exports:
5
+ * - {@link BM25Index} — Sparse keyword index using BM25 ranking
6
+ * - {@link HybridSearcher} — Fuses dense + sparse results via RRF or other strategies
7
+ *
8
+ * @module agentos/rag/search
9
+ */
10
+ export { BM25Index, type BM25Config, type BM25Document, type BM25Result, type BM25Stats } from './BM25Index.js';
11
+ export { HybridSearcher, type HybridSearcherConfig, type HybridResult } from './HybridSearcher.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rag/search/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Hybrid search module combining dense vector search with BM25 sparse retrieval.
3
+ *
4
+ * Exports:
5
+ * - {@link BM25Index} — Sparse keyword index using BM25 ranking
6
+ * - {@link HybridSearcher} — Fuses dense + sparse results via RRF or other strategies
7
+ *
8
+ * @module agentos/rag/search
9
+ */
10
+ export { BM25Index } from './BM25Index.js';
11
+ export { HybridSearcher } from './HybridSearcher.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rag/search/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAuE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,cAAc,EAAgD,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @fileoverview Docker environment detection and container management.
3
+ * @module rag/setup/DockerDetector
4
+ *
5
+ * Utility class for detecting whether Docker is available, checking
6
+ * container state, starting/stopping containers, and pulling images.
7
+ * Used by QdrantSetup and PostgresSetup for auto-provisioning.
8
+ */
9
+ export declare class DockerDetector {
10
+ /**
11
+ * Check if Docker is installed and the daemon is running.
12
+ * Runs `docker info` with a 5-second timeout.
13
+ *
14
+ * @returns True if Docker is available and responsive.
15
+ */
16
+ static isDockerAvailable(): boolean;
17
+ /**
18
+ * Check the state of a named Docker container.
19
+ *
20
+ * @param name - Container name to inspect.
21
+ * @returns 'running' if active, 'stopped' if exists but not running,
22
+ * 'not_found' if the container doesn't exist.
23
+ */
24
+ static getContainerState(name: string): 'running' | 'stopped' | 'not_found';
25
+ /**
26
+ * Start a stopped container by name.
27
+ *
28
+ * @param name - Container name to start.
29
+ * @throws If the container cannot be started.
30
+ */
31
+ static startContainer(name: string): void;
32
+ /**
33
+ * Pull a Docker image and run a new container.
34
+ *
35
+ * @param opts.name - Container name.
36
+ * @param opts.image - Docker image (e.g. 'qdrant/qdrant:latest').
37
+ * @param opts.ports - Port mappings (e.g. ['6333:6333', '6334:6334']).
38
+ * @param opts.volumes - Volume mounts (e.g. ['data-vol:/data']).
39
+ * @param opts.env - Environment variables (e.g. { POSTGRES_PASSWORD: 'pw' }).
40
+ */
41
+ static pullAndRun(opts: {
42
+ name: string;
43
+ image: string;
44
+ ports: string[];
45
+ volumes: string[];
46
+ env?: Record<string, string>;
47
+ }): void;
48
+ /**
49
+ * Poll a health check URL until it returns 200 or timeout is reached.
50
+ * Checks every 500ms.
51
+ *
52
+ * @param url - Health check endpoint (e.g. 'http://localhost:6333/healthz').
53
+ * @param timeoutMs - Maximum time to wait in milliseconds. @default 15000
54
+ * @returns True if the endpoint became healthy within the timeout.
55
+ */
56
+ static waitForHealthy(url: string, timeoutMs?: number): Promise<boolean>;
57
+ /**
58
+ * Get the mapped host port for a container's internal port.
59
+ * Useful when the host port was dynamically assigned.
60
+ *
61
+ * @param name - Container name.
62
+ * @param internalPort - The container-internal port to look up.
63
+ * @returns The host port number, or null if not found.
64
+ */
65
+ static getHostPort(name: string, internalPort: number): number | null;
66
+ }
67
+ //# sourceMappingURL=DockerDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerDetector.d.ts","sourceRoot":"","sources":["../../../src/rag/setup/DockerDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,qBAAa,cAAc;IACzB;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,IAAI,OAAO;IASnC;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW;IAc3E;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,GAAG,IAAI;IAuBR;;;;;;;OAOG;WACU,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAc7E;;;;;;;OAOG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CActE"}