@pagelines/sdk 1.0.767 → 1.0.769

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.
@@ -78,7 +78,7 @@ export declare function getDemoAgentByHandle(handle: string): Partial<{
78
78
  }[] | null | undefined;
79
79
  model?: string | null | undefined;
80
80
  gender?: "woman" | "man" | undefined;
81
- voiceKey?: "warm" | "natural" | "bright" | "gentle" | "grounded" | "relaxed" | "thoughtful" | "articulate" | "easygoing" | null | undefined;
81
+ voiceKey?: "lauren" | "amy" | "eve" | "korina" | "tamsin" | "jessica" | "jude" | "adam" | "evan" | "jon" | "joe" | "julius" | "chuck" | null | undefined;
82
82
  billingTier?: "essential" | "professional" | "business" | undefined;
83
83
  lastActiveAt?: string | null | undefined;
84
84
  lastMessageAt?: string | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","names":[],"sources":["../agent/voice/provider.ts"],"sourcesContent":["import type { VoiceSessionMint } from '@pagelines/core'\n\nexport interface VoiceLevelEvent {\n source: 'mic' | 'playback'\n /** Normalized 0..1 signal level. */\n level: number\n /** Speech-spectrum energies, low pitch first. */\n bands?: readonly number[]\n}\n\nexport interface VoiceSessionError {\n code: string\n message: string\n}\n\nexport interface VoiceProviderClient {\n connect: (handlers: {\n onDisconnected: () => void\n onError: (error: VoiceSessionError) => void\n }) => Promise<void>\n disconnect: () => Promise<void>\n sampleLevel: () => VoiceLevelEvent | undefined\n}\n\nexport type CreateVoiceProviderClient = (mint: VoiceSessionMint) => Promise<VoiceProviderClient>\n\n/** Provider selection is a closed union; each SDK remains in its lazy chunk. */\nexport const createVoiceProviderClient: CreateVoiceProviderClient = async (mint) => {\n switch (mint.provider) {\n case 'elevenlabs': {\n const { ElevenLabsVoiceProvider } = await import('./providers/elevenlabs/provider')\n return new ElevenLabsVoiceProvider(mint)\n }\n case 'livekit': {\n const { LiveKitVoiceProvider } = await import('./providers/livekit/provider')\n return new LiveKitVoiceProvider(mint)\n }\n }\n}\n\nexport const VOICE_SPECTRUM_BANDS = 9\n\n/** Log-spaced speech spectrum for transports that expose FFT bins. */\nexport function voiceSpectrum(frequencies: Uint8Array, sampleRate: number, fftSize: number, bandCount = VOICE_SPECTRUM_BANDS): readonly number[] {\n if (!Number.isFinite(sampleRate) || sampleRate <= 0 || !Number.isFinite(fftSize) || fftSize <= 0 || bandCount <= 0)\n return []\n\n const hzPerBin = sampleRate / fftSize\n const fromHz = 80\n const ratio = 4_000 / fromHz\n const bands: number[] = []\n for (let band = 0; band < bandCount; band++) {\n const start = Math.max(0, Math.ceil((fromHz * ratio ** (band / bandCount)) / hzPerBin))\n const end = Math.min(frequencies.length, Math.ceil((fromHz * ratio ** ((band + 1) / bandCount)) / hzPerBin))\n if (end <= start) {\n bands.push(0)\n continue\n }\n let squared = 0\n for (let index = start; index < end; index++)\n squared += (frequencies[index] / 255) ** 2\n bands.push(Math.sqrt(squared / (end - start)))\n }\n return bands\n}\n\n/** Equal-width bands for SDKs that already expose voice-range FFT bins. */\nexport function voiceRangeSpectrum(frequencies: Uint8Array, bandCount = VOICE_SPECTRUM_BANDS): readonly number[] {\n if (!frequencies.length || bandCount <= 0)\n return []\n return Array.from({ length: bandCount }, (_, band) => {\n const start = Math.floor((band * frequencies.length) / bandCount)\n const end = Math.max(start + 1, Math.floor(((band + 1) * frequencies.length) / bandCount))\n let squared = 0\n for (let index = start; index < Math.min(end, frequencies.length); index++)\n squared += (frequencies[index] / 255) ** 2\n return Math.sqrt(squared / Math.max(1, Math.min(end, frequencies.length) - start))\n })\n}\n"],"mappings":";;AA2BA,IAAa,4BAAuD,OAAO,MAAS;CAClF,QAAQ,EAAK,UAAb;EACE,KAAK,cAAc;GACjB,IAAM,EAAE,+BAA4B,MAAM,OAAO;GACjD,OAAO,IAAI,EAAwB,CAAI;EACzC;EACA,KAAK,WAAW;GACd,IAAM,EAAE,4BAAyB,MAAM,OAAO;GAC9C,OAAO,IAAI,EAAqB,CAAI;EACtC;CACF;AACF;AAKA,SAAgB,cAAc,GAAyB,GAAoB,GAAiB,IAAA,GAAqD;CAC/I,IAAI,CAAC,OAAO,SAAS,CAAU,KAAK,KAAc,KAAK,CAAC,OAAO,SAAS,CAAO,KAAK,KAAW,KAAK,KAAa,GAC/G,OAAO,CAAC;CAEV,IAAM,IAAW,IAAa,GAGxB,IAAkB,CAAC;CACzB,KAAK,IAAI,IAAO,GAAG,IAAO,GAAW,KAAQ;EAC3C,IAAM,IAAQ,KAAK,IAAI,GAAG,KAAK,KAAM,KAAS,OAAU,IAAO,KAAc,CAAQ,CAAC,GAChF,IAAM,KAAK,IAAI,EAAY,QAAQ,KAAK,KAAM,KAAS,QAAW,IAAO,KAAK,KAAc,CAAQ,CAAC;EAC3G,IAAI,KAAO,GAAO;GAChB,EAAM,KAAK,CAAC;GACZ;EACF;EACA,IAAI,IAAU;EACd,KAAK,IAAI,IAAQ,GAAO,IAAQ,GAAK,KACnC,MAAY,EAAY,KAAS,QAAQ;EAC3C,EAAM,KAAK,KAAK,KAAK,KAAW,IAAM,EAAM,CAAC;CAC/C;CACA,OAAO;AACT;AAGA,SAAgB,mBAAmB,GAAyB,IAAA,GAAqD;CAG/G,OAFI,CAAC,EAAY,UAAU,KAAa,IAC/B,CAAC,IACH,MAAM,KAAK,EAAE,QAAQ,EAAU,IAAI,GAAG,MAAS;EACpD,IAAM,IAAQ,KAAK,MAAO,IAAO,EAAY,SAAU,CAAS,GAC1D,IAAM,KAAK,IAAI,IAAQ,GAAG,KAAK,OAAQ,IAAO,KAAK,EAAY,SAAU,CAAS,CAAC,GACrF,IAAU;EACd,KAAK,IAAI,IAAQ,GAAO,IAAQ,KAAK,IAAI,GAAK,EAAY,MAAM,GAAG,KACjE,MAAY,EAAY,KAAS,QAAQ;EAC3C,OAAO,KAAK,KAAK,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAK,EAAY,MAAM,IAAI,CAAK,CAAC;CACnF,CAAC;AACH"}
