@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,12 @@
1
+ import { RecordedStt } from './recorded-stt';
2
+ /** Paxa accepts completed recordings, not a realtime transcription stream. */
3
+ export declare function transcribePaxa(audio: Uint8Array, options: {
4
+ provider: string;
5
+ model: string;
6
+ language?: string;
7
+ signal: AbortSignal;
8
+ }, request?: typeof fetch): Promise<string>;
9
+ export declare class PaxaLabsStt extends RecordedStt {
10
+ constructor(id?: string, model?: string, request?: typeof fetch);
11
+ }
12
+ //# sourceMappingURL=paxalabs-stt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paxalabs-stt.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/paxalabs-stt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,8EAA8E;AAC9E,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,OAAO,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAc5L;AAED,qBAAa,WAAY,SAAQ,WAAW;gBAC9B,EAAE,SAAa,EAAE,KAAK,SAA6B,EAAE,OAAO,GAAE,OAAO,KAAa;CAM/F"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaxaLabsStt = void 0;
4
+ exports.transcribePaxa = transcribePaxa;
5
+ const errors_1 = require("../errors");
6
+ const types_1 = require("../types");
7
+ const recorded_stt_1 = require("./recorded-stt");
8
+ const paxalabs_tts_1 = require("./paxalabs-tts");
9
+ /** Paxa accepts completed recordings, not a realtime transcription stream. */
10
+ async function transcribePaxa(audio, options, request = fetch) {
11
+ const { base, key } = (0, paxalabs_tts_1.paxaConnection)(options.provider);
12
+ if (!key)
13
+ throw new types_1.VoiceError('STT_CREDENTIALS_MISSING');
14
+ if (!audio.length || audio.length > 25 * 1024 * 1024)
15
+ throw new types_1.VoiceError('VOICE_NOTE_SIZE_LIMIT');
16
+ if (options.language && !['th', 'en'].includes(options.language))
17
+ throw new types_1.VoiceError('STT_LANGUAGE_UNSUPPORTED');
18
+ const response = await (0, errors_1.voiceProviderRequest)(new URL('stt', base), {
19
+ method: 'POST', redirect: 'error', signal: options.signal,
20
+ headers: { Authorization: `Bearer ${key}`, 'Content-Type': 'application/json' },
21
+ body: JSON.stringify({ audio: Buffer.from(audio).toString('base64'), model: options.model, ...(options.language ? { language: options.language } : {}) }),
22
+ }, request);
23
+ if (!response.ok)
24
+ throw await (0, errors_1.providerHttpError)('STT', response);
25
+ const result = await response.json();
26
+ if (typeof result.text !== 'string' || Buffer.byteLength(result.text) > 60000)
27
+ throw new types_1.VoiceError('STT_INVALID_RESPONSE');
28
+ return result.text.trim();
29
+ }
30
+ class PaxaLabsStt extends recorded_stt_1.RecordedStt {
31
+ constructor(id = 'paxalabs', model = 'paxa-stt-lite-v1-preview', request = fetch) {
32
+ super(id, model, request, transcribePaxa, language => {
33
+ if (!(0, paxalabs_tts_1.paxaConnection)(id).key)
34
+ throw new types_1.VoiceError('STT_CREDENTIALS_MISSING');
35
+ if (language && !['th', 'en'].includes(language))
36
+ throw new types_1.VoiceError('STT_LANGUAGE_UNSUPPORTED');
37
+ });
38
+ }
39
+ }
40
+ exports.PaxaLabsStt = PaxaLabsStt;
41
+ //# sourceMappingURL=paxalabs-stt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paxalabs-stt.js","sourceRoot":"","sources":["../../../src/voice/providers/paxalabs-stt.ts"],"names":[],"mappings":";;;AAMA,wCAcC;AApBD,sCAAoE;AACpE,oCAAsC;AACtC,iDAA6C;AAC7C,iDAAgD;AAEhD,8EAA8E;AACvE,KAAK,UAAU,cAAc,CAAC,KAAiB,EAAE,OAAoF,EAAE,UAAwB,KAAK;IACzK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAA,6BAAc,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,kBAAU,CAAC,yBAAyB,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;QAAE,MAAM,IAAI,kBAAU,CAAC,uBAAuB,CAAC,CAAC;IACpG,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,kBAAU,CAAC,0BAA0B,CAAC,CAAC;IACnH,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAoB,EAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;QAChE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM;QACzD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;KAC1J,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,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;QAAE,MAAM,IAAI,kBAAU,CAAC,sBAAsB,CAAC,CAAC;IAC5H,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAa,WAAY,SAAQ,0BAAW;IAC1C,YAAY,EAAE,GAAG,UAAU,EAAE,KAAK,GAAG,0BAA0B,EAAE,UAAwB,KAAK;QAC5F,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE;YACnD,IAAI,CAAC,IAAA,6BAAc,EAAC,EAAE,CAAC,CAAC,GAAG;gBAAE,MAAM,IAAI,kBAAU,CAAC,yBAAyB,CAAC,CAAC;YAC7E,IAAI,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,MAAM,IAAI,kBAAU,CAAC,0BAA0B,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAPD,kCAOC"}
@@ -0,0 +1,23 @@
1
+ import { EncodedAudioTts } from './encoded-audio-tts';
2
+ import { TtsProvider } from '../types';
3
+ import { SocketFactory } from './socket';
4
+ export declare function paxaConnection(provider?: string): {
5
+ base: URL;
6
+ key: string;
7
+ };
8
+ export declare class PaxaLabsTts extends EncodedAudioTts {
9
+ private readonly connection;
10
+ private readonly model;
11
+ private readonly connect;
12
+ readonly capabilities: {
13
+ textStreaming: boolean;
14
+ wordAlignment: boolean;
15
+ outputFormats: import("../types").AudioFormat[];
16
+ };
17
+ constructor(connection: {
18
+ base: URL;
19
+ key: string;
20
+ }, model?: string, connect?: SocketFactory, id?: string);
21
+ protected audio(options: Pick<Parameters<TtsProvider['synthesize']>[0], 'text' | 'voiceId' | 'signal'>): AsyncIterable<Buffer>;
22
+ }
23
+ //# sourceMappingURL=paxalabs-tts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paxalabs-tts.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/paxalabs-tts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAS,WAAW,EAAc,MAAM,UAAU,CAAC;AAC1D,OAAO,EAA4B,aAAa,EAAE,MAAM,UAAU,CAAC;AAGnE,wBAAgB,cAAc,CAAC,QAAQ,SAAa,GAAG;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAIhF;AAED,qBAAa,WAAY,SAAQ,eAAe;IAElC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAA8B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAwB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAD3I,QAAQ,CAAC,YAAY;;;;MAAyE;gBACjE,UAAU,EAAE;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAmB,KAAK,SAAsB,EAAmB,OAAO,GAAE,aAAwC,EAAE,EAAE,SAAa;cACrL,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;CAsCtI"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaxaLabsTts = void 0;
4
+ exports.paxaConnection = paxaConnection;
5
+ const errors_1 = require("../errors");
6
+ const encoded_audio_tts_1 = require("./encoded-audio-tts");
7
+ const types_1 = require("../types");
8
+ const socket_1 = require("./socket");
9
+ const upstream_1 = require("./upstream");
10
+ function paxaConnection(provider = 'paxalabs') {
11
+ if (provider === 'managed:paxalabs')
12
+ return (0, upstream_1.upstreamVoiceConnection)('paxalabs', true);
13
+ if (provider === 'upstream:paxalabs')
14
+ return (0, upstream_1.upstreamVoiceConnection)('paxalabs');
15
+ return { base: new URL('https://api.paxalabs.com/v1/'), key: process.env.PAXALABS_API_KEY ?? '' };
16
+ }
17
+ class PaxaLabsTts extends encoded_audio_tts_1.EncodedAudioTts {
18
+ constructor(connection, model = 'paxa-tts-flash-v1', connect = socket_1.openBinaryProviderSocket, id = 'paxalabs') {
19
+ super(id);
20
+ this.connection = connection;
21
+ this.model = model;
22
+ this.connect = connect;
23
+ this.capabilities = { textStreaming: true, wordAlignment: false, outputFormats: [types_1.PCM16] };
24
+ }
25
+ async *audio(options) {
26
+ if (!this.connection.key)
27
+ throw new types_1.VoiceError('TTS_CREDENTIALS_MISSING');
28
+ const url = new URL('tts/live', this.connection.base);
29
+ url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
30
+ const socket = await this.connect(url.toString(), { Authorization: `Bearer ${this.connection.key}` }, options.signal);
31
+ let sendError, done = false;
32
+ let cancel;
33
+ const cancelled = new Promise(resolve => { cancel = () => { socket.close(); resolve({ done: true, value: undefined }); }; });
34
+ options.signal.addEventListener('abort', cancel, { once: true });
35
+ if (options.signal.aborted)
36
+ cancel();
37
+ const input = options.text[Symbol.asyncIterator]();
38
+ const sending = (async () => {
39
+ await socket.send({ type: 'start', model: this.model, voice: options.voiceId, format: 'mp3' });
40
+ while (!options.signal.aborted) {
41
+ const next = await Promise.race([input.next(), cancelled]);
42
+ if (next.done || options.signal.aborted)
43
+ break;
44
+ const text = next.value;
45
+ // Respect the provider's per-frame ceiling without splitting surrogate pairs.
46
+ const chars = Array.from(text);
47
+ for (let i = 0; i < chars.length; i += 5000)
48
+ await socket.send({ type: 'text', text: chars.slice(i, i + 5000).join('') });
49
+ }
50
+ if (!options.signal.aborted)
51
+ await socket.send({ type: 'end' });
52
+ })().catch(error => { sendError = error; socket.close(); });
53
+ try {
54
+ for await (const event of socket.messages) {
55
+ if (options.signal.aborted)
56
+ return;
57
+ if (event.type === 'error')
58
+ throw (0, errors_1.providerVoiceError)('TTS', undefined, event);
59
+ if (event.binaryAudio)
60
+ yield Buffer.from(event.binaryAudio);
61
+ if (event.type === 'done') {
62
+ done = true;
63
+ break;
64
+ }
65
+ }
66
+ await sending;
67
+ if (sendError)
68
+ throw sendError;
69
+ if (!done && !options.signal.aborted)
70
+ throw new types_1.VoiceError('TTS_INCOMPLETE');
71
+ }
72
+ finally {
73
+ options.signal.removeEventListener('abort', cancel);
74
+ cancel();
75
+ void input.return?.().catch(() => { });
76
+ }
77
+ }
78
+ }
79
+ exports.PaxaLabsTts = PaxaLabsTts;
80
+ //# sourceMappingURL=paxalabs-tts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paxalabs-tts.js","sourceRoot":"","sources":["../../../src/voice/providers/paxalabs-tts.ts"],"names":[],"mappings":";;;AAMA,wCAIC;AAVD,sCAA+C;AAC/C,2DAAsD;AACtD,oCAA0D;AAC1D,qCAAmE;AACnE,yCAAqD;AAErD,SAAgB,cAAc,CAAC,QAAQ,GAAG,UAAU;IAClD,IAAI,QAAQ,KAAK,kBAAkB;QAAE,OAAO,IAAA,kCAAuB,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtF,IAAI,QAAQ,KAAK,mBAAmB;QAAE,OAAO,IAAA,kCAAuB,EAAC,UAAU,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,8BAA8B,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;AACpG,CAAC;AAED,MAAa,WAAY,SAAQ,mCAAe;IAE9C,YAA6B,UAAsC,EAAmB,QAAQ,mBAAmB,EAAmB,UAAyB,iCAAwB,EAAE,EAAE,GAAG,UAAU;QAAI,KAAK,CAAC,EAAE,CAAC,CAAC;QAAvL,eAAU,GAAV,UAAU,CAA4B;QAAmB,UAAK,GAAL,KAAK,CAAsB;QAAmB,YAAO,GAAP,OAAO,CAA0C;QAD5K,iBAAY,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,aAAK,CAAC,EAAE,CAAC;IACuH,CAAC;IAC5M,KAAK,CAAC,CAAC,KAAK,CAAC,OAAsF;QAC3G,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;YAAE,MAAM,IAAI,kBAAU,CAAC,yBAAyB,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACjH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtH,IAAI,SAAkB,EAAE,IAAI,GAAG,KAAK,CAAC;QACrC,IAAI,MAAmB,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,OAAO,CAAyB,OAAO,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrJ,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC3D,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;gBACxB,8EAA8E;gBAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI;oBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5H,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,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,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC1C,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBACnC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,MAAM,IAAA,2BAAkB,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC9E,IAAI,KAAK,CAAC,WAAW;oBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC;oBAAC,MAAM;gBAAC,CAAC;YACpD,CAAC;YACD,MAAM,OAAO,CAAC;YACd,IAAI,SAAS;gBAAE,MAAM,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QAC/E,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,EAAE,CAAC;YACT,KAAK,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF;AAzCD,kCAyCC"}
@@ -0,0 +1,34 @@
1
+ import { AudioFormat, SttProvider, SttEvent } from '../types';
2
+ import { BoundedQueue } from '../queue';
3
+ /** Shared bounded recording/commit lifecycle for file-based STT providers. */
4
+ export declare class RecordedStt implements SttProvider {
5
+ readonly id: string;
6
+ private readonly model;
7
+ private readonly request;
8
+ private readonly transcribe;
9
+ private readonly validate;
10
+ readonly capabilities: {
11
+ partials: boolean;
12
+ manualCommit: boolean;
13
+ speechActivityEvents: boolean;
14
+ finalizationTimeoutMs: number;
15
+ mode: "batch";
16
+ };
17
+ constructor(id: string, model: string, request: typeof fetch, transcribe: (audio: Uint8Array, options: {
18
+ provider: string;
19
+ model: string;
20
+ language?: string;
21
+ signal: AbortSignal;
22
+ }, request: typeof fetch) => Promise<string>, validate: (language?: string) => void);
23
+ open(options: {
24
+ format: AudioFormat;
25
+ language?: string;
26
+ signal: AbortSignal;
27
+ }): Promise<{
28
+ events: BoundedQueue<SttEvent>;
29
+ pushAudio: (frame: Uint8Array) => Promise<void>;
30
+ commitSegment: (commitId: string) => Promise<void>;
31
+ close: () => Promise<void>;
32
+ }>;
33
+ }
34
+ //# sourceMappingURL=recorded-stt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorded-stt.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/recorded-stt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAc,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,8EAA8E;AAC9E,qBAAa,WAAY,YAAW,WAAW;IAEjC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAgB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAuJ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IADpT,QAAQ,CAAC,YAAY;;;;;;MAA8H;gBAC9H,EAAE,EAAE,MAAM,EAAmB,KAAK,EAAE,MAAM,EAAmB,OAAO,EAAE,OAAO,KAAK,EAAmB,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,EAAE,OAAO,EAAE,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,EAAmB,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;IAC3U,IAAI,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE;;2BAWtD,UAAU;kCAKH,MAAM;;;CAc3C"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecordedStt = void 0;
4
+ const types_1 = require("../types");
5
+ const queue_1 = require("../queue");
6
+ const wav_1 = require("../wav");
7
+ /** Shared bounded recording/commit lifecycle for file-based STT providers. */
8
+ class RecordedStt {
9
+ constructor(id, model, request, transcribe, validate) {
10
+ this.id = id;
11
+ this.model = model;
12
+ this.request = request;
13
+ this.transcribe = transcribe;
14
+ this.validate = validate;
15
+ this.capabilities = { partials: false, manualCommit: true, speechActivityEvents: false, finalizationTimeoutMs: 65000, mode: 'batch' };
16
+ }
17
+ async open(options) {
18
+ if (options.format.encoding !== 'pcm_s16le' || options.format.channels !== 1 || options.format.sampleRate !== 16000)
19
+ throw new types_1.VoiceError('UNSUPPORTED_AUDIO_FORMAT');
20
+ this.validate(options.language);
21
+ const abort = new AbortController();
22
+ const signal = AbortSignal.any([abort.signal, options.signal]);
23
+ const events = new queue_1.BoundedQueue(131072, e => JSON.stringify(e).length);
24
+ let frames = [], size = 0, busy = false, segment = 0;
25
+ const close = () => { frames = []; size = 0; events.close(); };
26
+ signal.addEventListener('abort', close, { once: true });
27
+ return {
28
+ events,
29
+ pushAudio: async (frame) => {
30
+ signal.throwIfAborted();
31
+ if (size + frame.length > 16000 * 2 * 60)
32
+ throw new types_1.VoiceError('AUDIO_TOO_LARGE');
33
+ frames.push(Buffer.from(frame));
34
+ size += frame.length;
35
+ },
36
+ commitSegment: async (commitId) => {
37
+ signal.throwIfAborted();
38
+ if (busy)
39
+ throw new types_1.VoiceError('COMMIT_IN_PROGRESS');
40
+ const recording = Buffer.concat(frames);
41
+ frames = [];
42
+ size = 0;
43
+ busy = true;
44
+ try {
45
+ const text = recording.length ? await this.transcribe((0, wav_1.pcmToWav)(recording), { provider: this.id, model: this.model, language: options.language, signal: AbortSignal.any([signal, AbortSignal.timeout(60000)]) }, this.request) : '';
46
+ signal.throwIfAborted();
47
+ events.push({ type: 'segment_final', segmentId: String(segment++), text });
48
+ events.push({ type: 'commit_done', commitId });
49
+ }
50
+ finally {
51
+ busy = false;
52
+ }
53
+ },
54
+ close: async () => { abort.abort(); signal.removeEventListener('abort', close); close(); },
55
+ };
56
+ }
57
+ }
58
+ exports.RecordedStt = RecordedStt;
59
+ //# sourceMappingURL=recorded-stt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorded-stt.js","sourceRoot":"","sources":["../../../src/voice/providers/recorded-stt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { SttProvider, TtsProvider } from '../types';
2
+ export declare function sttProvider(config: {
3
+ provider: string;
4
+ model: string;
5
+ }): SttProvider;
6
+ export declare function ttsProvider(config: {
7
+ provider: string;
8
+ model: string;
9
+ }): TtsProvider;
10
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/registry.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAc,MAAM,UAAU,CAAC;AA6BhE,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAOpF;AACD,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAapF"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sttProvider = sttProvider;
4
+ exports.ttsProvider = ttsProvider;
5
+ const managed_quota_1 = require("../managed-quota");
6
+ const openrouter_1 = require("./openrouter");
7
+ const model_ref_1 = require("./model-ref");
8
+ const gemini_1 = require("./gemini");
9
+ const gemini_live_stt_1 = require("./gemini-live-stt");
10
+ const paxalabs_stt_1 = require("./paxalabs-stt");
11
+ const paxalabs_tts_1 = require("./paxalabs-tts");
12
+ const upstream_1 = require("./upstream");
13
+ const types_1 = require("../types");
14
+ const elevenlabs_stt_1 = require("./elevenlabs-stt");
15
+ const elevenlabs_tts_1 = require("./elevenlabs-tts");
16
+ const deepgram_stt_1 = require("./deepgram-stt");
17
+ const cartesia_tts_1 = require("./cartesia-tts");
18
+ function makeSttProvider(config) {
19
+ config = { ...config, provider: (0, model_ref_1.canonicalVoiceProvider)(config.provider), model: (0, model_ref_1.nativeVoiceModel)(config.provider, config.model) };
20
+ if (['openrouter', 'upstream:openrouter'].includes(config.provider))
21
+ return new openrouter_1.OpenRouterStt(config.provider, config.model);
22
+ if (['gemini', 'upstream:gemini'].includes(config.provider))
23
+ return config.model === 'gemini-3.5-transcribe-live' ? new gemini_live_stt_1.GeminiLiveStt(config.provider, config.model) : new gemini_1.GeminiStt(config.provider, config.model);
24
+ if (config.provider === 'managed:elevenlabs')
25
+ return new elevenlabs_stt_1.ElevenLabsStt((0, upstream_1.upstreamVoiceConnection)('elevenlabs', true).key, config.model, upstream_1.managedVoiceSocket, config.provider);
26
+ if (config.provider === 'upstream:elevenlabs')
27
+ return new elevenlabs_stt_1.ElevenLabsStt((0, upstream_1.upstreamVoiceConnection)().key, config.model, upstream_1.upstreamVoiceSocket, 'upstream:elevenlabs');
28
+ if (config.provider === 'elevenlabs')
29
+ return new elevenlabs_stt_1.ElevenLabsStt(process.env.ELEVENLABS_API_KEY ?? '', config.model);
30
+ if (['paxalabs', 'upstream:paxalabs', 'managed:paxalabs'].includes(config.provider))
31
+ return new paxalabs_stt_1.PaxaLabsStt(config.provider, config.model);
32
+ if (config.provider === 'deepgram')
33
+ return new deepgram_stt_1.DeepgramStt(process.env.DEEPGRAM_API_KEY ?? '', config.model);
34
+ throw new types_1.VoiceError('UNKNOWN_STT_PROVIDER');
35
+ }
36
+ function makeTtsProvider(config) {
37
+ config = { ...config, provider: (0, model_ref_1.canonicalVoiceProvider)(config.provider), model: (0, model_ref_1.nativeVoiceModel)(config.provider, config.model) };
38
+ if (['openrouter', 'upstream:openrouter'].includes(config.provider))
39
+ return new openrouter_1.OpenRouterTts(config.provider, config.model);
40
+ if (['gemini', 'upstream:gemini'].includes(config.provider))
41
+ return new gemini_1.GeminiTts(config.provider, config.model);
42
+ if (config.provider === 'managed:elevenlabs')
43
+ return new elevenlabs_tts_1.ElevenLabsTts((0, upstream_1.upstreamVoiceConnection)('elevenlabs', true).key, config.model, upstream_1.managedVoiceSocket, config.provider);
44
+ if (config.provider === 'upstream:elevenlabs')
45
+ return new elevenlabs_tts_1.ElevenLabsTts((0, upstream_1.upstreamVoiceConnection)().key, config.model, upstream_1.upstreamVoiceSocket, 'upstream:elevenlabs');
46
+ if (config.provider === 'elevenlabs')
47
+ return new elevenlabs_tts_1.ElevenLabsTts(process.env.ELEVENLABS_API_KEY ?? '', config.model);
48
+ if (['paxalabs', 'upstream:paxalabs', 'managed:paxalabs'].includes(config.provider))
49
+ return new paxalabs_tts_1.PaxaLabsTts((0, paxalabs_tts_1.paxaConnection)(config.provider), config.model, undefined, config.provider);
50
+ if (config.provider === 'cartesia')
51
+ return new cartesia_tts_1.CartesiaTts(process.env.CARTESIA_API_KEY ?? '', config.model);
52
+ throw new types_1.VoiceError('UNKNOWN_TTS_PROVIDER');
53
+ }
54
+ function sttProvider(config) {
55
+ const provider = makeSttProvider(config);
56
+ if (!config.provider.startsWith('managed:'))
57
+ return provider;
58
+ return { id: provider.id, capabilities: provider.capabilities, async open(options) {
59
+ await (0, managed_quota_1.requireManagedVoiceCredit)(config.provider, undefined, options.signal);
60
+ return provider.open(options);
61
+ } };
62
+ }
63
+ function ttsProvider(config) {
64
+ const provider = makeTtsProvider(config);
65
+ if (!config.provider.startsWith('managed:'))
66
+ return provider;
67
+ return { id: provider.id, capabilities: provider.capabilities,
68
+ synthesizeFile: provider.synthesizeFile ? async (options) => {
69
+ await (0, managed_quota_1.requireManagedVoiceCredit)(config.provider, undefined, options.signal);
70
+ return provider.synthesizeFile(options);
71
+ } : undefined,
72
+ async *synthesize(options) {
73
+ await (0, managed_quota_1.requireManagedVoiceCredit)(config.provider, undefined, options.signal);
74
+ yield* provider.synthesize(options);
75
+ }, };
76
+ }
77
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/voice/providers/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ProviderSocket {
2
+ messages: AsyncIterable<Record<string, any>>;
3
+ send(value: unknown): Promise<void>;
4
+ audio(value: Uint8Array): Promise<void>;
5
+ close(): void;
6
+ }
7
+ export type SocketFactory = (url: string, headers: Record<string, string>, signal: AbortSignal) => Promise<ProviderSocket>;
8
+ export declare const openProviderSocket: SocketFactory;
9
+ export declare const openBinaryProviderSocket: SocketFactory;
10
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/socket.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAAG,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAAC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,IAAI,IAAI,CAAC;CAAE;AAC9K,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAC3H,eAAO,MAAM,kBAAkB,EAAE,aAAiF,CAAC;AACnH,eAAO,MAAM,wBAAwB,EAAE,aAAgF,CAAC"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.openBinaryProviderSocket = exports.openProviderSocket = void 0;
7
+ const errors_1 = require("../errors");
8
+ const ws_1 = __importDefault(require("ws"));
9
+ const queue_1 = require("../queue");
10
+ const types_1 = require("../types");
11
+ const openProviderSocket = (url, headers, signal) => openSocket(url, headers, signal, false);
12
+ exports.openProviderSocket = openProviderSocket;
13
+ const openBinaryProviderSocket = (url, headers, signal) => openSocket(url, headers, signal, true);
14
+ exports.openBinaryProviderSocket = openBinaryProviderSocket;
15
+ const openSocket = async (url, headers, signal, binaryAudio) => {
16
+ signal.throwIfAborted();
17
+ const ws = new ws_1.default(url, { headers, maxPayload: 4 * 1024 * 1024, handshakeTimeout: 10000 });
18
+ const messages = new queue_1.BoundedQueue(4 * 1024 * 1024, value => Buffer.byteLength(JSON.stringify(value)));
19
+ let opened = false;
20
+ let handshakeError;
21
+ const close = () => { ws.terminate(); messages.close(); };
22
+ const abort = () => { messages.close(new types_1.VoiceError('PROVIDER_ABORTED')); ws.terminate(); };
23
+ signal.addEventListener('abort', abort, { once: true });
24
+ ws.on('message', (data, binary) => {
25
+ try {
26
+ messages.push(binaryAudio && binary ? { binaryAudio: data } : JSON.parse(data.toString()));
27
+ }
28
+ catch {
29
+ messages.close(new types_1.VoiceError('INVALID_PROVIDER_MESSAGE'));
30
+ ws.terminate();
31
+ }
32
+ });
33
+ ws.on('error', () => messages.close(handshakeError ?? new types_1.VoiceError('PROVIDER_CONNECTION_FAILED')));
34
+ ws.on('close', (code, reason) => {
35
+ signal.removeEventListener('abort', abort);
36
+ // Managed relays can exhaust a daily quota after the socket has opened.
37
+ // Preserve that diagnostic instead of turning it into a generic reconnect.
38
+ if (code === 1008 && reason.length) {
39
+ try {
40
+ const diagnostic = JSON.parse(reason.toString());
41
+ messages.close((0, errors_1.providerVoiceError)('VOICE', diagnostic?.error?.status, diagnostic));
42
+ return;
43
+ }
44
+ catch { /* native non-JSON close reason */ }
45
+ }
46
+ messages.close();
47
+ });
48
+ await new Promise((resolve, reject) => {
49
+ ws.once('unexpected-response', (_request, response) => {
50
+ const parts = [];
51
+ let size = 0, finished = false;
52
+ const finish = () => {
53
+ if (finished)
54
+ return;
55
+ finished = true;
56
+ clearTimeout(timer);
57
+ let payload;
58
+ try {
59
+ payload = JSON.parse(Buffer.concat(parts).toString());
60
+ }
61
+ catch { /* no structured diagnostic */ }
62
+ handshakeError = (0, errors_1.providerVoiceError)('VOICE', response.statusCode, payload);
63
+ messages.close(handshakeError);
64
+ reject(handshakeError);
65
+ response.destroy();
66
+ ws.terminate();
67
+ };
68
+ const timer = setTimeout(finish, 2000);
69
+ response.on('data', (part) => { size += part.length; if (size <= 16384)
70
+ parts.push(part);
71
+ else
72
+ finish(); });
73
+ response.once('end', finish);
74
+ response.once('error', finish);
75
+ response.once('aborted', finish);
76
+ });
77
+ ws.once('open', () => { opened = true; resolve(); });
78
+ ws.once('error', () => reject(new types_1.VoiceError('PROVIDER_CONNECTION_FAILED')));
79
+ ws.once('close', () => { if (!opened)
80
+ reject(new types_1.VoiceError('PROVIDER_CONNECTION_CLOSED')); });
81
+ });
82
+ const send = (value) => {
83
+ if (signal.aborted || ws.readyState !== ws_1.default.OPEN)
84
+ return Promise.reject(new types_1.VoiceError('PROVIDER_CONNECTION_CLOSED'));
85
+ if (ws.bufferedAmount > 1024 * 1024)
86
+ return Promise.reject(new types_1.VoiceError('PROVIDER_TOO_SLOW'));
87
+ return new Promise((resolve, reject) => ws.send(value, error => error ? reject(new types_1.VoiceError('PROVIDER_SEND_FAILED')) : resolve()));
88
+ };
89
+ return { messages, send: value => send(JSON.stringify(value)), audio: send, close };
90
+ };
91
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/voice/providers/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SocketFactory } from './socket';
2
+ /** Reuses the pod's existing provider credentials; never exposes upstream BYOK keys. */
3
+ export declare function upstreamVoiceConnection(provider?: 'elevenlabs' | 'paxalabs' | 'gemini' | 'openrouter', managed?: boolean): {
4
+ base: URL;
5
+ key: string;
6
+ };
7
+ export declare const upstreamVoiceSocket: SocketFactory;
8
+ export declare const managedVoiceSocket: SocketFactory;
9
+ //# sourceMappingURL=upstream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/upstream.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,aAAa,EAAE,MAAM,UAAU,CAAC;AAE7D,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,QAAQ,GAAE,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,YAA2B,EAAE,OAAO,UAAQ,GAAG;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CA+BjK;AACD,eAAO,MAAM,mBAAmB,EAAE,aAAuC,CAAC;AAC1E,eAAO,MAAM,kBAAkB,EAAE,aAAsC,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.managedVoiceSocket = exports.upstreamVoiceSocket = void 0;
4
+ exports.upstreamVoiceConnection = upstreamVoiceConnection;
5
+ const claude_settings_1 = require("../../config/claude-settings");
6
+ const types_1 = require("../types");
7
+ const socket_1 = require("./socket");
8
+ /** Reuses the pod's existing provider credentials; never exposes upstream BYOK keys. */
9
+ function upstreamVoiceConnection(provider = 'elevenlabs', managed = false) {
10
+ // Claude Code applies settings.json over inherited environment. Resolve the
11
+ // credential group together so a settings identity never uses another token.
12
+ const settings = (0, claude_settings_1.claudeSettingsEnv)();
13
+ const credentialKeys = ['ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_API_KEY', 'CLAUDE_CODE_OAUTH_TOKEN'];
14
+ const credentials = credentialKeys.some(key => key in settings) ? settings : process.env;
15
+ const clean = (value) => typeof value === 'string' && value.trim() === value && !/[\x00-\x1f\x7f]/.test(value) ? value : '';
16
+ const endpoint = 'ANTHROPIC_BASE_URL' in settings ? settings.ANTHROPIC_BASE_URL : process.env.ANTHROPIC_BASE_URL;
17
+ let base;
18
+ try {
19
+ base = new URL(clean(endpoint));
20
+ }
21
+ catch {
22
+ throw new types_1.VoiceError('INVALID_UPSTREAM_VOICE_URL');
23
+ }
24
+ if (!['https:', 'http:'].includes(base.protocol) ||
25
+ base.username ||
26
+ base.password ||
27
+ base.search ||
28
+ base.hash)
29
+ throw new types_1.VoiceError('INVALID_UPSTREAM_VOICE_URL');
30
+ if (base.protocol === 'http:' &&
31
+ !['localhost', '127.0.0.1', '[::1]'].includes(base.hostname))
32
+ throw new types_1.VoiceError('INVALID_UPSTREAM_VOICE_URL');
33
+ base.pathname = `/v1/voice/${managed ? 'managed/' : ''}${provider}/`;
34
+ const key = credentialKeys.map(name => clean(credentials[name])).find(Boolean) ?? '';
35
+ if (!key)
36
+ throw new types_1.VoiceError('UPSTREAM_VOICE_CREDENTIALS_MISSING');
37
+ return { base, key };
38
+ }
39
+ exports.upstreamVoiceSocket = relayVoiceSocket(false);
40
+ exports.managedVoiceSocket = relayVoiceSocket(true);
41
+ function relayVoiceSocket(managed) {
42
+ return async (upstream, _headers, signal) => {
43
+ const { base, key } = upstreamVoiceConnection('elevenlabs', managed);
44
+ const source = new URL(upstream);
45
+ const url = new URL(source.pathname.replace(/^\/v1\//, ''), base);
46
+ url.search = source.search;
47
+ url.protocol = base.protocol === 'https:' ? 'wss:' : 'ws:';
48
+ return (0, socket_1.openProviderSocket)(url.toString(), { Authorization: `Bearer ${key}` }, signal);
49
+ };
50
+ }
51
+ //# sourceMappingURL=upstream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream.js","sourceRoot":"","sources":["../../../src/voice/providers/upstream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface VoiceChoice {
2
+ id: string;
3
+ name: string;
4
+ gender?: string;
5
+ supported_model_ids?: string[];
6
+ }
7
+ export declare function voiceChoices(config: {
8
+ provider: string;
9
+ voiceId: string;
10
+ model?: string;
11
+ }): Promise<VoiceChoice[]>;
12
+ export declare function resolveVoiceId(config: {
13
+ provider: string;
14
+ voiceId: string;
15
+ model?: string;
16
+ }): Promise<string>;
17
+ //# sourceMappingURL=voice-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-catalog.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/voice-catalog.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AAuF1G,wBAAsB,YAAY,CAAC,MAAM,EAAC;IAAC,QAAQ,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,KAAK,CAAC,EAAC,MAAM,CAAA;CAAC,GAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAU/G;AAID,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjH"}