@framers/agentos 0.1.113 → 0.1.114

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 (510) hide show
  1. package/README.md +39 -5
  2. package/dist/api/AgentOS.d.ts +45 -12
  3. package/dist/api/AgentOS.d.ts.map +1 -1
  4. package/dist/api/AgentOS.js +225 -78
  5. package/dist/api/AgentOS.js.map +1 -1
  6. package/dist/api/AgentOSOrchestrator.d.ts +8 -0
  7. package/dist/api/AgentOSOrchestrator.d.ts.map +1 -1
  8. package/dist/api/AgentOSOrchestrator.js +350 -59
  9. package/dist/api/AgentOSOrchestrator.js.map +1 -1
  10. package/dist/api/StreamChunkEmitter.d.ts.map +1 -1
  11. package/dist/api/StreamChunkEmitter.js +2 -0
  12. package/dist/api/StreamChunkEmitter.js.map +1 -1
  13. package/dist/api/agency.d.ts.map +1 -1
  14. package/dist/api/agency.js +47 -1
  15. package/dist/api/agency.js.map +1 -1
  16. package/dist/api/agent.d.ts +18 -5
  17. package/dist/api/agent.d.ts.map +1 -1
  18. package/dist/api/agent.js +48 -9
  19. package/dist/api/agent.js.map +1 -1
  20. package/dist/api/agentExport.d.ts +202 -0
  21. package/dist/api/agentExport.d.ts.map +1 -0
  22. package/dist/api/agentExport.js +323 -0
  23. package/dist/api/agentExport.js.map +1 -0
  24. package/dist/api/editImage.d.ts +119 -0
  25. package/dist/api/editImage.d.ts.map +1 -0
  26. package/dist/api/editImage.js +150 -0
  27. package/dist/api/editImage.js.map +1 -0
  28. package/dist/api/embedText.d.ts +137 -0
  29. package/dist/api/embedText.d.ts.map +1 -0
  30. package/dist/api/embedText.js +229 -0
  31. package/dist/api/embedText.js.map +1 -0
  32. package/dist/api/externalToolRegistry.d.ts +44 -0
  33. package/dist/api/externalToolRegistry.d.ts.map +1 -0
  34. package/dist/api/externalToolRegistry.js +245 -0
  35. package/dist/api/externalToolRegistry.js.map +1 -0
  36. package/dist/api/generateImage.d.ts +1 -1
  37. package/dist/api/generateImage.d.ts.map +1 -1
  38. package/dist/api/generateImage.js +17 -13
  39. package/dist/api/generateImage.js.map +1 -1
  40. package/dist/api/generateObject.d.ts +185 -0
  41. package/dist/api/generateObject.d.ts.map +1 -0
  42. package/dist/api/generateObject.js +249 -0
  43. package/dist/api/generateObject.js.map +1 -0
  44. package/dist/api/generateText.d.ts +13 -3
  45. package/dist/api/generateText.d.ts.map +1 -1
  46. package/dist/api/generateText.js +20 -5
  47. package/dist/api/generateText.js.map +1 -1
  48. package/dist/api/interfaces/IAgentOS.d.ts +29 -1
  49. package/dist/api/interfaces/IAgentOS.d.ts.map +1 -1
  50. package/dist/api/model.d.ts +7 -7
  51. package/dist/api/model.d.ts.map +1 -1
  52. package/dist/api/model.js +22 -16
  53. package/dist/api/model.js.map +1 -1
  54. package/dist/api/processRequestWithExternalTools.d.ts +26 -0
  55. package/dist/api/processRequestWithExternalTools.d.ts.map +1 -0
  56. package/dist/api/processRequestWithExternalTools.js +52 -0
  57. package/dist/api/processRequestWithExternalTools.js.map +1 -0
  58. package/dist/api/processRequestWithRegisteredTools.d.ts +56 -0
  59. package/dist/api/processRequestWithRegisteredTools.d.ts.map +1 -0
  60. package/dist/api/processRequestWithRegisteredTools.js +125 -0
  61. package/dist/api/processRequestWithRegisteredTools.js.map +1 -0
  62. package/dist/api/provider-defaults.d.ts.map +1 -1
  63. package/dist/api/provider-defaults.js +28 -0
  64. package/dist/api/provider-defaults.js.map +1 -1
  65. package/dist/api/resumeExternalToolRequestWithRegisteredTools.d.ts +71 -0
  66. package/dist/api/resumeExternalToolRequestWithRegisteredTools.d.ts.map +1 -0
  67. package/dist/api/resumeExternalToolRequestWithRegisteredTools.js +159 -0
  68. package/dist/api/resumeExternalToolRequestWithRegisteredTools.js.map +1 -0
  69. package/dist/api/strategies/agentGraphBuilder.d.ts +170 -0
  70. package/dist/api/strategies/agentGraphBuilder.d.ts.map +1 -0
  71. package/dist/api/strategies/agentGraphBuilder.js +299 -0
  72. package/dist/api/strategies/agentGraphBuilder.js.map +1 -0
  73. package/dist/api/strategies/graphCompiler.d.ts +84 -0
  74. package/dist/api/strategies/graphCompiler.d.ts.map +1 -0
  75. package/dist/api/strategies/graphCompiler.js +617 -0
  76. package/dist/api/strategies/graphCompiler.js.map +1 -0
  77. package/dist/api/strategies/hierarchical.d.ts.map +1 -1
  78. package/dist/api/strategies/hierarchical.js +2 -1
  79. package/dist/api/strategies/hierarchical.js.map +1 -1
  80. package/dist/api/strategies/index.d.ts +3 -0
  81. package/dist/api/strategies/index.d.ts.map +1 -1
  82. package/dist/api/strategies/index.js +2 -0
  83. package/dist/api/strategies/index.js.map +1 -1
  84. package/dist/api/strategies/shared.d.ts +1 -1
  85. package/dist/api/strategies/shared.d.ts.map +1 -1
  86. package/dist/api/strategies/shared.js +3 -2
  87. package/dist/api/strategies/shared.js.map +1 -1
  88. package/dist/api/streamObject.d.ts +166 -0
  89. package/dist/api/streamObject.d.ts.map +1 -0
  90. package/dist/api/streamObject.js +268 -0
  91. package/dist/api/streamObject.js.map +1 -0
  92. package/dist/api/streamText.d.ts +1 -1
  93. package/dist/api/streamText.d.ts.map +1 -1
  94. package/dist/api/streamText.js +26 -8
  95. package/dist/api/streamText.js.map +1 -1
  96. package/dist/api/toolAdapter.d.ts +44 -8
  97. package/dist/api/toolAdapter.d.ts.map +1 -1
  98. package/dist/api/toolAdapter.js +224 -45
  99. package/dist/api/toolAdapter.js.map +1 -1
  100. package/dist/api/types/AgentOSExternalToolRequest.d.ts +35 -0
  101. package/dist/api/types/AgentOSExternalToolRequest.d.ts.map +1 -0
  102. package/dist/api/types/AgentOSExternalToolRequest.js +2 -0
  103. package/dist/api/types/AgentOSExternalToolRequest.js.map +1 -0
  104. package/dist/api/types/AgentOSResponse.d.ts +25 -0
  105. package/dist/api/types/AgentOSResponse.d.ts.map +1 -1
  106. package/dist/api/types/AgentOSResponse.js +20 -0
  107. package/dist/api/types/AgentOSResponse.js.map +1 -1
  108. package/dist/api/types/AgentOSToolResult.d.ts +11 -0
  109. package/dist/api/types/AgentOSToolResult.d.ts.map +1 -0
  110. package/dist/api/types/AgentOSToolResult.js +2 -0
  111. package/dist/api/types/AgentOSToolResult.js.map +1 -0
  112. package/dist/api/types.d.ts +28 -4
  113. package/dist/api/types.d.ts.map +1 -1
  114. package/dist/api/types.js.map +1 -1
  115. package/dist/api/upscaleImage.d.ts +92 -0
  116. package/dist/api/upscaleImage.d.ts.map +1 -0
  117. package/dist/api/upscaleImage.js +133 -0
  118. package/dist/api/upscaleImage.js.map +1 -0
  119. package/dist/api/variateImage.d.ts +102 -0
  120. package/dist/api/variateImage.d.ts.map +1 -0
  121. package/dist/api/variateImage.js +154 -0
  122. package/dist/api/variateImage.js.map +1 -0
  123. package/dist/cognitive_substrate/GMI.d.ts +16 -2
  124. package/dist/cognitive_substrate/GMI.d.ts.map +1 -1
  125. package/dist/cognitive_substrate/GMI.js +188 -56
  126. package/dist/cognitive_substrate/GMI.js.map +1 -1
  127. package/dist/cognitive_substrate/IGMI.d.ts +10 -0
  128. package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
  129. package/dist/cognitive_substrate/IGMI.js.map +1 -1
  130. package/dist/config/AgentOSConfig.d.ts +19 -2
  131. package/dist/config/AgentOSConfig.d.ts.map +1 -1
  132. package/dist/config/AgentOSConfig.js +46 -29
  133. package/dist/config/AgentOSConfig.js.map +1 -1
  134. package/dist/core/guardrails/IGuardrailService.d.ts +1 -1
  135. package/dist/core/images/IImageProvider.d.ts +93 -0
  136. package/dist/core/images/IImageProvider.d.ts.map +1 -1
  137. package/dist/core/images/IImageProvider.js.map +1 -1
  138. package/dist/core/images/ImageOperationError.d.ts +52 -0
  139. package/dist/core/images/ImageOperationError.d.ts.map +1 -0
  140. package/dist/core/images/ImageOperationError.js +58 -0
  141. package/dist/core/images/ImageOperationError.js.map +1 -0
  142. package/dist/core/images/imageToBuffer.d.ts +41 -0
  143. package/dist/core/images/imageToBuffer.d.ts.map +1 -0
  144. package/dist/core/images/imageToBuffer.js +95 -0
  145. package/dist/core/images/imageToBuffer.js.map +1 -0
  146. package/dist/core/images/index.d.ts +4 -0
  147. package/dist/core/images/index.d.ts.map +1 -1
  148. package/dist/core/images/index.js +8 -0
  149. package/dist/core/images/index.js.map +1 -1
  150. package/dist/core/images/providers/FalImageProvider.d.ts +208 -0
  151. package/dist/core/images/providers/FalImageProvider.d.ts.map +1 -0
  152. package/dist/core/images/providers/FalImageProvider.js +301 -0
  153. package/dist/core/images/providers/FalImageProvider.js.map +1 -0
  154. package/dist/core/images/providers/FluxImageProvider.d.ts +197 -0
  155. package/dist/core/images/providers/FluxImageProvider.d.ts.map +1 -0
  156. package/dist/core/images/providers/FluxImageProvider.js +271 -0
  157. package/dist/core/images/providers/FluxImageProvider.js.map +1 -0
  158. package/dist/core/images/providers/OpenAIImageProvider.d.ts +33 -1
  159. package/dist/core/images/providers/OpenAIImageProvider.d.ts.map +1 -1
  160. package/dist/core/images/providers/OpenAIImageProvider.js +125 -0
  161. package/dist/core/images/providers/OpenAIImageProvider.js.map +1 -1
  162. package/dist/core/images/providers/ReplicateImageProvider.d.ts +26 -1
  163. package/dist/core/images/providers/ReplicateImageProvider.d.ts.map +1 -1
  164. package/dist/core/images/providers/ReplicateImageProvider.js +118 -0
  165. package/dist/core/images/providers/ReplicateImageProvider.js.map +1 -1
  166. package/dist/core/images/providers/StabilityImageProvider.d.ts +41 -1
  167. package/dist/core/images/providers/StabilityImageProvider.d.ts.map +1 -1
  168. package/dist/core/images/providers/StabilityImageProvider.js +180 -7
  169. package/dist/core/images/providers/StabilityImageProvider.js.map +1 -1
  170. package/dist/core/images/providers/StableDiffusionLocalProvider.d.ts +29 -1
  171. package/dist/core/images/providers/StableDiffusionLocalProvider.d.ts.map +1 -1
  172. package/dist/core/images/providers/StableDiffusionLocalProvider.js +124 -0
  173. package/dist/core/images/providers/StableDiffusionLocalProvider.js.map +1 -1
  174. package/dist/core/llm/IPromptEngine.d.ts +2 -2
  175. package/dist/core/llm/IPromptEngine.d.ts.map +1 -1
  176. package/dist/core/llm/IPromptEngine.js +2 -2
  177. package/dist/core/llm/IPromptEngine.js.map +1 -1
  178. package/dist/core/llm/providers/AIModelProviderManager.d.ts +7 -1
  179. package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -1
  180. package/dist/core/llm/providers/AIModelProviderManager.js +24 -0
  181. package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -1
  182. package/dist/core/llm/providers/errors/AnthropicProviderError.d.ts +42 -0
  183. package/dist/core/llm/providers/errors/AnthropicProviderError.d.ts.map +1 -0
  184. package/dist/core/llm/providers/errors/AnthropicProviderError.js +45 -0
  185. package/dist/core/llm/providers/errors/AnthropicProviderError.js.map +1 -0
  186. package/dist/core/llm/providers/errors/GeminiProviderError.d.ts +45 -0
  187. package/dist/core/llm/providers/errors/GeminiProviderError.d.ts.map +1 -0
  188. package/dist/core/llm/providers/errors/GeminiProviderError.js +46 -0
  189. package/dist/core/llm/providers/errors/GeminiProviderError.js.map +1 -0
  190. package/dist/core/llm/providers/errors/OllamaProviderError.d.ts +1 -1
  191. package/dist/core/llm/providers/errors/OllamaProviderError.d.ts.map +1 -1
  192. package/dist/core/llm/providers/errors/OllamaProviderError.js +1 -1
  193. package/dist/core/llm/providers/errors/OllamaProviderError.js.map +1 -1
  194. package/dist/core/llm/providers/errors/OpenAIProviderError.d.ts +1 -1
  195. package/dist/core/llm/providers/errors/OpenAIProviderError.js +1 -1
  196. package/dist/core/llm/providers/errors/OpenRouterProviderError.d.ts +1 -1
  197. package/dist/core/llm/providers/errors/OpenRouterProviderError.js +1 -1
  198. package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts +340 -0
  199. package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts.map +1 -0
  200. package/dist/core/llm/providers/implementations/AnthropicProvider.js +959 -0
  201. package/dist/core/llm/providers/implementations/AnthropicProvider.js.map +1 -0
  202. package/dist/core/llm/providers/implementations/GeminiProvider.d.ts +339 -0
  203. package/dist/core/llm/providers/implementations/GeminiProvider.d.ts.map +1 -0
  204. package/dist/core/llm/providers/implementations/GeminiProvider.js +1004 -0
  205. package/dist/core/llm/providers/implementations/GeminiProvider.js.map +1 -0
  206. package/dist/core/llm/providers/implementations/GroqProvider.d.ts +105 -0
  207. package/dist/core/llm/providers/implementations/GroqProvider.d.ts.map +1 -0
  208. package/dist/core/llm/providers/implementations/GroqProvider.js +134 -0
  209. package/dist/core/llm/providers/implementations/GroqProvider.js.map +1 -0
  210. package/dist/core/llm/providers/implementations/MistralProvider.d.ts +105 -0
  211. package/dist/core/llm/providers/implementations/MistralProvider.d.ts.map +1 -0
  212. package/dist/core/llm/providers/implementations/MistralProvider.js +146 -0
  213. package/dist/core/llm/providers/implementations/MistralProvider.js.map +1 -0
  214. package/dist/core/llm/providers/implementations/TogetherProvider.d.ts +107 -0
  215. package/dist/core/llm/providers/implementations/TogetherProvider.d.ts.map +1 -0
  216. package/dist/core/llm/providers/implementations/TogetherProvider.js +138 -0
  217. package/dist/core/llm/providers/implementations/TogetherProvider.js.map +1 -0
  218. package/dist/core/llm/providers/implementations/XAIProvider.d.ts +102 -0
  219. package/dist/core/llm/providers/implementations/XAIProvider.d.ts.map +1 -0
  220. package/dist/core/llm/providers/implementations/XAIProvider.js +123 -0
  221. package/dist/core/llm/providers/implementations/XAIProvider.js.map +1 -0
  222. package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -1
  223. package/dist/core/orchestration/AgentOrchestrator.js +26 -5
  224. package/dist/core/orchestration/AgentOrchestrator.js.map +1 -1
  225. package/dist/core/tools/IToolOrchestrator.d.ts +2 -2
  226. package/dist/core/tools/IToolOrchestrator.d.ts.map +1 -1
  227. package/dist/core/tools/ToolExecutor.d.ts +3 -0
  228. package/dist/core/tools/ToolExecutor.d.ts.map +1 -1
  229. package/dist/core/tools/ToolExecutor.js +2 -1
  230. package/dist/core/tools/ToolExecutor.js.map +1 -1
  231. package/dist/core/tools/ToolOrchestrator.d.ts +7 -7
  232. package/dist/core/tools/ToolOrchestrator.d.ts.map +1 -1
  233. package/dist/core/tools/ToolOrchestrator.js +135 -36
  234. package/dist/core/tools/ToolOrchestrator.js.map +1 -1
  235. package/dist/core/tools/permissions/ToolPermissionManager.d.ts +6 -5
  236. package/dist/core/tools/permissions/ToolPermissionManager.d.ts.map +1 -1
  237. package/dist/core/tools/permissions/ToolPermissionManager.js +47 -21
  238. package/dist/core/tools/permissions/ToolPermissionManager.js.map +1 -1
  239. package/dist/core/vision/VisionPipeline.d.ts +437 -0
  240. package/dist/core/vision/VisionPipeline.d.ts.map +1 -0
  241. package/dist/core/vision/VisionPipeline.js +1113 -0
  242. package/dist/core/vision/VisionPipeline.js.map +1 -0
  243. package/dist/core/vision/index.d.ts +97 -0
  244. package/dist/core/vision/index.d.ts.map +1 -0
  245. package/dist/core/vision/index.js +182 -0
  246. package/dist/core/vision/index.js.map +1 -0
  247. package/dist/core/vision/providers/LLMVisionProvider.d.ts +135 -0
  248. package/dist/core/vision/providers/LLMVisionProvider.d.ts.map +1 -0
  249. package/dist/core/vision/providers/LLMVisionProvider.js +136 -0
  250. package/dist/core/vision/providers/LLMVisionProvider.js.map +1 -0
  251. package/dist/core/vision/providers/PipelineVisionProvider.d.ts +154 -0
  252. package/dist/core/vision/providers/PipelineVisionProvider.d.ts.map +1 -0
  253. package/dist/core/vision/providers/PipelineVisionProvider.js +160 -0
  254. package/dist/core/vision/providers/PipelineVisionProvider.js.map +1 -0
  255. package/dist/core/vision/types.d.ts +286 -0
  256. package/dist/core/vision/types.d.ts.map +1 -0
  257. package/dist/core/vision/types.js +24 -0
  258. package/dist/core/vision/types.js.map +1 -0
  259. package/dist/discovery/CapabilityDiscoveryEngine.d.ts +1 -1
  260. package/dist/discovery/CapabilityDiscoveryEngine.d.ts.map +1 -1
  261. package/dist/discovery/CapabilityDiscoveryEngine.js +1 -1
  262. package/dist/discovery/CapabilityDiscoveryEngine.js.map +1 -1
  263. package/dist/emergent/ComposableToolBuilder.d.ts +15 -4
  264. package/dist/emergent/ComposableToolBuilder.d.ts.map +1 -1
  265. package/dist/emergent/ComposableToolBuilder.js +29 -14
  266. package/dist/emergent/ComposableToolBuilder.js.map +1 -1
  267. package/dist/emergent/EmergentCapabilityEngine.d.ts +3 -3
  268. package/dist/emergent/EmergentCapabilityEngine.d.ts.map +1 -1
  269. package/dist/emergent/EmergentCapabilityEngine.js +15 -12
  270. package/dist/emergent/EmergentCapabilityEngine.js.map +1 -1
  271. package/dist/emergent/EmergentJudge.d.ts +20 -0
  272. package/dist/emergent/EmergentJudge.d.ts.map +1 -1
  273. package/dist/emergent/EmergentJudge.js +121 -26
  274. package/dist/emergent/EmergentJudge.js.map +1 -1
  275. package/dist/emergent/EmergentToolRegistry.d.ts +17 -0
  276. package/dist/emergent/EmergentToolRegistry.d.ts.map +1 -1
  277. package/dist/emergent/EmergentToolRegistry.js +26 -0
  278. package/dist/emergent/EmergentToolRegistry.js.map +1 -1
  279. package/dist/emergent/ForgeToolMetaTool.d.ts +1 -1
  280. package/dist/emergent/ForgeToolMetaTool.d.ts.map +1 -1
  281. package/dist/emergent/ForgeToolMetaTool.js +15 -2
  282. package/dist/emergent/ForgeToolMetaTool.js.map +1 -1
  283. package/dist/emergent/SandboxedToolForge.d.ts +2 -2
  284. package/dist/emergent/SandboxedToolForge.d.ts.map +1 -1
  285. package/dist/emergent/SandboxedToolForge.js +13 -23
  286. package/dist/emergent/SandboxedToolForge.js.map +1 -1
  287. package/dist/emergent/SkillExporter.d.ts +119 -0
  288. package/dist/emergent/SkillExporter.d.ts.map +1 -0
  289. package/dist/emergent/SkillExporter.js +344 -0
  290. package/dist/emergent/SkillExporter.js.map +1 -0
  291. package/dist/emergent/index.d.ts +1 -0
  292. package/dist/emergent/index.d.ts.map +1 -1
  293. package/dist/emergent/index.js +1 -0
  294. package/dist/emergent/index.js.map +1 -1
  295. package/dist/emergent/types.d.ts +4 -4
  296. package/dist/index.d.ts +30 -5
  297. package/dist/index.d.ts.map +1 -1
  298. package/dist/index.js +19 -2
  299. package/dist/index.js.map +1 -1
  300. package/dist/memory/index.d.ts +10 -8
  301. package/dist/memory/index.d.ts.map +1 -1
  302. package/dist/memory/index.js +2 -0
  303. package/dist/memory/index.js.map +1 -1
  304. package/dist/memory/ingestion/DoclingLoader.d.ts +3 -3
  305. package/dist/memory/ingestion/DoclingLoader.d.ts.map +1 -1
  306. package/dist/memory/ingestion/DoclingLoader.js +12 -8
  307. package/dist/memory/ingestion/DoclingLoader.js.map +1 -1
  308. package/dist/memory/ingestion/FolderScanner.d.ts +7 -7
  309. package/dist/memory/ingestion/FolderScanner.d.ts.map +1 -1
  310. package/dist/memory/ingestion/FolderScanner.js +6 -6
  311. package/dist/memory/ingestion/FolderScanner.js.map +1 -1
  312. package/dist/memory/ingestion/LoaderRegistry.d.ts +8 -8
  313. package/dist/memory/ingestion/LoaderRegistry.d.ts.map +1 -1
  314. package/dist/memory/ingestion/LoaderRegistry.js +9 -11
  315. package/dist/memory/ingestion/LoaderRegistry.js.map +1 -1
  316. package/dist/memory/ingestion/MultimodalAggregator.d.ts +1 -1
  317. package/dist/memory/ingestion/MultimodalAggregator.js +1 -1
  318. package/dist/memory/ingestion/OcrPdfLoader.d.ts +2 -2
  319. package/dist/memory/ingestion/OcrPdfLoader.d.ts.map +1 -1
  320. package/dist/memory/ingestion/OcrPdfLoader.js +12 -8
  321. package/dist/memory/ingestion/OcrPdfLoader.js.map +1 -1
  322. package/dist/memory/ingestion/PdfLoader.d.ts +8 -8
  323. package/dist/memory/ingestion/PdfLoader.d.ts.map +1 -1
  324. package/dist/memory/ingestion/PdfLoader.js +13 -10
  325. package/dist/memory/ingestion/PdfLoader.js.map +1 -1
  326. package/dist/memory/io/MarkdownExporter.d.ts +1 -1
  327. package/dist/memory/io/MarkdownExporter.d.ts.map +1 -1
  328. package/dist/memory/io/MarkdownExporter.js +1 -1
  329. package/dist/memory/io/MarkdownExporter.js.map +1 -1
  330. package/dist/memory/tools/MemoryAddTool.d.ts +2 -2
  331. package/dist/memory/tools/MemoryAddTool.d.ts.map +1 -1
  332. package/dist/memory/tools/MemoryAddTool.js +8 -3
  333. package/dist/memory/tools/MemoryAddTool.js.map +1 -1
  334. package/dist/memory/tools/MemorySearchTool.d.ts +3 -3
  335. package/dist/memory/tools/MemorySearchTool.d.ts.map +1 -1
  336. package/dist/memory/tools/MemorySearchTool.js +11 -9
  337. package/dist/memory/tools/MemorySearchTool.js.map +1 -1
  338. package/dist/memory/tools/scopeContext.d.ts +11 -0
  339. package/dist/memory/tools/scopeContext.d.ts.map +1 -0
  340. package/dist/memory/tools/scopeContext.js +46 -0
  341. package/dist/memory/tools/scopeContext.js.map +1 -0
  342. package/dist/orchestration/builders/AgentGraph.d.ts +12 -11
  343. package/dist/orchestration/builders/AgentGraph.d.ts.map +1 -1
  344. package/dist/orchestration/builders/AgentGraph.js +12 -11
  345. package/dist/orchestration/builders/AgentGraph.js.map +1 -1
  346. package/dist/orchestration/builders/VoiceNodeBuilder.d.ts +2 -2
  347. package/dist/orchestration/builders/VoiceNodeBuilder.d.ts.map +1 -1
  348. package/dist/orchestration/builders/VoiceNodeBuilder.js +2 -2
  349. package/dist/orchestration/builders/VoiceNodeBuilder.js.map +1 -1
  350. package/dist/orchestration/builders/WorkflowBuilder.d.ts +1 -1
  351. package/dist/orchestration/builders/WorkflowBuilder.d.ts.map +1 -1
  352. package/dist/orchestration/builders/WorkflowBuilder.js +1 -1
  353. package/dist/orchestration/builders/WorkflowBuilder.js.map +1 -1
  354. package/dist/orchestration/checkpoint/InMemoryCheckpointStore.d.ts +7 -54
  355. package/dist/orchestration/checkpoint/InMemoryCheckpointStore.d.ts.map +1 -1
  356. package/dist/orchestration/checkpoint/InMemoryCheckpointStore.js +8 -56
  357. package/dist/orchestration/checkpoint/InMemoryCheckpointStore.js.map +1 -1
  358. package/dist/orchestration/events/GraphEvent.d.ts +12 -12
  359. package/dist/orchestration/events/GraphEvent.d.ts.map +1 -1
  360. package/dist/orchestration/events/GraphEvent.js.map +1 -1
  361. package/dist/orchestration/runtime/GraphRuntime.d.ts.map +1 -1
  362. package/dist/orchestration/runtime/GraphRuntime.js +151 -1
  363. package/dist/orchestration/runtime/GraphRuntime.js.map +1 -1
  364. package/dist/orchestration/runtime/LoopController.d.ts +3 -3
  365. package/dist/orchestration/runtime/LoopController.d.ts.map +1 -1
  366. package/dist/orchestration/runtime/LoopController.js.map +1 -1
  367. package/dist/orchestration/runtime/StateManager.d.ts +3 -3
  368. package/dist/orchestration/runtime/StateManager.js +3 -3
  369. package/dist/orchestration/runtime/VoiceNodeExecutor.d.ts +6 -6
  370. package/dist/orchestration/runtime/VoiceNodeExecutor.d.ts.map +1 -1
  371. package/dist/orchestration/runtime/VoiceNodeExecutor.js +27 -10
  372. package/dist/orchestration/runtime/VoiceNodeExecutor.js.map +1 -1
  373. package/dist/orchestration/runtime/VoiceTransportAdapter.d.ts +5 -5
  374. package/dist/orchestration/runtime/VoiceTransportAdapter.js +5 -5
  375. package/dist/orchestration/runtime/VoiceTurnCollector.d.ts +2 -2
  376. package/dist/orchestration/runtime/VoiceTurnCollector.js +2 -2
  377. package/dist/query-router/KeywordFallback.d.ts +70 -0
  378. package/dist/query-router/KeywordFallback.d.ts.map +1 -0
  379. package/dist/query-router/KeywordFallback.js +132 -0
  380. package/dist/query-router/KeywordFallback.js.map +1 -0
  381. package/dist/query-router/QueryClassifier.d.ts +140 -0
  382. package/dist/query-router/QueryClassifier.d.ts.map +1 -0
  383. package/dist/query-router/QueryClassifier.js +223 -0
  384. package/dist/query-router/QueryClassifier.js.map +1 -0
  385. package/dist/query-router/QueryDispatcher.d.ts +139 -0
  386. package/dist/query-router/QueryDispatcher.d.ts.map +1 -0
  387. package/dist/query-router/QueryDispatcher.js +297 -0
  388. package/dist/query-router/QueryDispatcher.js.map +1 -0
  389. package/dist/query-router/QueryGenerator.d.ts +184 -0
  390. package/dist/query-router/QueryGenerator.d.ts.map +1 -0
  391. package/dist/query-router/QueryGenerator.js +241 -0
  392. package/dist/query-router/QueryGenerator.js.map +1 -0
  393. package/dist/query-router/QueryRouter.d.ts +292 -0
  394. package/dist/query-router/QueryRouter.d.ts.map +1 -0
  395. package/dist/query-router/QueryRouter.js +803 -0
  396. package/dist/query-router/QueryRouter.js.map +1 -0
  397. package/dist/query-router/TopicExtractor.d.ts +73 -0
  398. package/dist/query-router/TopicExtractor.d.ts.map +1 -0
  399. package/dist/query-router/TopicExtractor.js +95 -0
  400. package/dist/query-router/TopicExtractor.js.map +1 -0
  401. package/dist/query-router/index.d.ts +40 -0
  402. package/dist/query-router/index.d.ts.map +1 -0
  403. package/dist/query-router/index.js +46 -0
  404. package/dist/query-router/index.js.map +1 -0
  405. package/dist/query-router/types.d.ts +508 -0
  406. package/dist/query-router/types.d.ts.map +1 -0
  407. package/dist/query-router/types.js +39 -0
  408. package/dist/query-router/types.js.map +1 -0
  409. package/dist/rag/index.d.ts +5 -0
  410. package/dist/rag/index.d.ts.map +1 -1
  411. package/dist/rag/index.js +7 -0
  412. package/dist/rag/index.js.map +1 -1
  413. package/dist/rag/multimodal/LLMVisionAdapter.d.ts +43 -0
  414. package/dist/rag/multimodal/LLMVisionAdapter.d.ts.map +1 -0
  415. package/dist/rag/multimodal/LLMVisionAdapter.js +46 -0
  416. package/dist/rag/multimodal/LLMVisionAdapter.js.map +1 -0
  417. package/dist/rag/multimodal/MultimodalIndexer.d.ts +244 -0
  418. package/dist/rag/multimodal/MultimodalIndexer.d.ts.map +1 -0
  419. package/dist/rag/multimodal/MultimodalIndexer.js +411 -0
  420. package/dist/rag/multimodal/MultimodalIndexer.js.map +1 -0
  421. package/dist/rag/multimodal/MultimodalMemoryBridge.d.ts +448 -0
  422. package/dist/rag/multimodal/MultimodalMemoryBridge.d.ts.map +1 -0
  423. package/dist/rag/multimodal/MultimodalMemoryBridge.js +941 -0
  424. package/dist/rag/multimodal/MultimodalMemoryBridge.js.map +1 -0
  425. package/dist/rag/multimodal/SpeechProviderAdapter.d.ts +139 -0
  426. package/dist/rag/multimodal/SpeechProviderAdapter.d.ts.map +1 -0
  427. package/dist/rag/multimodal/SpeechProviderAdapter.js +143 -0
  428. package/dist/rag/multimodal/SpeechProviderAdapter.js.map +1 -0
  429. package/dist/rag/multimodal/createMultimodalIndexerFromResolver.d.ts +172 -0
  430. package/dist/rag/multimodal/createMultimodalIndexerFromResolver.d.ts.map +1 -0
  431. package/dist/rag/multimodal/createMultimodalIndexerFromResolver.js +152 -0
  432. package/dist/rag/multimodal/createMultimodalIndexerFromResolver.js.map +1 -0
  433. package/dist/rag/multimodal/index.d.ts +44 -0
  434. package/dist/rag/multimodal/index.d.ts.map +1 -0
  435. package/dist/rag/multimodal/index.js +42 -0
  436. package/dist/rag/multimodal/index.js.map +1 -0
  437. package/dist/rag/multimodal/types.d.ts +276 -0
  438. package/dist/rag/multimodal/types.d.ts.map +1 -0
  439. package/dist/rag/multimodal/types.js +26 -0
  440. package/dist/rag/multimodal/types.js.map +1 -0
  441. package/dist/social-posting/SocialPostManager.d.ts +3 -3
  442. package/dist/social-posting/SocialPostManager.d.ts.map +1 -1
  443. package/dist/social-posting/SocialPostManager.js +3 -5
  444. package/dist/social-posting/SocialPostManager.js.map +1 -1
  445. package/dist/speech/FallbackProxy.d.ts +6 -6
  446. package/dist/speech/FallbackProxy.d.ts.map +1 -1
  447. package/dist/speech/FallbackProxy.js +3 -3
  448. package/dist/speech/FallbackProxy.js.map +1 -1
  449. package/dist/speech/SpeechProviderResolver.d.ts +8 -8
  450. package/dist/speech/SpeechProviderResolver.d.ts.map +1 -1
  451. package/dist/speech/SpeechProviderResolver.js +22 -11
  452. package/dist/speech/SpeechProviderResolver.js.map +1 -1
  453. package/dist/speech/SpeechRuntime.d.ts +1 -5
  454. package/dist/speech/SpeechRuntime.d.ts.map +1 -1
  455. package/dist/speech/SpeechRuntime.js +17 -9
  456. package/dist/speech/SpeechRuntime.js.map +1 -1
  457. package/dist/speech/providers/AssemblyAISTTProvider.d.ts +4 -4
  458. package/dist/speech/providers/AssemblyAISTTProvider.js +4 -4
  459. package/dist/speech/providers/AzureSpeechTTSProvider.d.ts +3 -3
  460. package/dist/speech/providers/AzureSpeechTTSProvider.js +2 -2
  461. package/dist/speech/providers/AzureSpeechTTSProvider.js.map +1 -1
  462. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +9 -9
  463. package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts.map +1 -1
  464. package/dist/speech/providers/BuiltInAdaptiveVadProvider.js +5 -5
  465. package/dist/speech/providers/BuiltInAdaptiveVadProvider.js.map +1 -1
  466. package/dist/speech/providers/DeepgramBatchSTTProvider.d.ts +2 -2
  467. package/dist/speech/providers/DeepgramBatchSTTProvider.js +2 -2
  468. package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts +3 -3
  469. package/dist/speech/providers/OpenAITextToSpeechProvider.js +2 -2
  470. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts +1 -1
  471. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts.map +1 -1
  472. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js +1 -1
  473. package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js.map +1 -1
  474. package/dist/voice/TelephonyStreamTransport.d.ts +6 -6
  475. package/dist/voice/TelephonyStreamTransport.d.ts.map +1 -1
  476. package/dist/voice/TelephonyStreamTransport.js +5 -5
  477. package/dist/voice/TelephonyStreamTransport.js.map +1 -1
  478. package/dist/voice-pipeline/AcousticEndpointDetector.d.ts +4 -4
  479. package/dist/voice-pipeline/AcousticEndpointDetector.d.ts.map +1 -1
  480. package/dist/voice-pipeline/AcousticEndpointDetector.js +4 -4
  481. package/dist/voice-pipeline/AcousticEndpointDetector.js.map +1 -1
  482. package/dist/voice-pipeline/HardCutBargeinHandler.d.ts +3 -3
  483. package/dist/voice-pipeline/HardCutBargeinHandler.js +3 -3
  484. package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts +3 -3
  485. package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts.map +1 -1
  486. package/dist/voice-pipeline/HeuristicEndpointDetector.js +3 -3
  487. package/dist/voice-pipeline/HeuristicEndpointDetector.js.map +1 -1
  488. package/dist/voice-pipeline/SoftFadeBargeinHandler.d.ts +5 -5
  489. package/dist/voice-pipeline/SoftFadeBargeinHandler.js +1 -1
  490. package/dist/voice-pipeline/VoiceInterruptError.d.ts +6 -6
  491. package/dist/voice-pipeline/VoiceInterruptError.d.ts.map +1 -1
  492. package/dist/voice-pipeline/VoiceInterruptError.js +4 -4
  493. package/dist/voice-pipeline/VoiceInterruptError.js.map +1 -1
  494. package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts +9 -9
  495. package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts.map +1 -1
  496. package/dist/voice-pipeline/VoicePipelineOrchestrator.js +8 -8
  497. package/dist/voice-pipeline/VoicePipelineOrchestrator.js.map +1 -1
  498. package/dist/voice-pipeline/WebRTCStreamTransport.d.ts +421 -0
  499. package/dist/voice-pipeline/WebRTCStreamTransport.d.ts.map +1 -0
  500. package/dist/voice-pipeline/WebRTCStreamTransport.js +573 -0
  501. package/dist/voice-pipeline/WebRTCStreamTransport.js.map +1 -0
  502. package/dist/voice-pipeline/WebSocketStreamTransport.d.ts +8 -8
  503. package/dist/voice-pipeline/WebSocketStreamTransport.js +5 -5
  504. package/dist/voice-pipeline/index.d.ts +1 -0
  505. package/dist/voice-pipeline/index.d.ts.map +1 -1
  506. package/dist/voice-pipeline/index.js +2 -0
  507. package/dist/voice-pipeline/index.js.map +1 -1
  508. package/dist/voice-pipeline/types.d.ts +43 -43
  509. package/dist/voice-pipeline/types.d.ts.map +1 -1
  510. package/package.json +19 -1
