@moureau/pipeflow 0.0.1 → 0.0.3

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 (336) hide show
  1. package/README.md +280 -130
  2. package/dist/cjs/agents/agent.js +1 -1
  3. package/dist/cjs/agents/agent.js.map +3 -3
  4. package/dist/cjs/agents/tools/tools.js +1 -1
  5. package/dist/cjs/agents/tools/tools.js.map +3 -3
  6. package/dist/cjs/client/client.js +2 -0
  7. package/dist/cjs/client/client.js.map +7 -0
  8. package/dist/cjs/client/index.js +2 -0
  9. package/dist/cjs/client/index.js.map +7 -0
  10. package/dist/cjs/client/json.js +2 -0
  11. package/dist/cjs/client/json.js.map +7 -0
  12. package/dist/cjs/client/protocol/websocket.js +2 -0
  13. package/dist/cjs/client/protocol/websocket.js.map +7 -0
  14. package/dist/cjs/client/protocol.js +2 -0
  15. package/dist/cjs/client/protocol.js.map +7 -0
  16. package/dist/cjs/conversations/conversation/conversation.js +1 -1
  17. package/dist/cjs/conversations/conversation/conversation.js.map +3 -3
  18. package/dist/cjs/conversations/conversations.js +1 -1
  19. package/dist/cjs/conversations/conversations.js.map +3 -3
  20. package/dist/cjs/conversations/index.js +1 -1
  21. package/dist/cjs/conversations/index.js.map +3 -3
  22. package/dist/cjs/conversations/orchestration/coordination/coordination.js +10 -0
  23. package/dist/cjs/conversations/orchestration/coordination/coordination.js.map +7 -0
  24. package/dist/cjs/conversations/orchestration/coordination/index.js +2 -0
  25. package/dist/cjs/conversations/orchestration/coordination/index.js.map +7 -0
  26. package/dist/cjs/conversations/orchestration/orchestrator/coordination-runner/coordination-runner.js +4 -0
  27. package/dist/cjs/conversations/orchestration/orchestrator/coordination-runner/coordination-runner.js.map +7 -0
  28. package/dist/cjs/conversations/orchestration/orchestrator/coordination-runner/index.js +2 -0
  29. package/dist/cjs/conversations/orchestration/orchestrator/coordination-runner/index.js.map +7 -0
  30. package/dist/cjs/conversations/orchestration/orchestrator/generation/generation.js +2 -0
  31. package/dist/cjs/conversations/orchestration/orchestrator/generation/generation.js.map +7 -0
  32. package/dist/cjs/conversations/orchestration/orchestrator/generation/index.js +2 -0
  33. package/dist/cjs/conversations/orchestration/orchestrator/generation/index.js.map +7 -0
  34. package/dist/cjs/conversations/orchestration/orchestrator/history/history.js +4 -0
  35. package/dist/cjs/conversations/orchestration/orchestrator/history/history.js.map +7 -0
  36. package/dist/cjs/conversations/orchestration/orchestrator/history/index.js +2 -0
  37. package/dist/cjs/conversations/orchestration/orchestrator/history/index.js.map +7 -0
  38. package/dist/cjs/conversations/orchestration/orchestrator/index.js +1 -1
  39. package/dist/cjs/conversations/orchestration/orchestrator/index.js.map +3 -3
  40. package/dist/cjs/conversations/orchestration/orchestrator/orchestrator.js +1 -2
  41. package/dist/cjs/conversations/orchestration/orchestrator/orchestrator.js.map +3 -3
  42. package/dist/cjs/conversations/orchestration/orchestrator/routing/index.js +2 -0
  43. package/dist/cjs/conversations/orchestration/orchestrator/routing/index.js.map +7 -0
  44. package/dist/cjs/conversations/orchestration/orchestrator/routing/routing.js +23 -0
  45. package/dist/cjs/conversations/orchestration/orchestrator/routing/routing.js.map +7 -0
  46. package/dist/cjs/conversations/orchestration/orchestrator/speech/index.js +2 -0
  47. package/dist/cjs/conversations/orchestration/orchestrator/speech/index.js.map +7 -0
  48. package/dist/cjs/conversations/orchestration/orchestrator/speech/speech.js +2 -0
  49. package/dist/cjs/conversations/orchestration/orchestrator/speech/speech.js.map +7 -0
  50. package/dist/cjs/conversations/orchestration/orchestrator/tools/index.js +2 -0
  51. package/dist/cjs/conversations/orchestration/orchestrator/tools/index.js.map +7 -0
  52. package/dist/cjs/conversations/orchestration/orchestrator/tools/tools.js +2 -0
  53. package/dist/cjs/conversations/orchestration/orchestrator/tools/tools.js.map +7 -0
  54. package/dist/cjs/conversations/orchestration/test-harness.js +2 -0
  55. package/dist/cjs/conversations/orchestration/test-harness.js.map +7 -0
  56. package/dist/cjs/conversations/orchestration/text-chunker/index.js +2 -0
  57. package/dist/cjs/conversations/orchestration/text-chunker/index.js.map +7 -0
  58. package/dist/cjs/conversations/orchestration/text-chunker/text-chunker.js +3 -0
  59. package/dist/cjs/conversations/orchestration/text-chunker/text-chunker.js.map +7 -0
  60. package/dist/cjs/conversations/stream/conversation-stream.js +2 -0
  61. package/dist/cjs/conversations/stream/conversation-stream.js.map +7 -0
  62. package/dist/cjs/conversations/stream/index.js +2 -0
  63. package/dist/cjs/conversations/stream/index.js.map +7 -0
  64. package/dist/cjs/conversations/types.js +1 -1
  65. package/dist/cjs/conversations/types.js.map +2 -2
  66. package/dist/cjs/index.js +1 -1
  67. package/dist/cjs/index.js.map +3 -3
  68. package/dist/cjs/persistence/adapters/sqlite/sqlite.js +18 -14
  69. package/dist/cjs/persistence/adapters/sqlite/sqlite.js.map +3 -3
  70. package/dist/cjs/pipeflow/index.js +2 -0
  71. package/dist/cjs/pipeflow/index.js.map +7 -0
  72. package/dist/cjs/pipeflow/pipeflow.js +2 -0
  73. package/dist/cjs/pipeflow/pipeflow.js.map +7 -0
  74. package/dist/cjs/providers/index.js +1 -1
  75. package/dist/cjs/providers/index.js.map +2 -2
  76. package/dist/cjs/providers/llm/adapters/claude/claude.js +5 -0
  77. package/dist/cjs/providers/llm/adapters/claude/claude.js.map +7 -0
  78. package/dist/cjs/providers/llm/adapters/claude/index.js +2 -0
  79. package/dist/cjs/providers/llm/adapters/claude/index.js.map +7 -0
  80. package/dist/cjs/providers/llm/adapters/deepseek/deepseek.js +1 -1
  81. package/dist/cjs/providers/llm/adapters/deepseek/deepseek.js.map +3 -3
  82. package/dist/cjs/providers/llm/adapters/index.js +1 -1
  83. package/dist/cjs/providers/llm/adapters/index.js.map +3 -3
  84. package/dist/cjs/providers/llm/adapters/openai/index.js +2 -0
  85. package/dist/cjs/providers/llm/adapters/openai/index.js.map +7 -0
  86. package/dist/cjs/providers/llm/adapters/openai/openai.js +2 -0
  87. package/dist/cjs/providers/llm/adapters/openai/openai.js.map +7 -0
  88. package/dist/cjs/providers/llm/adapters/openai-compatible.js +10 -0
  89. package/dist/cjs/providers/llm/adapters/openai-compatible.js.map +7 -0
  90. package/dist/cjs/providers/llm/adapters/openrouter/index.js +2 -0
  91. package/dist/cjs/providers/llm/adapters/openrouter/index.js.map +7 -0
  92. package/dist/cjs/providers/llm/adapters/openrouter/openrouter.js +2 -0
  93. package/dist/cjs/providers/llm/adapters/openrouter/openrouter.js.map +7 -0
  94. package/dist/cjs/providers/llm/index.js +1 -1
  95. package/dist/cjs/providers/llm/index.js.map +3 -3
  96. package/dist/cjs/providers/llm/toolmode/index.js +2 -0
  97. package/dist/cjs/providers/llm/toolmode/index.js.map +7 -0
  98. package/dist/cjs/providers/llm/toolmode/toolmode.js +2 -0
  99. package/dist/cjs/providers/llm/toolmode/toolmode.js.map +7 -0
  100. package/dist/cjs/providers/llm/types.js +1 -1
  101. package/dist/cjs/providers/llm/types.js.map +3 -3
  102. package/dist/cjs/providers/stt/adapters/deepgram/deepgram.js +1 -1
  103. package/dist/cjs/providers/stt/adapters/deepgram/deepgram.js.map +3 -3
  104. package/dist/cjs/providers/stt/adapters/index.js +1 -1
  105. package/dist/cjs/providers/stt/adapters/index.js.map +3 -3
  106. package/dist/cjs/providers/stt/adapters/openrouter/index.js +2 -0
  107. package/dist/cjs/providers/stt/adapters/openrouter/index.js.map +7 -0
  108. package/dist/cjs/providers/stt/adapters/openrouter/openrouter.js +2 -0
  109. package/dist/cjs/providers/stt/adapters/openrouter/openrouter.js.map +7 -0
  110. package/dist/cjs/providers/tts/adapters/index.js +1 -1
  111. package/dist/cjs/providers/tts/adapters/index.js.map +3 -3
  112. package/dist/cjs/providers/tts/adapters/kokoro/kokoro.js +4 -1
  113. package/dist/cjs/providers/tts/adapters/kokoro/kokoro.js.map +3 -3
  114. package/dist/cjs/providers/tts/adapters/openrouter/index.js +2 -0
  115. package/dist/cjs/providers/tts/adapters/openrouter/index.js.map +7 -0
  116. package/dist/cjs/providers/tts/adapters/openrouter/openrouter.js +2 -0
  117. package/dist/cjs/providers/tts/adapters/openrouter/openrouter.js.map +7 -0
  118. package/dist/cjs/transport/streamobject/field-stream/field-stream.js +2 -0
  119. package/dist/cjs/transport/streamobject/field-stream/field-stream.js.map +7 -0
  120. package/dist/cjs/transport/streamobject/field-stream/index.js +2 -0
  121. package/dist/cjs/transport/streamobject/field-stream/index.js.map +7 -0
  122. package/dist/cjs/transport/streamobject/index.js +2 -0
  123. package/dist/cjs/transport/streamobject/index.js.map +7 -0
  124. package/dist/cjs/transport/streamobject/json-adapter/index.js +2 -0
  125. package/dist/cjs/transport/streamobject/json-adapter/index.js.map +7 -0
  126. package/dist/cjs/transport/streamobject/json-adapter/json-adapter.js +4 -0
  127. package/dist/cjs/transport/streamobject/json-adapter/json-adapter.js.map +7 -0
  128. package/dist/cjs/transport/streamobject/reference/index.js +2 -0
  129. package/dist/cjs/transport/streamobject/reference/index.js.map +7 -0
  130. package/dist/cjs/transport/streamobject/reference/reference.js +2 -0
  131. package/dist/cjs/transport/streamobject/reference/reference.js.map +7 -0
  132. package/dist/cjs/transport/streamobject/stream-object/index.js +2 -0
  133. package/dist/cjs/transport/streamobject/stream-object/index.js.map +7 -0
  134. package/dist/cjs/transport/streamobject/stream-object/stream-object.js +2 -0
  135. package/dist/cjs/transport/streamobject/stream-object/stream-object.js.map +7 -0
  136. package/dist/esm/agents/agent.js +1 -1
  137. package/dist/esm/agents/agent.js.map +3 -3
  138. package/dist/esm/agents/tools/tools.js +1 -1
  139. package/dist/esm/agents/tools/tools.js.map +3 -3
  140. package/dist/esm/client/client.js +2 -0
  141. package/dist/esm/client/client.js.map +7 -0
  142. package/dist/esm/client/index.js +2 -0
  143. package/dist/esm/client/index.js.map +7 -0
  144. package/dist/esm/client/json.js +2 -0
  145. package/dist/esm/client/json.js.map +7 -0
  146. package/dist/esm/client/protocol/websocket.js +2 -0
  147. package/dist/esm/client/protocol/websocket.js.map +7 -0
  148. package/dist/esm/client/protocol.js +1 -0
  149. package/dist/esm/client/protocol.js.map +7 -0
  150. package/dist/esm/conversations/conversation/conversation.js +1 -1
  151. package/dist/esm/conversations/conversation/conversation.js.map +3 -3
  152. package/dist/esm/conversations/conversations.js +1 -1
  153. package/dist/esm/conversations/conversations.js.map +3 -3
  154. package/dist/esm/conversations/index.js +1 -1
  155. package/dist/esm/conversations/index.js.map +3 -3
  156. package/dist/esm/conversations/orchestration/coordination/coordination.js +10 -0
  157. package/dist/esm/conversations/orchestration/coordination/coordination.js.map +7 -0
  158. package/dist/esm/conversations/orchestration/coordination/index.js +2 -0
  159. package/dist/esm/conversations/orchestration/coordination/index.js.map +7 -0
  160. package/dist/esm/conversations/orchestration/orchestrator/coordination-runner/coordination-runner.js +4 -0
  161. package/dist/esm/conversations/orchestration/orchestrator/coordination-runner/coordination-runner.js.map +7 -0
  162. package/dist/esm/conversations/orchestration/orchestrator/coordination-runner/index.js +2 -0
  163. package/dist/esm/conversations/orchestration/orchestrator/coordination-runner/index.js.map +7 -0
  164. package/dist/esm/conversations/orchestration/orchestrator/generation/generation.js +2 -0
  165. package/dist/esm/conversations/orchestration/orchestrator/generation/generation.js.map +7 -0
  166. package/dist/esm/conversations/orchestration/orchestrator/generation/index.js +2 -0
  167. package/dist/esm/conversations/orchestration/orchestrator/generation/index.js.map +7 -0
  168. package/dist/esm/conversations/orchestration/orchestrator/history/history.js +4 -0
  169. package/dist/esm/conversations/orchestration/orchestrator/history/history.js.map +7 -0
  170. package/dist/esm/conversations/orchestration/orchestrator/history/index.js +2 -0
  171. package/dist/esm/conversations/orchestration/orchestrator/history/index.js.map +7 -0
  172. package/dist/esm/conversations/orchestration/orchestrator/index.js +1 -1
  173. package/dist/esm/conversations/orchestration/orchestrator/index.js.map +3 -3
  174. package/dist/esm/conversations/orchestration/orchestrator/orchestrator.js +1 -2
  175. package/dist/esm/conversations/orchestration/orchestrator/orchestrator.js.map +3 -3
  176. package/dist/esm/conversations/orchestration/orchestrator/routing/index.js +2 -0
  177. package/dist/esm/conversations/orchestration/orchestrator/routing/index.js.map +7 -0
  178. package/dist/esm/conversations/orchestration/orchestrator/routing/routing.js +23 -0
  179. package/dist/esm/conversations/orchestration/orchestrator/routing/routing.js.map +7 -0
  180. package/dist/esm/conversations/orchestration/orchestrator/speech/index.js +2 -0
  181. package/dist/esm/conversations/orchestration/orchestrator/speech/index.js.map +7 -0
  182. package/dist/esm/conversations/orchestration/orchestrator/speech/speech.js +2 -0
  183. package/dist/esm/conversations/orchestration/orchestrator/speech/speech.js.map +7 -0
  184. package/dist/esm/conversations/orchestration/orchestrator/tools/index.js +2 -0
  185. package/dist/esm/conversations/orchestration/orchestrator/tools/index.js.map +7 -0
  186. package/dist/esm/conversations/orchestration/orchestrator/tools/tools.js +2 -0
  187. package/dist/esm/conversations/orchestration/orchestrator/tools/tools.js.map +7 -0
  188. package/dist/esm/conversations/orchestration/test-harness.js +2 -0
  189. package/dist/esm/conversations/orchestration/test-harness.js.map +7 -0
  190. package/dist/esm/conversations/orchestration/text-chunker/index.js +2 -0
  191. package/dist/esm/conversations/orchestration/text-chunker/index.js.map +7 -0
  192. package/dist/esm/conversations/orchestration/text-chunker/text-chunker.js +3 -0
  193. package/dist/esm/conversations/orchestration/text-chunker/text-chunker.js.map +7 -0
  194. package/dist/esm/conversations/stream/conversation-stream.js +2 -0
  195. package/dist/esm/conversations/stream/conversation-stream.js.map +7 -0
  196. package/dist/esm/conversations/stream/index.js +2 -0
  197. package/dist/esm/conversations/stream/index.js.map +7 -0
  198. package/dist/esm/conversations/types.js +1 -1
  199. package/dist/esm/conversations/types.js.map +2 -2
  200. package/dist/esm/index.js +1 -1
  201. package/dist/esm/index.js.map +3 -3
  202. package/dist/esm/persistence/adapters/sqlite/sqlite.js +18 -14
  203. package/dist/esm/persistence/adapters/sqlite/sqlite.js.map +3 -3
  204. package/dist/esm/pipeflow/index.js +2 -0
  205. package/dist/esm/pipeflow/index.js.map +7 -0
  206. package/dist/esm/pipeflow/pipeflow.js +2 -0
  207. package/dist/esm/pipeflow/pipeflow.js.map +7 -0
  208. package/dist/esm/providers/index.js +1 -1
  209. package/dist/esm/providers/index.js.map +3 -3
  210. package/dist/esm/providers/llm/adapters/claude/claude.js +5 -0
  211. package/dist/esm/providers/llm/adapters/claude/claude.js.map +7 -0
  212. package/dist/esm/providers/llm/adapters/claude/index.js +2 -0
  213. package/dist/esm/providers/llm/adapters/claude/index.js.map +7 -0
  214. package/dist/esm/providers/llm/adapters/deepseek/deepseek.js +1 -1
  215. package/dist/esm/providers/llm/adapters/deepseek/deepseek.js.map +3 -3
  216. package/dist/esm/providers/llm/adapters/index.js +1 -1
  217. package/dist/esm/providers/llm/adapters/index.js.map +3 -3
  218. package/dist/esm/providers/llm/adapters/openai/index.js +2 -0
  219. package/dist/esm/providers/llm/adapters/openai/index.js.map +7 -0
  220. package/dist/esm/providers/llm/adapters/openai/openai.js +2 -0
  221. package/dist/esm/providers/llm/adapters/openai/openai.js.map +7 -0
  222. package/dist/esm/providers/llm/adapters/openai-compatible.js +10 -0
  223. package/dist/esm/providers/llm/adapters/openai-compatible.js.map +7 -0
  224. package/dist/esm/providers/llm/adapters/openrouter/index.js +2 -0
  225. package/dist/esm/providers/llm/adapters/openrouter/index.js.map +7 -0
  226. package/dist/esm/providers/llm/adapters/openrouter/openrouter.js +2 -0
  227. package/dist/esm/providers/llm/adapters/openrouter/openrouter.js.map +7 -0
  228. package/dist/esm/providers/llm/index.js +1 -1
  229. package/dist/esm/providers/llm/index.js.map +3 -3
  230. package/dist/esm/providers/llm/toolmode/index.js +2 -0
  231. package/dist/esm/providers/llm/toolmode/index.js.map +7 -0
  232. package/dist/esm/providers/llm/toolmode/toolmode.js +2 -0
  233. package/dist/esm/providers/llm/toolmode/toolmode.js.map +7 -0
  234. package/dist/esm/providers/llm/types.js +1 -0
  235. package/dist/esm/providers/llm/types.js.map +4 -4
  236. package/dist/esm/providers/stt/adapters/deepgram/deepgram.js +1 -1
  237. package/dist/esm/providers/stt/adapters/deepgram/deepgram.js.map +3 -3
  238. package/dist/esm/providers/stt/adapters/index.js +1 -1
  239. package/dist/esm/providers/stt/adapters/index.js.map +3 -3
  240. package/dist/esm/providers/stt/adapters/openrouter/index.js +2 -0
  241. package/dist/esm/providers/stt/adapters/openrouter/index.js.map +7 -0
  242. package/dist/esm/providers/stt/adapters/openrouter/openrouter.js +2 -0
  243. package/dist/esm/providers/stt/adapters/openrouter/openrouter.js.map +7 -0
  244. package/dist/esm/providers/tts/adapters/index.js +1 -1
  245. package/dist/esm/providers/tts/adapters/index.js.map +3 -3
  246. package/dist/esm/providers/tts/adapters/kokoro/kokoro.js +4 -1
  247. package/dist/esm/providers/tts/adapters/kokoro/kokoro.js.map +3 -3
  248. package/dist/esm/providers/tts/adapters/openrouter/index.js +2 -0
  249. package/dist/esm/providers/tts/adapters/openrouter/index.js.map +7 -0
  250. package/dist/esm/providers/tts/adapters/openrouter/openrouter.js +2 -0
  251. package/dist/esm/providers/tts/adapters/openrouter/openrouter.js.map +7 -0
  252. package/dist/esm/transport/streamobject/field-stream/field-stream.js +2 -0
  253. package/dist/esm/transport/streamobject/field-stream/field-stream.js.map +7 -0
  254. package/dist/esm/transport/streamobject/field-stream/index.js +2 -0
  255. package/dist/esm/transport/streamobject/field-stream/index.js.map +7 -0
  256. package/dist/esm/transport/streamobject/index.js +2 -0
  257. package/dist/esm/transport/streamobject/index.js.map +7 -0
  258. package/dist/esm/transport/streamobject/json-adapter/index.js +2 -0
  259. package/dist/esm/transport/streamobject/json-adapter/index.js.map +7 -0
  260. package/dist/esm/transport/streamobject/json-adapter/json-adapter.js +4 -0
  261. package/dist/esm/transport/streamobject/json-adapter/json-adapter.js.map +7 -0
  262. package/dist/esm/transport/streamobject/reference/index.js +2 -0
  263. package/dist/esm/transport/streamobject/reference/index.js.map +7 -0
  264. package/dist/esm/transport/streamobject/reference/reference.js +2 -0
  265. package/dist/esm/transport/streamobject/reference/reference.js.map +7 -0
  266. package/dist/esm/transport/streamobject/stream-object/index.js +2 -0
  267. package/dist/esm/transport/streamobject/stream-object/index.js.map +7 -0
  268. package/dist/esm/transport/streamobject/stream-object/stream-object.js +2 -0
  269. package/dist/esm/transport/streamobject/stream-object/stream-object.js.map +7 -0
  270. package/dist/types/agents/agent.d.ts +3 -0
  271. package/dist/types/agents/tools/tools.d.ts +28 -6
  272. package/dist/types/client/client.d.ts +186 -0
  273. package/dist/types/client/index.d.ts +31 -0
  274. package/dist/types/client/json.d.ts +13 -0
  275. package/dist/types/client/protocol/websocket.d.ts +56 -0
  276. package/dist/types/client/protocol.d.ts +46 -0
  277. package/dist/types/conversations/conversation/conversation.d.ts +130 -6
  278. package/dist/types/conversations/conversations.d.ts +35 -1
  279. package/dist/types/conversations/index.d.ts +2 -1
  280. package/dist/types/conversations/orchestration/coordination/coordination.d.ts +192 -0
  281. package/dist/types/conversations/orchestration/coordination/index.d.ts +2 -0
  282. package/dist/types/conversations/orchestration/orchestrator/coordination-runner/coordination-runner.d.ts +108 -0
  283. package/dist/types/conversations/orchestration/orchestrator/coordination-runner/index.d.ts +2 -0
  284. package/dist/types/conversations/orchestration/orchestrator/generation/generation.d.ts +60 -0
  285. package/dist/types/conversations/orchestration/orchestrator/generation/index.d.ts +2 -0
  286. package/dist/types/conversations/orchestration/orchestrator/history/history.d.ts +62 -0
  287. package/dist/types/conversations/orchestration/orchestrator/history/index.d.ts +1 -0
  288. package/dist/types/conversations/orchestration/orchestrator/index.d.ts +10 -0
  289. package/dist/types/conversations/orchestration/orchestrator/orchestrator.d.ts +68 -31
  290. package/dist/types/conversations/orchestration/orchestrator/routing/index.d.ts +1 -0
  291. package/dist/types/conversations/orchestration/orchestrator/routing/routing.d.ts +19 -0
  292. package/dist/types/conversations/orchestration/orchestrator/speech/index.d.ts +2 -0
  293. package/dist/types/conversations/orchestration/orchestrator/speech/speech.d.ts +78 -0
  294. package/dist/types/conversations/orchestration/orchestrator/tools/index.d.ts +2 -0
  295. package/dist/types/conversations/orchestration/orchestrator/tools/tools.d.ts +65 -0
  296. package/dist/types/conversations/orchestration/test-harness.d.ts +100 -0
  297. package/dist/types/conversations/orchestration/text-chunker/index.d.ts +1 -0
  298. package/dist/types/conversations/orchestration/text-chunker/text-chunker.d.ts +39 -0
  299. package/dist/types/conversations/stream/conversation-stream.d.ts +42 -0
  300. package/dist/types/conversations/stream/index.d.ts +1 -0
  301. package/dist/types/conversations/types.d.ts +32 -0
  302. package/dist/types/index.d.ts +5 -38
  303. package/dist/types/pipeflow/index.d.ts +2 -0
  304. package/dist/types/pipeflow/pipeflow.d.ts +43 -0
  305. package/dist/types/providers/index.d.ts +1 -1
  306. package/dist/types/providers/llm/adapters/claude/claude.d.ts +45 -0
  307. package/dist/types/providers/llm/adapters/claude/index.d.ts +2 -0
  308. package/dist/types/providers/llm/adapters/deepseek/deepseek.d.ts +23 -2
  309. package/dist/types/providers/llm/adapters/index.d.ts +3 -0
  310. package/dist/types/providers/llm/adapters/openai/index.d.ts +2 -0
  311. package/dist/types/providers/llm/adapters/openai/openai.d.ts +45 -0
  312. package/dist/types/providers/llm/adapters/openai-compatible.d.ts +44 -0
  313. package/dist/types/providers/llm/adapters/openrouter/index.d.ts +2 -0
  314. package/dist/types/providers/llm/adapters/openrouter/openrouter.d.ts +60 -0
  315. package/dist/types/providers/llm/index.d.ts +5 -2
  316. package/dist/types/providers/llm/toolmode/index.d.ts +2 -0
  317. package/dist/types/providers/llm/toolmode/toolmode.d.ts +99 -0
  318. package/dist/types/providers/llm/types.d.ts +65 -0
  319. package/dist/types/providers/stt/adapters/deepgram/deepgram.d.ts +4 -1
  320. package/dist/types/providers/stt/adapters/index.d.ts +1 -0
  321. package/dist/types/providers/stt/adapters/openrouter/index.d.ts +2 -0
  322. package/dist/types/providers/stt/adapters/openrouter/openrouter.d.ts +196 -0
  323. package/dist/types/providers/tts/adapters/index.d.ts +1 -0
  324. package/dist/types/providers/tts/adapters/kokoro/kokoro.d.ts +18 -3
  325. package/dist/types/providers/tts/adapters/openrouter/index.d.ts +2 -0
  326. package/dist/types/providers/tts/adapters/openrouter/openrouter.d.ts +64 -0
  327. package/dist/types/transport/streamobject/field-stream/field-stream.d.ts +85 -0
  328. package/dist/types/transport/streamobject/field-stream/index.d.ts +2 -0
  329. package/dist/types/transport/streamobject/index.d.ts +8 -0
  330. package/dist/types/transport/streamobject/json-adapter/index.d.ts +2 -0
  331. package/dist/types/transport/streamobject/json-adapter/json-adapter.d.ts +65 -0
  332. package/dist/types/transport/streamobject/reference/index.d.ts +2 -0
  333. package/dist/types/transport/streamobject/reference/reference.d.ts +127 -0
  334. package/dist/types/transport/streamobject/stream-object/index.d.ts +2 -0
  335. package/dist/types/transport/streamobject/stream-object/stream-object.d.ts +31 -0
  336. package/package.json +29 -2
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Pipeflow client SDK: talk to a Pipeflow server from a browser or Node.
3
+ */
4
+ import type { AudioChunk, ConversationId, Generation, ToolCall, ToolCallResult, Turn, UserId } from "../conversations/types.js";
5
+ import type { TranscriptEntry } from "../conversations/transcription/transcription.js";
6
+ import type { Protocol } from "./protocol.js";
7
+ /** Track constraints used when opening the mic. */
8
+ export interface CaptureConstraints {
9
+ echoCancellation?: boolean;
10
+ noiseSuppression?: boolean;
11
+ autoGainControl?: boolean;
12
+ }
13
+ /** Optional mic auto-attach on `connect()`. */
14
+ export interface AudioInputOptions {
15
+ /** Auto-attach `getUserMedia` and stream mic audio into the connection. */
16
+ input?: boolean;
17
+ /**
18
+ * Gate or rewrite captured audio before it hits the wire: return a chunk
19
+ * to send it, or `null` to drop it (a VAD gate). May be async. Chunks are
20
+ * sent as the hook resolves and their `sequence` marks capture order, so
21
+ * the server can reorder them before STT. Applies only to captured
22
+ * audio; manual `sendAudio()` calls go out untouched.
23
+ */
24
+ transform?: (chunk: AudioChunk) => AudioChunk | null | Promise<AudioChunk | null>;
25
+ /**
26
+ * Mic track constraints. Each defaults to `true`. Echo cancellation is the
27
+ * one that matters: without it the mic re-captures the agent's own reply.
28
+ */
29
+ constraints?: CaptureConstraints;
30
+ }
31
+ export interface ReconnectOptions {
32
+ /** Maximum reconnect attempts after an unexpected close. `0` disables it. */
33
+ maxAttempts?: number;
34
+ /** Initial backoff in ms; doubled each attempt up to `maxBackoffMs`. */
35
+ initialBackoffMs?: number;
36
+ /** Backoff cap in ms. */
37
+ maxBackoffMs?: number;
38
+ }
39
+ export interface PipeflowClientOptions {
40
+ /** The wire protocol. */
41
+ protocol: Protocol;
42
+ /** Audio capture options. */
43
+ audio?: AudioInputOptions;
44
+ /** Auto-reconnect on unexpected close. */
45
+ reconnect?: ReconnectOptions;
46
+ /** Default user id for `sendText()` / `sendAudio()` when not provided. */
47
+ userId?: UserId;
48
+ }
49
+ /**
50
+ * Payloads emitted by `PipeflowClient` events, mirroring `ConversationEvents`
51
+ * for the events that travel the wire.
52
+ */
53
+ export interface PipeflowClientEventMap {
54
+ start: {
55
+ conversationId: ConversationId;
56
+ };
57
+ stop: {
58
+ conversationId: ConversationId;
59
+ };
60
+ "audio-in": {
61
+ conversationId: ConversationId;
62
+ userId: UserId;
63
+ audio: AudioChunk;
64
+ };
65
+ audio: {
66
+ conversationId: ConversationId;
67
+ audio: AudioChunk;
68
+ };
69
+ "partial-transcript": {
70
+ conversationId: ConversationId;
71
+ userId: UserId;
72
+ text: string;
73
+ };
74
+ turn: {
75
+ conversationId: ConversationId;
76
+ turn: Turn;
77
+ };
78
+ transcript: {
79
+ conversationId: ConversationId;
80
+ entry: TranscriptEntry;
81
+ };
82
+ generation: {
83
+ conversationId: ConversationId;
84
+ generation: Generation;
85
+ };
86
+ "tool-call": {
87
+ conversationId: ConversationId;
88
+ call: ToolCall;
89
+ };
90
+ "tool-call-result": {
91
+ conversationId: ConversationId;
92
+ result: ToolCallResult;
93
+ };
94
+ interrupt: {
95
+ conversationId: ConversationId;
96
+ };
97
+ error: {
98
+ conversationId?: ConversationId;
99
+ error: Error;
100
+ };
101
+ state: {
102
+ conversationId: ConversationId;
103
+ state: unknown;
104
+ };
105
+ }
106
+ export type PipeflowClientEvent = keyof PipeflowClientEventMap;
107
+ export type Listener<E extends PipeflowClientEvent> = (event: PipeflowClientEventMap[E]) => void;
108
+ /**
109
+ * Typed client for a Pipeflow server: `connect()`, then events flow while
110
+ * you send text and audio, then `disconnect()`.
111
+ *
112
+ * ```ts
113
+ * const client = new PipeflowClient({
114
+ * protocol: new WebSocketProtocol({ url: "wss://…/conversations/abc" }),
115
+ * audio: { input: true },
116
+ * });
117
+ * client.on("turn", (e) => console.log(e.turn.text));
118
+ * await client.connect();
119
+ * ```
120
+ *
121
+ * Mic capture is opt-in via `audio.input`. Playback is the caller's job:
122
+ * wire the `audio` event into your own `AudioContext` or `<audio>` queue,
123
+ * or override `playAudio()`.
124
+ */
125
+ export declare class PipeflowClient {
126
+ private readonly protocol;
127
+ private readonly audio;
128
+ private readonly reconnect;
129
+ private readonly defaultUserId;
130
+ private readonly listeners;
131
+ private mediaStream;
132
+ private mediaRecorder;
133
+ private startMicPromise;
134
+ private reconnectAttempts;
135
+ private reconnectTimer;
136
+ private closedByUser;
137
+ private nextSequence;
138
+ constructor(options: PipeflowClientOptions);
139
+ /**
140
+ * Open the connection and, if `audio.input` is set, attach the mic.
141
+ * Subsequent calls are no-ops while the connection is open.
142
+ */
143
+ connect(): Promise<void>;
144
+ /** Close the connection, release the mic, and disable reconnect. */
145
+ disconnect(): Promise<void>;
146
+ /**
147
+ * Send a finalized text turn. Equivalent to `conversation.send({ userId, text })`.
148
+ */
149
+ sendText(text: string, options?: {
150
+ userId?: UserId;
151
+ }): void;
152
+ /**
153
+ * Send a raw audio chunk. `listen()` on the server is synchronous; call
154
+ * this for every chunk as it arrives. The chunk's `sequence` marks
155
+ * capture order for the server's reorder buffer.
156
+ */
157
+ sendAudio(audio: AudioChunk, options?: {
158
+ userId?: UserId;
159
+ }): void;
160
+ /** Request an interrupt on the server. */
161
+ interrupt(options?: {
162
+ conversationId?: ConversationId;
163
+ }): void;
164
+ /** Resolve a tool call when `autoExecuteTools` is off on the server. */
165
+ resolveToolCall(result: ToolCallResult, options?: {
166
+ conversationId?: ConversationId;
167
+ }): void;
168
+ /**
169
+ * No-op playback hook. Override it, or listen to `audio` directly.
170
+ */
171
+ playAudio(_audio: AudioChunk): void;
172
+ /** Subscribe to an event. Returns an unsubscribe function. */
173
+ on<E extends PipeflowClientEvent>(event: E, listener: Listener<E>): () => void;
174
+ /** Remove a previously added listener. */
175
+ off<E extends PipeflowClientEvent>(event: E, listener: Listener<E>): void;
176
+ private send;
177
+ private handleMessage;
178
+ private handleStatus;
179
+ private scheduleReconnect;
180
+ private clearReconnect;
181
+ /** Attach the mic once, even under concurrent `connect()` calls. */
182
+ private startMic;
183
+ private openMic;
184
+ private stopMic;
185
+ private emit;
186
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Browser/client SDK for talking to a Pipeflow server.
3
+ *
4
+ * The client is intentionally tiny: a typed event surface that mirrors
5
+ * `Conversation`, backed by a swappable wire protocol. It knows nothing about
6
+ * STT/LLM/TTS: it forwards your input and surfaces what comes back.
7
+ *
8
+ * ```ts
9
+ * import { PipeflowClient, WebSocketProtocol } from "@moureau/pipeflow/client";
10
+ *
11
+ * const client = new PipeflowClient({
12
+ * protocol: new WebSocketProtocol({
13
+ * url: "wss://api.example.com/conversations/abc",
14
+ * token: () => localStorage.getItem("jwt"),
15
+ * }),
16
+ * audio: { input: true },
17
+ * });
18
+ *
19
+ * client.on("transcript", (e) => render(e.entry.text));
20
+ * client.on("audio", (e) => client.playAudio(e.audio));
21
+ * await client.connect();
22
+ * await client.sendText("hello", { userId: "alice" });
23
+ * ```
24
+ *
25
+ * @packageDocumentation
26
+ */
27
+ export { PipeflowClient } from "./client.js";
28
+ export type { PipeflowClientOptions, PipeflowClientEvent, PipeflowClientEventMap, Listener, ReconnectOptions, AudioInputOptions, CaptureConstraints, } from "./client.js";
29
+ export type { Protocol, ProtocolStatus, ProtocolMessage, ProtocolListener, StatusListener, } from "./protocol.js";
30
+ export { WebSocketProtocol } from "./protocol/websocket.js";
31
+ export type { WebSocketProtocolOptions, TokenProvider, } from "./protocol/websocket.js";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Minimal JSON value guard for outbound messages.
3
+ *
4
+ * Kept narrow on purpose: server payloads carry domain types (turns,
5
+ * transcripts, audio chunks) that aren't structurally typed as JSON values,
6
+ * so the wire uses `unknown`. Outbound payloads, however, must serialize;
7
+ * this guard catches values that JSON.stringify would silently drop
8
+ * (functions, `undefined`, `bigint`).
9
+ */
10
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
11
+ [key: string]: JsonValue;
12
+ };
13
+ export declare function isJsonSerializable(value: unknown): boolean;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * WebSocket-backed implementation of the `Protocol` contract.
3
+ *
4
+ * The URL, auth token, and subprotocols are passed through to the underlying
5
+ * `WebSocket`. The token is resolved lazily on each `connect()` and appended
6
+ * to the URL as a `token` query parameter so the server can authenticate the
7
+ * upgrade (WebSocket has no `Authorization` header mechanism).
8
+ *
9
+ * ```ts
10
+ * const protocol = new WebSocketProtocol({
11
+ * url: "wss://api.example.com/conversations/abc",
12
+ * token: () => localStorage.getItem("jwt"),
13
+ * });
14
+ * ```
15
+ */
16
+ import type { Protocol, ProtocolListener, ProtocolMessage, ProtocolStatus, StatusListener } from "../protocol.js";
17
+ /**
18
+ * Resolves the connection token. Called on every `connect()` so the caller
19
+ * can rotate credentials without rebuilding the client. The resolved value
20
+ * is appended to the URL as `?token=…` (overwriting any existing value).
21
+ */
22
+ export type TokenProvider = () => string | null | Promise<string | null>;
23
+ export interface WebSocketProtocolOptions {
24
+ /** Fully-qualified WebSocket URL, e.g. `wss://api.example.com/conversations/abc`. */
25
+ url: string;
26
+ /** Optional token resolver; the resolved value is appended as `?token=…`. */
27
+ token?: TokenProvider;
28
+ /** Subprotocols passed to the WebSocket constructor. */
29
+ protocols?: string | string[];
30
+ /**
31
+ * Inject a custom WebSocket constructor (for tests, polyfills, or tracing).
32
+ * Defaults to the global `WebSocket`.
33
+ */
34
+ socketFactory?: (url: string, protocols?: string | string[]) => WebSocket;
35
+ }
36
+ export declare class WebSocketProtocol implements Protocol {
37
+ readonly url: string;
38
+ private readonly token?;
39
+ private readonly protocols?;
40
+ private readonly socketFactory;
41
+ private socket;
42
+ private _status;
43
+ private readonly messageListeners;
44
+ private readonly statusListeners;
45
+ constructor(options: WebSocketProtocolOptions);
46
+ get status(): ProtocolStatus;
47
+ connect(): Promise<void>;
48
+ close(): Promise<void>;
49
+ send(message: ProtocolMessage): void;
50
+ onMessage(listener: ProtocolListener): () => void;
51
+ onStatus(listener: StatusListener): () => void;
52
+ private readonly handleMessage;
53
+ private readonly handleClose;
54
+ private teardownSocket;
55
+ private setStatus;
56
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Wire-level contract between a `PipeflowClient` and a Pipeflow server.
3
+ *
4
+ * A `Protocol` is responsible only for transport: it opens a connection,
5
+ * delivers `ProtocolMessage`s, and reports its status. The client sits on
6
+ * top and turns those messages into typed events.
7
+ *
8
+ * Swap protocols to change the wire (WebSocket today; SSE, HTTP, or an
9
+ * in-memory pair for tests tomorrow) without touching application code.
10
+ */
11
+ /** Lifecycle status of a protocol connection. */
12
+ export type ProtocolStatus = "idle" | "connecting" | "open" | "closing" | "closed";
13
+ /**
14
+ * A message exchanged over a `Protocol`. Symmetric: both sides send and
15
+ * receive. `payload` is intentionally `unknown`: payloads are JSON-shaped
16
+ * server domain types (turns, transcripts, audio chunks, …) that the client
17
+ * decodes against its event map at the boundary.
18
+ */
19
+ export interface ProtocolMessage {
20
+ type: string;
21
+ payload: unknown;
22
+ }
23
+ export type ProtocolListener = (message: ProtocolMessage) => void;
24
+ export type StatusListener = (status: ProtocolStatus) => void;
25
+ /**
26
+ * A bidirectional wire between a Pipeflow client and server.
27
+ *
28
+ * Implementations must be safe to subscribe to before `connect()`: messages
29
+ * received before the listener is attached are buffered or dropped per the
30
+ * implementation's policy, and a listener attached after `connect()` only sees
31
+ * subsequent messages. This mirrors the WebSocket contract.
32
+ */
33
+ export interface Protocol {
34
+ /** Current lifecycle status. */
35
+ readonly status: ProtocolStatus;
36
+ /** Open the underlying connection. Idempotent: a second call is a no-op. */
37
+ connect(): Promise<void>;
38
+ /** Close the connection. Safe to call from any state. */
39
+ close(): Promise<void>;
40
+ /** Send a message. Throws if the connection is not `open`. */
41
+ send(message: ProtocolMessage): void;
42
+ /** Subscribe to incoming messages. Returns an unsubscribe function. */
43
+ onMessage(listener: ProtocolListener): () => void;
44
+ /** Subscribe to status transitions. Returns an unsubscribe function. */
45
+ onStatus(listener: StatusListener): () => void;
46
+ }
@@ -1,12 +1,45 @@
1
1
  import type { Agent } from "../../agents/agent.js";
2
2
  import type { Persistence } from "../../persistence/persistence.js";
3
+ import type { STT } from "../../providers/stt/types.js";
4
+ import type { TTS } from "../../providers/tts/types.js";
3
5
  import type { AudioChunk, ConversationId, ConversationState, ConversationStatus, Generation, Participant, ParticipantInput, Turn, UserId } from "../types.js";
4
6
  import { Transcription, type TranscriptEntry, type TranscriptEntryInput } from "../transcription/transcription.js";
5
7
  import type { ToolCall, ToolCallResult } from "../types.js";
8
+ /** Timing points a generation can record, keyed by the stream event. */
9
+ type TimingPoint = "firstToken" | "firstTtsText" | "firstTtsRequest" | "firstTtsAudio";
6
10
  export interface ConversationOptions {
7
11
  id: ConversationId;
8
12
  agents?: Agent[];
9
13
  persistence?: Persistence;
14
+ /**
15
+ * STT provider used to attach realtime processing automatically on
16
+ * `start()`.
17
+ */
18
+ stt?: STT;
19
+ tts?: TTS;
20
+ /**
21
+ * Execute the agents' tools automatically (default `true`), feeding each
22
+ * tool's result back into the model loop. Set `false` to resolve tool
23
+ * calls from your own backend via `resolveToolCall()`.
24
+ */
25
+ autoExecuteTools?: boolean;
26
+ /**
27
+ * TTS synthesis concurrency (default 2): more in-flight requests let a
28
+ * multi-sentence reply synthesize in parallel, removing the gaps between
29
+ * sentences, at the cost of provider concurrency. See
30
+ * `SpeechPipelineOptions.maxConcurrentRequests`.
31
+ */
32
+ maxConcurrentTtsRequests?: number;
33
+ /**
34
+ * Hold window (ms) for out-of-order audio (default 100). When `listen()`
35
+ * receives a chunk whose `sequence` skips ahead of the expected one, the
36
+ * chunk is held briefly so a packet still in flight can fill the gap —
37
+ * netcode-style reordering, like client-side prediction in multiplayer
38
+ * games. When the window expires the gap is skipped and the buffered
39
+ * chunks are released in order. In-order audio (the common case) is
40
+ * emitted immediately, with no added latency.
41
+ */
42
+ audioReorderMs?: number;
10
43
  }
11
44
  export interface ConversationEvents {
12
45
  start: {
@@ -25,6 +58,12 @@ export interface ConversationEvents {
25
58
  userId: UserId;
26
59
  audio: AudioChunk;
27
60
  };
61
+ /** A finalized text turn via `send()`. Consumed by the orchestrator. */
62
+ "text-in": {
63
+ conversationId: ConversationId;
64
+ userId: UserId;
65
+ text: string;
66
+ };
28
67
  /** Generated audio to be played by the application. */
29
68
  audio: {
30
69
  conversationId: ConversationId;
@@ -42,6 +81,20 @@ export interface ConversationEvents {
42
81
  conversationId: ConversationId;
43
82
  generation: Generation;
44
83
  };
84
+ /**
85
+ * The current generation's text, streamed as LLM deltas arrive. Emitted by
86
+ * the orchestrator; the agent name is included when the generation is known.
87
+ */
88
+ "text-delta": {
89
+ conversationId: ConversationId;
90
+ text: string;
91
+ agentName?: string;
92
+ };
93
+ /** The current (top-level) generation finished generating. */
94
+ "generation-complete": {
95
+ conversationId: ConversationId;
96
+ generation: Generation;
97
+ };
45
98
  /** Live STT partials, for captions and fast UX. Not persisted. */
46
99
  "partial-transcript": {
47
100
  conversationId: ConversationId;
@@ -75,10 +128,11 @@ export interface ConversationEvents {
75
128
  * The public realtime conversation API.
76
129
  *
77
130
  * A `Conversation` is a runtime handle to a persistent conversation:
78
- * lifecycle (`start`/`stop`), participants, audio intake (`listen`), and
79
- * events. The orchestrator (added later) subscribes to `audio-in` and
80
- * pushes generated audio, turns, transcripts, and tool calls back through
81
- * the `push*`/`requestToolCall` methods.
131
+ * lifecycle (`start`/`stop`), participants, audio intake (`listen`), text
132
+ * turns (`send`), and events. When an STT provider or agents are configured,
133
+ * `start()` automatically attaches the orchestrator, which runs the
134
+ * STT/LLM/TTS pipeline (or routes text turns) and pushes generated audio,
135
+ * turns, transcripts, and tool calls back through conversation events.
82
136
  */
83
137
  export declare class Conversation {
84
138
  readonly id: ConversationId;
@@ -86,24 +140,69 @@ export declare class Conversation {
86
140
  readonly transcription: Transcription;
87
141
  readonly state: ConversationState;
88
142
  private readonly persistence;
143
+ private readonly stt;
144
+ private readonly tts;
145
+ private readonly autoExecuteTools;
146
+ private readonly maxConcurrentTtsRequests;
89
147
  private readonly listeners;
90
148
  private readonly pendingToolCallsById;
149
+ private readonly subGenerations;
150
+ private readonly audioReorderMs;
151
+ private readonly audioReorder;
91
152
  private nextAudioSequence;
92
153
  constructor(options: ConversationOptions);
93
154
  get status(): ConversationStatus;
94
155
  get participants(): Participant[];
95
- start(): void;
156
+ /**
157
+ * Move the conversation into the started state. This attaches the
158
+ * orchestrator whenever there is realtime work: an STT provider (voice
159
+ * pipeline) or agents to route text turns to (`send()`).
160
+ */
161
+ start(): Promise<void>;
96
162
  stop(): Promise<void>;
97
163
  participate(input: ParticipantInput | ParticipantInput[]): Promise<Participant[]>;
98
164
  /**
99
165
  * Send an audio packet. Intentionally synchronous: it means "send this
100
166
  * packet", not "wait for this utterance to finish".
167
+ *
168
+ * Pass the sender's `sequence` number to enable netcode-style reordering:
169
+ * chunks arriving ahead of a gap are held for `audioReorderMs` so an
170
+ * earlier packet still in flight can fill it, then released in order
171
+ * (gaps are skipped when the window expires). The orchestrator and STT
172
+ * always see the participant's audio in sequence order. Without a
173
+ * `sequence`, the chunk is emitted on arrival, as-is.
101
174
  */
102
175
  listen(input: {
103
176
  userId: UserId;
104
177
  audio: Uint8Array;
178
+ sequence?: number;
179
+ }): void;
180
+ /** Emit an audio-in event with the conversation's own sequence numbering. */
181
+ private emitAudioIn;
182
+ /** Hold/drain logic for sequenced audio, keyed per participant. */
183
+ private reorderAudio;
184
+ /**
185
+ * Release everything a participant has buffered, in sequence order,
186
+ * skipping the gap that never filled.
187
+ */
188
+ private releaseReorderBuffer;
189
+ private clearReorderTimer;
190
+ /**
191
+ * Send a finalized text turn, bypassing STT. Triggers the same pipeline as
192
+ * a transcribed utterance (routing, coordination, generation, resume) —
193
+ * useful for text-first integrations such as chat or Discord text channels.
194
+ */
195
+ send(input: {
196
+ userId: UserId;
197
+ text: string;
105
198
  }): void;
106
- /** Interrupt the current agent output (stop TTS, cancel the generation). */
199
+ /**
200
+ * Stop the currently active generation and prevent any further generated
201
+ * audio from reaching the conversation. The orchestrator cancels the LLM
202
+ * and TTS streams, force-resolves pending tool calls, and discards queued
203
+ * audio; the next participant turn starts fresh. Interrupt responsiveness
204
+ * is a tested invariant — audio stops within ~100ms of this call.
205
+ */
107
206
  interrupt(): void;
108
207
  on<K extends keyof ConversationEvents>(event: K, listener: (payload: ConversationEvents[K]) => void): () => void;
109
208
  /**
@@ -117,8 +216,20 @@ export declare class Conversation {
117
216
  pushTurn(turn: Turn): Promise<void>;
118
217
  /** Append a transcript entry and notify listeners. */
119
218
  pushTranscript(input: Omit<TranscriptEntryInput, "conversationId">): Promise<TranscriptEntry>;
219
+ /**
220
+ * Stream the current generation's text, as produced by the orchestrator
221
+ * from LLM deltas. Emits the `text-delta` event so applications can render
222
+ * or act on partial replies.
223
+ */
224
+ pushTextDelta(text: string): void;
120
225
  /** Push an agent generation into the conversation. */
121
226
  pushGeneration(generation: Generation): Promise<void>;
227
+ /**
228
+ * Record a timing point on a generation. Without an id this targets the
229
+ * current generation; with one, a dispatched sub-generation. Each point is
230
+ * recorded at most once.
231
+ */
232
+ noteTiming(point: TimingPoint, generationId?: string): void;
122
233
  /** Tool calls requested by the model that are awaiting resolution. */
123
234
  get pendingToolCalls(): ToolCall[];
124
235
  /**
@@ -131,8 +242,21 @@ export declare class Conversation {
131
242
  resolveToolCall(result: ToolCallResult): void;
132
243
  /** Mark the current generation as completed, recording its final text. */
133
244
  completeGeneration(text?: string): Promise<void>;
245
+ /**
246
+ * Push a sub-generation: a task the coordinator dispatched to another
247
+ * agent. Unlike `pushGeneration`, it does not become the conversation's
248
+ * current generation, so parallel tasks don't clobber the coordinator's
249
+ * own in-flight generation.
250
+ */
251
+ pushSubGeneration(generation: Generation): Promise<void>;
252
+ /** Mark a dispatched sub-generation as completed with its final text. */
253
+ completeSubGeneration(id: string, text?: string): Promise<void>;
254
+ /** Mark a dispatched sub-generation as cancelled (e.g. barge-in). */
255
+ cancelSubGeneration(id: string): Promise<void>;
134
256
  /** The live in-memory transcript. */
135
257
  transcript(): TranscriptEntry[];
136
258
  private cancelCurrentGeneration;
259
+ private buildRealtime;
137
260
  private emitState;
138
261
  }
262
+ export {};
@@ -1,10 +1,41 @@
1
1
  import type { Agent } from "../agents/agent.js";
2
2
  import type { Persistence } from "../persistence/persistence.js";
3
+ import type { STT } from "../providers/stt/types.js";
4
+ import type { TTS } from "../providers/tts/types.js";
3
5
  import type { ConversationId } from "./types.js";
4
6
  import type { TranscriptEntry } from "./transcription/transcription.js";
5
7
  import { Conversation } from "./conversation/conversation.js";
6
8
  export interface CreateConversationOptions {
7
9
  agents?: Agent[];
10
+ /**
11
+ * Execute the agents' tools automatically (default `true`). Set `false`
12
+ * for this conversation to resolve tool calls from your own backend via
13
+ * `resolveToolCall()`. Overrides the `Conversations`-level default.
14
+ */
15
+ autoExecuteTools?: boolean;
16
+ /**
17
+ * TTS synthesis concurrency (default 2). More in-flight requests let a
18
+ * multi-sentence reply synthesize in parallel, removing the gaps between
19
+ * sentences, at the cost of provider concurrency — some free TTS variants
20
+ * rate-limit concurrent requests.
21
+ */
22
+ maxConcurrentTtsRequests?: number;
23
+ /**
24
+ * Hold window (ms) for out-of-order audio (default 100). See
25
+ * `ConversationOptions.audioReorderMs`.
26
+ */
27
+ audioReorderMs?: number;
28
+ }
29
+ export interface ConversationsOptions {
30
+ persistence: Persistence;
31
+ /** Passed to conversations so `start()` can attach realtime processing. */
32
+ stt?: STT;
33
+ tts?: TTS;
34
+ /**
35
+ * Default for created conversations: auto-execute the agents' tools
36
+ * (default `true`). See `CreateConversationOptions.autoExecuteTools`.
37
+ */
38
+ autoExecuteTools?: boolean;
8
39
  }
9
40
  /**
10
41
  * The conversations API surface of a Pipeflow instance: create persistent
@@ -12,7 +43,10 @@ export interface CreateConversationOptions {
12
43
  */
13
44
  export declare class Conversations {
14
45
  private readonly persistence;
15
- constructor(persistence: Persistence);
46
+ private readonly stt;
47
+ private readonly tts;
48
+ private readonly autoExecuteTools;
49
+ constructor(options: ConversationsOptions);
16
50
  /** Create a persistent conversation. Realtime execution is separate. */
17
51
  create(options?: CreateConversationOptions): Promise<Conversation>;
18
52
  /** Retrieve the persisted transcript of a conversation. */
@@ -1,4 +1,4 @@
1
- export type { AudioChunk, ConversationId, ConversationState, ConversationStatus, Generation, GenerationStatus, Participant, ParticipantInput, ToolCall, ToolCallResult, Turn, TurnId, UserId, } from "./types.js";
1
+ export type { AudioChunk, ConversationId, ConversationState, ConversationStatus, Generation, GenerationStatus, GenerationTiming, Participant, ParticipantInput, ToolCall, ToolCallResult, Turn, TurnId, UserId, } from "./types.js";
2
2
  export { createConversationState } from "./types.js";
3
3
  export { Conversation } from "./conversation/index.js";
4
4
  export type { ConversationEvents, ConversationOptions, } from "./conversation/index.js";
@@ -6,5 +6,6 @@ export { Conversations } from "./conversations.js";
6
6
  export type { CreateConversationOptions } from "./conversations.js";
7
7
  export { Orchestrator } from "./orchestration/orchestrator/index.js";
8
8
  export type { OrchestratorOptions } from "./orchestration/orchestrator/index.js";
9
+ export { ConversationStream } from "./stream/index.js";
9
10
  export { Transcription, TranscriptEntry } from "./transcription/index.js";
10
11
  export type { TranscriptEntryInput, TranscriptSpeakerKind, } from "./transcription/index.js";