@pipedog/core 0.0.0 → 0.1.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 (698) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE +9 -0
  3. package/dist/adapters/base_llm_adapter.d.ts +266 -0
  4. package/dist/adapters/base_llm_adapter.js +489 -0
  5. package/dist/adapters/index.d.ts +2 -0
  6. package/dist/adapters/index.js +8 -0
  7. package/dist/adapters/schemas/direct_function.d.ts +202 -0
  8. package/dist/adapters/schemas/direct_function.js +302 -0
  9. package/dist/adapters/schemas/function_schema.d.ts +67 -0
  10. package/dist/adapters/schemas/function_schema.js +72 -0
  11. package/dist/adapters/schemas/index.d.ts +2 -0
  12. package/dist/adapters/schemas/index.js +8 -0
  13. package/dist/adapters/schemas/tools_schema.d.ts +57 -0
  14. package/dist/adapters/schemas/tools_schema.js +79 -0
  15. package/dist/adapters/services/index.d.ts +2 -0
  16. package/dist/adapters/services/index.js +8 -0
  17. package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
  18. package/dist/adapters/services/open_ai_adapter.js +250 -0
  19. package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
  20. package/dist/audio/dtmf/dtmf_data.js +22 -0
  21. package/dist/audio/dtmf/index.d.ts +2 -0
  22. package/dist/audio/dtmf/index.js +8 -0
  23. package/dist/audio/dtmf/types.d.ts +31 -0
  24. package/dist/audio/dtmf/types.js +35 -0
  25. package/dist/audio/dtmf/utils.d.ts +13 -0
  26. package/dist/audio/dtmf/utils.js +62 -0
  27. package/dist/audio/filters/base_audio_filter.d.ts +51 -0
  28. package/dist/audio/filters/base_audio_filter.js +17 -0
  29. package/dist/audio/filters/index.d.ts +2 -0
  30. package/dist/audio/filters/index.js +8 -0
  31. package/dist/audio/index.d.ts +2 -0
  32. package/dist/audio/index.js +8 -0
  33. package/dist/audio/krisp_instance.d.ts +95 -0
  34. package/dist/audio/krisp_instance.js +229 -0
  35. package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
  36. package/dist/audio/mixers/base_audio_mixer.js +16 -0
  37. package/dist/audio/mixers/index.d.ts +2 -0
  38. package/dist/audio/mixers/index.js +8 -0
  39. package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
  40. package/dist/audio/resamplers/base_audio_resampler.js +35 -0
  41. package/dist/audio/resamplers/index.d.ts +2 -0
  42. package/dist/audio/resamplers/index.js +8 -0
  43. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  44. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  45. package/dist/audio/resamplers/soxr_resampler.d.ts +54 -0
  46. package/dist/audio/resamplers/soxr_resampler.js +69 -0
  47. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +75 -0
  48. package/dist/audio/resamplers/soxr_stream_resampler.js +146 -0
  49. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  50. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  51. package/dist/audio/turn/index.d.ts +2 -0
  52. package/dist/audio/turn/index.js +8 -0
  53. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  54. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  55. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  56. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  57. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  58. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +143 -0
  59. package/dist/audio/utils.d.ts +224 -0
  60. package/dist/audio/utils.js +634 -0
  61. package/dist/audio/vad/data/index.d.ts +2 -0
  62. package/dist/audio/vad/data/index.js +8 -0
  63. package/dist/audio/vad/index.d.ts +2 -0
  64. package/dist/audio/vad/index.js +8 -0
  65. package/dist/audio/vad/vad_analyzer.d.ts +126 -0
  66. package/dist/audio/vad/vad_analyzer.js +211 -0
  67. package/dist/audio/vad/vad_controller.d.ts +143 -0
  68. package/dist/audio/vad/vad_controller.js +228 -0
  69. package/dist/audio/volume.d.ts +38 -0
  70. package/dist/audio/volume.js +75 -0
  71. package/dist/bus/adapters/base.d.ts +35 -0
  72. package/dist/bus/adapters/base.js +19 -0
  73. package/dist/bus/adapters/index.d.ts +10 -0
  74. package/dist/bus/adapters/index.js +15 -0
  75. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  76. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  77. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  78. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  79. package/dist/bus/bridge_processor.d.ts +111 -0
  80. package/dist/bus/bridge_processor.js +166 -0
  81. package/dist/bus/bus.d.ts +110 -0
  82. package/dist/bus/bus.js +200 -0
  83. package/dist/bus/index.d.ts +22 -0
  84. package/dist/bus/index.js +27 -0
  85. package/dist/bus/local/async_queue.d.ts +12 -0
  86. package/dist/bus/local/async_queue.js +21 -0
  87. package/dist/bus/local/index.d.ts +3 -0
  88. package/dist/bus/local/index.js +8 -0
  89. package/dist/bus/messages.d.ts +378 -0
  90. package/dist/bus/messages.js +357 -0
  91. package/dist/bus/network/index.d.ts +16 -0
  92. package/dist/bus/network/index.js +21 -0
  93. package/dist/bus/queue.d.ts +27 -0
  94. package/dist/bus/queue.js +51 -0
  95. package/dist/bus/serializers/base.d.ts +25 -0
  96. package/dist/bus/serializers/base.js +14 -0
  97. package/dist/bus/serializers/index.d.ts +9 -0
  98. package/dist/bus/serializers/index.js +14 -0
  99. package/dist/bus/serializers/json.d.ts +77 -0
  100. package/dist/bus/serializers/json.js +367 -0
  101. package/dist/bus/subscriber.d.ts +46 -0
  102. package/dist/bus/subscriber.js +27 -0
  103. package/dist/bus/ui/index.d.ts +3 -0
  104. package/dist/bus/ui/index.js +8 -0
  105. package/dist/bus/ui/messages.d.ts +186 -0
  106. package/dist/bus/ui/messages.js +171 -0
  107. package/dist/classifiers/base_classifier.d.ts +263 -0
  108. package/dist/classifiers/base_classifier.js +346 -0
  109. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  110. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  111. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  112. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  113. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  114. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  115. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  116. package/dist/classifiers/cloudflare/index.js +8 -0
  117. package/dist/classifiers/http_client.d.ts +70 -0
  118. package/dist/classifiers/http_client.js +161 -0
  119. package/dist/classifiers/index.d.ts +2 -0
  120. package/dist/classifiers/index.js +8 -0
  121. package/dist/classifiers/jev/classifier.d.ts +8 -0
  122. package/dist/classifiers/jev/classifier.js +13 -0
  123. package/dist/classifiers/jev/client.d.ts +8 -0
  124. package/dist/classifiers/jev/client.js +13 -0
  125. package/dist/classifiers/jev/index.d.ts +2 -0
  126. package/dist/classifiers/jev/index.js +8 -0
  127. package/dist/classifiers/llm/classifier.d.ts +72 -0
  128. package/dist/classifiers/llm/classifier.js +304 -0
  129. package/dist/classifiers/llm/index.d.ts +2 -0
  130. package/dist/classifiers/llm/index.js +8 -0
  131. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  132. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  133. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  134. package/dist/classifiers/openai/decisions/client.js +234 -0
  135. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  136. package/dist/classifiers/openai/decisions/index.js +8 -0
  137. package/dist/classifiers/openai/index.d.ts +2 -0
  138. package/dist/classifiers/openai/index.js +8 -0
  139. package/dist/classifiers/typesafe/index.d.ts +2 -0
  140. package/dist/classifiers/typesafe/index.js +8 -0
  141. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  142. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  143. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  144. package/dist/classifiers/typesafe/jev/client.js +233 -0
  145. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  146. package/dist/classifiers/typesafe/jev/index.js +8 -0
  147. package/dist/clocks/base_clock.d.ts +13 -0
  148. package/dist/clocks/base_clock.js +14 -0
  149. package/dist/clocks/index.d.ts +2 -0
  150. package/dist/clocks/index.js +8 -0
  151. package/dist/clocks/system_clock.d.ts +15 -0
  152. package/dist/clocks/system_clock.js +25 -0
  153. package/dist/frames/frames.d.ts +2533 -0
  154. package/dist/frames/frames.js +2485 -0
  155. package/dist/frames/index.d.ts +2 -0
  156. package/dist/frames/index.js +8 -0
  157. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  158. package/dist/frames/protobufs/frames_pb2.js +466 -0
  159. package/dist/index.d.ts +11 -0
  160. package/dist/index.js +56 -0
  161. package/dist/metrics/index.d.ts +2 -0
  162. package/dist/metrics/index.js +8 -0
  163. package/dist/metrics/metrics.d.ts +276 -0
  164. package/dist/metrics/metrics.js +254 -0
  165. package/dist/observers/base_observer.d.ts +173 -0
  166. package/dist/observers/base_observer.js +151 -0
  167. package/dist/observers/error_observer.d.ts +75 -0
  168. package/dist/observers/error_observer.js +87 -0
  169. package/dist/observers/function_call_observer.d.ts +157 -0
  170. package/dist/observers/function_call_observer.js +222 -0
  171. package/dist/observers/index.d.ts +2 -0
  172. package/dist/observers/index.js +8 -0
  173. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  174. package/dist/observers/loggers/debug_log_observer.js +228 -0
  175. package/dist/observers/loggers/index.d.ts +2 -0
  176. package/dist/observers/loggers/index.js +8 -0
  177. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  178. package/dist/observers/loggers/llm_log_observer.js +110 -0
  179. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  180. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  181. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  182. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  183. package/dist/observers/service_metrics_observer.d.ts +168 -0
  184. package/dist/observers/service_metrics_observer.js +236 -0
  185. package/dist/observers/speaking_observer.d.ts +104 -0
  186. package/dist/observers/speaking_observer.js +150 -0
  187. package/dist/observers/startup_timing_observer.d.ts +221 -0
  188. package/dist/observers/startup_timing_observer.js +365 -0
  189. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  190. package/dist/observers/turn_tracking_observer.js +189 -0
  191. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  192. package/dist/observers/user_bot_latency_observer.js +974 -0
  193. package/dist/pipeline/base_pipeline.d.ts +49 -0
  194. package/dist/pipeline/base_pipeline.js +101 -0
  195. package/dist/pipeline/capabilities.d.ts +76 -0
  196. package/dist/pipeline/capabilities.js +97 -0
  197. package/dist/pipeline/index.d.ts +2 -0
  198. package/dist/pipeline/index.js +8 -0
  199. package/dist/pipeline/job_context.d.ts +317 -0
  200. package/dist/pipeline/job_context.js +450 -0
  201. package/dist/pipeline/job_decorator.d.ts +54 -0
  202. package/dist/pipeline/job_decorator.js +92 -0
  203. package/dist/pipeline/llm_switcher.d.ts +84 -0
  204. package/dist/pipeline/llm_switcher.js +107 -0
  205. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  206. package/dist/pipeline/llm_with_backend.js +806 -0
  207. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  208. package/dist/pipeline/parallel_pipeline.js +200 -0
  209. package/dist/pipeline/pipeline.d.ts +126 -0
  210. package/dist/pipeline/pipeline.js +196 -0
  211. package/dist/pipeline/service_switcher.d.ts +287 -0
  212. package/dist/pipeline/service_switcher.js +509 -0
  213. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  214. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  215. package/dist/pipeline/worker.d.ts +814 -0
  216. package/dist/pipeline/worker.js +1639 -0
  217. package/dist/pipeline/worker_observer.d.ts +131 -0
  218. package/dist/pipeline/worker_observer.js +274 -0
  219. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  220. package/dist/pipeline/worker_ready_decorator.js +76 -0
  221. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  222. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  223. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  224. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  225. package/dist/processors/aggregators/gated.d.ts +43 -0
  226. package/dist/processors/aggregators/gated.js +86 -0
  227. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  228. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  229. package/dist/processors/aggregators/index.d.ts +2 -0
  230. package/dist/processors/aggregators/index.js +8 -0
  231. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  232. package/dist/processors/aggregators/llm_context.js +580 -0
  233. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  234. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  235. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  236. package/dist/processors/aggregators/llm_response.js +71 -0
  237. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  238. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  239. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  240. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  241. package/dist/processors/aggregators/sentence.d.ts +39 -0
  242. package/dist/processors/aggregators/sentence.js +69 -0
  243. package/dist/processors/async_generator.d.ts +42 -0
  244. package/dist/processors/async_generator.js +76 -0
  245. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  246. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  247. package/dist/processors/audio/index.d.ts +2 -0
  248. package/dist/processors/audio/index.js +8 -0
  249. package/dist/processors/audio/vad_processor.d.ts +67 -0
  250. package/dist/processors/audio/vad_processor.js +103 -0
  251. package/dist/processors/consumer_processor.d.ts +49 -0
  252. package/dist/processors/consumer_processor.js +85 -0
  253. package/dist/processors/filters/frame_filter.d.ts +39 -0
  254. package/dist/processors/filters/frame_filter.js +52 -0
  255. package/dist/processors/filters/function_filter.d.ts +59 -0
  256. package/dist/processors/filters/function_filter.js +78 -0
  257. package/dist/processors/filters/identity_filter.d.ts +33 -0
  258. package/dist/processors/filters/identity_filter.js +37 -0
  259. package/dist/processors/filters/index.d.ts +2 -0
  260. package/dist/processors/filters/index.js +8 -0
  261. package/dist/processors/filters/null_filter.d.ts +34 -0
  262. package/dist/processors/filters/null_filter.js +47 -0
  263. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  264. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  265. package/dist/processors/frame_processor.d.ts +360 -0
  266. package/dist/processors/frame_processor.js +932 -0
  267. package/dist/processors/frameworks/index.d.ts +2 -0
  268. package/dist/processors/frameworks/index.js +8 -0
  269. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  270. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  271. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  272. package/dist/processors/frameworks/rtvi/index.js +11 -0
  273. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  274. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  275. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  276. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  277. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  278. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  279. package/dist/processors/idle_frame_processor.d.ts +44 -0
  280. package/dist/processors/idle_frame_processor.js +86 -0
  281. package/dist/processors/index.d.ts +2 -0
  282. package/dist/processors/index.js +8 -0
  283. package/dist/processors/logger.d.ts +42 -0
  284. package/dist/processors/logger.js +87 -0
  285. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  286. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  287. package/dist/processors/metrics/index.d.ts +2 -0
  288. package/dist/processors/metrics/index.js +8 -0
  289. package/dist/processors/producer_processor.d.ts +68 -0
  290. package/dist/processors/producer_processor.js +78 -0
  291. package/dist/processors/text_transformer.d.ts +30 -0
  292. package/dist/processors/text_transformer.js +48 -0
  293. package/dist/registry/index.d.ts +3 -0
  294. package/dist/registry/index.js +8 -0
  295. package/dist/registry/registry.d.ts +69 -0
  296. package/dist/registry/registry.js +149 -0
  297. package/dist/registry/types.d.ts +47 -0
  298. package/dist/registry/types.js +39 -0
  299. package/dist/serializers/base_serializer.d.ts +94 -0
  300. package/dist/serializers/base_serializer.js +82 -0
  301. package/dist/serializers/index.d.ts +2 -0
  302. package/dist/serializers/index.js +8 -0
  303. package/dist/services/ai_service.d.ts +145 -0
  304. package/dist/services/ai_service.js +262 -0
  305. package/dist/services/anthropic/index.d.ts +2 -0
  306. package/dist/services/anthropic/index.js +7 -0
  307. package/dist/services/assemblyai/index.d.ts +2 -0
  308. package/dist/services/assemblyai/index.js +7 -0
  309. package/dist/services/asyncai/index.d.ts +2 -0
  310. package/dist/services/asyncai/index.js +7 -0
  311. package/dist/services/aws/index.d.ts +2 -0
  312. package/dist/services/aws/index.js +7 -0
  313. package/dist/services/azure/index.d.ts +2 -0
  314. package/dist/services/azure/index.js +7 -0
  315. package/dist/services/baseten/index.d.ts +2 -0
  316. package/dist/services/baseten/index.js +7 -0
  317. package/dist/services/bland/index.d.ts +2 -0
  318. package/dist/services/bland/index.js +7 -0
  319. package/dist/services/camb/index.d.ts +2 -0
  320. package/dist/services/camb/index.js +7 -0
  321. package/dist/services/cartesia/index.d.ts +2 -0
  322. package/dist/services/cartesia/index.js +7 -0
  323. package/dist/services/cerebras/index.d.ts +2 -0
  324. package/dist/services/cerebras/index.js +7 -0
  325. package/dist/services/crusoe/index.d.ts +2 -0
  326. package/dist/services/crusoe/index.js +7 -0
  327. package/dist/services/deepgram/index.d.ts +2 -0
  328. package/dist/services/deepgram/index.js +7 -0
  329. package/dist/services/deepseek/index.d.ts +2 -0
  330. package/dist/services/deepseek/index.js +7 -0
  331. package/dist/services/elevenlabs/index.d.ts +2 -0
  332. package/dist/services/elevenlabs/index.js +7 -0
  333. package/dist/services/fal/index.d.ts +2 -0
  334. package/dist/services/fal/index.js +7 -0
  335. package/dist/services/fireworks/index.d.ts +2 -0
  336. package/dist/services/fireworks/index.js +7 -0
  337. package/dist/services/fish/index.d.ts +2 -0
  338. package/dist/services/fish/index.js +7 -0
  339. package/dist/services/funasr/index.d.ts +3 -0
  340. package/dist/services/funasr/index.js +8 -0
  341. package/dist/services/gladia/index.d.ts +2 -0
  342. package/dist/services/gladia/index.js +7 -0
  343. package/dist/services/google/index.d.ts +2 -0
  344. package/dist/services/google/index.js +7 -0
  345. package/dist/services/gradium/index.d.ts +2 -0
  346. package/dist/services/gradium/index.js +7 -0
  347. package/dist/services/grok/index.d.ts +2 -0
  348. package/dist/services/grok/index.js +7 -0
  349. package/dist/services/groq/index.d.ts +2 -0
  350. package/dist/services/groq/index.js +7 -0
  351. package/dist/services/heygen/index.d.ts +2 -0
  352. package/dist/services/heygen/index.js +7 -0
  353. package/dist/services/hume/index.d.ts +2 -0
  354. package/dist/services/hume/index.js +7 -0
  355. package/dist/services/image_service.d.ts +52 -0
  356. package/dist/services/image_service.js +60 -0
  357. package/dist/services/inception/index.d.ts +2 -0
  358. package/dist/services/inception/index.js +7 -0
  359. package/dist/services/index.d.ts +2 -0
  360. package/dist/services/index.js +8 -0
  361. package/dist/services/inworld/index.d.ts +2 -0
  362. package/dist/services/inworld/index.js +7 -0
  363. package/dist/services/keenable/index.d.ts +2 -0
  364. package/dist/services/keenable/index.js +7 -0
  365. package/dist/services/kokoro/index.d.ts +2 -0
  366. package/dist/services/kokoro/index.js +7 -0
  367. package/dist/services/llm_service.d.ts +1106 -0
  368. package/dist/services/llm_service.js +2231 -0
  369. package/dist/services/mem0/index.d.ts +2 -0
  370. package/dist/services/mem0/index.js +7 -0
  371. package/dist/services/meta/index.d.ts +2 -0
  372. package/dist/services/meta/index.js +7 -0
  373. package/dist/services/minimax/index.d.ts +2 -0
  374. package/dist/services/minimax/index.js +7 -0
  375. package/dist/services/mistral/index.d.ts +2 -0
  376. package/dist/services/mistral/index.js +7 -0
  377. package/dist/services/moondream/index.d.ts +2 -0
  378. package/dist/services/moondream/index.js +7 -0
  379. package/dist/services/moonshine/index.d.ts +2 -0
  380. package/dist/services/moonshine/index.js +7 -0
  381. package/dist/services/nebius/index.d.ts +2 -0
  382. package/dist/services/nebius/index.js +7 -0
  383. package/dist/services/neuphonic/index.d.ts +2 -0
  384. package/dist/services/neuphonic/index.js +7 -0
  385. package/dist/services/novita/index.d.ts +2 -0
  386. package/dist/services/novita/index.js +7 -0
  387. package/dist/services/nvidia/index.d.ts +2 -0
  388. package/dist/services/nvidia/index.js +11 -0
  389. package/dist/services/ollama/index.d.ts +2 -0
  390. package/dist/services/ollama/index.js +7 -0
  391. package/dist/services/openai/index.d.ts +2 -0
  392. package/dist/services/openai/index.js +7 -0
  393. package/dist/services/openclaw/index.d.ts +14 -0
  394. package/dist/services/openclaw/index.js +19 -0
  395. package/dist/services/openrouter/index.d.ts +2 -0
  396. package/dist/services/openrouter/index.js +7 -0
  397. package/dist/services/perplexity/index.d.ts +2 -0
  398. package/dist/services/perplexity/index.js +7 -0
  399. package/dist/services/piper/index.d.ts +2 -0
  400. package/dist/services/piper/index.js +7 -0
  401. package/dist/services/pocket_tts/index.d.ts +2 -0
  402. package/dist/services/pocket_tts/index.js +7 -0
  403. package/dist/services/qwen/index.d.ts +2 -0
  404. package/dist/services/qwen/index.js +7 -0
  405. package/dist/services/resembleai/index.d.ts +2 -0
  406. package/dist/services/resembleai/index.js +7 -0
  407. package/dist/services/rime/index.d.ts +2 -0
  408. package/dist/services/rime/index.js +7 -0
  409. package/dist/services/sambanova/index.d.ts +2 -0
  410. package/dist/services/sambanova/index.js +7 -0
  411. package/dist/services/sarvam/index.d.ts +2 -0
  412. package/dist/services/sarvam/index.js +7 -0
  413. package/dist/services/settings.d.ts +356 -0
  414. package/dist/services/settings.js +437 -0
  415. package/dist/services/simli/index.d.ts +2 -0
  416. package/dist/services/simli/index.js +7 -0
  417. package/dist/services/smallest/index.d.ts +2 -0
  418. package/dist/services/smallest/index.js +7 -0
  419. package/dist/services/soniox/index.d.ts +2 -0
  420. package/dist/services/soniox/index.js +7 -0
  421. package/dist/services/speechify/index.d.ts +2 -0
  422. package/dist/services/speechify/index.js +7 -0
  423. package/dist/services/speechmatics/index.d.ts +2 -0
  424. package/dist/services/speechmatics/index.js +7 -0
  425. package/dist/services/stt_latency.d.ts +62 -0
  426. package/dist/services/stt_latency.js +71 -0
  427. package/dist/services/stt_service.d.ts +601 -0
  428. package/dist/services/stt_service.js +1044 -0
  429. package/dist/services/tavus/index.d.ts +2 -0
  430. package/dist/services/tavus/index.js +7 -0
  431. package/dist/services/together/index.d.ts +2 -0
  432. package/dist/services/together/index.js +7 -0
  433. package/dist/services/tts_service.d.ts +909 -0
  434. package/dist/services/tts_service.js +2018 -0
  435. package/dist/services/ultravox/index.d.ts +2 -0
  436. package/dist/services/ultravox/index.js +9 -0
  437. package/dist/services/vision_service.d.ts +56 -0
  438. package/dist/services/vision_service.js +62 -0
  439. package/dist/services/websocket_service.d.ts +213 -0
  440. package/dist/services/websocket_service.js +654 -0
  441. package/dist/services/whisper/index.d.ts +2 -0
  442. package/dist/services/whisper/index.js +9 -0
  443. package/dist/services/xai/index.d.ts +2 -0
  444. package/dist/services/xai/index.js +9 -0
  445. package/dist/services/xtts/index.d.ts +2 -0
  446. package/dist/services/xtts/index.js +9 -0
  447. package/dist/tests/index.d.ts +2 -0
  448. package/dist/tests/index.js +8 -0
  449. package/dist/tests/utils.d.ts +123 -0
  450. package/dist/tests/utils.js +212 -0
  451. package/dist/transcriptions/index.d.ts +2 -0
  452. package/dist/transcriptions/index.js +8 -0
  453. package/dist/transcriptions/language.d.ts +376 -0
  454. package/dist/transcriptions/language.js +543 -0
  455. package/dist/transports/base_input.d.ts +149 -0
  456. package/dist/transports/base_input.js +338 -0
  457. package/dist/transports/base_output.d.ts +432 -0
  458. package/dist/transports/base_output.js +1231 -0
  459. package/dist/transports/base_transport.d.ts +223 -0
  460. package/dist/transports/base_transport.js +167 -0
  461. package/dist/transports/daily/index.d.ts +2 -0
  462. package/dist/transports/daily/index.js +9 -0
  463. package/dist/transports/heygen/index.d.ts +2 -0
  464. package/dist/transports/heygen/index.js +9 -0
  465. package/dist/transports/index.d.ts +2 -0
  466. package/dist/transports/index.js +8 -0
  467. package/dist/transports/lemonslice/index.d.ts +2 -0
  468. package/dist/transports/lemonslice/index.js +9 -0
  469. package/dist/transports/livekit/index.d.ts +2 -0
  470. package/dist/transports/livekit/index.js +9 -0
  471. package/dist/transports/local/index.d.ts +2 -0
  472. package/dist/transports/local/index.js +9 -0
  473. package/dist/transports/moq/index.d.ts +2 -0
  474. package/dist/transports/moq/index.js +9 -0
  475. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  476. package/dist/transports/smallwebrtc/index.js +9 -0
  477. package/dist/transports/tavus/index.d.ts +2 -0
  478. package/dist/transports/tavus/index.js +9 -0
  479. package/dist/transports/video_in_sampler.d.ts +157 -0
  480. package/dist/transports/video_in_sampler.js +258 -0
  481. package/dist/transports/vonage/index.d.ts +2 -0
  482. package/dist/transports/vonage/index.js +9 -0
  483. package/dist/transports/websocket/index.d.ts +2 -0
  484. package/dist/transports/websocket/index.js +9 -0
  485. package/dist/transports/whatsapp/index.d.ts +2 -0
  486. package/dist/transports/whatsapp/index.js +9 -0
  487. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  488. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  489. package/dist/turns/empty_user_turn.d.ts +55 -0
  490. package/dist/turns/empty_user_turn.js +53 -0
  491. package/dist/turns/index.d.ts +2 -0
  492. package/dist/turns/index.js +8 -0
  493. package/dist/turns/speculation_gate.d.ts +169 -0
  494. package/dist/turns/speculation_gate.js +294 -0
  495. package/dist/turns/types.d.ts +33 -0
  496. package/dist/turns/types.js +35 -0
  497. package/dist/turns/user_idle_controller.d.ts +94 -0
  498. package/dist/turns/user_idle_controller.js +187 -0
  499. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  500. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  501. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  502. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  503. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  504. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  505. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  506. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  507. package/dist/turns/user_mute/index.d.ts +6 -0
  508. package/dist/turns/user_mute/index.js +11 -0
  509. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  510. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  511. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  512. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  513. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  514. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  515. package/dist/turns/user_start/index.d.ts +8 -0
  516. package/dist/turns/user_start/index.js +16 -0
  517. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  518. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  519. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  520. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  521. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  522. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  523. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  524. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  525. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  526. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  527. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  528. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  529. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  530. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  531. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  532. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  533. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  534. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  535. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  536. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  537. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  538. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  539. package/dist/turns/user_stop/index.d.ts +10 -0
  540. package/dist/turns/user_stop/index.js +15 -0
  541. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  542. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  543. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  544. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  545. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  546. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  547. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  548. package/dist/turns/user_turn_completion_mixin.js +591 -0
  549. package/dist/turns/user_turn_controller.d.ts +134 -0
  550. package/dist/turns/user_turn_controller.js +335 -0
  551. package/dist/turns/user_turn_processor.d.ts +87 -0
  552. package/dist/turns/user_turn_processor.js +180 -0
  553. package/dist/turns/user_turn_strategies.d.ts +187 -0
  554. package/dist/turns/user_turn_strategies.js +222 -0
  555. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  556. package/dist/utils/async_tool_cancellation.js +78 -0
  557. package/dist/utils/asyncio/index.d.ts +2 -0
  558. package/dist/utils/asyncio/index.js +7 -0
  559. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  560. package/dist/utils/asyncio/task_manager.js +105 -0
  561. package/dist/utils/base_object.d.ts +76 -0
  562. package/dist/utils/base_object.js +154 -0
  563. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  564. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  565. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  566. package/dist/utils/context/audio_context_manager.js +233 -0
  567. package/dist/utils/context/index.d.ts +2 -0
  568. package/dist/utils/context/index.js +7 -0
  569. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  570. package/dist/utils/context/llm_context_summarization.js +511 -0
  571. package/dist/utils/context/text_segment_map.d.ts +611 -0
  572. package/dist/utils/context/text_segment_map.js +1132 -0
  573. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  574. package/dist/utils/context/word_completion_tracker.js +441 -0
  575. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  576. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  577. package/dist/utils/deprecation.d.ts +28 -0
  578. package/dist/utils/deprecation.js +75 -0
  579. package/dist/utils/env.d.ts +38 -0
  580. package/dist/utils/env.js +62 -0
  581. package/dist/utils/errors.d.ts +75 -0
  582. package/dist/utils/errors.js +202 -0
  583. package/dist/utils/file_resolver.d.ts +126 -0
  584. package/dist/utils/file_resolver.js +314 -0
  585. package/dist/utils/file_storage.d.ts +99 -0
  586. package/dist/utils/file_storage.js +100 -0
  587. package/dist/utils/frame_queue.d.ts +36 -0
  588. package/dist/utils/frame_queue.js +66 -0
  589. package/dist/utils/http.d.ts +39 -0
  590. package/dist/utils/http.js +53 -0
  591. package/dist/utils/image.d.ts +15 -0
  592. package/dist/utils/image.js +30 -0
  593. package/dist/utils/index.d.ts +2 -0
  594. package/dist/utils/index.js +8 -0
  595. package/dist/utils/log_config.d.ts +34 -0
  596. package/dist/utils/log_config.js +76 -0
  597. package/dist/utils/logger.d.ts +40 -0
  598. package/dist/utils/logger.js +91 -0
  599. package/dist/utils/mixin.d.ts +14 -0
  600. package/dist/utils/mixin.js +63 -0
  601. package/dist/utils/network.d.ts +73 -0
  602. package/dist/utils/network.js +90 -0
  603. package/dist/utils/security/allowed_origins.d.ts +16 -0
  604. package/dist/utils/security/allowed_origins.js +34 -0
  605. package/dist/utils/security/index.d.ts +2 -0
  606. package/dist/utils/security/index.js +7 -0
  607. package/dist/utils/security/redaction.d.ts +27 -0
  608. package/dist/utils/security/redaction.js +123 -0
  609. package/dist/utils/security/ssrf.d.ts +79 -0
  610. package/dist/utils/security/ssrf.js +327 -0
  611. package/dist/utils/shared.d.ts +35 -0
  612. package/dist/utils/shared.js +136 -0
  613. package/dist/utils/startup.d.ts +17 -0
  614. package/dist/utils/startup.js +130 -0
  615. package/dist/utils/string.d.ts +116 -0
  616. package/dist/utils/string.js +460 -0
  617. package/dist/utils/sync/base_notifier.d.ts +25 -0
  618. package/dist/utils/sync/base_notifier.js +16 -0
  619. package/dist/utils/sync/event_notifier.d.ts +38 -0
  620. package/dist/utils/sync/event_notifier.js +51 -0
  621. package/dist/utils/sync/index.d.ts +2 -0
  622. package/dist/utils/sync/index.js +7 -0
  623. package/dist/utils/text/alnum_utils.d.ts +109 -0
  624. package/dist/utils/text/alnum_utils.js +262 -0
  625. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  626. package/dist/utils/text/base_text_aggregator.js +102 -0
  627. package/dist/utils/text/base_text_filter.d.ts +54 -0
  628. package/dist/utils/text/base_text_filter.js +50 -0
  629. package/dist/utils/text/index.d.ts +2 -0
  630. package/dist/utils/text/index.js +7 -0
  631. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  632. package/dist/utils/text/markdown_text_filter.js +522 -0
  633. package/dist/utils/text/markup_utils.d.ts +54 -0
  634. package/dist/utils/text/markup_utils.js +156 -0
  635. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  636. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  637. package/dist/utils/text/phonemes.d.ts +60 -0
  638. package/dist/utils/text/phonemes.js +172 -0
  639. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  640. package/dist/utils/text/simple_text_aggregator.js +254 -0
  641. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  642. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  643. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  644. package/dist/utils/text/transforms/pronunciations.js +111 -0
  645. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  646. package/dist/utils/text/word_timestamp_utils.js +52 -0
  647. package/dist/utils/time.d.ts +13 -0
  648. package/dist/utils/time.js +31 -0
  649. package/dist/utils/tracing/index.d.ts +3 -0
  650. package/dist/utils/tracing/index.js +8 -0
  651. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  652. package/dist/utils/tracing/service_attributes.js +434 -0
  653. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  654. package/dist/utils/tracing/service_decorators.js +1662 -0
  655. package/dist/utils/tracing/setup.d.ts +95 -0
  656. package/dist/utils/tracing/setup.js +110 -0
  657. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  658. package/dist/utils/tracing/tracing_context.js +97 -0
  659. package/dist/utils/tracing/turn_trace_observer.d.ts +90 -0
  660. package/dist/utils/tracing/turn_trace_observer.js +219 -0
  661. package/dist/utils/types.d.ts +80 -0
  662. package/dist/utils/types.js +108 -0
  663. package/dist/utils/utils.d.ts +5 -0
  664. package/dist/utils/utils.js +22 -0
  665. package/dist/utils/yaml.d.ts +64 -0
  666. package/dist/utils/yaml.js +41 -0
  667. package/dist/version.d.ts +3 -0
  668. package/dist/version.js +7 -0
  669. package/dist/workers/base_worker.d.ts +772 -0
  670. package/dist/workers/base_worker.js +1298 -0
  671. package/dist/workers/index.d.ts +2 -0
  672. package/dist/workers/index.js +8 -0
  673. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  674. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  675. package/dist/workers/llm/index.d.ts +6 -0
  676. package/dist/workers/llm/index.js +11 -0
  677. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  678. package/dist/workers/llm/llm_context_worker.js +72 -0
  679. package/dist/workers/llm/llm_worker.d.ts +180 -0
  680. package/dist/workers/llm/llm_worker.js +323 -0
  681. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  682. package/dist/workers/llm/tool_decorator.js +60 -0
  683. package/dist/workers/runner.d.ts +268 -0
  684. package/dist/workers/runner.js +489 -0
  685. package/dist/workers/ui/index.d.ts +22 -0
  686. package/dist/workers/ui/index.js +27 -0
  687. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  688. package/dist/workers/ui/ui_event_decorator.js +75 -0
  689. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  690. package/dist/workers/ui/ui_job_context.js +17 -0
  691. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  692. package/dist/workers/ui/ui_prompts.js +41 -0
  693. package/dist/workers/ui/ui_tools.d.ts +32 -0
  694. package/dist/workers/ui/ui_tools.js +112 -0
  695. package/dist/workers/ui/ui_worker.d.ts +571 -0
  696. package/dist/workers/ui/ui_worker.js +1156 -0
  697. package/package.json +46 -3
  698. package/README.md +0 -5