@@ -0,0 +1,573 @@
1
+ /**
2
+ * @module voice-pipeline/WebRTCStreamTransport
3
+ *
4
+ * A concrete {@link IStreamTransport} implementation that wraps a WebRTC
5
+ * `RTCPeerConnection` and its DataChannels for bidirectional audio/text
6
+ * streaming. Provides lower latency than WebSocket by using unreliable/
7
+ * unordered DataChannels (UDP-like semantics) for audio frames and a
8
+ * reliable/ordered channel for control messages.
9
+ *
10
+ * ## Channel architecture
11
+ *
12
+ * Two DataChannels are created on the connection:
13
+ *
14
+ * | Channel | Label | Ordered | Reliable | Purpose |
15
+ * |-----------|-------------|---------|----------|----------------------------------|
16
+ * | Audio | `'audio'` | No | No | Low-latency PCM frame transport |
17
+ * | Control | `'control'` | Yes | Yes | JSON control messages (lossless) |
18
+ *
19
+ * The audio channel uses `maxRetransmits: 0` (fire-and-forget) because
20
+ * real-time voice tolerates occasional packet loss better than added
21
+ * latency from retransmissions. The control channel uses default TCP-like
22
+ * reliability since protocol messages (mute/unmute/stop) must arrive.
23
+ *
24
+ * ## Wire protocol
25
+ *
26
+ * ### Audio channel (binary)
27
+ * Each message is a raw `ArrayBuffer` containing Float32Array PCM samples.
28
+ * The transport reconstructs the Float32Array and wraps it in an
29
+ * {@link AudioFrame} with the configured sample rate.
30
+ *
31
+ * ### Control channel (text)
32
+ * Each message is a JSON string conforming to {@link ClientTextMessage}
33
+ * (inbound) or {@link ServerTextMessage} (outbound). Malformed JSON
34
+ * emits an `'error'` event without crashing the transport.
35
+ *
36
+ * ## Native dependency
37
+ * Node.js does not ship a built-in WebRTC stack. This transport requires
38
+ * the `wrtc` npm package (or a compatible polyfill) as an optional peer
39
+ * dependency. A helpful error is thrown at construction time if the
40
+ * package is not installed.
41
+ *
42
+ * @see {@link IStreamTransport} for the interface contract.
43
+ * @see {@link WebSocketStreamTransport} for the WebSocket-based sibling.
44
+ * @see {@link VoicePipelineOrchestrator} which consumes this transport.
45
+ */
46
+ import { EventEmitter } from 'node:events';
47
+ import { randomUUID } from 'node:crypto';
48
+ // ---------------------------------------------------------------------------
49
+ // Implementation
50
+ // ---------------------------------------------------------------------------
51
+ /**
52
+ * Bidirectional voice pipeline transport backed by WebRTC DataChannels.
53
+ *
54
+ * Uses two DataChannels for optimal voice streaming:
55
+ * - An **unreliable, unordered** `audio` channel for PCM frames (minimal
56
+ * latency, tolerates packet loss).
57
+ * - A **reliable, ordered** `control` channel for JSON control messages
58
+ * (mute/unmute/stop/config).
59
+ *
60
+ * ## Lifecycle
61
+ *
62
+ * 1. Construct with an existing {@link RTCPeerConnectionLike}.
63
+ * 2. Call `initialize` to create DataChannels and wire up handlers.
64
+ * 3. The transport is `'open'` once both DataChannels reach `'open'` state.
65
+ * 4. Call `close` to tear down channels and the peer connection.
66
+ *
67
+ * ## Events emitted
68
+ *
69
+ * | Event | Payload | Description |
70
+ * |------------------|------------------------------|---------------------------------------|
71
+ * | `'audio_frame'` | {@link AudioFrame} | Inbound audio from the remote peer. |
72
+ * | `'control'` | {@link ClientTextMessage} | Inbound JSON control message. |
73
+ * | `'connected'` | *(none)* | Both DataChannels are open. |
74
+ * | `'disconnected'` | *(none)* | Connection has been closed. |
75
+ * | `'error'` | `Error` | Transport-level error. |
76
+ * | `'ice_candidate'`| ICE candidate object | Local ICE candidate for signaling. |
77
+ *
78
+ * @fires audio_frame - `(frame: AudioFrame)` for every inbound audio message.
79
+ * @fires control - `(msg: ClientTextMessage)` for every inbound control message.
80
+ * @fires connected - Both DataChannels have reached 'open' state.
81
+ * @fires disconnected - Peer connection has been closed.
82
+ * @fires error - Transport-level error occurred.
83
+ * @fires ice_candidate - Local ICE candidate available for the signaling layer.
84
+ *
85
+ * @see {@link IStreamTransport} for the interface contract.
86
+ * @see {@link WebSocketStreamTransport} for the WebSocket-based sibling.
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * import { WebRTCStreamTransport } from '../voice-pipeline/index.js';
91
+ *
92
+ * // Receive RTCPeerConnection from your signaling server
93
+ * const transport = new WebRTCStreamTransport(peerConnection, { sampleRate: 16000 });
94
+ * await transport.initialize();
95
+ *
96
+ * transport.on('audio_frame', (frame) => sttSession.pushAudio(frame));
97
+ * transport.on('control', (msg) => handleClientMessage(msg));
98
+ * transport.on('ice_candidate', (candidate) => signalingChannel.send(candidate));
99
+ * ```
100
+ */
101
+ export class WebRTCStreamTransport extends EventEmitter {
102
+ // -------------------------------------------------------------------------
103
+ // Constructor
104
+ // -------------------------------------------------------------------------
105
+ /**
106
+ * Create a new WebRTC transport wrapping an existing peer connection.
107
+ *
108
+ * The transport starts in `'connecting'` state and transitions to
109
+ * `'open'` once both DataChannels are established and open.
110
+ *
111
+ * @param peerConnection - An existing RTCPeerConnection (from the `wrtc`
112
+ * package or a browser-compatible polyfill). The connection should be
113
+ * in `'new'` or `'connecting'` state — the transport will create
114
+ * DataChannels on it.
115
+ * @param config - Transport-level configuration (must include sampleRate).
116
+ *
117
+ * @throws {Error} If `peerConnection` is null/undefined.
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const pc = new RTCPeerConnection({ iceServers: [...] });
122
+ * const transport = new WebRTCStreamTransport(pc, { sampleRate: 16000 });
123
+ * ```
124
+ */
125
+ constructor(peerConnection, config) {
126
+ super();
127
+ /**
128
+ * Unreliable/unordered DataChannel for audio frame transport.
129
+ * Created during `initialize`. `null` until then.
130
+ */
131
+ this._audioChannel = null;
132
+ /**
133
+ * Reliable/ordered DataChannel for JSON control messages.
134
+ * Created during `initialize`. `null` until then.
135
+ */
136
+ this._controlChannel = null;
137
+ if (!peerConnection) {
138
+ throw new Error('WebRTCStreamTransport: peerConnection is required. ' +
139
+ 'Pass an RTCPeerConnection instance from the `wrtc` package or a compatible polyfill.');
140
+ }
141
+ this._pc = peerConnection;
142
+ this._sampleRate = config.sampleRate;
143
+ this._config = config;
144
+ this.id = randomUUID();
145
+ // Always start as connecting — we need both DataChannels to be open
146
+ // before the transport is usable.
147
+ this._state = 'connecting';
148
+ }
149
+ // -------------------------------------------------------------------------
150
+ // IStreamTransport -- public surface
151
+ // -------------------------------------------------------------------------
152
+ /**
153
+ * Current connection state of the WebRTC transport.
154
+ *
155
+ * The transport is `'open'` only when both DataChannels (audio + control)
156
+ * have reached their `'open'` readyState. Any earlier state maps to
157
+ * `'connecting'`, and any teardown maps to `'closing'` or `'closed'`.
158
+ */
159
+ get state() {
160
+ return this._state;
161
+ }
162
+ /**
163
+ * Create DataChannels and wire up all event handlers.
164
+ *
165
+ * This must be called after construction and before any send operations.
166
+ * It creates the `audio` (unreliable) and `control` (reliable)
167
+ * DataChannels on the peer connection and sets up message handlers.
168
+ *
169
+ * The transport transitions to `'open'` once both channels report
170
+ * readyState `'open'`.
171
+ *
172
+ * @returns Resolves when DataChannels are created (not necessarily open yet).
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const transport = new WebRTCStreamTransport(pc, { sampleRate: 16000 });
177
+ * await transport.initialize();
178
+ * // transport.state may still be 'connecting' until ICE completes
179
+ * ```
180
+ */
181
+ async initialize() {
182
+ // Create the unreliable audio channel — unordered + no retransmits
183
+ // gives UDP-like semantics ideal for real-time audio where latency
184
+ // matters more than guaranteed delivery.
185
+ this._audioChannel = this._pc.createDataChannel('audio', {
186
+ ordered: false,
187
+ maxRetransmits: 0,
188
+ });
189
+ this._audioChannel.binaryType = 'arraybuffer';
190
+ // Create the reliable control channel — ordered + reliable (defaults)
191
+ // ensures JSON protocol messages arrive in sequence and without loss.
192
+ this._controlChannel = this._pc.createDataChannel('control', {
193
+ ordered: true,
194
+ });
195
+ this._attachAudioChannelHandlers(this._audioChannel);
196
+ this._attachControlChannelHandlers(this._controlChannel);
197
+ this._attachPeerConnectionHandlers();
198
+ }
199
+ /**
200
+ * Send a synthesised audio chunk to the remote peer for playback.
201
+ *
202
+ * If the payload is an {@link EncodedAudioChunk} (has an `audio` Buffer
203
+ * property), that buffer's underlying ArrayBuffer is sent. If it is an
204
+ * {@link AudioFrame} (has a `samples` Float32Array), the samples'
205
+ * underlying ArrayBuffer is sent.
206
+ *
207
+ * @param chunk - Encoded audio chunk or raw PCM frame to deliver.
208
+ * @returns Resolves once the data has been handed to the DataChannel.
209
+ *
210
+ * @throws {Error} If the audio channel is not open or not initialized.
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * await transport.sendAudio({
215
+ * audio: Buffer.from(opusBytes),
216
+ * format: 'opus',
217
+ * sampleRate: 24000,
218
+ * durationMs: 20,
219
+ * text: 'Hello!',
220
+ * });
221
+ * ```
222
+ */
223
+ sendAudio(chunk) {
224
+ return new Promise((resolve, reject) => {
225
+ if (!this._audioChannel) {
226
+ reject(new Error('WebRTCStreamTransport: audio channel not initialized. Call initialize() first.'));
227
+ return;
228
+ }
229
+ if (this._audioChannel.readyState !== 'open') {
230
+ reject(new Error(`WebRTCStreamTransport: audio channel is "${this._audioChannel.readyState}", not "open".`));
231
+ return;
232
+ }
233
+ try {
234
+ let arrayBuffer;
235
+ if ('audio' in chunk) {
236
+ // EncodedAudioChunk path: extract the ArrayBuffer from the Buffer.
237
+ // Buffer.buffer may be a shared pool allocation, so we slice to get
238
+ // only the relevant portion.
239
+ const buf = chunk.audio;
240
+ arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
241
+ }
242
+ else {
243
+ // AudioFrame path: send the Float32Array's backing ArrayBuffer.
244
+ // Same slicing concern as above — the Float32Array may be a view
245
+ // into a larger buffer.
246
+ const frame = chunk;
247
+ arrayBuffer = frame.samples.buffer.slice(frame.samples.byteOffset, frame.samples.byteOffset + frame.samples.byteLength);
248
+ }
249
+ this._audioChannel.send(arrayBuffer);
250
+ resolve();
251
+ }
252
+ catch (err) {
253
+ reject(err);
254
+ }
255
+ });
256
+ }
257
+ /**
258
+ * Send a JSON control message to the remote peer.
259
+ *
260
+ * The message is JSON-stringified before transmission on the reliable
261
+ * control channel. Both {@link TransportControlMessage} and
262
+ * {@link ServerTextMessage} are accepted since they share the same
263
+ * serialisation path.
264
+ *
265
+ * @param msg - Server-side protocol message.
266
+ * @returns Resolves once the message has been handed to the DataChannel.
267
+ *
268
+ * @throws {Error} If the control channel is not open or not initialized.
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * await transport.sendControl({ type: 'mute' });
273
+ * ```
274
+ */
275
+ sendControl(msg) {
276
+ return new Promise((resolve, reject) => {
277
+ if (!this._controlChannel) {
278
+ reject(new Error('WebRTCStreamTransport: control channel not initialized. Call initialize() first.'));
279
+ return;
280
+ }
281
+ if (this._controlChannel.readyState !== 'open') {
282
+ reject(new Error(`WebRTCStreamTransport: control channel is "${this._controlChannel.readyState}", not "open".`));
283
+ return;
284
+ }
285
+ try {
286
+ this._controlChannel.send(JSON.stringify(msg));
287
+ resolve();
288
+ }
289
+ catch (err) {
290
+ reject(err);
291
+ }
292
+ });
293
+ }
294
+ /**
295
+ * Initiate a graceful close of the transport.
296
+ *
297
+ * Closes both DataChannels and the underlying peer connection.
298
+ * The `'disconnected'` event fires once the connection has fully closed.
299
+ *
300
+ * @param _code - Ignored for WebRTC (included for IStreamTransport compat).
301
+ * @param _reason - Ignored for WebRTC (included for IStreamTransport compat).
302
+ */
303
+ close(_code, _reason) {
304
+ this._state = 'closing';
305
+ // Close DataChannels first — this triggers their onclose handlers
306
+ // which will check whether the transport should transition to 'closed'.
307
+ if (this._audioChannel && this._audioChannel.readyState !== 'closed') {
308
+ this._audioChannel.close();
309
+ }
310
+ if (this._controlChannel && this._controlChannel.readyState !== 'closed') {
311
+ this._controlChannel.close();
312
+ }
313
+ // Close the peer connection, which releases all network resources.
314
+ if (this._pc.connectionState !== 'closed') {
315
+ this._pc.close();
316
+ }
317
+ this._state = 'closed';
318
+ this.emit('disconnected');
319
+ }
320
+ /**
321
+ * Add a remote ICE candidate received through the signaling channel.
322
+ *
323
+ * WebRTC requires ICE candidate exchange for NAT traversal. The signaling
324
+ * server should forward remote candidates to this method.
325
+ *
326
+ * @param candidate - The ICE candidate object from the remote peer, or
327
+ * `null` to signal end-of-candidates.
328
+ * @returns Resolves when the candidate has been added to the connection.
329
+ *
330
+ * @throws {Error} If the candidate is invalid or the connection is closed.
331
+ *
332
+ * @example
333
+ * ```typescript
334
+ * signalingChannel.on('ice_candidate', async (candidate) => {
335
+ * await transport.addIceCandidate(candidate);
336
+ * });
337
+ * ```
338
+ */
339
+ async addIceCandidate(candidate) {
340
+ await this._pc.addIceCandidate(candidate);
341
+ }
342
+ // -------------------------------------------------------------------------
343
+ // Private helpers
344
+ // -------------------------------------------------------------------------
345
+ /**
346
+ * Attach message and lifecycle handlers to the audio DataChannel.
347
+ *
348
+ * Inbound binary messages are decoded as Float32Array PCM samples and
349
+ * emitted as `'audio_frame'` events. This channel uses arraybuffer
350
+ * binary type for efficient binary transfer.
351
+ *
352
+ * @param channel - The audio DataChannel to attach handlers to.
353
+ */
354
+ _attachAudioChannelHandlers(channel) {
355
+ channel.onmessage = (event) => {
356
+ try {
357
+ // DataChannel messages arrive as ArrayBuffer when binaryType is set.
358
+ // Guard against unexpected string messages on the audio channel.
359
+ const raw = event.data;
360
+ if (!(raw instanceof ArrayBuffer)) {
361
+ this.emit('error', new Error('WebRTCStreamTransport: received non-binary message on audio channel'));
362
+ return;
363
+ }
364
+ // Create a Float32Array view over the received ArrayBuffer.
365
+ // Each float is 4 bytes, so byteLength / 4 gives the sample count.
366
+ const samples = new Float32Array(raw);
367
+ const frame = {
368
+ samples,
369
+ sampleRate: this._sampleRate,
370
+ timestamp: Date.now(),
371
+ };
372
+ this.emit('audio_frame', frame);
373
+ }
374
+ catch (err) {
375
+ this.emit('error', new Error(`WebRTCStreamTransport: error processing audio message: ${String(err)}`));
376
+ }
377
+ };
378
+ channel.onopen = () => {
379
+ // Check if both channels are now open to transition the transport
380
+ this._checkBothChannelsOpen();
381
+ };
382
+ channel.onclose = () => {
383
+ // If the audio channel closes unexpectedly, surface the disconnection
384
+ if (this._state === 'open') {
385
+ this._state = 'closed';
386
+ this.emit('disconnected');
387
+ }
388
+ };
389
+ channel.onerror = (event) => {
390
+ this.emit('error', new Error(`WebRTCStreamTransport: audio channel error: ${String(event)}`));
391
+ };
392
+ }
393
+ /**
394
+ * Attach message and lifecycle handlers to the control DataChannel.
395
+ *
396
+ * Inbound text messages are JSON-parsed as {@link ClientTextMessage}
397
+ * and emitted as `'control'` events. Malformed JSON triggers an
398
+ * `'error'` event without crashing the transport.
399
+ *
400
+ * @param channel - The control DataChannel to attach handlers to.
401
+ */
402
+ _attachControlChannelHandlers(channel) {
403
+ channel.onmessage = (event) => {
404
+ try {
405
+ const text = typeof event.data === 'string' ? event.data : String(event.data);
406
+ const msg = JSON.parse(text);
407
+ this.emit('control', msg);
408
+ }
409
+ catch (err) {
410
+ // Malformed JSON should not crash the transport — emit an error
411
+ // and let the session continue processing valid messages.
412
+ this.emit('error', new Error(`WebRTCStreamTransport: failed to parse control message as JSON: ${String(err)}`));
413
+ }
414
+ };
415
+ channel.onopen = () => {
416
+ // Check if both channels are now open to transition the transport
417
+ this._checkBothChannelsOpen();
418
+ };
419
+ channel.onclose = () => {
420
+ // If the control channel closes unexpectedly, surface the disconnection
421
+ if (this._state === 'open') {
422
+ this._state = 'closed';
423
+ this.emit('disconnected');
424
+ }
425
+ };
426
+ channel.onerror = (event) => {
427
+ this.emit('error', new Error(`WebRTCStreamTransport: control channel error: ${String(event)}`));
428
+ };
429
+ }
430
+ /**
431
+ * Attach handlers to the peer connection for ICE candidate exchange
432
+ * and connection state monitoring.
433
+ *
434
+ * ICE candidates are re-emitted as `'ice_candidate'` events so the
435
+ * consumer can relay them to the remote peer via a signaling channel.
436
+ * Connection state changes are mapped to transport state transitions.
437
+ */
438
+ _attachPeerConnectionHandlers() {
439
+ // Forward local ICE candidates to the consumer for signaling.
440
+ // Without this, NAT traversal cannot complete because the remote
441
+ // peer won't know how to reach us.
442
+ this._pc.onicecandidate = (event) => {
443
+ if (event.candidate) {
444
+ this.emit('ice_candidate', event.candidate);
445
+ }
446
+ };
447
+ // Map peer connection state changes to transport lifecycle events.
448
+ // The connectionState property aggregates ICE + DTLS state into a
449
+ // single human-readable enum.
450
+ this._pc.onconnectionstatechange = () => {
451
+ const pcState = this._pc.connectionState;
452
+ switch (pcState) {
453
+ case 'connected':
454
+ // Peer connection is fully established. DataChannel open events
455
+ // may fire before or after this — _checkBothChannelsOpen handles
456
+ // the actual 'open' transition.
457
+ break;
458
+ case 'disconnected':
459
+ // Transient network disruption — ICE may recover automatically.
460
+ // We don't transition to 'closed' yet, but surface the event.
461
+ if (this._state === 'open') {
462
+ this.emit('error', new Error('WebRTCStreamTransport: peer connection disconnected (may recover)'));
463
+ }
464
+ break;
465
+ case 'failed':
466
+ // ICE/DTLS negotiation failed permanently. Tear down the transport.
467
+ this._state = 'closed';
468
+ this.emit('error', new Error('WebRTCStreamTransport: peer connection failed'));
469
+ this.emit('disconnected');
470
+ break;
471
+ case 'closed':
472
+ // Connection was closed (by us or the remote peer).
473
+ if (this._state !== 'closed') {
474
+ this._state = 'closed';
475
+ this.emit('disconnected');
476
+ }
477
+ break;
478
+ default:
479
+ // 'new' | 'connecting' — no action needed
480
+ break;
481
+ }
482
+ };
483
+ // Handle DataChannels created by the remote peer (e.g. if the remote
484
+ // side creates channels instead of us). This supports both offerer
485
+ // and answerer roles.
486
+ this._pc.ondatachannel = (event) => {
487
+ const channel = event.channel;
488
+ if (channel.label === 'audio') {
489
+ channel.binaryType = 'arraybuffer';
490
+ this._audioChannel = channel;
491
+ this._attachAudioChannelHandlers(channel);
492
+ }
493
+ else if (channel.label === 'control') {
494
+ this._controlChannel = channel;
495
+ this._attachControlChannelHandlers(channel);
496
+ }
497
+ };
498
+ }
499
+ /**
500
+ * Check if both DataChannels are in the `'open'` readyState.
501
+ *
502
+ * Called from each channel's `onopen` handler. Only transitions the
503
+ * transport to `'open'` state once BOTH channels are ready, since
504
+ * sending on a non-open channel would throw.
505
+ */
506
+ _checkBothChannelsOpen() {
507
+ const audioOpen = this._audioChannel?.readyState === 'open';
508
+ const controlOpen = this._controlChannel?.readyState === 'open';
509
+ if (audioOpen && controlOpen && this._state === 'connecting') {
510
+ this._state = 'open';
511
+ this.emit('connected');
512
+ }
513
+ }
514
+ }
515
+ // ---------------------------------------------------------------------------
516
+ // Factory helper for creating a transport with a new RTCPeerConnection
517
+ // ---------------------------------------------------------------------------
518
+ /**
519
+ * Create a WebRTC transport with a fresh RTCPeerConnection from the `wrtc`
520
+ * package. This is a convenience factory for server-side usage where a
521
+ * pre-existing connection is not available.
522
+ *
523
+ * The `wrtc` package is loaded via dynamic import to keep it as an
524
+ * optional peer dependency. If the package is not installed, a descriptive
525
+ * error is thrown.
526
+ *
527
+ * @param config - Transport configuration including sample rate and ICE servers.
528
+ * @returns A new {@link WebRTCStreamTransport} wrapping a fresh peer connection.
529
+ *
530
+ * @throws {Error} If the `wrtc` package is not installed or importable.
531
+ *
532
+ * @example
533
+ * ```typescript
534
+ * const transport = await createWebRTCTransport({
535
+ * sampleRate: 16000,
536
+ * iceServers: [{ urls: 'stun:stun.l.google.com:19302' }],
537
+ * });
538
+ * await transport.initialize();
539
+ * ```
540
+ */
541
+ export async function createWebRTCTransport(config) {
542
+ // Dynamic import so that `wrtc` is only loaded when actually needed.
543
+ // This keeps the package as an optional peer dependency — users who
544
+ // only use WebSocket transport never need to install the heavy native
545
+ // addon.
546
+ let RTCPeerConnection;
547
+ try {
548
+ // @ts-ignore — optional peer dependency; only needed for server-side WebRTC
549
+ const wrtcModule = await import('wrtc');
550
+ RTCPeerConnection =
551
+ wrtcModule.RTCPeerConnection ?? wrtcModule.default?.RTCPeerConnection;
552
+ }
553
+ catch {
554
+ throw new Error('WebRTCStreamTransport requires the `wrtc` package for server-side WebRTC. ' +
555
+ 'Install it with: npm install wrtc\n\n' +
556
+ 'Note: `wrtc` is a native addon and may require build tools (Python, C++ compiler). ' +
557
+ 'See https://github.com/nicktomlin/wrtc for platform-specific instructions.');
558
+ }
559
+ if (!RTCPeerConnection) {
560
+ throw new Error('WebRTCStreamTransport: `wrtc` package was imported but RTCPeerConnection was not found. ' +
561
+ 'Ensure you have a compatible version of the `wrtc` package installed.');
562
+ }
563
+ const pc = new RTCPeerConnection({
564
+ iceServers: config.iceServers ?? [
565
+ // Default to Google's public STUN server for basic NAT traversal.
566
+ // Production deployments should provide their own TURN servers for
567
+ // symmetric NAT scenarios.
568
+ { urls: 'stun:stun.l.google.com:19302' },
569
+ ],
570
+ });
571
+ return new WebRTCStreamTransport(pc, config);
572
+ }
573
+ //# sourceMappingURL=WebRTCStreamTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebRTCStreamTransport.js","sourceRoot":"","sources":["../../src/voice-pipeline/WebRTCStreamTransport.ts"],"names":[],"mappings":"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"}
@@ -21,11 +21,11 @@
21
21
  * not crash the transport, allowing the session to continue.
