@moureau/pipeflow 0.0.1

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 (219) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +833 -0
  3. package/dist/cjs/agents/agent.js +2 -0
  4. package/dist/cjs/agents/agent.js.map +7 -0
  5. package/dist/cjs/agents/index.js +2 -0
  6. package/dist/cjs/agents/index.js.map +7 -0
  7. package/dist/cjs/agents/tools/index.js +2 -0
  8. package/dist/cjs/agents/tools/index.js.map +7 -0
  9. package/dist/cjs/agents/tools/tools.js +2 -0
  10. package/dist/cjs/agents/tools/tools.js.map +7 -0
  11. package/dist/cjs/conversations/conversation/conversation.js +2 -0
  12. package/dist/cjs/conversations/conversation/conversation.js.map +7 -0
  13. package/dist/cjs/conversations/conversation/index.js +2 -0
  14. package/dist/cjs/conversations/conversation/index.js.map +7 -0
  15. package/dist/cjs/conversations/conversations.js +2 -0
  16. package/dist/cjs/conversations/conversations.js.map +7 -0
  17. package/dist/cjs/conversations/index.js +2 -0
  18. package/dist/cjs/conversations/index.js.map +7 -0
  19. package/dist/cjs/conversations/orchestration/orchestrator/index.js +2 -0
  20. package/dist/cjs/conversations/orchestration/orchestrator/index.js.map +7 -0
  21. package/dist/cjs/conversations/orchestration/orchestrator/orchestrator.js +3 -0
  22. package/dist/cjs/conversations/orchestration/orchestrator/orchestrator.js.map +7 -0
  23. package/dist/cjs/conversations/transcription/index.js +2 -0
  24. package/dist/cjs/conversations/transcription/index.js.map +7 -0
  25. package/dist/cjs/conversations/transcription/transcription.js +2 -0
  26. package/dist/cjs/conversations/transcription/transcription.js.map +7 -0
  27. package/dist/cjs/conversations/types.js +2 -0
  28. package/dist/cjs/conversations/types.js.map +7 -0
  29. package/dist/cjs/index.js +2 -0
  30. package/dist/cjs/index.js.map +7 -0
  31. package/dist/cjs/package.json +3 -0
  32. package/dist/cjs/persistence/adapters/index.js +2 -0
  33. package/dist/cjs/persistence/adapters/index.js.map +7 -0
  34. package/dist/cjs/persistence/adapters/memory/index.js +2 -0
  35. package/dist/cjs/persistence/adapters/memory/index.js.map +7 -0
  36. package/dist/cjs/persistence/adapters/memory/memory.js +2 -0
  37. package/dist/cjs/persistence/adapters/memory/memory.js.map +7 -0
  38. package/dist/cjs/persistence/adapters/sqlite/index.js +2 -0
  39. package/dist/cjs/persistence/adapters/sqlite/index.js.map +7 -0
  40. package/dist/cjs/persistence/adapters/sqlite/sqlite.js +58 -0
  41. package/dist/cjs/persistence/adapters/sqlite/sqlite.js.map +7 -0
  42. package/dist/cjs/persistence/index.js +2 -0
  43. package/dist/cjs/persistence/index.js.map +7 -0
  44. package/dist/cjs/persistence/persistence.js +2 -0
  45. package/dist/cjs/persistence/persistence.js.map +7 -0
  46. package/dist/cjs/providers/index.js +2 -0
  47. package/dist/cjs/providers/index.js.map +7 -0
  48. package/dist/cjs/providers/llm/adapters/deepseek/deepseek.js +2 -0
  49. package/dist/cjs/providers/llm/adapters/deepseek/deepseek.js.map +7 -0
  50. package/dist/cjs/providers/llm/adapters/deepseek/index.js +2 -0
  51. package/dist/cjs/providers/llm/adapters/deepseek/index.js.map +7 -0
  52. package/dist/cjs/providers/llm/adapters/index.js +2 -0
  53. package/dist/cjs/providers/llm/adapters/index.js.map +7 -0
  54. package/dist/cjs/providers/llm/index.js +2 -0
  55. package/dist/cjs/providers/llm/index.js.map +7 -0
  56. package/dist/cjs/providers/llm/types.js +2 -0
  57. package/dist/cjs/providers/llm/types.js.map +7 -0
  58. package/dist/cjs/providers/shared.js +2 -0
  59. package/dist/cjs/providers/shared.js.map +7 -0
  60. package/dist/cjs/providers/stt/adapters/deepgram/deepgram.js +2 -0
  61. package/dist/cjs/providers/stt/adapters/deepgram/deepgram.js.map +7 -0
  62. package/dist/cjs/providers/stt/adapters/deepgram/index.js +2 -0
  63. package/dist/cjs/providers/stt/adapters/deepgram/index.js.map +7 -0
  64. package/dist/cjs/providers/stt/adapters/index.js +2 -0
  65. package/dist/cjs/providers/stt/adapters/index.js.map +7 -0
  66. package/dist/cjs/providers/stt/index.js +2 -0
  67. package/dist/cjs/providers/stt/index.js.map +7 -0
  68. package/dist/cjs/providers/stt/types.js +2 -0
  69. package/dist/cjs/providers/stt/types.js.map +7 -0
  70. package/dist/cjs/providers/tts/adapters/index.js +2 -0
  71. package/dist/cjs/providers/tts/adapters/index.js.map +7 -0
  72. package/dist/cjs/providers/tts/adapters/kokoro/index.js +2 -0
  73. package/dist/cjs/providers/tts/adapters/kokoro/index.js.map +7 -0
  74. package/dist/cjs/providers/tts/adapters/kokoro/kokoro.js +2 -0
  75. package/dist/cjs/providers/tts/adapters/kokoro/kokoro.js.map +7 -0
  76. package/dist/cjs/providers/tts/index.js +2 -0
  77. package/dist/cjs/providers/tts/index.js.map +7 -0
  78. package/dist/cjs/providers/tts/types.js +2 -0
  79. package/dist/cjs/providers/tts/types.js.map +7 -0
  80. package/dist/cjs/transport/adapters/index.js +2 -0
  81. package/dist/cjs/transport/adapters/index.js.map +7 -0
  82. package/dist/cjs/transport/adapters/memory/index.js +2 -0
  83. package/dist/cjs/transport/adapters/memory/index.js.map +7 -0
  84. package/dist/cjs/transport/adapters/memory/memory.js +2 -0
  85. package/dist/cjs/transport/adapters/memory/memory.js.map +7 -0
  86. package/dist/cjs/transport/index.js +2 -0
  87. package/dist/cjs/transport/index.js.map +7 -0
  88. package/dist/cjs/transport/types.js +2 -0
  89. package/dist/cjs/transport/types.js.map +7 -0
  90. package/dist/esm/agents/agent.js +2 -0
  91. package/dist/esm/agents/agent.js.map +7 -0
  92. package/dist/esm/agents/index.js +2 -0
  93. package/dist/esm/agents/index.js.map +7 -0
  94. package/dist/esm/agents/tools/index.js +2 -0
  95. package/dist/esm/agents/tools/index.js.map +7 -0
  96. package/dist/esm/agents/tools/tools.js +2 -0
  97. package/dist/esm/agents/tools/tools.js.map +7 -0
  98. package/dist/esm/conversations/conversation/conversation.js +2 -0
  99. package/dist/esm/conversations/conversation/conversation.js.map +7 -0
  100. package/dist/esm/conversations/conversation/index.js +2 -0
  101. package/dist/esm/conversations/conversation/index.js.map +7 -0
  102. package/dist/esm/conversations/conversations.js +2 -0
  103. package/dist/esm/conversations/conversations.js.map +7 -0
  104. package/dist/esm/conversations/index.js +2 -0
  105. package/dist/esm/conversations/index.js.map +7 -0
  106. package/dist/esm/conversations/orchestration/orchestrator/index.js +2 -0
  107. package/dist/esm/conversations/orchestration/orchestrator/index.js.map +7 -0
  108. package/dist/esm/conversations/orchestration/orchestrator/orchestrator.js +3 -0
  109. package/dist/esm/conversations/orchestration/orchestrator/orchestrator.js.map +7 -0
  110. package/dist/esm/conversations/transcription/index.js +2 -0
  111. package/dist/esm/conversations/transcription/index.js.map +7 -0
  112. package/dist/esm/conversations/transcription/transcription.js +2 -0
  113. package/dist/esm/conversations/transcription/transcription.js.map +7 -0
  114. package/dist/esm/conversations/types.js +2 -0
  115. package/dist/esm/conversations/types.js.map +7 -0
  116. package/dist/esm/index.js +2 -0
  117. package/dist/esm/index.js.map +7 -0
  118. package/dist/esm/persistence/adapters/index.js +2 -0
  119. package/dist/esm/persistence/adapters/index.js.map +7 -0
  120. package/dist/esm/persistence/adapters/memory/index.js +2 -0
  121. package/dist/esm/persistence/adapters/memory/index.js.map +7 -0
  122. package/dist/esm/persistence/adapters/memory/memory.js +2 -0
  123. package/dist/esm/persistence/adapters/memory/memory.js.map +7 -0
  124. package/dist/esm/persistence/adapters/sqlite/index.js +2 -0
  125. package/dist/esm/persistence/adapters/sqlite/index.js.map +7 -0
  126. package/dist/esm/persistence/adapters/sqlite/sqlite.js +58 -0
  127. package/dist/esm/persistence/adapters/sqlite/sqlite.js.map +7 -0
  128. package/dist/esm/persistence/index.js +2 -0
  129. package/dist/esm/persistence/index.js.map +7 -0
  130. package/dist/esm/persistence/persistence.js +1 -0
  131. package/dist/esm/persistence/persistence.js.map +7 -0
  132. package/dist/esm/providers/index.js +2 -0
  133. package/dist/esm/providers/index.js.map +7 -0
  134. package/dist/esm/providers/llm/adapters/deepseek/deepseek.js +2 -0
  135. package/dist/esm/providers/llm/adapters/deepseek/deepseek.js.map +7 -0
  136. package/dist/esm/providers/llm/adapters/deepseek/index.js +2 -0
  137. package/dist/esm/providers/llm/adapters/deepseek/index.js.map +7 -0
  138. package/dist/esm/providers/llm/adapters/index.js +2 -0
  139. package/dist/esm/providers/llm/adapters/index.js.map +7 -0
  140. package/dist/esm/providers/llm/index.js +2 -0
  141. package/dist/esm/providers/llm/index.js.map +7 -0
  142. package/dist/esm/providers/llm/types.js +1 -0
  143. package/dist/esm/providers/llm/types.js.map +7 -0
  144. package/dist/esm/providers/shared.js +1 -0
  145. package/dist/esm/providers/shared.js.map +7 -0
  146. package/dist/esm/providers/stt/adapters/deepgram/deepgram.js +2 -0
  147. package/dist/esm/providers/stt/adapters/deepgram/deepgram.js.map +7 -0
  148. package/dist/esm/providers/stt/adapters/deepgram/index.js +2 -0
  149. package/dist/esm/providers/stt/adapters/deepgram/index.js.map +7 -0
  150. package/dist/esm/providers/stt/adapters/index.js +2 -0
  151. package/dist/esm/providers/stt/adapters/index.js.map +7 -0
  152. package/dist/esm/providers/stt/index.js +2 -0
  153. package/dist/esm/providers/stt/index.js.map +7 -0
  154. package/dist/esm/providers/stt/types.js +1 -0
  155. package/dist/esm/providers/stt/types.js.map +7 -0
  156. package/dist/esm/providers/tts/adapters/index.js +2 -0
  157. package/dist/esm/providers/tts/adapters/index.js.map +7 -0
  158. package/dist/esm/providers/tts/adapters/kokoro/index.js +2 -0
  159. package/dist/esm/providers/tts/adapters/kokoro/index.js.map +7 -0
  160. package/dist/esm/providers/tts/adapters/kokoro/kokoro.js +2 -0
  161. package/dist/esm/providers/tts/adapters/kokoro/kokoro.js.map +7 -0
  162. package/dist/esm/providers/tts/index.js +2 -0
  163. package/dist/esm/providers/tts/index.js.map +7 -0
  164. package/dist/esm/providers/tts/types.js +1 -0
  165. package/dist/esm/providers/tts/types.js.map +7 -0
  166. package/dist/esm/transport/adapters/index.js +2 -0
  167. package/dist/esm/transport/adapters/index.js.map +7 -0
  168. package/dist/esm/transport/adapters/memory/index.js +2 -0
  169. package/dist/esm/transport/adapters/memory/index.js.map +7 -0
  170. package/dist/esm/transport/adapters/memory/memory.js +2 -0
  171. package/dist/esm/transport/adapters/memory/memory.js.map +7 -0
  172. package/dist/esm/transport/index.js +2 -0
  173. package/dist/esm/transport/index.js.map +7 -0
  174. package/dist/esm/transport/types.js +1 -0
  175. package/dist/esm/transport/types.js.map +7 -0
  176. package/dist/types/agents/agent.d.ts +60 -0
  177. package/dist/types/agents/index.d.ts +4 -0
  178. package/dist/types/agents/tools/index.d.ts +2 -0
  179. package/dist/types/agents/tools/tools.d.ts +22 -0
  180. package/dist/types/conversations/conversation/conversation.d.ts +138 -0
  181. package/dist/types/conversations/conversation/index.d.ts +2 -0
  182. package/dist/types/conversations/conversations.d.ts +23 -0
  183. package/dist/types/conversations/index.d.ts +10 -0
  184. package/dist/types/conversations/orchestration/orchestrator/index.d.ts +2 -0
  185. package/dist/types/conversations/orchestration/orchestrator/orchestrator.d.ts +98 -0
  186. package/dist/types/conversations/transcription/index.d.ts +2 -0
  187. package/dist/types/conversations/transcription/transcription.d.ts +59 -0
  188. package/dist/types/conversations/types.d.ts +63 -0
  189. package/dist/types/index.d.ts +45 -0
  190. package/dist/types/persistence/adapters/index.d.ts +2 -0
  191. package/dist/types/persistence/adapters/memory/index.d.ts +1 -0
  192. package/dist/types/persistence/adapters/memory/memory.d.ts +27 -0
  193. package/dist/types/persistence/adapters/sqlite/index.d.ts +2 -0
  194. package/dist/types/persistence/adapters/sqlite/sqlite.d.ts +31 -0
  195. package/dist/types/persistence/index.d.ts +2 -0
  196. package/dist/types/persistence/persistence.d.ts +38 -0
  197. package/dist/types/providers/index.d.ts +6 -0
  198. package/dist/types/providers/llm/adapters/deepseek/deepseek.d.ts +24 -0
  199. package/dist/types/providers/llm/adapters/deepseek/index.d.ts +2 -0
  200. package/dist/types/providers/llm/adapters/index.d.ts +1 -0
  201. package/dist/types/providers/llm/index.d.ts +10 -0
  202. package/dist/types/providers/llm/types.d.ts +55 -0
  203. package/dist/types/providers/shared.d.ts +8 -0
  204. package/dist/types/providers/stt/adapters/deepgram/deepgram.d.ts +57 -0
  205. package/dist/types/providers/stt/adapters/deepgram/index.d.ts +2 -0
  206. package/dist/types/providers/stt/adapters/index.d.ts +1 -0
  207. package/dist/types/providers/stt/index.d.ts +2 -0
  208. package/dist/types/providers/stt/types.d.ts +30 -0
  209. package/dist/types/providers/tts/adapters/index.d.ts +1 -0
  210. package/dist/types/providers/tts/adapters/kokoro/index.d.ts +2 -0
  211. package/dist/types/providers/tts/adapters/kokoro/kokoro.d.ts +34 -0
  212. package/dist/types/providers/tts/index.d.ts +2 -0
  213. package/dist/types/providers/tts/types.d.ts +16 -0
  214. package/dist/types/transport/adapters/index.d.ts +1 -0
  215. package/dist/types/transport/adapters/memory/index.d.ts +1 -0
  216. package/dist/types/transport/adapters/memory/memory.d.ts +20 -0
  217. package/dist/types/transport/index.d.ts +2 -0
  218. package/dist/types/transport/types.d.ts +49 -0
  219. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ var l=Object.defineProperty;var s=(t,e)=>l(t,"name",{value:e,configurable:!0});class f{static{s(this,"DeepgramSTT")}options;sessions=new Set;constructor(e){if(!e.apiKey)throw new Error("DeepgramSTT requires an apiKey");this.options=e}start(e={}){const n={...this.options,...e},r=c(n),o=n.createSocket??(d=>new WebSocket(d)),i=new p(o(r));return this.sessions.add(i),i.on("close",()=>{this.sessions.delete(i)}),i}cancel(){for(const e of[...this.sessions])e.abort()}}class p{static{s(this,"DeepgramSession")}socket;listeners=new Map;opened=!1;closed=!1;ended=!1;pendingClose={flag:!1};queued=[];endPromise;resolveEnd;constructor(e){this.socket=e,this.endPromise=new Promise(n=>{this.resolveEnd=n}),e.addEventListener("open",()=>{this.opened=!0;for(const n of this.queued)this.socket.send(a(n));this.queued.length=0,this.pendingClose.flag&&this.sendCloseStream()}),e.addEventListener("message",n=>{const r=v(n.data);if(r!==null)try{this.handleResult(JSON.parse(r))}catch{}}),e.addEventListener("error",()=>{this.emit("error",new Error("Deepgram socket error"))}),e.addEventListener("close",()=>{this.closed=!0,this.resolveEnd(),this.emit("close")})}write(e){if(this.closed)throw new Error("Deepgram session is closed");if(!this.opened){this.queued.push(e);return}this.socket.send(a(e))}async end(){if(!this.closed)return this.ended?this.endPromise:(this.ended=!0,this.opened?(this.sendCloseStream(),this.endPromise):(this.pendingClose.flag=!0,this.endPromise))}abort(){this.closed||this.socket.close()}on(e,n){let r=this.listeners.get(e);r||(r=new Set,this.listeners.set(e,r)),r.add(n)}handleResult(e){if(e.type!=="Results")return;const r=e.channel?.alternatives?.[0]?.transcript??"";r&&(e.is_final===!0?this.emit("final",r):this.emit("partial",r))}sendCloseStream(){this.socket.send(JSON.stringify({type:"CloseStream"}))}emit(e,...n){const r=this.listeners.get(e);if(r)for(const o of[...r])o(...n)}}function c(t){const e=new URLSearchParams;return e.set("model",t.model??"nova-3"),e.set("interim_results",t.interimResults??!0?"true":"false"),e.set("encoding",t.encoding??"linear16"),e.set("sample_rate",String(t.sampleRate??16e3)),e.set("punctuate","true"),t.language&&e.set("language",t.language),e.set("token",t.apiKey),`${(t.endpoint??"wss://api.deepgram.com/v1/listen").replace(/\/+$/,"")}?${e.toString()}`}s(c,"buildListenUrl");function a(t){const e=new Uint8Array(t.byteLength);return e.set(t),e.buffer}s(a,"toArrayBuffer");function v(t){return typeof t=="string"?t:t instanceof ArrayBuffer?new TextDecoder().decode(t):ArrayBuffer.isView(t)?new TextDecoder().decode(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)):null}s(v,"decodeMessage");export{f as DeepgramSTT,p as DeepgramSession};
