chat-flow-ardymalihi 1.0.2 → 3.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 (470) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/intent/IntentMatcher.d.ts +16 -0
  3. package/dist/adapters/intent/IntentMatcher.d.ts.map +1 -1
  4. package/dist/adapters/intent/IntentMatcher.js +93 -15
  5. package/dist/adapters/intent/IntentMatcher.js.map +1 -1
  6. package/dist/adapters/intent/IntentService.d.ts +4 -5
  7. package/dist/adapters/intent/IntentService.d.ts.map +1 -1
  8. package/dist/adapters/intent/IntentService.js +15 -9
  9. package/dist/adapters/intent/IntentService.js.map +1 -1
  10. package/dist/adapters/intent/MockIntentService.d.ts +7 -0
  11. package/dist/adapters/intent/MockIntentService.d.ts.map +1 -0
  12. package/dist/adapters/intent/MockIntentService.js +36 -0
  13. package/dist/adapters/intent/MockIntentService.js.map +1 -0
  14. package/dist/adapters/llm/OllamaLLMAdapter.d.ts +9 -0
  15. package/dist/adapters/llm/OllamaLLMAdapter.d.ts.map +1 -0
  16. package/dist/adapters/llm/OllamaLLMAdapter.js +74 -0
  17. package/dist/adapters/llm/OllamaLLMAdapter.js.map +1 -0
  18. package/dist/adapters/logger/ConsoleLogger.d.ts +12 -0
  19. package/dist/adapters/logger/ConsoleLogger.d.ts.map +1 -0
  20. package/dist/adapters/logger/ConsoleLogger.js +37 -0
  21. package/dist/adapters/logger/ConsoleLogger.js.map +1 -0
  22. package/dist/adapters/repository/InMemoryRepository.d.ts +35 -4
  23. package/dist/adapters/repository/InMemoryRepository.d.ts.map +1 -1
  24. package/dist/adapters/repository/InMemoryRepository.js +204 -10
  25. package/dist/adapters/repository/InMemoryRepository.js.map +1 -1
  26. package/dist/adapters/repository/RedisRepository.d.ts +52 -5
  27. package/dist/adapters/repository/RedisRepository.d.ts.map +1 -1
  28. package/dist/adapters/repository/RedisRepository.js +525 -26
  29. package/dist/adapters/repository/RedisRepository.js.map +1 -1
  30. package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts +33 -0
  31. package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts.map +1 -0
  32. package/dist/adapters/storage/RedisAudioStorageAdapter.js +121 -0
  33. package/dist/adapters/storage/RedisAudioStorageAdapter.js.map +1 -0
  34. package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts +14 -0
  35. package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts.map +1 -0
  36. package/dist/adapters/storage/RedisBufferStorageAdapter.js +94 -0
  37. package/dist/adapters/storage/RedisBufferStorageAdapter.js.map +1 -0
  38. package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts +29 -0
  39. package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts.map +1 -0
  40. package/dist/adapters/voice/ElevenLabsVoiceAdapter.js +75 -0
  41. package/dist/adapters/voice/ElevenLabsVoiceAdapter.js.map +1 -0
  42. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts +77 -0
  43. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts.map +1 -0
  44. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js +187 -0
  45. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js.map +1 -0
  46. package/dist/adapters/voice/GeminiVoiceAdapter.d.ts +36 -0
  47. package/dist/adapters/voice/GeminiVoiceAdapter.d.ts.map +1 -0
  48. package/dist/adapters/voice/GeminiVoiceAdapter.js +134 -0
  49. package/dist/adapters/voice/GeminiVoiceAdapter.js.map +1 -0
  50. package/dist/adapters/voice/GoogleTTSAdapter.d.ts +61 -0
  51. package/dist/adapters/voice/GoogleTTSAdapter.d.ts.map +1 -0
  52. package/dist/adapters/voice/GoogleTTSAdapter.js +165 -0
  53. package/dist/adapters/voice/GoogleTTSAdapter.js.map +1 -0
  54. package/dist/adapters/voice/GoogleVoiceAdapter.d.ts +33 -0
  55. package/dist/adapters/voice/GoogleVoiceAdapter.d.ts.map +1 -0
  56. package/dist/adapters/voice/GoogleVoiceAdapter.js +155 -0
  57. package/dist/adapters/voice/GoogleVoiceAdapter.js.map +1 -0
  58. package/dist/adapters/voice/HybridVoiceAdapter.d.ts +54 -0
  59. package/dist/adapters/voice/HybridVoiceAdapter.d.ts.map +1 -0
  60. package/dist/adapters/voice/HybridVoiceAdapter.js +102 -0
  61. package/dist/adapters/voice/HybridVoiceAdapter.js.map +1 -0
  62. package/dist/adapters/voice/LanguageVoiceMapper.d.ts +60 -0
  63. package/dist/adapters/voice/LanguageVoiceMapper.d.ts.map +1 -0
  64. package/dist/adapters/voice/LanguageVoiceMapper.js +130 -0
  65. package/dist/adapters/voice/LanguageVoiceMapper.js.map +1 -0
  66. package/dist/adapters/voice/VertexVoiceAdapter.d.ts +32 -0
  67. package/dist/adapters/voice/VertexVoiceAdapter.d.ts.map +1 -0
  68. package/dist/adapters/voice/VertexVoiceAdapter.js +179 -0
  69. package/dist/adapters/voice/VertexVoiceAdapter.js.map +1 -0
  70. package/dist/adapters/webhook/WebhookService.d.ts +47 -0
  71. package/dist/adapters/webhook/WebhookService.d.ts.map +1 -0
  72. package/dist/adapters/webhook/WebhookService.js +265 -0
  73. package/dist/adapters/webhook/WebhookService.js.map +1 -0
  74. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -1
  75. package/dist/adapters/workflow/MockWorkflowAdapter.js +12 -1
  76. package/dist/adapters/workflow/MockWorkflowAdapter.js.map +1 -1
  77. package/dist/adapters/workflow/WorkflowAdapter.d.ts +55 -0
  78. package/dist/adapters/workflow/WorkflowAdapter.d.ts.map +1 -0
  79. package/dist/adapters/workflow/WorkflowAdapter.js +242 -0
  80. package/dist/adapters/workflow/WorkflowAdapter.js.map +1 -0
  81. package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts +10 -0
  82. package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts.map +1 -0
  83. package/dist/adapters/workflow/actions/getSupportHoursAction.js +33 -0
  84. package/dist/adapters/workflow/actions/getSupportHoursAction.js.map +1 -0
  85. package/dist/adapters/workflow/actions/index.d.ts +6 -0
  86. package/dist/adapters/workflow/actions/index.d.ts.map +1 -0
  87. package/dist/adapters/workflow/actions/index.js +22 -0
  88. package/dist/adapters/workflow/actions/index.js.map +1 -0
  89. package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts +11 -0
  90. package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts.map +1 -0
  91. package/dist/adapters/workflow/actions/pushOutputResultAction.js +31 -0
  92. package/dist/adapters/workflow/actions/pushOutputResultAction.js.map +1 -0
  93. package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts +12 -0
  94. package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts.map +1 -0
  95. package/dist/adapters/workflow/actions/setWorkflowMessageAction.js +32 -0
  96. package/dist/adapters/workflow/actions/setWorkflowMessageAction.js.map +1 -0
  97. package/dist/adapters/workflow/engine/constants.d.ts +3 -0
  98. package/dist/adapters/workflow/engine/constants.d.ts.map +1 -0
  99. package/dist/adapters/workflow/engine/constants.js +6 -0
  100. package/dist/adapters/workflow/engine/constants.js.map +1 -0
  101. package/dist/adapters/workflow/engine/engine.d.ts +32 -0
  102. package/dist/adapters/workflow/engine/engine.d.ts.map +1 -0
  103. package/dist/adapters/workflow/engine/engine.js +623 -0
  104. package/dist/adapters/workflow/engine/engine.js.map +1 -0
  105. package/dist/adapters/workflow/engine/event-registry.d.ts +12 -0
  106. package/dist/adapters/workflow/engine/event-registry.d.ts.map +1 -0
  107. package/dist/adapters/workflow/engine/event-registry.js +33 -0
  108. package/dist/adapters/workflow/engine/event-registry.js.map +1 -0
  109. package/dist/adapters/workflow/engine/interpolator.d.ts +11 -0
  110. package/dist/adapters/workflow/engine/interpolator.d.ts.map +1 -0
  111. package/dist/adapters/workflow/engine/interpolator.js +93 -0
  112. package/dist/adapters/workflow/engine/interpolator.js.map +1 -0
  113. package/dist/adapters/workflow/engine/registry.d.ts +12 -0
  114. package/dist/adapters/workflow/engine/registry.d.ts.map +1 -0
  115. package/dist/adapters/workflow/engine/registry.js +39 -0
  116. package/dist/adapters/workflow/engine/registry.js.map +1 -0
  117. package/dist/adapters/workflow/engine/template-registry.d.ts +60 -0
  118. package/dist/adapters/workflow/engine/template-registry.d.ts.map +1 -0
  119. package/dist/adapters/workflow/engine/template-registry.js +92 -0
  120. package/dist/adapters/workflow/engine/template-registry.js.map +1 -0
  121. package/dist/adapters/workflow/engine/types.d.ts +182 -0
  122. package/dist/adapters/workflow/engine/types.d.ts.map +1 -0
  123. package/dist/adapters/workflow/engine/types.js +3 -0
  124. package/dist/adapters/workflow/engine/types.js.map +1 -0
  125. package/dist/adapters/workflow/engine/utils/format-utils.d.ts +43 -0
  126. package/dist/adapters/workflow/engine/utils/format-utils.d.ts.map +1 -0
  127. package/dist/adapters/workflow/engine/utils/format-utils.js +137 -0
  128. package/dist/adapters/workflow/engine/utils/format-utils.js.map +1 -0
  129. package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts +7 -0
  130. package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts.map +1 -0
  131. package/dist/adapters/workflow/engine/utils/layout-calculator.js +87 -0
  132. package/dist/adapters/workflow/engine/utils/layout-calculator.js.map +1 -0
  133. package/dist/adapters/workflow/engine/utils/slugify.d.ts +2 -0
  134. package/dist/adapters/workflow/engine/utils/slugify.d.ts.map +1 -0
  135. package/dist/adapters/workflow/engine/utils/slugify.js +41 -0
  136. package/dist/adapters/workflow/engine/utils/slugify.js.map +1 -0
  137. package/dist/adapters/workflow/engine/validator.d.ts +9 -0
  138. package/dist/adapters/workflow/engine/validator.d.ts.map +1 -0
  139. package/dist/adapters/workflow/engine/validator.js +425 -0
  140. package/dist/adapters/workflow/engine/validator.js.map +1 -0
  141. package/dist/config/ChatFlowConfig.d.ts +7 -0
  142. package/dist/config/ChatFlowConfig.d.ts.map +1 -1
  143. package/dist/config/ChatFlowConfig.js +5 -0
  144. package/dist/config/ChatFlowConfig.js.map +1 -1
  145. package/dist/core/entities/ConversationSession.d.ts +36 -1
  146. package/dist/core/entities/ConversationSession.d.ts.map +1 -1
  147. package/dist/core/entities/ConversationSession.js +78 -1
  148. package/dist/core/entities/ConversationSession.js.map +1 -1
  149. package/dist/core/entities/Message.d.ts +5 -2
  150. package/dist/core/entities/Message.d.ts.map +1 -1
  151. package/dist/core/entities/Message.js +2 -0
  152. package/dist/core/entities/Message.js.map +1 -1
  153. package/dist/core/utils/AudioStreamBuffer.d.ts +33 -0
  154. package/dist/core/utils/AudioStreamBuffer.d.ts.map +1 -0
  155. package/dist/core/utils/AudioStreamBuffer.js +55 -0
  156. package/dist/core/utils/AudioStreamBuffer.js.map +1 -0
  157. package/dist/core/utils/AudioUtils.d.ts +41 -0
  158. package/dist/core/utils/AudioUtils.d.ts.map +1 -0
  159. package/dist/core/utils/AudioUtils.js +188 -0
  160. package/dist/core/utils/AudioUtils.js.map +1 -0
  161. package/dist/core/utils/LanguageDetector.d.ts +52 -0
  162. package/dist/core/utils/LanguageDetector.d.ts.map +1 -0
  163. package/dist/core/utils/LanguageDetector.js +173 -0
  164. package/dist/core/utils/LanguageDetector.js.map +1 -0
  165. package/dist/core/utils/WavUtils.d.ts +14 -0
  166. package/dist/core/utils/WavUtils.d.ts.map +1 -0
  167. package/dist/core/utils/WavUtils.js +37 -0
  168. package/dist/core/utils/WavUtils.js.map +1 -0
  169. package/dist/demo/cli-demo.js +10 -6
  170. package/dist/demo/cli-demo.js.map +1 -1
  171. package/dist/demo/console-chat.js +10 -6
  172. package/dist/demo/console-chat.js.map +1 -1
  173. package/dist/demo/interactive-voice-chat.d.ts +2 -0
  174. package/dist/demo/interactive-voice-chat.d.ts.map +1 -0
  175. package/dist/demo/interactive-voice-chat.js +180 -0
  176. package/dist/demo/interactive-voice-chat.js.map +1 -0
  177. package/dist/demo/voice-demo.d.ts +2 -0
  178. package/dist/demo/voice-demo.d.ts.map +1 -0
  179. package/dist/demo/voice-demo.js +188 -0
  180. package/dist/demo/voice-demo.js.map +1 -0
  181. package/dist/index.d.ts +9 -5
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +23 -8
  184. package/dist/index.js.map +1 -1
  185. package/dist/intent/IntentService.d.ts.map +1 -1
  186. package/dist/intent/IntentService.js +13 -7
  187. package/dist/intent/IntentService.js.map +1 -1
  188. package/dist/intent/MockIntentService.d.ts +2 -1
  189. package/dist/intent/MockIntentService.d.ts.map +1 -1
  190. package/dist/intent/MockIntentService.js +9 -3
  191. package/dist/intent/MockIntentService.js.map +1 -1
  192. package/dist/interfaces.d.ts +551 -6
  193. package/dist/interfaces.d.ts.map +1 -1
  194. package/dist/interfaces.js +19 -1
  195. package/dist/interfaces.js.map +1 -1
  196. package/dist/orchestrator/Orchestrator.d.ts +48 -4
  197. package/dist/orchestrator/Orchestrator.d.ts.map +1 -1
  198. package/dist/orchestrator/Orchestrator.js +650 -33
  199. package/dist/orchestrator/Orchestrator.js.map +1 -1
  200. package/dist/scripts/seed-collaborative-intents.d.ts +2 -0
  201. package/dist/scripts/seed-collaborative-intents.d.ts.map +1 -0
  202. package/dist/scripts/seed-collaborative-intents.js +90 -0
  203. package/dist/scripts/seed-collaborative-intents.js.map +1 -0
  204. package/dist/scripts/test-isolated-config.d.ts +2 -0
  205. package/dist/scripts/test-isolated-config.d.ts.map +1 -0
  206. package/dist/scripts/test-isolated-config.js +80 -0
  207. package/dist/scripts/test-isolated-config.js.map +1 -0
  208. package/dist/scripts/verify_redis_intents.js +4 -2
  209. package/dist/scripts/verify_redis_intents.js.map +1 -1
  210. package/dist/server/ChatFlowWebSocketServer.d.ts +46 -0
  211. package/dist/server/ChatFlowWebSocketServer.d.ts.map +1 -0
  212. package/dist/server/ChatFlowWebSocketServer.js +344 -0
  213. package/dist/server/ChatFlowWebSocketServer.js.map +1 -0
  214. package/dist/server/realtime-voice-server.d.ts +2 -0
  215. package/dist/server/realtime-voice-server.d.ts.map +1 -0
  216. package/dist/server/realtime-voice-server.js +627 -0
  217. package/dist/server/realtime-voice-server.js.map +1 -0
  218. package/dist/src/adapters/intent/IntentMatcher.d.ts +41 -0
  219. package/dist/src/adapters/intent/IntentMatcher.d.ts.map +1 -0
  220. package/dist/src/adapters/intent/IntentMatcher.js +167 -0
  221. package/dist/src/adapters/intent/IntentMatcher.js.map +1 -0
  222. package/dist/src/adapters/intent/IntentService.d.ts +26 -0
  223. package/dist/src/adapters/intent/IntentService.d.ts.map +1 -0
  224. package/dist/src/adapters/intent/IntentService.js +65 -0
  225. package/dist/src/adapters/intent/IntentService.js.map +1 -0
  226. package/dist/src/adapters/intent/MockIntentService.d.ts +7 -0
  227. package/dist/src/adapters/intent/MockIntentService.d.ts.map +1 -0
  228. package/dist/src/adapters/intent/MockIntentService.js +36 -0
  229. package/dist/src/adapters/intent/MockIntentService.js.map +1 -0
  230. package/dist/src/adapters/llm/GeminiLLMAdapter.d.ts +10 -0
  231. package/dist/src/adapters/llm/GeminiLLMAdapter.d.ts.map +1 -0
  232. package/dist/src/adapters/llm/GeminiLLMAdapter.js +102 -0
  233. package/dist/src/adapters/llm/GeminiLLMAdapter.js.map +1 -0
  234. package/dist/src/adapters/llm/MockLLMAdapter.d.ts +5 -0
  235. package/dist/src/adapters/llm/MockLLMAdapter.d.ts.map +1 -0
  236. package/dist/src/adapters/llm/MockLLMAdapter.js +31 -0
  237. package/dist/src/adapters/llm/MockLLMAdapter.js.map +1 -0
  238. package/dist/src/adapters/llm/OllamaLLMAdapter.d.ts +9 -0
  239. package/dist/src/adapters/llm/OllamaLLMAdapter.d.ts.map +1 -0
  240. package/dist/src/adapters/llm/OllamaLLMAdapter.js +74 -0
  241. package/dist/src/adapters/llm/OllamaLLMAdapter.js.map +1 -0
  242. package/dist/src/adapters/logger/ConsoleLogger.d.ts +12 -0
  243. package/dist/src/adapters/logger/ConsoleLogger.d.ts.map +1 -0
  244. package/dist/src/adapters/logger/ConsoleLogger.js +37 -0
  245. package/dist/src/adapters/logger/ConsoleLogger.js.map +1 -0
  246. package/dist/src/adapters/repository/InMemoryRepository.d.ts +57 -0
  247. package/dist/src/adapters/repository/InMemoryRepository.d.ts.map +1 -0
  248. package/dist/src/adapters/repository/InMemoryRepository.js +269 -0
  249. package/dist/src/adapters/repository/InMemoryRepository.js.map +1 -0
  250. package/dist/src/adapters/repository/RedisRepository.d.ts +72 -0
  251. package/dist/src/adapters/repository/RedisRepository.d.ts.map +1 -0
  252. package/dist/src/adapters/repository/RedisRepository.js +700 -0
  253. package/dist/src/adapters/repository/RedisRepository.js.map +1 -0
  254. package/dist/src/adapters/repository/SupabaseRepository.d.ts +60 -0
  255. package/dist/src/adapters/repository/SupabaseRepository.d.ts.map +1 -0
  256. package/dist/src/adapters/repository/SupabaseRepository.js +774 -0
  257. package/dist/src/adapters/repository/SupabaseRepository.js.map +1 -0
  258. package/dist/src/adapters/storage/RedisAudioStorageAdapter.d.ts +33 -0
  259. package/dist/src/adapters/storage/RedisAudioStorageAdapter.d.ts.map +1 -0
  260. package/dist/src/adapters/storage/RedisAudioStorageAdapter.js +121 -0
  261. package/dist/src/adapters/storage/RedisAudioStorageAdapter.js.map +1 -0
  262. package/dist/src/adapters/voice/GoogleVoiceAdapter.d.ts +33 -0
  263. package/dist/src/adapters/voice/GoogleVoiceAdapter.d.ts.map +1 -0
  264. package/dist/src/adapters/voice/GoogleVoiceAdapter.js +155 -0
  265. package/dist/src/adapters/voice/GoogleVoiceAdapter.js.map +1 -0
  266. package/dist/src/adapters/voice/LanguageVoiceMapper.d.ts +60 -0
  267. package/dist/src/adapters/voice/LanguageVoiceMapper.d.ts.map +1 -0
  268. package/dist/src/adapters/voice/LanguageVoiceMapper.js +130 -0
  269. package/dist/src/adapters/voice/LanguageVoiceMapper.js.map +1 -0
  270. package/dist/src/adapters/voice/VertexVoiceAdapter.d.ts +32 -0
  271. package/dist/src/adapters/voice/VertexVoiceAdapter.d.ts.map +1 -0
  272. package/dist/src/adapters/voice/VertexVoiceAdapter.js +179 -0
  273. package/dist/src/adapters/voice/VertexVoiceAdapter.js.map +1 -0
  274. package/dist/src/adapters/webhook/WebhookService.d.ts +47 -0
  275. package/dist/src/adapters/webhook/WebhookService.d.ts.map +1 -0
  276. package/dist/src/adapters/webhook/WebhookService.js +265 -0
  277. package/dist/src/adapters/webhook/WebhookService.js.map +1 -0
  278. package/dist/src/adapters/workflow/MockWorkflowAdapter.d.ts +5 -0
  279. package/dist/src/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -0
  280. package/dist/src/adapters/workflow/MockWorkflowAdapter.js +173 -0
  281. package/dist/src/adapters/workflow/MockWorkflowAdapter.js.map +1 -0
  282. package/dist/src/adapters/workflow/WorkflowAdapter.d.ts +55 -0
  283. package/dist/src/adapters/workflow/WorkflowAdapter.d.ts.map +1 -0
  284. package/dist/src/adapters/workflow/WorkflowAdapter.js +203 -0
  285. package/dist/src/adapters/workflow/WorkflowAdapter.js.map +1 -0
  286. package/dist/src/adapters/workflow/actions/index.d.ts +6 -0
  287. package/dist/src/adapters/workflow/actions/index.d.ts.map +1 -0
  288. package/dist/src/adapters/workflow/actions/index.js +22 -0
  289. package/dist/src/adapters/workflow/actions/index.js.map +1 -0
  290. package/dist/src/adapters/workflow/actions/pushOutputResultAction.d.ts +11 -0
  291. package/dist/src/adapters/workflow/actions/pushOutputResultAction.d.ts.map +1 -0
  292. package/dist/src/adapters/workflow/actions/pushOutputResultAction.js +31 -0
  293. package/dist/src/adapters/workflow/actions/pushOutputResultAction.js.map +1 -0
  294. package/dist/src/adapters/workflow/engine/constants.d.ts +3 -0
  295. package/dist/src/adapters/workflow/engine/constants.d.ts.map +1 -0
  296. package/dist/src/adapters/workflow/engine/constants.js +6 -0
  297. package/dist/src/adapters/workflow/engine/constants.js.map +1 -0
  298. package/dist/src/adapters/workflow/engine/engine.d.ts +32 -0
  299. package/dist/src/adapters/workflow/engine/engine.d.ts.map +1 -0
  300. package/dist/src/adapters/workflow/engine/engine.js +622 -0
  301. package/dist/src/adapters/workflow/engine/engine.js.map +1 -0
  302. package/dist/src/adapters/workflow/engine/event-registry.d.ts +12 -0
  303. package/dist/src/adapters/workflow/engine/event-registry.d.ts.map +1 -0
  304. package/dist/src/adapters/workflow/engine/event-registry.js +33 -0
  305. package/dist/src/adapters/workflow/engine/event-registry.js.map +1 -0
  306. package/dist/src/adapters/workflow/engine/interpolator.d.ts +11 -0
  307. package/dist/src/adapters/workflow/engine/interpolator.d.ts.map +1 -0
  308. package/dist/src/adapters/workflow/engine/interpolator.js +93 -0
  309. package/dist/src/adapters/workflow/engine/interpolator.js.map +1 -0
  310. package/dist/src/adapters/workflow/engine/registry.d.ts +12 -0
  311. package/dist/src/adapters/workflow/engine/registry.d.ts.map +1 -0
  312. package/dist/src/adapters/workflow/engine/registry.js +39 -0
  313. package/dist/src/adapters/workflow/engine/registry.js.map +1 -0
  314. package/dist/src/adapters/workflow/engine/template-registry.d.ts +60 -0
  315. package/dist/src/adapters/workflow/engine/template-registry.d.ts.map +1 -0
  316. package/dist/src/adapters/workflow/engine/template-registry.js +92 -0
  317. package/dist/src/adapters/workflow/engine/template-registry.js.map +1 -0
  318. package/dist/src/adapters/workflow/engine/utils/format-utils.d.ts +43 -0
  319. package/dist/src/adapters/workflow/engine/utils/format-utils.d.ts.map +1 -0
  320. package/dist/src/adapters/workflow/engine/utils/format-utils.js +137 -0
  321. package/dist/src/adapters/workflow/engine/utils/format-utils.js.map +1 -0
  322. package/dist/src/adapters/workflow/engine/utils/layout-calculator.d.ts +7 -0
  323. package/dist/src/adapters/workflow/engine/utils/layout-calculator.d.ts.map +1 -0
  324. package/dist/src/adapters/workflow/engine/utils/layout-calculator.js +87 -0
  325. package/dist/src/adapters/workflow/engine/utils/layout-calculator.js.map +1 -0
  326. package/dist/src/adapters/workflow/engine/utils/slugify.d.ts +2 -0
  327. package/dist/src/adapters/workflow/engine/utils/slugify.d.ts.map +1 -0
  328. package/dist/src/adapters/workflow/engine/utils/slugify.js +41 -0
  329. package/dist/src/adapters/workflow/engine/utils/slugify.js.map +1 -0
  330. package/dist/src/adapters/workflow/engine/validator.d.ts +9 -0
  331. package/dist/src/adapters/workflow/engine/validator.d.ts.map +1 -0
  332. package/dist/src/adapters/workflow/engine/validator.js +425 -0
  333. package/dist/src/adapters/workflow/engine/validator.js.map +1 -0
  334. package/dist/src/api/router.d.ts +3 -0
  335. package/dist/src/api/router.d.ts.map +1 -0
  336. package/dist/src/api/router.js +27 -0
  337. package/dist/src/api/router.js.map +1 -0
  338. package/dist/src/api/routes/configs.d.ts +3 -0
  339. package/dist/src/api/routes/configs.d.ts.map +1 -0
  340. package/dist/src/api/routes/configs.js +110 -0
  341. package/dist/src/api/routes/configs.js.map +1 -0
  342. package/dist/src/api/routes/executions.d.ts +3 -0
  343. package/dist/src/api/routes/executions.d.ts.map +1 -0
  344. package/dist/src/api/routes/executions.js +77 -0
  345. package/dist/src/api/routes/executions.js.map +1 -0
  346. package/dist/src/api/routes/intents.d.ts +3 -0
  347. package/dist/src/api/routes/intents.d.ts.map +1 -0
  348. package/dist/src/api/routes/intents.js +128 -0
  349. package/dist/src/api/routes/intents.js.map +1 -0
  350. package/dist/src/api/routes/sessions.d.ts +3 -0
  351. package/dist/src/api/routes/sessions.d.ts.map +1 -0
  352. package/dist/src/api/routes/sessions.js +105 -0
  353. package/dist/src/api/routes/sessions.js.map +1 -0
  354. package/dist/src/api/routes/tenants.d.ts +3 -0
  355. package/dist/src/api/routes/tenants.d.ts.map +1 -0
  356. package/dist/src/api/routes/tenants.js +109 -0
  357. package/dist/src/api/routes/tenants.js.map +1 -0
  358. package/dist/src/api/routes/users.d.ts +3 -0
  359. package/dist/src/api/routes/users.d.ts.map +1 -0
  360. package/dist/src/api/routes/users.js +51 -0
  361. package/dist/src/api/routes/users.js.map +1 -0
  362. package/dist/src/api/routes/workflows.d.ts +3 -0
  363. package/dist/src/api/routes/workflows.d.ts.map +1 -0
  364. package/dist/src/api/routes/workflows.js +132 -0
  365. package/dist/src/api/routes/workflows.js.map +1 -0
  366. package/dist/src/config/ChatFlowConfig.d.ts +66 -0
  367. package/dist/src/config/ChatFlowConfig.d.ts.map +1 -0
  368. package/dist/src/config/ChatFlowConfig.js +54 -0
  369. package/dist/src/config/ChatFlowConfig.js.map +1 -0
  370. package/dist/src/config/index.d.ts +2 -0
  371. package/dist/src/config/index.d.ts.map +1 -0
  372. package/dist/src/config/index.js +7 -0
  373. package/dist/src/config/index.js.map +1 -0
  374. package/dist/src/config/swagger.d.ts +2 -0
  375. package/dist/src/config/swagger.d.ts.map +1 -0
  376. package/dist/src/config/swagger.js +136 -0
  377. package/dist/src/config/swagger.js.map +1 -0
  378. package/dist/src/core/entities/ConversationSession.d.ts +58 -0
  379. package/dist/src/core/entities/ConversationSession.d.ts.map +1 -0
  380. package/dist/src/core/entities/ConversationSession.js +160 -0
  381. package/dist/src/core/entities/ConversationSession.js.map +1 -0
  382. package/dist/src/core/entities/Message.d.ts +14 -0
  383. package/dist/src/core/entities/Message.d.ts.map +1 -0
  384. package/dist/src/core/entities/Message.js +32 -0
  385. package/dist/src/core/entities/Message.js.map +1 -0
  386. package/dist/src/core/errors/ChatFlowError.d.ts +71 -0
  387. package/dist/src/core/errors/ChatFlowError.d.ts.map +1 -0
  388. package/dist/src/core/errors/ChatFlowError.js +108 -0
  389. package/dist/src/core/errors/ChatFlowError.js.map +1 -0
  390. package/dist/src/core/errors/index.d.ts +2 -0
  391. package/dist/src/core/errors/index.d.ts.map +1 -0
  392. package/dist/src/core/errors/index.js +15 -0
  393. package/dist/src/core/errors/index.js.map +1 -0
  394. package/dist/src/core/utils/AudioUtils.d.ts +41 -0
  395. package/dist/src/core/utils/AudioUtils.d.ts.map +1 -0
  396. package/dist/src/core/utils/AudioUtils.js +188 -0
  397. package/dist/src/core/utils/AudioUtils.js.map +1 -0
  398. package/dist/src/core/utils/LanguageDetector.d.ts +52 -0
  399. package/dist/src/core/utils/LanguageDetector.d.ts.map +1 -0
  400. package/dist/src/core/utils/LanguageDetector.js +173 -0
  401. package/dist/src/core/utils/LanguageDetector.js.map +1 -0
  402. package/dist/src/demo/cli-demo.d.ts +2 -0
  403. package/dist/src/demo/cli-demo.d.ts.map +1 -0
  404. package/dist/src/demo/cli-demo.js +146 -0
  405. package/dist/src/demo/cli-demo.js.map +1 -0
  406. package/dist/src/demo/console-chat.d.ts +2 -0
  407. package/dist/src/demo/console-chat.d.ts.map +1 -0
  408. package/dist/src/demo/console-chat.js +148 -0
  409. package/dist/src/demo/console-chat.js.map +1 -0
  410. package/dist/src/index.d.ts +27 -0
  411. package/dist/src/index.d.ts.map +1 -0
  412. package/dist/src/index.js +78 -0
  413. package/dist/src/index.js.map +1 -0
  414. package/dist/src/interfaces.d.ts +663 -0
  415. package/dist/src/interfaces.d.ts.map +1 -0
  416. package/dist/src/interfaces.js +36 -0
  417. package/dist/src/interfaces.js.map +1 -0
  418. package/dist/src/orchestrator/Orchestrator.d.ts +62 -0
  419. package/dist/src/orchestrator/Orchestrator.d.ts.map +1 -0
  420. package/dist/src/orchestrator/Orchestrator.js +697 -0
  421. package/dist/src/orchestrator/Orchestrator.js.map +1 -0
  422. package/dist/src/scripts/debug-redis.d.ts +2 -0
  423. package/dist/src/scripts/debug-redis.d.ts.map +1 -0
  424. package/dist/src/scripts/debug-redis.js +55 -0
  425. package/dist/src/scripts/debug-redis.js.map +1 -0
  426. package/dist/src/scripts/seed-collaborative-intents.d.ts +2 -0
  427. package/dist/src/scripts/seed-collaborative-intents.d.ts.map +1 -0
  428. package/dist/src/scripts/seed-collaborative-intents.js +90 -0
  429. package/dist/src/scripts/seed-collaborative-intents.js.map +1 -0
  430. package/dist/src/scripts/test-isolated-config.d.ts +2 -0
  431. package/dist/src/scripts/test-isolated-config.d.ts.map +1 -0
  432. package/dist/src/scripts/test-isolated-config.js +80 -0
  433. package/dist/src/scripts/test-isolated-config.js.map +1 -0
  434. package/dist/src/scripts/verify_memory_intents.d.ts +2 -0
  435. package/dist/src/scripts/verify_memory_intents.d.ts.map +1 -0
  436. package/dist/src/scripts/verify_memory_intents.js +45 -0
  437. package/dist/src/scripts/verify_memory_intents.js.map +1 -0
  438. package/dist/src/scripts/verify_redis_intents.d.ts +2 -0
  439. package/dist/src/scripts/verify_redis_intents.d.ts.map +1 -0
  440. package/dist/src/scripts/verify_redis_intents.js +52 -0
  441. package/dist/src/scripts/verify_redis_intents.js.map +1 -0
  442. package/dist/src/server/ChatFlowWebSocketServer.d.ts +42 -0
  443. package/dist/src/server/ChatFlowWebSocketServer.d.ts.map +1 -0
  444. package/dist/src/server/ChatFlowWebSocketServer.js +355 -0
  445. package/dist/src/server/ChatFlowWebSocketServer.js.map +1 -0
  446. package/dist/src/utils/crypto.d.ts +7 -0
  447. package/dist/src/utils/crypto.d.ts.map +1 -0
  448. package/dist/src/utils/crypto.js +35 -0
  449. package/dist/src/utils/crypto.js.map +1 -0
  450. package/dist/src/utils/encryption-helpers.d.ts +14 -0
  451. package/dist/src/utils/encryption-helpers.d.ts.map +1 -0
  452. package/dist/src/utils/encryption-helpers.js +49 -0
  453. package/dist/src/utils/encryption-helpers.js.map +1 -0
  454. package/dist/utils/crypto.d.ts +7 -0
  455. package/dist/utils/crypto.d.ts.map +1 -0
  456. package/dist/utils/crypto.js +35 -0
  457. package/dist/utils/crypto.js.map +1 -0
  458. package/dist/utils/encryption-helpers.d.ts +14 -0
  459. package/dist/utils/encryption-helpers.d.ts.map +1 -0
  460. package/dist/utils/encryption-helpers.js +49 -0
  461. package/dist/utils/encryption-helpers.js.map +1 -0
  462. package/dist/web/seed-demo-data.d.ts +2 -0
  463. package/dist/web/seed-demo-data.d.ts.map +1 -0
  464. package/dist/web/seed-demo-data.js +267 -0
  465. package/dist/web/seed-demo-data.js.map +1 -0
  466. package/dist/web/web-server.d.ts +2 -0
  467. package/dist/web/web-server.d.ts.map +1 -0
  468. package/dist/web/web-server.js +165 -0
  469. package/dist/web/web-server.js.map +1 -0
  470. package/package.json +32 -3