1
+ {"version":3,"file":"provider.js","names":[],"sources":["../agent/voice/provider.ts"],"sourcesContent":["import type { VoiceSessionMint } from '@pagelines/core'\n\nexport interface VoiceLevelEvent {\n source: 'mic' | 'playback'\n /** Normalized 0..1 signal level. */\n level: number\n /** Speech-spectrum energies, low pitch first. */\n bands?: readonly number[]\n}\n\nexport interface VoiceSessionError {\n code: string\n message: string\n}\n\nexport interface VoiceProviderClient {\n connect: (handlers: {\n onDisconnected: () => void\n onError: (error: VoiceSessionError) => void\n }) => Promise<void>\n disconnect: () => Promise<void>\n sampleLevel: () => VoiceLevelEvent | undefined\n /**\n * Hand the provider text the caller typed during a live call, as though\n * they had said it — the assistant answers aloud and the turn lands in the\n * transcript through the normal provider path. Optional: a provider that\n * cannot inject text simply omits it and the surface hides the affordance.\n */\n sendUserMessage?: (text: string) => void\n}\n\nexport type CreateVoiceProviderClient = (mint: VoiceSessionMint) => Promise<VoiceProviderClient>\n\n/** Provider selection is a closed union; each SDK remains in its lazy chunk. */\nexport const createVoiceProviderClient: CreateVoiceProviderClient = async (mint) => {\n switch (mint.provider) {\n case 'elevenlabs': {\n const { ElevenLabsVoiceProvider } = await import('./providers/elevenlabs/provider')\n return new ElevenLabsVoiceProvider(mint)\n }\n case 'livekit': {\n const { LiveKitVoiceProvider } = await import('./providers/livekit/provider')\n return new LiveKitVoiceProvider(mint)\n }\n }\n}\n\nexport const VOICE_SPECTRUM_BANDS = 9\n\n/** Log-spaced speech spectrum for transports that expose FFT bins. */\nexport function voiceSpectrum(frequencies: Uint8Array, sampleRate: number, fftSize: number, bandCount = VOICE_SPECTRUM_BANDS): readonly number[] {\n if (!Number.isFinite(sampleRate) || sampleRate <= 0 || !Number.isFinite(fftSize) || fftSize <= 0 || bandCount <= 0)\n return []\n\n const hzPerBin = sampleRate / fftSize\n const fromHz = 80\n const ratio = 4_000 / fromHz\n const bands: number[] = []\n for (let band = 0; band < bandCount; band++) {\n const start = Math.max(0, Math.ceil((fromHz * ratio ** (band / bandCount)) / hzPerBin))\n const end = Math.min(frequencies.length, Math.ceil((fromHz * ratio ** ((band + 1) / bandCount)) / hzPerBin))\n if (end <= start) {\n bands.push(0)\n continue\n }\n let squared = 0\n for (let index = start; index < end; index++)\n squared += (frequencies[index] / 255) ** 2\n bands.push(Math.sqrt(squared / (end - start)))\n }\n return bands\n}\n\n/** Equal-width bands for SDKs that already expose voice-range FFT bins. */\nexport function voiceRangeSpectrum(frequencies: Uint8Array, bandCount = VOICE_SPECTRUM_BANDS): readonly number[] {\n if (!frequencies.length || bandCount <= 0)\n return []\n return Array.from({ length: bandCount }, (_, band) => {\n const start = Math.floor((band * frequencies.length) / bandCount)\n const end = Math.max(start + 1, Math.floor(((band + 1) * frequencies.length) / bandCount))\n let squared = 0\n for (let index = start; index < Math.min(end, frequencies.length); index++)\n squared += (frequencies[index] / 255) ** 2\n return Math.sqrt(squared / Math.max(1, Math.min(end, frequencies.length) - start))\n })\n}\n"],"mappings":";;AAkCA,IAAa,4BAAuD,OAAO,MAAS;CAClF,QAAQ,EAAK,UAAb;EACE,KAAK,cAAc;GACjB,IAAM,EAAE,+BAA4B,MAAM,OAAO;GACjD,OAAO,IAAI,EAAwB,CAAI;EACzC;EACA,KAAK,WAAW;GACd,IAAM,EAAE,4BAAyB,MAAM,OAAO;GAC9C,OAAO,IAAI,EAAqB,CAAI;EACtC;CACF;AACF;AAKA,SAAgB,cAAc,GAAyB,GAAoB,GAAiB,IAAA,GAAqD;CAC/I,IAAI,CAAC,OAAO,SAAS,CAAU,KAAK,KAAc,KAAK,CAAC,OAAO,SAAS,CAAO,KAAK,KAAW,KAAK,KAAa,GAC/G,OAAO,CAAC;CAEV,IAAM,IAAW,IAAa,GAGxB,IAAkB,CAAC;CACzB,KAAK,IAAI,IAAO,GAAG,IAAO,GAAW,KAAQ;EAC3C,IAAM,IAAQ,KAAK,IAAI,GAAG,KAAK,KAAM,KAAS,OAAU,IAAO,KAAc,CAAQ,CAAC,GAChF,IAAM,KAAK,IAAI,EAAY,QAAQ,KAAK,KAAM,KAAS,QAAW,IAAO,KAAK,KAAc,CAAQ,CAAC;EAC3G,IAAI,KAAO,GAAO;GAChB,EAAM,KAAK,CAAC;GACZ;EACF;EACA,IAAI,IAAU;EACd,KAAK,IAAI,IAAQ,GAAO,IAAQ,GAAK,KACnC,MAAY,EAAY,KAAS,QAAQ;EAC3C,EAAM,KAAK,KAAK,KAAK,KAAW,IAAM,EAAM,CAAC;CAC/C;CACA,OAAO;AACT;AAGA,SAAgB,mBAAmB,GAAyB,IAAA,GAAqD;CAG/G,OAFI,CAAC,EAAY,UAAU,KAAa,IAC/B,CAAC,IACH,MAAM,KAAK,EAAE,QAAQ,EAAU,IAAI,GAAG,MAAS;EACpD,IAAM,IAAQ,KAAK,MAAO,IAAO,EAAY,SAAU,CAAS,GAC1D,IAAM,KAAK,IAAI,IAAQ,GAAG,KAAK,OAAQ,IAAO,KAAK,EAAY,SAAU,CAAS,CAAC,GACrF,IAAU;EACd,KAAK,IAAI,IAAQ,GAAO,IAAQ,KAAK,IAAI,GAAK,EAAY,MAAM,GAAG,KACjE,MAAY,EAAY,KAAS,QAAQ;EAC3C,OAAO,KAAK,KAAK,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAK,EAAY,MAAM,IAAI,CAAK,CAAC;CACnF,CAAC;AACH"}
package/dist/provider2.js CHANGED
@@ -16427,6 +16427,9 @@ var ElevenLabsVoiceProvider = class {
16427
16427
  throw Object.assign(t, { code: n });
16428
16428
  }
16429
16429
  }
16430
+ sendUserMessage(e) {
16431
+ this.conversation?.sendUserMessage(e);
16432
+ }
16430
16433
  async disconnect() {
16431
16434
  this.closing = !0;
16432
16435
  let e = this.conversation;