2
+ //# sourceMappingURL=deepgram.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/providers/stt/adapters/deepgram/deepgram.ts"],
4
+ "sourcesContent": ["import type { STT, STTOptions, STTSession } from \"../../types\";\n\n/**\n * The minimal WebSocket surface used by the Deepgram adapter. Both the global\n * `WebSocket` (Bun) and test fakes satisfy this shape.\n */\nexport interface STTSocket {\n send(data: string | ArrayBuffer | ArrayBufferView): void;\n close(code?: number, reason?: string): void;\n addEventListener(\n type: string,\n listener: (event: { data?: unknown; error?: unknown }) => void,\n ): void;\n}\n\nexport interface DeepgramOptions extends STTOptions {\n apiKey: string;\n /** Defaults to `wss://api.deepgram.com/v1/listen`. */\n endpoint?: string;\n /** Injectable socket factory, mainly for tests. */\n createSocket?: (url: string) => STTSocket;\n}\n\ntype DeepgramEvent = \"partial\" | \"final\" | \"error\" | \"close\";\n\n/**\n * Deepgram streaming STT adapter (WebSocket).\n *\n * Audio written before the socket opens is queued and flushed on connect.\n * `end()` sends a `CloseStream` frame and resolves once the server closes\n * the socket.\n */\nexport class DeepgramSTT implements STT {\n private readonly options: DeepgramOptions;\n private readonly sessions = new Set<DeepgramSession>();\n\n constructor(options: DeepgramOptions) {\n if (!options.apiKey) {\n throw new Error(\"DeepgramSTT requires an apiKey\");\n }\n this.options = options;\n }\n\n start(options: STTOptions = {}): STTSession {\n const merged: DeepgramOptions = { ...this.options, ...options };\n const url = buildListenUrl(merged);\n const createSocket = merged.createSocket ?? ((target: string) => new WebSocket(target) as unknown as STTSocket);\n const session = new DeepgramSession(createSocket(url));\n this.sessions.add(session);\n session.on(\"close\", () => {\n this.sessions.delete(session);\n });\n return session;\n }\n\n cancel(): void {\n for (const session of [...this.sessions]) {\n session.abort();\n }\n }\n}\n\nexport class DeepgramSession implements STTSession {\n private readonly socket: STTSocket;\n private readonly listeners = new Map<DeepgramEvent, Set<(...args: any[]) => void>>();\n private opened = false;\n private closed = false;\n private ended = false;\n private readonly pendingClose = { flag: false };\n private readonly queued: Uint8Array[] = [];\n private readonly endPromise: Promise<void>;\n private resolveEnd!: () => void;\n\n constructor(socket: STTSocket) {\n this.socket = socket;\n this.endPromise = new Promise((resolve) => {\n this.resolveEnd = resolve;\n });\n\n socket.addEventListener(\"open\", () => {\n this.opened = true;\n for (const audio of this.queued) {\n this.socket.send(toArrayBuffer(audio));\n }\n this.queued.length = 0;\n if (this.pendingClose.flag) {\n this.sendCloseStream();\n }\n });\n\n socket.addEventListener(\"message\", (event) => {\n const text = decodeMessage(event.data);\n if (text === null) return;\n try {\n this.handleResult(JSON.parse(text));\n } catch {\n // Ignore malformed frames.\n }\n });\n\n socket.addEventListener(\"error\", () => {\n this.emit(\"error\", new Error(\"Deepgram socket error\"));\n });\n\n socket.addEventListener(\"close\", () => {\n this.closed = true;\n this.resolveEnd();\n this.emit(\"close\");\n });\n }\n\n write(audio: Uint8Array): void {\n if (this.closed) {\n throw new Error(\"Deepgram session is closed\");\n }\n if (!this.opened) {\n this.queued.push(audio);\n return;\n }\n this.socket.send(toArrayBuffer(audio));\n }\n\n async end(): Promise<void> {\n if (this.closed) return;\n if (this.ended) return this.endPromise;\n this.ended = true;\n if (!this.opened) {\n this.pendingClose.flag = true;\n return this.endPromise;\n }\n this.sendCloseStream();\n return this.endPromise;\n }\n\n /** Force-close the session without waiting for the server. */\n abort(): void {\n if (this.closed) return;\n this.socket.close();\n }\n\n on(event: \"partial\", listener: (transcript: string) => void): void;\n on(event: \"final\", listener: (transcript: string) => void): void;\n on(event: \"error\", listener: (error: Error) => void): void;\n on(event: \"close\", listener: () => void): void;\n on(event: DeepgramEvent, listener: (...args: any[]) => void): void {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(listener);\n }\n\n private handleResult(message: Record<string, unknown>): void {\n if (message.type !== \"Results\") return;\n const alternatives = (message.channel as { alternatives?: { transcript?: string }[] })\n ?.alternatives;\n const text = alternatives?.[0]?.transcript ?? \"\";\n if (!text) return;\n if (message.is_final === true) {\n this.emit(\"final\", text);\n } else {\n this.emit(\"partial\", text);\n }\n }\n\n private sendCloseStream(): void {\n this.socket.send(JSON.stringify({ type: \"CloseStream\" }));\n }\n\n private emit(event: \"partial\", arg: string): void;\n private emit(event: \"final\", arg: string): void;\n private emit(event: \"error\", arg: Error): void;\n private emit(event: \"close\"): void;\n private emit(event: DeepgramEvent, ...args: any[]): void {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const listener of [...set]) {\n listener(...args);\n }\n }\n}\n\nfunction buildListenUrl(options: DeepgramOptions): string {\n const params = new URLSearchParams();\n params.set(\"model\", options.model ?? \"nova-3\");\n params.set(\"interim_results\", (options.interimResults ?? true) ? \"true\" : \"false\");\n params.set(\"encoding\", options.encoding ?? \"linear16\");\n params.set(\"sample_rate\", String(options.sampleRate ?? 16000));\n params.set(\"punctuate\", \"true\");\n if (options.language) params.set(\"language\", options.language);\n params.set(\"token\", options.apiKey);\n\n const base = (options.endpoint ?? \"wss://api.deepgram.com/v1/listen\").replace(/\\/+$/, \"\");\n return `${base}?${params.toString()}`;\n}\n\nfunction toArrayBuffer(audio: Uint8Array): ArrayBuffer {\n // Copy so the view's backing buffer (possibly larger or shared) is not\n // sent over the socket.\n const copy = new Uint8Array(audio.byteLength);\n copy.set(audio);\n return copy.buffer;\n}\n\nfunction decodeMessage(data: unknown): string | null {\n if (typeof data === \"string\") return data;\n if (data instanceof ArrayBuffer) return new TextDecoder().decode(data);\n if (ArrayBuffer.isView(data)) {\n return new TextDecoder().decode(\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength),\n );\n }\n return null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DeepgramSTT", "__name", "options", "merged", "url", "buildListenUrl", "createSocket", "target", "session", "DeepgramSession", "socket", "resolve", "audio", "toArrayBuffer", "event", "text", "decodeMessage", "listener", "set", "message", "args", "params", "copy", "data"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{DeepgramSTT as r,DeepgramSession as o}from"./deepgram.js";export{r as DeepgramSTT,o as DeepgramSession};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/providers/stt/adapters/deepgram/index.ts"],
4
+ "sourcesContent": ["export { DeepgramSTT, DeepgramSession } from \"./deepgram\";\nexport type { DeepgramOptions, STTSocket } from \"./deepgram\";\n"],
5
+ "mappings": "AAAA,OAAS,eAAAA,EAAa,mBAAAC,MAAuB",
6
+ "names": ["DeepgramSTT", "DeepgramSession"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{DeepgramSTT as m}from"./deepgram/deepgram.js";export{m as DeepgramSTT};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/providers/stt/adapters/index.ts"],
4
+ "sourcesContent": ["export { DeepgramSTT } from \"./deepgram/deepgram\";\n"],
5
+ "mappings": "AAAA,OAAS,eAAAA,MAAmB",
6
+ "names": ["DeepgramSTT"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{DeepgramSTT as o}from"./adapters/index.js";export{o as DeepgramSTT};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/providers/stt/index.ts"],
4
+ "sourcesContent": ["export type { STT, STTOptions, STTSession } from \"./types\";\nexport { DeepgramSTT } from \"./adapters/index\";\n"],
5
+ "mappings": "AACA,OAAS,eAAAA,MAAmB",
6
+ "names": ["DeepgramSTT"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{KokoroTTS as T}from"./kokoro/kokoro.js";export{T as KokoroTTS};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/providers/tts/adapters/index.ts"],
4
+ "sourcesContent": ["export { KokoroTTS } from \"./kokoro/kokoro\";\n"],
5
+ "mappings": "AAAA,OAAS,aAAAA,MAAiB",
6
+ "names": ["KokoroTTS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{KokoroTTS as k}from"./kokoro.js";export{k as KokoroTTS};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/providers/tts/adapters/kokoro/index.ts"],
4
+ "sourcesContent": ["export { KokoroTTS } from \"./kokoro\";\nexport type { KokoroOptions } from \"./kokoro\";\n"],
5
+ "mappings": "AAAA,OAAS,aAAAA,MAAiB",
6
+ "names": ["KokoroTTS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var h=Object.defineProperty;var n=(i,e)=>h(i,"name",{value:e,configurable:!0});class d{static{n(this,"KokoroTTS")}baseUrl;voice;model;apiKey;chunkSize;fetchImpl;abort=null;constructor(e={}){this.baseUrl=(e.baseUrl??"http://localhost:8880").replace(/\/+$/,""),this.voice=e.voice??"af_heart",this.model=e.model??"kokoro",this.apiKey=e.apiKey,this.chunkSize=e.chunkSize??8192,this.fetchImpl=e.fetch??fetch}stop(){this.abort?.abort()}async*stream(e){if(!e.text)throw new Error("KokoroTTS requires request.text");this.abort?.abort();const t=new AbortController;this.abort=t;try{const o=await this.fetchImpl(`${this.baseUrl}/v1/audio/speech`,{method:"POST",headers:{"content-type":"application/json",...this.apiKey?{authorization:`Bearer ${this.apiKey}`}:{}},body:JSON.stringify({model:this.model,input:e.text,voice:e.voice??this.voice,response_format:e.format,speed:e.speed}),signal:t.signal});if(!o.ok){const a=await o.text();throw new Error(`Kokoro request failed (${o.status}): ${a}`)}if(!o.body)throw new Error("Kokoro returned an empty body");const s=o.body.getReader();let r=new Uint8Array(0);for(;;){if(t.signal.aborted)throw new DOMException("The operation was aborted.","AbortError");const{done:a,value:l}=await s.read();if(a)break;for(r=c(r,l);r.length>=this.chunkSize;)yield r.slice(0,this.chunkSize),r=r.slice(this.chunkSize)}r.length>0&&(yield r)}finally{this.abort===t&&(this.abort=null)}}}function c(i,e){const t=new Uint8Array(i.length+e.length);return t.set(i),t.set(e,i.length),t}n(c,"concat");export{d as KokoroTTS};
2
+ //# sourceMappingURL=kokoro.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/providers/tts/adapters/kokoro/kokoro.ts"],
4
+ "sourcesContent": ["import type { TTS, TTSRequest } from \"../../types\";\nimport type { FetchLike } from \"../../../shared\";\n\nexport interface KokoroOptions {\n /**\n * Base URL of a Kokoro TTS server exposing the OpenAI-compatible\n * `/v1/audio/speech` endpoint. Defaults to a local kokoro-fastapi server.\n */\n baseUrl?: string;\n /** Default voice, e.g. `af_heart`. */\n voice?: string;\n model?: string;\n apiKey?: string;\n /** Size of the audio chunks yielded from the response stream. */\n chunkSize?: number;\n /** Injectable fetch implementation, mainly for tests. */\n fetch?: FetchLike;\n}\n\n/**\n * Kokoro TTS adapter. Consumes a Kokoro server's OpenAI-compatible speech\n * endpoint and re-chunks the returned audio so it can be played as it\n * arrives.\n */\nexport class KokoroTTS implements TTS {\n private readonly baseUrl: string;\n private readonly voice: string;\n private readonly model: string;\n private readonly apiKey: string | undefined;\n private readonly chunkSize: number;\n private readonly fetchImpl: FetchLike;\n private abort: AbortController | null = null;\n\n constructor(options: KokoroOptions = {}) {\n this.baseUrl = (options.baseUrl ?? \"http://localhost:8880\").replace(/\\/+$/, \"\");\n this.voice = options.voice ?? \"af_heart\";\n this.model = options.model ?? \"kokoro\";\n this.apiKey = options.apiKey;\n this.chunkSize = options.chunkSize ?? 8192;\n this.fetchImpl = options.fetch ?? fetch;\n }\n\n stop(): void {\n this.abort?.abort();\n }\n\n async *stream(request: TTSRequest): AsyncGenerator<Uint8Array> {\n if (!request.text) {\n throw new Error(\"KokoroTTS requires request.text\");\n }\n\n this.abort?.abort();\n const controller = new AbortController();\n this.abort = controller;\n\n try {\n const response = await this.fetchImpl(`${this.baseUrl}/v1/audio/speech`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(this.apiKey ? { authorization: `Bearer ${this.apiKey}` } : {}),\n },\n body: JSON.stringify({\n model: this.model,\n input: request.text,\n voice: request.voice ?? this.voice,\n response_format: request.format,\n speed: request.speed,\n }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Kokoro request failed (${response.status}): ${body}`);\n }\n if (!response.body) {\n throw new Error(\"Kokoro returned an empty body\");\n }\n\n const reader = response.body.getReader();\n let buffer: Uint8Array<ArrayBuffer> = new Uint8Array(0);\n\n while (true) {\n if (controller.signal.aborted) {\n throw new DOMException(\"The operation was aborted.\", \"AbortError\");\n }\n const { done, value } = await reader.read();\n if (done) break;\n buffer = concat(buffer, value);\n while (buffer.length >= this.chunkSize) {\n yield buffer.slice(0, this.chunkSize);\n buffer = buffer.slice(this.chunkSize);\n }\n }\n\n if (buffer.length > 0) {\n yield buffer;\n }\n } finally {\n if (this.abort === controller) {\n this.abort = null;\n }\n }\n }\n}\n\nfunction concat(\n a: Uint8Array<ArrayBufferLike>,\n b: Uint8Array<ArrayBufferLike>,\n): Uint8Array<ArrayBuffer> {\n const out = new Uint8Array(a.length + b.length);\n out.set(a);\n out.set(b, a.length);\n return out;\n}\n"],
5
+ "mappings": "+EAwBO,MAAMA,CAAyB,CAxBtC,MAwBsC,CAAAC,EAAA,kBACnB,QACA,MACA,MACA,OACA,UACA,UACT,MAAgC,KAExC,YAAYC,EAAyB,CAAC,EAAG,CACvC,KAAK,SAAWA,EAAQ,SAAW,yBAAyB,QAAQ,OAAQ,EAAE,EAC9E,KAAK,MAAQA,EAAQ,OAAS,WAC9B,KAAK,MAAQA,EAAQ,OAAS,SAC9B,KAAK,OAASA,EAAQ,OACtB,KAAK,UAAYA,EAAQ,WAAa,KACtC,KAAK,UAAYA,EAAQ,OAAS,KACpC,CAEA,MAAa,CACX,KAAK,OAAO,MAAM,CACpB,CAEA,MAAO,OAAOC,EAAiD,CAC7D,GAAI,CAACA,EAAQ,KACX,MAAM,IAAI,MAAM,iCAAiC,EAGnD,KAAK,OAAO,MAAM,EAClB,MAAMC,EAAa,IAAI,gBACvB,KAAK,MAAQA,EAEb,GAAI,CACF,MAAMC,EAAW,MAAM,KAAK,UAAU,GAAG,KAAK,OAAO,mBAAoB,CACvE,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,GAAI,KAAK,OAAS,CAAE,cAAe,UAAU,KAAK,MAAM,EAAG,EAAI,CAAC,CAClE,EACA,KAAM,KAAK,UAAU,CACnB,MAAO,KAAK,MACZ,MAAOF,EAAQ,KACf,MAAOA,EAAQ,OAAS,KAAK,MAC7B,gBAAiBA,EAAQ,OACzB,MAAOA,EAAQ,KACjB,CAAC,EACD,OAAQC,EAAW,MACrB,CAAC,EAED,GAAI,CAACC,EAAS,GAAI,CAChB,MAAMC,EAAO,MAAMD,EAAS,KAAK,EACjC,MAAM,IAAI,MAAM,0BAA0BA,EAAS,MAAM,MAAMC,CAAI,EAAE,CACvE,CACA,GAAI,CAACD,EAAS,KACZ,MAAM,IAAI,MAAM,+BAA+B,EAGjD,MAAME,EAASF,EAAS,KAAK,UAAU,EACvC,IAAIG,EAAkC,IAAI,WAAW,CAAC,EAEtD,OAAa,CACX,GAAIJ,EAAW,OAAO,QACpB,MAAM,IAAI,aAAa,6BAA8B,YAAY,EAEnE,KAAM,CAAE,KAAAK,EAAM,MAAAC,CAAM,EAAI,MAAMH,EAAO,KAAK,EAC1C,GAAIE,EAAM,MAEV,IADAD,EAASG,EAAOH,EAAQE,CAAK,EACtBF,EAAO,QAAU,KAAK,WAC3B,MAAMA,EAAO,MAAM,EAAG,KAAK,SAAS,EACpCA,EAASA,EAAO,MAAM,KAAK,SAAS,CAExC,CAEIA,EAAO,OAAS,IAClB,MAAMA,EAEV,QAAE,CACI,KAAK,QAAUJ,IACjB,KAAK,MAAQ,KAEjB,CACF,CACF,CAEA,SAASO,EACPC,EACAC,EACyB,CACzB,MAAMC,EAAM,IAAI,WAAWF,EAAE,OAASC,EAAE,MAAM,EAC9C,OAAAC,EAAI,IAAIF,CAAC,EACTE,EAAI,IAAID,EAAGD,EAAE,MAAM,EACZE,CACT,CARSb,EAAAU,EAAA",
6
+ "names": ["KokoroTTS", "__name", "options", "request", "controller", "response", "body", "reader", "buffer", "done", "value", "concat", "a", "b", "out"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{KokoroTTS as T}from"./adapters/index.js";export{T as KokoroTTS};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/providers/tts/index.ts"],
4
+ "sourcesContent": ["export type { TTS, TTSRequest } from \"./types\";\nexport { KokoroTTS } from \"./adapters/index\";\n"],
5
+ "mappings": "AACA,OAAS,aAAAA,MAAiB",
6
+ "names": ["KokoroTTS"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{MemoryTransport as e}from"./memory/memory.js";export{e as MemoryTransport};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/transport/adapters/index.ts"],
4
+ "sourcesContent": ["export { MemoryTransport } from \"./memory/memory\";\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB",
6
+ "names": ["MemoryTransport"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{MemoryTransport as e}from"./memory.js";export{e as MemoryTransport};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/transport/adapters/memory/index.ts"],
4
+ "sourcesContent": ["export { MemoryTransport } from \"./memory\";\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB",
6
+ "names": ["MemoryTransport"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var n=Object.defineProperty;var t=(o,e)=>n(o,"name",{value:e,configurable:!0});class r{static{t(this,"MemoryTransport")}peer=null;listeners=new Set;closed=!1;static pair(){const e=new r,s=new r;return e.peer=s,s.peer=e,[e,s]}get isClosed(){return this.closed}send(e){if(this.closed)throw new Error("Cannot send on a closed transport");const s=this.peer;if(!s)throw new Error("Transport has no peer to send to");if(s.closed)throw new Error("Cannot send to a closed peer transport");s.deliver(e)}onMessage(e){if(this.closed)throw new Error("Cannot subscribe to a closed transport");return this.listeners.add(e),()=>{this.listeners.delete(e)}}async close(){if(this.closed)return;this.closed=!0,this.listeners.clear();const e=this.peer;this.peer=null,e&&!e.closed&&await e.close()}deliver(e){for(const s of[...this.listeners])try{s(e)}catch{}}}export{r as MemoryTransport};
2
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/transport/adapters/memory/memory.ts"],
4
+ "sourcesContent": ["import type { Message, Transport } from \"../../types\";\n\n/**\n * In-process transport used for tests and development.\n *\n * A `MemoryTransport` is always half of a connection: messages sent on one\n * end are delivered to the listeners of the peer end. Use `pair()` to create\n * two connected ends, or `MemoryTransport.pair()` directly.\n */\nexport class MemoryTransport implements Transport {\n private peer: MemoryTransport | null = null;\n private readonly listeners = new Set<(message: Message) => void>();\n private closed = false;\n\n /** Create a pair of connected transports. */\n static pair(): [MemoryTransport, MemoryTransport] {\n const a = new MemoryTransport();\n const b = new MemoryTransport();\n a.peer = b;\n b.peer = a;\n return [a, b];\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n send(message: Message): void {\n if (this.closed) {\n throw new Error(\"Cannot send on a closed transport\");\n }\n const peer = this.peer;\n if (!peer) {\n throw new Error(\"Transport has no peer to send to\");\n }\n if (peer.closed) {\n throw new Error(\"Cannot send to a closed peer transport\");\n }\n peer.deliver(message);\n }\n\n onMessage(listener: (message: Message) => void): () => void {\n if (this.closed) {\n throw new Error(\"Cannot subscribe to a closed transport\");\n }\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.listeners.clear();\n const peer = this.peer;\n this.peer = null;\n if (peer && !peer.closed) {\n await peer.close();\n }\n }\n\n private deliver(message: Message): void {\n for (const listener of [...this.listeners]) {\n try {\n listener(message);\n } catch {\n // A faulty listener must not prevent delivery to the others.\n }\n }\n }\n}\n"],
5
+ "mappings": "+EASO,MAAMA,CAAqC,CATlD,MASkD,CAAAC,EAAA,wBACxC,KAA+B,KACtB,UAAY,IAAI,IACzB,OAAS,GAGjB,OAAO,MAA2C,CAChD,MAAMC,EAAI,IAAIF,EACRG,EAAI,IAAIH,EACd,OAAAE,EAAE,KAAOC,EACTA,EAAE,KAAOD,EACF,CAACA,EAAGC,CAAC,CACd,CAEA,IAAI,UAAoB,CACtB,OAAO,KAAK,MACd,CAEA,KAAKC,EAAwB,CAC3B,GAAI,KAAK,OACP,MAAM,IAAI,MAAM,mCAAmC,EAErD,MAAMC,EAAO,KAAK,KAClB,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,kCAAkC,EAEpD,GAAIA,EAAK,OACP,MAAM,IAAI,MAAM,wCAAwC,EAE1DA,EAAK,QAAQD,CAAO,CACtB,CAEA,UAAUE,EAAkD,CAC1D,GAAI,KAAK,OACP,MAAM,IAAI,MAAM,wCAAwC,EAE1D,YAAK,UAAU,IAAIA,CAAQ,EACpB,IAAM,CACX,KAAK,UAAU,OAAOA,CAAQ,CAChC,CACF,CAEA,MAAM,OAAuB,CAC3B,GAAI,KAAK,OAAQ,OACjB,KAAK,OAAS,GACd,KAAK,UAAU,MAAM,EACrB,MAAMD,EAAO,KAAK,KAClB,KAAK,KAAO,KACRA,GAAQ,CAACA,EAAK,QAChB,MAAMA,EAAK,MAAM,CAErB,CAEQ,QAAQD,EAAwB,CACtC,UAAWE,IAAY,CAAC,GAAG,KAAK,SAAS,EACvC,GAAI,CACFA,EAASF,CAAO,CAClB,MAAQ,CAER,CAEJ,CACF",
6
+ "names": ["MemoryTransport", "__name", "a", "b", "message", "peer", "listener"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{MemoryTransport as o}from"./adapters/index.js";export{o as MemoryTransport};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/transport/index.ts"],
4
+ "sourcesContent": ["export type { Message, Transport } from \"./types\";\nexport { MemoryTransport } from \"./adapters/index\";\n"],
5
+ "mappings": "AACA,OAAS,mBAAAA,MAAuB",
6
+ "names": ["MemoryTransport"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,60 @@
1
+ import { Tool } from "./tools/tools.js";
2
+ import type { LLM, LLMMessage } from "../providers/llm/types.js";
3
+ export interface AgentOptions {
4
+ name: string;
5
+ context?: string;
6
+ tools?: Tool<never, unknown>[];
7
+ /** LLM provider used by `run()`. Injected by `Pipeflow.agent()`. */
8
+ llm?: LLM;
9
+ }
10
+ export interface AgentRunRequest {
11
+ prompt: string;
12
+ /** Prior messages to continue from, e.g. a previous `run()` result. */
13
+ history?: LLMMessage[];
14
+ temperature?: number;
15
+ maxTokens?: number;
16
+ /** Safety bound on the number of tool-call round trips. */
17
+ maxToolIterations?: number;
18
+ }
19
+ export interface ExecutedToolCall {
20
+ id: string;
21
+ name: string;
22
+ /** Parsed arguments, or the raw JSON string if parsing failed. */
23
+ arguments: unknown;
24
+ /** The tool result, or `{ error }` when the tool failed or is unknown. */
25
+ result: unknown;
26
+ }
27
+ export interface AgentRunResult {
28
+ /** The assistant's final text response. */
29
+ text: string;
30
+ /** The full message history including the response and tool results. */
31
+ messages: LLMMessage[];
32
+ /** Every tool call executed during the run, in order. */
33
+ toolCalls: ExecutedToolCall[];
34
+ }
35
+ /**
36
+ * An AI persona: a name, a system context, and a set of tools.
37
+ *
38
+ * An agent can participate in conversations or be invoked independently
39
+ * with `run()`.
40
+ */
41
+ export declare class Agent {
42
+ readonly name: string;
43
+ readonly context: string;
44
+ private readonly toolRegistry;
45
+ /** LLM provider used by `run()` and the orchestrator. */
46
+ readonly llm: LLM | undefined;
47
+ constructor(options: AgentOptions);
48
+ get tools(): Tool<never, unknown>[];
49
+ addTool(tool: Tool<never, unknown>): void;
50
+ hasTool(name: string): boolean;
51
+ getTool(name: string): Tool<never, unknown> | undefined;
52
+ /**
53
+ * Run the agent against the LLM, executing any requested tools and
54
+ * feeding their results back until the model responds without a tool
55
+ * call.
56
+ */
57
+ run(request: AgentRunRequest): Promise<AgentRunResult>;
58
+ private streamOnce;
59
+ private executeToolCall;
60
+ }
@@ -0,0 +1,4 @@
1
+ export { Agent } from "./agent.js";
2
+ export type { AgentOptions, AgentRunRequest, AgentRunResult, ExecutedToolCall, } from "./agent.js";
3
+ export { Tool, Tool as PipeflowTool } from "./tools/tools.js";
4
+ export type { ToolOptions } from "./tools/tools.js";
@@ -0,0 +1,2 @@
1
+ export { Tool } from "./tools.js";
2
+ export type { ToolOptions } from "./tools.js";
@@ -0,0 +1,22 @@
1
+ export interface ToolOptions<TArgs, TResult> {
2
+ name: string;
3
+ description: string;
4
+ /** JSON schema describing the arguments for the LLM. */
5
+ parameters?: Record<string, unknown>;
6
+ execute: (args: TArgs) => TResult | Promise<TResult>;
7
+ }
8
+ /**
9
+ * A capability exposed by the application to an agent.
10
+ *
11
+ * Tools execute in the application's backend: Pipeflow never runs
12
+ * application code directly.
13
+ */
14
+ export declare class Tool<TArgs = Record<string, unknown>, TResult = unknown> {
15
+ readonly name: string;
16
+ readonly description: string;
17
+ readonly parameters: Record<string, unknown> | undefined;
18
+ private readonly executor;
19
+ constructor(options: ToolOptions<TArgs, TResult>);
20
+ /** Execute the tool. Sync throws and rejections both surface as rejections. */
21
+ execute(args: TArgs): Promise<TResult>;
22
+ }
@@ -0,0 +1,138 @@
1
+ import type { Agent } from "../../agents/agent.js";
2
+ import type { Persistence } from "../../persistence/persistence.js";
3
+ import type { AudioChunk, ConversationId, ConversationState, ConversationStatus, Generation, Participant, ParticipantInput, Turn, UserId } from "../types.js";
4
+ import { Transcription, type TranscriptEntry, type TranscriptEntryInput } from "../transcription/transcription.js";
5
+ import type { ToolCall, ToolCallResult } from "../types.js";
6
+ export interface ConversationOptions {
7
+ id: ConversationId;
8
+ agents?: Agent[];
9
+ persistence?: Persistence;
10
+ }
11
+ export interface ConversationEvents {
12
+ start: {
13
+ conversationId: ConversationId;
14
+ };
15
+ stop: {
16
+ conversationId: ConversationId;
17
+ };
18
+ participant: {
19
+ conversationId: ConversationId;
20
+ participant: Participant;
21
+ };
22
+ /** Raw audio fed in via `listen()`. Consumed by the orchestrator. */
23
+ "audio-in": {
24
+ conversationId: ConversationId;
25
+ userId: UserId;
26
+ audio: AudioChunk;
27
+ };
28
+ /** Generated audio to be played by the application. */
29
+ audio: {
30
+ conversationId: ConversationId;
31
+ audio: AudioChunk;
32
+ };
33
+ turn: {
34
+ conversationId: ConversationId;
35
+ turn: Turn;
36
+ };
37
+ transcript: {
38
+ conversationId: ConversationId;
39
+ entry: TranscriptEntry;
40
+ };
41
+ generation: {
42
+ conversationId: ConversationId;
43
+ generation: Generation;
44
+ };
45
+ /** Live STT partials, for captions and fast UX. Not persisted. */
46
+ "partial-transcript": {
47
+ conversationId: ConversationId;
48
+ userId: UserId;
49
+ text: string;
50
+ };
51
+ /** The model requested a tool call. Resolve it with `resolveToolCall()`. */
52
+ "tool-call": {
53
+ conversationId: ConversationId;
54
+ call: ToolCall;
55
+ };
56
+ /** A pending tool call was resolved by the application. */
57
+ "tool-call-result": {
58
+ conversationId: ConversationId;
59
+ result: ToolCallResult;
60
+ };
61
+ interrupt: {
62
+ conversationId: ConversationId;
63
+ };
64
+ /** A provider failure (STT, LLM, or TTS). */
65
+ error: {
66
+ conversationId: ConversationId;
67
+ error: Error;
68
+ };
69
+ state: {
70
+ conversationId: ConversationId;
71
+ state: ConversationState;
72
+ };
73
+ }
74
+ /**
75
+ * The public realtime conversation API.
76
+ *
77
+ * 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.
82
+ */
83
+ export declare class Conversation {
84
+ readonly id: ConversationId;
85
+ readonly agents: readonly Agent[];
86
+ readonly transcription: Transcription;
87
+ readonly state: ConversationState;
88
+ private readonly persistence;
89
+ private readonly listeners;
90
+ private readonly pendingToolCallsById;
91
+ private nextAudioSequence;
92
+ constructor(options: ConversationOptions);
93
+ get status(): ConversationStatus;
94
+ get participants(): Participant[];
95
+ start(): void;
96
+ stop(): Promise<void>;
97
+ participate(input: ParticipantInput | ParticipantInput[]): Promise<Participant[]>;
98
+ /**
99
+ * Send an audio packet. Intentionally synchronous: it means "send this
100
+ * packet", not "wait for this utterance to finish".
101
+ */
102
+ listen(input: {
103
+ userId: UserId;
104
+ audio: Uint8Array;
105
+ }): void;
106
+ /** Interrupt the current agent output (stop TTS, cancel the generation). */
107
+ interrupt(): void;
108
+ on<K extends keyof ConversationEvents>(event: K, listener: (payload: ConversationEvents[K]) => void): () => void;
109
+ /**
110
+ * Emit an event. Primarily used by the orchestrator to push output
111
+ * (audio, turns, transcripts) into the conversation.
112
+ */
113
+ emit<K extends keyof ConversationEvents>(event: K, payload: ConversationEvents[K]): void;
114
+ /** Push a chunk of generated audio to the application. */
115
+ pushAudio(audio: AudioChunk): void;
116
+ /** Push a completed participant turn into the conversation. */
117
+ pushTurn(turn: Turn): Promise<void>;
118
+ /** Append a transcript entry and notify listeners. */
119
+ pushTranscript(input: Omit<TranscriptEntryInput, "conversationId">): Promise<TranscriptEntry>;
120
+ /** Push an agent generation into the conversation. */
121
+ pushGeneration(generation: Generation): Promise<void>;
122
+ /** Tool calls requested by the model that are awaiting resolution. */
123
+ get pendingToolCalls(): ToolCall[];
124
+ /**
125
+ * Track and emit a tool call requested by the model. The application
126
+ * listens for `tool-call` events, executes the tool in its own backend,
127
+ * and reports back through `resolveToolCall()`.
128
+ */
129
+ requestToolCall(call: ToolCall): void;
130
+ /** Resolve a pending tool call with a result or an error. */
131
+ resolveToolCall(result: ToolCallResult): void;
132
+ /** Mark the current generation as completed, recording its final text. */
133
+ completeGeneration(text?: string): Promise<void>;
134
+ /** The live in-memory transcript. */
135
+ transcript(): TranscriptEntry[];
136
+ private cancelCurrentGeneration;
137
+ private emitState;
138
+ }
@@ -0,0 +1,2 @@
1
+ export { Conversation } from "./conversation.js";
2
+ export type { ConversationEvents, ConversationOptions, } from "./conversation.js";
@@ -0,0 +1,23 @@
1
+ import type { Agent } from "../agents/agent.js";
2
+ import type { Persistence } from "../persistence/persistence.js";
3
+ import type { ConversationId } from "./types.js";
4
+ import type { TranscriptEntry } from "./transcription/transcription.js";
5
+ import { Conversation } from "./conversation/conversation.js";
6
+ export interface CreateConversationOptions {
7
+ agents?: Agent[];
8
+ }
9
+ /**
10
+ * The conversations API surface of a Pipeflow instance: create persistent
11
+ * conversations and retrieve their transcripts.
12
+ */
13
+ export declare class Conversations {
14
+ private readonly persistence;
15
+ constructor(persistence: Persistence);
16
+ /** Create a persistent conversation. Realtime execution is separate. */
17
+ create(options?: CreateConversationOptions): Promise<Conversation>;
18
+ /** Retrieve the persisted transcript of a conversation. */
19
+ transcript(id: ConversationId): Promise<TranscriptEntry[]>;
20
+ /** Rehydrate a runtime handle for an existing conversation. */
21
+ get(id: ConversationId): Promise<Conversation | null>;
22
+ private requireConversation;
23
+ }
@@ -0,0 +1,10 @@
1
+ export type { AudioChunk, ConversationId, ConversationState, ConversationStatus, Generation, GenerationStatus, Participant, ParticipantInput, ToolCall, ToolCallResult, Turn, TurnId, UserId, } from "./types.js";
2
+ export { createConversationState } from "./types.js";
3
+ export { Conversation } from "./conversation/index.js";
4
+ export type { ConversationEvents, ConversationOptions, } from "./conversation/index.js";
5
+ export { Conversations } from "./conversations.js";
6
+ export type { CreateConversationOptions } from "./conversations.js";
7
+ export { Orchestrator } from "./orchestration/orchestrator/index.js";
8
+ export type { OrchestratorOptions } from "./orchestration/orchestrator/index.js";
9
+ export { Transcription, TranscriptEntry } from "./transcription/index.js";
10
+ export type { TranscriptEntryInput, TranscriptSpeakerKind, } from "./transcription/index.js";
@@ -0,0 +1,2 @@
1
+ export { Orchestrator } from "./orchestrator.js";
2
+ export type { OrchestratorOptions } from "./orchestrator.js";