@openclaw/voice-call 2026.11.1 → 2026.11.2

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 (26) hide show
  1. package/dist/.setup/{carrier-api-D0Mehu0z.mjs → carrier-api-C8icuJ0G.mjs} +8 -5
  2. package/dist/.setup/{cli-D5-VTleY.mjs → cli-B4FxOsgU.mjs} +11 -7
  3. package/dist/.setup/{config-BxESUUSm.mjs → config-BdbTQCSh.mjs} +15 -8
  4. package/dist/.setup/{mock-BO3pptb-.mjs → mock-rySvj-G6.mjs} +3 -2
  5. package/dist/.setup/{plivo-CVlhseOq.mjs → plivo-DHzGXxW2.mjs} +5 -4
  6. package/dist/.setup/{realtime-handler-Bh3dTrV0.mjs → realtime-handler-Bziu0nfs.mjs} +16 -9
  7. package/dist/.setup/{realtime-transcription.runtime-DIBopS1D.mjs → realtime-transcription.runtime-CbJAs5t_.mjs} +2 -1
  8. package/dist/.setup/{realtime-voice.runtime-S9H9Y0Cp.mjs → realtime-voice.runtime-MZjylF3n.mjs} +2 -1
  9. package/dist/.setup/{response-generator-DfALTCJn.mjs → response-generator-CZJCHbml.mjs} +4 -3
  10. package/dist/.setup/{runtime-entry-DckALJe-.mjs → runtime-entry-Cy51Uayg.mjs} +99 -55
  11. package/dist/.setup/{state-retention-api-y5WYfZsQ.mjs → state-retention-api-ONgqE-_V.mjs} +13 -7
  12. package/dist/.setup/{store-path-Bn3bLr8y.mjs → store-path-Cfwff6j7.mjs} +4 -2
  13. package/dist/.setup/{telnyx-D5Xg2uLQ.mjs → telnyx-ChcIdKAa.mjs} +3 -2
  14. package/dist/.setup/{twilio-BfTwBLIK.mjs → twilio-CrPMFGbz.mjs} +36 -17
  15. package/dist/.setup/{twilio-region-DVg9p6JJ.mjs → twilio-region-wBOx-8sz.mjs} +2 -1
  16. package/dist/.setup/{voice-mapping-CvuJ1B50.mjs → voice-mapping-1lzFmzOF.mjs} +2 -1
  17. package/dist/.setup/{webhook-replay-B0Eo3Ll5.mjs → webhook-replay-B7RJNWNG.mjs} +2 -1
  18. package/dist/cli-metadata.js +2 -1
  19. package/dist/cli-output-mode.js +2 -1
  20. package/dist/doctor-contract-api.js +4 -3
  21. package/dist/index.js +13 -8
  22. package/dist/runtime-entry.js +2 -1
  23. package/dist/setup-api.js +4 -2
  24. package/dist/state-retention-api.js +2 -1
  25. package/package.json +4 -4
  26. package/dist/.source-module-urls/8b7cb5a3dc0f034090cbbda318ba348c0d48853d04f0e3b500529cf7666abe03.json +0 -1
@@ -1,7 +1,7 @@
1
- import { a as mapProviderStatusToEndReason, c as getHeader, h as generateDtmfRedirectTwiml, i as isProviderStatusTerminal, o as normalizeProviderStatus } from "./runtime-entry-DckALJe-.mjs";
2
- import { n as requireSupportedTwilioApiHostname, r as resolveTwilioApiBaseUrl } from "./twilio-region-DVg9p6JJ.mjs";
3
- import { n as mapVoiceToPolly, t as escapeXml } from "./voice-mapping-CvuJ1B50.mjs";
4
- import { a as verifyTwilioWebhook, t as createCarrierApi } from "./carrier-api-D0Mehu0z.mjs";
1
+ import { a as mapProviderStatusToEndReason, c as getHeader, h as generateDtmfRedirectTwiml, i as isProviderStatusTerminal, o as normalizeProviderStatus } from "./runtime-entry-Cy51Uayg.mjs";
2
+ import { n as requireSupportedTwilioApiHostname, r as resolveTwilioApiBaseUrl } from "./twilio-region-wBOx-8sz.mjs";
3
+ import { n as mapVoiceToPolly, t as escapeXml } from "./voice-mapping-1lzFmzOF.mjs";
4
+ import { a as verifyTwilioWebhook, t as createCarrierApi } from "./carrier-api-C8icuJ0G.mjs";
5
5
  import { asNullableObjectRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
7
7
  import crypto from "node:crypto";
@@ -9,7 +9,7 @@ import { safeParseJson } from "openclaw/plugin-sdk/text-utility-runtime";
9
9
  import { safeEqualSecret } from "openclaw/plugin-sdk/security-runtime";
10
10
  import { retryAsync } from "openclaw/plugin-sdk/retry-runtime";
11
11
  import { raceWithTimeout } from "openclaw/plugin-sdk/time-runtime";
12
- // extensions/voice-call/src/providers/twilio/api.ts
12
+ //#region extensions/voice-call/src/providers/twilio/api.ts
13
13
  var TwilioApiError = class extends Error {
14
14
  constructor(httpStatus, responseText) {
15
15
  const parsed = asNullableObjectRecord(safeParseJson(responseText));
@@ -43,9 +43,21 @@ function createTwilioApi(params) {
43
43
  })
44
44
  };
45
45
  }