@@ -0,0 +1,94 @@
1
+ /** This module defines a controller for managing user idle detection. */
2
+ import { type Task } from "@pipedog/asyncio";
3
+ import { type Frame } from "../frames/frames.ts";
4
+ import type { FrameProcessorSetup } from "../processors/frame_processor.ts";
5
+ import { BaseObject } from "../utils/base_object.ts";
6
+ export interface UserIdleControllerOptions {
7
+ /**
8
+ * Timeout in seconds before considering the user idle. 0 disables idle
9
+ * detection.
10
+ */
11
+ userIdleTimeout?: number;
12
+ }
13
+ /**
14
+ * Controller for managing user idle detection.
15
+ *
16
+ * This class monitors user activity and triggers an event when the user has
17
+ * been idle (not speaking) for a configured timeout period after the bot
18
+ * finishes speaking. The timer starts when BotStoppedSpeakingFrame is received
19
+ * and is cancelled when someone starts speaking again
20
+ * (UserStartedSpeakingFrame or BotStartedSpeakingFrame).
21
+ *
22
+ * The timer is suppressed while a user turn is in progress to avoid false
23
+ * triggers during interruptions (where BotStoppedSpeakingFrame arrives while
24
+ * the user is still speaking).
25
+ *
26
+ * A UserIdleTimeoutUpdateFrame applies immediately: it restarts a running
27
+ * timer with the new duration and, while waiting for the user to speak, arms
28
+ * the timer even if idle detection was previously disabled.
29
+ *
30
+ * Event handlers available:
31
+ *
32
+ * - on_user_turn_idle: Emitted when the user has been idle for the timeout period.
33
+ *
34
+ * @example
35
+ * controller.eventHandler("on_user_turn_idle", async (controller) => {
36
+ * // Handle user idle - send reminder, prompt, etc.
37
+ * });
38
+ */
39
+ export declare class UserIdleController extends BaseObject {
40
+ protected _userIdleTimeout: number;
41
+ protected _waitingForUser: boolean;
42
+ protected _botSpeaking: boolean;
43
+ protected _userTurnInProgress: boolean;
44
+ protected _functionCallsInProgress: number;
45
+ protected _idleTimerTask: Task<unknown> | null;
46
+ constructor(options?: UserIdleControllerOptions);
47
+ /**
48
+ * Whether the bot has finished responding and is waiting for the user.
49
+ *
50
+ * False while the bot is thinking, speaking or running a function call,
51
+ * and during a user turn.
52
+ */
53
+ get waitingForUser(): boolean;
54
+ /** Whether function calls have started and not finished. */
55
+ get functionCallsInProgress(): boolean;
56
+ /**
57
+ * Set up the controller.
58
+ *
59
+ * @param setup Configuration object containing setup parameters.
60
+ */
61
+ setup(setup: FrameProcessorSetup): Promise<void>;
62
+ /**
63
+ * Stop the idle timer.
64
+ *
65
+ * Called at session end so it can't report idleness that only means the
66
+ * session is over.
67
+ */
68
+ stop(): Promise<void>;
69
+ /** Cleanup the controller. */
70
+ cleanup(): Promise<void>;
71
+ /**
72
+ * Process an incoming frame to track user activity state.
73
+ *
74
+ * @param frame The frame to be processed.
75
+ */
76
+ processFrame(frame: Frame): Promise<void>;
77
+ /**
78
+ * Start waiting for the user after a turn the bot will not answer.
79
+ *
80
+ * The timer normally starts when the bot stops speaking. A user turn that
81
+ * ends with nothing for the bot to answer (e.g. no transcript) cancels the
82
+ * timer without the bot speaking again afterwards, so the caller re-arms it
83
+ * here. Does nothing while the bot is speaking, a user turn is in progress,
84
+ * or function calls are pending.
85
+ */
86
+ waitForUser(): Promise<void>;
87
+ /** Start (or restart) the idle timer. */
88
+ protected _startIdleTimer(): Promise<void>;
89
+ /** Cancel the idle timer if running. */
90
+ protected _cancelIdleTimer(): Promise<void>;
91
+ /** Sleep for the timeout duration then fire the idle event. */
92
+ protected _idleTimerExpired(): Promise<void>;
93
+ }
94
+ //# sourceMappingURL=user_idle_controller.d.ts.map
@@ -0,0 +1,187 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/turns/user_idle_controller.py
6
+ /** This module defines a controller for managing user idle detection. */
7
+ import { sleep } from "@pipedog/asyncio";
8
+ import { BotStartedSpeakingFrame, BotStoppedSpeakingFrame, FunctionCallCancelFrame, FunctionCallResultFrame, FunctionCallsStartedFrame, UserIdleTimeoutUpdateFrame, UserStartedSpeakingFrame, UserStoppedSpeakingFrame, } from "../frames/frames.js";
9
+ import { BaseObject } from "../utils/base_object.js";
10
+ /**
11
+ * Controller for managing user idle detection.
12
+ *
13
+ * This class monitors user activity and triggers an event when the user has
14
+ * been idle (not speaking) for a configured timeout period after the bot
15
+ * finishes speaking. The timer starts when BotStoppedSpeakingFrame is received
16
+ * and is cancelled when someone starts speaking again
17
+ * (UserStartedSpeakingFrame or BotStartedSpeakingFrame).
18
+ *
19
+ * The timer is suppressed while a user turn is in progress to avoid false
20
+ * triggers during interruptions (where BotStoppedSpeakingFrame arrives while
21
+ * the user is still speaking).
22
+ *
23
+ * A UserIdleTimeoutUpdateFrame applies immediately: it restarts a running
24
+ * timer with the new duration and, while waiting for the user to speak, arms
25
+ * the timer even if idle detection was previously disabled.
26
+ *
27
+ * Event handlers available:
28
+ *
29
+ * - on_user_turn_idle: Emitted when the user has been idle for the timeout period.
30
+ *
31
+ * @example
32
+ * controller.eventHandler("on_user_turn_idle", async (controller) => {
33
+ * // Handle user idle - send reminder, prompt, etc.
34
+ * });
35
+ */
36
+ export class UserIdleController extends BaseObject {
37
+ _userIdleTimeout;
38
+ _waitingForUser = false;
39
+ _botSpeaking = false;
40
+ _userTurnInProgress = false;
41
+ _functionCallsInProgress = 0;
42
+ _idleTimerTask = null;
43
+ constructor(options = {}) {
44
+ super();
45
+ this._userIdleTimeout = options.userIdleTimeout ?? 0;
46
+ this._registerEventHandler("on_user_turn_idle", true);
47
+ }
48
+ /**
49
+ * Whether the bot has finished responding and is waiting for the user.
50
+ *
51
+ * False while the bot is thinking, speaking or running a function call,
52
+ * and during a user turn.
53
+ */
54
+ get waitingForUser() {
55
+ return this._waitingForUser;
56
+ }
57
+ /** Whether function calls have started and not finished. */
58
+ get functionCallsInProgress() {
59
+ return this._functionCallsInProgress > 0;
60
+ }
61
+ /**
62
+ * Set up the controller.
63
+ *
64
+ * @param setup Configuration object containing setup parameters.
65
+ */
66
+ async setup(setup) {
67
+ await super.setup(setup.taskManager);
68
+ }
69
+ /**
70
+ * Stop the idle timer.
71
+ *
72
+ * Called at session end so it can't report idleness that only means the
73
+ * session is over.
74
+ */
75
+ async stop() {
76
+ await this._cancelIdleTimer();
77
+ }
78
+ /** Cleanup the controller. */
79
+ async cleanup() {
80
+ await super.cleanup();
81
+ await this.stop();
82
+ }
83
+ /**
84
+ * Process an incoming frame to track user activity state.
85
+ *
86
+ * @param frame The frame to be processed.
87
+ */
88
+ async processFrame(frame) {
89
+ if (frame instanceof UserIdleTimeoutUpdateFrame) {
90
+ this._userIdleTimeout = frame.timeout;
91
+ if (this._userIdleTimeout <= 0) {
92
+ await this._cancelIdleTimer();
93
+ }
94
+ else if (this._waitingForUser) {
95
+ // Apply the new timeout now: restart a running timer with the new
96
+ // duration, or arm one if idle detection was previously disabled.
97
+ await this._startIdleTimer();
98
+ }
99
+ return;
100
+ }
101
+ if (frame instanceof BotStoppedSpeakingFrame) {
102
+ this._botSpeaking = false;
103
+ // Only start the timer if the user isn't mid-turn and no function
104
+ // calls are pending.
105
+ //
106
+ // Interruption case: the frame order is UserStartedSpeaking →
107
+ // BotStoppedSpeaking → (user keeps talking) → UserStoppedSpeaking.
108
+ // Without the user-turn guard the timer would start while the user is
109
+ // still speaking.
110
+ //
111
+ // Function call case: normally FunctionCallsStarted arrives after
112
+ // BotStoppedSpeaking and cancels the timer directly. But a race
113
+ // condition can cause FunctionCallsStarted to arrive before
114
+ // BotStoppedSpeaking when pushing a TTSSpeakFrame in the
115
+ // on_function_calls_started event handler, so the counter guard
116
+ // prevents the timer from starting while a function call is in
117
+ // progress.
118
+ if (!this._userTurnInProgress && this._functionCallsInProgress === 0) {
119
+ // Track the waiting-for-user window even when the timeout is
120
+ // currently <= 0 (no timer), so a later timeout update can arm the
121
+ // timer without waiting for the next bot turn.
122
+ this._waitingForUser = true;
123
+ await this._startIdleTimer();
124
+ }
125
+ }
126
+ else if (frame instanceof BotStartedSpeakingFrame) {
127
+ this._botSpeaking = true;
128
+ this._waitingForUser = false;
129
+ await this._cancelIdleTimer();
130
+ }
131
+ else if (frame instanceof UserStartedSpeakingFrame) {
132
+ this._waitingForUser = false;
133
+ this._userTurnInProgress = true;
134
+ await this._cancelIdleTimer();
135
+ }
136
+ else if (frame instanceof UserStoppedSpeakingFrame) {
137
+ this._userTurnInProgress = false;
138
+ }
139
+ else if (frame instanceof FunctionCallsStartedFrame) {
140
+ this._waitingForUser = false;
141
+ this._functionCallsInProgress += frame.functionCalls.length;
142
+ await this._cancelIdleTimer();
143
+ }
144
+ else if (frame instanceof FunctionCallResultFrame ||
145
+ frame instanceof FunctionCallCancelFrame) {
146
+ this._functionCallsInProgress = Math.max(0, this._functionCallsInProgress - 1);
147
+ }
148
+ }
149
+ /**
150
+ * Start waiting for the user after a turn the bot will not answer.
151
+ *
152
+ * The timer normally starts when the bot stops speaking. A user turn that
153
+ * ends with nothing for the bot to answer (e.g. no transcript) cancels the
154
+ * timer without the bot speaking again afterwards, so the caller re-arms it
155
+ * here. Does nothing while the bot is speaking, a user turn is in progress,
156
+ * or function calls are pending.
157
+ */
158
+ async waitForUser() {
159
+ if (this._botSpeaking || this._userTurnInProgress)
160
+ return;
161
+ if (this._functionCallsInProgress > 0)
162
+ return;
163
+ this._waitingForUser = true;
164
+ await this._startIdleTimer();
165
+ }
166
+ /** Start (or restart) the idle timer. */
167
+ async _startIdleTimer() {
168
+ if (this._userIdleTimeout <= 0)
169
+ return;
170
+ await this._cancelIdleTimer();
171
+ this._idleTimerTask = this.createTask(() => this._idleTimerExpired(), "_idleTimerExpired");
172
+ }
173
+ /** Cancel the idle timer if running. */
174
+ async _cancelIdleTimer() {
175
+ if (this._idleTimerTask) {
176
+ await this.cancelTask(this._idleTimerTask);
177
+ this._idleTimerTask = null;
178
+ }
179
+ }
180
+ /** Sleep for the timeout duration then fire the idle event. */
181
+ async _idleTimerExpired() {
182
+ await sleep(this._userIdleTimeout);
183
+ this._idleTimerTask = null;
184
+ await this._callEventHandler("on_user_turn_idle");
185
+ }
186
+ }
187
+ //# sourceMappingURL=user_idle_controller.js.map
@@ -0,0 +1,15 @@
1
+ /** User mute strategy that always mutes the user while the bot is speaking. */
2
+ import { type Frame } from "../../frames/frames.ts";
3
+ import { BaseUserMuteStrategy } from "./base_user_mute_strategy.ts";
4
+ /** User mute strategy that always mutes the user while the bot is speaking. */
5
+ export declare class AlwaysUserMuteStrategy extends BaseUserMuteStrategy {
6
+ protected _botSpeaking: boolean;
7
+ /**
8
+ * Process an incoming frame.
9
+ *
10
+ * @param frame The frame to be processed.
11
+ * @returns Whether the strategy is muted.
12
+ */
13
+ processFrame(frame: Frame): Promise<boolean>;
14
+ }
15
+ //# sourceMappingURL=always_user_mute_strategy.d.ts.map
@@ -0,0 +1,29 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/turns/user_mute/always_user_mute_strategy.py
6
+ /** User mute strategy that always mutes the user while the bot is speaking. */
7
+ import { BotStartedSpeakingFrame, BotStoppedSpeakingFrame, } from "../../frames/frames.js";
8
+ import { BaseUserMuteStrategy } from "./base_user_mute_strategy.js";
9
+ /** User mute strategy that always mutes the user while the bot is speaking. */
10
+ export class AlwaysUserMuteStrategy extends BaseUserMuteStrategy {
11
+ _botSpeaking = false;
12
+ /**
13
+ * Process an incoming frame.
14
+ *
15
+ * @param frame The frame to be processed.
16
+ * @returns Whether the strategy is muted.
17
+ */
18
+ async processFrame(frame) {
19
+ await super.processFrame(frame);
20
+ if (frame instanceof BotStartedSpeakingFrame) {
21
+ this._botSpeaking = true;
22
+ }
23
+ else if (frame instanceof BotStoppedSpeakingFrame) {
24
+ this._botSpeaking = false;
25
+ }
26
+ return this._botSpeaking;
27
+ }
28
+ }
29
+ //# sourceMappingURL=always_user_mute_strategy.js.map
@@ -0,0 +1,39 @@
1
+ /** Base strategy for deciding whether user frames should be muted. */
2
+ import type { Frame } from "../../frames/frames.ts";
3
+ import type { FrameProcessorSetup } from "../../processors/frame_processor.ts";
4
+ import { BaseObject, type BaseObjectOptions } from "../../utils/base_object.ts";
5
+ export interface BaseUserMuteStrategyOptions extends BaseObjectOptions {
6
+ }
7
+ /**
8
+ * Base class for strategies that decide whether user frames should be muted.
9
+ *
10
+ * A user mute strategy determines whether incoming user frames should be
11
+ * suppressed based on the *current system state*.
12
+ *
13
+ * Typical heuristics include:
14
+ * - The bot is currently speaking, so user should be muted
15
+ * - A function call or tool execution is in progress
16
+ * - The system is otherwise not ready to accept user input
17
+ *
18
+ * The strategy is evaluated per frame and returns a boolean indicating whether
19
+ * the user should be muted.
20
+ */
21
+ export declare class BaseUserMuteStrategy extends BaseObject {
22
+ constructor(options?: BaseUserMuteStrategyOptions);
23
+ /**
24
+ * Set up the strategy.
25
+ *
26
+ * @param setup Configuration object containing setup parameters.
27
+ */
28
+ setup(setup: FrameProcessorSetup): Promise<void>;
29
+ /** Cleanup the strategy. */
30
+ cleanup(): Promise<void>;
31
+ /**
32
+ * Process an incoming frame.
33
+ *
34
+ * @param frame The frame to be processed.
35
+ * @returns Whether the strategy is muted.
36
+ */
37
+ processFrame(_frame: Frame): Promise<boolean>;
38
+ }
39
+ //# sourceMappingURL=base_user_mute_strategy.d.ts.map
@@ -0,0 +1,45 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/turns/user_mute/base_user_mute_strategy.py
6
+ import { BaseObject } from "../../utils/base_object.js";
7
+ /**
8
+ * Base class for strategies that decide whether user frames should be muted.
9
+ *
10
+ * A user mute strategy determines whether incoming user frames should be
11
+ * suppressed based on the *current system state*.
12
+ *
13
+ * Typical heuristics include:
14
+ * - The bot is currently speaking, so user should be muted
15
+ * - A function call or tool execution is in progress
16
+ * - The system is otherwise not ready to accept user input
17
+ *
18
+ * The strategy is evaluated per frame and returns a boolean indicating whether
19
+ * the user should be muted.
20
+ */
21
+ export class BaseUserMuteStrategy extends BaseObject {
22
+ constructor(options = {}) {
23
+ super(options);
24
+ }
25
+ /**
26
+ * Set up the strategy.
27
+ *
28
+ * @param setup Configuration object containing setup parameters.
29
+ */
30
+ async setup(setup) {
31
+ await super.setup(setup.taskManager);
32
+ }
33
+ /** Cleanup the strategy. */
34
+ async cleanup() { }
35
+ /**
36
+ * Process an incoming frame.
37
+ *
38
+ * @param frame The frame to be processed.
39
+ * @returns Whether the strategy is muted.
40
+ */
41
+ async processFrame(_frame) {
42
+ return false;
43
+ }
44
+ }
45
+ //# sourceMappingURL=base_user_mute_strategy.js.map
@@ -0,0 +1,28 @@
1
+ /** User mute strategy that mutes the user only during the bot’s first speech. */
2
+ import { BotStartedSpeakingFrame, BotStoppedSpeakingFrame, type Frame } from "../../frames/frames.ts";
3
+ import { BaseUserMuteStrategy } from "./base_user_mute_strategy.ts";
4
+ /**
5
+ * User mute strategy that mutes the user only during the bot’s first speech.
6
+ *
7
+ * This strategy allows user input before the bot starts speaking. Once the bot
8
+ * begins its first speaking turn, user frames are muted until the bot finishes
9
+ * that speech. After the bot completes its first speaking turn, user input is
10
+ * no longer muted by this strategy.
11
+ *
12
+ * Use this strategy when early user input is acceptable, but interruptions
13
+ * during the bot’s initial response should be prevented.
14
+ */
15
+ export declare class FirstSpeechUserMuteStrategy extends BaseUserMuteStrategy {
16
+ protected _botSpeaking: boolean;
17
+ protected _firstSpeechHandled: boolean;
18
+ /**
19
+ * Process an incoming frame.
20
+ *
21
+ * @param frame The frame to be processed.
22
+ * @returns Whether the strategy is muted.
23
+ */
24
+ processFrame(frame: Frame): Promise<boolean>;
25
+ protected _handleBotStartedSpeaking(_frame: BotStartedSpeakingFrame): Promise<void>;
26
+ protected _handleBotStoppedSpeaking(_frame: BotStoppedSpeakingFrame): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=first_speech_user_mute_strategy.d.ts.map
@@ -0,0 +1,52 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/turns/user_mute/first_speech_user_mute_strategy.py
6
+ /** User mute strategy that mutes the user only during the bot’s first speech. */
7
+ import { BotStartedSpeakingFrame, BotStoppedSpeakingFrame, } from "../../frames/frames.js";
8
+ import { BaseUserMuteStrategy } from "./base_user_mute_strategy.js";
9
+ /**
10
+ * User mute strategy that mutes the user only during the bot’s first speech.
11
+ *
12
+ * This strategy allows user input before the bot starts speaking. Once the bot
13
+ * begins its first speaking turn, user frames are muted until the bot finishes
14
+ * that speech. After the bot completes its first speaking turn, user input is
15
+ * no longer muted by this strategy.
16
+ *
17
+ * Use this strategy when early user input is acceptable, but interruptions
18
+ * during the bot’s initial response should be prevented.
19
+ */
20
+ export class FirstSpeechUserMuteStrategy extends BaseUserMuteStrategy {
21
+ _botSpeaking = false;
22
+ _firstSpeechHandled = false;
23
+ /**
24
+ * Process an incoming frame.
25
+ *
26
+ * @param frame The frame to be processed.
27
+ * @returns Whether the strategy is muted.
28
+ */
29
+ async processFrame(frame) {
30
+ await super.processFrame(frame);
31
+ if (frame instanceof BotStartedSpeakingFrame) {
32
+ await this._handleBotStartedSpeaking(frame);
33
+ }
34
+ else if (frame instanceof BotStoppedSpeakingFrame) {
35
+ await this._handleBotStoppedSpeaking(frame);
36
+ }
37
+ if (this._botSpeaking && !this._firstSpeechHandled) {
38
+ return true;
39
+ }
40
+ return false;
41
+ }
42
+ async _handleBotStartedSpeaking(_frame) {
43
+ this._botSpeaking = true;
44
+ }
45
+ async _handleBotStoppedSpeaking(_frame) {
46
+ this._botSpeaking = false;
47
+ if (!this._firstSpeechHandled) {
48
+ this._firstSpeechHandled = true;
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=first_speech_user_mute_strategy.js.map
@@ -0,0 +1,25 @@
1
+ /** User mute strategy that mutes the user while a function call is executing. */
2
+ import { type Frame, FunctionCallsStartedFrame } from "../../frames/frames.ts";
3
+ import { BaseUserMuteStrategy } from "./base_user_mute_strategy.ts";
4
+ /**
5
+ * User mute strategy that mutes the user while a function call is executing.
6
+ *
7
+ * This strategy ensures that user input does not interfere with ongoing
8
+ * function execution. While a function call is active, all user frames are
9
+ * muted. Once the function call completes or is canceled, user input is
10
+ * allowed again.
11
+ */
12
+ export declare class FunctionCallUserMuteStrategy extends BaseUserMuteStrategy {
13
+ protected _functionCallInProgress: Set<string>;
14
+ /** Initialize the function call user mute strategy. */
15
+ constructor();
16
+ /**
17
+ * Process an incoming frame.
18
+ *
19
+ * @param frame The frame to be processed.
20
+ * @returns Whether the strategy is muted.
21
+ */
22
+ processFrame(frame: Frame): Promise<boolean>;
23
+ protected _handleFunctionCallsStarted(frame: FunctionCallsStartedFrame): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=function_call_user_mute_strategy.d.ts.map
@@ -0,0 +1,50 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/turns/user_mute/function_call_user_mute_strategy.py
6
+ /** User mute strategy that mutes the user while a function call is executing. */
7
+ import { FunctionCallCancelFrame, FunctionCallResultFrame, FunctionCallsStartedFrame, } from "../../frames/frames.js";
8
+ import { BaseUserMuteStrategy } from "./base_user_mute_strategy.js";
9
+ /**
10
+ * User mute strategy that mutes the user while a function call is executing.
11
+ *
12
+ * This strategy ensures that user input does not interfere with ongoing
13
+ * function execution. While a function call is active, all user frames are
14
+ * muted. Once the function call completes or is canceled, user input is
15
+ * allowed again.
16
+ */
17
+ export class FunctionCallUserMuteStrategy extends BaseUserMuteStrategy {
18
+ _functionCallInProgress = new Set();
19
+ /** Initialize the function call user mute strategy. */
20
+ constructor() {
21
+ super();
22
+ }
23
+ /**
24
+ * Process an incoming frame.
25
+ *
26
+ * @param frame The frame to be processed.
27
+ * @returns Whether the strategy is muted.
28
+ */
29
+ async processFrame(frame) {
30
+ await super.processFrame(frame);
31
+ if (frame instanceof FunctionCallsStartedFrame) {
32
+ await this._handleFunctionCallsStarted(frame);
33
+ }
34
+ else if (frame instanceof FunctionCallCancelFrame ||
35
+ frame instanceof FunctionCallResultFrame) {
36
+ // Untracked ids reach here: a built-in cancel tool is excluded from
37
+ // FunctionCallsStartedFrame yet still emits a result, async tools
38
+ // emit a result frame per intermediate update, and a bus bridge can
39
+ // re-deliver a result another worker already handled.
40
+ this._functionCallInProgress.delete(frame.toolCallId);
41
+ }
42
+ return this._functionCallInProgress.size > 0;
43
+ }
44
+ async _handleFunctionCallsStarted(frame) {
45
+ for (const f of frame.functionCalls) {
46
+ this._functionCallInProgress.add(f.toolCallId);
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=function_call_user_mute_strategy.js.map
@@ -0,0 +1,6 @@
1
+ export { AlwaysUserMuteStrategy } from "./always_user_mute_strategy.ts";
2
+ export { BaseUserMuteStrategy } from "./base_user_mute_strategy.ts";
3
+ export { FirstSpeechUserMuteStrategy } from "./first_speech_user_mute_strategy.ts";
4
+ export { FunctionCallUserMuteStrategy } from "./function_call_user_mute_strategy.ts";
5
+ export { MuteUntilFirstBotCompleteUserMuteStrategy } from "./mute_until_first_bot_complete_user_mute_strategy.ts";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,11 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/turns/user_mute/__init__.py
6
+ export { AlwaysUserMuteStrategy } from "./always_user_mute_strategy.js";
7
+ export { BaseUserMuteStrategy } from "./base_user_mute_strategy.js";
8
+ export { FirstSpeechUserMuteStrategy } from "./first_speech_user_mute_strategy.js";
9
+ export { FunctionCallUserMuteStrategy } from "./function_call_user_mute_strategy.js";
10
+ export { MuteUntilFirstBotCompleteUserMuteStrategy } from "./mute_until_first_bot_complete_user_mute_strategy.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,43 @@
1
+ /** User mute strategy that mutes the user until the bot completes its first speech. */
2
+ import { BotStoppedSpeakingFrame, ErrorFrame, type Frame } from "../../frames/frames.ts";
3
+ import { BaseUserMuteStrategy } from "./base_user_mute_strategy.ts";
4
+ /**
5
+ * User mute strategy that mutes the user until the bot completes its first speech.
6
+ *
7
+ * This strategy mutes user frames immediately from the start of the
8
+ * interaction, even if the bot has not started speaking yet. User input
9
+ * remains muted until the bot finishes its first speaking turn.
10
+ *
11
+ * After the bot completes its initial speech, all subsequent user frames are
12
+ * allowed to pass through without muting.
13
+ *
14
+ * Use this strategy when the bot must fully control the beginning of the
15
+ * interaction and deliver its first response without any user interruption.
16
+ *
17
+ * The mute is also released if the bot's first speaking turn fails before
18
+ * producing any audio, so that a failed opening leaves the user able to speak.
19
+ */
20
+ export declare class MuteUntilFirstBotCompleteUserMuteStrategy extends BaseUserMuteStrategy {
21
+ protected _botStartedSpeaking: boolean;
22
+ protected _firstSpeechHandled: boolean;
23
+ /** Initialize the mute-until-first-bot-complete user mute strategy. */
24
+ constructor();
25
+ /**
26
+ * Process an incoming frame.
27
+ *
28
+ * @param frame The frame to be processed.
29
+ * @returns Whether the strategy is muted.
30
+ */
31
+ processFrame(frame: Frame): Promise<boolean>;
32
+ protected _handleBotStoppedSpeaking(_frame: BotStoppedSpeakingFrame): Promise<void>;
33
+ /**
34
+ * Release the mute when the first speaking turn fails before any audio.
35
+ *
36
+ * No audio means no `BotStoppedSpeakingFrame`, and no later one to wait
37
+ * for either, since a muted user can never prompt another turn. Only
38
+ * errors before the bot starts speaking count: after that the transport
39
+ * ends the turn on its own once the audio dries up.
40
+ */
41
+ protected _handleError(frame: ErrorFrame): Promise<void>;
42
+ }
43
+ //# sourceMappingURL=mute_until_first_bot_complete_user_mute_strategy.d.ts.map