@0xmaxma/claude-gateway 1.8.13 → 2.0.0

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 (594) hide show
  1. package/README.md +28 -1605
  2. package/config.template.json +7 -1
  3. package/dist/agent/runner.d.ts +394 -0
  4. package/dist/agent/runner.d.ts.map +1 -1
  5. package/dist/agent/runner.js +867 -38
  6. package/dist/agent/runner.js.map +1 -1
  7. package/dist/agent/skill-learning/index.d.ts +6 -4
  8. package/dist/agent/skill-learning/index.d.ts.map +1 -1
  9. package/dist/agent/skill-learning/index.js +3 -3
  10. package/dist/agent/skill-learning/index.js.map +1 -1
  11. package/dist/agent/skill-learning/notifier.d.ts +3 -4
  12. package/dist/agent/skill-learning/notifier.d.ts.map +1 -1
  13. package/dist/agent/skill-learning/notifier.js +15 -13
  14. package/dist/agent/skill-learning/notifier.js.map +1 -1
  15. package/dist/agent/skill-learning/reviewer.d.ts.map +1 -1
  16. package/dist/agent/skill-learning/reviewer.js +3 -1
  17. package/dist/agent/skill-learning/reviewer.js.map +1 -1
  18. package/dist/api/connectors-router.d.ts.map +1 -1
  19. package/dist/api/connectors-router.js +110 -4
  20. package/dist/api/connectors-router.js.map +1 -1
  21. package/dist/api/gateway-router.d.ts +1 -0
  22. package/dist/api/gateway-router.d.ts.map +1 -1
  23. package/dist/api/gateway-router.js +13 -1
  24. package/dist/api/gateway-router.js.map +1 -1
  25. package/dist/api/line-webhook-router.d.ts +2 -2
  26. package/dist/api/line-webhook-router.d.ts.map +1 -1
  27. package/dist/api/line-webhook-router.js +264 -230
  28. package/dist/api/line-webhook-router.js.map +1 -1
  29. package/dist/api/router.d.ts.map +1 -1
  30. package/dist/api/router.js +372 -11
  31. package/dist/api/router.js.map +1 -1
  32. package/dist/api/share-router.d.ts.map +1 -1
  33. package/dist/api/share-router.js +29 -10
  34. package/dist/api/share-router.js.map +1 -1
  35. package/dist/api/slack-client.d.ts +2 -0
  36. package/dist/api/slack-client.d.ts.map +1 -1
  37. package/dist/api/slack-client.js +6 -2
  38. package/dist/api/slack-client.js.map +1 -1
  39. package/dist/api/slack-webhook-router.d.ts +3 -0
  40. package/dist/api/slack-webhook-router.d.ts.map +1 -1
  41. package/dist/api/slack-webhook-router.js +226 -131
  42. package/dist/api/slack-webhook-router.js.map +1 -1
  43. package/dist/api/voice-router.d.ts +21 -0
  44. package/dist/api/voice-router.d.ts.map +1 -0
  45. package/dist/api/voice-router.js +372 -0
  46. package/dist/api/voice-router.js.map +1 -0
  47. package/dist/api/voice-settings-router.d.ts +5 -0
  48. package/dist/api/voice-settings-router.d.ts.map +1 -0
  49. package/dist/api/voice-settings-router.js +318 -0
  50. package/dist/api/voice-settings-router.js.map +1 -0
  51. package/dist/api/wechat-access.d.ts +45 -0
  52. package/dist/api/wechat-access.d.ts.map +1 -0
  53. package/dist/api/wechat-access.js +48 -0
  54. package/dist/api/wechat-access.js.map +1 -0
  55. package/dist/apps/agent-container-migration.d.ts +11 -0
  56. package/dist/apps/agent-container-migration.d.ts.map +1 -0
  57. package/dist/apps/agent-container-migration.js +85 -0
  58. package/dist/apps/agent-container-migration.js.map +1 -0
  59. package/dist/apps/installer.d.ts +1 -1
  60. package/dist/apps/installer.d.ts.map +1 -1
  61. package/dist/apps/installer.js +2 -1
  62. package/dist/apps/installer.js.map +1 -1
  63. package/dist/cli/commands/tasks.d.ts +5 -0
  64. package/dist/cli/commands/tasks.d.ts.map +1 -0
  65. package/dist/cli/commands/tasks.js +92 -0
  66. package/dist/cli/commands/tasks.js.map +1 -0
  67. package/dist/cli/http-client.d.ts +2 -0
  68. package/dist/cli/http-client.d.ts.map +1 -1
  69. package/dist/cli/http-client.js +8 -3
  70. package/dist/cli/http-client.js.map +1 -1
  71. package/dist/cli/index.d.ts.map +1 -1
  72. package/dist/cli/index.js +5 -1
  73. package/dist/cli/index.js.map +1 -1
  74. package/dist/config/config-write-lock.d.ts +2 -0
  75. package/dist/config/config-write-lock.d.ts.map +1 -1
  76. package/dist/config/config-write-lock.js +5 -0
  77. package/dist/config/config-write-lock.js.map +1 -1
  78. package/dist/config/loader.d.ts.map +1 -1
  79. package/dist/config/loader.js +87 -2
  80. package/dist/config/loader.js.map +1 -1
  81. package/dist/config/migrator.d.ts.map +1 -1
  82. package/dist/config/migrator.js +12 -1
  83. package/dist/config/migrator.js.map +1 -1
  84. package/dist/config/watcher.d.ts.map +1 -1
  85. package/dist/config/watcher.js +6 -0
  86. package/dist/config/watcher.js.map +1 -1
  87. package/dist/connectors/resolve.d.ts.map +1 -1
  88. package/dist/connectors/resolve.js +3 -1
  89. package/dist/connectors/resolve.js.map +1 -1
  90. package/dist/connectors/types.d.ts +8 -0
  91. package/dist/connectors/types.d.ts.map +1 -1
  92. package/dist/cron/manager.d.ts.map +1 -1
  93. package/dist/cron/manager.js +21 -2
  94. package/dist/cron/manager.js.map +1 -1
  95. package/dist/discord/receiver.d.ts +2 -1
  96. package/dist/discord/receiver.d.ts.map +1 -1
  97. package/dist/discord/receiver.js +5 -1
  98. package/dist/discord/receiver.js.map +1 -1
  99. package/dist/history/db.d.ts +3 -0
  100. package/dist/history/db.d.ts.map +1 -1
  101. package/dist/history/db.js +21 -1
  102. package/dist/history/db.js.map +1 -1
  103. package/dist/history/types.d.ts +12 -1
  104. package/dist/history/types.d.ts.map +1 -1
  105. package/dist/history/types.js +10 -1
  106. package/dist/history/types.js.map +1 -1
  107. package/dist/index.js +48 -9
  108. package/dist/index.js.map +1 -1
  109. package/dist/orchestration/bounded-queue.d.ts +15 -0
  110. package/dist/orchestration/bounded-queue.d.ts.map +1 -0
  111. package/dist/orchestration/bounded-queue.js +58 -0
  112. package/dist/orchestration/bounded-queue.js.map +1 -0
  113. package/dist/orchestration/bridge.d.ts +55 -0
  114. package/dist/orchestration/bridge.d.ts.map +1 -0
  115. package/dist/orchestration/bridge.js +234 -0
  116. package/dist/orchestration/bridge.js.map +1 -0
  117. package/dist/orchestration/browser-routing.d.ts +7 -0
  118. package/dist/orchestration/browser-routing.d.ts.map +1 -0
  119. package/dist/orchestration/browser-routing.js +22 -0
  120. package/dist/orchestration/browser-routing.js.map +1 -0
  121. package/dist/orchestration/capabilities.d.ts +49 -0
  122. package/dist/orchestration/capabilities.d.ts.map +1 -0
  123. package/dist/orchestration/capabilities.js +417 -0
  124. package/dist/orchestration/capabilities.js.map +1 -0
  125. package/dist/orchestration/capacity.d.ts +14 -0
  126. package/dist/orchestration/capacity.d.ts.map +1 -0
  127. package/dist/orchestration/capacity.js +52 -0
  128. package/dist/orchestration/capacity.js.map +1 -0
  129. package/dist/orchestration/channel-activity.d.ts +21 -0
  130. package/dist/orchestration/channel-activity.d.ts.map +1 -0
  131. package/dist/orchestration/channel-activity.js +72 -0
  132. package/dist/orchestration/channel-activity.js.map +1 -0
  133. package/dist/orchestration/channel-controls.d.ts +32 -0
  134. package/dist/orchestration/channel-controls.d.ts.map +1 -0
  135. package/dist/orchestration/channel-controls.js +105 -0
  136. package/dist/orchestration/channel-controls.js.map +1 -0
  137. package/dist/orchestration/channel-input-media.d.ts +11 -0
  138. package/dist/orchestration/channel-input-media.d.ts.map +1 -0
  139. package/dist/orchestration/channel-input-media.js +54 -0
  140. package/dist/orchestration/channel-input-media.js.map +1 -0
  141. package/dist/orchestration/channel-media.d.ts +4 -0
  142. package/dist/orchestration/channel-media.d.ts.map +1 -0
  143. package/dist/orchestration/channel-media.js +70 -0
  144. package/dist/orchestration/channel-media.js.map +1 -0
  145. package/dist/orchestration/channel-speech.d.ts +7 -0
  146. package/dist/orchestration/channel-speech.d.ts.map +1 -0
  147. package/dist/orchestration/channel-speech.js +65 -0
  148. package/dist/orchestration/channel-speech.js.map +1 -0
  149. package/dist/orchestration/cli-skills.d.ts +12 -0
  150. package/dist/orchestration/cli-skills.d.ts.map +1 -0
  151. package/dist/orchestration/cli-skills.js +132 -0
  152. package/dist/orchestration/cli-skills.js.map +1 -0
  153. package/dist/orchestration/config.d.ts +256 -0
  154. package/dist/orchestration/config.d.ts.map +1 -0
  155. package/dist/orchestration/config.js +110 -0
  156. package/dist/orchestration/config.js.map +1 -0
  157. package/dist/orchestration/container.d.ts +21 -0
  158. package/dist/orchestration/container.d.ts.map +1 -0
  159. package/dist/orchestration/container.js +195 -0
  160. package/dist/orchestration/container.js.map +1 -0
  161. package/dist/orchestration/control-delivery.d.ts +5 -0
  162. package/dist/orchestration/control-delivery.d.ts.map +1 -0
  163. package/dist/orchestration/control-delivery.js +50 -0
  164. package/dist/orchestration/control-delivery.js.map +1 -0
  165. package/dist/orchestration/conversation-intake.d.ts +32 -0
  166. package/dist/orchestration/conversation-intake.d.ts.map +1 -0
  167. package/dist/orchestration/conversation-intake.js +92 -0
  168. package/dist/orchestration/conversation-intake.js.map +1 -0
  169. package/dist/orchestration/decisions.d.ts +27 -0
  170. package/dist/orchestration/decisions.d.ts.map +1 -0
  171. package/dist/orchestration/decisions.js +148 -0
  172. package/dist/orchestration/decisions.js.map +1 -0
  173. package/dist/orchestration/delivery.d.ts +30 -0
  174. package/dist/orchestration/delivery.d.ts.map +1 -0
  175. package/dist/orchestration/delivery.js +219 -0
  176. package/dist/orchestration/delivery.js.map +1 -0
  177. package/dist/orchestration/display-stream.d.ts +4 -0
  178. package/dist/orchestration/display-stream.d.ts.map +1 -0
  179. package/dist/orchestration/display-stream.js +77 -0
  180. package/dist/orchestration/display-stream.js.map +1 -0
  181. package/dist/orchestration/events.d.ts +30 -0
  182. package/dist/orchestration/events.d.ts.map +1 -0
  183. package/dist/orchestration/events.js +65 -0
  184. package/dist/orchestration/events.js.map +1 -0
  185. package/dist/orchestration/execution-observation.d.ts +38 -0
  186. package/dist/orchestration/execution-observation.d.ts.map +1 -0
  187. package/dist/orchestration/execution-observation.js +25 -0
  188. package/dist/orchestration/execution-observation.js.map +1 -0
  189. package/dist/orchestration/file-delivery.d.ts +16 -0
  190. package/dist/orchestration/file-delivery.d.ts.map +1 -0
  191. package/dist/orchestration/file-delivery.js +139 -0
  192. package/dist/orchestration/file-delivery.js.map +1 -0
  193. package/dist/orchestration/gateway-config.d.ts +17 -0
  194. package/dist/orchestration/gateway-config.d.ts.map +1 -0
  195. package/dist/orchestration/gateway-config.js +128 -0
  196. package/dist/orchestration/gateway-config.js.map +1 -0
  197. package/dist/orchestration/history.d.ts +13 -0
  198. package/dist/orchestration/history.d.ts.map +1 -0
  199. package/dist/orchestration/history.js +48 -0
  200. package/dist/orchestration/history.js.map +1 -0
  201. package/dist/orchestration/identity.d.ts +6 -0
  202. package/dist/orchestration/identity.d.ts.map +1 -0
  203. package/dist/orchestration/identity.js +13 -0
  204. package/dist/orchestration/identity.js.map +1 -0
  205. package/dist/orchestration/inference-errors.d.ts +3 -0
  206. package/dist/orchestration/inference-errors.d.ts.map +1 -0
  207. package/dist/orchestration/inference-errors.js +16 -0
  208. package/dist/orchestration/inference-errors.js.map +1 -0
  209. package/dist/orchestration/input-images.d.ts +12 -0
  210. package/dist/orchestration/input-images.d.ts.map +1 -0
  211. package/dist/orchestration/input-images.js +66 -0
  212. package/dist/orchestration/input-images.js.map +1 -0
  213. package/dist/orchestration/instance-lock.d.ts +5 -0
  214. package/dist/orchestration/instance-lock.d.ts.map +1 -0
  215. package/dist/orchestration/instance-lock.js +33 -0
  216. package/dist/orchestration/instance-lock.js.map +1 -0
  217. package/dist/orchestration/line-loading.d.ts +21 -0
  218. package/dist/orchestration/line-loading.d.ts.map +1 -0
  219. package/dist/orchestration/line-loading.js +89 -0
  220. package/dist/orchestration/line-loading.js.map +1 -0
  221. package/dist/orchestration/media.d.ts +3 -0
  222. package/dist/orchestration/media.d.ts.map +1 -0
  223. package/dist/orchestration/media.js +46 -0
  224. package/dist/orchestration/media.js.map +1 -0
  225. package/dist/orchestration/migrations/schema.d.ts +3 -0
  226. package/dist/orchestration/migrations/schema.d.ts.map +1 -0
  227. package/dist/orchestration/migrations/schema.js +80 -0
  228. package/dist/orchestration/migrations/schema.js.map +1 -0
  229. package/dist/orchestration/notification-mailbox.d.ts +5 -0
  230. package/dist/orchestration/notification-mailbox.d.ts.map +1 -0
  231. package/dist/orchestration/notification-mailbox.js +29 -0
  232. package/dist/orchestration/notification-mailbox.js.map +1 -0
  233. package/dist/orchestration/process-activity.d.ts +23 -0
  234. package/dist/orchestration/process-activity.d.ts.map +1 -0
  235. package/dist/orchestration/process-activity.js +95 -0
  236. package/dist/orchestration/process-activity.js.map +1 -0
  237. package/dist/orchestration/process-supervisor.d.ts +15 -0
  238. package/dist/orchestration/process-supervisor.d.ts.map +1 -0
  239. package/dist/orchestration/process-supervisor.js +92 -0
  240. package/dist/orchestration/process-supervisor.js.map +1 -0
  241. package/dist/orchestration/process-turn.d.ts +35 -0
  242. package/dist/orchestration/process-turn.d.ts.map +1 -0
  243. package/dist/orchestration/process-turn.js +246 -0
  244. package/dist/orchestration/process-turn.js.map +1 -0
  245. package/dist/orchestration/progress-review.d.ts +28 -0
  246. package/dist/orchestration/progress-review.d.ts.map +1 -0
  247. package/dist/orchestration/progress-review.js +48 -0
  248. package/dist/orchestration/progress-review.js.map +1 -0
  249. package/dist/orchestration/recovery.d.ts +8 -0
  250. package/dist/orchestration/recovery.d.ts.map +1 -0
  251. package/dist/orchestration/recovery.js +35 -0
  252. package/dist/orchestration/recovery.js.map +1 -0
  253. package/dist/orchestration/reply-context.d.ts +7 -0
  254. package/dist/orchestration/reply-context.d.ts.map +1 -0
  255. package/dist/orchestration/reply-context.js +54 -0
  256. package/dist/orchestration/reply-context.js.map +1 -0
  257. package/dist/orchestration/runtime.d.ts +232 -0
  258. package/dist/orchestration/runtime.d.ts.map +1 -0
  259. package/dist/orchestration/runtime.js +962 -0
  260. package/dist/orchestration/runtime.js.map +1 -0
  261. package/dist/orchestration/skills.d.ts +17 -0
  262. package/dist/orchestration/skills.d.ts.map +1 -0
  263. package/dist/orchestration/skills.js +32 -0
  264. package/dist/orchestration/skills.js.map +1 -0
  265. package/dist/orchestration/source-policy.d.ts +6 -0
  266. package/dist/orchestration/source-policy.d.ts.map +1 -0
  267. package/dist/orchestration/source-policy.js +16 -0
  268. package/dist/orchestration/source-policy.js.map +1 -0
  269. package/dist/orchestration/speech.d.ts +24 -0
  270. package/dist/orchestration/speech.d.ts.map +1 -0
  271. package/dist/orchestration/speech.js +61 -0
  272. package/dist/orchestration/speech.js.map +1 -0
  273. package/dist/orchestration/stop-controls.d.ts +30 -0
  274. package/dist/orchestration/stop-controls.d.ts.map +1 -0
  275. package/dist/orchestration/stop-controls.js +79 -0
  276. package/dist/orchestration/stop-controls.js.map +1 -0
  277. package/dist/orchestration/store.d.ts +86 -0
  278. package/dist/orchestration/store.d.ts.map +1 -0
  279. package/dist/orchestration/store.js +275 -0
  280. package/dist/orchestration/store.js.map +1 -0
  281. package/dist/orchestration/task-controls.d.ts +130 -0
  282. package/dist/orchestration/task-controls.d.ts.map +1 -0
  283. package/dist/orchestration/task-controls.js +55 -0
  284. package/dist/orchestration/task-controls.js.map +1 -0
  285. package/dist/orchestration/task-files.d.ts +29 -0
  286. package/dist/orchestration/task-files.d.ts.map +1 -0
  287. package/dist/orchestration/task-files.js +200 -0
  288. package/dist/orchestration/task-files.js.map +1 -0
  289. package/dist/orchestration/task-report.d.ts +7 -0
  290. package/dist/orchestration/task-report.d.ts.map +1 -0
  291. package/dist/orchestration/task-report.js +33 -0
  292. package/dist/orchestration/task-report.js.map +1 -0
  293. package/dist/orchestration/tasks/checkpoint-hook.d.ts +19 -0
  294. package/dist/orchestration/tasks/checkpoint-hook.d.ts.map +1 -0
  295. package/dist/orchestration/tasks/checkpoint-hook.js +49 -0
  296. package/dist/orchestration/tasks/checkpoint-hook.js.map +1 -0
  297. package/dist/orchestration/tasks/cleanup.d.ts +18 -0
  298. package/dist/orchestration/tasks/cleanup.d.ts.map +1 -0
  299. package/dist/orchestration/tasks/cleanup.js +113 -0
  300. package/dist/orchestration/tasks/cleanup.js.map +1 -0
  301. package/dist/orchestration/tasks/driver.d.ts +23 -0
  302. package/dist/orchestration/tasks/driver.d.ts.map +1 -0
  303. package/dist/orchestration/tasks/driver.js +209 -0
  304. package/dist/orchestration/tasks/driver.js.map +1 -0
  305. package/dist/orchestration/tasks/failure.d.ts +5 -0
  306. package/dist/orchestration/tasks/failure.d.ts.map +1 -0
  307. package/dist/orchestration/tasks/failure.js +17 -0
  308. package/dist/orchestration/tasks/failure.js.map +1 -0
  309. package/dist/orchestration/tasks/pool.d.ts +18 -0
  310. package/dist/orchestration/tasks/pool.d.ts.map +1 -0
  311. package/dist/orchestration/tasks/pool.js +73 -0
  312. package/dist/orchestration/tasks/pool.js.map +1 -0
  313. package/dist/orchestration/tasks/scheduler.d.ts +38 -0
  314. package/dist/orchestration/tasks/scheduler.d.ts.map +1 -0
  315. package/dist/orchestration/tasks/scheduler.js +160 -0
  316. package/dist/orchestration/tasks/scheduler.js.map +1 -0
  317. package/dist/orchestration/tasks/service.d.ts +109 -0
  318. package/dist/orchestration/tasks/service.d.ts.map +1 -0
  319. package/dist/orchestration/tasks/service.js +697 -0
  320. package/dist/orchestration/tasks/service.js.map +1 -0
  321. package/dist/orchestration/tasks/shared-workspace.d.ts +25 -0
  322. package/dist/orchestration/tasks/shared-workspace.d.ts.map +1 -0
  323. package/dist/orchestration/tasks/shared-workspace.js +162 -0
  324. package/dist/orchestration/tasks/shared-workspace.js.map +1 -0
  325. package/dist/orchestration/tasks/task-directive.d.ts +6 -0
  326. package/dist/orchestration/tasks/task-directive.d.ts.map +1 -0
  327. package/dist/orchestration/tasks/task-directive.js +41 -0
  328. package/dist/orchestration/tasks/task-directive.js.map +1 -0
  329. package/dist/orchestration/tasks/timing.d.ts +15 -0
  330. package/dist/orchestration/tasks/timing.d.ts.map +1 -0
  331. package/dist/orchestration/tasks/timing.js +48 -0
  332. package/dist/orchestration/tasks/timing.js.map +1 -0
  333. package/dist/orchestration/tasks/tool-repetition.d.ts +3 -0
  334. package/dist/orchestration/tasks/tool-repetition.d.ts.map +1 -0
  335. package/dist/orchestration/tasks/tool-repetition.js +30 -0
  336. package/dist/orchestration/tasks/tool-repetition.js.map +1 -0
  337. package/dist/orchestration/tasks/workspace.d.ts +24 -0
  338. package/dist/orchestration/tasks/workspace.d.ts.map +1 -0
  339. package/dist/orchestration/tasks/workspace.js +147 -0
  340. package/dist/orchestration/tasks/workspace.js.map +1 -0
  341. package/dist/orchestration/telegram-speech.d.ts +17 -0
  342. package/dist/orchestration/telegram-speech.d.ts.map +1 -0
  343. package/dist/orchestration/telegram-speech.js +55 -0
  344. package/dist/orchestration/telegram-speech.js.map +1 -0
  345. package/dist/orchestration/telegram-tool-status.d.ts +23 -0
  346. package/dist/orchestration/telegram-tool-status.d.ts.map +1 -0
  347. package/dist/orchestration/telegram-tool-status.js +207 -0
  348. package/dist/orchestration/telegram-tool-status.js.map +1 -0
  349. package/dist/orchestration/telegram-voices.d.ts +42 -0
  350. package/dist/orchestration/telegram-voices.d.ts.map +1 -0
  351. package/dist/orchestration/telegram-voices.js +70 -0
  352. package/dist/orchestration/telegram-voices.js.map +1 -0
  353. package/dist/orchestration/tool-activity.d.ts +10 -0
  354. package/dist/orchestration/tool-activity.d.ts.map +1 -0
  355. package/dist/orchestration/tool-activity.js +38 -0
  356. package/dist/orchestration/tool-activity.js.map +1 -0
  357. package/dist/orchestration/types.d.ts +177 -0
  358. package/dist/orchestration/types.d.ts.map +1 -0
  359. package/dist/orchestration/types.js +13 -0
  360. package/dist/orchestration/types.js.map +1 -0
  361. package/dist/orchestration/voice-reply-policy.d.ts +8 -0
  362. package/dist/orchestration/voice-reply-policy.d.ts.map +1 -0
  363. package/dist/orchestration/voice-reply-policy.js +46 -0
  364. package/dist/orchestration/voice-reply-policy.js.map +1 -0
  365. package/dist/orchestration/worker-shares.d.ts +8 -0
  366. package/dist/orchestration/worker-shares.d.ts.map +1 -0
  367. package/dist/orchestration/worker-shares.js +59 -0
  368. package/dist/orchestration/worker-shares.js.map +1 -0
  369. package/dist/orchestration/workflow.d.ts +121 -0
  370. package/dist/orchestration/workflow.d.ts.map +1 -0
  371. package/dist/orchestration/workflow.js +69 -0
  372. package/dist/orchestration/workflow.js.map +1 -0
  373. package/dist/session/input-image.d.ts +10 -0
  374. package/dist/session/input-image.d.ts.map +1 -0
  375. package/dist/session/input-image.js +3 -0
  376. package/dist/session/input-image.js.map +1 -0
  377. package/dist/session/process.d.ts +15 -3
  378. package/dist/session/process.d.ts.map +1 -1
  379. package/dist/session/process.js +144 -35
  380. package/dist/session/process.js.map +1 -1
  381. package/dist/session/runtime-profile.d.ts +36 -0
  382. package/dist/session/runtime-profile.d.ts.map +1 -0
  383. package/dist/session/runtime-profile.js +63 -0
  384. package/dist/session/runtime-profile.js.map +1 -0
  385. package/dist/session/store.d.ts.map +1 -1
  386. package/dist/session/store.js +23 -1
  387. package/dist/session/store.js.map +1 -1
  388. package/dist/share/share-store.d.ts +3 -1
  389. package/dist/share/share-store.d.ts.map +1 -1
  390. package/dist/share/share-store.js +13 -2
  391. package/dist/share/share-store.js.map +1 -1
  392. package/dist/shared/line-request-order.d.ts +2 -0
  393. package/dist/shared/line-request-order.d.ts.map +1 -0
  394. package/dist/shared/line-request-order.js +16 -0
  395. package/dist/shared/line-request-order.js.map +1 -0
  396. package/dist/shared/task-elapsed.d.ts +3 -0
  397. package/dist/shared/task-elapsed.d.ts.map +1 -0
  398. package/dist/shared/task-elapsed.js +12 -0
  399. package/dist/shared/task-elapsed.js.map +1 -0
  400. package/dist/shared/task-updated-time.d.ts +3 -0
  401. package/dist/shared/task-updated-time.d.ts.map +1 -0
  402. package/dist/shared/task-updated-time.js +15 -0
  403. package/dist/shared/task-updated-time.js.map +1 -0
  404. package/dist/skills/loader.d.ts +2 -0
  405. package/dist/skills/loader.d.ts.map +1 -1
  406. package/dist/skills/loader.js.map +1 -1
  407. package/dist/telegram/chunks.d.ts +19 -0
  408. package/dist/telegram/chunks.d.ts.map +1 -0
  409. package/dist/telegram/chunks.js +129 -0
  410. package/dist/telegram/chunks.js.map +1 -0
  411. package/dist/telegram/markdown.d.ts.map +1 -1
  412. package/dist/telegram/markdown.js +18 -3
  413. package/dist/telegram/markdown.js.map +1 -1
  414. package/dist/telegram/receiver.d.ts +2 -1
  415. package/dist/telegram/receiver.d.ts.map +1 -1
  416. package/dist/telegram/receiver.js +6 -1
  417. package/dist/telegram/receiver.js.map +1 -1
  418. package/dist/types.d.ts +54 -0
  419. package/dist/types.d.ts.map +1 -1
  420. package/dist/ui/web-ui.d.ts.map +1 -1
  421. package/dist/ui/web-ui.js +31 -5
  422. package/dist/ui/web-ui.js.map +1 -1
  423. package/dist/voice/diagnostics.d.ts +29 -0
  424. package/dist/voice/diagnostics.d.ts.map +1 -0
  425. package/dist/voice/diagnostics.js +37 -0
  426. package/dist/voice/diagnostics.js.map +1 -0
  427. package/dist/voice/errors.d.ts +19 -0
  428. package/dist/voice/errors.d.ts.map +1 -0
  429. package/dist/voice/errors.js +133 -0
  430. package/dist/voice/errors.js.map +1 -0
  431. package/dist/voice/line-audio.d.ts +4 -0
  432. package/dist/voice/line-audio.d.ts.map +1 -0
  433. package/dist/voice/line-audio.js +27 -0
  434. package/dist/voice/line-audio.js.map +1 -0
  435. package/dist/voice/managed-quota.d.ts +5 -0
  436. package/dist/voice/managed-quota.d.ts.map +1 -0
  437. package/dist/voice/managed-quota.js +35 -0
  438. package/dist/voice/managed-quota.js.map +1 -0
  439. package/dist/voice/mp3.d.ts +3 -0
  440. package/dist/voice/mp3.d.ts.map +1 -0
  441. package/dist/voice/mp3.js +30 -0
  442. package/dist/voice/mp3.js.map +1 -0
  443. package/dist/voice/notes.d.ts +9 -0
  444. package/dist/voice/notes.d.ts.map +1 -0
  445. package/dist/voice/notes.js +68 -0
  446. package/dist/voice/notes.js.map +1 -0
  447. package/dist/voice/playback.d.ts +22 -0
  448. package/dist/voice/playback.d.ts.map +1 -0
  449. package/dist/voice/playback.js +52 -0
  450. package/dist/voice/playback.js.map +1 -0
  451. package/dist/voice/preview.d.ts +6 -0
  452. package/dist/voice/preview.d.ts.map +1 -0
  453. package/dist/voice/preview.js +44 -0
  454. package/dist/voice/preview.js.map +1 -0
  455. package/dist/voice/protocol.d.ts +10 -0
  456. package/dist/voice/protocol.d.ts.map +1 -0
  457. package/dist/voice/protocol.js +30 -0
  458. package/dist/voice/protocol.js.map +1 -0
  459. package/dist/voice/providers/cartesia-tts.d.ts +26 -0
  460. package/dist/voice/providers/cartesia-tts.d.ts.map +1 -0
  461. package/dist/voice/providers/cartesia-tts.js +95 -0
  462. package/dist/voice/providers/cartesia-tts.js.map +1 -0
  463. package/dist/voice/providers/deepgram-stt.d.ts +20 -0
  464. package/dist/voice/providers/deepgram-stt.d.ts.map +1 -0
  465. package/dist/voice/providers/deepgram-stt.js +66 -0
  466. package/dist/voice/providers/deepgram-stt.js.map +1 -0
  467. package/dist/voice/providers/elevenlabs-stt.d.ts +20 -0
  468. package/dist/voice/providers/elevenlabs-stt.d.ts.map +1 -0
  469. package/dist/voice/providers/elevenlabs-stt.js +92 -0
  470. package/dist/voice/providers/elevenlabs-stt.js.map +1 -0
  471. package/dist/voice/providers/elevenlabs-tts.d.ts +26 -0
  472. package/dist/voice/providers/elevenlabs-tts.d.ts.map +1 -0
  473. package/dist/voice/providers/elevenlabs-tts.js +82 -0
  474. package/dist/voice/providers/elevenlabs-tts.js.map +1 -0
  475. package/dist/voice/providers/encoded-audio-tts.d.ts +21 -0
  476. package/dist/voice/providers/encoded-audio-tts.d.ts.map +1 -0
  477. package/dist/voice/providers/encoded-audio-tts.js +175 -0
  478. package/dist/voice/providers/encoded-audio-tts.js.map +1 -0
  479. package/dist/voice/providers/fake.d.ts +39 -0
  480. package/dist/voice/providers/fake.d.ts.map +1 -0
  481. package/dist/voice/providers/fake.js +41 -0
  482. package/dist/voice/providers/fake.js.map +1 -0
  483. package/dist/voice/providers/gemini-live-stt.d.ts +21 -0
  484. package/dist/voice/providers/gemini-live-stt.d.ts.map +1 -0
  485. package/dist/voice/providers/gemini-live-stt.js +158 -0
  486. package/dist/voice/providers/gemini-live-stt.js.map +1 -0
  487. package/dist/voice/providers/gemini.d.ts +60 -0
  488. package/dist/voice/providers/gemini.d.ts.map +1 -0
  489. package/dist/voice/providers/gemini.js +124 -0
  490. package/dist/voice/providers/gemini.js.map +1 -0
  491. package/dist/voice/providers/model-ref.d.ts +9 -0
  492. package/dist/voice/providers/model-ref.d.ts.map +1 -0
  493. package/dist/voice/providers/model-ref.js +31 -0
  494. package/dist/voice/providers/model-ref.js.map +1 -0
  495. package/dist/voice/providers/openrouter.d.ts +39 -0
  496. package/dist/voice/providers/openrouter.d.ts.map +1 -0
  497. package/dist/voice/providers/openrouter.js +154 -0
  498. package/dist/voice/providers/openrouter.js.map +1 -0
  499. package/dist/voice/providers/paxalabs-stt.d.ts +12 -0
  500. package/dist/voice/providers/paxalabs-stt.d.ts.map +1 -0
  501. package/dist/voice/providers/paxalabs-stt.js +41 -0
  502. package/dist/voice/providers/paxalabs-stt.js.map +1 -0
  503. package/dist/voice/providers/paxalabs-tts.d.ts +23 -0
  504. package/dist/voice/providers/paxalabs-tts.d.ts.map +1 -0
  505. package/dist/voice/providers/paxalabs-tts.js +80 -0
  506. package/dist/voice/providers/paxalabs-tts.js.map +1 -0
  507. package/dist/voice/providers/recorded-stt.d.ts +34 -0
  508. package/dist/voice/providers/recorded-stt.d.ts.map +1 -0
  509. package/dist/voice/providers/recorded-stt.js +59 -0
  510. package/dist/voice/providers/recorded-stt.js.map +1 -0
  511. package/dist/voice/providers/registry.d.ts +10 -0
  512. package/dist/voice/providers/registry.d.ts.map +1 -0
  513. package/dist/voice/providers/registry.js +77 -0
  514. package/dist/voice/providers/registry.js.map +1 -0
  515. package/dist/voice/providers/socket.d.ts +10 -0
  516. package/dist/voice/providers/socket.d.ts.map +1 -0
  517. package/dist/voice/providers/socket.js +91 -0
  518. package/dist/voice/providers/socket.js.map +1 -0
  519. package/dist/voice/providers/upstream.d.ts +9 -0
  520. package/dist/voice/providers/upstream.d.ts.map +1 -0
  521. package/dist/voice/providers/upstream.js +51 -0
  522. package/dist/voice/providers/upstream.js.map +1 -0
  523. package/dist/voice/providers/voice-catalog.d.ts +17 -0
  524. package/dist/voice/providers/voice-catalog.d.ts.map +1 -0
  525. package/dist/voice/providers/voice-catalog.js +167 -0
  526. package/dist/voice/providers/voice-catalog.js.map +1 -0
  527. package/dist/voice/queue.d.ts +2 -0
  528. package/dist/voice/queue.d.ts.map +1 -0
  529. package/dist/voice/queue.js +6 -0
  530. package/dist/voice/queue.js.map +1 -0
  531. package/dist/voice/session.d.ts +86 -0
  532. package/dist/voice/session.d.ts.map +1 -0
  533. package/dist/voice/session.js +464 -0
  534. package/dist/voice/session.js.map +1 -0
  535. package/dist/voice/turn-manager.d.ts +27 -0
  536. package/dist/voice/turn-manager.d.ts.map +1 -0
  537. package/dist/voice/turn-manager.js +75 -0
  538. package/dist/voice/turn-manager.js.map +1 -0
  539. package/dist/voice/types.d.ts +78 -0
  540. package/dist/voice/types.d.ts.map +1 -0
  541. package/dist/voice/types.js +18 -0
  542. package/dist/voice/types.js.map +1 -0
  543. package/dist/voice/wav.d.ts +2 -0
  544. package/dist/voice/wav.d.ts.map +1 -0
  545. package/dist/voice/wav.js +21 -0
  546. package/dist/voice/wav.js.map +1 -0
  547. package/dist/wechat/ilink-client.d.ts +207 -0
  548. package/dist/wechat/ilink-client.d.ts.map +1 -0
  549. package/dist/wechat/ilink-client.js +660 -0
  550. package/dist/wechat/ilink-client.js.map +1 -0
  551. package/dist/wechat/manager.d.ts +93 -0
  552. package/dist/wechat/manager.d.ts.map +1 -0
  553. package/dist/wechat/manager.js +409 -0
  554. package/dist/wechat/manager.js.map +1 -0
  555. package/dist/whatsapp/manager.d.ts.map +1 -1
  556. package/dist/whatsapp/manager.js +51 -1
  557. package/dist/whatsapp/manager.js.map +1 -1
  558. package/mcp/capability-catalog.ts +206 -0
  559. package/mcp/modules.ts +56 -0
  560. package/mcp/server.ts +18 -35
  561. package/mcp/tools/browser/module.ts +1 -1
  562. package/mcp/tools/browser/skills/open-browser/SKILL.md +5 -3
  563. package/mcp/tools/discord/commands.ts +17 -1
  564. package/mcp/tools/discord/inbound.ts +11 -0
  565. package/mcp/tools/discord/module.ts +42 -2
  566. package/mcp/tools/discord/receiver-server.ts +10 -0
  567. package/mcp/tools/discord/types.ts +4 -1
  568. package/mcp/tools/image/module.ts +3 -1
  569. package/mcp/tools/receiver-spool.test.ts +28 -0
  570. package/mcp/tools/receiver-spool.ts +56 -0
  571. package/mcp/tools/share-file/module.ts +9 -1
  572. package/mcp/tools/shared/share-client.ts +19 -0
  573. package/mcp/tools/tasks/module.ts +35 -0
  574. package/mcp/tools/telegram/media-group.ts +21 -0
  575. package/mcp/tools/telegram/receiver-server.ts +232 -11
  576. package/mcp/tools/telegram/selection-confirmation.ts +20 -0
  577. package/mcp/tools/telegram/task-browser.ts +117 -0
  578. package/mcp/tools/telegram/task-detail.ts +36 -0
  579. package/mcp/tools/telegram/task-elapsed.ts +1 -0
  580. package/mcp/tools/telegram/typing.ts +6 -116
  581. package/mcp/tools/video/module.ts +1 -1
  582. package/mcp/tools/wechat/client.ts +49 -0
  583. package/mcp/tools/wechat/module.ts +88 -0
  584. package/mcp/types.ts +5 -0
  585. package/package.json +2 -1
  586. package/resource/claude_gateway.jpeg +0 -0
  587. package/scripts/orchestration/bench-store.cjs +30 -0
  588. package/scripts/orchestration/inspect.cjs +16 -0
  589. package/scripts/orchestration/probe-profile.cjs +67 -0
  590. package/scripts/orchestration/reconcile.cjs +21 -0
  591. package/scripts/orchestration/smoke-elevenlabs.cjs +90 -0
  592. package/scripts/orchestration/smoke-media.cjs +70 -0
  593. package/scripts/orchestration/smoke-text.cjs +101 -0
  594. package/scripts/orchestration/smoke-vision.cjs +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mp3.d.ts","sourceRoot":"","sources":["../../src/voice/mp3.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,KAAK,EAAC,UAAU,GAAE,MAAM,CAiBrD"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mp3DurationMs = mp3DurationMs;
