@voicethere/agent 0.8.3 → 0.9.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.
@@ -181,6 +181,12 @@ function isSttControlAckMessage(value) {
181
181
  const msg = value;
182
182
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
183
183
  }
184
+ function isVoiceLanguageControlAckMessage(value) {
185
+ if (!value || typeof value !== "object")
186
+ return false;
187
+ const msg = value;
188
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
189
+ }
184
190
  function isWebhookMessage(value) {
185
191
  if (!value || typeof value !== "object")
186
192
  return false;
@@ -223,7 +229,7 @@ function isParentMessage(value) {
223
229
  if (!value || typeof value !== "object")
224
230
  return false;
225
231
  const msg = value;
226
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
232
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
227
233
  }
228
234
  function isSessionScopedParentMessage(value) {
229
235
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -251,6 +257,7 @@ var pendingPlayPoseAcks = /* @__PURE__ */ new Map();
251
257
  var MIX_CONTROL_ACK_TIMEOUT_MS = 5e3;
252
258
  var pendingMixAcks = /* @__PURE__ */ new Map();
253
259
  var pendingSttAcks = /* @__PURE__ */ new Map();
260
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
254
261
  function handleRecordingControlAck(message) {
255
262
  const pending = pendingRecordingAcks.get(message.requestId);
256
263
  if (!pending)
@@ -353,6 +360,24 @@ function handleSttControlAck(message) {
353
360
  requestId: message.requestId
354
361
  });
355
362
  }
363
+ function handleVoiceLanguageControlAck(message) {
364
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
365
+ if (!pending)
366
+ return;
367
+ clearTimeout(pending.timer);
368
+ pendingVoiceLanguageAcks.delete(message.requestId);
369
+ pending.resolve({
370
+ ok: message.ok,
371
+ reason: message.reason,
372
+ requestId: message.requestId,
373
+ ...message.language ? { language: message.language } : {},
374
+ ...message.voice ? { voice: message.voice } : {},
375
+ ...message.stt ? { stt: message.stt } : {},
376
+ ...message.scope ? { scope: message.scope } : {},
377
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
378
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
379
+ });
380
+ }
356
381
  function isTtsPoseAvailableInProcess() {
357
382
  for (const available of ttsPoseAvailableBySessionId.values()) {
358
383
  if (available)
@@ -433,7 +458,7 @@ function allowOutboundForSession(sessionId) {
433
458
  }
434
459
  function sendParentMessage(message) {
435
460
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
436
- if (msgType === "mix_control" || msgType === "stt_control") {
461
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
437
462
  process.send?.(message);
438
463
  return;
439
464
  }
@@ -643,6 +668,10 @@ function defineAgent(handlers) {
643
668
  handleSttControlAck(message);
644
669
  return;
645
670
  }
671
+ if (isVoiceLanguageControlAckMessage(message)) {
672
+ handleVoiceLanguageControlAck(message);
673
+ return;
674
+ }
646
675
  if (isWebhookMessage(message)) {
647
676
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
648
677
  return;
@@ -178,6 +178,12 @@ function isSttControlAckMessage(value) {
178
178
  const msg = value;
179
179
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
180
180
  }
181
+ function isVoiceLanguageControlAckMessage(value) {
182
+ if (!value || typeof value !== "object")
183
+ return false;
184
+ const msg = value;
185
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
186
+ }
181
187
  function isWebhookMessage(value) {
182
188
  if (!value || typeof value !== "object")
183
189
  return false;
@@ -220,7 +226,7 @@ function isParentMessage(value) {
220
226
  if (!value || typeof value !== "object")
221
227
  return false;
222
228
  const msg = value;
223
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
229
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
224
230
  }
225
231
  function isSessionScopedParentMessage(value) {
226
232
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -248,6 +254,7 @@ var pendingPlayStopAcks = /* @__PURE__ */ new Map();
248
254
  var pendingPlayPoseAcks = /* @__PURE__ */ new Map();
249
255
  var pendingMixAcks = /* @__PURE__ */ new Map();
250
256
  var pendingSttAcks = /* @__PURE__ */ new Map();
257
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
251
258
  function handleRecordingControlAck(message) {
252
259
  const pending = pendingRecordingAcks.get(message.requestId);
253
260
  if (!pending)
@@ -350,6 +357,24 @@ function handleSttControlAck(message) {
350
357
  requestId: message.requestId
351
358
  });
352
359
  }
360
+ function handleVoiceLanguageControlAck(message) {
361
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
362
+ if (!pending)
363
+ return;
364
+ clearTimeout(pending.timer);
365
+ pendingVoiceLanguageAcks.delete(message.requestId);
366
+ pending.resolve({
367
+ ok: message.ok,
368
+ reason: message.reason,
369
+ requestId: message.requestId,
370
+ ...message.language ? { language: message.language } : {},
371
+ ...message.voice ? { voice: message.voice } : {},
372
+ ...message.stt ? { stt: message.stt } : {},
373
+ ...message.scope ? { scope: message.scope } : {},
374
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
375
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
376
+ });
377
+ }
353
378
  function clearPendingRecordingAcksForSession(sessionId, reason) {
354
379
  for (const [requestId, pending] of pendingRecordingAcks) {
355
380
  if (pending.sessionId !== sessionId)
@@ -418,7 +443,7 @@ function allowOutboundForSession(sessionId) {
418
443
  }
419
444
  function sendParentMessage(message) {
420
445
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
421
- if (msgType === "mix_control" || msgType === "stt_control") {
446
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
422
447
  process.send?.(message);
423
448
  return;
424
449
  }
@@ -628,6 +653,10 @@ function defineAgent(handlers) {
628
653
  handleSttControlAck(message);
629
654
  return;
630
655
  }
656
+ if (isVoiceLanguageControlAckMessage(message)) {
657
+ handleVoiceLanguageControlAck(message);
658
+ return;
659
+ }
631
660
  if (isWebhookMessage(message)) {
632
661
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
633
662
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;AAE7C,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,mFAAmF;IACnF,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,uBAAuB,EAqLpD,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAMrE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,eAAe,CAEnE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,CAMnE;AAED,wBAAgB,yBAAyB,IAAI,uBAAuB,EAAE,CAErE"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;AAE7C,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,mFAAmF;IACnF,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,uBAAuB,EA8LpD,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAMrE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,eAAe,CAEnE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,CAMnE;AAED,wBAAgB,yBAAyB,IAAI,uBAAuB,EAAE,CAErE"}
@@ -15,6 +15,14 @@ export const AGENT_TEMPLATES = [
15
15
  description: "Data-channel-only echo — relays speech events and chat without TTS.",
16
16
  sourceFiles: ["echo-dc/agent.ts"],
17
17
  },
18
+ {
19
+ id: "language-switch",
20
+ entry: "language-switch/agent.ts",
21
+ kind: "product",
22
+ seedOnCreate: true,
23
+ description: "Switches STT and TTS independently from onUserLanguage, and can change one vendor mid-conversation. Detection does not change either side until this agent calls setVoiceLanguage.",
24
+ sourceFiles: ["language-switch/agent.ts"],
25
+ },
18
26
  {
19
27
  id: "voice-starter",
20
28
  entry: "voice-starter/agent.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"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"}
@@ -182,6 +182,12 @@ function isSttControlAckMessage(value) {
182
182
  const msg = value;
183
183
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
184
184
  }
185
+ function isVoiceLanguageControlAckMessage(value) {
186
+ if (!value || typeof value !== "object")
187
+ return false;
188
+ const msg = value;
189
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
190
+ }
185
191
  function isWebhookMessage(value) {
186
192
  if (!value || typeof value !== "object")
187
193
  return false;
@@ -224,7 +230,7 @@ function isParentMessage(value) {
224
230
  if (!value || typeof value !== "object")
225
231
  return false;
226
232
  const msg = value;
227
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
233
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
228
234
  }
229
235
  function isSessionScopedParentMessage(value) {
230
236
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -254,6 +260,7 @@ var MIX_CONTROL_ACK_TIMEOUT_MS = 5e3;
254
260
  var STT_CONTROL_ACK_TIMEOUT_MS = 5e3;
255
261
  var pendingMixAcks = /* @__PURE__ */ new Map();
256
262
  var pendingSttAcks = /* @__PURE__ */ new Map();
263
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
257
264
  function handleRecordingControlAck(message) {
258
265
  const pending = pendingRecordingAcks.get(message.requestId);
259
266
  if (!pending)
@@ -356,6 +363,24 @@ function handleSttControlAck(message) {
356
363
  requestId: message.requestId
357
364
  });
358
365
  }
366
+ function handleVoiceLanguageControlAck(message) {
367
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
368
+ if (!pending)
369
+ return;
370
+ clearTimeout(pending.timer);
371
+ pendingVoiceLanguageAcks.delete(message.requestId);
372
+ pending.resolve({
373
+ ok: message.ok,
374
+ reason: message.reason,
375
+ requestId: message.requestId,
376
+ ...message.language ? { language: message.language } : {},
377
+ ...message.voice ? { voice: message.voice } : {},
378
+ ...message.stt ? { stt: message.stt } : {},
379
+ ...message.scope ? { scope: message.scope } : {},
380
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
381
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
382
+ });
383
+ }
359
384
  function isMixAvailableInProcess() {
360
385
  for (const available of mixAvailableBySessionId.values()) {
361
386
  if (available)
@@ -448,7 +473,7 @@ function allowOutboundForSession(sessionId) {
448
473
  }
449
474
  function sendParentMessage(message) {
450
475
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
451
- if (msgType === "mix_control" || msgType === "stt_control") {
476
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
452
477
  process.send?.(message);
453
478
  return;
454
479
  }
@@ -658,6 +683,10 @@ function defineAgent(handlers) {
658
683
  handleSttControlAck(message);
659
684
  return;
660
685
  }
686
+ if (isVoiceLanguageControlAckMessage(message)) {
687
+ handleVoiceLanguageControlAck(message);
688
+ return;
689
+ }
661
690
  if (isWebhookMessage(message)) {
662
691
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
663
692
  return;
@@ -178,6 +178,12 @@ function isSttControlAckMessage(value) {
178
178
  const msg = value;
179
179
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
180
180
  }
181
+ function isVoiceLanguageControlAckMessage(value) {
182
+ if (!value || typeof value !== "object")
183
+ return false;
184
+ const msg = value;
185
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
186
+ }
181
187
  function isWebhookMessage(value) {
182
188
  if (!value || typeof value !== "object")
183
189
  return false;
@@ -220,7 +226,7 @@ function isParentMessage(value) {
220
226
  if (!value || typeof value !== "object")
221
227
  return false;
222
228
  const msg = value;
223
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
229
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
224
230
  }
225
231
  function isSessionScopedParentMessage(value) {
226
232
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -247,6 +253,7 @@ var pendingPlayStopAcks = /* @__PURE__ */ new Map();
247
253
  var pendingPlayPoseAcks = /* @__PURE__ */ new Map();
248
254
  var pendingMixAcks = /* @__PURE__ */ new Map();
249
255
  var pendingSttAcks = /* @__PURE__ */ new Map();
256
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
250
257
  function handleRecordingControlAck(message) {
251
258
  const pending = pendingRecordingAcks.get(message.requestId);
252
259
  if (!pending)
@@ -349,6 +356,24 @@ function handleSttControlAck(message) {
349
356
  requestId: message.requestId
350
357
  });
351
358
  }
359
+ function handleVoiceLanguageControlAck(message) {
360
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
361
+ if (!pending)
362
+ return;
363
+ clearTimeout(pending.timer);
364
+ pendingVoiceLanguageAcks.delete(message.requestId);
365
+ pending.resolve({
366
+ ok: message.ok,
367
+ reason: message.reason,
368
+ requestId: message.requestId,
369
+ ...message.language ? { language: message.language } : {},
370
+ ...message.voice ? { voice: message.voice } : {},
371
+ ...message.stt ? { stt: message.stt } : {},
372
+ ...message.scope ? { scope: message.scope } : {},
373
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
374
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
375
+ });
376
+ }
352
377
  function clearPendingRecordingAcksForSession(sessionId, reason) {
353
378
  for (const [requestId, pending] of pendingRecordingAcks) {
354
379
  if (pending.sessionId !== sessionId)
@@ -414,7 +439,7 @@ function allowOutboundForSession(sessionId) {
414
439
  }
415
440
  function sendParentMessage(message) {
416
441
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
417
- if (msgType === "mix_control" || msgType === "stt_control") {
442
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
418
443
  process.send?.(message);
419
444
  return;
420
445
  }
@@ -624,6 +649,10 @@ function defineAgent(handlers) {
624
649
  handleSttControlAck(message);
625
650
  return;
626
651
  }
652
+ if (isVoiceLanguageControlAckMessage(message)) {
653
+ handleVoiceLanguageControlAck(message);
654
+ return;
655
+ }
627
656
  if (isWebhookMessage(message)) {
628
657
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
629
658
  return;
@@ -178,6 +178,12 @@ function isSttControlAckMessage(value) {
178
178
  const msg = value;
179
179
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
180
180
  }
181
+ function isVoiceLanguageControlAckMessage(value) {
182
+ if (!value || typeof value !== "object")
183
+ return false;
184
+ const msg = value;
185
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
186
+ }
181
187
  function isWebhookMessage(value) {
182
188
  if (!value || typeof value !== "object")
183
189
  return false;
@@ -220,7 +226,7 @@ function isParentMessage(value) {
220
226
  if (!value || typeof value !== "object")
221
227
  return false;
222
228
  const msg = value;
223
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
229
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
224
230
  }
225
231
  function isSessionScopedParentMessage(value) {
226
232
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -247,6 +253,7 @@ var pendingPlayStopAcks = /* @__PURE__ */ new Map();
247
253
  var pendingPlayPoseAcks = /* @__PURE__ */ new Map();
248
254
  var pendingMixAcks = /* @__PURE__ */ new Map();
249
255
  var pendingSttAcks = /* @__PURE__ */ new Map();
256
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
250
257
  function handleRecordingControlAck(message) {
251
258
  const pending = pendingRecordingAcks.get(message.requestId);
252
259
  if (!pending)
@@ -349,6 +356,24 @@ function handleSttControlAck(message) {
349
356
  requestId: message.requestId
350
357
  });
351
358
  }
359
+ function handleVoiceLanguageControlAck(message) {
360
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
361
+ if (!pending)
362
+ return;
363
+ clearTimeout(pending.timer);
364
+ pendingVoiceLanguageAcks.delete(message.requestId);
365
+ pending.resolve({
366
+ ok: message.ok,
367
+ reason: message.reason,
368
+ requestId: message.requestId,
369
+ ...message.language ? { language: message.language } : {},
370
+ ...message.voice ? { voice: message.voice } : {},
371
+ ...message.stt ? { stt: message.stt } : {},
372
+ ...message.scope ? { scope: message.scope } : {},
373
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
374
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
375
+ });
376
+ }
352
377
  function clearPendingRecordingAcksForSession(sessionId, reason) {
353
378
  for (const [requestId, pending] of pendingRecordingAcks) {
354
379
  if (pending.sessionId !== sessionId)
@@ -414,7 +439,7 @@ function allowOutboundForSession(sessionId) {
414
439
  }
415
440
  function sendParentMessage(message) {
416
441
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
417
- if (msgType === "mix_control" || msgType === "stt_control") {
442
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
418
443
  process.send?.(message);
419
444
  return;
420
445
  }
@@ -624,6 +649,10 @@ function defineAgent(handlers) {
624
649
  handleSttControlAck(message);
625
650
  return;
626
651
  }
652
+ if (isVoiceLanguageControlAckMessage(message)) {
653
+ handleVoiceLanguageControlAck(message);
654
+ return;
655
+ }
627
656
  if (isWebhookMessage(message)) {
628
657
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
629
658
  return;
@@ -181,6 +181,12 @@ function isSttControlAckMessage(value) {
181
181
  const msg = value;
182
182
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
183
183
  }
184
+ function isVoiceLanguageControlAckMessage(value) {
185
+ if (!value || typeof value !== "object")
186
+ return false;
187
+ const msg = value;
188
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
189
+ }
184
190
  function isWebhookMessage(value) {
185
191
  if (!value || typeof value !== "object")
186
192
  return false;
@@ -223,7 +229,7 @@ function isParentMessage(value) {
223
229
  if (!value || typeof value !== "object")
224
230
  return false;
225
231
  const msg = value;
226
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
232
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
227
233
  }
228
234
  function isSessionScopedParentMessage(value) {
229
235
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -250,6 +256,7 @@ var pendingPlayStopAcks = /* @__PURE__ */ new Map();
250
256
  var pendingPlayPoseAcks = /* @__PURE__ */ new Map();
251
257
  var pendingMixAcks = /* @__PURE__ */ new Map();
252
258
  var pendingSttAcks = /* @__PURE__ */ new Map();
259
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
253
260
  function handleRecordingControlAck(message) {
254
261
  const pending = pendingRecordingAcks.get(message.requestId);
255
262
  if (!pending)
@@ -352,6 +359,24 @@ function handleSttControlAck(message) {
352
359
  requestId: message.requestId
353
360
  });
354
361
  }
362
+ function handleVoiceLanguageControlAck(message) {
363
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
364
+ if (!pending)
365
+ return;
366
+ clearTimeout(pending.timer);
367
+ pendingVoiceLanguageAcks.delete(message.requestId);
368
+ pending.resolve({
369
+ ok: message.ok,
370
+ reason: message.reason,
371
+ requestId: message.requestId,
372
+ ...message.language ? { language: message.language } : {},
373
+ ...message.voice ? { voice: message.voice } : {},
374
+ ...message.stt ? { stt: message.stt } : {},
375
+ ...message.scope ? { scope: message.scope } : {},
376
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
377
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
378
+ });
379
+ }
355
380
  function clearPendingRecordingAcksForSession(sessionId, reason) {
356
381
  for (const [requestId, pending] of pendingRecordingAcks) {
357
382
  if (pending.sessionId !== sessionId)
@@ -417,7 +442,7 @@ function allowOutboundForSession(sessionId) {
417
442
  }
418
443
  function sendParentMessage(message) {
419
444
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
420
- if (msgType === "mix_control" || msgType === "stt_control") {
445
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
421
446
  process.send?.(message);
422
447
  return;
423
448
  }
@@ -627,6 +652,10 @@ function defineAgent(handlers) {
627
652
  handleSttControlAck(message);
628
653
  return;
629
654
  }
655
+ if (isVoiceLanguageControlAckMessage(message)) {
656
+ handleVoiceLanguageControlAck(message);
657
+ return;
658
+ }
630
659
  if (isWebhookMessage(message)) {
631
660
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
632
661
  return;
@@ -10933,6 +10933,12 @@ function isSttControlAckMessage(value) {
10933
10933
  const msg = value;
10934
10934
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
10935
10935
  }
10936
+ function isVoiceLanguageControlAckMessage(value) {
10937
+ if (!value || typeof value !== "object")
10938
+ return false;
10939
+ const msg = value;
10940
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
10941
+ }
10936
10942
  function isWebhookMessage(value) {
10937
10943
  if (!value || typeof value !== "object")
10938
10944
  return false;
@@ -10975,7 +10981,7 @@ function isParentMessage(value) {
10975
10981
  if (!value || typeof value !== "object")
10976
10982
  return false;
10977
10983
  const msg = value;
10978
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
10984
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
10979
10985
  }
10980
10986
  function isSessionScopedParentMessage(value) {
10981
10987
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -11002,6 +11008,7 @@ var pendingPlayStopAcks = /* @__PURE__ */ new Map();
11002
11008
  var pendingPlayPoseAcks = /* @__PURE__ */ new Map();
11003
11009
  var pendingMixAcks = /* @__PURE__ */ new Map();
11004
11010
  var pendingSttAcks = /* @__PURE__ */ new Map();
11011
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
11005
11012
  function handleRecordingControlAck(message) {
11006
11013
  const pending = pendingRecordingAcks.get(message.requestId);
11007
11014
  if (!pending)
@@ -11104,6 +11111,24 @@ function handleSttControlAck(message) {
11104
11111
  requestId: message.requestId
11105
11112
  });
11106
11113
  }
11114
+ function handleVoiceLanguageControlAck(message) {
11115
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
11116
+ if (!pending)
11117
+ return;
11118
+ clearTimeout(pending.timer);
11119
+ pendingVoiceLanguageAcks.delete(message.requestId);
11120
+ pending.resolve({
11121
+ ok: message.ok,
11122
+ reason: message.reason,
11123
+ requestId: message.requestId,
11124
+ ...message.language ? { language: message.language } : {},
11125
+ ...message.voice ? { voice: message.voice } : {},
11126
+ ...message.stt ? { stt: message.stt } : {},
11127
+ ...message.scope ? { scope: message.scope } : {},
11128
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
11129
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
11130
+ });
11131
+ }
11107
11132
  function clearPendingRecordingAcksForSession(sessionId, reason) {
11108
11133
  for (const [requestId, pending] of pendingRecordingAcks) {
11109
11134
  if (pending.sessionId !== sessionId)
@@ -11169,7 +11194,7 @@ function allowOutboundForSession(sessionId) {
11169
11194
  }
11170
11195
  function sendParentMessage(message) {
11171
11196
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
11172
- if (msgType === "mix_control" || msgType === "stt_control") {
11197
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
11173
11198
  process.send?.(message);
11174
11199
  return;
11175
11200
  }
@@ -11379,6 +11404,10 @@ function defineAgent(handlers) {
11379
11404
  handleSttControlAck(message);
11380
11405
  return;
11381
11406
  }
11407
+ if (isVoiceLanguageControlAckMessage(message)) {
11408
+ handleVoiceLanguageControlAck(message);
11409
+ return;
11410
+ }
11382
11411
  if (isWebhookMessage(message)) {
11383
11412
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
11384
11413
  return;
@@ -178,6 +178,12 @@ function isSttControlAckMessage(value) {
178
178
  const msg = value;
179
179
  return msg.type === "stt_control_ack" && typeof msg.requestId === "string";
180
180
  }
181
+ function isVoiceLanguageControlAckMessage(value) {
182
+ if (!value || typeof value !== "object")
183
+ return false;
184
+ const msg = value;
185
+ return msg.type === "voice_language_control_ack" && typeof msg.requestId === "string";
186
+ }
181
187
  function isWebhookMessage(value) {
182
188
  if (!value || typeof value !== "object")
183
189
  return false;
@@ -220,7 +226,7 @@ function isParentMessage(value) {
220
226
  if (!value || typeof value !== "object")
221
227
  return false;
222
228
  const msg = value;
223
- return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "webhook";
229
+ return msg.type === "session_start" || msg.type === "speech_event" || msg.type === "session_end" || msg.type === "data_channel_message" || msg.type === "data_channel_binary" || msg.type === "idle_timeout" || msg.type === "recording_control_ack" || msg.type === "conversation_history_control_ack" || msg.type === "play_ack" || msg.type === "play_status_ack" || msg.type === "play_stop_ack" || msg.type === "play_pose_ack" || msg.type === "mix_control_ack" || msg.type === "stt_control_ack" || msg.type === "voice_language_control_ack" || msg.type === "webhook";
224
230
  }
225
231
  function isSessionScopedParentMessage(value) {
226
232
  return isParentMessage(value) && !isWebhookMessage(value);
@@ -247,6 +253,7 @@ var pendingPlayStopAcks = /* @__PURE__ */ new Map();
247
253
  var pendingPlayPoseAcks = /* @__PURE__ */ new Map();
248
254
  var pendingMixAcks = /* @__PURE__ */ new Map();
249
255
  var pendingSttAcks = /* @__PURE__ */ new Map();
256
+ var pendingVoiceLanguageAcks = /* @__PURE__ */ new Map();
250
257
  function handleRecordingControlAck(message) {
251
258
  const pending = pendingRecordingAcks.get(message.requestId);
252
259
  if (!pending)
@@ -349,6 +356,24 @@ function handleSttControlAck(message) {
349
356
  requestId: message.requestId
350
357
  });
351
358
  }
359
+ function handleVoiceLanguageControlAck(message) {
360
+ const pending = pendingVoiceLanguageAcks.get(message.requestId);
361
+ if (!pending)
362
+ return;
363
+ clearTimeout(pending.timer);
364
+ pendingVoiceLanguageAcks.delete(message.requestId);
365
+ pending.resolve({
366
+ ok: message.ok,
367
+ reason: message.reason,
368
+ requestId: message.requestId,
369
+ ...message.language ? { language: message.language } : {},
370
+ ...message.voice ? { voice: message.voice } : {},
371
+ ...message.stt ? { stt: message.stt } : {},
372
+ ...message.scope ? { scope: message.scope } : {},
373
+ ...message.sttProvider ? { sttProvider: message.sttProvider } : {},
374
+ ...message.ttsProvider ? { ttsProvider: message.ttsProvider } : {}
375
+ });
376
+ }
352
377
  function clearPendingRecordingAcksForSession(sessionId, reason) {
353
378
  for (const [requestId, pending] of pendingRecordingAcks) {
354
379
  if (pending.sessionId !== sessionId)
@@ -414,7 +439,7 @@ function allowOutboundForSession(sessionId) {
414
439
  }
415
440
  function sendParentMessage(message) {
416
441
  const msgType = message && typeof message === "object" && "type" in message ? message.type : void 0;
417
- if (msgType === "mix_control" || msgType === "stt_control") {
442
+ if (msgType === "mix_control" || msgType === "stt_control" || msgType === "voice_language_control") {
418
443
  process.send?.(message);
419
444
  return;
420
445
  }
@@ -624,6 +649,10 @@ function defineAgent(handlers) {
624
649
  handleSttControlAck(message);
625
650
  return;
626
651
  }
652
+ if (isVoiceLanguageControlAckMessage(message)) {
653
+ handleVoiceLanguageControlAck(message);
654
+ return;
655
+ }
627
656
  if (isWebhookMessage(message)) {
628
657
  void agentStartReady.then(() => handleWebhookMessage(message, handlers));
629
658
  return;