@@ -0,0 +1,54 @@
1
+ import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
2
+ /**
3
+ * Hybrid Voice Adapter
4
+ * Combines multiple voice providers:
5
+ * - STT: Gemini (free with Gemini API key, supports 125+ languages with auto-detection)
6
+ * - TTS: ElevenLabs (supports 70+ languages with multilingual voice cloning)
7
+ *
8
+ * Features:
9
+ * - Automatic language detection
10
+ * - Dynamic voice switching based on detected language
11
+ * - Language-to-voice mapping
12
+ */
13
+ export declare class HybridVoiceAdapter implements IVoiceAdapter {
14
+ private sttAdapter;
15
+ private ttsAdapter;
16
+ private voiceMapper;
17
+ private currentLanguage;
18
+ private voiceConfig?;
19
+ constructor(geminiApiKey: string, elevenLabsApiKey: string, voiceConfig?: VoiceConfig);
20
+ /**
21
+ * Speech-to-text using Gemini with auto language detection
22
+ */
23
+ speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
24
+ /**
25
+ * Text-to-speech using ElevenLabs with dynamic voice selection
26
+ */
27
+ textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
28
+ /**
29
+ * Declare the audio format produced by the TTS adapter (ElevenLabs)
30
+ */
31
+ getTTSOutputFormat(): AudioFormatMetadata;
32
+ /**
33
+ * Declare the expected audio format for the STT adapter (Gemini)
34
+ */
35
+ getSTTInputFormat(): AudioFormatMetadata;
36
+ /**
37
+ * Set current language for TTS voice selection
38
+ * @param languageCode ISO 639-1 language code (e.g., 'en', 'ar', 'fa')
39
+ */
40
+ setLanguage(languageCode: string): void;
41
+ /**
42
+ * Get current language
43
+ */
44
+ getCurrentLanguage(): string;
45
+ /**
46
+ * Get supported languages
47
+ */
48
+ getSupportedLanguages(): string[];
49
+ /**
50
+ * Add custom voice mapping for a language
51
+ */
52
+ addVoiceMapping(languageCode: string, voiceId: string, name: string): void;
53
+ }
54
+ //# sourceMappingURL=HybridVoiceAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridVoiceAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/HybridVoiceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKnF;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACpD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,WAAW,CAAC,CAAc;gBAG9B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,WAAW;IAwB7B;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrF;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBlF;;OAEG;IACH,kBAAkB,IAAI,mBAAmB;IAIzC;;OAEG;IACH,iBAAiB,IAAI,mBAAmB;IAIxC;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAG7E"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HybridVoiceAdapter = void 0;
4
+ const GeminiVoiceAdapter_1 = require("./GeminiVoiceAdapter");
5
+ const ElevenLabsVoiceAdapter_1 = require("./ElevenLabsVoiceAdapter");
6
+ const LanguageVoiceMapper_1 = require("./LanguageVoiceMapper");
7
+ /**
8
+ * Hybrid Voice Adapter
9
+ * Combines multiple voice providers:
10
+ * - STT: Gemini (free with Gemini API key, supports 125+ languages with auto-detection)
11
+ * - TTS: ElevenLabs (supports 70+ languages with multilingual voice cloning)
12
+ *
13
+ * Features:
14
+ * - Automatic language detection
15
+ * - Dynamic voice switching based on detected language
16
+ * - Language-to-voice mapping
17
+ */
18
+ class HybridVoiceAdapter {
19
+ constructor(geminiApiKey, elevenLabsApiKey, voiceConfig) {
20
+ this.currentLanguage = 'en';
21
+ this.voiceConfig = voiceConfig;
22
+ // Use Gemini for STT
23
+ this.sttAdapter = new GeminiVoiceAdapter_1.GeminiVoiceAdapter(geminiApiKey, voiceConfig);
24
+ // Use ElevenLabs for TTS
25
+ this.ttsAdapter = new ElevenLabsVoiceAdapter_1.ElevenLabsVoiceAdapter(elevenLabsApiKey, voiceConfig);
26
+ // Initialize voice mapper with custom mappings from config
27
+ const customVoiceMappings = voiceConfig?.tts?.multiLingualVoices;
28
+ let transformedMappings;
29
+ if (customVoiceMappings) {
30
+ transformedMappings = {};
31
+ for (const [lang, voiceId] of Object.entries(customVoiceMappings)) {
32
+ transformedMappings[lang] = { voiceId, name: `Custom ${lang.toUpperCase()} Voice` };
33
+ }
34
+ }
35
+ this.voiceMapper = new LanguageVoiceMapper_1.LanguageVoiceMapper(transformedMappings);
36
+ }
37
+ /**
38
+ * Speech-to-text using Gemini with auto language detection
39
+ */
40
+ async speechToText(audioBase64, config) {
41
+ return await this.sttAdapter.speechToText(audioBase64, config);
42
+ }
43
+ /**
44
+ * Text-to-speech using ElevenLabs with dynamic voice selection
45
+ */
46
+ async textToSpeech(text, config) {
47
+ // Use language-specific voice if available
48
+ const voiceId = this.voiceMapper.getVoiceForLanguage(this.currentLanguage);
49
+ // Build language-specific config
50
+ const languageConfig = {
51
+ provider: (config?.provider || this.voiceConfig?.tts?.provider || 'elevenlabs'),
52
+ voice: voiceId,
53
+ language: this.currentLanguage,
54
+ speakingRate: config?.speakingRate || this.voiceConfig?.tts?.speakingRate,
55
+ pitch: config?.pitch || this.voiceConfig?.tts?.pitch
56
+ };
57
+ return await this.ttsAdapter.textToSpeech(text, languageConfig);
58
+ }
59
+ /**
60
+ * Declare the audio format produced by the TTS adapter (ElevenLabs)
61
+ */
62
+ getTTSOutputFormat() {
63
+ return this.ttsAdapter.getTTSOutputFormat();
64
+ }
65
+ /**
66
+ * Declare the expected audio format for the STT adapter (Gemini)
67
+ */
68
+ getSTTInputFormat() {
69
+ return this.sttAdapter.getSTTInputFormat();
70
+ }
71
+ /**
72
+ * Set current language for TTS voice selection
73
+ * @param languageCode ISO 639-1 language code (e.g., 'en', 'ar', 'fa')
74
+ */
75
+ setLanguage(languageCode) {
76
+ if (this.currentLanguage !== languageCode) {
77
+ const voiceMapping = this.voiceMapper.getVoiceMapping(languageCode);
78
+ console.log(`[HybridVoiceAdapter] Language switched to '${languageCode}' using voice: ${voiceMapping.name} (${voiceMapping.voiceId})`);
79
+ }
80
+ this.currentLanguage = languageCode;
81
+ }
82
+ /**
83
+ * Get current language
84
+ */
85
+ getCurrentLanguage() {
86
+ return this.currentLanguage;
87
+ }
88
+ /**
89
+ * Get supported languages
90
+ */
91
+ getSupportedLanguages() {
92
+ return this.voiceMapper.getSupportedLanguages();
93
+ }
94
+ /**
95
+ * Add custom voice mapping for a language
96
+ */
97
+ addVoiceMapping(languageCode, voiceId, name) {
98
+ this.voiceMapper.setVoiceMapping(languageCode, { voiceId, name });
99
+ }
100
+ }
101
+ exports.HybridVoiceAdapter = HybridVoiceAdapter;
102
+ //# sourceMappingURL=HybridVoiceAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridVoiceAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/HybridVoiceAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Language to Voice ID Mapping
3
+ *
4
+ * Maps ISO 639-1 language codes to ElevenLabs voice IDs.
5
+ * Provides default voices for common languages and supports custom mappings.
6
+ *
7
+ * VOICE PREFERENCE POLICY:
8
+ * - Female voices are preferred by default for better user experience
9
+ * - Only use male voices when female voices are not available for a language
10
+ * - Default voice: Rachel (female, multilingual, supports 29 languages)
11
+ */
12
+ export interface VoiceMapping {
13
+ voiceId: string;
14
+ name: string;
15
+ description?: string;
16
+ gender?: 'female' | 'male' | 'neutral';
17
+ }
18
+ export declare class LanguageVoiceMapper {
19
+ private static readonly DEFAULT_VOICES;
20
+ /**
21
+ * VOICE PREFERENCE POLICY:
22
+ * All default voices use Rachel (21m00Tcm4TlvDq8ikWAM) - a female multilingual voice.
23
+ *
24
+ * To add language-specific female voices:
25
+ * 1. Use customMappings in constructor, OR
26
+ * 2. Configure via ConversationConfig.languageVoiceMapping
27
+ *
28
+ * Example female ElevenLabs voices (update with actual voice IDs):
29
+ * - Rachel: 21m00Tcm4TlvDq8ikWAM (multilingual, female)
30
+ * - Bella: EXAVITQu4vr4xnSDxMaL (English, female)
31
+ * - Elli: MF3mGyEYCl7XYWbV9V6O (English, female)
32
+ *
33
+ * Always prefer female voices unless specifically unavailable for a language.
34
+ */
35
+ private customMappings;
36
+ constructor(customMappings?: Record<string, VoiceMapping>);
37
+ /**
38
+ * Get voice ID for a language
39
+ * @param languageCode ISO 639-1 language code
40
+ * @returns Voice ID for the language
41
+ */
42
+ getVoiceForLanguage(languageCode: string): string;
43
+ /**
44
+ * Get voice mapping details
45
+ */
46
+ getVoiceMapping(languageCode: string): VoiceMapping;
47
+ /**
48
+ * Add or update custom voice mapping
49
+ */
50
+ setVoiceMapping(languageCode: string, voiceMapping: VoiceMapping): void;
51
+ /**
52
+ * Get all supported languages
53
+ */
54
+ getSupportedLanguages(): string[];
55
+ /**
56
+ * Check if a language is supported
57
+ */
58
+ isLanguageSupported(languageCode: string): boolean;
59
+ }
60
+ //# sourceMappingURL=LanguageVoiceMapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageVoiceMapper.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/LanguageVoiceMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,mBAAmB;IAG5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAwDpC;IAEF;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,cAAc,CAA+B;gBAEzC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAIzD;;;;OAIG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAkBjD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY;IAOnD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI;IAIvE;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAOjC;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;CAIrD"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ /**
3
+ * Language to Voice ID Mapping
4
+ *
5
+ * Maps ISO 639-1 language codes to ElevenLabs voice IDs.
6
+ * Provides default voices for common languages and supports custom mappings.
7
+ *
8
+ * VOICE PREFERENCE POLICY:
9
+ * - Female voices are preferred by default for better user experience
10
+ * - Only use male voices when female voices are not available for a language
11
+ * - Default voice: Rachel (female, multilingual, supports 29 languages)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.LanguageVoiceMapper = void 0;
15
+ class LanguageVoiceMapper {
16
+ constructor(customMappings) {
17
+ this.customMappings = customMappings || {};
18
+ }
19
+ /**
20
+ * Get voice ID for a language
21
+ * @param languageCode ISO 639-1 language code
22
+ * @returns Voice ID for the language
23
+ */
24
+ getVoiceForLanguage(languageCode) {
25
+ const code = languageCode.toLowerCase();
26
+ // Check custom mappings first
27
+ if (this.customMappings[code]) {
28
+ return this.customMappings[code].voiceId;
29
+ }
30
+ // Check default mappings
31
+ if (LanguageVoiceMapper.DEFAULT_VOICES[code]) {
32
+ return LanguageVoiceMapper.DEFAULT_VOICES[code].voiceId;
33
+ }
34
+ // Fallback to default English voice
35
+ console.warn(`[LanguageVoiceMapper] No voice mapping found for language '${code}'. Using default English voice.`);
36
+ return LanguageVoiceMapper.DEFAULT_VOICES['en'].voiceId;
37
+ }
38
+ /**
39
+ * Get voice mapping details
40
+ */
41
+ getVoiceMapping(languageCode) {
42
+ const code = languageCode.toLowerCase();
43
+ return this.customMappings[code] ||
44
+ LanguageVoiceMapper.DEFAULT_VOICES[code] ||
45
+ LanguageVoiceMapper.DEFAULT_VOICES['en'];
46
+ }
47
+ /**
48
+ * Add or update custom voice mapping
49
+ */
50
+ setVoiceMapping(languageCode, voiceMapping) {
51
+ this.customMappings[languageCode.toLowerCase()] = voiceMapping;
52
+ }
53
+ /**
54
+ * Get all supported languages
55
+ */
56
+ getSupportedLanguages() {
57
+ return [
58
+ ...Object.keys(LanguageVoiceMapper.DEFAULT_VOICES),
59
+ ...Object.keys(this.customMappings)
60
+ ];
61
+ }
62
+ /**
63
+ * Check if a language is supported
64
+ */
65
+ isLanguageSupported(languageCode) {
66
+ const code = languageCode.toLowerCase();
67
+ return !!(LanguageVoiceMapper.DEFAULT_VOICES[code] || this.customMappings[code]);
68
+ }
69
+ }
70
+ exports.LanguageVoiceMapper = LanguageVoiceMapper;
71
+ // Default voice mappings for common languages
72
+ // These are example ElevenLabs voice IDs - replace with actual production voices
73
+ LanguageVoiceMapper.DEFAULT_VOICES = {
74
+ 'en': {
75
+ voiceId: '21m00Tcm4TlvDq8ikWAM', // Rachel (default English voice)
76
+ name: 'Rachel',
77
+ description: 'Clear American English'
78
+ },
79
+ 'ar': {
80
+ voiceId: '21m00Tcm4TlvDq8ikWAM', // Same voice - ElevenLabs supports multilingual
81
+ name: 'Rachel (Arabic)',
82
+ description: 'Multilingual voice for Arabic'
83
+ },
84
+ 'fa': {
85
+ voiceId: '21m00Tcm4TlvDq8ikWAM', // Same voice - supports Persian
86
+ name: 'Rachel (Persian)',
87
+ description: 'Multilingual voice for Persian'
88
+ },
89
+ 'es': {
90
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
91
+ name: 'Rachel (Spanish)',
92
+ description: 'Multilingual voice for Spanish'
93
+ },
94
+ 'fr': {
95
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
96
+ name: 'Rachel (French)',
97
+ description: 'Multilingual voice for French'
98
+ },
99
+ 'de': {
100
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
101
+ name: 'Rachel (German)',
102
+ description: 'Multilingual voice for German'
103
+ },
104
+ 'it': {
105
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
106
+ name: 'Rachel (Italian)',
107
+ description: 'Multilingual voice for Italian'
108
+ },
109
+ 'pt': {
110
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
111
+ name: 'Rachel (Portuguese)',
112
+ description: 'Multilingual voice for Portuguese'
113
+ },
114
+ 'zh': {
115
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
116
+ name: 'Rachel (Chinese)',
117
+ description: 'Multilingual voice for Chinese'
118
+ },
119
+ 'ja': {
120
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
121
+ name: 'Rachel (Japanese)',
122
+ description: 'Multilingual voice for Japanese'
123
+ },
124
+ 'ko': {
125
+ voiceId: '21m00Tcm4TlvDq8ikWAM',
126
+ name: 'Rachel (Korean)',
127
+ description: 'Multilingual voice for Korean'
128
+ }
129
+ };
130
+ //# sourceMappingURL=LanguageVoiceMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageVoiceMapper.js","sourceRoot":"","sources":["../../../src/adapters/voice/LanguageVoiceMapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
2
+ /**
3
+ * Vertex Voice Adapter - Gemini 2.0 / 2.5
4
+ * Uses the Generative Language API (Multimodal) for both STT and TTS.
5
+ */
6
+ export declare class VertexVoiceAdapter implements IVoiceAdapter {
7
+ private apiKey;
8
+ private voiceConfig?;
9
+ private sttModelId;
10
+ private ttsModelId;
11
+ constructor(apiKey: string, voiceConfig?: VoiceConfig);
12
+ /**
13
+ * Speech-to-Text via Gemini 2.0
14
+ * Uses multimodal input to transcribe audio.
15
+ */
16
+ speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
17
+ /**
18
+ * Text-to-Speech via Gemini 2.5
19
+ * Requests "AUDIO" modality in the response.
20
+ */
21
+ textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
22
+ private base64ToUint8Array;
23
+ /**
24
+ * Wrap raw PCM data in a WAV container.
25
+ * Gemini output: 24kHz, 1 channel, 16-bit
26
+ */
27
+ private wrapInWav;
28
+ private writeString;
29
+ getTTSOutputFormat(): AudioFormatMetadata;
30
+ getSTTInputFormat(): AudioFormatMetadata;
31
+ }
32
+ //# sourceMappingURL=VertexVoiceAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VertexVoiceAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/VertexVoiceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEnF;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;IAGlC,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,UAAU,CAAkC;gBAExC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAKrD;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAoDrF;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAkDlF,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,WAAW;IAMnB,kBAAkB,IAAI,mBAAmB;IAIzC,iBAAiB,IAAI,mBAAmB;CAG3C"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VertexVoiceAdapter = void 0;
4
+ /**
5
+ * Vertex Voice Adapter - Gemini 2.0 / 2.5
6
+ * Uses the Generative Language API (Multimodal) for both STT and TTS.
7
+ */
8
+ class VertexVoiceAdapter {
9
+ constructor(apiKey, voiceConfig) {
10
+ // Using lite model for STT (known to work with inline audio)
11
+ this.sttModelId = 'gemini-2.0-flash-lite';
12
+ // Using specific preview model for TTS support
13
+ this.ttsModelId = 'gemini-2.5-flash-preview-tts';
14
+ this.apiKey = apiKey;
15
+ this.voiceConfig = voiceConfig;
16
+ }
17
+ /**
18
+ * Speech-to-Text via Gemini 2.0
19
+ * Uses multimodal input to transcribe audio.
20
+ */
21
+ async speechToText(audioBase64, config) {
22
+ const url = `https://generativelanguage.googleapis.com/v1beta/models/${this.sttModelId}:generateContent?key=${this.apiKey}`;
23
+ // STT uses camelCase for gemini-2.0-flash-exp standard parts (or snake_case? exp usually supports snake_case but let's stick to standard if possible or try likely variants)
24
+ // Trying camelCase based on standard JSON API behavior.
25
+ try {
26
+ const response = await fetch(url, {
27
+ method: 'POST',
28
+ headers: { 'Content-Type': 'application/json' },
29
+ body: JSON.stringify({
30
+ contents: [{
31
+ role: 'user',
32
+ parts: [
33
+ // System instruction via prompt
34
+ { text: "Transcribe the audio exactly as spoken. Do not add timestamps, speaker labels, or conversational filler." },
35
+ {
36
+ inlineData: {
37
+ mimeType: config?.encoding === 'FLAC' ? 'audio/flac' :
38
+ config?.encoding === 'LINEAR16' ? 'audio/l16' :
39
+ 'audio/wav',
40
+ data: audioBase64
41
+ }
42
+ }
43
+ ]
44
+ }],
45
+ generationConfig: {
46
+ temperature: 0,
47
+ }
48
+ })
49
+ });
50
+ if (!response.ok) {
51
+ const errorText = await response.text();
52
+ throw new Error(`Gemini STT Error (${response.status}): ${errorText}`);
53
+ }
54
+ const json = await response.json();
55
+ const text = json.candidates?.[0]?.content?.parts?.[0]?.text;
56
+ if (!text) {
57
+ console.warn('Gemini STT returned no text content.');
58
+ return '';
59
+ }
60
+ return text.trim();
61
+ }
62
+ catch (error) {
63
+ console.error('Vertex STT Exception:', error);
64
+ throw new Error(`STT failed: ${error.message}`);
65
+ }
66
+ }
67
+ /**
68
+ * Text-to-Speech via Gemini 2.5
69
+ * Requests "AUDIO" modality in the response.
70
+ */
71
+ async textToSpeech(text, config) {
72
+ const ttsConfig = config || this.voiceConfig?.tts;
73
+ const voiceName = ttsConfig?.voice || 'Puck';
74
+ const url = `https://generativelanguage.googleapis.com/v1beta/models/${this.ttsModelId}:generateContent?key=${this.apiKey}`;
75
+ // Uses snake_case for TTS preview model as established by working attempts initially (Step 231)
76
+ try {
77
+ const response = await fetch(url, {
78
+ method: 'POST',
79
+ headers: { 'Content-Type': 'application/json' },
80
+ body: JSON.stringify({
81
+ contents: [{
82
+ parts: [{ text: `Please speak the following text: ${text}` }]
83
+ }],
84
+ generation_config: {
85
+ response_modalities: ["AUDIO"],
86
+ speech_config: {
87
+ voice_config: {
88
+ prebuilt_voice_config: {
89
+ voice_name: voiceName
90
+ }
91
+ }
92
+ }
93
+ }
94
+ })
95
+ });
96
+ if (!response.ok) {
97
+ const errorText = await response.text();
98
+ if (response.status === 401)
99
+ throw new Error("Unauthorized: Invalid API Key.");
100
+ throw new Error(`Gemini TTS Error (${response.status}): ${errorText}`);
101
+ }
102
+ const json = await response.json();
103
+ // Extract the base64 audio data
104
+ const audioPart = json.candidates?.[0]?.content?.parts?.find((p) => p.inlineData || p.inline_data);
105
+ const audioBase64 = audioPart?.inlineData?.data || audioPart?.inline_data?.data;
106
+ if (!audioBase64) {
107
+ throw new Error('Model generated response but did not return audio data. Ensure "AUDIO" modality is supported by your key/region.');
108
+ }
109
+ return this.wrapInWav(this.base64ToUint8Array(audioBase64));
110
+ }
111
+ catch (error) {
112
+ console.error('Vertex TTS Exception:', error);
113
+ throw new Error(`TTS failed: ${error.message}`);
114
+ }
115
+ }
116
+ base64ToUint8Array(base64) {
117
+ if (typeof Buffer !== 'undefined') {
118
+ return new Uint8Array(Buffer.from(base64, 'base64'));
119
+ }
120
+ else {
121
+ const binaryString = atob(base64);
122
+ const len = binaryString.length;
123
+ const bytes = new Uint8Array(len);
124
+ for (let i = 0; i < len; i++) {
125
+ bytes[i] = binaryString.charCodeAt(i);
126
+ }
127
+ return bytes;
128
+ }
129
+ }
130
+ /**
131
+ * Wrap raw PCM data in a WAV container.
132
+ * Gemini output: 24kHz, 1 channel, 16-bit
133
+ */
134
+ wrapInWav(pcmData) {
135
+ const sampleRate = 24000;
136
+ const channels = 1;
137
+ const bitDepth = 16;
138
+ const byteRate = sampleRate * channels * (bitDepth / 8);
139
+ const blockAlign = channels * (bitDepth / 8);
140
+ const dataSize = pcmData.length;
141
+ const fileSize = 36 + dataSize;
142
+ const header = new Uint8Array(44);
143
+ const view = new DataView(header.buffer);
144
+ // RIFF chunk descriptor
145
+ this.writeString(view, 0, 'RIFF');
146
+ view.setUint32(4, fileSize, true); // true = little-endian
147
+ this.writeString(view, 8, 'WAVE');
148
+ // fmt sub-chunk
149
+ this.writeString(view, 12, 'fmt ');
150
+ view.setUint32(16, 16, true); // Subchunk1Size (16 for PCM)
151
+ view.setUint16(20, 1, true); // AudioFormat (1 for PCM)
152
+ view.setUint16(22, channels, true);
153
+ view.setUint32(24, sampleRate, true);
154
+ view.setUint32(28, byteRate, true);
155
+ view.setUint16(32, blockAlign, true);
156
+ view.setUint16(34, bitDepth, true);
157
+ // data sub-chunk
158
+ this.writeString(view, 36, 'data');
159
+ view.setUint32(40, dataSize, true);
160
+ // Concatenate header and PCM data
161
+ const wavFile = new Uint8Array(header.length + pcmData.length);
162
+ wavFile.set(header);
163
+ wavFile.set(pcmData, header.length);
164
+ return wavFile;
165
+ }
166
+ writeString(view, offset, string) {
167
+ for (let i = 0; i < string.length; i++) {
168
+ view.setUint8(offset + i, string.charCodeAt(i));
169
+ }
170
+ }
171
+ getTTSOutputFormat() {
172
+ return { format: 'wav', sampleRate: 24000, channels: 1, bitDepth: 16 };
173
+ }
174
+ getSTTInputFormat() {
175
+ return { format: 'wav', sampleRate: 16000, channels: 1, bitDepth: 16 };
176
+ }
177
+ }
178
+ exports.VertexVoiceAdapter = VertexVoiceAdapter;
179
+ //# sourceMappingURL=VertexVoiceAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VertexVoiceAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/VertexVoiceAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { IWebhookService, Message, IntentResult, WorkflowResult } from '../../interfaces';
2
+ import { ConversationSession } from '../../core/entities/ConversationSession';
3
+ /**
4
+ * WebhookService
5
+ *
6
+ * Handles HTTP POST delivery of webhook events to configured endpoints.
7
+ * Features:
8
+ * - Event filtering (only sends subscribed events)
9
+ * - Event-specific payload construction
10
+ * - Custom headers support
11
+ * - Async fire-and-forget delivery
12
+ * - Error logging without blocking conversation flow
13
+ * - Wraps internal session data extraction
14
+ */
15
+ export declare class WebhookService implements IWebhookService {
16
+ constructor();
17
+ triggerSessionStarted(session: ConversationSession): Promise<void>;
18
+ /**
19
+ * Get webhook config from session metadata
20
+ */
21
+ private getWebhookConfig;
22
+ triggerSessionEnded(session: ConversationSession, recordingUrl?: string): Promise<void>;
23
+ triggerUserMessage(session: ConversationSession, message: Message): Promise<void>;
24
+ triggerBotMessage(session: ConversationSession, message: Message): Promise<void>;
25
+ triggerIntentDetected(session: ConversationSession, intent: IntentResult): Promise<void>;
26
+ triggerIntentFailed(session: ConversationSession, intent: IntentResult): Promise<void>;
27
+ triggerWorkflowExecuted(session: ConversationSession, workflow: {
28
+ workflowName: string;
29
+ parameters: any;
30
+ result: WorkflowResult;
31
+ }): Promise<void>;
32
+ triggerWorkflowFailed(session: ConversationSession, workflow: {
33
+ workflowName: string;
34
+ parameters: any;
35
+ error?: string;
36
+ }): Promise<void>;
37
+ triggerErrorOccurred(session: ConversationSession, error: Error): Promise<void>;
38
+ /**
39
+ * Internal method to send webhook via HTTP POST
40
+ */
41
+ private sendWebhook;
42
+ /**
43
+ * Build base session data for webhooks
44
+ */
45
+ private getSessionData;
46
+ }
47
+ //# sourceMappingURL=WebhookService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookService.d.ts","sourceRoot":"","sources":["../../../src/adapters/webhook/WebhookService.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EAiBf,OAAO,EACP,YAAY,EACZ,cAAc,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,YAAW,eAAe;;IAI5C,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxE;;OAEG;YACW,gBAAgB;IAKxB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CvF,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjF,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhF,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBxF,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtF,uBAAuB,CACzB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,GAC5E,OAAO,CAAC,IAAI,CAAC;IAgBV,qBAAqB,CACvB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACpE,OAAO,CAAC,IAAI,CAAC;IAgBV,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBrF;;OAEG;YACW,WAAW;IAoCzB;;OAEG;IACH,OAAO,CAAC,cAAc;CA2BzB"}