@framers/agentos 0.1.119 → 0.1.121

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 (409) 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/extensions/MultiRegistryLoader.js.map +1 -1
  233. package/dist/index.d.ts +17 -2
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +12 -0
  236. package/dist/index.js.map +1 -1
  237. package/dist/memory/CognitiveMemoryManager.d.ts +40 -0
  238. package/dist/memory/CognitiveMemoryManager.d.ts.map +1 -1
  239. package/dist/memory/CognitiveMemoryManager.js +54 -1
  240. package/dist/memory/CognitiveMemoryManager.js.map +1 -1
  241. package/dist/memory/facade/Memory.d.ts +4 -0
  242. package/dist/memory/facade/Memory.d.ts.map +1 -1
  243. package/dist/memory/facade/Memory.js +140 -4
  244. package/dist/memory/facade/Memory.js.map +1 -1
  245. package/dist/memory/facade/types.d.ts +30 -2
  246. package/dist/memory/facade/types.d.ts.map +1 -1
  247. package/dist/memory/index.d.ts +1 -0
  248. package/dist/memory/index.d.ts.map +1 -1
  249. package/dist/memory/index.js +1 -0
  250. package/dist/memory/index.js.map +1 -1
  251. package/dist/memory/store/HnswSidecar.d.ts +115 -0
  252. package/dist/memory/store/HnswSidecar.d.ts.map +1 -0
  253. package/dist/memory/store/HnswSidecar.js +256 -0
  254. package/dist/memory/store/HnswSidecar.js.map +1 -0
  255. package/dist/memory/types.d.ts +15 -0
  256. package/dist/memory/types.d.ts.map +1 -1
  257. package/dist/query-router/QueryClassifier.d.ts +192 -21
  258. package/dist/query-router/QueryClassifier.d.ts.map +1 -1
  259. package/dist/query-router/QueryClassifier.js +604 -23
  260. package/dist/query-router/QueryClassifier.js.map +1 -1
  261. package/dist/query-router/QueryDispatcher.d.ts +106 -8
  262. package/dist/query-router/QueryDispatcher.d.ts.map +1 -1
  263. package/dist/query-router/QueryDispatcher.js +387 -8
  264. package/dist/query-router/QueryDispatcher.js.map +1 -1
  265. package/dist/query-router/QueryRouter.d.ts +198 -14
  266. package/dist/query-router/QueryRouter.d.ts.map +1 -1
  267. package/dist/query-router/QueryRouter.js +738 -50
  268. package/dist/query-router/QueryRouter.js.map +1 -1
  269. package/dist/query-router/index.d.ts +1 -1
  270. package/dist/query-router/index.d.ts.map +1 -1
  271. package/dist/query-router/index.js +1 -1
  272. package/dist/query-router/index.js.map +1 -1
  273. package/dist/query-router/types.d.ts +396 -3
  274. package/dist/query-router/types.d.ts.map +1 -1
  275. package/dist/query-router/types.js +35 -0
  276. package/dist/query-router/types.js.map +1 -1
  277. package/dist/rag/HydeRetriever.d.ts +108 -0
  278. package/dist/rag/HydeRetriever.d.ts.map +1 -1
  279. package/dist/rag/HydeRetriever.js +184 -0
  280. package/dist/rag/HydeRetriever.js.map +1 -1
  281. package/dist/rag/IRetrievalAugmentor.d.ts +15 -0
  282. package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
  283. package/dist/rag/RetrievalAugmentor.d.ts +58 -0
  284. package/dist/rag/RetrievalAugmentor.d.ts.map +1 -1
  285. package/dist/rag/RetrievalAugmentor.js +200 -32
  286. package/dist/rag/RetrievalAugmentor.js.map +1 -1
  287. package/dist/rag/VectorStoreManager.js +1 -1
  288. package/dist/rag/audit/RAGAuditCollector.d.ts +7 -0
  289. package/dist/rag/audit/RAGAuditCollector.d.ts.map +1 -1
  290. package/dist/rag/audit/RAGAuditCollector.js +10 -0
  291. package/dist/rag/audit/RAGAuditCollector.js.map +1 -1
  292. package/dist/rag/audit/RAGAuditTypes.d.ts +10 -1
  293. package/dist/rag/audit/RAGAuditTypes.d.ts.map +1 -1
  294. package/dist/rag/chunking/SemanticChunker.d.ts +210 -0
  295. package/dist/rag/chunking/SemanticChunker.d.ts.map +1 -0
  296. package/dist/rag/chunking/SemanticChunker.js +460 -0
  297. package/dist/rag/chunking/SemanticChunker.js.map +1 -0
  298. package/dist/rag/chunking/index.d.ts +10 -0
  299. package/dist/rag/chunking/index.d.ts.map +1 -0
  300. package/dist/rag/chunking/index.js +10 -0
  301. package/dist/rag/chunking/index.js.map +1 -0
  302. package/dist/rag/implementations/vector_stores/PineconeVectorStore.d.ts +103 -0
  303. package/dist/rag/implementations/vector_stores/PineconeVectorStore.d.ts.map +1 -0
  304. package/dist/rag/implementations/vector_stores/PineconeVectorStore.js +315 -0
  305. package/dist/rag/implementations/vector_stores/PineconeVectorStore.js.map +1 -0
  306. package/dist/rag/implementations/vector_stores/PostgresVectorStore.d.ts +107 -0
  307. package/dist/rag/implementations/vector_stores/PostgresVectorStore.d.ts.map +1 -0
  308. package/dist/rag/implementations/vector_stores/PostgresVectorStore.js +438 -0
  309. package/dist/rag/implementations/vector_stores/PostgresVectorStore.js.map +1 -0
  310. package/dist/rag/index.d.ts +15 -1
  311. package/dist/rag/index.d.ts.map +1 -1
  312. package/dist/rag/index.js +32 -0
  313. package/dist/rag/index.js.map +1 -1
  314. package/dist/rag/migration/MigrationEngine.d.ts +47 -0
  315. package/dist/rag/migration/MigrationEngine.d.ts.map +1 -0
  316. package/dist/rag/migration/MigrationEngine.js +168 -0
  317. package/dist/rag/migration/MigrationEngine.js.map +1 -0
  318. package/dist/rag/migration/adapters/PineconeSourceAdapter.d.ts +23 -0
  319. package/dist/rag/migration/adapters/PineconeSourceAdapter.d.ts.map +1 -0
  320. package/dist/rag/migration/adapters/PineconeSourceAdapter.js +63 -0
  321. package/dist/rag/migration/adapters/PineconeSourceAdapter.js.map +1 -0
  322. package/dist/rag/migration/adapters/PostgresSourceAdapter.d.ts +30 -0
  323. package/dist/rag/migration/adapters/PostgresSourceAdapter.d.ts.map +1 -0
  324. package/dist/rag/migration/adapters/PostgresSourceAdapter.js +71 -0
  325. package/dist/rag/migration/adapters/PostgresSourceAdapter.js.map +1 -0
  326. package/dist/rag/migration/adapters/PostgresTargetAdapter.d.ts +38 -0
  327. package/dist/rag/migration/adapters/PostgresTargetAdapter.d.ts.map +1 -0
  328. package/dist/rag/migration/adapters/PostgresTargetAdapter.js +114 -0
  329. package/dist/rag/migration/adapters/PostgresTargetAdapter.js.map +1 -0
  330. package/dist/rag/migration/adapters/QdrantSourceAdapter.d.ts +36 -0
  331. package/dist/rag/migration/adapters/QdrantSourceAdapter.d.ts.map +1 -0
  332. package/dist/rag/migration/adapters/QdrantSourceAdapter.js +109 -0
  333. package/dist/rag/migration/adapters/QdrantSourceAdapter.js.map +1 -0
  334. package/dist/rag/migration/adapters/QdrantTargetAdapter.d.ts +35 -0
  335. package/dist/rag/migration/adapters/QdrantTargetAdapter.d.ts.map +1 -0
  336. package/dist/rag/migration/adapters/QdrantTargetAdapter.js +110 -0
  337. package/dist/rag/migration/adapters/QdrantTargetAdapter.js.map +1 -0
  338. package/dist/rag/migration/adapters/SqliteSourceAdapter.d.ts +37 -0
  339. package/dist/rag/migration/adapters/SqliteSourceAdapter.d.ts.map +1 -0
  340. package/dist/rag/migration/adapters/SqliteSourceAdapter.js +72 -0
  341. package/dist/rag/migration/adapters/SqliteSourceAdapter.js.map +1 -0
  342. package/dist/rag/migration/adapters/SqliteTargetAdapter.d.ts +47 -0
  343. package/dist/rag/migration/adapters/SqliteTargetAdapter.d.ts.map +1 -0
  344. package/dist/rag/migration/adapters/SqliteTargetAdapter.js +93 -0
  345. package/dist/rag/migration/adapters/SqliteTargetAdapter.js.map +1 -0
  346. package/dist/rag/migration/types.d.ts +108 -0
  347. package/dist/rag/migration/types.d.ts.map +1 -0
  348. package/dist/rag/migration/types.js +11 -0
  349. package/dist/rag/migration/types.js.map +1 -0
  350. package/dist/rag/multimodal/MultimodalIndexer.d.ts +35 -0
  351. package/dist/rag/multimodal/MultimodalIndexer.d.ts.map +1 -1
  352. package/dist/rag/multimodal/MultimodalIndexer.js +66 -1
  353. package/dist/rag/multimodal/MultimodalIndexer.js.map +1 -1
  354. package/dist/rag/multimodal/types.d.ts +24 -0
  355. package/dist/rag/multimodal/types.d.ts.map +1 -1
  356. package/dist/rag/raptor/RaptorTree.d.ts +268 -0
  357. package/dist/rag/raptor/RaptorTree.d.ts.map +1 -0
  358. package/dist/rag/raptor/RaptorTree.js +443 -0
  359. package/dist/rag/raptor/RaptorTree.js.map +1 -0
  360. package/dist/rag/raptor/index.d.ts +11 -0
  361. package/dist/rag/raptor/index.d.ts.map +1 -0
  362. package/dist/rag/raptor/index.js +11 -0
  363. package/dist/rag/raptor/index.js.map +1 -0
  364. package/dist/rag/reranking/providers/CohereReranker.js.map +1 -1
  365. package/dist/rag/search/BM25Index.d.ts +282 -0
  366. package/dist/rag/search/BM25Index.d.ts.map +1 -0
  367. package/dist/rag/search/BM25Index.js +344 -0
  368. package/dist/rag/search/BM25Index.js.map +1 -0
  369. package/dist/rag/search/HybridSearcher.d.ts +198 -0
  370. package/dist/rag/search/HybridSearcher.d.ts.map +1 -0
  371. package/dist/rag/search/HybridSearcher.js +316 -0
  372. package/dist/rag/search/HybridSearcher.js.map +1 -0
  373. package/dist/rag/search/index.d.ts +12 -0
  374. package/dist/rag/search/index.d.ts.map +1 -0
  375. package/dist/rag/search/index.js +12 -0
  376. package/dist/rag/search/index.js.map +1 -0
  377. package/dist/rag/setup/DockerDetector.d.ts +67 -0
  378. package/dist/rag/setup/DockerDetector.d.ts.map +1 -0
  379. package/dist/rag/setup/DockerDetector.js +125 -0
  380. package/dist/rag/setup/DockerDetector.js.map +1 -0
  381. package/dist/rag/setup/PostgresSetup.d.ts +20 -0
  382. package/dist/rag/setup/PostgresSetup.d.ts.map +1 -0
  383. package/dist/rag/setup/PostgresSetup.js +133 -0
  384. package/dist/rag/setup/PostgresSetup.js.map +1 -0
  385. package/dist/rag/setup/QdrantSetup.d.ts +26 -0
  386. package/dist/rag/setup/QdrantSetup.d.ts.map +1 -0
  387. package/dist/rag/setup/QdrantSetup.js +96 -0
  388. package/dist/rag/setup/QdrantSetup.js.map +1 -0
  389. package/dist/rag/setup/types.d.ts +55 -0
  390. package/dist/rag/setup/types.d.ts.map +1 -0
  391. package/dist/rag/setup/types.js +6 -0
  392. package/dist/rag/setup/types.js.map +1 -0
  393. package/dist/rag/unified/UnifiedRetriever.d.ts +472 -0
  394. package/dist/rag/unified/UnifiedRetriever.d.ts.map +1 -0
  395. package/dist/rag/unified/UnifiedRetriever.js +887 -0
  396. package/dist/rag/unified/UnifiedRetriever.js.map +1 -0
  397. package/dist/rag/unified/index.d.ts +24 -0
  398. package/dist/rag/unified/index.d.ts.map +1 -0
  399. package/dist/rag/unified/index.js +23 -0
  400. package/dist/rag/unified/index.js.map +1 -0
  401. package/dist/rag/unified/types.d.ts +546 -0
  402. package/dist/rag/unified/types.d.ts.map +1 -0
  403. package/dist/rag/unified/types.js +177 -0
  404. package/dist/rag/unified/types.js.map +1 -0
  405. package/dist/speech/providers/AssemblyAISTTProvider.js.map +1 -1
  406. package/dist/speech/providers/AzureSpeechSTTProvider.js.map +1 -1
  407. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +1 -1
  408. package/dist/speech/providers/DeepgramBatchSTTProvider.js.map +1 -1
  409. package/package.json +5 -1