46
- // extensions/voice-call/src/providers/twilio.ts
46
+ //#endregion
47
+ //#region extensions/voice-call/src/providers/twilio.ts
47
48
  const TWILIO_CALL_NOT_IN_PROGRESS_CODE = 21220;
48
49
  const TWILIO_CALL_UPDATE_RETRY_DELAYS_MS = [250, 750];
50
+ function buildSpeechGather(webhookUrl, language, turnToken) {
51
+ const actionUrl = new URL(webhookUrl);
52
+ if (turnToken) actionUrl.searchParams.set("turnToken", turnToken);
53
+ const locale = language || "en-US";
54
+ const redirectUrl = new URL(actionUrl);
55
+ redirectUrl.searchParams.set("flow", "listen");
56
+ redirectUrl.searchParams.set("gatherToken", crypto.randomUUID());
57
+ redirectUrl.searchParams.set("language", locale);
58
+ return `<Gather input="speech" speechTimeout="auto" timeout="120" language="${escapeXml(locale)}" action="${escapeXml(actionUrl.toString())}" method="POST"></Gather>
59
+ <Redirect method="POST">${escapeXml(redirectUrl.toString())}</Redirect>`;
60
+ }
49
61
  function createTwilioRequestDedupeKey(ctx, verifiedRequestKey) {
50
62
  if (verifiedRequestKey) return verifiedRequestKey;
51
63
  const signature = getHeader(ctx.headers, "x-twilio-signature") ?? "";
@@ -170,12 +182,13 @@ var TwilioProvider = class TwilioProvider {
170
182
  const callIdFromQuery = normalizeOptionalString(ctx.query?.callId);
171
183
  const turnTokenFromQuery = normalizeOptionalString(ctx.query?.turnToken);
172
184
  const dedupeKey = createTwilioRequestDedupeKey(ctx, options?.verifiedRequestKey);
173
- const event = this.normalizeEvent(params, {
185
+ let event = this.normalizeEvent(params, {
174
186
  callIdOverride: callIdFromQuery,
175
187
  dedupeKey,
176
188
  turnToken: turnTokenFromQuery,
177
189
  amdCallback: normalizeOptionalString(ctx.query?.type) === "amd"
178
190
  });
191
+ if (ctx.query?.flow === "listen" && event?.type === "call.answered") event = null;
179
192
  if (event?.direction === "inbound" && event.type !== "call.ended" && event.providerCallId && this.currentPublicUrl && !this.callWebhookUrls.has(event.providerCallId)) this.callWebhookUrls.set(event.providerCallId, this.currentPublicUrl);
180
193
  return {
181
194
  events: event ? [event] : [],
@@ -296,6 +309,13 @@ var TwilioProvider = class TwilioProvider {
296
309
  return storedTwiml;
297
310
  }
298
311
  if (isStatusCallback) return TwilioProvider.EMPTY_TWIML;
312
+ if (ctx.query?.flow === "listen") {
313
+ const webhookUrl = callSid ? this.callWebhookUrls.get(callSid) : void 0;
314
+ if (!webhookUrl) return TwilioProvider.EMPTY_TWIML;
315
+ return `<?xml version="1.0" encoding="UTF-8"?><Response>
316
+ ${buildSpeechGather(webhookUrl, normalizeOptionalString(ctx.query?.language), normalizeOptionalString(ctx.query?.turnToken))}
317
+ </Response>`;
318
+ }
299
319
  if (direction === "inbound") {
300
320
  if (this.callStreamMap.size > 0) return TwilioProvider.QUEUE_TWIML;
301
321
  } else if (!(callId && direction?.startsWith("outbound")) && callStatus !== "in-progress") return TwilioProvider.EMPTY_TWIML;
@@ -421,12 +441,14 @@ var TwilioProvider = class TwilioProvider {
421
441
  }
422
442
  const webhookUrl = this.requireCallWebhookUrl(input.providerCallId);
423
443
  console.warn("[voice-call] Using TwiML <Say> fallback - telephony TTS not configured or media stream not active");
444
+ const pollyVoice = mapVoiceToPolly(input.voice);
445
+ const gather = input.listenAfterPlayback ? buildSpeechGather(webhookUrl, input.locale, input.turnToken) : `<Gather input="speech" speechTimeout="auto" action="${escapeXml(webhookUrl)}" method="POST">
446
+ <Say>.</Say>
447
+ </Gather>`;
424
448
  const twiml = `<?xml version="1.0" encoding="UTF-8"?>
425
449
  <Response>
426
- <Say voice="${mapVoiceToPolly(input.voice)}" language="${input.locale || "en-US"}">${escapeXml(input.text)}</Say>
427
- <Gather input="speech" speechTimeout="auto" action="${escapeXml(webhookUrl)}" method="POST">
428
- <Say>.</Say>
429
- </Gather>
450
+ <Say voice="${pollyVoice}" language="${input.locale || "en-US"}">${escapeXml(input.text)}</Say>
451
+ ${gather}
430
452
  </Response>`;
431
453
  await this.updateLiveCallTwiml(input.providerCallId, twiml, "playTts");
432
454
  }
@@ -484,12 +506,8 @@ var TwilioProvider = class TwilioProvider {
484
506
  });
485
507
  }
486
508
  async startListening(input) {
487
- const actionUrl = new URL(this.requireCallWebhookUrl(input.providerCallId));
488
- if (input.turnToken) actionUrl.searchParams.set("turnToken", input.turnToken);
489
- const twiml = `<?xml version="1.0" encoding="UTF-8"?>
490
- <Response>
491
- <Gather input="speech" speechTimeout="auto" language="${input.language || "en-US"}" action="${escapeXml(actionUrl.toString())}" method="POST">
492
- </Gather>
509
+ const twiml = `<?xml version="1.0" encoding="UTF-8"?><Response>
510
+ ${buildSpeechGather(this.requireCallWebhookUrl(input.providerCallId), input.language, input.turnToken)}
493
511
  </Response>`;
494
512
  await this.updateLiveCallTwiml(input.providerCallId, twiml, "startListening");
495
513
  }
@@ -500,4 +518,5 @@ var TwilioProvider = class TwilioProvider {
500
518
  }
501
519
  async stopListening(_input) {}
502
520
  };
521
+ //#endregion
503
522
  export { TwilioProvider };
@@ -1,4 +1,4 @@
1
- // extensions/voice-call/src/providers/twilio-region.ts
1
+ //#region extensions/voice-call/src/providers/twilio-region.ts
2
2
  const TWILIO_REGIONS = [
3
3
  "us1",
4
4
  "ie1",
@@ -18,4 +18,5 @@ function requireSupportedTwilioApiHostname(baseUrl) {
18
18
  if (!TWILIO_API_HOSTNAMES.has(hostname)) throw new Error(`Unsupported Twilio API hostname: ${hostname}`);
19
19
  return hostname;
20
20
  }
21
+ //#endregion
21
22
  export { requireSupportedTwilioApiHostname as n, resolveTwilioApiBaseUrl as r, TWILIO_REGIONS as t };
@@ -1,5 +1,5 @@
1
1
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
2
- // extensions/voice-call/src/voice-mapping.ts
2
+ //#region extensions/voice-call/src/voice-mapping.ts
3
3
  function escapeXml(text) {
4
4
  return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
5
5
  }
@@ -17,4 +17,5 @@ function mapVoiceToPolly(voice) {
17
17
  if (voice.startsWith("Polly.") || voice.startsWith("Google.")) return voice;
18
18
  return OPENAI_TO_POLLY_MAP.get(normalizeLowercaseStringOrEmpty(voice)) ?? DEFAULT_POLLY_VOICE;
19
19
  }
20
+ //#endregion
20
21
  export { mapVoiceToPolly as n, escapeXml as t };
@@ -1,6 +1,6 @@
1
1
  import { isFutureDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
2
2
  import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
3
- // extensions/voice-call/src/webhook-replay.ts
3
+ //#region extensions/voice-call/src/webhook-replay.ts
4
4
  const REPLAY_WINDOW_MS = 6e5;
5
5
  const REPLAY_CACHE_MAX_ENTRIES = 1e4;
6
6
  const REPLAY_CACHE_PRUNE_INTERVAL = 64;
@@ -39,4 +39,5 @@ function reserveWebhookReplay(cache, replayKey) {
39
39
  }
40
40
  };
41
41
  }
42
+ //#endregion
42
43
  export { reserveWebhookReplay as n, createWebhookReplayCache as t };
@@ -1,6 +1,6 @@
1
1
  import { VOICE_CALL_CLI_DESCRIPTOR } from "./cli-output-mode.js";
2
2
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
3
- // extensions/voice-call/cli-metadata.ts
3
+ //#region extensions/voice-call/cli-metadata.ts
4
4
  var cli_metadata_default = definePluginEntry({
5
5
  id: "voice-call",
6
6
  name: "Voice Call",
@@ -12,4 +12,5 @@ var cli_metadata_default = definePluginEntry({
12
12
  });
13
13
  }
14
14
  });
15
+ //#endregion
15
16
  export { cli_metadata_default as default };
@@ -1,5 +1,5 @@
1
1
  import { getRootOptionAwareCommandPath } from "openclaw/plugin-sdk/cli-argv";
2
- // extensions/voice-call/cli-output-mode.ts
2
+ //#region extensions/voice-call/cli-output-mode.ts
3
3
  const MACHINE_OUTPUT_COMMANDS = /* @__PURE__ */ new Set([
4
4
  "call",
5
5
  "continue",
@@ -24,4 +24,5 @@ const VOICE_CALL_CLI_DESCRIPTOR = {
24
24
  hasSubcommands: true,
25
25
  machineOutput: isVoiceCallMachineOutput
26
26
  };
27
+ //#endregion
27
28
  export { VOICE_CALL_CLI_DESCRIPTOR };
@@ -1,9 +1,9 @@
1
- import { n as stateMigrations$1 } from "./.setup/state-retention-api-y5WYfZsQ.mjs";
2
- import { n as resolveVoiceCallStorePath } from "./.setup/store-path-Bn3bLr8y.mjs";
1
+ import { n as stateMigrations$1 } from "./.setup/state-retention-api-ONgqE-_V.mjs";
2
+ import { n as resolveVoiceCallStorePath } from "./.setup/store-path-Cfwff6j7.mjs";
3
3
  import { normalizeAgentId } from "openclaw/plugin-sdk/routing";
4
4
  import { asOptionalRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { existsSync } from "node:fs";
6
- // extensions/voice-call/doctor-contract-api.ts
6
+ //#region extensions/voice-call/doctor-contract-api.ts
7
7
  /** Return Voice Call agents whose templated core session stores need migration. */
8
8
  function resolveSessionStoreAgentIds(params) {
9
9
  const agentIds = /* @__PURE__ */ new Set();
@@ -84,4 +84,5 @@ const stateMigrations = [...stateMigrations$1, {
84
84
  };
85
85
  }
86
86
  }];
87
+ //#endregion
87
88
  export { resolveSessionStoreAgentIds, stateMigrations };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { definePluginEntry } from "./api.js";
2
2
  import { VOICE_CALL_CLI_DESCRIPTOR } from "./cli-output-mode.js";
3
- import { g as CallBriefSchema, i as resolveVoiceCallConfig, t as VoiceCallConfigSchema, u as validateProviderConfig } from "./.setup/config-BxESUUSm.mjs";
4
- import { C as TerminalStates, t as createVoiceCallRuntime } from "./.setup/runtime-entry-DckALJe-.mjs";
3
+ import { g as CallBriefSchema, i as resolveVoiceCallConfig, t as VoiceCallConfigSchema, u as validateProviderConfig } from "./.setup/config-BdbTQCSh.mjs";
4
+ import { C as TerminalStates, t as createVoiceCallRuntime } from "./.setup/runtime-entry-Cy51Uayg.mjs";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
7
7
  import { ErrorCodes, errorShape } from "openclaw/plugin-sdk/gateway-runtime";
@@ -13,7 +13,7 @@ import { jsonResult } from "openclaw/plugin-sdk/tool-results";
13
13
  import { resolveTimerTimeoutMs, timestampMsToIsoString } from "openclaw/plugin-sdk/number-runtime";
14
14
  import { randomUUID } from "node:crypto";
15
15
  import { Type } from "typebox";
16
- // extensions/voice-call/src/command-service.ts
16
+ //#region extensions/voice-call/src/command-service.ts
17
17
  var VoiceCallCommandInputError = class extends Error {};
18
18
  function toVoiceCallStatus(call) {
19
19
  return {
@@ -160,7 +160,8 @@ function createVoiceCallCommandService(ensureRuntime) {
160
160
  }
161
161
  };
162
162
  }
163
- // extensions/voice-call/src/gateway-continue-operation.ts
163
+ //#endregion
164
+ //#region extensions/voice-call/src/gateway-continue-operation.ts
164
165
  const VOICE_CALL_CONTINUE_OPERATION_BUFFER_MS = 3e4;
165
166
  const VOICE_CALL_CONTINUE_OPERATION_CLEANUP_MS = 3e5;
166
167
  /** Create a process-local operation store for gateway continue-call polling. */
@@ -221,7 +222,8 @@ function createVoiceCallContinueOperationStore(params) {
221
222
  read
222
223
  };
223
224
  }
224
- // extensions/voice-call/src/tool-call-scope.ts
225
+ //#endregion
226
+ //#region extensions/voice-call/src/tool-call-scope.ts
225
227
  async function resolveActiveVoiceCallToolScope(params) {
226
228
  if (!isRecord(params.binding)) return;
227
229
  const binding = params.binding;
@@ -242,7 +244,8 @@ async function resolveActiveVoiceCallToolScope(params) {
242
244
  }
243
245
  };
244
246
  }
245
- // extensions/voice-call/src/tool-schema.ts
247
+ //#endregion
248
+ //#region extensions/voice-call/src/tool-schema.ts
246
249
  const VoiceCallBriefToolSchema = Type.Object({
247
250
  task: Type.Optional(Type.String({ maxLength: 2e3 })),
248
251
  context: Type.Optional(Type.String({ maxLength: 4e3 })),
@@ -308,7 +311,8 @@ const VoiceCallToolSchema = Type.Union([
308
311
  dtmfSequence: Type.Optional(Type.String({ description: "DTMF digits to play before connect" }))
309
312
  })
310
313
  ]);
311
- // extensions/voice-call/index.ts
314
+ //#endregion
315
+ //#region extensions/voice-call/index.ts
312
316
  const VOICE_CALL_WRITE_METHOD_SCOPE = { scope: "operator.write" };
313
317
  const VOICE_CALL_READ_METHOD_SCOPE = { scope: "operator.read" };
314
318
  const voiceCallConfigSchema = { parse(value) {
@@ -564,7 +568,7 @@ var voice_call_default = definePluginEntry({
564
568
  };
565
569
  });
566
570
  api.registerCli(async ({ program }) => {
567
- const { registerVoiceCallCli } = await import("./.setup/cli-D5-VTleY.mjs");
571
+ const { registerVoiceCallCli } = await import("./.setup/cli-B4FxOsgU.mjs");
568
572
  registerVoiceCallCli({
569
573
  program,
570
574
  config,
@@ -625,4 +629,5 @@ var voice_call_default = definePluginEntry({
625
629
  });
626
630
  }
627
631
  });
632
+ //#endregion
628
633
  export { voice_call_default as default };
@@ -1 +1,2 @@
1
- export { t as createVoiceCallRuntime } from "./.setup/runtime-entry-DckALJe-.mjs";
1
+ import { t as createVoiceCallRuntime } from "./.setup/runtime-entry-Cy51Uayg.mjs";
2
+ export { createVoiceCallRuntime };
package/dist/setup-api.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { asFiniteNumber, asOptionalRecord, isRecord, readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
2
2
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
3
- // extensions/voice-call/src/config-migration.ts
3
+ //#region extensions/voice-call/src/config-migration.ts
4
4
  /** Migrate legacy voice-call config input to the current canonical shape. */
5
5
  function migrateVoiceCallLegacyConfigInput(params) {
6
6
  const raw = asOptionalRecord(params.value) ?? {};
@@ -97,7 +97,8 @@ function migrateVoiceCallLegacyConfigInput(params) {
97
97
  changes
98
98
  };
99
99
  }
100
- // extensions/voice-call/setup-api.ts
100
+ //#endregion
101
+ //#region extensions/voice-call/setup-api.ts
101
102
  /** Migrate voice-call plugin config inside the full OpenClaw config object. */
102
103
  function migrateVoiceCallPluginConfig(config) {
103
104
  const rawVoiceCallConfig = config.plugins?.entries?.["voice-call"]?.config;
@@ -132,4 +133,5 @@ var setup_api_default = definePluginEntry({
132
133
  api.registerConfigMigration(migrateVoiceCallPluginConfig);
133
134
  }
134
135
  });
136
+ //#endregion
135
137
  export { setup_api_default as default };
@@ -1 +1,2 @@
1
- export { t as packageName, n as stateMigrations } from "./.setup/state-retention-api-y5WYfZsQ.mjs";
1
+ import { n as stateMigrations, t as packageName } from "./.setup/state-retention-api-ONgqE-_V.mjs";
2
+ export { packageName, stateMigrations };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/voice-call",
3
- "version": "2026.11.1",
3
+ "version": "2026.11.2",
4
4
  "description": "OpenClaw voice-call plugin for Twilio, Telnyx, and Plivo phone calls.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,7 +12,7 @@
12
12
  "zod": "4.6.5"
13
13
  },
14
14
  "peerDependencies": {
15
- "openclaw": ">=2026.11.1"
15
+ "openclaw": ">=2026.11.2"
16
16
  },
17
17
  "peerDependenciesMeta": {
18
18
  "openclaw": {
@@ -31,10 +31,10 @@
31
31
  "minHostVersion": ">=2026.4.10"
32
32
  },
33
33
  "compat": {
34
- "pluginApi": ">=2026.11.1"
34
+ "pluginApi": ">=2026.11.2"
35
35
  },
36
36
  "build": {
37
- "openclawVersion": "2026.11.1"
37
+ "openclawVersion": "2026.11.2"
38
38
  },
39
39
  "release": {
40
40
  "publishToClawHub": true,
@@ -1 +0,0 @@
1
- {"version":3,"entries":[{"output":"api.js","source":"extensions/voice-call/api.ts"},{"output":"cli-metadata.js","source":"extensions/voice-call/cli-metadata.ts"},{"output":"cli-output-mode.js","source":"extensions/voice-call/cli-output-mode.ts"},{"output":"doctor-contract-api.js","source":"extensions/voice-call/doctor-contract-api.ts"},{"output":"index.js","source":"extensions/voice-call/index.ts"},{"output":"runtime-entry.js","source":"extensions/voice-call/runtime-entry.ts"},{"output":"setup-api.js","source":"extensions/voice-call/setup-api.ts"},{"output":"state-retention-api.js","source":"extensions/voice-call/state-retention-api.ts"}],"chunks":[{"output":".setup/carrier-api-D0Mehu0z.mjs","sha256":"1dfad63ca875331ef21a161119f29aaf433d81594c39b874ba868bc159873cd7","facadeSource":null,"sources":["extensions/voice-call/src/providers/shared/carrier-api.ts","extensions/voice-call/src/providers/shared/guarded-json-api.ts","extensions/voice-call/src/webhook-security.ts"]},{"output":".setup/cli-D5-VTleY.mjs","sha256":"a5e4d2e388379e6a7ab2a4b36ec6af695bf3a7aca980088d7343b512a261ecc4","facadeSource":"extensions/voice-call/src/cli.ts","sources":["extensions/voice-call/src/cli-call-log.ts","extensions/voice-call/src/cli-command-io.ts","extensions/voice-call/src/cli-gateway-call.ts","extensions/voice-call/src/cli.ts"]},{"output":".setup/config-BxESUUSm.mjs","sha256":"a305f2c4b33953d35178a4136fc8ed511f8705be46283ccfd9e50f345db09d14","facadeSource":null,"sources":["extensions/voice-call/src/allowlist.ts","extensions/voice-call/src/call-brief-schema.ts","extensions/voice-call/src/config.ts","extensions/voice-call/src/errand-config.ts","extensions/voice-call/src/realtime-call-control.ts","extensions/voice-call/src/realtime-defaults.ts","extensions/voice-call/src/tailscale-config.ts"]},{"output":".setup/mock-BO3pptb-.mjs","sha256":"aea175a24a92c7cfb22192a741ddfe0f87cd038834d06b51c2e07c14be3c6efd","facadeSource":"extensions/voice-call/src/providers/mock.ts","sources":["extensions/voice-call/src/providers/mock.ts"]},{"output":".setup/plivo-CVlhseOq.mjs","sha256":"2daef3768d81942ae0eda31b9ab8975887c386e2dc4fc4600f57c0d999fb855a","facadeSource":"extensions/voice-call/src/providers/plivo.ts","sources":["extensions/voice-call/src/providers/plivo.ts"]},{"output":".setup/realtime-handler-Bh3dTrV0.mjs","sha256":"a5e069c06fe4bbcb53d79b82f01eec14b8df3fdad916d647a5bb2fe4bb56bba8","facadeSource":"extensions/voice-call/src/webhook/realtime-handler.ts","sources":["extensions/voice-call/src/webhook/realtime-audio-pacer.ts","extensions/voice-call/src/webhook/realtime-call-playback.ts","extensions/voice-call/src/webhook/realtime-call-session-control.ts","extensions/voice-call/src/webhook/realtime-handler.ts","extensions/voice-call/src/webhook/realtime-host-speech.ts","extensions/voice-call/src/webhook/realtime-transcript-text.ts","extensions/voice-call/src/webhook/stream-frame-adapter.ts"]},{"output":".setup/realtime-transcription.runtime-DIBopS1D.mjs","sha256":"bb90d344ce8109aef1b05a93e5b8e4633430112c282a351939d70267a29fa6fe","facadeSource":"extensions/voice-call/src/realtime-transcription.runtime.ts","sources":[]},{"output":".setup/realtime-voice.runtime-S9H9Y0Cp.mjs","sha256":"4cea62311759072afbc3c69890e815583aa2d083c980a4d00f9d79b7cd82578b","facadeSource":"extensions/voice-call/src/realtime-voice.runtime.ts","sources":[]},{"output":".setup/response-generator-DfALTCJn.mjs","sha256":"742c4c46315e91511e5c84421c9665eb89d161095618dc2ecc0c4fa71147fc47","facadeSource":"extensions/voice-call/src/response-generator.ts","sources":["extensions/voice-call/src/response-generator.ts"]},{"output":".setup/runtime-entry-DckALJe-.mjs","sha256":"5b7117eda4e54aebc454a0f11aee1109d330b0936c5d84d5e106215c1455feb5","facadeSource":null,"sources":["extensions/voice-call/src/bounded-child-output.ts","extensions/voice-call/src/call-brief.ts","extensions/voice-call/src/call-delivery-runtime.ts","extensions/voice-call/src/call-delivery.ts","extensions/voice-call/src/http-headers.ts","extensions/voice-call/src/manager.ts","extensions/voice-call/src/manager/callbacks.ts","extensions/voice-call/src/manager/events.ts","extensions/voice-call/src/manager/lifecycle.ts","extensions/voice-call/src/manager/lookup.ts","extensions/voice-call/src/manager/mutations.ts","extensions/voice-call/src/manager/outbound.ts","extensions/voice-call/src/manager/replay-keys.ts","extensions/voice-call/src/manager/state.ts","extensions/voice-call/src/manager/store.ts","extensions/voice-call/src/manager/timer-delays.ts","extensions/voice-call/src/manager/timers.ts","extensions/voice-call/src/manager/twiml.ts","extensions/voice-call/src/manager/voicemail.ts","extensions/voice-call/src/media-base64.ts","extensions/voice-call/src/media-stream.ts","extensions/voice-call/src/providers/shared/call-status.ts","extensions/voice-call/src/proxy-ip.ts","extensions/voice-call/src/realtime-agent-context.ts","extensions/voice-call/src/resolve-call-agent-id.ts","extensions/voice-call/src/response-model.ts","extensions/voice-call/src/runtime-state.ts","extensions/voice-call/src/runtime.ts","extensions/voice-call/src/telephony-tts.ts","extensions/voice-call/src/tts-provider-voice.ts","extensions/voice-call/src/tunnel.ts","extensions/voice-call/src/types.ts","extensions/voice-call/src/webhook-exposure.ts","extensions/voice-call/src/webhook.ts","extensions/voice-call/src/webhook/realtime-inbound-admission.ts","extensions/voice-call/src/webhook/stale-call-reaper.ts","extensions/voice-call/src/webhook/stream-disconnect-grace.ts","extensions/voice-call/src/webhook/tailscale.ts","extensions/voice-call/src/webhook/talk-event-metadata.ts"]},{"output":".setup/state-retention-api-y5WYfZsQ.mjs","sha256":"cfc69c145776d112998e5cde7e3b56075f34510be5bef4531c3dd619f457a5f1","facadeSource":null,"sources":["extensions/voice-call/state-retention-api.ts","packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":".setup/store-path-Bn3bLr8y.mjs","sha256":"dc1261a6452ae6aaa5a33c75b61ea9533dcdbb0ebbb9e8fd620947b5ba68ced5","facadeSource":null,"sources":["extensions/voice-call/src/store-path.ts","extensions/voice-call/src/utils.ts"]},{"output":".setup/telnyx-D5Xg2uLQ.mjs","sha256":"a85b16256dc9f0f92d1636c654eb9b7bd89758f836bfe31e84370be5fd50c8d6","facadeSource":"extensions/voice-call/src/providers/telnyx.ts","sources":["extensions/voice-call/src/providers/telnyx.ts"]},{"output":".setup/twilio-BfTwBLIK.mjs","sha256":"262ab8bcc595e7d082a6eee71d99728fbd4eb65a69e4773d9f2378141739713b","facadeSource":"extensions/voice-call/src/providers/twilio.ts","sources":["extensions/voice-call/src/providers/twilio.ts","extensions/voice-call/src/providers/twilio/api.ts"]},{"output":".setup/twilio-region-DVg9p6JJ.mjs","sha256":"a36a57185d5ebd7eb17c1cf1e2287917041752a0e82a124bfcca106741421408","facadeSource":null,"sources":["extensions/voice-call/src/providers/twilio-region.ts"]},{"output":".setup/voice-mapping-CvuJ1B50.mjs","sha256":"f33a9ea08d5b47b37068f86ac2ee18272153a2b88993c55b2427dda4b59e920f","facadeSource":null,"sources":["extensions/voice-call/src/voice-mapping.ts"]},{"output":".setup/webhook-replay-B0Eo3Ll5.mjs","sha256":"6bca54aa91e865ea21dbfb0cbabd5aef8aaacc590d176368664165c6afe163c9","facadeSource":null,"sources":["extensions/voice-call/src/webhook-replay.ts"]},{"output":"api.js","sha256":"52defeb38678cdd3504b7035eb0ac836d4ed388afdcf64a08dde425d26900a23","facadeSource":"extensions/voice-call/api.ts","sources":[]},{"output":"cli-metadata.js","sha256":"6297cf60fdb7c3bc39a5e1df54507a7cd9a5f3980cc5991f763571e3e6ce646d","facadeSource":"extensions/voice-call/cli-metadata.ts","sources":["extensions/voice-call/cli-metadata.ts"]},{"output":"cli-output-mode.js","sha256":"5e86fdf507ce50d45e2d16f6222fc7675bc8b05628861f60a90a9e3bd341ed4b","facadeSource":"extensions/voice-call/cli-output-mode.ts","sources":["extensions/voice-call/cli-output-mode.ts"]},{"output":"doctor-contract-api.js","sha256":"c240861961e94772a94299b9756c4b5a0b1e9517c0efd9c802307ad57f7d18e7","facadeSource":"extensions/voice-call/doctor-contract-api.ts","sources":["extensions/voice-call/doctor-contract-api.ts"]},{"output":"index.js","sha256":"ec994d7a85ab3661bccd12bc1aa6c5f59f202ec9b172fe37ee9c72f91163f7c1","facadeSource":"extensions/voice-call/index.ts","sources":["extensions/voice-call/index.ts","extensions/voice-call/src/command-service.ts","extensions/voice-call/src/gateway-continue-operation.ts","extensions/voice-call/src/tool-call-scope.ts","extensions/voice-call/src/tool-schema.ts"]},{"output":"runtime-entry.js","sha256":"1672978cd6e14bb2b09be9f716ea56e3ce49b9b32c8e261d31f0680ea8d26ebd","facadeSource":"extensions/voice-call/runtime-entry.ts","sources":[]},{"output":"setup-api.js","sha256":"2e10015955e9835a4b9f3cfe81d52f8d6ad49e36f3271f2bf96d57d0453d1873","facadeSource":"extensions/voice-call/setup-api.ts","sources":["extensions/voice-call/setup-api.ts","extensions/voice-call/src/config-migration.ts"]},{"output":"state-retention-api.js","sha256":"fca80a410dd68fe8f46cc0afecc1cfdc4db0319c61523d7f491307badad42658","facadeSource":"extensions/voice-call/state-retention-api.ts","sources":[]}],"unrenderedSources":["extensions/voice-call/api.ts","extensions/voice-call/runtime-entry.ts","extensions/voice-call/src/realtime-transcription.runtime.ts","extensions/voice-call/src/realtime-voice.runtime.ts"]}