22
22
  *
23
23
  * ### Binary frames (outbound)
24
- * {@link sendAudio} sends the raw `Buffer` from an {@link EncodedAudioChunk}
24
+ * `sendAudio()` sends the raw `Buffer` from an {@link EncodedAudioChunk}
25
25
  * (or converts a `Float32Array` to a `Buffer` for raw {@link AudioFrame}s).
26
26
  *
27
27
  * ### Text frames (outbound)
28
- * {@link sendControl} JSON-stringifies a {@link ServerTextMessage} and sends
28
+ * `sendControl()` JSON-stringifies a {@link ServerTextMessage} and sends
29
29
  * it as a text frame.
30
30
  *
31
31
  * ## Reconnection behaviour
@@ -100,7 +100,7 @@ export interface WebSocketLike extends NodeJS.EventEmitter {
100
100
  */
101
101
  export interface WebSocketStreamTransportConfig {
102
102
  /**
103
- * Sample rate (in Hz) used to populate {@link AudioFrame.sampleRate} on
103
+ * Sample rate (in Hz) used to populate `AudioFrame.sampleRate` on
104
104
  * inbound binary messages. Must match the rate the remote client is sending.
105
105
  *
106
106
  * Common values: 16000 (telephony/STT), 24000 (TTS output), 48000 (high-fidelity).
@@ -123,8 +123,8 @@ export interface WebSocketStreamTransportConfig {
123
123
  *
124
124
  * | Method | Behaviour |
125
125
  * |-----------------|--------------------------------------------------------|
126
- * | {@link sendAudio} | Serialises audio to a binary `Buffer` and calls `ws.send()`. |
127
- * | {@link sendControl} | JSON-stringifies the message and calls `ws.send()`. |
126
+ * | `sendAudio()` | Serialises audio to a binary `Buffer` and calls `ws.send()`. |
127
+ * | `sendControl()` | JSON-stringifies the message and calls `ws.send()`. |
128
128
  *
129
129
  * ## Lifecycle events (re-emitted on `this`)
130
130
  *
@@ -161,13 +161,13 @@ export declare class WebSocketStreamTransport extends EventEmitter implements IS
161
161
  readonly id: string;
162
162
  /**
163
163
  * Current connection state. Updated internally by WebSocket event handlers.
164
- * Read externally via the {@link state} getter.
164
+ * Read externally via the `state` getter.
165
165
  */
166
166
  private _state;
167
167
  /** The underlying WebSocket connection. */
168
168
  private readonly _ws;
169
169
  /**
170
- * Audio sample rate propagated into every decoded {@link AudioFrame}.
170
+ * Audio sample rate propagated into every decoded `AudioFrame`.
171
171
  * Configured once at construction and never changed.
172
172
  */
173
173
  private readonly _sampleRate;
@@ -175,7 +175,7 @@ export declare class WebSocketStreamTransport extends EventEmitter implements IS
175
175
  * Create a new transport wrapping an existing WebSocket connection.
176
176
  *
177
177
  * The constructor inspects `ws.readyState` to determine the initial
178
- * {@link state}: if the socket is already OPEN (readyState === 1) the state
178
+ * `state`: if the socket is already OPEN (readyState === 1) the state
179
179
  * is set to `'open'`; otherwise it is set to `'connecting'` and will
180
180
  * transition to `'open'` when the `'open'` event fires.
181
181
  *