@@ -0,0 +1,648 @@
1
+ /**
2
+ * @module core/video/VideoAnalyzer
3
+ *
4
+ * Wires {@link SceneDetector}, {@link VisionPipeline}, and an optional
5
+ * {@link SpeechToTextProvider} into a structured video analysis pipeline.
6
+ *
7
+ * The analyzer replaces the monolithic `ingestVideo()` approach in
8
+ * {@link MultimodalMemoryBridge} with a composable, progress-reporting
9
+ * pipeline that produces rich scene descriptions, summaries, and optional
10
+ * RAG-indexed chunks.
11
+ *
12
+ * ## Pipeline stages
13
+ *
14
+ * ```
15
+ * Video Buffer
16
+ * ↓
17
+ * 1. Write to temp file
18
+ * 2. ffprobe → duration
19
+ * 3. ffmpeg → 1fps PNG frames
20
+ * 4. SceneDetector.detectScenes(frames)
21
+ * 5. Per-scene: VisionPipeline.process(keyFrame)
22
+ * 6. (optional) ffmpeg → WAV audio → STT → transcript segments
23
+ * 7. generateText() LLM → overall summary
24
+ * 8. (optional) RAG chunk indexing
25
+ * 9. Clean up temp files
26
+ * ```
27
+ *
28
+ * ## Usage
29
+ *
30
+ * ```typescript
31
+ * import { VideoAnalyzer } from '../../core/video/index.js';
32
+ *
33
+ * const analyzer = new VideoAnalyzer();
34
+ * const result = await analyzer.analyzeVideo({
35
+ * video: videoBuffer,
36
+ * transcribeAudio: true,
37
+ * onProgress: (evt) => console.log(`${evt.phase}: ${evt.progress}%`),
38
+ * });
39
+ *
40
+ * for (const scene of result.scenes) {
41
+ * console.log(`[${scene.startSec}-${scene.endSec}s] ${scene.description}`);
42
+ * }
43
+ * ```
44
+ *
45
+ * @see {@link IVideoAnalyzer} for the base interface.
46
+ * @see {@link SceneDetector} for scene boundary detection.
47
+ * @see {@link VisionPipeline} for frame description.
48
+ * @see {@link SpeechToTextProvider} for audio transcription.
49
+ */
50
+ import { execFile as execFileCb } from 'node:child_process';
51
+ import { promisify } from 'node:util';
52
+ import { randomUUID } from 'node:crypto';
53
+ import { tmpdir } from 'node:os';
54
+ import { join } from 'node:path';
55
+ import { writeFile, readFile, readdir, mkdir, rm, } from 'node:fs/promises';
56
+ import { SceneDetector } from '../vision/SceneDetector.js';
57
+ const execFile = promisify(execFileCb);
58
+ // ---------------------------------------------------------------------------
59
+ // VideoAnalyzer
60
+ // ---------------------------------------------------------------------------
61
+ /**
62
+ * Structured video analysis pipeline that wires together scene detection,
63
+ * vision description, audio transcription, and LLM summarization.
64
+ *
65
+ * Implements the base {@link IVideoAnalyzer} interface for simple analysis
66
+ * requests, and exposes an `analyze()` method for rich analysis with
67
+ * progress reporting, configurable detail levels, and optional RAG indexing.
68
+ *
69
+ * All ffmpeg/ffprobe invocations use `execFile` (not `exec`) for safety —
70
+ * arguments are passed as arrays, preventing shell injection.
71
+ */
72
+ export class VideoAnalyzer {
73
+ // -------------------------------------------------------------------------
74
+ // Constructor
75
+ // -------------------------------------------------------------------------
76
+ /**
77
+ * Create a new VideoAnalyzer with optional injected dependencies.
78
+ *
79
+ * Missing dependencies are auto-created with sensible defaults:
80
+ * - **VisionPipeline**: created lazily via `createVisionPipeline()` on first use
81
+ * - **SceneDetector**: created immediately with default thresholds
82
+ * - **SpeechToTextProvider**: left undefined — transcription skipped when missing
83
+ *
84
+ * @param deps - Optional dependency overrides.
85
+ */
86
+ constructor(deps) {
87
+ this._visionPipeline = deps?.visionPipeline;
88
+ this._sttProvider = deps?.sttProvider;
89
+ this._sceneDetector = deps?.sceneDetector ?? new SceneDetector();
90
+ this._userSuppliedVision = !!deps?.visionPipeline;
91
+ }
92
+ // -------------------------------------------------------------------------
93
+ // IVideoAnalyzer — simple analysis
94
+ // -------------------------------------------------------------------------
95
+ /**
96
+ * Analyse a video and return structured understanding results.
97
+ *
98
+ * This is the simple {@link IVideoAnalyzer} interface method. For richer
99
+ * analysis with progress reporting and scene descriptions, use
100
+ * {@link analyze} instead.
101
+ *
102
+ * @param request - The analysis parameters (video source + optional prompt).
103
+ * @returns Structured analysis including description, scenes, and duration.
104
+ */
105
+ async analyzeVideo(request) {
106
+ // Resolve video buffer from URL or direct buffer
107
+ let videoBuffer;
108
+ if (request.videoBuffer) {
109
+ videoBuffer = request.videoBuffer;
110
+ }
111
+ else if (request.videoUrl) {
112
+ const response = await fetch(request.videoUrl);
113
+ videoBuffer = Buffer.from(await response.arrayBuffer());
114
+ }
115
+ else {
116
+ throw new Error('VideoAnalyzer.analyzeVideo: either videoUrl or videoBuffer must be provided.');
117
+ }
118
+ const rich = await this.analyze({
119
+ video: videoBuffer,
120
+ prompt: request.prompt,
121
+ transcribeAudio: false,
122
+ descriptionDetail: 'brief',
123
+ maxFrames: request.maxFrames,
124
+ });
125
+ return {
126
+ description: rich.summary,
127
+ scenes: rich.scenes.map((s) => ({
128
+ startSec: s.startSec,
129
+ endSec: s.endSec,
130
+ description: s.description,
131
+ })),
132
+ text: rich.fullTranscript ? [rich.fullTranscript] : undefined,
133
+ durationSec: rich.durationSec,
134
+ modelId: request.modelId,
135
+ providerId: 'agentos-video-analyzer',
136
+ providerMetadata: rich.metadata,
137
+ };
138
+ }
139
+ // -------------------------------------------------------------------------
140
+ // Rich analysis — main pipeline
141
+ // -------------------------------------------------------------------------
142
+ /**
143
+ * Run the full video analysis pipeline with scene detection, vision
144
+ * descriptions, optional audio transcription, and LLM summarization.
145
+ *
146
+ * The pipeline executes these stages sequentially:
147
+ *
148
+ * 1. **Extract frames** — decode video at 1fps via ffmpeg
149
+ * 2. **Detect scenes** — run SceneDetector over extracted frames
150
+ * 3. **Describe scenes** — send key frames to VisionPipeline
151
+ * 4. **Transcribe audio** — (optional) extract audio and run STT
152
+ * 5. **Summarize** — generate overall summary via LLM
153
+ *
154
+ * Progress events are emitted at each phase transition when
155
+ * `onProgress` is provided.
156
+ *
157
+ * @param request - Rich analysis parameters.
158
+ * @returns Rich analysis result with scenes, summary, and optional RAG chunks.
159
+ *
160
+ * @throws {Error} If ffprobe/ffmpeg are not installed on the system.
161
+ * @throws {Error} If the video buffer is empty or invalid.
162
+ */
163
+ async analyze(request) {
164
+ // Resolve video buffer
165
+ const videoBuffer = Buffer.isBuffer(request.video)
166
+ ? request.video
167
+ : await this._downloadVideo(request.video);
168
+ if (!videoBuffer || videoBuffer.length === 0) {
169
+ throw new Error('VideoAnalyzer.analyze: video buffer is empty.');
170
+ }
171
+ // Create a unique temp directory for all intermediate files
172
+ const tmpBase = join(tmpdir(), `agentos-video-${randomUUID()}`);
173
+ await mkdir(tmpBase, { recursive: true });
174
+ const videoPath = join(tmpBase, 'input.mp4');
175
+ const framesDir = join(tmpBase, 'frames');
176
+ const audioPath = join(tmpBase, 'audio.wav');
177
+ try {
178
+ // Write video to temp file
179
+ await writeFile(videoPath, videoBuffer);
180
+ // -----------------------------------------------------------------------
181
+ // Stage 1: Probe duration
182
+ // -----------------------------------------------------------------------
183
+ await this._assertFfprobeAvailable();
184
+ const durationSec = await this._probeDuration(videoPath);
185
+ // -----------------------------------------------------------------------
186
+ // Stage 2: Extract frames at 1fps
187
+ // -----------------------------------------------------------------------
188
+ this._emitProgress(request.onProgress, 'extracting-frames', 0, 'Extracting frames at 1fps');
189
+ await mkdir(framesDir, { recursive: true });
190
+ let frames = await this._extractFrames(videoPath, framesDir);
191
+ const extractedFrameCount = frames.length;
192
+ if (request.maxFrames !== undefined && request.maxFrames > 0 && frames.length > request.maxFrames) {
193
+ frames = this._downsampleFrames(frames, request.maxFrames);
194
+ }
195
+ this._emitProgress(request.onProgress, 'extracting-frames', 100, frames.length === extractedFrameCount
196
+ ? `Extracted ${frames.length} frames`
197
+ : `Extracted ${extractedFrameCount} frames and sampled ${frames.length}`);
198
+ // -----------------------------------------------------------------------
199
+ // Stage 3: Detect scenes
200
+ // -----------------------------------------------------------------------
201
+ this._emitProgress(request.onProgress, 'detecting-scenes', 0, 'Detecting scene boundaries');
202
+ const sceneBoundaries = await this._detectScenes(frames, request.sceneThreshold, request.maxScenes);
203
+ this._emitProgress(request.onProgress, 'detecting-scenes', 100, `Detected ${sceneBoundaries.length} scenes`);
204
+ // -----------------------------------------------------------------------
205
+ // Stage 4: Describe scenes via VisionPipeline
206
+ // -----------------------------------------------------------------------
207
+ this._emitProgress(request.onProgress, 'describing', 0, 'Describing scenes');
208
+ const visionPipeline = await this._ensureVisionPipeline();
209
+ const sceneDescriptions = [];
210
+ for (let i = 0; i < sceneBoundaries.length; i++) {
211
+ const boundary = sceneBoundaries[i];
212
+ // Select key frame: the frame closest to the midpoint of the scene
213
+ const midTimeSec = (boundary.startTimeSec + boundary.endTimeSec) / 2;
214
+ const keyFrame = this._selectKeyFrame(frames, midTimeSec);
215
+ let description = '';
216
+ let keyFrameBase64;
217
+ if (keyFrame) {
218
+ try {
219
+ const visionResult = await visionPipeline.process(keyFrame.sourceBuffer ?? keyFrame.buffer);
220
+ description = visionResult.text || 'No description available.';
221
+ keyFrameBase64 = (keyFrame.sourceBuffer ?? keyFrame.buffer).toString('base64');
222
+ }
223
+ catch {
224
+ description = 'Vision analysis failed for this scene.';
225
+ }
226
+ }
227
+ sceneDescriptions.push({
228
+ index: i,
229
+ startSec: boundary.startTimeSec,
230
+ endSec: boundary.endTimeSec,
231
+ durationSec: boundary.durationSec,
232
+ cutType: i === 0 ? 'start' : boundary.cutType,
233
+ description,
234
+ confidence: boundary.confidence,
235
+ keyFrame: keyFrameBase64,
236
+ });
237
+ this._emitProgress(request.onProgress, 'describing', Math.round(((i + 1) / sceneBoundaries.length) * 100), `Described scene ${i + 1}/${sceneBoundaries.length}`, i);
238
+ }
239
+ // -----------------------------------------------------------------------
240
+ // Stage 5: Transcribe audio (optional)
241
+ // -----------------------------------------------------------------------
242
+ let fullTranscript;
243
+ const shouldTranscribe = request.transcribeAudio !== false && this._sttProvider;
244
+ if (shouldTranscribe) {
245
+ this._emitProgress(request.onProgress, 'transcribing', 0, 'Extracting audio');
246
+ try {
247
+ const audioBuffer = await this._extractAudio(videoPath, audioPath);
248
+ if (audioBuffer && audioBuffer.length > 0) {
249
+ this._emitProgress(request.onProgress, 'transcribing', 30, 'Transcribing audio');
250
+ const sttResult = await this._sttProvider.transcribe({ data: audioBuffer, mimeType: 'audio/wav', sampleRate: 16000 });
251
+ fullTranscript = sttResult.text;
252
+ // Map transcript segments to scenes by time range
253
+ if (sttResult.segments && sttResult.segments.length > 0) {
254
+ for (const scene of sceneDescriptions) {
255
+ const overlapping = sttResult.segments.filter((seg) => seg.startTime < scene.endSec && seg.endTime > scene.startSec);
256
+ if (overlapping.length > 0) {
257
+ scene.transcript = overlapping.map((s) => s.text).join(' ').trim();
258
+ }
259
+ }
260
+ }
261
+ }
262
+ this._emitProgress(request.onProgress, 'transcribing', 100, 'Transcription complete');
263
+ }
264
+ catch (err) {
265
+ // STT failure is non-fatal — scenes still have visual descriptions
266
+ console.warn('[VideoAnalyzer] Audio transcription failed:', err.message);
267
+ this._emitProgress(request.onProgress, 'transcribing', 100, 'Transcription failed (non-fatal)');
268
+ }
269
+ }
270
+ // -----------------------------------------------------------------------
271
+ // Stage 6: Generate summary via LLM
272
+ // -----------------------------------------------------------------------
273
+ this._emitProgress(request.onProgress, 'summarizing', 0, 'Generating summary');
274
+ const summary = await this._generateSummary(sceneDescriptions, fullTranscript, request.prompt);
275
+ this._emitProgress(request.onProgress, 'summarizing', 100, 'Summary complete');
276
+ // -----------------------------------------------------------------------
277
+ // Stage 7: Optional RAG indexing
278
+ // -----------------------------------------------------------------------
279
+ let ragChunkIds;
280
+ if (request.indexForRAG) {
281
+ ragChunkIds = this._buildRagChunkIds(sceneDescriptions, summary);
282
+ }
283
+ return {
284
+ durationSec,
285
+ sceneCount: sceneDescriptions.length,
286
+ scenes: sceneDescriptions,
287
+ summary,
288
+ fullTranscript,
289
+ ragChunkIds,
290
+ metadata: {
291
+ frameCount: frames.length,
292
+ extractedFrameCount,
293
+ maxFrames: request.maxFrames,
294
+ sceneThreshold: request.sceneThreshold ?? 0.3,
295
+ descriptionDetail: request.descriptionDetail ?? 'detailed',
296
+ transcribeAudio: request.transcribeAudio !== false,
297
+ },
298
+ };
299
+ }
300
+ finally {
301
+ // Clean up all temp files
302
+ try {
303
+ rm(tmpBase, { recursive: true, force: true }).catch(() => { });
304
+ }
305
+ catch {
306
+ // Cleanup failure is non-fatal
307
+ }
308
+ }
309
+ }
310
+ // -------------------------------------------------------------------------
311
+ // Private — ffprobe / ffmpeg helpers
312
+ // -------------------------------------------------------------------------
313
+ /**
314
+ * Assert that ffprobe is available on the system PATH.
315
+ *
316
+ * Attempts to run `ffprobe -version` and throws a descriptive error
317
+ * if the command fails or is not found.
318
+ *
319
+ * @throws {Error} With installation instructions when ffprobe is missing.
320
+ */
321
+ async _assertFfprobeAvailable() {
322
+ try {
323
+ await execFile('ffprobe', ['-version']);
324
+ }
325
+ catch {
326
+ throw new Error('VideoAnalyzer requires ffprobe (part of ffmpeg) to be installed and on your PATH. ' +
327
+ 'Install it with: brew install ffmpeg (macOS), apt install ffmpeg (Debian/Ubuntu), ' +
328
+ 'or download from https://ffmpeg.org/download.html');
329
+ }
330
+ }
331
+ /**
332
+ * Probe the duration of a video file using ffprobe.
333
+ *
334
+ * Runs `ffprobe -v error -show_entries format=duration -of csv=p=0`
335
+ * and parses the output as a floating-point number of seconds.
336
+ *
337
+ * @param videoPath - Absolute path to the video file.
338
+ * @returns Duration in seconds.
339
+ * @throws {Error} If ffprobe cannot determine the duration.
340
+ */
341
+ async _probeDuration(videoPath) {
342
+ const { stdout } = await execFile('ffprobe', [
343
+ '-v', 'error',
344
+ '-show_entries', 'format=duration',
345
+ '-of', 'csv=p=0',
346
+ videoPath,
347
+ ]);
348
+ const duration = parseFloat(stdout.trim());
349
+ if (isNaN(duration) || duration <= 0) {
350
+ throw new Error(`VideoAnalyzer: ffprobe returned invalid duration "${stdout.trim()}" for video.`);
351
+ }
352
+ return duration;
353
+ }
354
+ /**
355
+ * Extract frames from a video at 1fps using ffmpeg.
356
+ *
357
+ * Writes PNG frames to the given output directory as `frame_0001.png`,
358
+ * `frame_0002.png`, etc. Then reads them back into {@link Frame} objects
359
+ * with timestamps derived from the frame index (1fps → index = seconds).
360
+ *
361
+ * @param videoPath - Absolute path to the input video.
362
+ * @param framesDir - Directory to write extracted frames into.
363
+ * @returns Array of Frame objects sorted by timestamp.
364
+ */
365
+ async _extractFrames(videoPath, framesDir) {
366
+ // Extract at 1fps — each frame represents one second of video
367
+ await execFile('ffmpeg', [
368
+ '-i', videoPath,
369
+ '-vf', 'fps=1',
370
+ '-f', 'image2',
371
+ join(framesDir, 'frame_%04d.png'),
372
+ '-y',
373
+ ], { timeout: 120000 });
374
+ // Read extracted frames
375
+ const files = await readdir(framesDir);
376
+ const frameFiles = files
377
+ .filter((f) => f.startsWith('frame_') && f.endsWith('.png'))
378
+ .sort();
379
+ const frames = [];
380
+ for (let i = 0; i < frameFiles.length; i++) {
381
+ const sourceBuffer = await readFile(join(framesDir, frameFiles[i]));
382
+ const buffer = await this._decodeFrameToRgb(sourceBuffer);
383
+ frames.push({
384
+ buffer,
385
+ sourceBuffer,
386
+ // At 1fps, frame index = seconds
387
+ timestampSec: i,
388
+ index: i,
389
+ });
390
+ }
391
+ return frames;
392
+ }
393
+ /**
394
+ * Run the SceneDetector over a sequence of frames and collect
395
+ * all scene boundaries.
396
+ *
397
+ * Converts the Frame array into an async iterable for the detector's
398
+ * streaming API, then collects all yielded boundaries.
399
+ *
400
+ * @param frames - Extracted video frames in time order.
401
+ * @param threshold - Optional scene change threshold override.
402
+ * @param maxScenes - Maximum number of scenes to detect.
403
+ * @returns Array of SceneBoundary objects.
404
+ */
405
+ async _detectScenes(frames, threshold, maxScenes) {
406
+ // Build an async iterable from the frames array
407
+ async function* toAsyncIterable() {
408
+ for (const frame of frames) {
409
+ yield frame;
410
+ }
411
+ }
412
+ // If a custom threshold was provided, create a temporary detector
413
+ const detector = threshold !== undefined
414
+ ? new SceneDetector({
415
+ hardCutThreshold: threshold,
416
+ gradualThreshold: threshold * 0.5,
417
+ })
418
+ : this._sceneDetector;
419
+ const boundaries = [];
420
+ const limit = maxScenes ?? 100;
421
+ for await (const boundary of detector.detectScenes(toAsyncIterable())) {
422
+ boundaries.push(boundary);
423
+ if (boundaries.length >= limit)
424
+ break;
425
+ }
426
+ return boundaries;
427
+ }
428
+ /**
429
+ * Select the frame closest to a given timestamp from the frame array.
430
+ *
431
+ * Uses a simple linear search — frame counts are typically low
432
+ * (one per second of video) so this is efficient enough.
433
+ *
434
+ * @param frames - Array of extracted frames.
435
+ * @param targetSec - Target timestamp in seconds.
436
+ * @returns The frame closest to the target timestamp, or undefined if empty.
437
+ */
438
+ _selectKeyFrame(frames, targetSec) {
439
+ if (frames.length === 0)
440
+ return undefined;
441
+ let closest = frames[0];
442
+ let minDelta = Math.abs(frames[0].timestampSec - targetSec);
443
+ for (let i = 1; i < frames.length; i++) {
444
+ const delta = Math.abs(frames[i].timestampSec - targetSec);
445
+ if (delta < minDelta) {
446
+ closest = frames[i];
447
+ minDelta = delta;
448
+ }
449
+ }
450
+ return closest;
451
+ }
452
+ /**
453
+ * Extract the audio track from a video file as 16-bit PCM WAV.
454
+ *
455
+ * Uses ffmpeg with:
456
+ * - `-vn`: skip video stream
457
+ * - `-acodec pcm_s16le`: 16-bit PCM output
458
+ * - `-ar 16000`: 16kHz sample rate (standard for STT)
459
+ * - `-ac 1`: mono channel
460
+ *
461
+ * @param videoPath - Absolute path to the input video.
462
+ * @param audioPath - Absolute path for the output WAV file.
463
+ * @returns Audio buffer, or undefined if extraction fails.
464
+ */
465
+ async _extractAudio(videoPath, audioPath) {
466
+ try {
467
+ await execFile('ffmpeg', [
468
+ '-i', videoPath,
469
+ '-vn',
470
+ '-acodec', 'pcm_s16le',
471
+ '-ar', '16000',
472
+ '-ac', '1',
473
+ audioPath,
474
+ '-y',
475
+ ], { timeout: 60000 });
476
+ return await readFile(audioPath);
477
+ }
478
+ catch {
479
+ return undefined;
480
+ }
481
+ }
482
+ // -------------------------------------------------------------------------
483
+ // Private — LLM summary generation
484
+ // -------------------------------------------------------------------------
485
+ /**
486
+ * Generate an overall video summary from scene descriptions and optional
487
+ * transcript using an LLM via generateText().
488
+ *
489
+ * The summary captures the narrative arc, key visual elements, and any
490
+ * spoken content across all scenes.
491
+ *
492
+ * @param scenes - Array of rich scene descriptions.
493
+ * @param transcript - Optional full transcript of the video.
494
+ * @returns Generated summary text.
495
+ */
496
+ async _generateSummary(scenes, transcript, userPrompt) {
497
+ // Build the context from scene descriptions
498
+ const sceneLines = scenes.map((s) => {
499
+ let line = `Scene ${s.index + 1} [${s.startSec.toFixed(1)}s - ${s.endSec.toFixed(1)}s]: ${s.description}`;
500
+ if (s.transcript) {
501
+ line += `\n Spoken: "${s.transcript}"`;
502
+ }
503
+ return line;
504
+ });
505
+ const prompt = [
506
+ 'You are analyzing a video. Below are descriptions of each scene detected in the video.',
507
+ userPrompt
508
+ ? `\nUser request:\n${userPrompt}`
509
+ : '',
510
+ transcript ? `\nFull transcript:\n${transcript}` : '',
511
+ '\nScene descriptions:',
512
+ ...sceneLines,
513
+ userPrompt
514
+ ? '\nAnswer the user request using the observable scene and transcript evidence.'
515
+ : '\nProvide a concise summary (2-4 sentences) of the overall video content,',
516
+ userPrompt
517
+ ? 'If the request cannot be answered fully, say what is directly supported by the video.'
518
+ : 'capturing the narrative arc, key visual elements, and any important spoken content.',
519
+ ].filter(Boolean).join('\n');
520
+ try {
521
+ const { generateText } = await import('../../api/generateText.js');
522
+ const result = await generateText({
523
+ prompt,
524
+ temperature: 0.3,
525
+ maxTokens: 500,
526
+ });
527
+ return result.text || 'Unable to generate summary.';
528
+ }
529
+ catch {
530
+ // Fallback: concatenate scene descriptions if LLM is unavailable
531
+ return scenes.map((s) => s.description).join(' ');
532
+ }
533
+ }
534
+ // -------------------------------------------------------------------------
535
+ // Private — RAG chunk ID generation
536
+ // -------------------------------------------------------------------------
537
+ /**
538
+ * Build placeholder RAG chunk IDs for each scene plus the summary.
539
+ *
540
+ * In a full implementation these IDs would correspond to actual vector
541
+ * store documents. For now, they serve as stable identifiers that a
542
+ * downstream RAG indexer can use to create or reference chunks.
543
+ *
544
+ * @param scenes - Scene descriptions to create chunk IDs for.
545
+ * @param summary - Overall summary to create a chunk ID for.
546
+ * @returns Array of generated chunk ID strings.
547
+ */
548
+ _buildRagChunkIds(scenes, summary) {
549
+ const ids = [];
550
+ // One chunk per scene
551
+ for (const scene of scenes) {
552
+ ids.push(`video-scene-${scene.index}-${randomUUID().slice(0, 8)}`);
553
+ }
554
+ // One chunk for the summary
555
+ if (summary) {
556
+ ids.push(`video-summary-${randomUUID().slice(0, 8)}`);
557
+ }
558
+ return ids;
559
+ }
560
+ // -------------------------------------------------------------------------
561
+ // Private — utilities
562
+ // -------------------------------------------------------------------------
563
+ /**
564
+ * Download a video from a URL into a Buffer.
565
+ *
566
+ * @param url - Video URL to download.
567
+ * @returns Video content as a Buffer.
568
+ */
569
+ async _downloadVideo(url) {
570
+ const response = await fetch(url);
571
+ if (!response.ok) {
572
+ throw new Error(`VideoAnalyzer: failed to download video from ${url}: ${response.status}`);
573
+ }
574
+ return Buffer.from(await response.arrayBuffer());
575
+ }
576
+ /**
577
+ * Ensure the vision pipeline is available, creating one lazily if needed.
578
+ *
579
+ * When no vision pipeline was injected via the constructor, this method
580
+ * dynamically imports the factory and creates a default pipeline.
581
+ *
582
+ * @returns The resolved VisionPipeline instance.
583
+ */
584
+ async _ensureVisionPipeline() {
585
+ if (!this._visionPipeline) {
586
+ const { createVisionPipeline } = await import('../vision/index.js');
587
+ this._visionPipeline = await createVisionPipeline();
588
+ }
589
+ return this._visionPipeline;
590
+ }
591
+ /**
592
+ * Decode an extracted frame image into a raw RGB buffer for scene detection.
593
+ *
594
+ * When decoding is unavailable, the original encoded bytes are returned so
595
+ * callers still get a best-effort diff signal instead of a hard failure.
596
+ */
597
+ async _decodeFrameToRgb(buffer) {
598
+ try {
599
+ const sharpModule = await import('sharp');
600
+ const sharp = sharpModule.default;
601
+ const { data } = await sharp(buffer)
602
+ .removeAlpha()
603
+ .toColourspace('rgb')
604
+ .raw()
605
+ .toBuffer({ resolveWithObject: true });
606
+ return Buffer.from(data);
607
+ }
608
+ catch {
609
+ return buffer;
610
+ }
611
+ }
612
+ /**
613
+ * Evenly downsample a frame list while preserving order and both endpoints.
614
+ */
615
+ _downsampleFrames(frames, maxFrames) {
616
+ if (maxFrames >= frames.length)
617
+ return frames;
618
+ if (maxFrames <= 1)
619
+ return [frames[0]];
620
+ const sampled = [];
621
+ const lastIndex = frames.length - 1;
622
+ for (let i = 0; i < maxFrames; i++) {
623
+ const index = i === maxFrames - 1
624
+ ? lastIndex
625
+ : Math.floor((i * frames.length) / maxFrames);
626
+ const frame = frames[index];
627
+ if (sampled[sampled.length - 1] !== frame) {
628
+ sampled.push(frame);
629
+ }
630
+ }
631
+ return sampled;
632
+ }
633
+ /**
634
+ * Emit a progress event to the caller's callback, if provided.
635
+ *
636
+ * @param callback - Optional progress callback from the request.
637
+ * @param phase - Current pipeline phase.
638
+ * @param progress - Progress percentage (0-100) within the phase.
639
+ * @param message - Human-readable status message.
640
+ * @param currentScene - 0-based scene index (for describing/transcribing phases).
641
+ */
642
+ _emitProgress(callback, phase, progress, message, currentScene) {
643
+ if (callback) {
644
+ callback({ phase, progress, message, currentScene });
645
+ }
646
+ }
647
+ }
648
+ //# sourceMappingURL=VideoAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoAnalyzer.js","sourceRoot":"","sources":["../../../src/core/video/VideoAnalyzer.ts"],"names":[],"mappings":"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"}