4
+ /** Duration of bounded MPEG Layer III output. Count complete frames, skipping ID3 metadata. */
5
+ function mp3DurationMs(bytes) {
6
+ let offset = 0, seconds = 0, frames = 0;
7
+ if (bytes.length >= 10 && bytes[0] === 73 && bytes[1] === 68 && bytes[2] === 51) {
8
+ offset = 10 + ((bytes[6] & 127) * 2097152 + (bytes[7] & 127) * 16384 + (bytes[8] & 127) * 128 + (bytes[9] & 127)) + (bytes[5] & 16 ? 10 : 0);
9
+ }
10
+ while (offset + 4 <= bytes.length) {
11
+ const a = bytes[offset], b = bytes[offset + 1], c = bytes[offset + 2];
12
+ const version = (b >> 3) & 3, layer = (b >> 1) & 3, rate = (c >> 2) & 3, index = c >> 4;
13
+ if (a !== 255 || (b & 224) !== 224 || version === 1 || layer !== 1 || rate === 3 || index === 0 || index === 15) {
14
+ offset++;
15
+ continue;
16
+ }
17
+ const bitrates = version === 3 ? [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320] : [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];
18
+ const sampleRate = [44100, 48000, 32000][rate] / (version === 3 ? 1 : version === 2 ? 2 : 4);
19
+ const size = Math.floor((version === 3 ? 144 : 72) * bitrates[index] * 1000 / sampleRate) + ((c >> 1) & 1);
20
+ if (offset + size > bytes.length)
21
+ break;
22
+ seconds += (version === 3 ? 1152 : 576) / sampleRate;
23
+ frames++;
24
+ offset += size;
25
+ }
26
+ if (!frames)
27
+ throw Error('INVALID_MP3');
28
+ return Math.ceil(seconds * 1000);
29
+ }
30
+ //# sourceMappingURL=mp3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mp3.js","sourceRoot":"","sources":["../../src/voice/mp3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** Uploaded voice notes use the file API, not a realtime PCM socket. */
2
+ export declare function transcribeVoiceNote(path: string, options: {
3
+ provider: string;
4
+ model: string;
5
+ language?: string;
6
+ }, request?: typeof fetch): Promise<string>;
7
+ /** Keep provider diagnostics consistent across chat channels and browser voice. */
8
+ export declare function voiceNoteFailureMessage(code: string): string;
9
+ //# sourceMappingURL=notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../src/voice/notes.ts"],"names":[],"mappings":"AAWA,wEAAwE;AACxE,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BvK;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW5D"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transcribeVoiceNote = transcribeVoiceNote;
4
+ exports.voiceNoteFailureMessage = voiceNoteFailureMessage;
5
+ const managed_quota_1 = require("./managed-quota");
6
+ const errors_1 = require("./errors");
7
+ const model_ref_1 = require("./providers/model-ref");
8
+ const openrouter_1 = require("./providers/openrouter");
9
+ const gemini_1 = require("./providers/gemini");
10
+ const paxalabs_stt_1 = require("./providers/paxalabs-stt");
11
+ const upstream_1 = require("./providers/upstream");
12
+ const promises_1 = require("fs/promises");
13
+ const path_1 = require("path");
14
+ const types_1 = require("../orchestration/types");
15
+ /** Uploaded voice notes use the file API, not a realtime PCM socket. */
16
+ async function transcribeVoiceNote(path, options, request = fetch) {
17
+ options = { ...options, provider: (0, model_ref_1.canonicalVoiceProvider)(options.provider), model: (0, model_ref_1.nativeVoiceModel)(options.provider, options.model) };
18
+ await (0, managed_quota_1.requireManagedVoiceCredit)(options.provider, request);
19
+ if (['paxalabs', 'upstream:paxalabs', 'managed:paxalabs', 'gemini', 'upstream:gemini', 'openrouter', 'upstream:openrouter'].includes(options.provider)) {
20
+ const info = await (0, promises_1.stat)(path);
21
+ if (!info.isFile() || !info.size || info.size > 25 * 1024 * 1024)
22
+ throw new types_1.OrchestrationError('VOICE_NOTE_SIZE_LIMIT');
23
+ const text = await (options.provider.includes('gemini') ? gemini_1.transcribeGemini : options.provider.includes('openrouter') ? openrouter_1.transcribeOpenRouter : paxalabs_stt_1.transcribePaxa)(await (0, promises_1.readFile)(path), { ...options, signal: AbortSignal.timeout(60000) }, request);
24
+ if (!text)
25
+ throw new types_1.OrchestrationError('VOICE_NOTE_NO_TRANSCRIPT');
26
+ return text;
27
+ }
28
+ if (!['elevenlabs', 'upstream:elevenlabs', 'managed:elevenlabs'].includes(options.provider))
29
+ throw new types_1.OrchestrationError('VOICE_NOTE_PROVIDER_UNSUPPORTED');
30
+ const upstream = options.provider === 'managed:elevenlabs' ? (0, upstream_1.upstreamVoiceConnection)('elevenlabs', true) : options.provider === 'upstream:elevenlabs' ? (0, upstream_1.upstreamVoiceConnection)() : undefined;
31
+ const key = upstream?.key || process.env.ELEVENLABS_API_KEY;
32
+ if (!key)
33
+ throw new types_1.OrchestrationError('STT_CREDENTIALS_MISSING');
34
+ const info = await (0, promises_1.stat)(path);
35
+ if (!info.isFile() || !info.size || info.size > 20 * 1024 * 1024)
36
+ throw new types_1.OrchestrationError('VOICE_NOTE_SIZE_LIMIT');
37
+ const data = new FormData();
38
+ data.set('model_id', options.model);
39
+ data.set('file', new Blob([new Uint8Array(await (0, promises_1.readFile)(path))]), (0, path_1.basename)(path));
40
+ data.set('tag_audio_events', 'false');
41
+ data.set('diarize', 'false');
42
+ if (options.language)
43
+ data.set('language_code', options.language);
44
+ const response = await (0, errors_1.voiceProviderRequest)(upstream ? new URL('speech-to-text', upstream.base).toString() : 'https://api.elevenlabs.io/v1/speech-to-text', {
45
+ method: 'POST', headers: upstream ? { Authorization: `Bearer ${key}` } : { 'xi-api-key': key }, body: data, signal: AbortSignal.timeout(60000), redirect: 'error',
46
+ }, request);
47
+ if (!response.ok)
48
+ throw await (0, errors_1.providerHttpError)('STT', response);
49
+ const result = await response.json();
50
+ if (typeof result.text !== 'string' || !result.text.trim() || Buffer.byteLength(result.text) > 60000)
51
+ throw new types_1.OrchestrationError('VOICE_NOTE_NO_TRANSCRIPT');
52
+ return result.text.trim();
53
+ }
54
+ /** Keep provider diagnostics consistent across chat channels and browser voice. */
55
+ function voiceNoteFailureMessage(code) {
56
+ const local = {
57
+ VOICE_NOTE_NO_TRANSCRIPT: 'No speech was detected in the voice note. Please record it again or type your message.',
58
+ VOICE_NOTE_SIZE_LIMIT: 'The voice note is empty or exceeds the provider file size limit. Please send a shorter recording.',
59
+ VOICE_NOTES_DISABLED: 'Voice message transcription is disabled for this agent.',
60
+ VOICE_NOTE_ATTACHMENT_MISSING: 'The voice note attachment is missing. Please resend it or type your message.',
61
+ VOICE_NOTE_PROVIDER_UNSUPPORTED: 'The selected provider does not support voice message transcription. Check the voice message STT settings.',
62
+ VOICE_NOTE_INTERRUPTED: 'Voice note transcription was interrupted. Please resend it or type your message.',
63
+ };
64
+ if (Object.prototype.hasOwnProperty.call(local, code))
65
+ return local[code];
66
+ return `Voice note could not be transcribed. ${(0, errors_1.describeVoiceError)(code).message}`;
67
+ }
68
+ //# sourceMappingURL=notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/voice/notes.ts"],"names":[],"mappings":";;AAYA,kDA4BC;AAGD,0DAWC;AAtDD,mDAA4D;AAC5D,qCAAuF;AACvF,qDAAiF;AACjF,uDAA8D;AAC9D,+CAAsD;AACtD,2DAA0D;AAC1D,mDAA+D;AAC/D,0CAA6C;AAC7C,+BAAgC;AAChC,kDAA4D;AAE5D,wEAAwE;AACjE,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAA+D,EAAE,UAAwB,KAAK;IACpJ,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAA,kCAAsB,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAA,4BAAgB,EAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IACvI,MAAM,IAAA,yCAAyB,EAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvJ,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,0BAAkB,CAAC,uBAAuB,CAAC,CAAC;QACxH,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,yBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,iCAAoB,CAAC,CAAC,CAAC,6BAAc,CAAC,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACjP,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,0BAAkB,CAAC,0BAA0B,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,EAAC,qBAAqB,EAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,0BAAkB,CAAC,iCAAiC,CAAC,CAAC;IAC3J,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,oBAAoB,CAAC,CAAC,CAAC,IAAA,kCAAuB,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,qBAAqB,CAAC,CAAC,CAAC,IAAA,kCAAuB,GAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9L,MAAM,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC5D,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,0BAAkB,CAAC,yBAAyB,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;QAAE,MAAM,IAAI,0BAAkB,CAAC,uBAAuB,CAAC,CAAC;IACxH,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAA,eAAQ,EAAC,IAAI,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,QAAQ;QAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAoB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,6CAA6C,EAAE;QAC1J,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO;KAClK,EAAE,OAAO,CAAC,CAAC;IACZ,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,MAAM,IAAA,0BAAiB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;IAC3D,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;QAAE,MAAM,IAAI,0BAAkB,CAAC,0BAA0B,CAAC,CAAC;IAC/J,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,mFAAmF;AACnF,SAAgB,uBAAuB,CAAC,IAAY;IAClD,MAAM,KAAK,GAA2B;QACpC,wBAAwB,EAAE,wFAAwF;QAClH,qBAAqB,EAAE,mGAAmG;QAC1H,oBAAoB,EAAE,yDAAyD;QAC/E,6BAA6B,EAAE,8EAA8E;QAC7G,+BAA+B,EAAE,2GAA2G;QAC5I,sBAAsB,EAAE,kFAAkF;KAC3G,CAAC;IACF,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,wCAAwC,IAAA,2BAAkB,EAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { TtsAudioChunk } from './types';
2
+ export declare class VoicePlayback {
3
+ readonly generation: `${string}-${string}-${string}-${string}-${string}`;
4
+ private epochValue;
5
+ private controller;
6
+ private sentSamples;
7
+ private playedSamples;
8
+ private lastChunkSeq;
9
+ get epoch(): number;
10
+ get signal(): AbortSignal;
11
+ clear(incomingEpoch?: number): number;
12
+ accept(epoch: number, chunk: TtsAudioChunk): boolean;
13
+ progress(epoch: number, samples: number): void;
14
+ snapshot(): {
15
+ generation: string;
16
+ epoch: number;
17
+ generatedSamples: number;
18
+ playedSamples: number;
19
+ };
20
+ close(): void;
21
+ }
22
+ //# sourceMappingURL=playback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playback.d.ts","sourceRoot":"","sources":["../../src/voice/playback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAc,MAAM,SAAS,CAAC;AAEpD,qBAAa,aAAa;IACxB,QAAQ,CAAC,UAAU,sDAAgB;IACnC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAM;IAC1B,IAAI,KAAK,IAAI,MAAM,CAA4B;IAC/C,IAAI,MAAM,IAAI,WAAW,CAAmC;IAC5D,KAAK,CAAC,aAAa,SAAsB,GAAG,MAAM;IAOlD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO;IAMpD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9C,QAAQ,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAGlG,KAAK,IAAI,IAAI;CACd"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoicePlayback = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const types_1 = require("./types");
6
+ class VoicePlayback {
7
+ constructor() {
8
+ this.generation = (0, crypto_1.randomUUID)();
9
+ this.epochValue = 0;
10
+ this.controller = new AbortController();
11
+ this.sentSamples = 0;
12
+ this.playedSamples = 0;
13
+ this.lastChunkSeq = -1;
14
+ }
15
+ get epoch() { return this.epochValue; }
16
+ get signal() { return this.controller.signal; }
17
+ clear(incomingEpoch = this.epochValue + 1) {
18
+ if (!Number.isSafeInteger(incomingEpoch) || incomingEpoch < 0 || incomingEpoch > 0xffffffff)
19
+ throw new types_1.VoiceError('INVALID_EPOCH');
20
+ if (incomingEpoch <= this.epochValue)
21
+ return this.epochValue;
22
+ this.controller.abort();
23
+ this.controller = new AbortController();
24
+ this.epochValue = incomingEpoch;
25
+ this.sentSamples = 0;
26
+ this.playedSamples = 0;
27
+ this.lastChunkSeq = -1;
28
+ return this.epochValue;
29
+ }
30
+ accept(epoch, chunk) {
31
+ if (epoch !== this.epochValue)
32
+ return false;
33
+ if (chunk.chunkSeq !== this.lastChunkSeq + 1 || chunk.bytes.length % 2)
34
+ throw new types_1.VoiceError('INVALID_AUDIO_CHUNK');
35
+ this.lastChunkSeq = chunk.chunkSeq;
36
+ this.sentSamples += chunk.bytes.length / 2;
37
+ return true;
38
+ }
39
+ progress(epoch, samples) {
40
+ if (epoch !== this.epochValue)
41
+ return;
42
+ if (!Number.isSafeInteger(samples) || samples < this.playedSamples || samples > this.sentSamples)
43
+ throw new types_1.VoiceError('INVALID_PLAYBACK_PROGRESS');
44
+ this.playedSamples = samples;
45
+ }
46
+ snapshot() {
47
+ return { generation: this.generation, epoch: this.epochValue, generatedSamples: this.sentSamples, playedSamples: this.playedSamples };
48
+ }
49
+ close() { this.controller.abort(); }
50
+ }
51
+ exports.VoicePlayback = VoicePlayback;
52
+ //# sourceMappingURL=playback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playback.js","sourceRoot":"","sources":["../../src/voice/playback.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AACpC,mCAAoD;AAEpD,MAAa,aAAa;IAA1B;QACW,eAAU,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC3B,eAAU,GAAG,CAAC,CAAC;QACf,eAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,gBAAW,GAAG,CAAC,CAAC;QAChB,kBAAa,GAAG,CAAC,CAAC;QAClB,iBAAY,GAAG,CAAC,CAAC,CAAC;IAyB5B,CAAC;IAxBC,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,IAAI,MAAM,KAAkB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,UAAU;YAAE,MAAM,IAAI,kBAAU,CAAC,eAAe,CAAC,CAAC;QACnI,IAAI,aAAa,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;QAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACtG,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,KAAa,EAAE,KAAoB;QACxC,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,kBAAU,CAAC,qBAAqB,CAAC,CAAC;QACpH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;QAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,CAAC,KAAa,EAAE,OAAe;QACrC,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO;QACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,kBAAU,CAAC,2BAA2B,CAAC,CAAC;QACpJ,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IACD,QAAQ;QACN,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IACxI,CAAC;IACD,KAAK,KAAW,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC3C;AA/BD,sCA+BC"}
@@ -0,0 +1,6 @@
1
+ /** Fixed samples avoid accepting arbitrary prompts at the preview endpoint. */
2
+ export declare const VOICE_PREVIEW_TEXT: Record<string, string>;
3
+ /** Documented fallback when a restricted provider key cannot read /models. */
4
+ export declare function voicePreviewLanguages(provider: string, model: string): string[];
5
+ export declare function voicePreviewError(error: unknown): string;
6
+ //# sourceMappingURL=preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/voice/preview.ts"],"names":[],"mappings":"AACA,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBrD,CAAC;AAEF,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAW/E;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAA8C"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VOICE_PREVIEW_TEXT = void 0;
4
+ exports.voicePreviewLanguages = voicePreviewLanguages;
5
+ exports.voicePreviewError = voicePreviewError;
6
+ const model_ref_1 = require("./providers/model-ref");
7
+ /** Fixed samples avoid accepting arbitrary prompts at the preview endpoint. */
8
+ exports.VOICE_PREVIEW_TEXT = {
9
+ en: 'Hello! This is a preview of my voice.',
10
+ th: 'สวัสดี นี่คือตัวอย่างเสียงของฉัน ยินดีที่ได้รู้จัก',
11
+ ar: 'مرحبًا! هذه عينة من صوتي. يسعدني لقاؤك.',
12
+ de: 'Hallo! Dies ist eine Hörprobe meiner Stimme. Schön, dich kennenzulernen.',
13
+ es: '¡Hola! Esta es una muestra de mi voz. Encantado de conocerte.',
14
+ fr: 'Bonjour ! Voici un aperçu de ma voix. Ravi de vous rencontrer.',
15
+ hi: 'नमस्ते! यह मेरी आवाज़ का एक नमूना है। आपसे मिलकर खुशी हुई।',
16
+ id: 'Halo! Ini adalah contoh suara saya. Senang bertemu dengan Anda.',
17
+ it: 'Ciao! Questa è un’anteprima della mia voce. Piacere di conoscerti.',
18
+ ja: 'こんにちは。これは私の声のサンプルです。よろしくお願いします。',
19
+ ko: '안녕하세요! 제 목소리 샘플입니다. 만나서 반갑습니다.',
20
+ pt: 'Olá! Esta é uma amostra da minha voz. Prazer em conhecer você.',
21
+ ru: 'Здравствуйте! Это пример моего голоса. Приятно познакомиться.',
22
+ vi: 'Xin chào! Đây là bản nghe thử giọng nói của tôi. Rất vui được gặp bạn.',
23
+ zh: '你好!这是我的声音示例。很高兴认识你。',
24
+ };
25
+ /** Documented fallback when a restricted provider key cannot read /models. */
26
+ function voicePreviewLanguages(provider, model) {
27
+ provider = (0, model_ref_1.canonicalVoiceProvider)(provider);
28
+ const native = model.split('/').pop();
29
+ const languages = Object.keys(exports.VOICE_PREVIEW_TEXT);
30
+ if (provider.includes('paxalabs'))
31
+ return ['en', 'th'];
32
+ if (provider === 'elevenlabs' || provider === 'upstream:elevenlabs' || provider === 'managed:elevenlabs') {
33
+ if (['eleven_flash_v2', 'eleven_turbo_v2', 'eleven_monolingual_v1'].includes(native))
34
+ return ['en'];
35
+ if (['eleven_flash_v2_5', 'eleven_turbo_v2_5'].includes(native))
36
+ return languages.filter(language => language !== 'th');
37
+ if (native === 'eleven_multilingual_v2')
38
+ return languages.filter(language => !['th', 'vi'].includes(language));
39
+ }
40
+ return languages;
41
+ }
42
+ const errors_1 = require("./errors");
43
+ function voicePreviewError(error) { return (0, errors_1.describeVoiceError)(error).message; }
44
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/voice/preview.ts"],"names":[],"mappings":";;;AAqBA,sDAWC;AAGD,8CAAuG;AAnCvG,qDAA+D;AAC/D,+EAA+E;AAClE,QAAA,kBAAkB,GAA2B;IACxD,EAAE,EAAE,uCAAuC;IAC3C,EAAE,EAAE,oDAAoD;IACxD,EAAE,EAAE,yCAAyC;IAC7C,EAAE,EAAE,0EAA0E;IAC9E,EAAE,EAAE,+DAA+D;IACnE,EAAE,EAAE,gEAAgE;IACpE,EAAE,EAAE,4DAA4D;IAChE,EAAE,EAAE,iEAAiE;IACrE,EAAE,EAAE,oEAAoE;IACxE,EAAE,EAAE,iCAAiC;IACrC,EAAE,EAAE,gCAAgC;IACpC,EAAE,EAAE,gEAAgE;IACpE,EAAE,EAAE,+DAA+D;IACnE,EAAE,EAAE,wEAAwE;IAC5E,EAAE,EAAE,qBAAqB;CAC1B,CAAC;AAEF,8EAA8E;AAC9E,SAAgB,qBAAqB,CAAC,QAAgB,EAAE,KAAa;IACnE,QAAQ,GAAG,IAAA,kCAAsB,EAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,0BAAkB,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,qBAAqB,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;QACzG,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACpG,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QACxH,IAAI,MAAM,KAAK,wBAAwB;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qCAA8C;AAC9C,SAAgB,iBAAiB,CAAC,KAAc,IAAY,OAAO,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface VoiceFrame {
2
+ generation: string;
3
+ epoch: number;
4
+ sequence: number;
5
+ segmentId: string;
6
+ audio: Uint8Array;
7
+ }
8
+ export declare function encodeVoiceFrame(frame: VoiceFrame): Buffer;
9
+ export declare function decodeVoiceFrame(bytes: Buffer): VoiceFrame;
10
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/voice/protocol.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;CAAE;AAC1H,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAM1D;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAG1D"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeVoiceFrame = encodeVoiceFrame;
4
+ exports.decodeVoiceFrame = decodeVoiceFrame;
5
+ const types_1 = require("./types");
6
+ const HEADER_BYTES = 44;
7
+ function uuidBytes(value) {
8
+ if (!/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(value))
9
+ throw new types_1.VoiceError('INVALID_FRAME_ID');
10
+ return Buffer.from(value.replace(/-/g, ''), 'hex');
11
+ }
12
+ function uuid(buffer) { const h = buffer.toString('hex'); return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`; }
13
+ function encodeVoiceFrame(frame) {
14
+ if (!Number.isInteger(frame.epoch) || frame.epoch < 0 || frame.epoch > 0xffffffff || !Number.isInteger(frame.sequence) || frame.sequence < 0 || frame.sequence > 0xffffffff)
15
+ throw new types_1.VoiceError('INVALID_FRAME_SEQUENCE');
16
+ const result = Buffer.alloc(HEADER_BYTES + frame.audio.length);
17
+ result.write('CGV1');
18
+ uuidBytes(frame.generation).copy(result, 4);
19
+ result.writeUInt32BE(frame.epoch, 20);
20
+ result.writeUInt32BE(frame.sequence, 24);
21
+ uuidBytes(frame.segmentId).copy(result, 28);
22
+ Buffer.from(frame.audio).copy(result, HEADER_BYTES);
23
+ return result;
24
+ }
25
+ function decodeVoiceFrame(bytes) {
26
+ if (bytes.length < HEADER_BYTES || bytes.length > HEADER_BYTES + 32000 || bytes.toString('ascii', 0, 4) !== 'CGV1' || (bytes.length - HEADER_BYTES) % 2)
27
+ throw new types_1.VoiceError('INVALID_AUDIO_FRAME');
28
+ return { generation: uuid(bytes.subarray(4, 20)), epoch: bytes.readUInt32BE(20), sequence: bytes.readUInt32BE(24), segmentId: uuid(bytes.subarray(28, 44)), audio: bytes.subarray(HEADER_BYTES) };
29
+ }
30
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/voice/protocol.ts"],"names":[],"mappings":";;AASA,4CAMC;AACD,4CAGC;AAnBD,mCAAqC;AAErC,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,CAAC,iEAAiE,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,kBAAU,CAAC,kBAAkB,CAAC,CAAC;IAC7H,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AACD,SAAS,IAAI,CAAC,MAAc,IAAY,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE7K,SAAgB,gBAAgB,CAAC,KAAiB;IAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,UAAU;QAAE,MAAM,IAAI,kBAAU,CAAC,wBAAwB,CAAC,CAAC;IAC5N,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnJ,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,GAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,kBAAU,CAAC,qBAAqB,CAAC,CAAC;IACrM,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;AACpM,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { TtsProvider, TtsAudioChunk } from '../types';
2
+ import { SocketFactory } from './socket';
3
+ export declare class CartesiaTts implements TtsProvider {
4
+ private readonly key;
5
+ private readonly model;
6
+ private readonly connect;
7
+ private readonly request;
8
+ readonly id = "cartesia";
9
+ readonly capabilities: {
10
+ textStreaming: boolean;
11
+ wordAlignment: boolean;
12
+ outputFormats: import("../types").AudioFormat[];
13
+ };
14
+ constructor(key: string, model: string, connect?: SocketFactory, request?: typeof fetch);
15
+ synthesizeFile(options: {
16
+ text: string;
17
+ voiceId: string;
18
+ signal: AbortSignal;
19
+ }): Promise<{
20
+ bytes: Uint8Array;
21
+ mime: 'audio/mpeg';
22
+ name: string;
23
+ }>;
24
+ synthesize(options: Parameters<TtsProvider['synthesize']>[0]): AsyncIterable<TtsAudioChunk>;
25
+ }
26
+ //# sourceMappingURL=cartesia-tts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cartesia-tts.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/cartesia-tts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,WAAW,EAAE,aAAa,EAAmC,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAsB,aAAa,EAAE,MAAM,UAAU,CAAC;AAE7D,qBAAa,WAAY,YAAW,WAAW;IAGjC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAsC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFhK,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,YAAY;;;;MAAyE;gBACjE,GAAG,EAAE,MAAM,EAAmB,KAAK,EAAE,MAAM,EAAmB,OAAO,GAAE,aAAkC,EAAmB,OAAO,GAAE,OAAO,KAAa;IAChL,cAAc,CAAC,OAAO,EAAE;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,MAAM,EAAC,WAAW,CAAA;KAAC,GAAG,OAAO,CAAC;QAAC,KAAK,EAAC,UAAU,CAAC;QAAA,IAAI,EAAC,YAAY,CAAC;QAAA,IAAI,EAAC,MAAM,CAAA;KAAC,CAAC;IAclI,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC;CA0BnG"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CartesiaTts = void 0;
4
+ const errors_1 = require("../errors");
5
+ const crypto_1 = require("crypto");
6
+ const types_1 = require("../types");
7
+ const socket_1 = require("./socket");
8
+ class CartesiaTts {
9
+ constructor(key, model, connect = socket_1.openProviderSocket, request = fetch) {
10
+ this.key = key;
11
+ this.model = model;
12
+ this.connect = connect;
13
+ this.request = request;
14
+ this.id = 'cartesia';
15
+ this.capabilities = { textStreaming: true, wordAlignment: false, outputFormats: [types_1.PCM16] };
16
+ }
17
+ async synthesizeFile(options) {
18
+ if (!this.key)
19
+ throw new types_1.VoiceError('TTS_CREDENTIALS_MISSING');
20
+ const response = await (0, errors_1.voiceProviderRequest)('https://api.cartesia.ai/tts/bytes', {
21
+ method: 'POST', headers: { Authorization: `Bearer ${this.key}`, 'Cartesia-Version': '2026-08-14', 'Content-Type': 'application/json' }, signal: options.signal,
22
+ body: JSON.stringify({ model_id: this.model, transcript: options.text, voice: options.voiceId, output_format: { container: 'mp3', sample_rate: 44100, bit_rate: 128000 } }),
23
+ }, this.request);
24
+ if (!response.ok)
25
+ throw await (0, errors_1.providerHttpError)('TTS', response);
26
+ if (!response.body)
27
+ throw new types_1.VoiceError('TTS_INCOMPLETE');
28
+ const reader = response.body.getReader(), chunks = [];
29
+ let size = 0;
30
+ try {
31
+ while (true) {
32
+ const chunk = await reader.read();
33
+ if (chunk.done)
34
+ break;
35
+ size += chunk.value.length;
36
+ if (size > 5 * 1024 * 1024)
37
+ throw new types_1.VoiceError('TTS_AUDIO_TOO_LARGE');
38
+ chunks.push(chunk.value);
39
+ }
40
+ }
41
+ finally {
42
+ await reader.cancel().catch(() => { });
43
+ }
44
+ if (!size || options.signal.aborted)
45
+ throw new types_1.VoiceError('TTS_INCOMPLETE');
46
+ return { bytes: Buffer.concat(chunks), mime: 'audio/mpeg', name: 'reply.mp3' };
47
+ }
48
+ async *synthesize(options) {
49
+ (0, types_1.validateAudioFormat)(options.outputFormat);
50
+ if (options.outputFormat.sampleRate !== 16000)
51
+ throw new types_1.VoiceError('UNSUPPORTED_AUDIO_FORMAT');
52
+ if (!this.key)
53
+ throw new types_1.VoiceError('TTS_CREDENTIALS_MISSING');
54
+ const socket = await this.connect('wss://api.cartesia.ai/tts/websocket?cartesia_version=2026-08-14', { 'X-API-Key': this.key }, options.signal);
55
+ const contextId = (0, crypto_1.randomUUID)();
56
+ const request = (transcript, more) => ({ model_id: this.model, transcript, voice: options.voiceId,
57
+ context_id: contextId, language: options.language ?? 'en', output_format: { container: 'raw', encoding: 'pcm_s16le', sample_rate: 16000 }, continue: more });
58
+ let sendError, done = false;
59
+ const sending = (async () => {
60
+ for await (const text of options.text) {
61
+ if (options.signal.aborted)
62
+ return;
63
+ await socket.send(request(text, true));
64
+ }
65
+ await socket.send(request('', false));
66
+ })().catch(error => { sendError = error; socket.close(); });
67
+ let chunkSeq = 0;
68
+ try {
69
+ for await (const message of socket.messages) {
70
+ if (options.signal.aborted)
71
+ return;
72
+ if (message.context_id && message.context_id !== contextId)
73
+ continue;
74
+ if (message.type === 'error')
75
+ throw (0, errors_1.providerVoiceError)('TTS', undefined, message);
76
+ if (message.type === 'chunk' && typeof message.data === 'string')
77
+ yield { bytes: Buffer.from(message.data, 'base64'), format: options.outputFormat, chunkSeq: chunkSeq++ };
78
+ if (message.type === 'done') {
79
+ done = true;
80
+ break;
81
+ }
82
+ }
83
+ await sending;
84
+ if (sendError)
85
+ throw sendError;
86
+ if (!done && !options.signal.aborted)
87
+ throw new types_1.VoiceError('TTS_INCOMPLETE');
88
+ }
89
+ finally {
90
+ socket.close();
91
+ }
92
+ }
93
+ }
94
+ exports.CartesiaTts = CartesiaTts;
95
+ //# sourceMappingURL=cartesia-tts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cartesia-tts.js","sourceRoot":"","sources":["../../../src/voice/providers/cartesia-tts.ts"],"names":[],"mappings":";;;AAAA,sCAAwF;AACxF,mCAAoC;AACpC,oCAA8F;AAC9F,qCAA6D;AAE7D,MAAa,WAAW;IAGtB,YAA6B,GAAW,EAAmB,KAAa,EAAmB,UAAyB,2BAAkB,EAAmB,UAAwB,KAAK;QAAzJ,QAAG,GAAH,GAAG,CAAQ;QAAmB,UAAK,GAAL,KAAK,CAAQ;QAAmB,YAAO,GAAP,OAAO,CAAoC;QAAmB,YAAO,GAAP,OAAO,CAAsB;QAF7K,OAAE,GAAG,UAAU,CAAC;QAChB,iBAAY,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,aAAK,CAAC,EAAE,CAAC;IAC2F,CAAC;IAC1L,KAAK,CAAC,cAAc,CAAC,OAAwD;QAC3E,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,kBAAU,CAAC,yBAAyB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAC,MAAM,IAAA,6BAAoB,EAAC,mCAAmC,EAAC;YAC5E,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,EAAC,aAAa,EAAC,UAAU,IAAI,CAAC,GAAG,EAAE,EAAC,kBAAkB,EAAC,YAAY,EAAC,cAAc,EAAC,kBAAkB,EAAC,EAAC,MAAM,EAAC,OAAO,CAAC,MAAM;YAClJ,IAAI,EAAC,IAAI,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAC,IAAI,CAAC,KAAK,EAAC,UAAU,EAAC,OAAO,CAAC,IAAI,EAAC,KAAK,EAAC,OAAO,CAAC,OAAO,EAAC,aAAa,EAAC,EAAC,SAAS,EAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,EAAC,CAAC;SAC3J,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,MAAM,IAAA,0BAAiB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAAE,MAAM,IAAI,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,GAAc,EAAE,CAAC;QAAA,IAAI,IAAI,GAAC,CAAC,CAAC;QAC1E,IAAI,CAAC;YAAC,OAAM,IAAI,EAAC,CAAC;gBAAA,MAAM,KAAK,GAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAAA,IAAG,KAAK,CAAC,IAAI;oBAAC,MAAM;gBAAA,IAAI,IAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAA,IAAG,IAAI,GAAC,CAAC,GAAC,IAAI,GAAC,IAAI;oBAAC,MAAM,IAAI,kBAAU,CAAC,qBAAqB,CAAC,CAAC;gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAAA,CAAC;QAAC,CAAC;gBACnL,CAAC;YAAA,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAE,EAAE,GAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAC9C,IAAG,CAAC,IAAI,IAAE,OAAO,CAAC,MAAM,CAAC,OAAO;YAAC,MAAM,IAAI,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QACxE,OAAO,EAAC,KAAK,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC,IAAI,EAAC,YAAY,EAAC,IAAI,EAAC,WAAW,EAAC,CAAC;IAC1E,CAAC;IACD,KAAK,CAAC,CAAC,UAAU,CAAC,OAAiD;QACjE,IAAA,2BAAmB,EAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,KAAK,KAAK;YAAE,MAAM,IAAI,kBAAU,CAAC,0BAA0B,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,kBAAU,CAAC,yBAAyB,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iEAAiE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAChJ,MAAM,SAAS,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,UAAkB,EAAE,IAAa,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO;YAChH,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/J,IAAI,SAAkB,EAAE,IAAI,GAAG,KAAK,CAAC;QACrC,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAAC,CAAC;YACtH,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBACnC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;oBAAE,SAAS;gBACrE,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;oBAAE,MAAM,IAAA,2BAAkB,EAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBAClF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAC3K,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC;oBAAC,MAAM;gBAAC,CAAC;YACtD,CAAC;YACD,MAAM,OAAO,CAAC;YAAC,IAAI,SAAS;gBAAE,MAAM,SAAS,CAAC;YAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QAC/E,CAAC;gBAAS,CAAC;YAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IAC/B,CAAC;CACF;AA5CD,kCA4CC"}
@@ -0,0 +1,20 @@
1
+ import { SttProvider, SttSession, AudioFormat } from '../types';
2
+ import { SocketFactory } from './socket';
3
+ export declare class DeepgramStt implements SttProvider {
4
+ private readonly key;
5
+ private readonly model;
6
+ private readonly connect;
7
+ readonly id = "deepgram";
8
+ readonly capabilities: {
9
+ partials: boolean;
10
+ manualCommit: boolean;
11
+ speechActivityEvents: boolean;
12
+ };
13
+ constructor(key: string, model: string, connect?: SocketFactory);
14
+ open(options: {
15
+ format: AudioFormat;
16
+ language?: string;
17
+ signal: AbortSignal;
18
+ }): Promise<SttSession>;
19
+ }
20
+ //# sourceMappingURL=deepgram-stt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram-stt.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/deepgram-stt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAY,WAAW,EAAmC,MAAM,UAAU,CAAC;AAE3G,OAAO,EAAsB,aAAa,EAAE,MAAM,UAAU,CAAC;AAE7D,qBAAa,WAAY,YAAW,WAAW;IAGjC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFlG,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,YAAY;;;;MAAsE;gBAC9D,GAAG,EAAE,MAAM,EAAmB,KAAK,EAAE,MAAM,EAAmB,OAAO,GAAE,aAAkC;IAChI,IAAI,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CA8B1G"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeepgramStt = void 0;
4
+ const errors_1 = require("../errors");
5
+ const types_1 = require("../types");
6
+ const queue_1 = require("../queue");
7
+ const socket_1 = require("./socket");
8
+ class DeepgramStt {
9
+ constructor(key, model, connect = socket_1.openProviderSocket) {
10
+ this.key = key;
11
+ this.model = model;
12
+ this.connect = connect;
13
+ this.id = 'deepgram';
14
+ this.capabilities = { partials: true, manualCommit: true, speechActivityEvents: true };
15
+ }
16
+ async open(options) {
17
+ (0, types_1.validateAudioFormat)(options.format);
18
+ if (!this.key)
19
+ throw new types_1.VoiceError('STT_CREDENTIALS_MISSING');
20
+ const url = new URL('wss://api.deepgram.com/v1/listen');
21
+ for (const [key, value] of Object.entries({ model: this.model, encoding: 'linear16', sample_rate: String(options.format.sampleRate), channels: '1', interim_results: 'true', vad_events: 'true' }))
22
+ url.searchParams.set(key, value);
23
+ if (options.language)
24
+ url.searchParams.set('language', options.language);
25
+ const socket = await this.connect(url.toString(), { Authorization: `Token ${this.key}` }, options.signal);
26
+ const events = new queue_1.BoundedQueue(65536, e => JSON.stringify(e).length);
27
+ let commitId, closed = false;
28
+ void (async () => {
29
+ try {
30
+ for await (const message of socket.messages) {
31
+ if (closed)
32
+ break;
33
+ if (message.type === 'Results') {
34
+ const text = String(message.channel?.alternatives?.[0]?.transcript ?? '');
35
+ if (text)
36
+ events.push({ type: message.is_final ? 'segment_final' : 'partial', segmentId: String(message.start), text });
37
+ // Silence/speech_final is not the explicit flush acknowledgment.
38
+ if (message.from_finalize && commitId) {
39
+ events.push({ type: 'commit_done', commitId });
40
+ commitId = undefined;
41
+ }
42
+ }
43
+ else if (message.type === 'SpeechStarted')
44
+ events.push({ type: 'speech_start', atMs: Number(message.timestamp) * 1000 });
45
+ else if (message.type === 'UtteranceEnd')
46
+ events.push({ type: 'speech_end', atMs: Number(message.last_word_end) * 1000 });
47
+ else if (message.type === 'Error')
48
+ throw (0, errors_1.providerVoiceError)('STT', undefined, message);
49
+ }
50
+ if (!closed)
51
+ events.push({ type: 'error', code: 'STT_CONNECTION_CLOSED', retryable: true });
52
+ events.close();
53
+ }
54
+ catch (error) {
55
+ events.close(error instanceof types_1.VoiceError ? error : new types_1.VoiceError('STT_PROVIDER_ERROR'));
56
+ socket.close();
57
+ }
58
+ })();
59
+ return { events, pushAudio: frame => socket.audio(frame),
60
+ commitSegment: async (id) => { if (commitId)
61
+ throw new types_1.VoiceError('COMMIT_IN_PROGRESS'); commitId = id; await socket.send({ type: 'Finalize' }); },
62
+ close: async () => { closed = true; socket.close(); events.close(); } };
63
+ }
64
+ }
65
+ exports.DeepgramStt = DeepgramStt;
66
+ //# sourceMappingURL=deepgram-stt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram-stt.js","sourceRoot":"","sources":["../../../src/voice/providers/deepgram-stt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { SttProvider, SttSession, AudioFormat } from '../types';
2
+ import { SocketFactory } from './socket';
3
+ export declare class ElevenLabsStt implements SttProvider {
4
+ private readonly key;
5
+ private readonly model;
6
+ private readonly connect;
7
+ readonly id: string;
8
+ readonly capabilities: {
9
+ partials: boolean;
10
+ manualCommit: boolean;
11
+ speechActivityEvents: boolean;
12
+ };
13
+ constructor(key: string, model?: string, connect?: SocketFactory, id?: string);
14
+ open(options: {
15
+ format: AudioFormat;
16
+ language?: string;
17
+ signal: AbortSignal;
18
+ }): Promise<SttSession>;
19
+ }
20
+ //# sourceMappingURL=elevenlabs-stt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs-stt.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/elevenlabs-stt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAY,UAAU,EAAE,WAAW,EAAmC,MAAM,UAAU,CAAC;AAE3G,OAAO,EAAsB,aAAa,EAAE,MAAM,UAAU,CAAC;AAE7D,qBAAa,aAAc,YAAW,WAAW;IAEnC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAyB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAsC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAD1K,QAAQ,CAAC,YAAY;;;;MAAuE;gBAC/D,GAAG,EAAE,MAAM,EAAmB,KAAK,SAAuB,EAAmB,OAAO,GAAE,aAAkC,EAAW,EAAE,GAAE,MAAqB;IACnL,IAAI,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CAkD1G"}