From eb4a69f09f8480515839580012f7b0a44ee5ea2d Mon Sep 17 00:00:00 2001 From: sahilsuman933 <34382211+sahilsuman933@users.noreply.github.com> Date: Mon, 4 May 2026 20:08:45 +0000 Subject: [PATCH] chore: update dependencies and bump version to v2.6.0 - Update dependencies to latest versions - Regenerate API definitions - Bump version to v2.6.0 --- api.ts | 8682 ++++++++++++++++++++++++++++++++++++--------- package-lock.json | 1802 +++++----- package.json | 4 +- 3 files changed, 8013 insertions(+), 2475 deletions(-) diff --git a/api.ts b/api.ts index e5c3f47a9..94120148f 100644 --- a/api.ts +++ b/api.ts @@ -11,7 +11,7 @@ */ export interface FallbackTranscriberPlan { - transcribers: ( + transcribers?: ( | FallbackAssemblyAITranscriber | FallbackAzureSpeechTranscriber | FallbackCustomTranscriber @@ -23,6 +23,7 @@ export interface FallbackTranscriberPlan { | FallbackSpeechmaticsTranscriber | FallbackOpenAITranscriber | FallbackCartesiaTranscriber + | FallbackSonioxTranscriber )[]; } @@ -30,7 +31,7 @@ export interface AssemblyAITranscriber { /** This is the transcription provider that will be used. */ provider: "assembly-ai"; /** This is the language that will be set for the transcription. */ - language?: "en"; + language?: "multi" | "en"; /** * Transcripts below this confidence threshold will be discarded. * @@ -90,6 +91,14 @@ export interface AssemblyAITranscriber { * @example true */ vadAssistedEndpointingEnabled?: boolean; + /** + * This is the speech model used for the streaming session. + * Note: Keyterms prompting is not supported with multilingual streaming. + * @default 'universal-streaming-english' + */ + speechModel?: + | "universal-streaming-english" + | "universal-streaming-multilingual"; /** The WebSocket URL that the transcriber connects to. */ realtimeUrl?: string; /** Add up to 2500 characters of custom vocabulary. */ @@ -107,7 +116,7 @@ export interface AssemblyAITranscriber { * Set to `true` to not receive partial transcripts. Defaults to `false`. */ disablePartialTranscripts?: boolean; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -273,7 +282,7 @@ export interface AzureSpeechTranscriber { * @max 70000 */ segmentationMaximumTimeMs?: number; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -466,7 +475,7 @@ export interface CartesiaTranscriber { | "za" | "zh" | "zu"; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -524,6 +533,8 @@ export interface Server { * @example false */ staticIpAddressesEnabled?: boolean; + /** This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. */ + encryptedPaths?: string[]; /** This is where the request will be sent. */ url?: string; /** @@ -586,7 +597,7 @@ export interface CustomTranscriber { * ``` */ server: Server; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -628,14 +639,18 @@ export interface DeepgramTranscriber { | "base-video" | "whisper" | "flux-general-en" + | "flux-general-multi" | string; /** This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview */ language?: | "ar" | "az" | "ba" + | "be" | "bg" + | "bn" | "br" + | "bs" | "ca" | "cs" | "da" @@ -656,6 +671,7 @@ export interface DeepgramTranscriber { | "es-LATAM" | "et" | "eu" + | "fa" | "fi" | "fr" | "fr-CA" @@ -664,6 +680,7 @@ export interface DeepgramTranscriber { | "he" | "hi" | "hi-Latn" + | "hr" | "hu" | "id" | "is" @@ -677,6 +694,7 @@ export interface DeepgramTranscriber { | "lt" | "lv" | "mk" + | "mr" | "ms" | "multi" | "nl" @@ -698,8 +716,10 @@ export interface DeepgramTranscriber { | "sv-SE" | "ta" | "taq" + | "te" | "th" | "th-TH" + | "tl" | "tr" | "tt" | "uk" @@ -734,6 +754,29 @@ export interface DeepgramTranscriber { * @example false */ numerals?: boolean; + /** + * If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***". + * + * @default false + * @example false + */ + profanityFilter?: boolean; + /** + * Enables redaction of sensitive information from transcripts. + * + * Options include: + * - "pci": Redacts credit card numbers, expiration dates, and CVV. + * - "pii": Redacts personally identifiable information (names, locations, identifying numbers, etc.). + * - "phi": Redacts protected health information (medical conditions, drugs, injuries, etc.). + * - "numbers": Redacts numerical and identifying entities (dates, account numbers, SSNs, etc.). + * + * Multiple values can be provided to redact different categories simultaneously. + * Redacted content is replaced with entity labels like [CREDIT_CARD_1], [SSN_1], etc. + * + * See https://developers.deepgram.com/docs/redaction for details. + * @example ["pci","phi"] + */ + redaction?: "pci" | "pii" | "phi" | "numbers"; /** * Transcripts below this confidence threshold will be discarded. * @@ -743,13 +786,6 @@ export interface DeepgramTranscriber { * @example 0.4 */ confidenceThreshold?: number; - /** - * Eager end-of-turn confidence required to fire a eager end-of-turn event. Setting a value here will enable EagerEndOfTurn and SpeechResumed events. It is disabled by default. Only used with Flux models. - * @min 0 - * @max 1 - * @example 0.3 - */ - eagerEotThreshold?: number; /** * End-of-turn confidence required to finish a turn. Only used with Flux models. * @@ -768,6 +804,13 @@ export interface DeepgramTranscriber { * @example 5000 */ eotTimeoutMs?: number; + /** + * Language hints to bias Flux Multilingual (`flux-general-multi`) toward specific languages. + * Provide BCP-47 language codes (e.g. "en", "es", "fr"). Multiple hints can be given for + * multilingual or code-switching scenarios. Omit for auto-detection. Only used with `flux-general-multi`. + * @example ["en","es"] + */ + languages?: string[]; /** These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here. */ keywords?: string[]; /** Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%. */ @@ -785,7 +828,7 @@ export interface DeepgramTranscriber { * @max 500 */ endpointing?: number; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -793,7 +836,8 @@ export interface ElevenLabsTranscriber { /** This is the transcription provider that will be used. */ provider: "11labs"; /** This is the model that will be used for the transcription. */ - model?: "scribe_v1"; + model?: "scribe_v1" | "scribe_v2" | "scribe_v2_realtime"; + /** This is the language that will be used for the transcription. */ language?: | "aa" | "ab" @@ -980,7 +1024,35 @@ export interface ElevenLabsTranscriber { | "za" | "zh" | "zu"; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** + * This is the number of seconds of silence before VAD commits (0.3-3.0). + * @min 0.3 + * @max 3 + * @example 1.5 + */ + silenceThresholdSeconds?: number; + /** + * This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive). + * @min 0.1 + * @max 0.9 + * @example 0.4 + */ + confidenceThreshold?: number; + /** + * This is the minimum speech duration for VAD (50-2000ms). + * @min 50 + * @max 2000 + * @example 100 + */ + minSpeechDurationMs?: number; + /** + * This is the minimum silence duration for VAD (50-2000ms). + * @min 50 + * @max 2000 + * @example 100 + */ + minSilenceDurationMs?: number; + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -1265,7 +1337,212 @@ export interface GladiaTranscriber { * @example false */ receivePartialTranscripts?: boolean; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ + fallbackPlan?: FallbackTranscriberPlan; +} + +export interface SonioxTranscriber { + provider: "soniox"; + /** The Soniox model to use for transcription. */ + model?: "stt-rt-v4"; + /** The language for transcription. Uses ISO 639-1 codes. Soniox supports 60+ languages with a single universal model. */ + language?: + | "aa" + | "ab" + | "ae" + | "af" + | "ak" + | "am" + | "an" + | "ar" + | "as" + | "av" + | "ay" + | "az" + | "ba" + | "be" + | "bg" + | "bh" + | "bi" + | "bm" + | "bn" + | "bo" + | "br" + | "bs" + | "ca" + | "ce" + | "ch" + | "co" + | "cr" + | "cs" + | "cu" + | "cv" + | "cy" + | "da" + | "de" + | "dv" + | "dz" + | "ee" + | "el" + | "en" + | "eo" + | "es" + | "et" + | "eu" + | "fa" + | "ff" + | "fi" + | "fj" + | "fo" + | "fr" + | "fy" + | "ga" + | "gd" + | "gl" + | "gn" + | "gu" + | "gv" + | "ha" + | "he" + | "hi" + | "ho" + | "hr" + | "ht" + | "hu" + | "hy" + | "hz" + | "ia" + | "id" + | "ie" + | "ig" + | "ii" + | "ik" + | "io" + | "is" + | "it" + | "iu" + | "ja" + | "jv" + | "ka" + | "kg" + | "ki" + | "kj" + | "kk" + | "kl" + | "km" + | "kn" + | "ko" + | "kr" + | "ks" + | "ku" + | "kv" + | "kw" + | "ky" + | "la" + | "lb" + | "lg" + | "li" + | "ln" + | "lo" + | "lt" + | "lu" + | "lv" + | "mg" + | "mh" + | "mi" + | "mk" + | "ml" + | "mn" + | "mr" + | "ms" + | "mt" + | "my" + | "na" + | "nb" + | "nd" + | "ne" + | "ng" + | "nl" + | "nn" + | "no" + | "nr" + | "nv" + | "ny" + | "oc" + | "oj" + | "om" + | "or" + | "os" + | "pa" + | "pi" + | "pl" + | "ps" + | "pt" + | "qu" + | "rm" + | "rn" + | "ro" + | "ru" + | "rw" + | "sa" + | "sc" + | "sd" + | "se" + | "sg" + | "si" + | "sk" + | "sl" + | "sm" + | "sn" + | "so" + | "sq" + | "sr" + | "ss" + | "st" + | "su" + | "sv" + | "sw" + | "ta" + | "te" + | "tg" + | "th" + | "ti" + | "tk" + | "tl" + | "tn" + | "to" + | "tr" + | "ts" + | "tt" + | "tw" + | "ty" + | "ug" + | "uk" + | "ur" + | "uz" + | "ve" + | "vi" + | "vo" + | "wa" + | "wo" + | "xh" + | "yi" + | "yue" + | "yo" + | "za" + | "zh" + | "zu"; + /** When enabled, the model strongly prefers transcription in the language specified in the language field. When disabled, the model can detect and transcribe any of 60+ supported languages. Defaults to true. */ + languageHintsStrict?: boolean; + /** + * Maximum delay in milliseconds between when the speaker stops and when the endpoint is detected. Lower values mean faster turn-taking but more false endpoints. Range: 500-3000. Default: 500. + * @min 500 + * @max 3000 + */ + maxEndpointDelayMs?: number; + /** Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific terminology. Maps to Soniox context.terms. */ + customVocabulary?: string[]; + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -1291,6 +1568,7 @@ export interface SpeechmaticsTranscriber { language?: | "auto" | "ar" + | "ar_en" | "ba" | "eu" | "be" @@ -1322,8 +1600,10 @@ export interface SpeechmaticsTranscriber { | "lv" | "lt" | "ms" + | "en_ms" | "mt" | "cmn" + | "cmn_en" | "mr" | "mn" | "no" @@ -1335,9 +1615,12 @@ export interface SpeechmaticsTranscriber { | "sk" | "sl" | "es" + | "en_es" | "sw" | "sv" + | "tl" | "ta" + | "en_ta" | "th" | "tr" | "uk" @@ -1369,29 +1652,6 @@ export interface SpeechmaticsTranscriber { * @example true */ enableDiarization?: boolean; - /** - * This sets the maximum number of speakers to detect when diarization is enabled. Only used when enableDiarization is true. - * - * @default 2 - * @min 2 - * @max 50 - * @default 2 - * @example 4 - */ - maxSpeakers?: number; - /** - * Provides friendly speaker labels that map to diarization indices (Speaker 1 -> labels[0]). - * @example ["Agent","Customer"] - */ - speakerLabels?: string[]; - /** - * This enables partial transcripts during speech recognition. When false, only final transcripts are returned. - * - * @default true - * @default true - * @example false - */ - enablePartials?: boolean; /** * This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. * @@ -1405,37 +1665,13 @@ export interface SpeechmaticsTranscriber { /** @example [{"content":"Speechmatics","soundsLike":["speech mattix"]}] */ customVocabulary: SpeechmaticsCustomVocabularyItem[]; /** - * This controls how numbers are formatted in the transcription output. + * This controls how numbers, dates, currencies, and other entities are formatted in the transcription output. * * @default 'written' * @default "written" * @example "spoken" */ numeralStyle?: "written" | "spoken"; - /** - * This enables detection of non-speech audio events like music, applause, and laughter. - * - * @default false - * @default false - * @example true - */ - enableEntities?: boolean; - /** - * This enables automatic punctuation in the transcription output. - * - * @default true - * @default true - * @example false - */ - enablePunctuation?: boolean; - /** - * This enables automatic capitalization in the transcription output. - * - * @default true - * @default true - * @example false - */ - enableCapitalization?: boolean; /** * This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. * @@ -1449,6 +1685,8 @@ export interface SpeechmaticsTranscriber { /** * This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. * + * This is only supported for the English language transcriber. + * * @default false * @default false * @example true @@ -1464,7 +1702,7 @@ export interface SpeechmaticsTranscriber { * @example 0.2 */ minimumSpeechDuration?: number; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -1575,7 +1813,7 @@ export interface TalkscriberTranscriber { | "jw" | "su" | "yue"; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -1584,6 +1822,7 @@ export interface GoogleTranscriber { provider: "google"; /** This is the model that will be used for the transcription. */ model?: + | "gemini-3-flash-preview" | "gemini-2.5-pro" | "gemini-2.5-flash" | "gemini-2.5-flash-lite" @@ -1639,7 +1878,7 @@ export interface GoogleTranscriber { | "Turkish" | "Ukrainian" | "Vietnamese"; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -1707,7 +1946,7 @@ export interface OpenAITranscriber { | "ur" | "vi" | "cy"; - /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + /** This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. */ fallbackPlan?: FallbackTranscriberPlan; } @@ -1715,7 +1954,7 @@ export interface FallbackAssemblyAITranscriber { /** This is the transcription provider that will be used. */ provider: "assembly-ai"; /** This is the language that will be set for the transcription. */ - language?: "en"; + language?: "multi" | "en"; /** * Transcripts below this confidence threshold will be discarded. * @@ -1775,6 +2014,14 @@ export interface FallbackAssemblyAITranscriber { * @example true */ vadAssistedEndpointingEnabled?: boolean; + /** + * This is the speech model used for the streaming session. + * Note: Keyterms prompting is not supported with multilingual streaming. + * @default 'universal-streaming-english' + */ + speechModel?: + | "universal-streaming-english" + | "universal-streaming-multilingual"; /** The WebSocket URL that the transcriber connects to. */ realtimeUrl?: string; /** Add up to 2500 characters of custom vocabulary. */ @@ -2233,14 +2480,18 @@ export interface FallbackDeepgramTranscriber { | "base-video" | "whisper" | "flux-general-en" + | "flux-general-multi" | string; /** This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview */ language?: | "ar" | "az" | "ba" + | "be" | "bg" + | "bn" | "br" + | "bs" | "ca" | "cs" | "da" @@ -2261,6 +2512,7 @@ export interface FallbackDeepgramTranscriber { | "es-LATAM" | "et" | "eu" + | "fa" | "fi" | "fr" | "fr-CA" @@ -2269,6 +2521,7 @@ export interface FallbackDeepgramTranscriber { | "he" | "hi" | "hi-Latn" + | "hr" | "hu" | "id" | "is" @@ -2282,6 +2535,7 @@ export interface FallbackDeepgramTranscriber { | "lt" | "lv" | "mk" + | "mr" | "ms" | "multi" | "nl" @@ -2303,8 +2557,10 @@ export interface FallbackDeepgramTranscriber { | "sv-SE" | "ta" | "taq" + | "te" | "th" | "th-TH" + | "tl" | "tr" | "tt" | "uk" @@ -2339,6 +2595,29 @@ export interface FallbackDeepgramTranscriber { * @example false */ numerals?: boolean; + /** + * If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***". + * + * @default false + * @example false + */ + profanityFilter?: boolean; + /** + * Enables redaction of sensitive information from transcripts. + * + * Options include: + * - "pci": Redacts credit card numbers, expiration dates, and CVV. + * - "pii": Redacts personally identifiable information (names, locations, identifying numbers, etc.). + * - "phi": Redacts protected health information (medical conditions, drugs, injuries, etc.). + * - "numbers": Redacts numerical and identifying entities (dates, account numbers, SSNs, etc.). + * + * Multiple values can be provided to redact different categories simultaneously. + * Redacted content is replaced with entity labels like [CREDIT_CARD_1], [SSN_1], etc. + * + * See https://developers.deepgram.com/docs/redaction for details. + * @example ["pci","phi"] + */ + redaction?: "pci" | "pii" | "phi" | "numbers"; /** * Transcripts below this confidence threshold will be discarded. * @@ -2348,13 +2627,6 @@ export interface FallbackDeepgramTranscriber { * @example 0.4 */ confidenceThreshold?: number; - /** - * Eager end-of-turn confidence required to fire a eager end-of-turn event. Setting a value here will enable EagerEndOfTurn and SpeechResumed events. It is disabled by default. Only used with Flux models. - * @min 0 - * @max 1 - * @example 0.3 - */ - eagerEotThreshold?: number; /** * End-of-turn confidence required to finish a turn. Only used with Flux models. * @@ -2373,6 +2645,13 @@ export interface FallbackDeepgramTranscriber { * @example 5000 */ eotTimeoutMs?: number; + /** + * Language hints to bias Flux Multilingual (`flux-general-multi`) toward specific languages. + * Provide BCP-47 language codes (e.g. "en", "es", "fr"). Multiple hints can be given for + * multilingual or code-switching scenarios. Omit for auto-detection. Only used with `flux-general-multi`. + * @example ["en","es"] + */ + languages?: string[]; /** These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here. */ keywords?: string[]; /** Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%. */ @@ -2396,7 +2675,8 @@ export interface FallbackElevenLabsTranscriber { /** This is the transcription provider that will be used. */ provider: "11labs"; /** This is the model that will be used for the transcription. */ - model?: "scribe_v1"; + model?: "scribe_v1" | "scribe_v2" | "scribe_v2_realtime"; + /** This is the language that will be used for the transcription. */ language?: | "aa" | "ab" @@ -2583,6 +2863,34 @@ export interface FallbackElevenLabsTranscriber { | "za" | "zh" | "zu"; + /** + * This is the number of seconds of silence before VAD commits (0.3-3.0). + * @min 0.3 + * @max 3 + * @example 1.5 + */ + silenceThresholdSeconds?: number; + /** + * This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive). + * @min 0.1 + * @max 0.9 + * @example 0.4 + */ + confidenceThreshold?: number; + /** + * This is the minimum speech duration for VAD (50-2000ms). + * @min 50 + * @max 2000 + * @example 100 + */ + minSpeechDurationMs?: number; + /** + * This is the minimum silence duration for VAD (50-2000ms). + * @min 50 + * @max 2000 + * @example 100 + */ + minSilenceDurationMs?: number; } export interface GladiaVocabularyItemDTO { @@ -2871,6 +3179,209 @@ export interface FallbackGladiaTranscriber { receivePartialTranscripts?: boolean; } +export interface FallbackSonioxTranscriber { + provider: "soniox"; + /** The Soniox model to use for transcription. */ + model?: "stt-rt-v4"; + /** The language for transcription. Uses ISO 639-1 codes. Soniox supports 60+ languages with a single universal model. */ + language?: + | "aa" + | "ab" + | "ae" + | "af" + | "ak" + | "am" + | "an" + | "ar" + | "as" + | "av" + | "ay" + | "az" + | "ba" + | "be" + | "bg" + | "bh" + | "bi" + | "bm" + | "bn" + | "bo" + | "br" + | "bs" + | "ca" + | "ce" + | "ch" + | "co" + | "cr" + | "cs" + | "cu" + | "cv" + | "cy" + | "da" + | "de" + | "dv" + | "dz" + | "ee" + | "el" + | "en" + | "eo" + | "es" + | "et" + | "eu" + | "fa" + | "ff" + | "fi" + | "fj" + | "fo" + | "fr" + | "fy" + | "ga" + | "gd" + | "gl" + | "gn" + | "gu" + | "gv" + | "ha" + | "he" + | "hi" + | "ho" + | "hr" + | "ht" + | "hu" + | "hy" + | "hz" + | "ia" + | "id" + | "ie" + | "ig" + | "ii" + | "ik" + | "io" + | "is" + | "it" + | "iu" + | "ja" + | "jv" + | "ka" + | "kg" + | "ki" + | "kj" + | "kk" + | "kl" + | "km" + | "kn" + | "ko" + | "kr" + | "ks" + | "ku" + | "kv" + | "kw" + | "ky" + | "la" + | "lb" + | "lg" + | "li" + | "ln" + | "lo" + | "lt" + | "lu" + | "lv" + | "mg" + | "mh" + | "mi" + | "mk" + | "ml" + | "mn" + | "mr" + | "ms" + | "mt" + | "my" + | "na" + | "nb" + | "nd" + | "ne" + | "ng" + | "nl" + | "nn" + | "no" + | "nr" + | "nv" + | "ny" + | "oc" + | "oj" + | "om" + | "or" + | "os" + | "pa" + | "pi" + | "pl" + | "ps" + | "pt" + | "qu" + | "rm" + | "rn" + | "ro" + | "ru" + | "rw" + | "sa" + | "sc" + | "sd" + | "se" + | "sg" + | "si" + | "sk" + | "sl" + | "sm" + | "sn" + | "so" + | "sq" + | "sr" + | "ss" + | "st" + | "su" + | "sv" + | "sw" + | "ta" + | "te" + | "tg" + | "th" + | "ti" + | "tk" + | "tl" + | "tn" + | "to" + | "tr" + | "ts" + | "tt" + | "tw" + | "ty" + | "ug" + | "uk" + | "ur" + | "uz" + | "ve" + | "vi" + | "vo" + | "wa" + | "wo" + | "xh" + | "yi" + | "yue" + | "yo" + | "za" + | "zh" + | "zu"; + /** When enabled, the model strongly prefers transcription in the language specified in the language field. When disabled, the model can detect and transcribe any of 60+ supported languages. Defaults to true. */ + languageHintsStrict?: boolean; + /** + * Maximum delay in milliseconds between when the speaker stops and when the endpoint is detected. Lower values mean faster turn-taking but more false endpoints. Range: 500-3000. Default: 500. + * @min 500 + * @max 3000 + */ + maxEndpointDelayMs?: number; + /** Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific terminology. Maps to Soniox context.terms. */ + customVocabulary?: string[]; +} + export interface FallbackSpeechmaticsTranscriber { /** This is the transcription provider that will be used. */ provider: "speechmatics"; @@ -2879,6 +3390,7 @@ export interface FallbackSpeechmaticsTranscriber { language?: | "auto" | "ar" + | "ar_en" | "ba" | "eu" | "be" @@ -2910,8 +3422,10 @@ export interface FallbackSpeechmaticsTranscriber { | "lv" | "lt" | "ms" + | "en_ms" | "mt" | "cmn" + | "cmn_en" | "mr" | "mn" | "no" @@ -2923,9 +3437,12 @@ export interface FallbackSpeechmaticsTranscriber { | "sk" | "sl" | "es" + | "en_es" | "sw" | "sv" + | "tl" | "ta" + | "en_ta" | "th" | "tr" | "uk" @@ -2957,29 +3474,6 @@ export interface FallbackSpeechmaticsTranscriber { * @example true */ enableDiarization?: boolean; - /** - * This sets the maximum number of speakers to detect when diarization is enabled. Only used when enableDiarization is true. - * - * @default 2 - * @min 2 - * @max 50 - * @default 2 - * @example 4 - */ - maxSpeakers?: number; - /** - * Provides friendly speaker labels that map to diarization indices (Speaker 1 -> labels[0]). - * @example ["Agent","Customer"] - */ - speakerLabels?: string[]; - /** - * This enables partial transcripts during speech recognition. When false, only final transcripts are returned. - * - * @default true - * @default true - * @example false - */ - enablePartials?: boolean; /** * This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. * @@ -2993,37 +3487,13 @@ export interface FallbackSpeechmaticsTranscriber { /** @example [{"content":"Speechmatics","soundsLike":["speech mattix"]}] */ customVocabulary: SpeechmaticsCustomVocabularyItem[]; /** - * This controls how numbers are formatted in the transcription output. + * This controls how numbers, dates, currencies, and other entities are formatted in the transcription output. * * @default 'written' * @default "written" * @example "spoken" */ numeralStyle?: "written" | "spoken"; - /** - * This enables detection of non-speech audio events like music, applause, and laughter. - * - * @default false - * @default false - * @example true - */ - enableEntities?: boolean; - /** - * This enables automatic punctuation in the transcription output. - * - * @default true - * @default true - * @example false - */ - enablePunctuation?: boolean; - /** - * This enables automatic capitalization in the transcription output. - * - * @default true - * @default true - * @example false - */ - enableCapitalization?: boolean; /** * This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. * @@ -3037,6 +3507,8 @@ export interface FallbackSpeechmaticsTranscriber { /** * This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. * + * This is only supported for the English language transcriber. + * * @default false * @default false * @example true @@ -3168,6 +3640,7 @@ export interface FallbackGoogleTranscriber { provider: "google"; /** This is the model that will be used for the transcription. */ model?: + | "gemini-3-flash-preview" | "gemini-2.5-pro" | "gemini-2.5-flash" | "gemini-2.5-flash-lite" @@ -3293,6 +3766,27 @@ export interface FallbackOpenAITranscriber { export interface LangfuseObservabilityPlan { provider: "langfuse"; + /** The name of a Langfuse prompt to link generations to. This enables tracking which prompt version was used for each generation. https://langfuse.com/docs/prompt-management/features/link-to-traces */ + promptName?: string; + /** + * The version number of the Langfuse prompt to link generations to. Used together with promptName to identify the exact prompt version. https://langfuse.com/docs/prompt-management/features/link-to-traces + * @min 1 + */ + promptVersion?: number; + /** + * Custom name for the Langfuse trace. Supports Liquid templates. + * + * Available variables: + * - {{ call.id }} - Call UUID + * - {{ call.type }} - 'inboundPhoneCall', 'outboundPhoneCall', 'webCall' + * - {{ assistant.name }} - Assistant name + * - {{ assistant.id }} - Assistant ID + * + * Example: "{{ assistant.name }} - {{ call.type }}" + * + * Defaults to call ID if not provided. + */ + traceName?: string; /** This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags */ tags: string[]; /** @@ -3799,6 +4293,11 @@ export interface CreateDtmfToolDTO { )[]; /** The type of tool. "dtmf" for DTMF tool. */ type: "dtmf"; + /** + * This enables sending DTMF tones via SIP INFO messages instead of RFC 2833 (RTP events). When enabled, DTMF digits will be sent using the SIP INFO method, which can be more reliable in some network configurations. Only relevant when using the `vapi.sip` transport. + * @default false + */ + sipInfoDtmfEnabled?: boolean; /** * This is the plan to reject a tool call based on the conversation state. * @@ -4097,18 +4596,10 @@ export interface JsonSchema { * For `object`, you can define the properties of the object using the `properties` property. */ type: "string" | "number" | "integer" | "boolean" | "array" | "object"; - /** - * This is required if the type is "array". This is the schema of the items in the array. - * - * This is of type JsonSchema. However, Swagger doesn't support circular references. - */ - items?: object; - /** - * This is required if the type is "object". This specifies the properties of the object. - * - * This is a map of string to JsonSchema. However, Swagger doesn't support circular references. - */ - properties?: object; + /** This is required if the type is "array". This is the schema of the items in the array. This is a recursive reference to JsonSchema. */ + items?: JsonSchema; + /** This is required if the type is "object". This specifies the properties of the object. This is a map of property names to JsonSchema objects. */ + properties?: Record; /** This is the description to help the model understand what it needs to output. */ description?: string; /** @@ -4144,6 +4635,163 @@ export interface JsonSchema { title?: string; } +export interface VariableExtractionAlias { + /** + * This is the key of the variable. + * + * This variable will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call. + * + * Rules: + * - Must start with a letter (a-z, A-Z). + * - Subsequent characters can be letters, numbers, or underscores. + * - Minimum length of 1 and maximum length of 40. + * @minLength 1 + * @maxLength 40 + * @pattern /^[a-zA-Z][a-zA-Z0-9_]*$/ + */ + key: string; + /** + * This is the value of the variable. + * + * This can reference existing variables, use filters, and perform transformations. + * + * Examples: "{{name}}", "{{customer.email}}", "Hello {{name | upcase}}" + * @maxLength 10000 + */ + value: string; +} + +export interface VariableExtractionPlan { + /** + * This is the schema to extract. + * + * Examples: + * 1. To extract object properties, you can use the following schema: + * ```json + * { + * "type": "object", + * "properties": { + * "name": { + * "type": "string" + * }, + * "age": { + * "type": "number" + * } + * } + * } + * ``` + * + * These will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables. + * + * 2. To extract nested properties, you can use the following schema: + * ```json + * { + * "type": "object", + * "properties": { + * "name": { + * "type": "object", + * "properties": { + * "first": { + * "type": "string" + * }, + * "last": { + * "type": "string" + * } + * } + * } + * } + * } + * ``` + * + * These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible. + * + * 3. To extract array items, you can use the following schema: + * ```json + * { + * "type": "array", + * "title": "zipCodes", + * "items": { + * "type": "string" + * } + * } + * ``` + * + * This will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`. + * + * 4. To extract array of objects, you can use the following schema: + * + * ```json + * { + * "type": "array", + * "name": "people", + * "items": { + * "type": "object", + * "properties": { + * "name": { + * "type": "string" + * }, + * "age": { + * "type": "number" + * }, + * "zipCodes": { + * "type": "array", + * "items": { + * "type": "string" + * } + * } + * } + * } + * } + * ``` + * + * This will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`. + */ + schema?: JsonSchema; + /** + * These are additional variables to create. + * + * These will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call. + * + * Example: + * ```json + * { + * "aliases": [ + * { + * "key": "customerName", + * "value": "{{name}}" + * }, + * { + * "key": "fullName", + * "value": "{{firstName}} {{lastName}}" + * }, + * { + * "key": "greeting", + * "value": "Hello {{name}}, welcome to {{company}}!" + * }, + * { + * "key": "customerCity", + * "value": "{{addresses[0].city}}" + * }, + * { + * "key": "something", + * "value": "{{any liquid}}" + * } + * ] + * } + * ``` + * + * This will create variables `customerName`, `fullName`, `greeting`, `customerCity`, and `something`. To access these variables, you can reference them as `{{customerName}}`, `{{fullName}}`, `{{greeting}}`, `{{customerCity}}`, and `{{something}}`. + */ + aliases?: VariableExtractionAlias[]; +} + +export interface ToolParameter { + /** This is the key of the parameter. */ + key: string; + /** The value of the parameter. Any JSON type. String values support Liquid templates. */ + value: string | number | boolean | object | any[]; +} + export interface OpenAIFunctionParameters { /** This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties. */ type: "object"; @@ -4222,6 +4870,10 @@ export interface CreateFunctionToolDTO { * - Webhook expects a response with tool call result. */ server?: Server; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; /** This is the function definition of the tool. */ function?: OpenAIFunction; /** @@ -5020,6 +5672,76 @@ export interface StartSpeakingPlan { transcriptionEndpointingPlan?: TranscriptionEndpointingPlan; } +export interface SmartDenoisingPlan { + /** + * Whether smart denoising using Krisp is enabled. + * @default true + */ + enabled?: boolean; +} + +export interface FourierDenoisingPlan { + /** + * Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected. + * @default false + */ + enabled?: boolean; + /** + * Whether automatic media detection is enabled. When enabled, the filter will automatically + * detect consistent background TV/music/radio and switch to more aggressive filtering settings. + * Only applies when enabled is true. + * @default true + * @example true + */ + mediaDetectionEnabled?: boolean; + /** + * Static threshold in dB used as fallback when no baseline is established. + * @min -80 + * @max 0 + * @default -35 + * @example -35 + */ + staticThreshold?: number; + /** + * How far below the rolling baseline to filter audio, in dB. + * Lower values (e.g., -10) are more aggressive, higher values (e.g., -20) are more conservative. + * @min -30 + * @max -5 + * @default -15 + * @example -15 + */ + baselineOffsetDb?: number; + /** + * Rolling window size in milliseconds for calculating the audio baseline. + * Larger windows adapt more slowly but are more stable. + * @min 1000 + * @max 30000 + * @default 3000 + * @example 3000 + */ + windowSizeMs?: number; + /** + * Percentile to use for baseline calculation (1-99). + * Higher percentiles (e.g., 85) focus on louder speech, lower percentiles (e.g., 50) include quieter speech. + * @min 1 + * @max 99 + * @default 85 + * @example 85 + */ + baselinePercentile?: number; +} + +export interface BackgroundSpeechDenoisingPlan { + /** Whether smart denoising using Krisp is enabled. */ + smartDenoisingPlan?: SmartDenoisingPlan; + /** + * Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected. + * + * This can be combined with smart denoising, and will be run afterwards. + */ + fourierDenoisingPlan?: FourierDenoisingPlan; +} + export interface TransferAssistant { /** * Optional name for the transfer assistant @@ -5042,6 +5764,7 @@ export interface TransferAssistant { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -5061,7 +5784,8 @@ export interface TransferAssistant { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** * This is the first message that the transfer assistant will say. * This can also be a URL to a custom audio file. @@ -5107,6 +5831,20 @@ export interface TransferAssistant { * @example 120 */ maxDurationSeconds?: number; + /** + * This enables filtering of noise and background speech while the user is talking. + * + * Features: + * - Smart denoising using Krisp + * - Fourier denoising + * + * Smart denoising can be combined with or used independently of Fourier denoising. + * + * Order of precedence: + * - Smart denoising + * - Fourier denoising + */ + backgroundSpeechDenoisingPlan?: BackgroundSpeechDenoisingPlan; /** * This is the number of seconds of silence to wait before ending the call. Defaults to 30. * @@ -5535,7 +6273,9 @@ export interface TransferDestinationNumber { * This is the caller ID to use when transferring the call to the `number`. * * Usage: - * - If not provided, the caller ID will be the number the call is coming from. Example, +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller. + * - If not provided, the caller ID will be the number the call is coming **from**. + * Example: a customer with number +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller. + * For inbound calls, the caller ID is the customer's number. For outbound calls, the caller ID is the phone number of the assistant. * - To change this behavior, provide a `callerId`. * - Set to '{{customer.number}}' to always use the customer's number as the caller ID. * - Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. @@ -5569,6 +6309,19 @@ export interface TransferDestinationSip { type: "sip"; /** This is the SIP URI to transfer the call to. */ sipUri: string; + /** + * This is the caller ID to use when transferring the call to the `sipUri`. + * + * Usage: + * - If not provided, the caller ID will be determined by the SIP infrastructure. + * - Set to '{{customer.number}}' to always use the customer's number as the caller ID. + * - Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. + * - Set to any E164 number to always use that number as the caller ID. + * + * Only applicable when `transferPlan.sipVerb='dial'`. Not applicable for SIP REFER. + * @maxLength 40 + */ + callerId?: string; /** * This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`. * @@ -5700,154 +6453,12 @@ export interface ContextEngineeringPlanAll { type: "all"; } -export interface VariableExtractionAlias { - /** - * This is the key of the variable. - * - * This variable will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call. - * - * Rules: - * - Must start with a letter (a-z, A-Z). - * - Subsequent characters can be letters, numbers, or underscores. - * - Minimum length of 1 and maximum length of 40. - * @minLength 1 - * @maxLength 40 - * @pattern /^[a-zA-Z][a-zA-Z0-9_]*$/ - */ - key: string; - /** - * This is the value of the variable. - * - * This can reference existing variables, use filters, and perform transformations. - * - * Examples: "{{name}}", "{{customer.email}}", "Hello {{name | upcase}}" - * @maxLength 10000 - */ - value: string; +export interface ContextEngineeringPlanUserAndAssistantMessages { + type: "userAndAssistantMessages"; } -export interface VariableExtractionPlan { - /** - * This is the schema to extract. - * - * Examples: - * 1. To extract object properties, you can use the following schema: - * ```json - * { - * "type": "object", - * "properties": { - * "name": { - * "type": "string" - * }, - * "age": { - * "type": "number" - * } - * } - * } - * ``` - * - * These will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables. - * - * 2. To extract nested properties, you can use the following schema: - * ```json - * { - * "type": "object", - * "properties": { - * "name": { - * "type": "object", - * "properties": { - * "first": { - * "type": "string" - * }, - * "last": { - * "type": "string" - * } - * } - * } - * } - * } - * ``` - * - * These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible. - * - * 3. To extract array items, you can use the following schema: - * ```json - * { - * "type": "array", - * "title": "zipCodes", - * "items": { - * "type": "string" - * } - * } - * ``` - * - * This will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`. - * - * 4. To extract array of objects, you can use the following schema: - * - * ```json - * { - * "type": "array", - * "name": "people", - * "items": { - * "type": "object", - * "properties": { - * "name": { - * "type": "string" - * }, - * "age": { - * "type": "number" - * }, - * "zipCodes": { - * "type": "array", - * "items": { - * "type": "string" - * } - * } - * } - * } - * } - * ``` - * - * This will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`. - */ - schema?: JsonSchema; - /** - * These are additional variables to create. - * - * These will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call. - * - * Example: - * ```json - * { - * "aliases": [ - * { - * "key": "customerName", - * "value": "{{name}}" - * }, - * { - * "key": "fullName", - * "value": "{{firstName}} {{lastName}}" - * }, - * { - * "key": "greeting", - * "value": "Hello {{name}}, welcome to {{company}}!" - * }, - * { - * "key": "customerCity", - * "value": "{{addresses[0].city}}" - * }, - * { - * "key": "something", - * "value": "{{any liquid}}" - * } - * ] - * } - * ``` - * - * This will create variables `customerName`, `fullName`, `greeting`, `customerCity`, and `something`. To access these variables, you can reference them as `{{customerName}}`, `{{fullName}}`, `{{greeting}}`, `{{customerCity}}`, and `{{something}}`. - */ - aliases?: VariableExtractionAlias[]; +export interface ContextEngineeringPlanPreviousAssistantMessages { + type: "previousAssistantMessages"; } export interface HandoffDestinationAssistant { @@ -5856,7 +6467,9 @@ export interface HandoffDestinationAssistant { contextEngineeringPlan?: | ContextEngineeringPlanLastNMessages | ContextEngineeringPlanNone - | ContextEngineeringPlanAll; + | ContextEngineeringPlanAll + | ContextEngineeringPlanUserAndAssistantMessages + | ContextEngineeringPlanPreviousAssistantMessages; /** This is the assistant to transfer the call to. You must provide either assistantName or assistantId. */ assistantName?: string; /** This is the assistant id to transfer the call to. You must provide either assistantName or assistantId. */ @@ -5888,6 +6501,65 @@ export interface HandoffDestinationDynamic { description?: string; } +export interface SquadMemberDTO { + assistantDestinations?: ( + | TransferDestinationAssistant + | HandoffDestinationAssistant + )[]; + /** This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead. */ + assistantId?: string | null; + /** This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. */ + assistant?: CreateAssistantDTO; + /** This can be used to override the assistant's settings and provide values for it's template variables. */ + assistantOverrides?: AssistantOverrides; +} + +export interface CreateSquadDTO { + /** This is the name of the squad. */ + name?: string; + /** + * This is the list of assistants that make up the squad. + * + * The call will start with the first assistant in the list. + */ + members: SquadMemberDTO[]; + /** + * This can be used to override all the assistants' settings and provide values for their template variables. + * + * Both `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override. + */ + membersOverrides?: AssistantOverrides; +} + +export interface HandoffDestinationSquad { + type: "squad"; + /** This is the plan for manipulating the message context before handing off the call to the squad. */ + contextEngineeringPlan?: + | ContextEngineeringPlanLastNMessages + | ContextEngineeringPlanNone + | ContextEngineeringPlanAll + | ContextEngineeringPlanUserAndAssistantMessages + | ContextEngineeringPlanPreviousAssistantMessages; + /** This is the squad id to transfer the call to. */ + squadId?: string; + /** This is a transient squad to transfer the call to. */ + squad?: CreateSquadDTO; + /** + * This is the name of the entry assistant to start with when handing off to the squad. + * If not provided, the first member of the squad will be used. + */ + entryAssistantName?: string; + /** This is the variable extraction plan for the handoff tool. */ + variableExtractionPlan?: VariableExtractionPlan; + /** + * These are the overrides to apply to the squad configuration. + * Maps to squad-level membersOverrides. + */ + squadOverrides?: AssistantOverrides; + /** This is the description of the destination, used by the AI to choose when and how to transfer the call. */ + description?: string; +} + export interface CreateHandoffToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. @@ -5914,6 +6586,8 @@ export interface CreateHandoffToolDTO { * --- */ type: "handoff"; + /** This is the default local tool result message used when no runtime handoff result override is returned. */ + defaultResult?: string; /** * These are the destinations that the call can be handed off to. * @@ -6083,7 +6757,11 @@ export interface CreateHandoffToolDTO { * * The properties `customerAreaCode`, `customerIntent`, and `customerSentiment` will be passed to the server in the webhook request body. */ - destinations?: (HandoffDestinationAssistant | HandoffDestinationDynamic)[]; + destinations?: ( + | HandoffDestinationAssistant + | HandoffDestinationDynamic + | HandoffDestinationSquad + )[]; /** * This is the optional function definition that will be passed to the LLM. * If this is not defined, we will construct this based on the other properties. @@ -6329,6 +7007,7 @@ export interface KnowledgeBase { provider: "google"; /** The model to use for the knowledge base */ model?: + | "gemini-3-flash-preview" | "gemini-2.5-pro" | "gemini-2.5-flash" | "gemini-2.5-flash-lite" @@ -6836,6 +7515,18 @@ export interface CreateSlackSendMessageToolDTO { rejectionPlan?: ToolRejectionPlan; } +export interface McpToolMessages { + /** The name of the tool from the MCP server. */ + name: string; + /** Custom messages for this specific tool. Set to an empty array to suppress all messages for this tool. If not provided, the tool will use the default messages from the parent MCP tool configuration. */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; +} + export interface McpToolMetadata { /** This is the protocol used for MCP communication. Defaults to Streamable HTTP. */ protocol?: "sse" | "shttp"; @@ -6867,6 +7558,8 @@ export interface CreateMcpToolDTO { * - Webhook expects a response with tool call result. */ server?: Server; + /** Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool. */ + toolMessages?: McpToolMessages[]; metadata?: McpToolMetadata; /** * This is the plan to reject a tool call based on the conversation state. @@ -7356,6 +8049,7 @@ export interface AnyscaleModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7374,6 +8068,8 @@ export interface AnyscaleModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -7439,6 +8135,7 @@ export interface AnthropicModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7457,6 +8154,8 @@ export interface AnthropicModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -7477,8 +8176,10 @@ export interface AnthropicModel { | "claude-3-7-sonnet-20250219" | "claude-opus-4-20250514" | "claude-opus-4-5-20251101" + | "claude-opus-4-6" | "claude-sonnet-4-20250514" | "claude-sonnet-4-5-20250929" + | "claude-sonnet-4-6" | "claude-haiku-4-5-20251001"; /** The provider identifier for Anthropic. */ provider: "anthropic"; @@ -7519,7 +8220,7 @@ export interface AnthropicModel { numFastTurns?: number; } -export interface CerebrasModel { +export interface AnthropicBedrockModel { /** This is the starting state for the conversation. */ messages?: OpenAIMessage[]; /** @@ -7530,6 +8231,7 @@ export interface CerebrasModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7548,6 +8250,8 @@ export interface CerebrasModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -7557,9 +8261,30 @@ export interface CerebrasModel { toolIds?: string[]; /** These are the options for the knowledge base. */ knowledgeBase?: CreateCustomKnowledgeBaseDTO; - /** This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b */ - model: "llama3.1-8b" | "llama-3.3-70b"; - provider: "cerebras"; + /** The provider identifier for Anthropic via AWS Bedrock. */ + provider: "anthropic-bedrock"; + /** The specific Anthropic/Claude model that will be used via Bedrock. */ + model: + | "claude-3-opus-20240229" + | "claude-3-sonnet-20240229" + | "claude-3-haiku-20240307" + | "claude-3-5-sonnet-20240620" + | "claude-3-5-sonnet-20241022" + | "claude-3-5-haiku-20241022" + | "claude-3-7-sonnet-20250219" + | "claude-opus-4-20250514" + | "claude-opus-4-5-20251101" + | "claude-opus-4-6" + | "claude-sonnet-4-20250514" + | "claude-sonnet-4-5-20250929" + | "claude-sonnet-4-6" + | "claude-haiku-4-5-20251001"; + /** + * Optional configuration for Anthropic's thinking feature. + * Only applicable for claude-3-7-sonnet-20250219 model. + * If provided, maxTokens must be greater than thinking.budgetTokens. + */ + thinking?: AnthropicThinkingConfig; /** * This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. * @min 0 @@ -7591,7 +8316,7 @@ export interface CerebrasModel { numFastTurns?: number; } -export interface CustomLLMModel { +export interface CerebrasModel { /** This is the starting state for the conversation. */ messages?: OpenAIMessage[]; /** @@ -7602,6 +8327,7 @@ export interface CustomLLMModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7620,6 +8346,8 @@ export interface CustomLLMModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -7629,40 +8357,115 @@ export interface CustomLLMModel { toolIds?: string[]; /** These are the options for the knowledge base. */ knowledgeBase?: CreateCustomKnowledgeBaseDTO; - /** This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used. */ - provider: "custom-llm"; - /** - * This determines whether metadata is sent in requests to the custom provider. - * - * - `off` will not send any metadata. payload will look like `{ messages }` - * - `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }` - * - `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }` - * - * Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload. - * - * Default is `variable`. - */ - metadataSendMode?: "off" | "variable" | "destructured"; - /** - * Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential). - * @example {"X-Custom-Header":"value"} - */ - headers?: Record; - /** These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1 */ - url: string; - /** - * This determines whether the transcriber's word level confidence is sent in requests to the custom provider. Default is false. - * This only works for Deepgram transcribers. - */ - wordLevelConfidenceEnabled?: boolean; - /** - * This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds. - * @min 0 - * @max 300 - */ - timeoutSeconds?: number; /** This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b */ - model: string; + model: "llama3.1-8b" | "llama-3.3-70b"; + provider: "cerebras"; + /** + * This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. + * @min 0 + * @max 2 + */ + temperature?: number; + /** + * This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. + * @min 50 + * @max 10000 + */ + maxTokens?: number; + /** + * This determines whether we detect user's emotion while they speak and send it as an additional info to model. + * + * Default `false` because the model is usually are good at understanding the user's emotion from text. + * + * @default false + */ + emotionRecognitionEnabled?: boolean; + /** + * This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. + * + * Default is 0. + * + * @default 0 + * @min 0 + */ + numFastTurns?: number; +} + +export interface CustomLLMModel { + /** This is the starting state for the conversation. */ + messages?: OpenAIMessage[]; + /** + * These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. + * + * Both `tools` and `toolIds` can be used together. + */ + tools?: ( + | CreateApiRequestToolDTO + | CreateBashToolDTO + | CreateCodeToolDTO + | CreateComputerToolDTO + | CreateDtmfToolDTO + | CreateEndCallToolDTO + | CreateFunctionToolDTO + | CreateGoHighLevelCalendarAvailabilityToolDTO + | CreateGoHighLevelCalendarEventCreateToolDTO + | CreateGoHighLevelContactCreateToolDTO + | CreateGoHighLevelContactGetToolDTO + | CreateGoogleCalendarCheckAvailabilityToolDTO + | CreateGoogleCalendarCreateEventToolDTO + | CreateGoogleSheetsRowAppendToolDTO + | CreateHandoffToolDTO + | CreateMcpToolDTO + | CreateQueryToolDTO + | CreateSlackSendMessageToolDTO + | CreateSmsToolDTO + | CreateTextEditorToolDTO + | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO + )[]; + /** + * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. + * + * Both `tools` and `toolIds` can be used together. + */ + toolIds?: string[]; + /** These are the options for the knowledge base. */ + knowledgeBase?: CreateCustomKnowledgeBaseDTO; + /** This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used. */ + provider: "custom-llm"; + /** + * This determines whether metadata is sent in requests to the custom provider. + * + * - `off` will not send any metadata. payload will look like `{ messages }` + * - `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }` + * - `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }` + * + * Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload. + * + * Default is `variable`. + */ + metadataSendMode?: "off" | "variable" | "destructured"; + /** + * Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential). + * @example {"X-Custom-Header":"value"} + */ + headers?: Record; + /** These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1 */ + url: string; + /** + * This determines whether the transcriber's word level confidence is sent in requests to the custom provider. Default is false. + * This only works for Deepgram transcribers. + */ + wordLevelConfidenceEnabled?: boolean; + /** + * This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds. + * @min 0 + * @max 300 + */ + timeoutSeconds?: number; + /** This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b */ + model: string; /** * This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. * @min 0 @@ -7705,6 +8508,7 @@ export interface DeepInfraModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7723,6 +8527,8 @@ export interface DeepInfraModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -7777,6 +8583,7 @@ export interface DeepSeekModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7795,6 +8602,8 @@ export interface DeepSeekModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -7889,6 +8698,7 @@ export interface GoogleModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7907,6 +8717,8 @@ export interface GoogleModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -7918,6 +8730,7 @@ export interface GoogleModel { knowledgeBase?: CreateCustomKnowledgeBaseDTO; /** This is the Google model that will be used. */ model: + | "gemini-3-flash-preview" | "gemini-2.5-pro" | "gemini-2.5-flash" | "gemini-2.5-flash-lite" @@ -7980,6 +8793,7 @@ export interface GroqModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -7998,6 +8812,8 @@ export interface GroqModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -8067,6 +8883,7 @@ export interface InflectionAIModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -8085,6 +8902,8 @@ export interface InflectionAIModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -8128,6 +8947,81 @@ export interface InflectionAIModel { numFastTurns?: number; } +export interface MinimaxLLMModel { + /** This is the starting state for the conversation. */ + messages?: OpenAIMessage[]; + /** + * These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. + * + * Both `tools` and `toolIds` can be used together. + */ + tools?: ( + | CreateApiRequestToolDTO + | CreateBashToolDTO + | CreateCodeToolDTO + | CreateComputerToolDTO + | CreateDtmfToolDTO + | CreateEndCallToolDTO + | CreateFunctionToolDTO + | CreateGoHighLevelCalendarAvailabilityToolDTO + | CreateGoHighLevelCalendarEventCreateToolDTO + | CreateGoHighLevelContactCreateToolDTO + | CreateGoHighLevelContactGetToolDTO + | CreateGoogleCalendarCheckAvailabilityToolDTO + | CreateGoogleCalendarCreateEventToolDTO + | CreateGoogleSheetsRowAppendToolDTO + | CreateHandoffToolDTO + | CreateMcpToolDTO + | CreateQueryToolDTO + | CreateSlackSendMessageToolDTO + | CreateSmsToolDTO + | CreateTextEditorToolDTO + | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO + )[]; + /** + * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. + * + * Both `tools` and `toolIds` can be used together. + */ + toolIds?: string[]; + /** These are the options for the knowledge base. */ + knowledgeBase?: CreateCustomKnowledgeBaseDTO; + provider: "minimax"; + /** This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b */ + model: "MiniMax-M2.7"; + /** + * This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. + * @min 0 + * @max 2 + */ + temperature?: number; + /** + * This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. + * @min 50 + * @max 10000 + */ + maxTokens?: number; + /** + * This determines whether we detect user's emotion while they speak and send it as an additional info to model. + * + * Default `false` because the model is usually are good at understanding the user's emotion from text. + * + * @default false + */ + emotionRecognitionEnabled?: boolean; + /** + * This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai. + * + * Default is 0. + * + * @default 0 + * @min 0 + */ + numFastTurns?: number; +} + export interface OpenAIModel { /** This is the starting state for the conversation. */ messages?: OpenAIMessage[]; @@ -8139,6 +9033,7 @@ export interface OpenAIModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -8157,6 +9052,8 @@ export interface OpenAIModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -8177,9 +9074,15 @@ export interface OpenAIModel { * @default undefined */ model: + | "gpt-5.4" + | "gpt-5.4-mini" + | "gpt-5.4-nano" + | "gpt-5.2" + | "gpt-5.2-chat-latest" | "gpt-5.1" | "gpt-5.1-chat-latest" | "gpt-5" + | "gpt-5-chat-latest" | "gpt-5-mini" | "gpt-5-nano" | "gpt-4.1-2025-04-14" @@ -8198,6 +9101,7 @@ export interface OpenAIModel { | "gpt-4o-realtime-preview-2024-12-17" | "gpt-4o-mini-realtime-preview-2024-12-17" | "gpt-realtime-2025-08-28" + | "gpt-realtime-mini-2025-12-15" | "gpt-4o-mini-2024-07-18" | "gpt-4o-mini" | "gpt-4o" @@ -8222,12 +9126,20 @@ export interface OpenAIModel { | "gpt-4.1-2025-04-14:westus3" | "gpt-4.1-2025-04-14:northcentralus" | "gpt-4.1-2025-04-14:southcentralus" + | "gpt-4.1-2025-04-14:westeurope" + | "gpt-4.1-2025-04-14:germanywestcentral" + | "gpt-4.1-2025-04-14:polandcentral" + | "gpt-4.1-2025-04-14:spaincentral" | "gpt-4.1-mini-2025-04-14:westus" | "gpt-4.1-mini-2025-04-14:eastus2" | "gpt-4.1-mini-2025-04-14:eastus" | "gpt-4.1-mini-2025-04-14:westus3" | "gpt-4.1-mini-2025-04-14:northcentralus" | "gpt-4.1-mini-2025-04-14:southcentralus" + | "gpt-4.1-mini-2025-04-14:westeurope" + | "gpt-4.1-mini-2025-04-14:germanywestcentral" + | "gpt-4.1-mini-2025-04-14:polandcentral" + | "gpt-4.1-mini-2025-04-14:spaincentral" | "gpt-4.1-nano-2025-04-14:westus" | "gpt-4.1-nano-2025-04-14:eastus2" | "gpt-4.1-nano-2025-04-14:westus3" @@ -8239,6 +9151,10 @@ export interface OpenAIModel { | "gpt-4o-2024-11-20:eastus" | "gpt-4o-2024-11-20:westus3" | "gpt-4o-2024-11-20:southcentralus" + | "gpt-4o-2024-11-20:westeurope" + | "gpt-4o-2024-11-20:germanywestcentral" + | "gpt-4o-2024-11-20:polandcentral" + | "gpt-4o-2024-11-20:spaincentral" | "gpt-4o-2024-08-06:westus" | "gpt-4o-2024-08-06:westus3" | "gpt-4o-2024-08-06:eastus" @@ -8261,7 +9177,7 @@ export interface OpenAIModel { | "gpt-4-0125-preview:eastus" | "gpt-4-0125-preview:northcentralus" | "gpt-4-0125-preview:southcentralus" - | "gpt-4-1106-preview:australia" + | "gpt-4-1106-preview:australiaeast" | "gpt-4-1106-preview:canadaeast" | "gpt-4-1106-preview:france" | "gpt-4-1106-preview:india" @@ -8280,10 +9196,16 @@ export interface OpenAIModel { * These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense. * @example ["gpt-4-0125-preview","gpt-4-0613"] */ - fallbackModels?: + fallbackModels?: ( + | "gpt-5.4" + | "gpt-5.4-mini" + | "gpt-5.4-nano" + | "gpt-5.2" + | "gpt-5.2-chat-latest" | "gpt-5.1" | "gpt-5.1-chat-latest" | "gpt-5" + | "gpt-5-chat-latest" | "gpt-5-mini" | "gpt-5-nano" | "gpt-4.1-2025-04-14" @@ -8302,6 +9224,7 @@ export interface OpenAIModel { | "gpt-4o-realtime-preview-2024-12-17" | "gpt-4o-mini-realtime-preview-2024-12-17" | "gpt-realtime-2025-08-28" + | "gpt-realtime-mini-2025-12-15" | "gpt-4o-mini-2024-07-18" | "gpt-4o-mini" | "gpt-4o" @@ -8326,12 +9249,20 @@ export interface OpenAIModel { | "gpt-4.1-2025-04-14:westus3" | "gpt-4.1-2025-04-14:northcentralus" | "gpt-4.1-2025-04-14:southcentralus" + | "gpt-4.1-2025-04-14:westeurope" + | "gpt-4.1-2025-04-14:germanywestcentral" + | "gpt-4.1-2025-04-14:polandcentral" + | "gpt-4.1-2025-04-14:spaincentral" | "gpt-4.1-mini-2025-04-14:westus" | "gpt-4.1-mini-2025-04-14:eastus2" | "gpt-4.1-mini-2025-04-14:eastus" | "gpt-4.1-mini-2025-04-14:westus3" | "gpt-4.1-mini-2025-04-14:northcentralus" | "gpt-4.1-mini-2025-04-14:southcentralus" + | "gpt-4.1-mini-2025-04-14:westeurope" + | "gpt-4.1-mini-2025-04-14:germanywestcentral" + | "gpt-4.1-mini-2025-04-14:polandcentral" + | "gpt-4.1-mini-2025-04-14:spaincentral" | "gpt-4.1-nano-2025-04-14:westus" | "gpt-4.1-nano-2025-04-14:eastus2" | "gpt-4.1-nano-2025-04-14:westus3" @@ -8343,6 +9274,10 @@ export interface OpenAIModel { | "gpt-4o-2024-11-20:eastus" | "gpt-4o-2024-11-20:westus3" | "gpt-4o-2024-11-20:southcentralus" + | "gpt-4o-2024-11-20:westeurope" + | "gpt-4o-2024-11-20:germanywestcentral" + | "gpt-4o-2024-11-20:polandcentral" + | "gpt-4o-2024-11-20:spaincentral" | "gpt-4o-2024-08-06:westus" | "gpt-4o-2024-08-06:westus3" | "gpt-4o-2024-08-06:eastus" @@ -8365,7 +9300,7 @@ export interface OpenAIModel { | "gpt-4-0125-preview:eastus" | "gpt-4-0125-preview:northcentralus" | "gpt-4-0125-preview:southcentralus" - | "gpt-4-1106-preview:australia" + | "gpt-4-1106-preview:australiaeast" | "gpt-4-1106-preview:canadaeast" | "gpt-4-1106-preview:france" | "gpt-4-1106-preview:india" @@ -8379,7 +9314,8 @@ export interface OpenAIModel { | "gpt-3.5-turbo-0125:northcentralus" | "gpt-3.5-turbo-0125:southcentralus" | "gpt-3.5-turbo-1106:canadaeast" - | "gpt-3.5-turbo-1106:westus"; + | "gpt-3.5-turbo-1106:westus" + )[]; /** * Azure OpenAI doesn't support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords. Need to strip. * @@ -8391,6 +9327,26 @@ export interface OpenAIModel { toolStrictCompatibilityMode?: | "strip-parameters-with-unsupported-validation" | "strip-unsupported-validation"; + /** + * This controls the prompt cache retention policy for models that support extended caching (GPT-4.1, GPT-5 series). + * + * - `in_memory`: Default behavior, cache retained in GPU memory only + * - `24h`: Extended caching, keeps cached prefixes active for up to 24 hours by offloading to GPU-local storage + * + * Only applies to models: gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5.1-chat-latest, gpt-5, gpt-5-codex, gpt-4.1 + * + * @default undefined (uses API default which is 'in_memory') + */ + promptCacheRetention?: "in_memory" | "24h"; + /** + * This is the prompt cache key for models that support extended caching (GPT-4.1, GPT-5 series). + * + * Providing a cache key allows you to share cached prefixes across requests. + * + * @default undefined + * @maxLength 64 + */ + promptCacheKey?: string; /** * This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. * @min 0 @@ -8433,6 +9389,7 @@ export interface OpenRouterModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -8451,6 +9408,8 @@ export interface OpenRouterModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -8505,6 +9464,7 @@ export interface PerplexityAIModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -8523,6 +9483,8 @@ export interface PerplexityAIModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -8577,6 +9539,7 @@ export interface TogetherAIModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -8595,6 +9558,8 @@ export interface TogetherAIModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -8659,9 +9624,15 @@ export interface WorkflowOpenAIModel { * @maxLength 100 */ model: + | "gpt-5.4" + | "gpt-5.4-mini" + | "gpt-5.4-nano" + | "gpt-5.2" + | "gpt-5.2-chat-latest" | "gpt-5.1" | "gpt-5.1-chat-latest" | "gpt-5" + | "gpt-5-chat-latest" | "gpt-5-mini" | "gpt-5-nano" | "gpt-4.1-2025-04-14" @@ -8700,12 +9671,20 @@ export interface WorkflowOpenAIModel { | "gpt-4.1-2025-04-14:westus3" | "gpt-4.1-2025-04-14:northcentralus" | "gpt-4.1-2025-04-14:southcentralus" + | "gpt-4.1-2025-04-14:westeurope" + | "gpt-4.1-2025-04-14:germanywestcentral" + | "gpt-4.1-2025-04-14:polandcentral" + | "gpt-4.1-2025-04-14:spaincentral" | "gpt-4.1-mini-2025-04-14:westus" | "gpt-4.1-mini-2025-04-14:eastus2" | "gpt-4.1-mini-2025-04-14:eastus" | "gpt-4.1-mini-2025-04-14:westus3" | "gpt-4.1-mini-2025-04-14:northcentralus" | "gpt-4.1-mini-2025-04-14:southcentralus" + | "gpt-4.1-mini-2025-04-14:westeurope" + | "gpt-4.1-mini-2025-04-14:germanywestcentral" + | "gpt-4.1-mini-2025-04-14:polandcentral" + | "gpt-4.1-mini-2025-04-14:spaincentral" | "gpt-4.1-nano-2025-04-14:westus" | "gpt-4.1-nano-2025-04-14:eastus2" | "gpt-4.1-nano-2025-04-14:westus3" @@ -8717,6 +9696,10 @@ export interface WorkflowOpenAIModel { | "gpt-4o-2024-11-20:eastus" | "gpt-4o-2024-11-20:westus3" | "gpt-4o-2024-11-20:southcentralus" + | "gpt-4o-2024-11-20:westeurope" + | "gpt-4o-2024-11-20:germanywestcentral" + | "gpt-4o-2024-11-20:polandcentral" + | "gpt-4o-2024-11-20:spaincentral" | "gpt-4o-2024-08-06:westus" | "gpt-4o-2024-08-06:westus3" | "gpt-4o-2024-08-06:eastus" @@ -8739,7 +9722,7 @@ export interface WorkflowOpenAIModel { | "gpt-4-0125-preview:eastus" | "gpt-4-0125-preview:northcentralus" | "gpt-4-0125-preview:southcentralus" - | "gpt-4-1106-preview:australia" + | "gpt-4-1106-preview:australiaeast" | "gpt-4-1106-preview:canadaeast" | "gpt-4-1106-preview:france" | "gpt-4-1106-preview:india" @@ -8785,8 +9768,52 @@ export interface WorkflowAnthropicModel { | "claude-3-7-sonnet-20250219" | "claude-opus-4-20250514" | "claude-opus-4-5-20251101" + | "claude-opus-4-6" | "claude-sonnet-4-20250514" | "claude-sonnet-4-5-20250929" + | "claude-sonnet-4-6" + | "claude-haiku-4-5-20251001"; + /** + * This is the optional configuration for Anthropic's thinking feature. + * + * - If provided, `maxTokens` must be greater than `thinking.budgetTokens`. + */ + thinking?: AnthropicThinkingConfig; + /** + * This is the temperature of the model. + * @min 0 + * @max 2 + */ + temperature?: number; + /** + * This is the max tokens of the model. + * @min 50 + * @max 10000 + */ + maxTokens?: number; +} + +export interface WorkflowAnthropicBedrockModel { + /** This is the provider of the model (`anthropic-bedrock`). */ + provider: "anthropic-bedrock"; + /** + * This is the specific model that will be used. + * @maxLength 100 + */ + model: + | "claude-3-opus-20240229" + | "claude-3-sonnet-20240229" + | "claude-3-haiku-20240307" + | "claude-3-5-sonnet-20240620" + | "claude-3-5-sonnet-20241022" + | "claude-3-5-haiku-20241022" + | "claude-3-7-sonnet-20250219" + | "claude-opus-4-20250514" + | "claude-opus-4-5-20251101" + | "claude-opus-4-6" + | "claude-sonnet-4-20250514" + | "claude-sonnet-4-5-20250929" + | "claude-sonnet-4-6" | "claude-haiku-4-5-20251001"; /** * This is the optional configuration for Anthropic's thinking feature. @@ -8816,6 +9843,7 @@ export interface WorkflowGoogleModel { * @maxLength 100 */ model: + | "gemini-3-flash-preview" | "gemini-2.5-pro" | "gemini-2.5-flash" | "gemini-2.5-flash-lite" @@ -8926,6 +9954,7 @@ export interface ConversationNode { model?: | WorkflowOpenAIModel | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel | WorkflowGoogleModel | WorkflowCustomModel; /** @@ -8944,7 +9973,8 @@ export interface ConversationNode { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** * This is the voice for the node. * @@ -8961,6 +9991,7 @@ export interface ConversationNode { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -8976,6 +10007,7 @@ export interface ConversationNode { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -8994,6 +10026,8 @@ export interface ConversationNode { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the conversation node can use during the call. To use transient tools, use `tools`. @@ -9079,6 +10113,7 @@ export interface ToolNode { tool?: | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -9096,7 +10131,9 @@ export interface ToolNode { | CreateSlackSendMessageToolDTO | CreateSmsToolDTO | CreateTextEditorToolDTO - | CreateTransferCallToolDTO; + | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO; /** This is the tool to call. To use a transient tool, send `tool` instead. */ toolId?: string; /** @maxLength 80 */ @@ -9343,6 +10380,10 @@ export interface FunctionCallHookAction { * - Webhook expects a response with tool call result. */ server?: Server; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; /** * This is the plan to reject a tool call based on the conversation state. * @@ -9448,6 +10489,21 @@ export interface SayHookAction { exact?: object; } +export interface MessageAddHookAction { + /** This is the type of action - must be "message.add" */ + type: "message.add"; + /** + * The message to add to the conversation in OpenAI format + * @example {"role":"system","content":"Context update from hook"} + */ + message: OpenAIMessage; + /** + * Whether to trigger an assistant response after adding the message + * @default true + */ + triggerResponseEnabled?: boolean; +} + export interface CallHookFilter { /** * This is the type of filter - currently only "oneOf" is supported @@ -9470,7 +10526,7 @@ export interface CallHookCallEnding { */ on: "call.ending"; /** This is the set of actions to perform when the hook triggers */ - do: ToolCallHookAction[]; + do: (ToolCallHookAction | MessageAddHookAction)[]; /** This is the set of filters that must match for the hook to trigger */ filters?: CallHookFilter[]; } @@ -9482,7 +10538,7 @@ export interface CallHookAssistantSpeechInterrupted { */ on: "assistant.speech.interrupted"; /** This is the set of actions to perform when the hook triggers */ - do: (SayHookAction | ToolCallHookAction)[]; + do: (SayHookAction | ToolCallHookAction | MessageAddHookAction)[]; } export interface CallHookCustomerSpeechInterrupted { @@ -9492,7 +10548,7 @@ export interface CallHookCustomerSpeechInterrupted { */ on: "customer.speech.interrupted"; /** This is the set of actions to perform when the hook triggers */ - do: (SayHookAction | ToolCallHookAction)[]; + do: (SayHookAction | ToolCallHookAction | MessageAddHookAction)[]; } export interface ToolCallHookAction { @@ -9502,6 +10558,7 @@ export interface ToolCallHookAction { tool?: | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -9519,7 +10576,9 @@ export interface ToolCallHookAction { | CreateSlackSendMessageToolDTO | CreateSmsToolDTO | CreateTextEditorToolDTO - | CreateTransferCallToolDTO; + | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO; /** This is the tool to call. To use a transient tool, send `tool` instead. */ toolId?: string; } @@ -9530,6 +10589,8 @@ export interface CustomerSpeechTimeoutOptions { * The clock starts when the assistant finishes speaking and remains active until the user speaks. * * @default 7.5 + * @minimum 2 + * @maximum 1000 * @min 1 * @max 1000 */ @@ -9557,7 +10618,7 @@ export interface CallHookCustomerSpeechTimeout { */ on: string; /** This is the set of actions to perform when the hook triggers */ - do: (SayHookAction | ToolCallHookAction)[]; + do: (SayHookAction | ToolCallHookAction | MessageAddHookAction)[]; /** This is the set of filters that must match for the hook to trigger */ options?: CustomerSpeechTimeoutOptions; /** @@ -9577,7 +10638,7 @@ export interface CallHookModelResponseTimeout { */ on: "model.response.timeout"; /** This is the set of actions to perform when the hook triggers */ - do: (SayHookAction | ToolCallHookAction)[]; + do: (SayHookAction | ToolCallHookAction | MessageAddHookAction)[]; } export interface AIEdgeCondition { @@ -9622,6 +10683,7 @@ export interface RecordingConsentPlanStayOnLine { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -9629,6 +10691,22 @@ export interface RecordingConsentPlanStayOnLine { | SesameVoice | InworldVoice | MinimaxVoice; + /** + * This controls whether the consent assistant speaks first or waits for the caller to speak first. + * + * Use: + * - `assistant-speaks-first` (default) to have the consent assistant play the consent message as soon as the call is answered. + * - `assistant-waits-for-user` to have the consent assistant wait for the caller to speak before playing the consent message. + * + * We strongly recommend `assistant-waits-for-user` for outbound calls. Some telephony providers signal "answered" while the line is still ringing, which can cause the consent message to play into a ringing line and be missed by the caller. Waiting for the caller to speak first guarantees they hear the full consent message. + * + * Note: when combined with `type: 'stay-on-line'`, silence only counts toward consent after the caller has spoken at least once. + * + * @default 'assistant-speaks-first' + * @default "assistant-speaks-first" + * @example "assistant-speaks-first" + */ + firstMessageMode?: "assistant-speaks-first" | "assistant-waits-for-user"; /** * This is the type of recording consent plan. This type assumes consent is granted if the user stays on the line. * @example "stay-on-line" @@ -9667,6 +10745,7 @@ export interface RecordingConsentPlanVerbal { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -9674,6 +10753,22 @@ export interface RecordingConsentPlanVerbal { | SesameVoice | InworldVoice | MinimaxVoice; + /** + * This controls whether the consent assistant speaks first or waits for the caller to speak first. + * + * Use: + * - `assistant-speaks-first` (default) to have the consent assistant play the consent message as soon as the call is answered. + * - `assistant-waits-for-user` to have the consent assistant wait for the caller to speak before playing the consent message. + * + * We strongly recommend `assistant-waits-for-user` for outbound calls. Some telephony providers signal "answered" while the line is still ringing, which can cause the consent message to play into a ringing line and be missed by the caller. Waiting for the caller to speak first guarantees they hear the full consent message. + * + * Note: when combined with `type: 'stay-on-line'`, silence only counts toward consent after the caller has spoken at least once. + * + * @default 'assistant-speaks-first' + * @default "assistant-speaks-first" + * @example "assistant-speaks-first" + */ + firstMessageMode?: "assistant-speaks-first" | "assistant-waits-for-user"; /** * This is the type of recording consent plan. This type assumes consent is granted if the user verbally consents or declines. * @example "verbal" @@ -9718,11 +10813,7 @@ export interface SecurityFilterPlan { } export interface CompliancePlan { - /** - * When this is enabled, no logs, recordings, or transcriptions will be stored. - * At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false. - * @example {"hipaaEnabled":false} - */ + /** When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. Only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This setting is only honored if the organization is on an Enterprise subscription or has purchased the HIPAA add-on. */ hipaaEnabled?: boolean; /** * When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored. @@ -9874,21 +10965,36 @@ export interface AnalysisPlan { /** * The minimum number of messages required to run the analysis plan. * If the number of messages is less than this, analysis will be skipped. + * * @default 2 + * @deprecated * @min 0 */ minMessagesThreshold?: number; - /** This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`. */ + /** + * This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`. + * @deprecated + */ summaryPlan?: SummaryPlan; - /** This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`. */ + /** + * This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`. + * @deprecated + */ structuredDataPlan?: StructuredDataPlan; - /** This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`. */ + /** + * This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`. + * @deprecated + */ structuredDataMultiPlan?: StructuredDataMultiPlan[]; - /** This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`. */ + /** + * This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`. + * @deprecated + */ successEvaluationPlan?: SuccessEvaluationPlan; /** * This is an array of outcome UUIDs to be calculated during analysis. * The outcomes will be calculated and stored in `call.analysis.outcomes`. + * @deprecated */ outcomeIds?: string[]; } @@ -9933,6 +11039,104 @@ export interface TranscriptPlan { userName?: string; } +export interface ComplianceOverride { + /** + * Force storage for this output under HIPAA. Only enable if output contains no sensitive data. + * @example false + */ + forceStoreOnHipaaEnabled?: boolean; +} + +export interface CreateStructuredOutputDTO { + /** + * This is the type of structured output. + * + * - 'ai': Uses an LLM to extract structured data from the conversation (default). + * - 'regex': Uses a regex pattern to extract data from the transcript without an LLM. + * + * Defaults to 'ai' if not specified. + * @default "ai" + */ + type?: "ai" | "regex"; + /** + * This is the regex pattern to match against the transcript. + * + * Only used when type is 'regex'. Supports both raw patterns (e.g. '\d+') and + * regex literal format (e.g. '/\d+/gi'). Uses RE2 syntax for safety. + * + * The result depends on the schema type: + * - boolean: true if the pattern matches, false otherwise + * - string: the first match or first capture group + * - number/integer: the first match parsed as a number + * - array: all matches + * @minLength 1 + * @maxLength 1000 + */ + regex?: string; + /** + * This is the model that will be used to extract the structured output. + * + * To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. + * Between the system or user messages, you must reference either 'transcript' or 'messages' with the `{{}}` syntax to access the conversation history. + * Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax to access the structured output definition. + * i.e.: + * `{{structuredOutput}}` + * `{{structuredOutput.name}}` + * `{{structuredOutput.description}}` + * `{{structuredOutput.schema}}` + * + * If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. + * If messages or required fields are not specified, the default system and user prompts will be used. + */ + model?: + | WorkflowOpenAIModel + | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel + | WorkflowGoogleModel + | WorkflowCustomModel; + /** + * Compliance configuration for this output. Only enable overrides if no sensitive data will be stored. + * @example {"forceStoreOnHipaaEnabled":false} + */ + compliancePlan?: ComplianceOverride; + /** + * This is the name of the structured output. + * @minLength 1 + * @maxLength 40 + */ + name: string; + /** + * This is the JSON Schema definition for the structured output. + * + * This is required when creating a structured output. Defines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including: + * - Objects and nested properties + * - Arrays and array validation + * - String, number, boolean, and null types + * - Enums and const values + * - Validation constraints (min/max, patterns, etc.) + * - Composition with allOf, anyOf, oneOf + */ + schema: JsonSchema; + /** + * This is the description of what the structured output extracts. + * + * Use this to provide context about what data will be extracted and how it will be used. + */ + description?: string; + /** + * These are the assistant IDs that this structured output is linked to. + * + * When linked to assistants, this structured output will be available for extraction during those assistant's calls. + */ + assistantIds?: string[]; + /** + * These are the workflow IDs that this structured output is linked to. + * + * When linked to workflows, this structured output will be available for extraction during those workflow's execution. + */ + workflowIds?: string[]; +} + export interface ScorecardMetric { /** * This is the unique identifier for the structured output that will be used to evaluate the scorecard. @@ -10092,6 +11296,12 @@ export interface ArtifactPlan { * The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended. */ structuredOutputIds?: string[]; + /** + * This is an array of transient structured outputs to be calculated during the call. + * The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended. + * Use this to provide inline structured output configurations instead of referencing existing ones via structuredOutputIds. + */ + structuredOutputs?: CreateStructuredOutputDTO[]; /** * This is an array of scorecard IDs that will be evaluated based on the structured outputs extracted during the call. * The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended. @@ -10217,76 +11427,15 @@ export interface MonitorPlan { * @example false */ controlAuthenticationEnabled?: boolean; -} - -export interface SmartDenoisingPlan { - /** - * Whether smart denoising using Krisp is enabled. - * @default false - */ - enabled?: boolean; -} - -export interface FourierDenoisingPlan { - /** - * Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected. - * @default false - */ - enabled?: boolean; - /** - * Whether automatic media detection is enabled. When enabled, the filter will automatically - * detect consistent background TV/music/radio and switch to more aggressive filtering settings. - * Only applies when enabled is true. - * @default true - * @example true - */ - mediaDetectionEnabled?: boolean; - /** - * Static threshold in dB used as fallback when no baseline is established. - * @min -80 - * @max 0 - * @default -35 - * @example -35 - */ - staticThreshold?: number; - /** - * How far below the rolling baseline to filter audio, in dB. - * Lower values (e.g., -10) are more aggressive, higher values (e.g., -20) are more conservative. - * @min -30 - * @max -5 - * @default -15 - * @example -15 - */ - baselineOffsetDb?: number; - /** - * Rolling window size in milliseconds for calculating the audio baseline. - * Larger windows adapt more slowly but are more stable. - * @min 1000 - * @max 30000 - * @default 3000 - * @example 3000 - */ - windowSizeMs?: number; - /** - * Percentile to use for baseline calculation (1-99). - * Higher percentiles (e.g., 85) focus on louder speech, lower percentiles (e.g., 50) include quieter speech. - * @min 1 - * @max 99 - * @default 85 - * @example 85 - */ - baselinePercentile?: number; -} - -export interface BackgroundSpeechDenoisingPlan { - /** Whether smart denoising using Krisp is enabled. */ - smartDenoisingPlan?: SmartDenoisingPlan; /** - * Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected. + * This the set of monitor ids that are attached to the assistant. + * The source of truth for the monitor ids is the assistant_monitor join table. + * This field can be used for transient assistants and to update assistants with new monitor ids. * - * This can be combined with smart denoising, and will be run afterwards. + * @default [] + * @example ["123e4567-e89b-12d3-a456-426614174000"] */ - fourierDenoisingPlan?: FourierDenoisingPlan; + monitorIds?: string[]; } export interface KeypadInputPlan { @@ -10324,6 +11473,7 @@ export interface WorkflowUserEditable { model?: | WorkflowOpenAIModel | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel | WorkflowGoogleModel | WorkflowCustomModel; /** @@ -10342,7 +11492,8 @@ export interface WorkflowUserEditable { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** * This is the voice for the workflow. * @@ -10359,6 +11510,7 @@ export interface WorkflowUserEditable { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -10393,6 +11545,9 @@ export interface WorkflowUserEditable { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -10517,8 +11672,8 @@ export interface WorkflowUserEditable { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -10540,6 +11695,15 @@ export interface WorkflowUserEditable { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is the voicemail detection plan for the workflow. */ voicemailDetection?: @@ -10645,6 +11809,7 @@ export interface VapiModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -10663,6 +11828,8 @@ export interface VapiModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -10721,6 +11888,7 @@ export interface XaiModel { tools?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -10739,6 +11907,8 @@ export interface XaiModel { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are the tools that the assistant can use during the call. To use transient tools, use `tools`. @@ -10754,7 +11924,9 @@ export interface XaiModel { | "grok-2" | "grok-3" | "grok-4-fast-reasoning" - | "grok-4-fast-non-reasoning"; + | "grok-4-fast-non-reasoning" + | "grok-4.20-0309-reasoning" + | "grok-4.20-0309-non-reasoning"; provider: "xai"; /** * This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. @@ -10986,6 +12158,7 @@ export interface FallbackPlan { | FallbackLMNTVoice | FallbackOpenAIVoice | FallbackPlayHTVoice + | FallbackWellSaidVoice | FallbackRimeAIVoice | FallbackSmallestAIVoice | FallbackTavusVoice @@ -11093,7 +12266,10 @@ export interface CartesiaVoice { */ model?: | "sonic-3" + | "sonic-3-2026-01-12" + | "sonic-3-2025-10-27" | "sonic-2" + | "sonic-2-2025-06-11" | "sonic-english" | "sonic-multilingual" | "sonic-preview" @@ -11169,6 +12345,8 @@ export interface CustomVoice { cachingEnabled?: boolean; /** This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported. */ provider: "custom-voice"; + /** This is the provider-specific ID that will be used. This is passed in the voice request payload to identify the voice to use. */ + voiceId?: string; /** This is the plan for chunking the model output before it is sent to the voice provider. */ chunkPlan?: ChunkPlan; /** @@ -11392,7 +12570,8 @@ export interface ElevenLabsVoice { | "eleven_turbo_v2_5" | "eleven_flash_v2" | "eleven_flash_v2_5" - | "eleven_monolingual_v1"; + | "eleven_monolingual_v1" + | "eleven_v3"; /** This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided. */ language?: string; /** This is the plan for chunking the model output before it is sent to the voice provider. */ @@ -11403,6 +12582,29 @@ export interface ElevenLabsVoice { fallbackPlan?: FallbackPlan; } +export interface WellSaidVoice { + /** + * This is the flag to toggle voice caching for the assistant. + * @default true + * @example true + */ + cachingEnabled?: boolean; + /** This is the voice provider that will be used. */ + provider: "wellsaid"; + /** The WellSaid speaker ID to synthesize. */ + voiceId: string; + /** This is the model that will be used. */ + model?: "caruso" | "legacy"; + /** Enables limited SSML translation for input text. */ + enableSsml?: boolean; + /** Array of library IDs to use for voice synthesis. */ + libraryIds?: string[]; + /** This is the plan for chunking the model output before it is sent to the voice provider. */ + chunkPlan?: ChunkPlan; + /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ + fallbackPlan?: FallbackPlan; +} + export interface HumeVoice { /** * This is the flag to toggle voice caching for the assistant. @@ -11905,97 +13107,56 @@ export interface RimeAIVoice { provider: "rime-ai"; /** This is the provider-specific ID that will be used. */ voiceId: - | "abbie" - | "allison" - | "ally" - | "alona" - | "amber" - | "ana" - | "antoine" - | "armon" - | "brenda" - | "brittany" - | "carol" - | "colin" - | "courtney" - | "elena" - | "elliot" + | "cove" + | "moon" + | "wildflower" | "eva" - | "geoff" - | "gerald" - | "hank" + | "amber" + | "maya" + | "lagoon" + | "breeze" | "helen" - | "hera" - | "jen" - | "joe" | "joy" - | "juan" - | "kendra" - | "kendrick" - | "kenneth" - | "kevin" - | "kris" - | "linda" - | "madison" - | "marge" - | "marina" - | "marissa" - | "marta" - | "maya" - | "nicholas" - | "nyles" - | "phil" - | "reba" - | "rex" - | "rick" - | "ritu" - | "rob" - | "rodney" - | "rohan" - | "rosco" - | "samantha" - | "sandy" - | "selena" - | "seth" - | "sharon" - | "stan" - | "tamra" - | "tanya" - | "tibur" - | "tj" - | "tyler" - | "viv" - | "yadira" | "marsh" - | "bayou" | "creek" - | "brook" - | "flower" - | "spore" - | "glacier" - | "gulch" + | "cedar" | "alpine" - | "cove" - | "lagoon" - | "tundra" - | "steppe" - | "mesa" - | "grove" - | "rainforest" + | "summit" + | "nicholas" + | "tyler" + | "colin" + | "hank" + | "thunder" + | "astra" + | "eucalyptus" | "moraine" - | "wildflower" | "peak" - | "boulder" - | "gypsum" - | "zest" + | "tundra" + | "mesa_extra" + | "talon" + | "marlu" + | "glacier" + | "falcon" | "luna" | "celeste" - | "orion" - | "ursa" - | "astra" - | "esther" | "estelle" | "andromeda" + | "esther" + | "lyra" + | "lintel" + | "oculus" + | "vespera" + | "transom" + | "bond" + | "arcade" + | "atrium" + | "cupola" + | "fern" + | "sirius" + | "orion" + | "masonry" + | "albion" + | "parapet" | string; /** * This is the model that will be used. Defaults to 'arcana' when not specified. @@ -12028,6 +13189,22 @@ export interface RimeAIVoice { * @example null */ inlineSpeedAlpha?: string; + /** + * Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si. + * @example "en" + */ + language?: + | "en" + | "es" + | "de" + | "fr" + | "ar" + | "hi" + | "ja" + | "he" + | "pt" + | "ta" + | "si"; /** This is the plan for chunking the model output before it is sent to the voice provider. */ chunkPlan?: ChunkPlan; /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ @@ -12176,6 +13353,19 @@ export interface TavusVoice { fallbackPlan?: FallbackPlan; } +export interface VapiPronunciationDictionaryLocator { + /** + * The pronunciation dictionary ID + * @example "pdict_abc123" + */ + pronunciationDictId: string; + /** + * Version ID (only required for ElevenLabs, ignored for Cartesia) + * @example "ver_abc123" + */ + versionId?: string; +} + export interface VapiVoice { /** * This is the flag to toggle voice caching for the assistant. @@ -12187,6 +13377,11 @@ export interface VapiVoice { provider: "vapi"; /** The voices provided by Vapi */ voiceId: + | "Clara" + | "Godfrey" + | "Layla" + | "Sid" + | "Gustavo" | "Elliot" | "Kylie" | "Rohan" @@ -12198,8 +13393,20 @@ export interface VapiVoice { | "Harry" | "Paige" | "Spencer" + | "Nico" + | "Kai" + | "Emma" + | "Sagar" + | "Neil" + | "Naina" | "Leah" - | "Tara"; + | "Tara" + | "Jess" + | "Leo" + | "Dan" + | "Mia" + | "Zac" + | "Zoe"; /** * This is the speed multiplier that will be used. * @@ -12209,6 +13416,8 @@ export interface VapiVoice { * @default 1 */ speed?: number; + /** List of pronunciation dictionary locators for custom word pronunciations. */ + pronunciationDictionary?: VapiPronunciationDictionaryLocator[]; /** This is the plan for chunking the model output before it is sent to the voice provider. */ chunkPlan?: ChunkPlan; /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ @@ -12227,7 +13436,7 @@ export interface InworldVoice { /** * Inworld Voice ID * Available voices by language: - * • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus + * • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna * • zh: Yichen, Xiaoyin, Xinyi, Jing * • nl: Erik, Katrien, Lennart, Lore * • fr: Alain, Hélène, Mathieu, Étienne @@ -12238,6 +13447,10 @@ export interface InworldVoice { * • pl: Szymon, Wojciech * • pt: Heitor, Maitê * • es: Diego, Lupita, Miguel, Rafael + * • ru: Svetlana, Elena, Dmitry, Nikolai + * • hi: Riya, Manoj + * • he: Yael, Oren + * • ar: Nour, Omar * @maxLength 120 * @example "Alex" */ @@ -12262,6 +13475,11 @@ export interface InworldVoice { | "Timothy" | "Wendy" | "Dominus" + | "Hana" + | "Clive" + | "Carter" + | "Blake" + | "Luna" | "Yichen" | "Xiaoyin" | "Xinyi" @@ -12291,7 +13509,17 @@ export interface InworldVoice { | "Diego" | "Lupita" | "Miguel" - | "Rafael"; + | "Rafael" + | "Svetlana" + | "Elena" + | "Dmitry" + | "Nikolai" + | "Riya" + | "Manoj" + | "Yael" + | "Oren" + | "Nour" + | "Omar"; /** * This is the model that will be used. * @default "inworld-tts-1" @@ -12312,7 +13540,31 @@ export interface InworldVoice { | "de" | "it" | "pl" - | "pt"; + | "pt" + | "ru" + | "hi" + | "he" + | "ar"; + /** + * A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature of 1.1 will be used. The temperature parameter controls variance. + * Higher values will make the output more random and can lead to more expressive results. Lower values will make it more deterministic. + * See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details. + * @min 0.1 + * @max 2 + * @default 1.1 + * @example null + */ + temperature?: number; + /** + * A floating point number between 0.5, inclusive, and 1.5, inclusive. If equal to null or not provided, the model's default speaking speed of 1.0 will be used. + * Values above 0.8 are recommended for higher quality. + * See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details. + * @min 0.5 + * @max 1.5 + * @default 1 + * @example null + */ + speakingRate?: number; /** This is the plan for chunking the model output before it is sent to the voice provider. */ chunkPlan?: ChunkPlan; /** This is the plan for voice provider fallbacks in the event that the primary voice provider fails. */ @@ -12349,6 +13601,15 @@ export interface MinimaxVoice { * @example "happy" */ emotion?: string; + /** + * Controls the granularity of subtitle/timing data returned by Minimax + * during synthesis. Set to 'word' to receive per-word timestamps in + * assistant.speechStarted events for karaoke-style caption rendering. + * + * @default "sentence" + * @default "sentence" + */ + subtitleType?: "word" | "sentence"; /** * Voice pitch adjustment. Range from -12 to 12 semitones. * @default 0 @@ -12435,6 +13696,150 @@ export interface MinimaxVoice { fallbackPlan?: FallbackPlan; } +export interface FallbackMinimaxVoice { + /** + * This is the flag to toggle voice caching for the assistant. + * @default true + * @example true + */ + cachingEnabled?: boolean; + /** This is the voice provider that will be used. */ + provider: "minimax"; + /** + * This is the Minimax Voice ID + * This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID. + */ + voiceId: string; + /** + * This is the model that will be used. Options are 'speech-02-hd' and 'speech-02-turbo'. + * speech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks. + * speech-02-turbo is designed for real-time applications with low latency. + * + * @default "speech-02-turbo" + * @default "speech-02-turbo" + * @example "speech-02-turbo" + */ + model?: "speech-02-hd" | "speech-02-turbo" | "speech-2.5-turbo-preview"; + /** + * The emotion to use for the voice. If not provided, will use auto-detect mode. + * Options include: 'happy', 'sad', 'angry', 'fearful', 'surprised', 'disgusted', 'neutral' + * @example "happy" + */ + emotion?: string; + /** + * Controls the granularity of subtitle/timing data returned by Minimax + * during synthesis. Set to 'word' to receive per-word timestamps in + * assistant.speechStarted events for karaoke-style caption rendering. + * + * @default "sentence" + * @default "sentence" + */ + subtitleType?: "word" | "sentence"; + /** + * Voice pitch adjustment. Range from -12 to 12 semitones. + * @default 0 + * @min -12 + * @max 12 + * @default 0 + * @example 0 + */ + pitch?: number; + /** + * Voice speed adjustment. Range from 0.5 to 2.0. + * @default 1.0 + * @min 0.5 + * @max 2 + * @default 1 + * @example 1 + */ + speed?: number; + /** + * Voice volume adjustment. Range from 0.5 to 2.0. + * @default 1.0 + * @min 0.5 + * @max 2 + * @default 1 + * @example 1 + */ + volume?: number; + /** + * The region for Minimax API. Defaults to "worldwide". + * @default "worldwide" + */ + region?: "worldwide" | "china"; + /** Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English). */ + languageBoost?: + | "Chinese" + | "Chinese,Yue" + | "English" + | "Arabic" + | "Russian" + | "Spanish" + | "French" + | "Portuguese" + | "German" + | "Turkish" + | "Dutch" + | "Ukrainian" + | "Vietnamese" + | "Indonesian" + | "Japanese" + | "Italian" + | "Korean" + | "Thai" + | "Polish" + | "Romanian" + | "Greek" + | "Czech" + | "Finnish" + | "Hindi" + | "Bulgarian" + | "Danish" + | "Hebrew" + | "Malay" + | "Persian" + | "Slovak" + | "Swedish" + | "Croatian" + | "Filipino" + | "Hungarian" + | "Norwegian" + | "Slovenian" + | "Catalan" + | "Nynorsk" + | "Tamil" + | "Afrikaans" + | "auto"; + /** + * Enable MiniMax text normalization to improve number reading and formatting. + * @default true + */ + textNormalizationEnabled?: boolean; + /** This is the plan for chunking the model output before it is sent to the voice provider. */ + chunkPlan?: ChunkPlan; +} + +export interface FallbackWellSaidVoice { + /** + * This is the flag to toggle voice caching for the assistant. + * @default true + * @example true + */ + cachingEnabled?: boolean; + /** This is the voice provider that will be used. */ + provider: "wellsaid"; + /** The WellSaid speaker ID to synthesize. */ + voiceId: string; + /** This is the model that will be used. */ + model?: "caruso" | "legacy"; + /** Enables limited SSML translation for input text. */ + enableSsml?: boolean; + /** Array of library IDs to use for voice synthesis. */ + libraryIds?: string[]; + /** This is the plan for chunking the model output before it is sent to the voice provider. */ + chunkPlan?: ChunkPlan; +} + export interface FallbackAzureVoice { /** * This is the flag to toggle voice caching for the assistant. @@ -12473,7 +13878,10 @@ export interface FallbackCartesiaVoice { */ model?: | "sonic-3" + | "sonic-3-2026-01-12" + | "sonic-3-2025-10-27" | "sonic-2" + | "sonic-2-2025-06-11" | "sonic-english" | "sonic-multilingual" | "sonic-preview" @@ -12547,6 +13955,8 @@ export interface FallbackCustomVoice { cachingEnabled?: boolean; /** This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported. */ provider: "custom-voice"; + /** This is the provider-specific ID that will be used. This is passed in the voice request payload to identify the voice to use. */ + voiceId?: string; /** * This is where the voice request will be sent. * @@ -12753,7 +14163,8 @@ export interface FallbackElevenLabsVoice { | "eleven_turbo_v2_5" | "eleven_flash_v2" | "eleven_flash_v2_5" - | "eleven_monolingual_v1"; + | "eleven_monolingual_v1" + | "eleven_v3"; /** This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided. */ language?: string; /** This is the pronunciation dictionary locators to use. */ @@ -13254,97 +14665,56 @@ export interface FallbackRimeAIVoice { provider: "rime-ai"; /** This is the provider-specific ID that will be used. */ voiceId: - | "abbie" - | "allison" - | "ally" - | "alona" - | "amber" - | "ana" - | "antoine" - | "armon" - | "brenda" - | "brittany" - | "carol" - | "colin" - | "courtney" - | "elena" - | "elliot" + | "cove" + | "moon" + | "wildflower" | "eva" - | "geoff" - | "gerald" - | "hank" + | "amber" + | "maya" + | "lagoon" + | "breeze" | "helen" - | "hera" - | "jen" - | "joe" | "joy" - | "juan" - | "kendra" - | "kendrick" - | "kenneth" - | "kevin" - | "kris" - | "linda" - | "madison" - | "marge" - | "marina" - | "marissa" - | "marta" - | "maya" - | "nicholas" - | "nyles" - | "phil" - | "reba" - | "rex" - | "rick" - | "ritu" - | "rob" - | "rodney" - | "rohan" - | "rosco" - | "samantha" - | "sandy" - | "selena" - | "seth" - | "sharon" - | "stan" - | "tamra" - | "tanya" - | "tibur" - | "tj" - | "tyler" - | "viv" - | "yadira" | "marsh" - | "bayou" | "creek" - | "brook" - | "flower" - | "spore" - | "glacier" - | "gulch" + | "cedar" | "alpine" - | "cove" - | "lagoon" - | "tundra" - | "steppe" - | "mesa" - | "grove" - | "rainforest" + | "summit" + | "nicholas" + | "tyler" + | "colin" + | "hank" + | "thunder" + | "astra" + | "eucalyptus" | "moraine" - | "wildflower" | "peak" - | "boulder" - | "gypsum" - | "zest" + | "tundra" + | "mesa_extra" + | "talon" + | "marlu" + | "glacier" + | "falcon" | "luna" | "celeste" - | "orion" - | "ursa" - | "astra" - | "esther" | "estelle" | "andromeda" + | "esther" + | "lyra" + | "lintel" + | "oculus" + | "vespera" + | "transom" + | "bond" + | "arcade" + | "atrium" + | "cupola" + | "fern" + | "sirius" + | "orion" + | "masonry" + | "albion" + | "parapet" | string; /** * This is the model that will be used. Defaults to 'arcana' when not specified. @@ -13377,6 +14747,22 @@ export interface FallbackRimeAIVoice { * @example null */ inlineSpeedAlpha?: string; + /** + * Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si. + * @example "en" + */ + language?: + | "en" + | "es" + | "de" + | "fr" + | "ar" + | "hi" + | "ja" + | "he" + | "pt" + | "ta" + | "si"; /** This is the plan for chunking the model output before it is sent to the voice provider. */ chunkPlan?: ChunkPlan; } @@ -13487,6 +14873,11 @@ export interface FallbackVapiVoice { provider: "vapi"; /** The voices provided by Vapi */ voiceId: + | "Clara" + | "Godfrey" + | "Layla" + | "Sid" + | "Gustavo" | "Elliot" | "Kylie" | "Rohan" @@ -13498,8 +14889,20 @@ export interface FallbackVapiVoice { | "Harry" | "Paige" | "Spencer" + | "Nico" + | "Kai" + | "Emma" + | "Sagar" + | "Neil" + | "Naina" | "Leah" - | "Tara"; + | "Tara" + | "Jess" + | "Leo" + | "Dan" + | "Mia" + | "Zac" + | "Zoe"; /** * This is the speed multiplier that will be used. * @@ -13509,6 +14912,8 @@ export interface FallbackVapiVoice { * @default 1 */ speed?: number; + /** List of pronunciation dictionary locators for custom word pronunciations. */ + pronunciationDictionary?: VapiPronunciationDictionaryLocator[]; /** This is the plan for chunking the model output before it is sent to the voice provider. */ chunkPlan?: ChunkPlan; } @@ -13525,7 +14930,7 @@ export interface FallbackInworldVoice { /** * Inworld Voice ID * Available voices by language: - * • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus + * • en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, Hana, Clive, Carter, Blake, Luna * • zh: Yichen, Xiaoyin, Xinyi, Jing * • nl: Erik, Katrien, Lennart, Lore * • fr: Alain, Hélène, Mathieu, Étienne @@ -13536,6 +14941,10 @@ export interface FallbackInworldVoice { * • pl: Szymon, Wojciech * • pt: Heitor, Maitê * • es: Diego, Lupita, Miguel, Rafael + * • ru: Svetlana, Elena, Dmitry, Nikolai + * • hi: Riya, Manoj + * • he: Yael, Oren + * • ar: Nour, Omar * @maxLength 120 * @example "Alex" */ @@ -13560,6 +14969,11 @@ export interface FallbackInworldVoice { | "Timothy" | "Wendy" | "Dominus" + | "Hana" + | "Clive" + | "Carter" + | "Blake" + | "Luna" | "Yichen" | "Xiaoyin" | "Xinyi" @@ -13589,7 +15003,17 @@ export interface FallbackInworldVoice { | "Diego" | "Lupita" | "Miguel" - | "Rafael"; + | "Rafael" + | "Svetlana" + | "Elena" + | "Dmitry" + | "Nikolai" + | "Riya" + | "Manoj" + | "Yael" + | "Oren" + | "Nour" + | "Omar"; /** * This is the model that will be used. * @default "inworld-tts-1" @@ -13610,121 +15034,31 @@ export interface FallbackInworldVoice { | "de" | "it" | "pl" - | "pt"; - /** This is the plan for chunking the model output before it is sent to the voice provider. */ - chunkPlan?: ChunkPlan; -} - -export interface FallbackMinimaxVoice { - /** - * This is the flag to toggle voice caching for the assistant. - * @default true - * @example true - */ - cachingEnabled?: boolean; - /** This is the voice provider that will be used. */ - provider: "minimax"; - /** - * This is the Minimax Voice ID - * This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID. - */ - voiceId: string; - /** - * This is the model that will be used. Options are 'speech-02-hd' and 'speech-02-turbo'. - * speech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks. - * speech-02-turbo is designed for real-time applications with low latency. - * - * @default "speech-02-turbo" - * @default "speech-02-turbo" - * @example "speech-02-turbo" - */ - model?: "speech-02-hd" | "speech-02-turbo" | "speech-2.5-turbo-preview"; - /** - * The emotion to use for the voice. If not provided, will use auto-detect mode. - * Options include: 'happy', 'sad', 'angry', 'fearful', 'surprised', 'disgusted', 'neutral' - * @example "happy" - */ - emotion?: string; - /** - * Voice pitch adjustment. Range from -12 to 12 semitones. - * @default 0 - * @min -12 - * @max 12 - * @default 0 - * @example 0 - */ - pitch?: number; + | "pt" + | "ru" + | "hi" + | "he" + | "ar"; /** - * Voice speed adjustment. Range from 0.5 to 2.0. - * @default 1.0 - * @min 0.5 + * A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature of 1.1 will be used. The temperature parameter controls variance. + * Higher values will make the output more random and can lead to more expressive results. Lower values will make it more deterministic. + * See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details. + * @min 0.1 * @max 2 - * @default 1 - * @example 1 + * @default 1.1 + * @example null */ - speed?: number; + temperature?: number; /** - * Voice volume adjustment. Range from 0.5 to 2.0. - * @default 1.0 + * A floating point number between 0.5, inclusive, and 1.5, inclusive. If equal to null or not provided, the model's default speaking speed of 1.0 will be used. + * Values above 0.8 are recommended for higher quality. + * See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details. * @min 0.5 - * @max 2 + * @max 1.5 * @default 1 - * @example 1 - */ - volume?: number; - /** - * The region for Minimax API. Defaults to "worldwide". - * @default "worldwide" - */ - region?: "worldwide" | "china"; - /** Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English). */ - languageBoost?: - | "Chinese" - | "Chinese,Yue" - | "English" - | "Arabic" - | "Russian" - | "Spanish" - | "French" - | "Portuguese" - | "German" - | "Turkish" - | "Dutch" - | "Ukrainian" - | "Vietnamese" - | "Indonesian" - | "Japanese" - | "Italian" - | "Korean" - | "Thai" - | "Polish" - | "Romanian" - | "Greek" - | "Czech" - | "Finnish" - | "Hindi" - | "Bulgarian" - | "Danish" - | "Hebrew" - | "Malay" - | "Persian" - | "Slovak" - | "Swedish" - | "Croatian" - | "Filipino" - | "Hungarian" - | "Norwegian" - | "Slovenian" - | "Catalan" - | "Nynorsk" - | "Tamil" - | "Afrikaans" - | "auto"; - /** - * Enable MiniMax text normalization to improve number reading and formatting. - * @default true + * @example null */ - textNormalizationEnabled?: boolean; + speakingRate?: number; /** This is the plan for chunking the model output before it is sent to the voice provider. */ chunkPlan?: ChunkPlan; } @@ -13782,6 +15116,28 @@ export interface CreateAnthropicCredentialDTO { name?: string; } +export interface CreateAnthropicBedrockCredentialDTO { + provider: "anthropic-bedrock"; + /** AWS region where Bedrock is configured. */ + region: + | "us-east-1" + | "us-west-2" + | "eu-west-1" + | "eu-west-3" + | "ap-northeast-1" + | "ap-southeast-2"; + /** Authentication method - either direct IAM credentials or cross-account role assumption. */ + authenticationPlan: + | AWSIAMCredentialsAuthenticationPlan + | AWSStsAuthenticationPlan; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + export interface CreateAnyscaleCredentialDTO { provider: "anyscale"; /** @@ -13835,22 +15191,27 @@ export interface CreateAzureCredentialDTO { service: "speech" | "blob_storage"; /** This is the region of the Azure resource. */ region?: - | "australia" + | "australiaeast" | "canadaeast" | "canadacentral" + | "centralus" | "eastus2" | "eastus" | "france" + | "germanywestcentral" | "india" | "japaneast" | "japanwest" - | "uaenorth" | "northcentralus" | "norway" + | "polandcentral" | "southcentralus" + | "spaincentral" | "swedencentral" | "switzerland" + | "uaenorth" | "uk" + | "westeurope" | "westus" | "westus3"; /** @@ -13876,26 +15237,38 @@ export interface CreateAzureCredentialDTO { export interface CreateAzureOpenAICredentialDTO { provider: "azure-openai"; region: - | "australia" + | "australiaeast" | "canadaeast" | "canadacentral" + | "centralus" | "eastus2" | "eastus" | "france" + | "germanywestcentral" | "india" | "japaneast" | "japanwest" - | "uaenorth" | "northcentralus" | "norway" + | "polandcentral" | "southcentralus" + | "spaincentral" | "swedencentral" | "switzerland" + | "uaenorth" | "uk" + | "westeurope" | "westus" | "westus3"; /** @example ["gpt-4-0125-preview","gpt-4-0613"] */ models: + | "gpt-5.4" + | "gpt-5.4-mini" + | "gpt-5.4-nano" + | "gpt-5.2" + | "gpt-5.2-chat" + | "gpt-5.1" + | "gpt-5.1-chat" | "gpt-5" | "gpt-5-mini" | "gpt-5-nano" @@ -14034,6 +15407,8 @@ export interface CreateCartesiaCredentialDTO { provider: "cartesia"; /** This is not returned in the API. */ apiKey: string; + /** This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. */ + apiUrl?: string; /** * This is the name of credential. This is just for your reference. * @minLength 1 @@ -14684,6 +16059,57 @@ export interface CreateMinimaxCredentialDTO { name?: string; } +export interface EndpointedSpeechLowConfidenceOptions { + /** + * This is the minimum confidence threshold. + * Transcripts with confidence below this value will be discarded. + * + * @default confidenceMax - 0.2 + * @min 0 + * @max 1 + */ + confidenceMin?: number; + /** + * This is the maximum confidence threshold. + * Transcripts with confidence at or above this value will be processed normally. + * + * @default transcriber's confidenceThreshold + * @min 0 + * @max 1 + */ + confidenceMax?: number; +} + +export interface CallHookTranscriberEndpointedSpeechLowConfidence { + /** This is the set of actions to perform when the hook triggers */ + do: (SayHookAction | ToolCallHookAction | MessageAddHookAction)[]; + /** + * This is the event that triggers this hook + * @maxLength 1000 + */ + on: string; + /** This is the options for the hook including confidence thresholds */ + options?: EndpointedSpeechLowConfidenceOptions; +} + +export interface SessionCreatedHook { + /** + * This is the event that triggers this hook + * @maxLength 1000 + */ + on: "session.created"; + /** This is the set of actions to perform when the hook triggers. */ + do: ToolCallHookAction[]; + /** + * Optional name for this hook instance. + * If no name is provided, the hook will be auto generated as UUID. + * + * @default UUID + * @maxLength 1000 + */ + name?: string; +} + export interface SQLInjectionSecurityFilter { /** The type of security threat to filter. */ type: "sql-injection"; @@ -14732,10 +16158,12 @@ export interface AssistantOverrides { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** These are the options for the assistant's LLM. */ model?: | AnthropicModel + | AnthropicBedrockModel | AnyscaleModel | CerebrasModel | CustomLLMModel @@ -14744,6 +16172,7 @@ export interface AssistantOverrides { | GoogleModel | GroqModel | InflectionAIModel + | MinimaxLLMModel | OpenAIModel | OpenRouterModel | PerplexityAIModel @@ -14761,6 +16190,7 @@ export interface AssistantOverrides { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -14808,6 +16238,7 @@ export interface AssistantOverrides { */ clientMessages?: | "conversation-update" + | "assistant.speechStarted" | "function-call" | "function-call-result" | "hang" @@ -14831,6 +16262,7 @@ export interface AssistantOverrides { */ serverMessages?: | "assistant.started" + | "assistant.speechStarted" | "conversation-update" | "end-of-call-report" | "function-call" @@ -14873,8 +16305,6 @@ export interface AssistantOverrides { /** * This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. * - * Default `false` while in beta. - * * @default false * @example false */ @@ -14895,6 +16325,9 @@ export interface AssistantOverrides { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -15019,8 +16452,8 @@ export interface AssistantOverrides { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -15042,6 +16475,15 @@ export interface AssistantOverrides { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is a set of actions that will be performed on certain events. */ hooks?: ( @@ -15049,10 +16491,12 @@ export interface AssistantOverrides { | CallHookAssistantSpeechInterrupted | CallHookCustomerSpeechInterrupted | CallHookCustomerSpeechTimeout + | SessionCreatedHook )[]; "tools:append"?: ( | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -15071,6 +16515,8 @@ export interface AssistantOverrides { | CreateSmsToolDTO | CreateTextEditorToolDTO | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO )[]; /** * These are values that will be used to replace the template variables in the assistant messages and other text-based fields. @@ -15122,7 +16568,10 @@ export interface AssistantOverrides { * - Fourier denoising */ backgroundSpeechDenoisingPlan?: BackgroundSpeechDenoisingPlan; - /** This is the plan for analysis of assistant's calls. Stored in `call.analysis`. */ + /** + * This is the plan for analysis of assistant's calls. Stored in `call.analysis`. + * @deprecated + */ analysisPlan?: AnalysisPlan; /** This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. */ artifactPlan?: ArtifactPlan; @@ -15152,6 +16601,7 @@ export interface AssistantOverrides { * Usage: * - To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`. * - To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`. + * - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids. */ monitorPlan?: MonitorPlan; /** These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. */ @@ -15182,10 +16632,12 @@ export interface CreateAssistantDTO { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** These are the options for the assistant's LLM. */ model?: | AnthropicModel + | AnthropicBedrockModel | AnyscaleModel | CerebrasModel | CustomLLMModel @@ -15194,6 +16646,7 @@ export interface CreateAssistantDTO { | GoogleModel | GroqModel | InflectionAIModel + | MinimaxLLMModel | OpenAIModel | OpenRouterModel | PerplexityAIModel @@ -15211,6 +16664,7 @@ export interface CreateAssistantDTO { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -15258,6 +16712,7 @@ export interface CreateAssistantDTO { */ clientMessages?: | "conversation-update" + | "assistant.speechStarted" | "function-call" | "function-call-result" | "hang" @@ -15281,6 +16736,7 @@ export interface CreateAssistantDTO { */ serverMessages?: | "assistant.started" + | "assistant.speechStarted" | "conversation-update" | "end-of-call-report" | "function-call" @@ -15323,8 +16779,6 @@ export interface CreateAssistantDTO { /** * This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. * - * Default `false` while in beta. - * * @default false * @example false */ @@ -15345,6 +16799,9 @@ export interface CreateAssistantDTO { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -15469,8 +16926,8 @@ export interface CreateAssistantDTO { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -15492,6 +16949,15 @@ export interface CreateAssistantDTO { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is a set of actions that will be performed on certain events. */ hooks?: ( @@ -15499,6 +16965,7 @@ export interface CreateAssistantDTO { | CallHookAssistantSpeechInterrupted | CallHookCustomerSpeechInterrupted | CallHookCustomerSpeechTimeout + | SessionCreatedHook )[]; /** * This is the name of the assistant. @@ -15540,7 +17007,10 @@ export interface CreateAssistantDTO { * - Fourier denoising */ backgroundSpeechDenoisingPlan?: BackgroundSpeechDenoisingPlan; - /** This is the plan for analysis of assistant's calls. Stored in `call.analysis`. */ + /** + * This is the plan for analysis of assistant's calls. Stored in `call.analysis`. + * @deprecated + */ analysisPlan?: AnalysisPlan; /** This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. */ artifactPlan?: ArtifactPlan; @@ -15570,6 +17040,7 @@ export interface CreateAssistantDTO { * Usage: * - To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`. * - To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`. + * - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids. */ monitorPlan?: MonitorPlan; /** These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. */ @@ -15600,10 +17071,12 @@ export interface Assistant { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** These are the options for the assistant's LLM. */ model?: | AnthropicModel + | AnthropicBedrockModel | AnyscaleModel | CerebrasModel | CustomLLMModel @@ -15612,6 +17085,7 @@ export interface Assistant { | GoogleModel | GroqModel | InflectionAIModel + | MinimaxLLMModel | OpenAIModel | OpenRouterModel | PerplexityAIModel @@ -15629,6 +17103,7 @@ export interface Assistant { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -15676,6 +17151,7 @@ export interface Assistant { */ clientMessages?: | "conversation-update" + | "assistant.speechStarted" | "function-call" | "function-call-result" | "hang" @@ -15699,6 +17175,7 @@ export interface Assistant { */ serverMessages?: | "assistant.started" + | "assistant.speechStarted" | "conversation-update" | "end-of-call-report" | "function-call" @@ -15741,8 +17218,6 @@ export interface Assistant { /** * This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. * - * Default `false` while in beta. - * * @default false * @example false */ @@ -15763,6 +17238,9 @@ export interface Assistant { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -15887,8 +17365,8 @@ export interface Assistant { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -15910,6 +17388,15 @@ export interface Assistant { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is a set of actions that will be performed on certain events. */ hooks?: ( @@ -15917,6 +17404,7 @@ export interface Assistant { | CallHookAssistantSpeechInterrupted | CallHookCustomerSpeechInterrupted | CallHookCustomerSpeechTimeout + | SessionCreatedHook )[]; /** * This is the name of the assistant. @@ -15958,7 +17446,10 @@ export interface Assistant { * - Fourier denoising */ backgroundSpeechDenoisingPlan?: BackgroundSpeechDenoisingPlan; - /** This is the plan for analysis of assistant's calls. Stored in `call.analysis`. */ + /** + * This is the plan for analysis of assistant's calls. Stored in `call.analysis`. + * @deprecated + */ analysisPlan?: AnalysisPlan; /** This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. */ artifactPlan?: ArtifactPlan; @@ -15988,6 +17479,7 @@ export interface Assistant { * Usage: * - To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`. * - To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`. + * - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids. */ monitorPlan?: MonitorPlan; /** These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. */ @@ -16023,6 +17515,9 @@ export interface PaginationMeta { itemsPerPage: number; totalItems: number; currentPage: number; + totalPages?: number; + hasNextPage?: boolean; + sortOrder?: "ASC" | "DESC"; itemsBeyondRetention?: boolean; /** @format date-time */ createdAtLe?: string; @@ -16054,10 +17549,12 @@ export interface UpdateAssistantDTO { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** These are the options for the assistant's LLM. */ model?: | AnthropicModel + | AnthropicBedrockModel | AnyscaleModel | CerebrasModel | CustomLLMModel @@ -16066,6 +17563,7 @@ export interface UpdateAssistantDTO { | GoogleModel | GroqModel | InflectionAIModel + | MinimaxLLMModel | OpenAIModel | OpenRouterModel | PerplexityAIModel @@ -16083,6 +17581,7 @@ export interface UpdateAssistantDTO { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -16130,6 +17629,7 @@ export interface UpdateAssistantDTO { */ clientMessages?: | "conversation-update" + | "assistant.speechStarted" | "function-call" | "function-call-result" | "hang" @@ -16153,6 +17653,7 @@ export interface UpdateAssistantDTO { */ serverMessages?: | "assistant.started" + | "assistant.speechStarted" | "conversation-update" | "end-of-call-report" | "function-call" @@ -16195,8 +17696,6 @@ export interface UpdateAssistantDTO { /** * This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech. * - * Default `false` while in beta. - * * @default false * @example false */ @@ -16217,6 +17716,9 @@ export interface UpdateAssistantDTO { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -16341,8 +17843,8 @@ export interface UpdateAssistantDTO { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -16364,6 +17866,15 @@ export interface UpdateAssistantDTO { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is a set of actions that will be performed on certain events. */ hooks?: ( @@ -16371,6 +17882,7 @@ export interface UpdateAssistantDTO { | CallHookAssistantSpeechInterrupted | CallHookCustomerSpeechInterrupted | CallHookCustomerSpeechTimeout + | SessionCreatedHook )[]; /** * This is the name of the assistant. @@ -16412,7 +17924,10 @@ export interface UpdateAssistantDTO { * - Fourier denoising */ backgroundSpeechDenoisingPlan?: BackgroundSpeechDenoisingPlan; - /** This is the plan for analysis of assistant's calls. Stored in `call.analysis`. */ + /** + * This is the plan for analysis of assistant's calls. Stored in `call.analysis`. + * @deprecated + */ analysisPlan?: AnalysisPlan; /** This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. */ artifactPlan?: ArtifactPlan; @@ -16442,6 +17957,7 @@ export interface UpdateAssistantDTO { * Usage: * - To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`. * - To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`. + * - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids. */ monitorPlan?: MonitorPlan; /** These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this. */ @@ -16459,36 +17975,6 @@ export interface UpdateAssistantDTO { keypadInputPlan?: KeypadInputPlan; } -export interface SquadMemberDTO { - assistantDestinations?: ( - | TransferDestinationAssistant - | HandoffDestinationAssistant - )[]; - /** This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead. */ - assistantId?: string | null; - /** This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. */ - assistant?: CreateAssistantDTO; - /** This can be used to override the assistant's settings and provide values for it's template variables. */ - assistantOverrides?: AssistantOverrides; -} - -export interface CreateSquadDTO { - /** This is the name of the squad. */ - name?: string; - /** - * This is the list of assistants that make up the squad. - * - * The call will start with the first assistant in the list. - */ - members: SquadMemberDTO[]; - /** - * This can be used to override all the assistants' settings and provide values for their template variables. - * - * Both `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override. - */ - membersOverrides?: AssistantOverrides; -} - export interface Squad { /** This is the name of the squad. */ name?: string; @@ -16547,6 +18033,7 @@ export interface Workflow { model?: | WorkflowOpenAIModel | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel | WorkflowGoogleModel | WorkflowCustomModel; /** @@ -16565,7 +18052,8 @@ export interface Workflow { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** * This is the voice for the workflow. * @@ -16582,6 +18070,7 @@ export interface Workflow { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -16616,6 +18105,9 @@ export interface Workflow { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -16740,8 +18232,8 @@ export interface Workflow { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -16763,6 +18255,15 @@ export interface Workflow { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is the voicemail detection plan for the workflow. */ voicemailDetection?: @@ -16873,6 +18374,7 @@ export interface CreateWorkflowDTO { model?: | WorkflowOpenAIModel | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel | WorkflowGoogleModel | WorkflowCustomModel; /** @@ -16891,7 +18393,8 @@ export interface CreateWorkflowDTO { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** * This is the voice for the workflow. * @@ -16908,6 +18411,7 @@ export interface CreateWorkflowDTO { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -16942,6 +18446,9 @@ export interface CreateWorkflowDTO { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -17066,8 +18573,8 @@ export interface CreateWorkflowDTO { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -17089,6 +18596,15 @@ export interface CreateWorkflowDTO { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is the voicemail detection plan for the workflow. */ voicemailDetection?: @@ -17193,6 +18709,7 @@ export interface UpdateWorkflowDTO { model?: | WorkflowOpenAIModel | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel | WorkflowGoogleModel | WorkflowCustomModel; /** @@ -17211,7 +18728,8 @@ export interface UpdateWorkflowDTO { | SpeechmaticsTranscriber | TalkscriberTranscriber | OpenAITranscriber - | CartesiaTranscriber; + | CartesiaTranscriber + | SonioxTranscriber; /** * This is the voice for the workflow. * @@ -17228,6 +18746,7 @@ export interface UpdateWorkflowDTO { | NeuphonicVoice | OpenAIVoice | PlayHTVoice + | WellSaidVoice | RimeAIVoice | SmallestAIVoice | TavusVoice @@ -17262,6 +18781,9 @@ export interface UpdateWorkflowDTO { | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -17386,8 +18908,8 @@ export interface UpdateWorkflowDTO { provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -17409,6 +18931,15 @@ export interface UpdateWorkflowDTO { | ({ provider: "minimax"; } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO) )[]; /** This is the voicemail detection plan for the workflow. */ voicemailDetection?: @@ -17522,24 +19053,32 @@ export interface AnalysisCostBreakdown { summaryPromptTokens?: number; /** This is the number of completion tokens used to summarize the call. */ summaryCompletionTokens?: number; + /** This is the number of cached prompt tokens used to summarize the call. */ + summaryCachedPromptTokens?: number; /** This is the cost to extract structured data from the call. */ structuredData?: number; /** This is the number of prompt tokens used to extract structured data from the call. */ structuredDataPromptTokens?: number; /** This is the number of completion tokens used to extract structured data from the call. */ structuredDataCompletionTokens?: number; + /** This is the number of cached prompt tokens used to extract structured data from the call. */ + structuredDataCachedPromptTokens?: number; /** This is the cost to evaluate if the call was successful. */ successEvaluation?: number; /** This is the number of prompt tokens used to evaluate if the call was successful. */ successEvaluationPromptTokens?: number; /** This is the number of completion tokens used to evaluate if the call was successful. */ successEvaluationCompletionTokens?: number; + /** This is the number of cached prompt tokens used to evaluate if the call was successful. */ + successEvaluationCachedPromptTokens?: number; /** This is the cost to evaluate structuredOutputs from the call. */ structuredOutput?: number; /** This is the number of prompt tokens used to evaluate structuredOutputs from the call. */ structuredOutputPromptTokens?: number; /** This is the number of completion tokens used to evaluate structuredOutputs from the call. */ structuredOutputCompletionTokens?: number; + /** This is the number of cached prompt tokens used to evaluate structuredOutputs from the call. */ + structuredOutputCachedPromptTokens?: number; } export interface CostBreakdown { @@ -17561,6 +19100,8 @@ export interface CostBreakdown { llmPromptTokens?: number; /** This is the LLM completion tokens used for the call. */ llmCompletionTokens?: number; + /** This is the LLM cached prompt tokens used for the call. */ + llmCachedPromptTokens?: number; /** This is the TTS characters used for the call. */ ttsCharacters?: number; /** This is the cost of the analysis. */ @@ -17578,7 +19119,13 @@ export interface Analysis { successEvaluation?: string; } +export interface MonitorResult { + monitorId: string; + filterPassed: boolean; +} + export interface Monitor { + monitors?: MonitorResult[]; /** This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`. */ listenUrl?: string; /** This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`. */ @@ -17620,6 +19167,13 @@ export interface NodeArtifact { variableValues?: object; } +export interface AssistantActivation { + /** This is the name of the assistant that was active during the call. */ + assistantName: string; + /** This is the ID of the assistant that was active during the call. */ + assistantId?: string; +} + export interface TurnLatency { /** This is the model latency for the first token. */ modelLatency?: number; @@ -17697,6 +19251,8 @@ export interface Artifact { logUrl?: string; /** This is the history of workflow nodes that were executed during the call. */ nodes?: NodeArtifact[]; + /** Ordered list of assistants that were active during the call, including after transfers and handoffs. */ + assistantActivations?: AssistantActivation[]; /** These are the variable values at the end of the workflow execution. */ variableValues?: object; /** This is the performance metrics for the call. It contains the turn latency, broken down by component. */ @@ -17766,12 +19322,33 @@ export interface SayPhoneNumberHookAction { exact: string; } +export interface PhoneNumberCallRingingHookFilter { + /** + * This is the type of filter - matches when the specified field starts with any of the given prefixes + * @maxLength 1000 + */ + type: "startsWith"; + /** + * The field to check. Currently only "number" (the caller's phone number) is supported. + * @maxLength 1000 + */ + key: "number"; + /** + * Array of prefixes to match. Do not include the + prefix. Inbound calls from numbers starting with any of these prefixes will trigger the hook actions. + * @maxLength 20 + * @example ["91","86","7"] + */ + startsWith: string[]; +} + export interface PhoneNumberHookCallRinging { /** * This is the event to trigger the hook on * @maxLength 1000 */ on: "call.ringing"; + /** Optional filters to decide when to trigger the hook. Currently supports filtering by caller country code. */ + filters?: PhoneNumberCallRingingHookFilter[]; /** Only the first action will be executed. Additional actions will be ignored. */ do: (TransferPhoneNumberHookAction | SayPhoneNumberHookAction)[]; } @@ -18036,6 +19613,7 @@ export interface Call { | "pipeline-error-sesame-voice-failed" | "pipeline-error-inworld-voice-failed" | "pipeline-error-minimax-voice-failed" + | "pipeline-error-wellsaid-voice-failed" | "pipeline-error-tavus-video-failed" | "call.in-progress.error-vapifault-openai-voice-failed" | "call.in-progress.error-vapifault-cartesia-voice-failed" @@ -18052,6 +19630,7 @@ export interface Call { | "call.in-progress.error-vapifault-sesame-voice-failed" | "call.in-progress.error-vapifault-inworld-voice-failed" | "call.in-progress.error-vapifault-minimax-voice-failed" + | "call.in-progress.error-vapifault-wellsaid-voice-failed" | "call.in-progress.error-vapifault-tavus-video-failed" | "pipeline-error-vapi-llm-failed" | "pipeline-error-vapi-400-bad-request-validation-failed" @@ -18090,6 +19669,22 @@ export interface Call { | "call.in-progress.error-vapifault-talkscriber-transcriber-failed" | "pipeline-error-azure-speech-transcriber-failed" | "call.in-progress.error-vapifault-azure-speech-transcriber-failed" + | "pipeline-error-eleven-labs-transcriber-failed" + | "call.in-progress.error-vapifault-eleven-labs-transcriber-failed" + | "pipeline-error-google-transcriber-failed" + | "call.in-progress.error-vapifault-google-transcriber-failed" + | "pipeline-error-openai-transcriber-failed" + | "call.in-progress.error-vapifault-openai-transcriber-failed" + | "pipeline-error-soniox-transcriber-auth-failed" + | "pipeline-error-soniox-transcriber-rate-limited" + | "pipeline-error-soniox-transcriber-invalid-config" + | "pipeline-error-soniox-transcriber-server-error" + | "pipeline-error-soniox-transcriber-failed" + | "call.in-progress.error-vapifault-soniox-transcriber-auth-failed" + | "call.in-progress.error-vapifault-soniox-transcriber-rate-limited" + | "call.in-progress.error-vapifault-soniox-transcriber-invalid-config" + | "call.in-progress.error-vapifault-soniox-transcriber-server-error" + | "call.in-progress.error-vapifault-soniox-transcriber-failed" | "call.in-progress.error-pipeline-no-available-llm-model" | "worker-shutdown" | "vonage-disconnected" @@ -18104,15 +19699,21 @@ export interface Call { | "call.in-progress.error-vapifault-worker-died" | "call.in-progress.twilio-completed-call" | "call.in-progress.sip-completed-call" + | "call.in-progress.error-sip-inbound-call-failed-to-connect" + | "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable" + | "call.in-progress.error-sip-outbound-call-failed-to-connect" + | "call.ringing.error-sip-inbound-call-failed-to-connect" | "call.in-progress.error-providerfault-openai-llm-failed" | "call.in-progress.error-providerfault-azure-openai-llm-failed" | "call.in-progress.error-providerfault-groq-llm-failed" | "call.in-progress.error-providerfault-google-llm-failed" | "call.in-progress.error-providerfault-xai-llm-failed" | "call.in-progress.error-providerfault-mistral-llm-failed" + | "call.in-progress.error-providerfault-minimax-llm-failed" | "call.in-progress.error-providerfault-inflection-ai-llm-failed" | "call.in-progress.error-providerfault-cerebras-llm-failed" | "call.in-progress.error-providerfault-deep-seek-llm-failed" + | "call.in-progress.error-providerfault-baseten-llm-failed" | "call.in-progress.error-vapifault-chat-pipeline-failed-to-start" | "pipeline-error-openai-400-bad-request-validation-failed" | "pipeline-error-openai-401-unauthorized" @@ -18172,6 +19773,19 @@ export interface Call { | "call.in-progress.error-vapifault-xai-429-exceeded-quota" | "call.in-progress.error-providerfault-xai-500-server-error" | "call.in-progress.error-providerfault-xai-503-server-overloaded-error" + | "pipeline-error-baseten-400-bad-request-validation-failed" + | "pipeline-error-baseten-401-unauthorized" + | "pipeline-error-baseten-403-model-access-denied" + | "pipeline-error-baseten-429-exceeded-quota" + | "pipeline-error-baseten-500-server-error" + | "pipeline-error-baseten-503-server-overloaded-error" + | "pipeline-error-baseten-llm-failed" + | "call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed" + | "call.in-progress.error-vapifault-baseten-401-unauthorized" + | "call.in-progress.error-vapifault-baseten-403-model-access-denied" + | "call.in-progress.error-vapifault-baseten-429-exceeded-quota" + | "call.in-progress.error-providerfault-baseten-500-server-error" + | "call.in-progress.error-providerfault-baseten-503-server-overloaded-error" | "pipeline-error-mistral-400-bad-request-validation-failed" | "pipeline-error-mistral-401-unauthorized" | "pipeline-error-mistral-403-model-access-denied" @@ -18185,6 +19799,19 @@ export interface Call { | "call.in-progress.error-vapifault-mistral-429-exceeded-quota" | "call.in-progress.error-providerfault-mistral-500-server-error" | "call.in-progress.error-providerfault-mistral-503-server-overloaded-error" + | "pipeline-error-minimax-400-bad-request-validation-failed" + | "pipeline-error-minimax-401-unauthorized" + | "pipeline-error-minimax-403-model-access-denied" + | "pipeline-error-minimax-429-exceeded-quota" + | "pipeline-error-minimax-500-server-error" + | "pipeline-error-minimax-503-server-overloaded-error" + | "pipeline-error-minimax-llm-failed" + | "call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed" + | "call.in-progress.error-vapifault-minimax-401-unauthorized" + | "call.in-progress.error-vapifault-minimax-403-model-access-denied" + | "call.in-progress.error-vapifault-minimax-429-exceeded-quota" + | "call.in-progress.error-providerfault-minimax-500-server-error" + | "call.in-progress.error-providerfault-minimax-503-server-overloaded-error" | "pipeline-error-inflection-ai-400-bad-request-validation-failed" | "pipeline-error-inflection-ai-401-unauthorized" | "pipeline-error-inflection-ai-403-model-access-denied" @@ -18462,8 +20089,6 @@ export interface Call { | "call.in-progress.error-providerfault-playht-504-gateway-error" | "pipeline-error-custom-transcriber-failed" | "call.in-progress.error-vapifault-custom-transcriber-failed" - | "pipeline-error-eleven-labs-transcriber-failed" - | "call.in-progress.error-vapifault-eleven-labs-transcriber-failed" | "pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination" | "pipeline-error-deepgram-returning-401-invalid-credentials" | "pipeline-error-deepgram-returning-403-model-access-denied" @@ -18479,10 +20104,6 @@ export interface Call { | "call.in-progress.error-providerfault-deepgram-returning-500-invalid-json" | "call.in-progress.error-providerfault-deepgram-returning-502-network-error" | "call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach" - | "pipeline-error-google-transcriber-failed" - | "call.in-progress.error-vapifault-google-transcriber-failed" - | "pipeline-error-openai-transcriber-failed" - | "call.in-progress.error-vapifault-openai-transcriber-failed" | "call.in-progress.error-warm-transfer-max-duration" | "call.in-progress.error-warm-transfer-assistant-cancelled" | "call.in-progress.error-warm-transfer-silence-timeout" @@ -18499,6 +20120,7 @@ export interface Call { | "customer-ended-call" | "customer-ended-call-before-warm-transfer" | "customer-ended-call-after-warm-transfer-attempt" + | "customer-ended-call-during-transfer" | "customer-did-not-answer" | "customer-did-not-give-microphone-permission" | "exceeded-max-duration" @@ -18506,23 +20128,22 @@ export interface Call { | "phone-call-provider-closed-websocket" | "call.forwarding.operator-busy" | "silence-timed-out" - | "call.in-progress.error-sip-inbound-call-failed-to-connect" | "call.in-progress.error-providerfault-outbound-sip-403-forbidden" | "call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required" - | "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable" + | "call.in-progress.error-providerfault-outbound-sip-408-request-timeout" | "call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable" - | "call.in-progress.error-sip-outbound-call-failed-to-connect" | "call.ringing.hook-executed-say" | "call.ringing.hook-executed-transfer" | "call.ending.hook-executed-say" | "call.ending.hook-executed-transfer" | "call.ringing.sip-inbound-caller-hungup-before-call-connect" - | "call.ringing.error-sip-inbound-call-failed-to-connect" | "twilio-failed-to-connect-call" | "twilio-reported-customer-misdialed" | "vonage-rejected" | "voicemail" | "call-deleted"; + /** This is the message that adds more context to the ended reason. It can be used to provide potential error messages or warnings. */ + endedMessage?: string; /** This is the destination where the call ended up being transferred to. If the call was not transferred, this will be empty. */ destination?: TransferDestinationNumber | TransferDestinationSip; /** This is the unique identifier for the call. */ @@ -18684,6 +20305,74 @@ export interface CallBatchResponse { errors: CallBatchError[]; } +export interface AssistantSpeechWordAlignmentTiming { + /** Discriminator for exact per-word timing (e.g. ElevenLabs alignment). */ + type: "word-alignment"; + /** The individual words in this audio segment. */ + words: string[]; + /** Start time in milliseconds for each word (parallel to `words`). */ + wordsStartTimesMs: number[]; + /** End time in milliseconds for each word (parallel to `words`). */ + wordsEndTimesMs: number[]; +} + +export interface AssistantSpeechWordTimestamp { + /** The full word text (syllables aggregated into complete words). */ + word: string; + /** Start time in milliseconds relative to the segment start. */ + startMs: number; + /** End time in milliseconds relative to the segment start. */ + endMs: number; +} + +export interface AssistantSpeechWordProgressTiming { + /** Discriminator for cursor-based word progress (e.g. Minimax subtitle data). */ + type: "word-progress"; + /** Number of words spoken so far in this turn. */ + wordsSpoken: number; + /** + * Total number of words sent to the TTS provider for this turn. + * + * **Important**: this value grows across events within a single turn because + * Minimax synthesizes audio incrementally as the LLM streams tokens. Treat + * it as "best known total so far" — it will stabilize once synthesis is + * complete. + * + * A value of `0` is a valid sentinel meaning "not yet known". This can occur + * on the very first `assistant-speech` event of a turn if audio begins + * playing before the TTS provider has confirmed word-count data. Clients + * **must** guard against divide-by-zero when computing a progress fraction: + * + * ```ts + * const pct = totalWords > 0 ? wordsSpoken / totalWords : 0; + * ``` + */ + totalWords: number; + /** + * The text of the latest spoken segment (sentence or clause). Use this + * for caption display — it corresponds to the chunk just confirmed by + * the TTS provider, unlike `text` on the parent message which carries + * the full turn text. + */ + segment?: string; + /** + * Audio duration in milliseconds for the latest spoken segment. Pair + * with `segment` to animate karaoke-style word reveals — divide the + * segment text across this duration for approximate per-word timing. + */ + segmentDurationMs?: number; + /** + * Per-word timestamps for the latest spoken segment. Available when the + * TTS provider supports word-level timing (e.g. Minimax with + * subtitle_type: "word"). Syllables from the provider are aggregated + * into whole words with start/end times relative to the segment start. + * + * Use these for precise karaoke-style highlighting instead of + * interpolating from segmentDurationMs. + */ + words?: AssistantSpeechWordTimestamp[]; +} + export interface CreateCallDTO { /** * This is used to issue batch calls to multiple customers. @@ -19056,6 +20745,8 @@ export interface UserMessage { originalMessage?: string; /** The metadata associated with the message. Currently used to store the transcriber's word level confidence. */ metadata?: object; + /** Stable speaker label for diarized user speakers (e.g., "Speaker 1"). */ + speakerLabel?: string; } export interface ToolCallFunction { @@ -19241,6 +20932,8 @@ export interface TwilioSMSChatTransport { * If provided, will create a new session. If not provided, uses existing session's customer. */ customer?: CreateCustomerDTO; + /** This is the customerId of the customer who will receive the SMS. */ + customerId?: string; /** * Whether to use LLM-generated messages for outbound SMS. * When true (default), input is processed by the assistant for a response. @@ -19316,8 +21009,15 @@ export interface CreateChatDTO { } export interface GetChatPaginatedDTO { + /** This is the unique identifier for the chat to filter by. */ + id?: string; /** This is the unique identifier for the assistant that will be used for the chat. */ assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; /** This is the unique identifier for the squad that will be used for the chat. */ squadId?: string; /** This is the unique identifier for the session that will be used for the chat. */ @@ -19331,6 +21031,8 @@ export interface GetChatPaginatedDTO { page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -19521,8 +21223,10 @@ export interface CreateWebCustomerDTO { } export interface CreateWebChatDTO { - /** The assistant ID to use for this chat */ - assistantId: string; + /** This is the assistant ID to use for this chat. To use a transient assistant, use `assistant` instead. */ + assistantId?: string; + /** This is the transient assistant configuration for this chat. To use an existing assistant, use `assistantId` instead. */ + assistant?: CreateAssistantDTO; /** * This is the ID of the session that will be used for the chat. * If provided, the conversation will continue from the previous state. @@ -19590,8 +21294,10 @@ export interface WebChat { } export interface OpenAIWebChatRequest { - /** The assistant ID to use for this chat */ - assistantId: string; + /** This is the assistant ID to use for this chat. To use a transient assistant, use `assistant` instead. */ + assistantId?: string; + /** This is the transient assistant configuration for this chat. To use an existing assistant, use `assistantId` instead. */ + assistant?: CreateAssistantDTO; /** * This is the ID of the session that will be used for the chat. * If provided, the conversation will continue from the previous state. @@ -19642,6 +21348,106 @@ export interface OpenAIWebChatRequest { sessionEnd?: boolean; } +export interface ExportChatDTO { + /** This is the unique identifier for the chat to filter by. */ + id?: string; + /** This is the unique identifier for the assistant that will be used for the chat. */ + assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; + /** This is the unique identifier for the squad that will be used for the chat. */ + squadId?: string; + /** This is the unique identifier for the session that will be used for the chat. */ + sessionId?: string; + /** This is the unique identifier for the previous chat to filter by. */ + previousChatId?: string; + /** + * Columns to include in the CSV export + * @default ["id","assistantId","squadId","sessionId","previousChatId","cost","messages","output","createdAt","updatedAt"] + */ + columns?: + | "id" + | "assistantId" + | "squadId" + | "sessionId" + | "previousChatId" + | "cost" + | "messages" + | "output" + | "createdAt" + | "updatedAt"; + /** + * This is the email address to send the export to. + * Required if userId is not available in the request context. + */ + email?: string; + /** + * This is the format of the export. + * + * @default csv + * @default "csv" + */ + format?: "csv" | "json"; + /** + * This is the page number to return. Defaults to 1. + * @min 1 + */ + page?: number; + /** This is the sort order for pagination. Defaults to 'DESC'. */ + sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; + /** + * This is the maximum number of items to return. Defaults to 100. + * @min 0 + * @max 1000 + */ + limit?: number; + /** + * This will return items where the createdAt is greater than the specified value. + * @format date-time + */ + createdAtGt?: string; + /** + * This will return items where the createdAt is less than the specified value. + * @format date-time + */ + createdAtLt?: string; + /** + * This will return items where the createdAt is greater than or equal to the specified value. + * @format date-time + */ + createdAtGe?: string; + /** + * This will return items where the createdAt is less than or equal to the specified value. + * @format date-time + */ + createdAtLe?: string; + /** + * This will return items where the updatedAt is greater than the specified value. + * @format date-time + */ + updatedAtGt?: string; + /** + * This will return items where the updatedAt is less than the specified value. + * @format date-time + */ + updatedAtLt?: string; + /** + * This will return items where the updatedAt is greater than or equal to the specified value. + * @format date-time + */ + updatedAtGe?: string; + /** + * This will return items where the updatedAt is less than or equal to the specified value. + * @format date-time + */ + updatedAtLe?: string; +} + export interface ResponseOutputText { /** * Annotations in the text output @@ -19764,22 +21570,33 @@ export interface ResponseErrorEvent { sequence_number: number; } +export interface DialPlanEntry { + /** The phone number ID to use for calling the customers in this entry. */ + phoneNumberId: string; + /** The list of customers to call using this phone number. */ + customers: CreateCustomerDTO[]; +} + export interface CreateCampaignDTO { /** * This is the name of the campaign. This is just for your own reference. * @example "Q2 Sales Campaign" */ name: string; - /** This is the assistant ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both. */ + /** This is the assistant ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used. */ assistantId?: string; - /** This is the workflow ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both. */ + /** This is the workflow ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used. */ workflowId?: string; - /** This is the phone number ID that will be used for the campaign calls. */ - phoneNumberId: string; + /** This is the squad ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used. */ + squadId?: string; + /** This is the phone number ID that will be used for the campaign calls. Required if dialPlan is not provided. Note: phoneNumberId and dialPlan are mutually exclusive. */ + phoneNumberId?: string; + /** This is a list of dial entries, each specifying a phone number and the customers to call using that number. Use this when you want different phone numbers to call different sets of customers. Note: phoneNumberId and dialPlan are mutually exclusive. */ + dialPlan?: DialPlanEntry[]; /** This is the schedule plan for the campaign. Calls will start at startedAt and continue until your organization’s concurrency limit is reached. Any remaining calls will be retried for up to one hour as capacity becomes available. After that hour or after latestAt, whichever comes first, any calls that couldn’t be placed won’t be retried. */ schedulePlan?: SchedulePlan; - /** These are the customers that will be called in the campaign. */ - customers: CreateCustomerDTO[]; + /** These are the customers that will be called in the campaign. Required if dialPlan is not provided. */ + customers?: CreateCustomerDTO[]; } export interface Campaign { @@ -19795,16 +21612,20 @@ export interface Campaign { * @example "Q2 Sales Campaign" */ name: string; - /** This is the assistant ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both. */ + /** This is the assistant ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used. */ assistantId?: string; - /** This is the workflow ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both. */ + /** This is the workflow ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used. */ workflowId?: string; - /** This is the phone number ID that will be used for the campaign calls. */ - phoneNumberId: string; + /** This is the squad ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used. */ + squadId?: string; + /** This is the phone number ID that will be used for the campaign calls. Required if dialPlan is not provided. Note: phoneNumberId and dialPlan are mutually exclusive. */ + phoneNumberId?: string; + /** This is a list of dial entries, each specifying a phone number and the customers to call using that number. Use this when you want different phone numbers to call different sets of customers. Note: phoneNumberId and dialPlan are mutually exclusive. */ + dialPlan?: DialPlanEntry[]; /** This is the schedule plan for the campaign. Calls will start at startedAt and continue until your organization’s concurrency limit is reached. Any remaining calls will be retried for up to one hour as capacity becomes available. After that hour or after latestAt, whichever comes first, any calls that couldn’t be placed won’t be retried. */ schedulePlan?: SchedulePlan; - /** These are the customers that will be called in the campaign. */ - customers: CreateCustomerDTO[]; + /** These are the customers that will be called in the campaign. Required if dialPlan is not provided. */ + customers?: CreateCustomerDTO[]; /** This is the unique identifier for the campaign. */ id: string; /** This is the unique identifier for the org that this campaign belongs to. */ @@ -19851,11 +21672,19 @@ export interface UpdateCampaignDTO { * Can only be updated if campaign is not in progress or has ended. */ workflowId?: string; + /** + * This is the squad ID that will be used for the campaign calls. + * Can only be updated if campaign is not in progress or has ended. + */ + squadId?: string; /** * This is the phone number ID that will be used for the campaign calls. * Can only be updated if campaign is not in progress or has ended. + * Note: `phoneNumberId` and `dialPlan` are mutually exclusive. */ phoneNumberId?: string; + /** This is a list of dial entries, each specifying a phone number and the customers to call using that number. Can only be updated if campaign is not in progress or has ended. Note: phoneNumberId and dialPlan are mutually exclusive. */ + dialPlan?: DialPlanEntry[]; /** * This is the schedule plan for the campaign. * Can only be updated if campaign is not in progress or has ended. @@ -19869,6 +21698,67 @@ export interface UpdateCampaignDTO { status?: "ended"; } +export interface RelayTargetAssistant { + /** The type of relay target */ + type: "assistant"; + /** The unique identifier of the assistant */ + assistantId?: string; + /** The name of the assistant */ + assistantName?: string; +} + +export interface RelayTargetSquad { + /** The type of relay target */ + type: "squad"; + /** The unique identifier of the squad */ + squadId?: string; + /** The name of the squad */ + squadName?: string; +} + +export interface RelayTargetOptions { + type: "assistant" | "squad"; +} + +export interface RelayCommandSay { + /** The type of relay command */ + type: "say"; + /** The content for the assistant to speak */ + content: string; +} + +export interface RelayCommandNote { + /** The type of relay command */ + type: "message.add"; + /** The note content to add to the conversation */ + content: string; +} + +export interface RelayCommandOptions { + type: "say" | "message.add"; +} + +export interface RelayRequest { + /** The source identifier of the relay request */ + source: string; + /** The target assistant or squad to relay the commands to */ + target: RelayTargetAssistant | RelayTargetSquad; + /** The unique identifier of the customer */ + customerId: string; + /** The list of commands to relay to the target */ + commands: (RelayCommandSay | RelayCommandNote)[]; +} + +export interface RelayResponse { + /** The status of the relay request */ + status: "deliveredLive" | "deliveredHeadless" | "failed"; + /** The unique identifier of the call, if delivered to a live call */ + callId?: string; + /** The unique identifier of the session, if delivered to a headless session */ + sessionId?: string; + chatId?: string; +} + export interface Session { /** This is the unique identifier for the session. */ id: string; @@ -19909,6 +21799,12 @@ export interface Session { * If assistantId is provided, this will be ignored. */ assistant?: CreateAssistantDTO; + /** + * These are the overrides for the assistant configuration. + * Use this to provide variable values and other overrides when using assistantId. + * Variable substitution will be applied to the assistant's messages and other text-based fields. + */ + assistantOverrides?: AssistantOverrides; /** This is the squad ID associated with this session. Use this when referencing an existing squad. */ squadId?: string; /** @@ -19926,6 +21822,8 @@ export interface Session { )[]; /** This is the customer information associated with this session. */ customer?: CreateCustomerDTO; + /** This is the customerId of the customer associated with this session. */ + customerId?: string; /** This is the ID of the phone number associated with this session. */ phoneNumberId?: string; /** This is the phone number configuration for this session. */ @@ -19962,6 +21860,12 @@ export interface CreateSessionDTO { * If assistantId is provided, this will be ignored. */ assistant?: CreateAssistantDTO; + /** + * These are the overrides for the assistant configuration. + * Use this to provide variable values and other overrides when using assistantId. + * Variable substitution will be applied to the assistant's messages and other text-based fields. + */ + assistantOverrides?: AssistantOverrides; /** This is the squad ID associated with this session. Use this when referencing an existing squad. */ squadId?: string; /** @@ -19979,6 +21883,8 @@ export interface CreateSessionDTO { )[]; /** This is the customer information associated with this session. */ customer?: CreateCustomerDTO; + /** This is the customerId of the customer associated with this session. */ + customerId?: string; /** This is the ID of the phone number associated with this session. */ phoneNumberId?: string; /** This is the phone number configuration for this session. */ @@ -20011,16 +21917,32 @@ export interface UpdateSessionDTO { } export interface GetSessionPaginatedDTO { + /** This is the unique identifier for the session to filter by. */ + id?: string; /** This is the name of the session to filter by. */ name?: string; /** This is the ID of the assistant to filter sessions by. */ assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; /** This is the ID of the squad to filter sessions by. */ squadId?: string; /** This is the ID of the workflow to filter sessions by. */ workflowId?: string; /** This is the customer information to filter by. */ customer?: CreateCustomerDTO; + /** + * Filter by any of the specified customer phone numbers (comma-separated). + * @example "+1234567890,+0987654321" + */ + customerNumberAny?: string; + /** This will return sessions with the specified phoneNumberId. */ + phoneNumberId?: string; + /** This will return sessions with any of the specified phoneNumberIds. */ + phoneNumberIdAny?: string[]; /** * This is the page number to return. Defaults to 1. * @min 1 @@ -20028,6 +21950,8 @@ export interface GetSessionPaginatedDTO { page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -20081,6 +22005,119 @@ export interface SessionPaginatedResponse { metadata: PaginationMeta; } +export interface ExportSessionDTO { + /** This is the unique identifier for the session to filter by. */ + id?: string; + /** This is the name of the session to filter by. */ + name?: string; + /** This is the ID of the assistant to filter sessions by. */ + assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; + /** This is the ID of the squad to filter sessions by. */ + squadId?: string; + /** This is the ID of the workflow to filter sessions by. */ + workflowId?: string; + /** This is the customer information to filter by. */ + customer?: CreateCustomerDTO; + /** + * Filter by any of the specified customer phone numbers (comma-separated). + * @example "+1234567890,+0987654321" + */ + customerNumberAny?: string; + /** + * Columns to include in the CSV export + * @default ["id","name","status","assistantId","squadId","customerName","customerNumber","phoneNumberId","cost","messages","createdAt","updatedAt"] + */ + columns?: + | "id" + | "name" + | "status" + | "assistantId" + | "squadId" + | "customerName" + | "customerNumber" + | "phoneNumberId" + | "cost" + | "messages" + | "createdAt" + | "updatedAt"; + /** + * This is the email address to send the export to. + * Required if userId is not available in the request context. + */ + email?: string; + /** + * This is the format of the export. + * + * @default csv + * @default "csv" + */ + format?: "csv" | "json"; + /** This will return sessions with the specified phoneNumberId. */ + phoneNumberId?: string; + /** This will return sessions with any of the specified phoneNumberIds. */ + phoneNumberIdAny?: string[]; + /** + * This is the page number to return. Defaults to 1. + * @min 1 + */ + page?: number; + /** This is the sort order for pagination. Defaults to 'DESC'. */ + sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; + /** + * This is the maximum number of items to return. Defaults to 100. + * @min 0 + * @max 1000 + */ + limit?: number; + /** + * This will return items where the createdAt is greater than the specified value. + * @format date-time + */ + createdAtGt?: string; + /** + * This will return items where the createdAt is less than the specified value. + * @format date-time + */ + createdAtLt?: string; + /** + * This will return items where the createdAt is greater than or equal to the specified value. + * @format date-time + */ + createdAtGe?: string; + /** + * This will return items where the createdAt is less than or equal to the specified value. + * @format date-time + */ + createdAtLe?: string; + /** + * This will return items where the updatedAt is greater than the specified value. + * @format date-time + */ + updatedAtGt?: string; + /** + * This will return items where the updatedAt is less than the specified value. + * @format date-time + */ + updatedAtLt?: string; + /** + * This will return items where the updatedAt is greater than or equal to the specified value. + * @format date-time + */ + updatedAtGe?: string; + /** + * This will return items where the updatedAt is less than or equal to the specified value. + * @format date-time + */ + updatedAtLe?: string; +} + export interface ByoPhoneNumber { /** * This is the fallback destination an inbound call will be transferred to if: @@ -21208,6 +23245,10 @@ export interface ApiRequestTool { * @example "550e8400-e29b-41d4-a716-446655440000" */ credentialId?: string; + /** This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. */ + encryptedPaths?: string[]; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -21483,7 +23524,23 @@ export interface ApiRequestTool { variableExtractionPlan?: VariableExtractionPlan; } -export interface DtmfTool { +export interface CodeToolEnvironmentVariable { + /** + * Name of the environment variable + * @maxLength 64 + * @pattern /^[A-Z][A-Z0-9_]*$/ + * @example "API_KEY" + */ + name: string; + /** + * Value of the environment variable. Supports Liquid templates. + * @maxLength 10000 + * @example "{{apiKey}}" + */ + value: string; +} + +export interface CodeTool { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -21495,8 +23552,55 @@ export interface DtmfTool { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "dtmf" for DTMF tool. */ - type: "dtmf"; + /** The type of tool. "code" for Code tool. */ + type: "code"; + /** + * This determines if the tool is async. + * + * If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. + * + * If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. + * + * Defaults to synchronous (`false`). + * @example false + */ + async?: boolean; + /** + * + * This is the server where a `tool-calls` webhook will be sent. + * + * Notes: + * - Webhook is sent to this server when a tool call is made. + * - Webhook contains the call, assistant, and phone number objects. + * - Webhook contains the variables set on the assistant. + * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}. + * - Webhook expects a response with tool call result. + */ + server?: Server; + /** + * TypeScript code to execute when the tool is called + * @maxLength 50000 + */ + code: string; + /** Environment variables available in code via `env` object */ + environmentVariables?: CodeToolEnvironmentVariable[]; + /** + * This is the timeout in seconds for the code execution. Defaults to 10 seconds. + * Maximum is 30 seconds to prevent abuse. + * + * @default 10 + * @min 1 + * @max 30 + * @example 10 + */ + timeoutSeconds?: number; + /** + * Credential ID containing the Val Town API key + * @example "550e8400-e29b-41d4-a716-446655440000" + */ + credentialId?: string; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -21592,9 +23696,16 @@ export interface DtmfTool { * ``` */ rejectionPlan?: ToolRejectionPlan; + /** + * This is the function definition of the tool. + * + * For the Code tool, this defines the name, description, and parameters that the model + * will use to understand when and how to call this tool. + */ + function?: OpenAIFunction; } -export interface EndCallTool { +export interface DtmfTool { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -21606,8 +23717,13 @@ export interface EndCallTool { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "endCall" for End Call tool. */ - type: "endCall"; + /** The type of tool. "dtmf" for DTMF tool. */ + type: "dtmf"; + /** + * This enables sending DTMF tones via SIP INFO messages instead of RFC 2833 (RTP events). When enabled, DTMF digits will be sent using the SIP INFO method, which can be more reliable in some network configurations. Only relevant when using the `vapi.sip` transport. + * @default false + */ + sipInfoDtmfEnabled?: boolean; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -21705,7 +23821,7 @@ export interface EndCallTool { rejectionPlan?: ToolRejectionPlan; } -export interface FunctionTool { +export interface EndCallTool { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -21717,31 +23833,8 @@ export interface FunctionTool { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "function" for Function tool. */ - type: "function"; - /** - * This determines if the tool is async. - * - * If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. - * - * If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. - * - * Defaults to synchronous (`false`). - * @example false - */ - async?: boolean; - /** - * - * This is the server where a `tool-calls` webhook will be sent. - * - * Notes: - * - Webhook is sent to this server when a tool call is made. - * - Webhook contains the call, assistant, and phone number objects. - * - Webhook contains the variables set on the assistant. - * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}. - * - Webhook expects a response with tool call result. - */ - server?: Server; + /** The type of tool. "endCall" for End Call tool. */ + type: "endCall"; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -21837,11 +23930,9 @@ export interface FunctionTool { * ``` */ rejectionPlan?: ToolRejectionPlan; - /** This is the function definition of the tool. */ - function?: OpenAIFunction; } -export interface GhlTool { +export interface FunctionTool { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -21853,8 +23944,35 @@ export interface GhlTool { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "ghl" for GHL tool. */ - type: "ghl"; + /** The type of tool. "function" for Function tool. */ + type: "function"; + /** + * This determines if the tool is async. + * + * If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. + * + * If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. + * + * Defaults to synchronous (`false`). + * @example false + */ + async?: boolean; + /** + * + * This is the server where a `tool-calls` webhook will be sent. + * + * Notes: + * - Webhook is sent to this server when a tool call is made. + * - Webhook contains the call, assistant, and phone number objects. + * - Webhook contains the variables set on the assistant. + * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}. + * - Webhook expects a response with tool call result. + */ + server?: Server; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -21950,10 +24068,11 @@ export interface GhlTool { * ``` */ rejectionPlan?: ToolRejectionPlan; - metadata: GhlToolMetadata; + /** This is the function definition of the tool. */ + function?: OpenAIFunction; } -export interface MakeTool { +export interface GhlTool { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -21965,8 +24084,8 @@ export interface MakeTool { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "make" for Make tool. */ - type: "make"; + /** The type of tool. "ghl" for GHL tool. */ + type: "ghl"; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -22062,10 +24181,10 @@ export interface MakeTool { * ``` */ rejectionPlan?: ToolRejectionPlan; - metadata: MakeToolMetadata; + metadata: GhlToolMetadata; } -export interface TransferCallTool { +export interface MakeTool { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -22077,13 +24196,8 @@ export interface TransferCallTool { | ToolMessageFailed | ToolMessageDelayed )[]; - type: "transferCall"; - /** These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called. */ - destinations?: ( - | TransferDestinationAssistant - | TransferDestinationNumber - | TransferDestinationSip - )[]; + /** The type of tool. "make" for Make tool. */ + type: "make"; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -22179,9 +24293,10 @@ export interface TransferCallTool { * ``` */ rejectionPlan?: ToolRejectionPlan; + metadata: MakeToolMetadata; } -export interface HandoffTool { +export interface TransferCallTool { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -22193,190 +24308,312 @@ export interface HandoffTool { | ToolMessageFailed | ToolMessageDelayed )[]; - /** - * This is the type of the tool. - * When you're using handoff tool, we recommend adding this to your system prompt - * --- - * # System context - * - * You are part of a multi-agent system designed to make agent coordination and execution easy. Agents uses two primary abstraction: **Agents** and **Handoffs**. An agent encompasses instructions and tools and can hand off a conversation to another agent when appropriate. Handoffs are achieved by calling a handoff function, generally named `handoff_to_`. Handoffs between agents are handled seamlessly in the background; do not mention or draw attention to these handoffs in your conversation with the user. - * - * # Agent context - * - * {put your agent system prompt here} - * --- - */ - type: "handoff"; - /** - * These are the destinations that the call can be handed off to. - * - * Usage: - * 1. Single destination - * - * Use `assistantId` to handoff the call to a saved assistant, or `assistantName` to handoff the call to an assistant in the same squad. - * - * ```json - * { - * "tools": [ - * { - * "type": "handoff", - * "destinations": [ - * { - * "type": "assistant", - * "assistantId": "assistant-123", // or "assistantName": "Assistant123" - * "description": "customer wants to be handed off to assistant-123", - * "contextEngineeringPlan": { - * "type": "all" - * } - * } - * ], - * } - * ] - * } - * ``` - * - * 2. Multiple destinations - * - * 2.1. Multiple Tools, Each With One Destination (OpenAI recommended) - * - * ```json - * { - * "tools": [ - * { - * "type": "handoff", - * "destinations": [ - * { - * "type": "assistant", - * "assistantId": "assistant-123", - * "description": "customer wants to be handed off to assistant-123", - * "contextEngineeringPlan": { - * "type": "all" - * } - * }, - * ], - * }, - * { - * "type": "handoff", - * "destinations": [ - * { - * "type": "assistant", - * "assistantId": "assistant-456", - * "description": "customer wants to be handed off to assistant-456", - * "contextEngineeringPlan": { - * "type": "all" - * } - * } - * ], - * } - * ] - * } - * ``` - * - * 2.2. One Tool, Multiple Destinations (Anthropic recommended) - * - * ```json - * { - * "tools": [ - * { - * "type": "handoff", - * "destinations": [ - * { - * "type": "assistant", - * "assistantId": "assistant-123", - * "description": "customer wants to be handed off to assistant-123", - * "contextEngineeringPlan": { - * "type": "all" - * } - * }, - * { - * "type": "assistant", - * "assistantId": "assistant-456", - * "description": "customer wants to be handed off to assistant-456", - * "contextEngineeringPlan": { - * "type": "all" - * } - * } - * ], - * } - * ] - * } - * ``` - * - * 3. Dynamic destination - * - * 3.1 To determine the destination dynamically, supply a `dynamic` handoff destination type and a `server` object. - * VAPI will send a handoff-destination-request webhook to the `server.url`. - * The response from the server will be used as the destination (if valid). - * - * ```json - * { - * "tools": [ - * { - * "type": "handoff", - * "destinations": [ - * { - * "type": "dynamic", - * "server": { - * "url": "https://example.com" - * } - * } - * ], - * } - * ] - * } - * ``` - * - * 3.2. To pass custom parameters to the server, you can use the `function` object. - * - * ```json - * { - * "tools": [ - * { - * "type": "handoff", - * "destinations": [ - * { - * "type": "dynamic", - * "server": { - * "url": "https://example.com" - * }, - * } - * ], - * "function": { - * "name": "handoff", - * "description": "Call this function when the customer is ready to be handed off to the next assistant", - * "parameters": { - * "type": "object", - * "properties": { - * "destination": { - * "type": "string", - * "description": "Use dynamic when customer is ready to be handed off to the next assistant", - * "enum": ["dynamic"] - * }, - * "customerAreaCode": { - * "type": "number", - * "description": "Area code of the customer" - * }, - * "customerIntent": { - * "type": "string", - * "enum": ["new-customer", "existing-customer"], - * "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer" - * }, - * "customerSentiment": { - * "type": "string", - * "enum": ["positive", "negative", "neutral"], - * "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral" - * } - * } - * } - * } - * } - * ] - * } - * ``` - * - * The properties `customerAreaCode`, `customerIntent`, and `customerSentiment` will be passed to the server in the webhook request body. - */ - destinations?: (HandoffDestinationAssistant | HandoffDestinationDynamic)[]; + type: "transferCall"; + /** These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called. */ + destinations?: ( + | TransferDestinationAssistant + | TransferDestinationNumber + | TransferDestinationSip + )[]; + /** This is the unique identifier for the tool. */ + id: string; + /** This is the unique identifier for the organization that this tool belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the tool was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the tool was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + +export interface HandoffTool { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** + * This is the type of the tool. + * When you're using handoff tool, we recommend adding this to your system prompt + * --- + * # System context + * + * You are part of a multi-agent system designed to make agent coordination and execution easy. Agents uses two primary abstraction: **Agents** and **Handoffs**. An agent encompasses instructions and tools and can hand off a conversation to another agent when appropriate. Handoffs are achieved by calling a handoff function, generally named `handoff_to_`. Handoffs between agents are handled seamlessly in the background; do not mention or draw attention to these handoffs in your conversation with the user. + * + * # Agent context + * + * {put your agent system prompt here} + * --- + */ + type: "handoff"; + /** This is the default local tool result message used when no runtime handoff result override is returned. */ + defaultResult?: string; + /** + * These are the destinations that the call can be handed off to. + * + * Usage: + * 1. Single destination + * + * Use `assistantId` to handoff the call to a saved assistant, or `assistantName` to handoff the call to an assistant in the same squad. + * + * ```json + * { + * "tools": [ + * { + * "type": "handoff", + * "destinations": [ + * { + * "type": "assistant", + * "assistantId": "assistant-123", // or "assistantName": "Assistant123" + * "description": "customer wants to be handed off to assistant-123", + * "contextEngineeringPlan": { + * "type": "all" + * } + * } + * ], + * } + * ] + * } + * ``` + * + * 2. Multiple destinations + * + * 2.1. Multiple Tools, Each With One Destination (OpenAI recommended) + * + * ```json + * { + * "tools": [ + * { + * "type": "handoff", + * "destinations": [ + * { + * "type": "assistant", + * "assistantId": "assistant-123", + * "description": "customer wants to be handed off to assistant-123", + * "contextEngineeringPlan": { + * "type": "all" + * } + * }, + * ], + * }, + * { + * "type": "handoff", + * "destinations": [ + * { + * "type": "assistant", + * "assistantId": "assistant-456", + * "description": "customer wants to be handed off to assistant-456", + * "contextEngineeringPlan": { + * "type": "all" + * } + * } + * ], + * } + * ] + * } + * ``` + * + * 2.2. One Tool, Multiple Destinations (Anthropic recommended) + * + * ```json + * { + * "tools": [ + * { + * "type": "handoff", + * "destinations": [ + * { + * "type": "assistant", + * "assistantId": "assistant-123", + * "description": "customer wants to be handed off to assistant-123", + * "contextEngineeringPlan": { + * "type": "all" + * } + * }, + * { + * "type": "assistant", + * "assistantId": "assistant-456", + * "description": "customer wants to be handed off to assistant-456", + * "contextEngineeringPlan": { + * "type": "all" + * } + * } + * ], + * } + * ] + * } + * ``` + * + * 3. Dynamic destination + * + * 3.1 To determine the destination dynamically, supply a `dynamic` handoff destination type and a `server` object. + * VAPI will send a handoff-destination-request webhook to the `server.url`. + * The response from the server will be used as the destination (if valid). + * + * ```json + * { + * "tools": [ + * { + * "type": "handoff", + * "destinations": [ + * { + * "type": "dynamic", + * "server": { + * "url": "https://example.com" + * } + * } + * ], + * } + * ] + * } + * ``` + * + * 3.2. To pass custom parameters to the server, you can use the `function` object. + * + * ```json + * { + * "tools": [ + * { + * "type": "handoff", + * "destinations": [ + * { + * "type": "dynamic", + * "server": { + * "url": "https://example.com" + * }, + * } + * ], + * "function": { + * "name": "handoff", + * "description": "Call this function when the customer is ready to be handed off to the next assistant", + * "parameters": { + * "type": "object", + * "properties": { + * "destination": { + * "type": "string", + * "description": "Use dynamic when customer is ready to be handed off to the next assistant", + * "enum": ["dynamic"] + * }, + * "customerAreaCode": { + * "type": "number", + * "description": "Area code of the customer" + * }, + * "customerIntent": { + * "type": "string", + * "enum": ["new-customer", "existing-customer"], + * "description": "Use new-customer when customer is a new customer, existing-customer when customer is an existing customer" + * }, + * "customerSentiment": { + * "type": "string", + * "enum": ["positive", "negative", "neutral"], + * "description": "Use positive when customer is happy, negative when customer is unhappy, neutral when customer is neutral" + * } + * } + * } + * } + * } + * ] + * } + * ``` + * + * The properties `customerAreaCode`, `customerIntent`, and `customerSentiment` will be passed to the server in the webhook request body. + */ + destinations?: ( + | HandoffDestinationAssistant + | HandoffDestinationDynamic + | HandoffDestinationSquad + )[]; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -23777,6 +26014,8 @@ export interface McpTool { * - Webhook expects a response with tool call result. */ server?: Server; + /** Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool. */ + toolMessages?: McpToolMessages[]; /** This is the unique identifier for the tool. */ id: string; /** This is the unique identifier for the organization that this tool belongs to. */ @@ -24319,6 +26558,242 @@ export interface GoHighLevelContactGetTool { rejectionPlan?: ToolRejectionPlan; } +export interface SipRequestTool { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** The type of tool. "sipRequest" for SIP request tool. */ + type: "sipRequest"; + /** The SIP method to send. */ + verb: "INFO" | "MESSAGE" | "NOTIFY"; + /** JSON schema for headers the model should populate when sending the SIP request. */ + headers?: JsonSchema; + /** Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate. */ + body?: string | JsonSchema; + /** This is the unique identifier for the tool. */ + id: string; + /** This is the unique identifier for the organization that this tool belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the tool was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the tool was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + +export interface VoicemailTool { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** The type of tool. "voicemail" for Voicemail tool. */ + type: "voicemail"; + /** + * This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls. + * + * @default false + * @default false + * @example false + */ + beepDetectionEnabled?: boolean; + /** This is the unique identifier for the tool. */ + id: string; + /** This is the unique identifier for the organization that this tool belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the tool was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the tool was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + export interface CreateApiRequestToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. @@ -24348,6 +26823,10 @@ export interface CreateApiRequestToolDTO { * @example "550e8400-e29b-41d4-a716-446655440000" */ credentialId?: string; + /** This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. */ + encryptedPaths?: string[]; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; /** * This is the name of the tool. This will be passed to the model. * @@ -24609,7 +27088,7 @@ export interface CreateApiRequestToolDTO { rejectionPlan?: ToolRejectionPlan; } -export interface CreateOutputToolDTO { +export interface CreateCodeToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -24621,8 +27100,62 @@ export interface CreateOutputToolDTO { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "output" for Output tool. */ - type: "output"; + /** The type of tool. "code" for Code tool. */ + type: "code"; + /** + * This determines if the tool is async. + * + * If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. + * + * If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. + * + * Defaults to synchronous (`false`). + * @example false + */ + async?: boolean; + /** + * + * This is the server where a `tool-calls` webhook will be sent. + * + * Notes: + * - Webhook is sent to this server when a tool call is made. + * - Webhook contains the call, assistant, and phone number objects. + * - Webhook contains the variables set on the assistant. + * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}. + * - Webhook expects a response with tool call result. + */ + server?: Server; + /** + * TypeScript code to execute when the tool is called + * @maxLength 50000 + */ + code: string; + /** Environment variables available in code via `env` object */ + environmentVariables?: CodeToolEnvironmentVariable[]; + /** + * This is the timeout in seconds for the code execution. Defaults to 10 seconds. + * Maximum is 30 seconds to prevent abuse. + * + * @default 10 + * @min 1 + * @max 30 + * @example 10 + */ + timeoutSeconds?: number; + /** + * Credential ID containing the Val Town API key + * @example "550e8400-e29b-41d4-a716-446655440000" + */ + credentialId?: string; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; + /** + * This is the function definition of the tool. + * + * For the Code tool, this defines the name, description, and parameters that the model + * will use to understand when and how to call this tool. + */ + function?: OpenAIFunction; /** * This is the plan to reject a tool call based on the conversation state. * @@ -24706,7 +27239,7 @@ export interface CreateOutputToolDTO { rejectionPlan?: ToolRejectionPlan; } -export interface CreateBashToolDTO { +export interface CreateOutputToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -24718,27 +27251,8 @@ export interface CreateBashToolDTO { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "bash" for Bash tool. */ - type: "bash"; - /** The sub type of tool. */ - subType: "bash_20241022"; - /** - * - * This is the server where a `tool-calls` webhook will be sent. - * - * Notes: - * - Webhook is sent to this server when a tool call is made. - * - Webhook contains the call, assistant, and phone number objects. - * - Webhook contains the variables set on the assistant. - * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}. - * - Webhook expects a response with tool call result. - */ - server?: Server; - /** - * The name of the tool, fixed to 'bash' - * @default "bash" - */ - name: "bash"; + /** The type of tool. "output" for Output tool. */ + type: "output"; /** * This is the plan to reject a tool call based on the conversation state. * @@ -24822,7 +27336,7 @@ export interface CreateBashToolDTO { rejectionPlan?: ToolRejectionPlan; } -export interface CreateComputerToolDTO { +export interface CreateBashToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -24834,10 +27348,10 @@ export interface CreateComputerToolDTO { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "computer" for Computer tool. */ - type: "computer"; + /** The type of tool. "bash" for Bash tool. */ + type: "bash"; /** The sub type of tool. */ - subType: "computer_20241022"; + subType: "bash_20241022"; /** * * This is the server where a `tool-calls` webhook will be sent. @@ -24851,16 +27365,10 @@ export interface CreateComputerToolDTO { */ server?: Server; /** - * The name of the tool, fixed to 'computer' - * @default "computer" + * The name of the tool, fixed to 'bash' + * @default "bash" */ - name: "computer"; - /** The display width in pixels */ - displayWidthPx: number; - /** The display height in pixels */ - displayHeightPx: number; - /** Optional display number */ - displayNumber?: number; + name: "bash"; /** * This is the plan to reject a tool call based on the conversation state. * @@ -24944,7 +27452,7 @@ export interface CreateComputerToolDTO { rejectionPlan?: ToolRejectionPlan; } -export interface CreateTextEditorToolDTO { +export interface CreateComputerToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -24956,10 +27464,10 @@ export interface CreateTextEditorToolDTO { | ToolMessageFailed | ToolMessageDelayed )[]; - /** The type of tool. "textEditor" for Text Editor tool. */ - type: "textEditor"; + /** The type of tool. "computer" for Computer tool. */ + type: "computer"; /** The sub type of tool. */ - subType: "text_editor_20241022"; + subType: "computer_20241022"; /** * * This is the server where a `tool-calls` webhook will be sent. @@ -24973,10 +27481,132 @@ export interface CreateTextEditorToolDTO { */ server?: Server; /** - * The name of the tool, fixed to 'str_replace_editor' - * @default "str_replace_editor" + * The name of the tool, fixed to 'computer' + * @default "computer" */ - name: "str_replace_editor"; + name: "computer"; + /** The display width in pixels */ + displayWidthPx: number; + /** The display height in pixels */ + displayHeightPx: number; + /** Optional display number */ + displayNumber?: number; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + +export interface CreateTextEditorToolDTO { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** The type of tool. "textEditor" for Text Editor tool. */ + type: "textEditor"; + /** The sub type of tool. */ + subType: "text_editor_20241022"; + /** + * + * This is the server where a `tool-calls` webhook will be sent. + * + * Notes: + * - Webhook is sent to this server when a tool call is made. + * - Webhook contains the call, assistant, and phone number objects. + * - Webhook contains the variables set on the assistant. + * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}. + * - Webhook expects a response with tool call result. + */ + server?: Server; + /** + * The name of the tool, fixed to 'str_replace_editor' + * @default "str_replace_editor" + */ + name: "str_replace_editor"; /** * This is the plan to reject a tool call based on the conversation state. * @@ -25157,6 +27787,109 @@ export interface CreateSmsToolDTO { rejectionPlan?: ToolRejectionPlan; } +export interface CreateSipRequestToolDTO { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** The type of tool. "sipRequest" for SIP request tool. */ + type: "sipRequest"; + /** The SIP method to send. */ + verb: "INFO" | "MESSAGE" | "NOTIFY"; + /** JSON schema for headers the model should populate when sending the SIP request. */ + headers?: JsonSchema; + /** Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate. */ + body?: string | JsonSchema; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + export interface UpdateApiRequestToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. @@ -25184,6 +27917,10 @@ export interface UpdateApiRequestToolDTO { * @example "550e8400-e29b-41d4-a716-446655440000" */ credentialId?: string; + /** This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. */ + encryptedPaths?: string[]; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; /** * This is the plan to reject a tool call based on the conversation state. * @@ -25445,7 +28182,7 @@ export interface UpdateApiRequestToolDTO { variableExtractionPlan?: VariableExtractionPlan; } -export interface UpdateDtmfToolDTO { +export interface UpdateCodeToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -25457,6 +28194,53 @@ export interface UpdateDtmfToolDTO { | ToolMessageFailed | ToolMessageDelayed )[]; + /** + * This determines if the tool is async. + * + * If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server. + * + * If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server. + * + * Defaults to synchronous (`false`). + * @example false + */ + async?: boolean; + /** + * + * This is the server where a `tool-calls` webhook will be sent. + * + * Notes: + * - Webhook is sent to this server when a tool call is made. + * - Webhook contains the call, assistant, and phone number objects. + * - Webhook contains the variables set on the assistant. + * - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}. + * - Webhook expects a response with tool call result. + */ + server?: Server; + /** + * TypeScript code to execute when the tool is called + * @maxLength 50000 + */ + code?: string; + /** Environment variables available in code via `env` object */ + environmentVariables?: CodeToolEnvironmentVariable[]; + /** + * This is the timeout in seconds for the code execution. Defaults to 10 seconds. + * Maximum is 30 seconds to prevent abuse. + * + * @default 10 + * @min 1 + * @max 30 + * @example 10 + */ + timeoutSeconds?: number; + /** + * Credential ID containing the Val Town API key + * @example "550e8400-e29b-41d4-a716-446655440000" + */ + credentialId?: string; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; /** * This is the plan to reject a tool call based on the conversation state. * @@ -25538,9 +28322,116 @@ export interface UpdateDtmfToolDTO { * ``` */ rejectionPlan?: ToolRejectionPlan; + /** + * This is the function definition of the tool. + * + * For the Code tool, this defines the name, description, and parameters that the model + * will use to understand when and how to call this tool. + */ + function?: OpenAIFunction; } -export interface UpdateEndCallToolDTO { +export interface UpdateDtmfToolDTO { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** + * This enables sending DTMF tones via SIP INFO messages instead of RFC 2833 (RTP events). When enabled, DTMF digits will be sent using the SIP INFO method, which can be more reliable in some network configurations. Only relevant when using the `vapi.sip` transport. + * @default false + */ + sipInfoDtmfEnabled?: boolean; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + +export interface UpdateEndCallToolDTO { /** * These are the messages that will be spoken to the user as the tool is running. * @@ -25670,6 +28561,10 @@ export interface UpdateFunctionToolDTO { * - Webhook expects a response with tool call result. */ server?: Server; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; /** * This is the plan to reject a tool call based on the conversation state. * @@ -25959,6 +28854,8 @@ export interface UpdateHandoffToolDTO { | ToolMessageFailed | ToolMessageDelayed )[]; + /** This is the default local tool result message used when no runtime handoff result override is returned. */ + defaultResult?: string; /** * These are the destinations that the call can be handed off to. * @@ -26128,7 +29025,11 @@ export interface UpdateHandoffToolDTO { * * The properties `customerAreaCode`, `customerIntent`, and `customerSentiment` will be passed to the server in the webhook request body. */ - destinations?: (HandoffDestinationAssistant | HandoffDestinationDynamic)[]; + destinations?: ( + | HandoffDestinationAssistant + | HandoffDestinationDynamic + | HandoffDestinationSquad + )[]; /** * This is the plan to reject a tool call based on the conversation state. * @@ -27454,6 +30355,8 @@ export interface UpdateMcpToolDTO { * - Webhook expects a response with tool call result. */ server?: Server; + /** Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool. */ + toolMessages?: McpToolMessages[]; /** * This is the plan to reject a tool call based on the conversation state. * @@ -27918,6 +30821,210 @@ export interface UpdateGoHighLevelContactGetToolDTO { rejectionPlan?: ToolRejectionPlan; } +export interface UpdateSipRequestToolDTO { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** The SIP method to send. */ + verb?: "INFO" | "MESSAGE" | "NOTIFY"; + /** JSON schema for headers the model should populate when sending the SIP request. */ + headers?: JsonSchema; + /** Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate. */ + body?: string | JsonSchema; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + +export interface UpdateVoicemailToolDTO { + /** + * These are the messages that will be spoken to the user as the tool is running. + * + * For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured. + */ + messages?: ( + | ToolMessageStart + | ToolMessageComplete + | ToolMessageFailed + | ToolMessageDelayed + )[]; + /** + * This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls. + * + * @default false + * @default false + * @example false + */ + beepDetectionEnabled?: boolean; + /** + * This is the plan to reject a tool call based on the conversation state. + * + * // Example 1: Reject endCall if user didn't say goodbye + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '(?i)\\b(bye|goodbye|farewell|see you later|take care)\\b', + * target: { position: -1, role: 'user' }, + * negate: true // Reject if pattern does NOT match + * }] + * } + * ``` + * + * // Example 2: Reject transfer if user is actually asking a question + * ```json + * { + * conditions: [{ + * type: 'regex', + * regex: '\\?', + * target: { position: -1, role: 'user' } + * }] + * } + * ``` + * + * // Example 3: Reject transfer if user didn't mention transfer recently + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 5 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' %} + * {% assign mentioned = false %} + * {% for msg in userMessages %} + * {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %} + * {% assign mentioned = true %} + * {% break %} + * {% endif %} + * {% endfor %} + * {% if mentioned %} + * false + * {% else %} + * true + * {% endif %}` + * }] + * } + * ``` + * + * // Example 4: Reject endCall if the bot is looping and trying to exit + * ```json + * { + * conditions: [{ + * type: 'liquid', + * liquid: `{% assign recentMessages = messages | last: 6 %} + * {% assign userMessages = recentMessages | where: 'role', 'user' | reverse %} + * {% if userMessages.size < 3 %} + * false + * {% else %} + * {% assign msg1 = userMessages[0].content | downcase %} + * {% assign msg2 = userMessages[1].content | downcase %} + * {% assign msg3 = userMessages[2].content | downcase %} + * {% comment %} Check for repetitive messages {% endcomment %} + * {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %} + * true + * {% comment %} Check for common loop phrases {% endcomment %} + * {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %} + * true + * {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %} + * true + * {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %} + * true + * {% else %} + * false + * {% endif %} + * {% endif %}` + * }] + * } + * ``` + */ + rejectionPlan?: ToolRejectionPlan; +} + export interface CreateFileDTO { /** * This is the File you want to upload for use with the Knowledge Base. @@ -27970,42 +31077,6 @@ export interface UpdateFileDTO { name?: string; } -export interface TrieveKnowledgeBaseSearchPlan { - /** Specifies the number of top chunks to return. This corresponds to the `page_size` parameter in Trieve. */ - topK?: number; - /** If true, stop words (specified in server/src/stop-words.txt in the git repo) will be removed. This will preserve queries that are entirely stop words. */ - removeStopWords?: boolean; - /** This is the score threshold to filter out chunks with a score below the threshold for cosine distance metric. For Manhattan Distance, Euclidean Distance, and Dot Product, it will filter out scores above the threshold distance. This threshold applies before weight and bias modifications. If not specified, this defaults to no threshold. A threshold of 0 will default to no threshold. */ - scoreThreshold?: number; - /** This is the search method used when searching for relevant chunks from the vector store. */ - searchType: "fulltext" | "semantic" | "hybrid" | "bm25"; -} - -export interface TrieveKnowledgeBase { - /** - * This knowledge base is provided by Trieve. - * - * To learn more about Trieve, visit https://trieve.ai. - */ - provider: "trieve"; - /** This is the name of the knowledge base. */ - name?: string; - /** - * This is the searching plan used when searching for relevant chunks from the vector store. - * - * You should configure this if you're running into these issues: - * - Too much unnecessary context is being fed as knowledge base context. - * - Not enough relevant context is being fed as knowledge base context. - */ - searchPlan?: TrieveKnowledgeBaseSearchPlan; - /** This is the plan if you want us to create/import a new vector store using Trieve. */ - createPlan?: TrieveKnowledgeBaseImport; - /** This is the id of the knowledge base. */ - id: string; - /** This is the org id of the knowledge base. */ - orgId: string; -} - export interface CustomKnowledgeBase { /** This knowledge base is bring your own knowledge base implementation. */ provider: "custom-knowledge-base"; @@ -28057,42 +31128,6 @@ export interface CustomKnowledgeBase { orgId: string; } -export interface CreateTrieveKnowledgeBaseDTO { - /** - * This knowledge base is provided by Trieve. - * - * To learn more about Trieve, visit https://trieve.ai. - */ - provider: "trieve"; - /** This is the name of the knowledge base. */ - name?: string; - /** - * This is the searching plan used when searching for relevant chunks from the vector store. - * - * You should configure this if you're running into these issues: - * - Too much unnecessary context is being fed as knowledge base context. - * - Not enough relevant context is being fed as knowledge base context. - */ - searchPlan?: TrieveKnowledgeBaseSearchPlan; - /** This is the plan if you want us to create/import a new vector store using Trieve. */ - createPlan?: TrieveKnowledgeBaseImport; -} - -export interface UpdateTrieveKnowledgeBaseDTO { - /** This is the name of the knowledge base. */ - name?: string; - /** - * This is the searching plan used when searching for relevant chunks from the vector store. - * - * You should configure this if you're running into these issues: - * - Too much unnecessary context is being fed as knowledge base context. - * - Not enough relevant context is being fed as knowledge base context. - */ - searchPlan?: TrieveKnowledgeBaseSearchPlan; - /** This is the plan if you want us to create/import a new vector store using Trieve. */ - createPlan?: TrieveKnowledgeBaseImport; -} - export interface UpdateCustomKnowledgeBaseDTO { /** * This is where the knowledge base request will be sent. @@ -28138,53 +31173,40 @@ export interface UpdateCustomKnowledgeBaseDTO { server?: Server; } -export interface TrieveKnowledgeBaseChunkPlan { - /** These are the file ids that will be used to create the vector store. To upload files, use the `POST /files` endpoint. */ - fileIds?: string[]; - /** These are the websites that will be used to create the vector store. */ - websites?: string[]; - /** This is an optional field which allows you to specify the number of splits you want per chunk. If not specified, the default 20 is used. However, you may want to use a different number. */ - targetSplitsPerChunk?: number; - /** This is an optional field which allows you to specify the delimiters to use when splitting the file before chunking the text. If not specified, the default [.!?\n] are used to split into sentences. However, you may want to use spaces or other delimiters. */ - splitDelimiters?: string[]; - /** This is an optional field which allows you to specify whether or not to rebalance the chunks created from the file. If not specified, the default true is used. If true, Trieve will evenly distribute remainder splits across chunks such that 66 splits with a target_splits_per_chunk of 20 will result in 3 chunks with 22 splits each. */ - rebalanceChunks?: boolean; -} - -export interface TrieveKnowledgeBaseCreate { - /** This is to create a new dataset on Trieve. */ - type: "create"; - /** These are the chunk plans used to create the dataset. */ - chunkPlans: TrieveKnowledgeBaseChunkPlan[]; -} - -export interface TrieveKnowledgeBaseImport { - /** This is to import an existing dataset from Trieve. */ - type: "import"; - /** This is the `datasetId` of the dataset on your Trieve account. */ - providerId: string; -} - -export interface ComplianceOverride { +export interface StructuredOutput { /** - * Force storage for this output under HIPAA. Only enable if output contains no sensitive data. - * @example false + * This is the type of structured output. + * + * - 'ai': Uses an LLM to extract structured data from the conversation (default). + * - 'regex': Uses a regex pattern to extract data from the transcript without an LLM. */ - forceStoreOnHipaaEnabled?: boolean; -} - -export interface StructuredOutput { + type?: "ai" | "regex"; + /** + * This is the regex pattern to match against the transcript. + * + * Only used when type is 'regex'. Supports both raw patterns (e.g. '\d+') and + * regex literal format (e.g. '/\d+/gi'). Uses RE2 syntax for safety. + * + * The result depends on the schema type: + * - boolean: true if the pattern matches, false otherwise + * - string: the first match or first capture group + * - number/integer: the first match parsed as a number + * - array: all matches + * @minLength 1 + * @maxLength 1000 + */ + regex?: string; /** * This is the model that will be used to extract the structured output. * * To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. - * Between the system or user messages, you must reference either 'transcript' or 'messages' with the '{{}}' syntax to access the conversation history. - * Between the system or user messages, you must reference a variation of the structured output with the '{{}}' syntax to access the structured output definition. + * Between the system or user messages, you must reference either 'transcript' or 'messages' with the `{{}}` syntax to access the conversation history. + * Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax to access the structured output definition. * i.e.: - * {{structuredOutput}} - * {{structuredOutput.name}} - * {{structuredOutput.description}} - * {{structuredOutput.schema}} + * `{{structuredOutput}}` + * `{{structuredOutput.name}}` + * `{{structuredOutput.description}}` + * `{{structuredOutput.schema}}` * * If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. * If messages or required fields are not specified, the default system and user prompts will be used. @@ -28192,6 +31214,7 @@ export interface StructuredOutput { model?: | WorkflowOpenAIModel | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel | WorkflowGoogleModel | WorkflowCustomModel; /** @@ -28256,82 +31279,40 @@ export interface StructuredOutputPaginatedResponse { metadata: PaginationMeta; } -export interface CreateStructuredOutputDTO { - /** - * This is the model that will be used to extract the structured output. - * - * To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. - * Between the system or user messages, you must reference either 'transcript' or 'messages' with the '{{}}' syntax to access the conversation history. - * Between the system or user messages, you must reference a variation of the structured output with the '{{}}' syntax to access the structured output definition. - * i.e.: - * {{structuredOutput}} - * {{structuredOutput.name}} - * {{structuredOutput.description}} - * {{structuredOutput.schema}} - * - * If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. - * If messages or required fields are not specified, the default system and user prompts will be used. - */ - model?: - | WorkflowOpenAIModel - | WorkflowAnthropicModel - | WorkflowGoogleModel - | WorkflowCustomModel; - /** - * Compliance configuration for this output. Only enable overrides if no sensitive data will be stored. - * @example {"forceStoreOnHipaaEnabled":false} - */ - compliancePlan?: ComplianceOverride; - /** - * This is the name of the structured output. - * @minLength 1 - * @maxLength 40 - */ - name: string; +export interface UpdateStructuredOutputDTO { /** - * This is the JSON Schema definition for the structured output. + * This is the type of structured output. * - * This is required when creating a structured output. Defines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including: - * - Objects and nested properties - * - Arrays and array validation - * - String, number, boolean, and null types - * - Enums and const values - * - Validation constraints (min/max, patterns, etc.) - * - Composition with allOf, anyOf, oneOf + * - 'ai': Uses an LLM to extract structured data from the conversation (default). + * - 'regex': Uses a regex pattern to extract data from the transcript without an LLM. */ - schema: JsonSchema; + type?: "ai" | "regex"; /** - * This is the description of what the structured output extracts. + * This is the regex pattern to match against the transcript. * - * Use this to provide context about what data will be extracted and how it will be used. - */ - description?: string; - /** - * These are the assistant IDs that this structured output is linked to. - * - * When linked to assistants, this structured output will be available for extraction during those assistant's calls. - */ - assistantIds?: string[]; - /** - * These are the workflow IDs that this structured output is linked to. + * Only used when type is 'regex'. Supports both raw patterns (e.g. '\d+') and + * regex literal format (e.g. '/\d+/gi'). Uses RE2 syntax for safety. * - * When linked to workflows, this structured output will be available for extraction during those workflow's execution. + * The result depends on the schema type: + * - boolean: true if the pattern matches, false otherwise + * - string: the first match or first capture group + * - number/integer: the first match parsed as a number + * - array: all matches + * @minLength 1 + * @maxLength 1000 */ - workflowIds?: string[]; -} - -export interface UpdateStructuredOutputDTO { + regex?: string; /** * This is the model that will be used to extract the structured output. * * To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. - * Between the system or user messages, you must reference either 'transcript' or 'messages' with the '{{}}' syntax to access the conversation history. - * Between the system or user messages, you must reference a variation of the structured output with the '{{}}' syntax to access the structured output definition. + * Between the system or user messages, you must reference either 'transcript' or 'messages' with the `{{}}` syntax to access the conversation history. + * Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax to access the structured output definition. * i.e.: - * {{structuredOutput}} - * {{structuredOutput.name}} - * {{structuredOutput.description}} - * {{structuredOutput.schema}} + * `{{structuredOutput}}` + * `{{structuredOutput.name}}` + * `{{structuredOutput.description}}` + * `{{structuredOutput.schema}}` * * If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. * If messages or required fields are not specified, the default system and user prompts will be used. @@ -28339,6 +31320,7 @@ export interface UpdateStructuredOutputDTO { model?: | WorkflowOpenAIModel | WorkflowAnthropicModel + | WorkflowAnthropicBedrockModel | WorkflowGoogleModel | WorkflowCustomModel; /** @@ -28853,6 +31835,896 @@ export interface UpdateTestSuiteRunDto { name?: string; } +export interface CreatePersonalityDTO { + /** + * This is the name of the personality (e.g., "Confused Carl", "Rude Rob"). + * @maxLength 80 + */ + name: string; + /** + * This is the full assistant configuration for this personality. + * It defines the tester's voice, model, behavior via system prompt, and other settings. + */ + assistant: CreateAssistantDTO; + /** + * Optional folder path for organizing personalities. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface Personality { + /** + * This is the unique identifier for the personality. + * @format uuid + */ + id: string; + /** + * This is the unique identifier for the organization this personality belongs to. + * If null, this is a Vapi-provided default personality available to all organizations. + * @format uuid + */ + orgId: string | null; + /** + * This is the ISO 8601 date-time string of when the personality was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the personality was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of the personality (e.g., "Confused Carl", "Rude Rob"). + * @maxLength 80 + */ + name: string; + /** + * This is the full assistant configuration for this personality. + * It defines the tester's voice, model, behavior via system prompt, and other settings. + */ + assistant: CreateAssistantDTO; + /** + * Optional folder path for organizing personalities. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface UpdatePersonalityDTO { + /** + * This is the name of the personality. + * @maxLength 80 + */ + name?: string; + /** This is the full assistant configuration for this personality. */ + assistant?: CreateAssistantDTO; + /** + * Optional folder path for organizing personalities. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Set to null to remove from folder. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface SimulationHookInclude { + /** + * Include transcript in the hook payload + * @default false + */ + transcript?: boolean; + /** + * Include messages in the hook payload + * @default false + */ + messages?: boolean; + /** + * Include recordingUrl in the hook payload + * @default false + */ + recordingUrl?: boolean; +} + +export interface SimulationHookWebhookAction { + type: "webhook"; + /** + * Optional server override for this hook action. + * If omitted, runtime defaults may apply (e.g. org server). + */ + server?: Server; + /** Optional payload include controls. */ + include?: SimulationHookInclude; +} + +export interface SimulationHookCallStarted { + /** @maxLength 1000 */ + on: "simulation.run.started"; + do: SimulationHookWebhookAction[]; +} + +export interface SimulationHookCallEnded { + /** @maxLength 1000 */ + on: "simulation.run.ended"; + do: SimulationHookWebhookAction[]; +} + +export interface EvaluationPlanItem { + /** + * This is the ID of an existing structured output to use for evaluation. + * Mutually exclusive with structuredOutput. + * @format uuid + */ + structuredOutputId?: string; + /** + * This is an inline structured output definition for evaluation. + * Mutually exclusive with structuredOutputId. + * Only primitive schema types (string, number, integer, boolean) are allowed. + */ + structuredOutput?: CreateStructuredOutputDTO; + /** + * This is the comparison operator to use when evaluating the extracted value against the expected value. + * Available operators depend on the structured output's schema type: + * - boolean: '=', '!=' + * - string: '=', '!=' + * - number/integer: '=', '!=', '>', '<', '>=', '<=' + * @example "=" + */ + comparator: "=" | "!=" | ">" | "<" | ">=" | "<="; + /** + * This is the expected value to compare against the extracted structured output result. + * Type should match the structured output's schema type. + */ + value: number | string | boolean; + /** + * This is whether this evaluation must pass for the simulation to pass. + * Defaults to true. If false, the result is informational only. + * @default true + */ + required?: boolean; +} + +export interface ScenarioToolMock { + /** This is the tool call function name to mock (must match `toolCall.function.name`). */ + toolName: string; + /** This is the result content to return for this tool call. */ + result?: string; + /** + * This is whether this mock is enabled. Defaults to true when omitted. + * @default true + */ + enabled?: boolean; +} + +export interface CreateScenarioDTO { + /** + * This is the name of the scenario. + * @maxLength 80 + * @example "Health Enrollment - Eligible Path" + */ + name: string; + /** + * This is the script/instructions for the tester to follow during the simulation. + * @maxLength 10000 + * @example "You are calling to enroll in the Twin Health program. Confirm your identity when asked." + */ + instructions: string; + /** + * This is the structured output-based evaluation plan for the simulation. + * Each item defines a structured output to extract and evaluate against an expected value. + */ + evaluations: EvaluationPlanItem[]; + /** Hooks to run on simulation lifecycle events */ + hooks?: (SimulationHookCallStarted | SimulationHookCallEnded)[]; + /** + * Overrides to inject into the simulated target assistant or squad + * @example {"variableValues":{"customerName":"Alice","orderId":"12345"}} + */ + targetOverrides?: AssistantOverrides; + /** Scenario-level tool call mocks to use during simulations. */ + toolMocks?: ScenarioToolMock[]; + /** + * Optional folder path for organizing scenarios. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface Scenario { + /** + * This is the unique identifier for the scenario. + * @format uuid + */ + id: string; + /** + * This is the unique identifier for the organization this scenario belongs to. + * @format uuid + */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the scenario was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the scenario was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of the scenario. + * @maxLength 80 + * @example "Health Enrollment - Eligible Path" + */ + name: string; + /** + * This is the script/instructions for the tester to follow during the simulation. + * @maxLength 10000 + * @example "You are calling to enroll in the Twin Health program. Confirm your identity when asked." + */ + instructions: string; + /** + * This is the structured output-based evaluation plan for the simulation. + * Each item defines a structured output to extract and evaluate against an expected value. + */ + evaluations: EvaluationPlanItem[]; + /** Hooks to run on simulation lifecycle events */ + hooks?: (SimulationHookCallStarted | SimulationHookCallEnded)[]; + /** + * Overrides to inject into the simulated target assistant or squad + * @example {"variableValues":{"customerName":"Alice","orderId":"12345"}} + */ + targetOverrides?: AssistantOverrides; + /** Scenario-level tool call mocks to use during simulations. */ + toolMocks?: ScenarioToolMock[]; + /** + * Optional folder path for organizing scenarios. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface UpdateScenarioDTO { + /** + * This is the name of the scenario. + * @maxLength 80 + */ + name?: string; + /** + * This is the script/instructions for the tester to follow during the simulation. + * @maxLength 10000 + */ + instructions?: string; + /** + * This is the structured output-based evaluation plan for the simulation. + * Each item defines a structured output to extract and evaluate against an expected value. + */ + evaluations?: EvaluationPlanItem[]; + /** Hooks to run on simulation lifecycle events */ + hooks?: (SimulationHookCallStarted | SimulationHookCallEnded)[]; + /** + * Overrides to inject into the simulated target assistant or squad + * @example {"variableValues":{"customerName":"Alice","orderId":"12345"}} + */ + targetOverrides?: AssistantOverrides; + toolMocks?: ScenarioToolMock[]; + /** + * Optional folder path for organizing scenarios. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Set to null to remove from folder. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface SimulationRunSimulationEntry { + /** Type discriminator */ + type: "simulation"; + /** + * ID of an existing simulation to run. When provided, scenarioId/personalityId/inline fields are ignored. + * @format uuid + */ + simulationId?: string; + /** + * ID of an existing scenario. Cannot be combined with inline scenario. + * @format uuid + */ + scenarioId?: string; + /** Inline scenario configuration. Cannot be combined with scenarioId. */ + scenario?: CreateScenarioDTO; + /** + * ID of an existing personality. Cannot be combined with inline personality. + * @format uuid + */ + personalityId?: string; + /** Inline personality configuration. Cannot be combined with personalityId. */ + personality?: CreatePersonalityDTO; + /** + * Optional name for this simulation entry + * @maxLength 80 + */ + name?: string; +} + +export interface SimulationRunSuiteEntry { + /** Type discriminator */ + type: "simulationSuite"; + /** + * ID of the simulation suite to run + * @format uuid + */ + simulationSuiteId?: string; + /** @deprecated */ + suiteId?: string; +} + +export interface SimulationRunTargetAssistant { + /** Type of target */ + type: "assistant"; + /** + * ID of an existing assistant to test against. Cannot be combined with inline assistant. + * @format uuid + */ + assistantId?: string; + /** Inline assistant configuration to test against. Cannot be combined with assistantId. */ + assistant?: CreateAssistantDTO; +} + +export interface SimulationRunTargetSquad { + /** Type of target */ + type: "squad"; + /** + * ID of an existing squad to test against. Cannot be combined with inline squad. + * @format uuid + */ + squadId?: string; + /** Inline squad configuration to test against. Cannot be combined with squadId. */ + squad?: CreateSquadDTO; +} + +export interface SimulationRunTransportConfiguration { + /** Transport provider for the simulation run */ + provider: "vapi.websocket" | "vapi.webchat"; +} + +export interface CreateSimulationRunDTO { + /** Array of simulations and/or suites to run */ + simulations: (SimulationRunSimulationEntry | SimulationRunSuiteEntry)[]; + /** Target to test against */ + target: SimulationRunTargetAssistant | SimulationRunTargetSquad; + /** + * Number of times to run each simulation (default: 1) + * @min 1 + * @default 1 + */ + iterations?: number; + /** Transport configuration for the simulation runs */ + transport?: SimulationRunTransportConfiguration; +} + +export interface SimulationRunItemCounts { + /** Total number of run items */ + total: number; + /** Number of passed run items */ + passed: number; + /** Number of failed run items */ + failed: number; + /** Number of running/evaluating run items */ + running: number; + /** Number of queued run items */ + queued: number; + /** Number of canceled run items */ + canceled: number; +} + +export interface SimulationRun { + /** + * Unique identifier for the run + * @format uuid + */ + id: string; + /** + * Organization ID + * @format uuid + */ + orgId: string; + /** Current status of the run */ + status: "queued" | "running" | "ended"; + /** + * When the run was queued + * @format date-time + */ + queuedAt: string; + /** + * When the run started + * @format date-time + */ + startedAt?: string; + /** + * When the run ended + * @format date-time + */ + endedAt?: string; + /** Reason the run ended */ + endedReason?: string; + /** + * ISO 8601 date-time when created + * @format date-time + */ + createdAt: string; + /** + * ISO 8601 date-time when last updated + * @format date-time + */ + updatedAt: string; + /** Aggregate counts of run items by status */ + itemCounts?: SimulationRunItemCounts; + /** Array of simulations and/or suites to run */ + simulations: (SimulationRunSimulationEntry | SimulationRunSuiteEntry)[]; + /** Target to test against */ + target: SimulationRunTargetAssistant | SimulationRunTargetSquad; + /** + * Number of times to run each simulation (default: 1) + * @min 1 + * @default 1 + */ + iterations?: number; + /** Transport configuration for the simulation runs */ + transport?: SimulationRunTransportConfiguration; +} + +export interface SimulationRunItemCallMonitor { + /** This is the WebSocket URL to listen to the live call audio (combined both parties). */ + listenUrl?: string; +} + +export interface SimulationRunItemCallMetadata { + /** This is the transcript of the conversation. */ + transcript?: string; + /** This is the list of conversation messages in OpenAI format. */ + messages?: object[]; + /** This is the URL to the call recording. */ + recordingUrl?: string; + /** This is the call monitoring data (live listen URL). */ + monitor?: SimulationRunItemCallMonitor; +} + +export interface SimulationRunItemMetadata { + /** This is a snapshot of the assistant at run creation time. */ + assistant?: Record; + /** This is a snapshot of the squad at run creation time. */ + squad?: Record; + /** This is a snapshot of the scenario at run creation time. */ + scenario?: Record; + /** This is a snapshot of the personality at run creation time. */ + personality?: Record; + /** This is a snapshot of the simulation at run creation time. */ + simulation?: Record; + /** This is the call-related data (transcript, messages, recording). */ + call?: SimulationRunItemCallMetadata; + /** Hook execution state for this run item (used for idempotency + debugging). */ + hooks?: Record; +} + +export interface StructuredOutputEvaluationResult { + /** + * This is the ID of the structured output that was evaluated. + * Will be 'inline' for inline structured output definitions. + */ + structuredOutputId: string; + /** This is the name of the structured output. */ + name: string; + /** This is the value extracted from the call by the structured output. */ + extractedValue: number | string | boolean | null; + /** This is the expected value that was defined in the evaluation plan. */ + expectedValue: number | string | boolean; + /** This is the comparison operator used for evaluation. */ + comparator: "=" | "!=" | ">" | "<" | ">=" | "<="; + /** This indicates whether the evaluation passed (extracted value matched expected value using comparator). */ + passed: boolean; + /** This indicates whether this evaluation was required for the simulation to pass. */ + required: boolean; + /** This contains any error that occurred during extraction. */ + error?: string; + /** This indicates whether this evaluation was skipped (e.g., multimodal in chat mode). */ + isSkipped?: boolean; + /** This contains the reason for skipping the evaluation. */ + skipReason?: string; +} + +export interface LatencyMetrics { + /** This is the number of conversation turns. */ + turnCount: number; + /** This is the average total turn latency in milliseconds. */ + avgTurn?: number; + /** This is the average transcriber latency in milliseconds. */ + avgTranscriber?: number; + /** This is the average LLM/model latency in milliseconds. */ + avgModel?: number; + /** This is the average voice/TTS latency in milliseconds. */ + avgVoice?: number; + /** This is the average endpointing latency in milliseconds. */ + avgEndpointing?: number; +} + +export interface SimulationRunItemResults { + /** This is the list of results from structured output evaluations. */ + evaluations: StructuredOutputEvaluationResult[]; + /** This indicates whether all required evaluations passed. */ + passed: boolean; + /** This contains the latency metrics collected from the call. */ + latencyMetrics?: LatencyMetrics; +} + +export interface SimulationRunItemImprovementSuggestion { + /** This is the issue identified. */ + issue: string; + /** This is the suggested improvement. */ + suggestion: string; +} + +export interface SimulationRunItemImprovements { + /** This is a summary analysis of why evaluations failed. */ + analysis: string; + /** This is the list of suggestions for improving the system prompt. */ + systemPromptSuggestions: SimulationRunItemImprovementSuggestion[]; + /** This is the list of suggestions for improving tools. */ + toolSuggestions: SimulationRunItemImprovementSuggestion[]; + /** This is the list of suggestions for improving the scenario/evaluation plan. */ + scenarioSuggestions: SimulationRunItemImprovementSuggestion[]; + /** This is a complete revised system prompt if major changes are needed. */ + suggestedSystemPrompt?: string; +} + +export interface SimulationRunConfiguration { + /** Transport configuration for the simulation run */ + transport?: SimulationRunTransportConfiguration; +} + +export interface SimulationRunItem { + /** + * This is the unique identifier for the simulation run item. + * @format uuid + */ + id: string; + /** + * This is the unique identifier for the organization. + * @format uuid + */ + orgId: string; + /** + * This is the ID of the simulation this run belongs to. + * @format uuid + */ + simulationId: string; + /** This is the current status of the run. */ + status: + | "queued" + | "running" + | "evaluating" + | "passed" + | "failed" + | "canceled"; + /** + * This is the ISO 8601 date-time string of when the run was queued. + * @format date-time + */ + queuedAt: string; + /** + * This is the ISO 8601 date-time string of when the run started. + * @format date-time + */ + startedAt?: string; + /** + * This is the ISO 8601 date-time string of when the run completed. + * @format date-time + */ + completedAt?: string; + /** + * This is the ISO 8601 date-time string of when the run failed. + * @format date-time + */ + failedAt?: string; + /** + * This is the ISO 8601 date-time string of when the run was canceled. + * @format date-time + */ + canceledAt?: string; + /** + * This is the reason for failure. + * @maxLength 2000 + */ + failureReason?: string; + /** + * This is the ID of the target Vapi call (the assistant being tested). + * @format uuid + */ + callId?: string; + /** + * This is the ISO 8601 date-time string of when the run item was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the run item was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the ID of the parent run (batch/group). + * @format uuid + */ + runId?: string; + /** Hooks configured for this simulation run item */ + hooks?: (SimulationHookCallStarted | SimulationHookCallEnded)[]; + /** + * This is the iteration number (1-indexed) when run with iterations > 1. + * @default 1 + */ + iterationNumber?: number; + /** + * This is the session ID for chat-based simulations (webchat transport). + * @format uuid + */ + sessionId?: string; + /** + * This is the scenario ID at run creation time. + * @format uuid + */ + scenarioId?: string; + /** + * This is the personality ID at run creation time. + * @format uuid + */ + personalityId?: string; + /** This is the metadata containing snapshots and call data. */ + metadata?: SimulationRunItemMetadata; + /** This is the results of the simulation run. */ + results?: SimulationRunItemResults; + /** This is the AI-generated improvement suggestions for failed runs. */ + improvementSuggestions?: SimulationRunItemImprovements; + /** This is the configuration for how this simulation run executes. */ + configurations?: SimulationRunConfiguration; +} + +export interface CreateSimulationSuiteDTO { + /** + * This is the name of the simulation suite. + * @maxLength 80 + * @example "Checkout Flow Tests" + */ + name: string; + /** This is the Slack webhook URL for notifications. */ + slackWebhookUrl?: string; + /** This is the list of simulation IDs to include in the suite. */ + simulationIds: string[]; + /** + * Optional folder path for organizing simulation suites. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface SimulationSuite { + /** + * This is the unique identifier for the simulation suite. + * @format uuid + */ + id: string; + /** + * This is the unique identifier for the organization this suite belongs to. + * @format uuid + */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the suite was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the suite was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of the simulation suite. + * @maxLength 80 + * @example "Checkout Flow Tests" + */ + name: string; + /** This is the Slack webhook URL for notifications. */ + slackWebhookUrl?: string; + /** + * Optional folder path for organizing simulation suites. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; + /** This is the list of simulation IDs in this suite. */ + simulationIds: string[]; +} + +export interface UpdateSimulationSuiteDTO { + /** + * This is the name of the simulation suite. + * @maxLength 80 + */ + name?: string; + /** This is the Slack webhook URL for notifications. */ + slackWebhookUrl?: string; + /** This is the list of simulation IDs to include in the suite (replaces existing). */ + simulationIds?: string[]; + /** + * Optional folder path for organizing simulation suites. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Set to null to remove from folder. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface GenerateScenariosDTO { + /** ID of the assistant to generate scenarios for */ + assistantId?: string; + /** ID of the squad to generate scenarios for */ + squadId?: string; +} + +export interface GeneratedScenario { + /** Short descriptive name */ + name: string; + /** Instructions for the tester */ + instructions: string; + /** Scenario category */ + category: "happy_path" | "edge_case" | "failure_mode"; + /** Why this scenario is valuable */ + reasoning: string; +} + +export interface GenerateScenariosResponse { + /** Generated scenarios */ + scenarios: GeneratedScenario[]; + /** Summary of test coverage */ + coverageNotes: string; +} + +export interface CreateSimulationDTO { + /** + * This is an optional friendly name for the simulation. + * @maxLength 80 + * @example "Eligible Path with Confused User" + */ + name?: string; + /** + * This is the ID of the scenario to use for this simulation. + * @format uuid + */ + scenarioId: string; + /** + * This is the ID of the personality to use for this simulation. + * @format uuid + */ + personalityId: string; + /** + * Optional folder path for organizing simulations. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface Simulation { + /** + * This is the unique identifier for the simulation. + * @format uuid + */ + id: string; + /** + * This is the unique identifier for the organization this simulation belongs to. + * @format uuid + */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the simulation was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the simulation was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is an optional friendly name for the simulation. + * @maxLength 80 + * @example "Eligible Path with Confused User" + */ + name?: string; + /** + * This is the ID of the scenario to use for this simulation. + * @format uuid + */ + scenarioId: string; + /** + * This is the ID of the personality to use for this simulation. + * @format uuid + */ + personalityId: string; + /** + * Optional folder path for organizing simulations. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Maps to GitOps resource folder structure. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface UpdateSimulationDTO { + /** + * This is an optional friendly name for the simulation. + * @maxLength 80 + */ + name?: string; + /** + * This is the ID of the scenario to use for this simulation. + * @format uuid + */ + scenarioId?: string; + /** + * This is the ID of the personality to use for this simulation. + * @format uuid + */ + personalityId?: string; + /** + * Optional folder path for organizing simulations. + * Supports up to 3 levels (e.g., "dept/feature/variant"). + * Set to null to remove from folder. + * @maxLength 255 + * @pattern /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ + */ + path?: string | null; +} + +export interface SimulationConcurrencyResponse { + orgId: string; + /** Max call slots for simulations (each voice simulation uses 2 call slots: tester + target) */ + concurrencyLimit: number; + /** Number of call slots currently in use by running simulations */ + activeSimulations: number; + /** Number of voice simulations that can start now (available call slots / 2) */ + availableToStart: number; + /** @format date-time */ + createdAt: string | null; + /** @format date-time */ + updatedAt: string | null; + /** True if org is using platform default concurrency limit */ + isDefault: boolean; +} + export interface BarInsightMetadata { /** * @minLength 1 @@ -28868,7 +32740,7 @@ export interface BarInsightMetadata { yAxisMax?: number; /** * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; } @@ -28926,7 +32798,7 @@ export interface BarInsight { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -28968,6 +32840,7 @@ export interface BarInsight { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -28975,6 +32848,7 @@ export interface BarInsight { | JSONQueryOnCallTableWithStringTypeColumn | JSONQueryOnCallTableWithNumberTypeColumn | JSONQueryOnCallTableWithStructuredOutputColumn + | JSONQueryOnEventsTable )[]; /** This is the unique identifier for the Insight. */ id: string; @@ -29039,7 +32913,7 @@ export interface PieInsight { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29079,6 +32953,7 @@ export interface PieInsight { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29118,7 +32993,7 @@ export interface LineInsightMetadata { yAxisMax?: number; /** * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; } @@ -29127,7 +33002,7 @@ export interface LineInsight { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29169,6 +33044,7 @@ export interface LineInsight { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29197,7 +33073,7 @@ export interface TextInsight { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29253,7 +33129,7 @@ export interface UpdateBarInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29295,6 +33171,7 @@ export interface UpdateBarInsightFromCallTableDTO { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29302,6 +33179,7 @@ export interface UpdateBarInsightFromCallTableDTO { | JSONQueryOnCallTableWithStringTypeColumn | JSONQueryOnCallTableWithNumberTypeColumn | JSONQueryOnCallTableWithStructuredOutputColumn + | JSONQueryOnEventsTable )[]; } @@ -29309,7 +33187,7 @@ export interface UpdatePieInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29349,6 +33227,7 @@ export interface UpdatePieInsightFromCallTableDTO { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29363,7 +33242,7 @@ export interface UpdateLineInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29405,6 +33284,7 @@ export interface UpdateLineInsightFromCallTableDTO { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29419,7 +33299,7 @@ export interface UpdateTextInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29461,7 +33341,7 @@ export interface CreateBarInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29503,6 +33383,7 @@ export interface CreateBarInsightFromCallTableDTO { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29510,6 +33391,7 @@ export interface CreateBarInsightFromCallTableDTO { | JSONQueryOnCallTableWithStringTypeColumn | JSONQueryOnCallTableWithNumberTypeColumn | JSONQueryOnCallTableWithStructuredOutputColumn + | JSONQueryOnEventsTable )[]; } @@ -29517,7 +33399,7 @@ export interface CreatePieInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29557,6 +33439,7 @@ export interface CreatePieInsightFromCallTableDTO { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29571,7 +33454,7 @@ export interface CreateLineInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29613,6 +33496,7 @@ export interface CreateLineInsightFromCallTableDTO { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -29627,7 +33511,7 @@ export interface CreateTextInsightFromCallTableDTO { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -29801,6 +33685,140 @@ export interface JSONQueryOnCallTableWithStructuredOutputColumn { name?: string; } +export interface JSONQueryOnEventsTable { + /** + * This is the type of query. Only allowed type is "vapiql-json". + * @example "vapiql-json" + */ + type: "vapiql-json"; + /** + * This is the table that will be queried. + * Must be "events" for event-based insights. + */ + table: "events"; + /** + * The event type to query + * @example "assistant.model.requestFailed" + */ + on: + | "call.started" + | "call.ended" + | "call.inProgress" + | "call.queued" + | "call.transportConnected" + | "call.transportDisconnected" + | "call.transportReconnected" + | "call.transferInitiated" + | "call.transferCompleted" + | "call.transferFailed" + | "call.transferCancelled" + | "call.handoffInitiated" + | "call.handoffCompleted" + | "call.handoffFailed" + | "call.assistantSwapped" + | "call.assistantStarted" + | "call.customerJoined" + | "call.customerLeft" + | "call.controlReceived" + | "call.listenStarted" + | "call.recordingStarted" + | "call.recordingPaused" + | "call.recordingResumed" + | "call.voicemailDetected" + | "call.voicemailNotDetected" + | "call.dtmfReceived" + | "call.dtmfSent" + | "call.amdDetected" + | "call.hookTriggered" + | "call.hookSucceeded" + | "call.hookFailed" + | "call.statusReceived" + | "call.silenceTimeout" + | "call.microphoneTimeout" + | "call.maxDurationReached" + | "assistant.voice.requestStarted" + | "assistant.voice.requestSucceeded" + | "assistant.voice.requestFailed" + | "assistant.voice.connectionOpened" + | "assistant.voice.connectionClosed" + | "assistant.voice.firstAudioReceived" + | "assistant.voice.audioChunkReceived" + | "assistant.voice.generationSucceeded" + | "assistant.voice.generationFailed" + | "assistant.voice.textPushed" + | "assistant.voice.reconnecting" + | "assistant.voice.cleanup" + | "assistant.voice.clearing" + | "assistant.voice.voiceSwitched" + | "assistant.model.requestStarted" + | "assistant.model.requestSucceeded" + | "assistant.model.requestFailed" + | "assistant.model.requestAttemptStarted" + | "assistant.model.requestAttemptSucceeded" + | "assistant.model.requestAttemptFailed" + | "assistant.model.connectionOpened" + | "assistant.model.connectionClosed" + | "assistant.model.firstTokenReceived" + | "assistant.model.tokenReceived" + | "assistant.model.responseSucceeded" + | "assistant.model.responseFailed" + | "assistant.model.toolCallsReceived" + | "assistant.model.reconnecting" + | "assistant.model.cleanup" + | "assistant.model.clearing" + | "assistant.tool.started" + | "assistant.tool.completed" + | "assistant.tool.failed" + | "assistant.tool.delayedMessageSent" + | "assistant.tool.timeout" + | "assistant.tool.asyncCallbackReceived" + | "assistant.transcriber.requestStarted" + | "assistant.transcriber.requestSucceeded" + | "assistant.transcriber.requestFailed" + | "assistant.transcriber.connectionOpened" + | "assistant.transcriber.connectionClosed" + | "assistant.transcriber.partialTranscript" + | "assistant.transcriber.finalTranscript" + | "assistant.transcriber.keepAlive" + | "assistant.transcriber.reconnecting" + | "assistant.transcriber.cleanup" + | "assistant.transcriber.clearing" + | "assistant.transcriber.transcriptIgnored" + | "assistant.transcriber.languageSwitched" + | "assistant.analysis.structuredOutputGenerated" + | "pipeline.turnStarted" + | "pipeline.cleared" + | "pipeline.botSpeechStarted" + | "pipeline.botSpeechStopped" + | "pipeline.userSpeechStarted" + | "pipeline.userSpeechStopped" + | "pipeline.endpointingTriggered" + | "pipeline.firstMessageStarted" + | "pipeline.firstMessageCompleted"; + /** + * This is the operation to perform on matching events. + * - "count": Returns the raw count of matching events + * - "percentage": Returns (count of matching events / total calls) * 100 + * @example "count" + */ + operation: "count" | "percentage"; + /** + * These are the filters to apply to the events query. + * Each filter filters on a field specific to the event type. + */ + filters?: ( + | EventsTableStringCondition + | EventsTableNumberCondition + | EventsTableBooleanCondition + )[]; + /** + * This is the name of the query. + * It will be used to label the query in the insight board on the UI. + * @example "Model Failures" + */ + name?: string; +} + export interface FilterStringTypeColumnOnCallTable { /** * This is the column in the call table that will be filtered on. @@ -29901,7 +33919,9 @@ export interface FilterStructuredOutputColumnOnCallTable { | "in" | "not_in" | "contains" - | "not_contains"; + | "not_contains" + | "is_empty" + | "is_not_empty"; /** * This is the value to filter on. * The value type depends on the structured output type being filtered. @@ -29932,7 +33952,7 @@ export interface FilterStringArrayTypeColumnOnCallTable { * The operator must be `in` or `not_in`. * @example ""in" or "not_in"" */ - operator: "in" | "not_in"; + operator: "in" | "not_in" | "is_empty" | "is_not_empty"; /** These are the values to filter on. */ value: string[]; } @@ -29957,16 +33977,70 @@ export interface FilterNumberArrayTypeColumnOnCallTable { * The operator must be `in` or `not_in`. * @example ""in" or "not_in"" */ - operator: "in" | "not_in"; + operator: "in" | "not_in" | "is_empty" | "is_not_empty"; /** This is the value to filter on. */ value: number[]; } +export interface EventsTableStringCondition { + /** + * The string field name from the event data + * @example "provider" + */ + column: string; + /** + * String comparison operator + * @example "=" + */ + operator: "=" | "!=" | "contains" | "notContains"; + /** + * The string value to compare + * @example "openai" + */ + value: string; +} + +export interface EventsTableNumberCondition { + /** + * The number field name from the event data + * @example "latency" + */ + column: string; + /** + * Number comparison operator + * @example ">=" + */ + operator: "=" | "!=" | ">" | ">=" | "<" | "<="; + /** + * The number value to compare + * @example 1000 + */ + value: number; +} + +export interface EventsTableBooleanCondition { + /** + * The boolean field name from the event data + * @example "success" + */ + column: string; + /** + * Boolean comparison operator + * @example "=" + */ + operator: "="; + /** + * The boolean value to compare + * @example true + */ + value: boolean; +} + export interface BarInsightFromCallTable { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -30008,6 +34082,7 @@ export interface BarInsightFromCallTable { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -30015,6 +34090,7 @@ export interface BarInsightFromCallTable { | JSONQueryOnCallTableWithStringTypeColumn | JSONQueryOnCallTableWithNumberTypeColumn | JSONQueryOnCallTableWithStructuredOutputColumn + | JSONQueryOnEventsTable )[]; } @@ -30022,7 +34098,7 @@ export interface PieInsightFromCallTable { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -30062,6 +34138,7 @@ export interface PieInsightFromCallTable { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -30076,7 +34153,7 @@ export interface LineInsightFromCallTable { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -30118,6 +34195,7 @@ export interface LineInsightFromCallTable { | "phoneNumberId" | "type" | "endedReason" + | "customerNumber" | "campaignId" | "artifact.structuredOutputs[OutputID]"; /** These are the queries to run to generate the insight. */ @@ -30132,7 +34210,7 @@ export interface TextInsightFromCallTable { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** @@ -30175,7 +34253,7 @@ export interface InsightFormula { * This is the name of the formula. * It will be used to label the formula in the insight board on the UI. * @minLength 1 - * @maxLength 40 + * @maxLength 255 * @example "Booking Rate" */ name?: string; @@ -30232,7 +34310,7 @@ export interface Insight { /** * This is the name of the Insight. * @minLength 1 - * @maxLength 40 + * @maxLength 255 */ name?: string; /** This is the type of the Insight. */ @@ -30527,9 +34605,15 @@ export interface EvalOpenAIModel { * @maxLength 100 */ model: + | "gpt-5.4" + | "gpt-5.4-mini" + | "gpt-5.4-nano" + | "gpt-5.2" + | "gpt-5.2-chat-latest" | "gpt-5.1" | "gpt-5.1-chat-latest" | "gpt-5" + | "gpt-5-chat-latest" | "gpt-5-mini" | "gpt-5-nano" | "gpt-4.1-2025-04-14" @@ -30568,12 +34652,20 @@ export interface EvalOpenAIModel { | "gpt-4.1-2025-04-14:westus3" | "gpt-4.1-2025-04-14:northcentralus" | "gpt-4.1-2025-04-14:southcentralus" + | "gpt-4.1-2025-04-14:westeurope" + | "gpt-4.1-2025-04-14:germanywestcentral" + | "gpt-4.1-2025-04-14:polandcentral" + | "gpt-4.1-2025-04-14:spaincentral" | "gpt-4.1-mini-2025-04-14:westus" | "gpt-4.1-mini-2025-04-14:eastus2" | "gpt-4.1-mini-2025-04-14:eastus" | "gpt-4.1-mini-2025-04-14:westus3" | "gpt-4.1-mini-2025-04-14:northcentralus" | "gpt-4.1-mini-2025-04-14:southcentralus" + | "gpt-4.1-mini-2025-04-14:westeurope" + | "gpt-4.1-mini-2025-04-14:germanywestcentral" + | "gpt-4.1-mini-2025-04-14:polandcentral" + | "gpt-4.1-mini-2025-04-14:spaincentral" | "gpt-4.1-nano-2025-04-14:westus" | "gpt-4.1-nano-2025-04-14:eastus2" | "gpt-4.1-nano-2025-04-14:westus3" @@ -30585,6 +34677,10 @@ export interface EvalOpenAIModel { | "gpt-4o-2024-11-20:eastus" | "gpt-4o-2024-11-20:westus3" | "gpt-4o-2024-11-20:southcentralus" + | "gpt-4o-2024-11-20:westeurope" + | "gpt-4o-2024-11-20:germanywestcentral" + | "gpt-4o-2024-11-20:polandcentral" + | "gpt-4o-2024-11-20:spaincentral" | "gpt-4o-2024-08-06:westus" | "gpt-4o-2024-08-06:westus3" | "gpt-4o-2024-08-06:eastus" @@ -30607,7 +34703,7 @@ export interface EvalOpenAIModel { | "gpt-4-0125-preview:eastus" | "gpt-4-0125-preview:northcentralus" | "gpt-4-0125-preview:southcentralus" - | "gpt-4-1106-preview:australia" + | "gpt-4-1106-preview:australiaeast" | "gpt-4-1106-preview:canadaeast" | "gpt-4-1106-preview:france" | "gpt-4-1106-preview:india" @@ -30665,8 +34761,10 @@ export interface EvalAnthropicModel { | "claude-3-7-sonnet-20250219" | "claude-opus-4-20250514" | "claude-opus-4-5-20251101" + | "claude-opus-4-6" | "claude-sonnet-4-20250514" | "claude-sonnet-4-5-20250929" + | "claude-sonnet-4-6" | "claude-haiku-4-5-20251001"; /** * This is the optional configuration for Anthropic's thinking feature. @@ -30708,6 +34806,7 @@ export interface EvalGoogleModel { * @maxLength 100 */ model: + | "gemini-3-flash-preview" | "gemini-2.5-pro" | "gemini-2.5-flash" | "gemini-2.5-flash-lite" @@ -30864,6 +34963,12 @@ export interface AssistantMessageJudgePlanAI { * @default 'ai' */ type: "ai"; + /** + * This is the flag to enable automatically adding the liquid variable {{messages}} to the model's messages array + * This is only applicable if the user has not provided any messages in the model's messages array + * @default true + */ + autoIncludeMessageHistory?: boolean; } export interface ChatEvalToolResponseMessageEvaluation { @@ -30957,6 +35062,8 @@ export interface GetEvalPaginatedDTO { page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -31181,6 +35288,8 @@ export interface GetEvalRunPaginatedDTO { page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -31338,8 +35447,8 @@ export interface UpdateScorecardDTO { export interface CreateOrgDTO { /** - * When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false. - * When HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively. + * When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. + * When HIPAA is enabled, only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. * This is due to the compliance requirements of HIPAA. Other providers may not meet these requirements. * @example false */ @@ -31352,7 +35461,7 @@ export interface CreateOrgDTO { */ name?: string; /** This is the channel of the org. There is the cluster the API traffic for the org will be directed. */ - channel?: "daily" | "default" | "weekly" | "intuit"; + channel?: "daily" | "default" | "weekly" | "intuit" | "hcs"; /** * This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai. * @min 0 @@ -31482,6 +35591,11 @@ export interface Subscription { * subscription have the option to enable HIPAA compliance. */ hipaaEnabled?: boolean; + /** + * This is the ZDR enabled flag for the subscription. It determines whether orgs under this + * subscription have the option to enable ZDR. + */ + zdrEnabled?: boolean; /** * This is the data retention enabled flag for the subscription. It determines whether orgs under this * subscription have the option to enable data retention. @@ -31561,8 +35675,8 @@ export interface Subscription { export interface Org { /** - * When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false. - * When HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively. + * When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. + * When HIPAA is enabled, only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. * This is due to the compliance requirements of HIPAA. Other providers may not meet these requirements. * @example false */ @@ -31603,7 +35717,7 @@ export interface Org { */ name?: string; /** This is the channel of the org. There is the cluster the API traffic for the org will be directed. */ - channel?: "daily" | "default" | "weekly" | "intuit"; + channel?: "daily" | "default" | "weekly" | "intuit" | "hcs"; /** * This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai. * @min 0 @@ -31640,8 +35754,8 @@ export interface Org { export interface UpdateOrgDTO { /** - * When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false. - * When HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively. + * When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. + * When HIPAA is enabled, only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. * This is due to the compliance requirements of HIPAA. Other providers may not meet these requirements. * @example false */ @@ -31654,7 +35768,7 @@ export interface UpdateOrgDTO { */ name?: string; /** This is the channel of the org. There is the cluster the API traffic for the org will be directed. */ - channel?: "daily" | "default" | "weekly" | "intuit"; + channel?: "daily" | "default" | "weekly" | "intuit" | "hcs"; /** * This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai. * @min 0 @@ -31831,6 +35945,86 @@ export interface AnthropicCredential { name?: string; } +export interface AWSStsAuthenticationArtifact { + /** This is the optional external ID for the AWS credential */ + externalId: string; +} + +export interface AWSStsAssumeRoleUser { + /** This is the assumed role ID */ + AssumedRoleId?: string; + /** This is the assumed role ARN */ + Arn?: string; +} + +export interface AWSStsCredentials { + /** This is the access key ID for the AWS credential */ + AccessKeyId?: string; + /** + * This is the expiration date for the AWS credential + * @format date-time + */ + Expiration?: string; + /** This is the secret access key for the AWS credential */ + SecretAccessKey?: string; + /** This is the session token for the AWS credential */ + SessionToken?: string; +} + +export interface AWSStsAuthenticationSession { + /** This is the assumed role user */ + assumedRoleUser?: AWSStsAssumeRoleUser; + /** This is the credentials for the AWS STS assume role */ + credentials?: AWSStsCredentials; + /** This is the size of the policy */ + packedPolicySize?: number; + /** This is the sourced ID entity */ + sourcedIDEntity?: string; +} + +export interface AnthropicBedrockCredential { + provider: "anthropic-bedrock"; + /** AWS region where Bedrock is configured. */ + region: + | "us-east-1" + | "us-west-2" + | "eu-west-1" + | "eu-west-3" + | "ap-northeast-1" + | "ap-southeast-2"; + /** Authentication method - either direct IAM credentials or cross-account role assumption. */ + authenticationPlan: + | AWSIAMCredentialsAuthenticationPlan + | AWSStsAuthenticationPlan; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** Stores the external ID (generated or user-provided) for future AssumeRole calls. */ + authenticationArtifact?: AWSStsAuthenticationArtifact; + /** + * Cached authentication session from AssumeRole (temporary credentials). + * Managed by the system, auto-refreshed when expired. + */ + authenticationSession?: AWSStsAuthenticationSession; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + export interface AnyscaleCredential { provider: "anyscale"; /** @@ -31895,22 +36089,27 @@ export interface AzureCredential { service: "speech" | "blob_storage"; /** This is the region of the Azure resource. */ region?: - | "australia" + | "australiaeast" | "canadaeast" | "canadacentral" + | "centralus" | "eastus2" | "eastus" | "france" + | "germanywestcentral" | "india" | "japaneast" | "japanwest" - | "uaenorth" | "northcentralus" | "norway" + | "polandcentral" | "southcentralus" + | "spaincentral" | "swedencentral" | "switzerland" + | "uaenorth" | "uk" + | "westeurope" | "westus" | "westus3"; /** @@ -31950,26 +36149,38 @@ export interface AzureCredential { export interface AzureOpenAICredential { provider: "azure-openai"; region: - | "australia" + | "australiaeast" | "canadaeast" | "canadacentral" + | "centralus" | "eastus2" | "eastus" | "france" + | "germanywestcentral" | "india" | "japaneast" | "japanwest" - | "uaenorth" | "northcentralus" | "norway" + | "polandcentral" | "southcentralus" + | "spaincentral" | "swedencentral" | "switzerland" + | "uaenorth" | "uk" + | "westeurope" | "westus" | "westus3"; /** @example ["gpt-4-0125-preview","gpt-4-0613"] */ models: + | "gpt-5.4" + | "gpt-5.4-mini" + | "gpt-5.4-nano" + | "gpt-5.2" + | "gpt-5.2-chat" + | "gpt-5.1" + | "gpt-5.1-chat" | "gpt-5" | "gpt-5-mini" | "gpt-5-nano" @@ -32091,6 +36302,8 @@ export interface CartesiaCredential { * @maxLength 40 */ name?: string; + /** This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. */ + apiUrl?: string; } export interface CerebrasCredential { @@ -32437,8 +36650,153 @@ export interface GoogleCredential { name?: string; } -export interface GroqCredential { - provider: "groq"; +export interface GroqCredential { + provider: "groq"; + /** This is not returned in the API. */ + apiKey: string; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface HumeCredential { + provider: "hume"; + /** + * This is not returned in the API. + * @maxLength 10000 + */ + apiKey: string; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface InflectionAICredential { + /** This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup */ + provider: "inflection-ai"; + /** + * This is not returned in the API. + * @maxLength 10000 + */ + apiKey: string; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface LangfuseCredential { + provider: "langfuse"; + /** The public key for Langfuse project. Eg: pk-lf-... */ + publicKey: string; + /** The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API. */ + apiKey: string; + /** The host URL for Langfuse project. Eg: https://cloud.langfuse.com */ + apiUrl: string; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface LmntCredential { + provider: "lmnt"; + /** This is not returned in the API. */ + apiKey: string; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface MakeCredential { + provider: "make"; + /** Team ID */ + teamId: string; + /** Region of your application. For example: eu1, eu2, us1, us2 */ + region: string; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32463,73 +36821,13 @@ export interface GroqCredential { name?: string; } -export interface HumeCredential { - provider: "hume"; - /** - * This is not returned in the API. - * @maxLength 10000 - */ - apiKey: string; - /** This is the unique identifier for the credential. */ - id: string; - /** This is the unique identifier for the org that this credential belongs to. */ - orgId: string; - /** - * This is the ISO 8601 date-time string of when the credential was created. - * @format date-time - */ - createdAt: string; - /** - * This is the ISO 8601 date-time string of when the assistant was last updated. - * @format date-time - */ - updatedAt: string; - /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 - */ - name?: string; -} - -export interface InflectionAICredential { - /** This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup */ - provider: "inflection-ai"; +export interface MistralCredential { + provider: "mistral"; /** * This is not returned in the API. - * @maxLength 10000 - */ - apiKey: string; - /** This is the unique identifier for the credential. */ - id: string; - /** This is the unique identifier for the org that this credential belongs to. */ - orgId: string; - /** - * This is the ISO 8601 date-time string of when the credential was created. - * @format date-time - */ - createdAt: string; - /** - * This is the ISO 8601 date-time string of when the assistant was last updated. - * @format date-time - */ - updatedAt: string; - /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 + * @maxLength 100 */ - name?: string; -} - -export interface LangfuseCredential { - provider: "langfuse"; - /** The public key for Langfuse project. Eg: pk-lf-... */ - publicKey: string; - /** The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API. */ apiKey: string; - /** The host URL for Langfuse project. Eg: https://cloud.langfuse.com */ - apiUrl: string; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -32552,8 +36850,8 @@ export interface LangfuseCredential { name?: string; } -export interface LmntCredential { - provider: "lmnt"; +export interface NeuphonicCredential { + provider: "neuphonic"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32578,12 +36876,8 @@ export interface LmntCredential { name?: string; } -export interface MakeCredential { - provider: "make"; - /** Team ID */ - teamId: string; - /** Region of your application. For example: eu1, eu2, us1, us2 */ - region: string; +export interface OpenAICredential { + provider: "openai"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32608,37 +36902,8 @@ export interface MakeCredential { name?: string; } -export interface MistralCredential { - provider: "mistral"; - /** - * This is not returned in the API. - * @maxLength 100 - */ - apiKey: string; - /** This is the unique identifier for the credential. */ - id: string; - /** This is the unique identifier for the org that this credential belongs to. */ - orgId: string; - /** - * This is the ISO 8601 date-time string of when the credential was created. - * @format date-time - */ - createdAt: string; - /** - * This is the ISO 8601 date-time string of when the assistant was last updated. - * @format date-time - */ - updatedAt: string; - /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 - */ - name?: string; -} - -export interface NeuphonicCredential { - provider: "neuphonic"; +export interface OpenRouterCredential { + provider: "openrouter"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32663,8 +36928,8 @@ export interface NeuphonicCredential { name?: string; } -export interface OpenAICredential { - provider: "openai"; +export interface PerplexityAICredential { + provider: "perplexity-ai"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32689,8 +36954,8 @@ export interface OpenAICredential { name?: string; } -export interface OpenRouterCredential { - provider: "openrouter"; +export interface PlayHTCredential { + provider: "playht"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32713,10 +36978,11 @@ export interface OpenRouterCredential { * @maxLength 40 */ name?: string; + userId: string; } -export interface PerplexityAICredential { - provider: "perplexity-ai"; +export interface RimeAICredential { + provider: "rime-ai"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32741,8 +37007,8 @@ export interface PerplexityAICredential { name?: string; } -export interface PlayHTCredential { - provider: "playht"; +export interface RunpodCredential { + provider: "runpod"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32765,38 +37031,14 @@ export interface PlayHTCredential { * @maxLength 40 */ name?: string; - userId: string; } -export interface RimeAICredential { - provider: "rime-ai"; - /** This is not returned in the API. */ - apiKey: string; - /** This is the unique identifier for the credential. */ - id: string; - /** This is the unique identifier for the org that this credential belongs to. */ - orgId: string; +export interface WellSaidCredential { + provider: "wellsaid"; /** - * This is the ISO 8601 date-time string of when the credential was created. - * @format date-time - */ - createdAt: string; - /** - * This is the ISO 8601 date-time string of when the assistant was last updated. - * @format date-time - */ - updatedAt: string; - /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 + * This is not returned in the API. + * @maxLength 10000 */ - name?: string; -} - -export interface RunpodCredential { - provider: "runpod"; - /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ id: string; @@ -32886,8 +37128,8 @@ export interface SmallestAICredential { name?: string; } -export interface SpeechmaticsCredential { - provider: "speechmatics"; +export interface SonioxCredential { + provider: "soniox"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32912,14 +37154,10 @@ export interface SpeechmaticsCredential { name?: string; } -export interface SupabaseCredential { - /** This is for supabase storage. */ - provider: "supabase"; - /** - * This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - * @min 1 - */ - fallbackIndex?: number; +export interface SpeechmaticsCredential { + provider: "speechmatics"; + /** This is not returned in the API. */ + apiKey: string; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -32940,13 +37178,16 @@ export interface SupabaseCredential { * @maxLength 40 */ name?: string; - bucketPlan?: SupabaseBucketPlan; } -export interface TavusCredential { - provider: "tavus"; - /** This is not returned in the API. */ - apiKey: string; +export interface SupabaseCredential { + /** This is for supabase storage. */ + provider: "supabase"; + /** + * This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. + * @min 1 + */ + fallbackIndex?: number; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -32967,10 +37208,11 @@ export interface TavusCredential { * @maxLength 40 */ name?: string; + bucketPlan?: SupabaseBucketPlan; } -export interface TogetherAICredential { - provider: "together-ai"; +export interface TavusCredential { + provider: "tavus"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -32995,8 +37237,8 @@ export interface TogetherAICredential { name?: string; } -export interface TrieveCredential { - provider: "trieve"; +export interface TogetherAICredential { + provider: "together-ai"; /** This is not returned in the API. */ apiKey: string; /** This is the unique identifier for the credential. */ @@ -33128,6 +37370,29 @@ export interface WebhookCredential { name?: string; } +export interface SpkiPemPublicKeyConfig { + /** + * Optional name of the key for identification purposes. + * @maxLength 100 + */ + name?: string; + /** The format of the public key. */ + format: "spki-pem"; + /** The PEM-encoded public key. */ + pem: string; +} + +export interface PublicKeyEncryptionPlan { + /** The type of encryption plan. */ + type: "public-key"; + /** The encryption algorithm to use. */ + algorithm: "RSA-OAEP-256"; + /** The public key configuration. */ + publicKey: { + format: "spki-pem"; + } & SpkiPemPublicKeyConfig; +} + export interface CustomCredential { provider: "custom-credential"; /** This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. */ @@ -33141,6 +37406,10 @@ export interface CustomCredential { | ({ type: "bearer"; } & BearerAuthenticationPlan); + /** This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. */ + encryptionPlan?: { + type: "public-key"; + } & PublicKeyEncryptionPlan; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -33219,8 +37488,60 @@ export interface GoogleCalendarOAuth2ClientCredential { name?: string; } -export interface GoogleCalendarOAuth2AuthorizationCredential { - provider: "google.calendar.oauth2-authorization"; +export interface GoogleCalendarOAuth2AuthorizationCredential { + provider: "google.calendar.oauth2-authorization"; + /** The authorization ID for the OAuth2 authorization */ + authorizationId: string; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface GoogleSheetsOAuth2AuthorizationCredential { + provider: "google.sheets.oauth2-authorization"; + /** The authorization ID for the OAuth2 authorization */ + authorizationId: string; + /** This is the unique identifier for the credential. */ + id: string; + /** This is the unique identifier for the org that this credential belongs to. */ + orgId: string; + /** + * This is the ISO 8601 date-time string of when the credential was created. + * @format date-time + */ + createdAt: string; + /** + * This is the ISO 8601 date-time string of when the assistant was last updated. + * @format date-time + */ + updatedAt: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface SlackOAuth2AuthorizationCredential { + provider: "slack.oauth2-authorization"; /** The authorization ID for the OAuth2 authorization */ authorizationId: string; /** This is the unique identifier for the credential. */ @@ -33245,10 +37566,10 @@ export interface GoogleCalendarOAuth2AuthorizationCredential { name?: string; } -export interface GoogleSheetsOAuth2AuthorizationCredential { - provider: "google.sheets.oauth2-authorization"; - /** The authorization ID for the OAuth2 authorization */ - authorizationId: string; +export interface GoHighLevelMCPCredential { + provider: "ghl.oauth2-authorization"; + /** This is the authentication session for the credential. */ + authenticationSession: Oauth2AuthenticationSession; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -33271,10 +37592,13 @@ export interface GoogleSheetsOAuth2AuthorizationCredential { name?: string; } -export interface SlackOAuth2AuthorizationCredential { - provider: "slack.oauth2-authorization"; - /** The authorization ID for the OAuth2 authorization */ - authorizationId: string; +export interface InworldCredential { + provider: "inworld"; + /** + * This is the Inworld Basic (Base64) authentication token. This is not returned in the API. + * @example "your-base64-token-here" + */ + apiKey: string; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -33297,10 +37621,10 @@ export interface SlackOAuth2AuthorizationCredential { name?: string; } -export interface GoHighLevelMCPCredential { - provider: "ghl.oauth2-authorization"; - /** This is the authentication session for the credential. */ - authenticationSession: Oauth2AuthenticationSession; +export interface EmailCredential { + provider: "email"; + /** The recipient email address for alerts */ + email: string; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -33323,13 +37647,10 @@ export interface GoHighLevelMCPCredential { name?: string; } -export interface InworldCredential { - provider: "inworld"; - /** - * This is the Inworld Basic (Base64) authentication token. This is not returned in the API. - * @example "your-base64-token-here" - */ - apiKey: string; +export interface SlackWebhookCredential { + provider: "slack-webhook"; + /** Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. This is not returned in the API. */ + webhookUrl: string; /** This is the unique identifier for the credential. */ id: string; /** This is the unique identifier for the org that this credential belongs to. */ @@ -33441,8 +37762,23 @@ export interface CreateNeuphonicCredentialDTO { name?: string; } -export interface CreateSpeechmaticsCredentialDTO { - provider: "speechmatics"; +export interface CreateWellSaidCredentialDTO { + provider: "wellsaid"; + /** + * This is not returned in the API. + * @maxLength 10000 + */ + apiKey: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface CreateSonioxCredentialDTO { + provider: "soniox"; /** This is not returned in the API. */ apiKey: string; /** @@ -33453,8 +37789,8 @@ export interface CreateSpeechmaticsCredentialDTO { name?: string; } -export interface CreateTrieveCredentialDTO { - provider: "trieve"; +export interface CreateSpeechmaticsCredentialDTO { + provider: "speechmatics"; /** This is not returned in the API. */ apiKey: string; /** @@ -33478,6 +37814,10 @@ export interface CreateCustomCredentialDTO { | ({ type: "bearer"; } & BearerAuthenticationPlan); + /** This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. */ + encryptionPlan?: { + type: "public-key"; + } & PublicKeyEncryptionPlan; /** * This is the name of credential. This is just for your reference. * @minLength 1 @@ -33513,6 +37853,30 @@ export interface CreateInworldCredentialDTO { name?: string; } +export interface CreateEmailCredentialDTO { + provider: "email"; + /** The recipient email address for alerts */ + email: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface CreateSlackWebhookCredentialDTO { + provider: "slack-webhook"; + /** Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. This is not returned in the API. */ + webhookUrl: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + export interface UpdateAnthropicCredentialDTO { /** * This is not returned in the API. @@ -33527,6 +37891,27 @@ export interface UpdateAnthropicCredentialDTO { name?: string; } +export interface UpdateAnthropicBedrockCredentialDTO { + /** AWS region where Bedrock is configured. */ + region?: + | "us-east-1" + | "us-west-2" + | "eu-west-1" + | "eu-west-3" + | "ap-northeast-1" + | "ap-southeast-2"; + /** Authentication method - either direct IAM credentials or cross-account role assumption. */ + authenticationPlan?: + | AWSIAMCredentialsAuthenticationPlan + | AWSStsAuthenticationPlan; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + export interface UpdateAnyscaleCredentialDTO { /** * This is not returned in the API. @@ -33560,22 +37945,27 @@ export interface UpdateAzureCredentialDTO { service?: "speech" | "blob_storage"; /** This is the region of the Azure resource. */ region?: - | "australia" + | "australiaeast" | "canadaeast" | "canadacentral" + | "centralus" | "eastus2" | "eastus" | "france" + | "germanywestcentral" | "india" | "japaneast" | "japanwest" - | "uaenorth" | "northcentralus" | "norway" + | "polandcentral" | "southcentralus" + | "spaincentral" | "swedencentral" | "switzerland" + | "uaenorth" | "uk" + | "westeurope" | "westus" | "westus3"; /** @@ -33600,26 +37990,38 @@ export interface UpdateAzureCredentialDTO { export interface UpdateAzureOpenAICredentialDTO { region?: - | "australia" + | "australiaeast" | "canadaeast" | "canadacentral" + | "centralus" | "eastus2" | "eastus" | "france" + | "germanywestcentral" | "india" | "japaneast" | "japanwest" - | "uaenorth" | "northcentralus" | "norway" + | "polandcentral" | "southcentralus" + | "spaincentral" | "swedencentral" | "switzerland" + | "uaenorth" | "uk" + | "westeurope" | "westus" | "westus3"; /** @example ["gpt-4-0125-preview","gpt-4-0613"] */ models?: + | "gpt-5.4" + | "gpt-5.4-mini" + | "gpt-5.4-nano" + | "gpt-5.2" + | "gpt-5.2-chat" + | "gpt-5.1" + | "gpt-5.1-chat" | "gpt-5" | "gpt-5-mini" | "gpt-5-nano" @@ -33696,6 +38098,8 @@ export interface UpdateCartesiaCredentialDTO { * @maxLength 40 */ name?: string; + /** This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. */ + apiUrl?: string; } export interface UpdateCerebrasCredentialDTO { @@ -34033,43 +38437,11 @@ export interface UpdateRunpodCredentialDTO { name?: string; } -export interface UpdateS3CredentialDTO { - /** AWS access key ID. */ - awsAccessKeyId?: string; - /** AWS access key secret. This is not returned in the API. */ - awsSecretAccessKey?: string; - /** AWS region in which the S3 bucket is located. */ - region?: string; - /** AWS S3 bucket name. */ - s3BucketName?: string; - /** The path prefix for the uploaded recording. Ex. "recordings/" */ - s3PathPrefix?: string; - /** - * This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. - * @min 1 - */ - fallbackIndex?: number; - /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 - */ - name?: string; -} - -export interface UpdateSmallestAICredentialDTO { - /** This is not returned in the API. */ - apiKey?: string; +export interface UpdateWellSaidCredentialDTO { /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 + * This is not returned in the API. + * @maxLength 10000 */ - name?: string; -} - -export interface UpdateSpeechmaticsCredentialDTO { - /** This is not returned in the API. */ apiKey?: string; /** * This is the name of credential. This is just for your reference. @@ -34079,7 +38451,17 @@ export interface UpdateSpeechmaticsCredentialDTO { name?: string; } -export interface UpdateSupabaseCredentialDTO { +export interface UpdateS3CredentialDTO { + /** AWS access key ID. */ + awsAccessKeyId?: string; + /** AWS access key secret. This is not returned in the API. */ + awsSecretAccessKey?: string; + /** AWS region in which the S3 bucket is located. */ + region?: string; + /** AWS S3 bucket name. */ + s3BucketName?: string; + /** The path prefix for the uploaded recording. Ex. "recordings/" */ + s3PathPrefix?: string; /** * This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. * @min 1 @@ -34091,18 +38473,6 @@ export interface UpdateSupabaseCredentialDTO { * @maxLength 40 */ name?: string; - bucketPlan?: SupabaseBucketPlan; -} - -export interface UpdateTavusCredentialDTO { - /** This is not returned in the API. */ - apiKey?: string; - /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 - */ - name?: string; } export interface UpdateTogetherAICredentialDTO { @@ -34116,17 +38486,6 @@ export interface UpdateTogetherAICredentialDTO { name?: string; } -export interface UpdateTrieveCredentialDTO { - /** This is not returned in the API. */ - apiKey?: string; - /** - * This is the name of credential. This is just for your reference. - * @minLength 1 - * @maxLength 40 - */ - name?: string; -} - export interface UpdateTwilioCredentialDTO { /** This is not returned in the API. */ authToken?: string; @@ -34187,6 +38546,10 @@ export interface UpdateCustomCredentialDTO { | ({ type: "bearer"; } & BearerAuthenticationPlan); + /** This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. */ + encryptionPlan?: { + type: "public-key"; + } & PublicKeyEncryptionPlan; /** * This is the name of credential. This is just for your reference. * @minLength 1 @@ -34276,11 +38639,45 @@ export interface UpdateInworldCredentialDTO { name?: string; } +export interface UpdateEmailCredentialDTO { + /** The recipient email address for alerts */ + email?: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface UpdateSlackWebhookCredentialDTO { + /** Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. This is not returned in the API. */ + webhookUrl?: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + +export interface UpdateSonioxCredentialDTO { + /** This is not returned in the API. */ + apiKey?: string; + /** + * This is the name of credential. This is just for your reference. + * @minLength 1 + * @maxLength 40 + */ + name?: string; +} + export interface CredentialSessionResponse { sessionToken: string; } export interface CredentialEndUser { + endUserEmail?: string | null; endUserId: string; organizationId: string; tags?: object; @@ -34303,6 +38700,7 @@ export interface CredentialWebhookDTO { success: boolean; endUser: CredentialEndUser; error?: CredentialSessionError; + tags?: object; } export interface CredentialActionRequest { @@ -34344,6 +38742,32 @@ export interface BearerAuthenticationPlan { bearerPrefixEnabled?: boolean; } +export interface AWSIAMCredentialsAuthenticationPlan { + type: "aws-iam"; + /** + * AWS Access Key ID. This is not returned in the API. + * @maxLength 128 + */ + awsAccessKeyId: string; + /** + * AWS Secret Access Key. This is not returned in the API. + * @maxLength 256 + */ + awsSecretAccessKey: string; +} + +export interface AWSStsAuthenticationPlan { + /** This is the type of authentication plan */ + type: "aws-sts"; + /** This is the role ARN for the AWS credential */ + roleArn: string; + /** + * Optional external ID for additional security in the role trust policy. + * @maxLength 256 + */ + externalId?: string; +} + export interface ToolTemplateSetup { title: string; description?: string; @@ -34442,6 +38866,7 @@ export interface CreateToolTemplateDTO { details?: | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -34459,7 +38884,9 @@ export interface CreateToolTemplateDTO { | CreateSlackSendMessageToolDTO | CreateSmsToolDTO | CreateTextEditorToolDTO - | CreateTransferCallToolDTO; + | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO; providerDetails?: | MakeToolProviderDetails | GhlToolProviderDetails @@ -34487,6 +38914,7 @@ export interface Template { details?: | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -34504,7 +38932,9 @@ export interface Template { | CreateSlackSendMessageToolDTO | CreateSmsToolDTO | CreateTextEditorToolDTO - | CreateTransferCallToolDTO; + | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO; providerDetails?: | MakeToolProviderDetails | GhlToolProviderDetails @@ -34546,6 +38976,7 @@ export interface UpdateToolTemplateDTO { details?: | CreateApiRequestToolDTO | CreateBashToolDTO + | CreateCodeToolDTO | CreateComputerToolDTO | CreateDtmfToolDTO | CreateEndCallToolDTO @@ -34563,7 +38994,9 @@ export interface UpdateToolTemplateDTO { | CreateSlackSendMessageToolDTO | CreateSmsToolDTO | CreateTextEditorToolDTO - | CreateTransferCallToolDTO; + | CreateTransferCallToolDTO + | CreateSipRequestToolDTO + | CreateVoicemailToolDTO; providerDetails?: | MakeToolProviderDetails | GhlToolProviderDetails @@ -34607,6 +39040,7 @@ export interface VoiceLibrary { | "sesame" | "inworld" | "minimax" + | "wellsaid" | "orpheus"; /** The ID of the voice provided by the provider. */ providerId?: string; @@ -34628,6 +39062,8 @@ export interface VoiceLibrary { accent?: string; /** The preview URL of the voice. */ previewUrl?: string; + /** The sort order of the voice for display purposes. Lower values appear first. */ + sortOrder?: number; /** The description of the voice. */ description?: string; /** The credential ID of the voice. */ @@ -34672,6 +39108,7 @@ export interface SyncVoiceLibraryDTO { | "sesame" | "inworld" | "minimax" + | "wellsaid" | "orpheus"; } @@ -34682,6 +39119,50 @@ export interface CreateSesameVoiceDTO { transcription?: string; } +export interface CartesiaPronunciationDictItem { + /** + * The text to be replaced in pronunciation + * @example "Vapi" + */ + text: string; + /** + * The pronunciation alias or IPA representation + * Can be a "sounds-like" guidance (e.g., "VAH-pee") or IPA notation (e.g., "<<ˈ|v|ɑ|ˈ|p|i>>") + * @example "VAH-pee" + */ + alias: string; +} + +export interface CartesiaPronunciationDictionary { + /** + * Unique identifier for the pronunciation dictionary + * @example "dict_abc123" + */ + id: string; + /** + * Name of the pronunciation dictionary + * @example "My Dictionary" + */ + name: string; + /** + * ID of the user who owns this dictionary + * @example "user_xyz789" + */ + ownerId: string; + /** + * Whether this dictionary is pinned for the user + * @example false + */ + pinned: boolean; + /** List of text-to-pronunciation mappings */ + items: CartesiaPronunciationDictItem[]; + /** + * ISO 8601 timestamp of when the dictionary was created + * @example "2024-01-15T10:30:00Z" + */ + createdAt: string; +} + export interface ElevenLabsPronunciationDictionary { /** * The ID of the pronunciation dictionary @@ -34738,13 +39219,13 @@ export interface ProviderResource { */ updatedAt: string; /** This is the provider that manages this resource. */ - provider: "11labs"; + provider: "cartesia" | "11labs"; /** This is the name/type of the resource. */ resourceName: "pronunciation-dictionary"; /** This is the provider-specific identifier for the resource. */ resourceId: string; /** This is the full resource data from the provider's API. */ - resource: ElevenLabsPronunciationDictionary; + resource: object; } export interface ProviderResourcePaginatedResponse { @@ -34847,6 +39328,7 @@ export interface AnalyticsOperation { | "costBreakdown.ttsCharacters" | "costBreakdown.llmPromptTokens" | "costBreakdown.llmCompletionTokens" + | "costBreakdown.llmCachedPromptTokens" | "duration" | "concurrency" | "minutesUsed"; @@ -35035,6 +39517,11 @@ export interface ClientMessageModelOutput { | CreateTelnyxPhoneNumberDTO; /** This is the type of the message. "model-output" is sent as the model outputs tokens. */ type: "model-output"; + /** + * This is the unique identifier for the current LLM turn. All tokens from the same + * LLM response share the same turnId. Use this to group tokens and discard on interruption. + */ + turnId?: string; /** This is the timestamp of the message. */ timestamp?: number; /** This is the call that the message is associated with. */ @@ -35202,6 +39689,11 @@ export interface ClientMessageUserInterrupted { | CreateTelnyxPhoneNumberDTO; /** This is the type of the message. "user-interrupted" is sent when the user interrupts the assistant. */ type: "user-interrupted"; + /** + * This is the turnId of the LLM response that was interrupted. Matches the turnId + * on model-output messages so clients can discard the interrupted turn's tokens. + */ + turnId?: string; /** This is the timestamp of the message. */ timestamp?: number; /** This is the call that the message is associated with. */ @@ -35256,6 +39748,57 @@ export interface ClientMessageVoiceInput { input: string; } +export interface ClientMessageAssistantSpeech { + /** This is the phone number that the message is associated with. */ + phoneNumber?: + | CreateByoPhoneNumberDTO + | CreateTwilioPhoneNumberDTO + | CreateVonagePhoneNumberDTO + | CreateVapiPhoneNumberDTO + | CreateTelnyxPhoneNumberDTO; + /** This is the type of the message. "assistant-speech" is sent as assistant audio is being played. */ + type: "assistant.speechStarted"; + /** + * The full assistant text for the current turn. This is the complete text, + * not an incremental delta — consumers should use `timing` metadata (e.g. + * `wordsSpoken`) to determine which portion has been spoken so far. + */ + text: string; + /** This is the turn number of the assistant speech event (0-indexed). */ + turn?: number; + /** Indicates how the text was sourced. */ + source?: "model" | "force-say" | "custom-voice"; + /** + * Optional timing metadata. Shape depends on `timing.type`: + * + * - `word-alignment` (ElevenLabs): per-character timing at playback + * cadence. words[] includes space entries. Best consumed by tracking + * a running character count: join timing.words, add to a char cursor, + * and highlight text up to that position. No interpolation needed. + * + * - `word-progress` (Minimax with voice.subtitleType: 'word'): cursor- + * based word count per TTS segment. Use wordsSpoken as the anchor, + * interpolate forward using segmentDurationMs or timing.words until + * the next event arrives. + * + * When absent, the event is a text-only fallback for providers without + * word-level timing (e.g. Cartesia, Deepgram, Azure). Text emits once + * per TTS chunk when audio is playing. Optionally interpolate a word + * cursor at ~3.5 words/sec between events for approximate tracking. + */ + timing?: + | AssistantSpeechWordAlignmentTiming + | AssistantSpeechWordProgressTiming; + /** This is the timestamp of the message. */ + timestamp?: number; + /** This is the call that the message is associated with. */ + call?: Call; + /** This is the customer that the message is associated with. */ + customer?: CreateCustomerDTO; + /** This is the assistant that the message is associated with. */ + assistant?: CreateAssistantDTO; +} + export interface ClientMessageChatCreated { /** This is the phone number that the message is associated with. */ phoneNumber?: @@ -35423,6 +39966,7 @@ export interface ClientMessage { | ClientMessageUserInterrupted | ClientMessageLanguageChangeDetected | ClientMessageVoiceInput + | ClientMessageAssistantSpeech | ClientMessageChatCreated | ClientMessageChatDeleted | ClientMessageSessionCreated @@ -35552,6 +40096,7 @@ export interface ServerMessageEndOfCallReport { | "pipeline-error-sesame-voice-failed" | "pipeline-error-inworld-voice-failed" | "pipeline-error-minimax-voice-failed" + | "pipeline-error-wellsaid-voice-failed" | "pipeline-error-tavus-video-failed" | "call.in-progress.error-vapifault-openai-voice-failed" | "call.in-progress.error-vapifault-cartesia-voice-failed" @@ -35568,6 +40113,7 @@ export interface ServerMessageEndOfCallReport { | "call.in-progress.error-vapifault-sesame-voice-failed" | "call.in-progress.error-vapifault-inworld-voice-failed" | "call.in-progress.error-vapifault-minimax-voice-failed" + | "call.in-progress.error-vapifault-wellsaid-voice-failed" | "call.in-progress.error-vapifault-tavus-video-failed" | "pipeline-error-vapi-llm-failed" | "pipeline-error-vapi-400-bad-request-validation-failed" @@ -35606,6 +40152,22 @@ export interface ServerMessageEndOfCallReport { | "call.in-progress.error-vapifault-talkscriber-transcriber-failed" | "pipeline-error-azure-speech-transcriber-failed" | "call.in-progress.error-vapifault-azure-speech-transcriber-failed" + | "pipeline-error-eleven-labs-transcriber-failed" + | "call.in-progress.error-vapifault-eleven-labs-transcriber-failed" + | "pipeline-error-google-transcriber-failed" + | "call.in-progress.error-vapifault-google-transcriber-failed" + | "pipeline-error-openai-transcriber-failed" + | "call.in-progress.error-vapifault-openai-transcriber-failed" + | "pipeline-error-soniox-transcriber-auth-failed" + | "pipeline-error-soniox-transcriber-rate-limited" + | "pipeline-error-soniox-transcriber-invalid-config" + | "pipeline-error-soniox-transcriber-server-error" + | "pipeline-error-soniox-transcriber-failed" + | "call.in-progress.error-vapifault-soniox-transcriber-auth-failed" + | "call.in-progress.error-vapifault-soniox-transcriber-rate-limited" + | "call.in-progress.error-vapifault-soniox-transcriber-invalid-config" + | "call.in-progress.error-vapifault-soniox-transcriber-server-error" + | "call.in-progress.error-vapifault-soniox-transcriber-failed" | "call.in-progress.error-pipeline-no-available-llm-model" | "worker-shutdown" | "vonage-disconnected" @@ -35620,15 +40182,21 @@ export interface ServerMessageEndOfCallReport { | "call.in-progress.error-vapifault-worker-died" | "call.in-progress.twilio-completed-call" | "call.in-progress.sip-completed-call" + | "call.in-progress.error-sip-inbound-call-failed-to-connect" + | "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable" + | "call.in-progress.error-sip-outbound-call-failed-to-connect" + | "call.ringing.error-sip-inbound-call-failed-to-connect" | "call.in-progress.error-providerfault-openai-llm-failed" | "call.in-progress.error-providerfault-azure-openai-llm-failed" | "call.in-progress.error-providerfault-groq-llm-failed" | "call.in-progress.error-providerfault-google-llm-failed" | "call.in-progress.error-providerfault-xai-llm-failed" | "call.in-progress.error-providerfault-mistral-llm-failed" + | "call.in-progress.error-providerfault-minimax-llm-failed" | "call.in-progress.error-providerfault-inflection-ai-llm-failed" | "call.in-progress.error-providerfault-cerebras-llm-failed" | "call.in-progress.error-providerfault-deep-seek-llm-failed" + | "call.in-progress.error-providerfault-baseten-llm-failed" | "call.in-progress.error-vapifault-chat-pipeline-failed-to-start" | "pipeline-error-openai-400-bad-request-validation-failed" | "pipeline-error-openai-401-unauthorized" @@ -35688,6 +40256,19 @@ export interface ServerMessageEndOfCallReport { | "call.in-progress.error-vapifault-xai-429-exceeded-quota" | "call.in-progress.error-providerfault-xai-500-server-error" | "call.in-progress.error-providerfault-xai-503-server-overloaded-error" + | "pipeline-error-baseten-400-bad-request-validation-failed" + | "pipeline-error-baseten-401-unauthorized" + | "pipeline-error-baseten-403-model-access-denied" + | "pipeline-error-baseten-429-exceeded-quota" + | "pipeline-error-baseten-500-server-error" + | "pipeline-error-baseten-503-server-overloaded-error" + | "pipeline-error-baseten-llm-failed" + | "call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed" + | "call.in-progress.error-vapifault-baseten-401-unauthorized" + | "call.in-progress.error-vapifault-baseten-403-model-access-denied" + | "call.in-progress.error-vapifault-baseten-429-exceeded-quota" + | "call.in-progress.error-providerfault-baseten-500-server-error" + | "call.in-progress.error-providerfault-baseten-503-server-overloaded-error" | "pipeline-error-mistral-400-bad-request-validation-failed" | "pipeline-error-mistral-401-unauthorized" | "pipeline-error-mistral-403-model-access-denied" @@ -35701,6 +40282,19 @@ export interface ServerMessageEndOfCallReport { | "call.in-progress.error-vapifault-mistral-429-exceeded-quota" | "call.in-progress.error-providerfault-mistral-500-server-error" | "call.in-progress.error-providerfault-mistral-503-server-overloaded-error" + | "pipeline-error-minimax-400-bad-request-validation-failed" + | "pipeline-error-minimax-401-unauthorized" + | "pipeline-error-minimax-403-model-access-denied" + | "pipeline-error-minimax-429-exceeded-quota" + | "pipeline-error-minimax-500-server-error" + | "pipeline-error-minimax-503-server-overloaded-error" + | "pipeline-error-minimax-llm-failed" + | "call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed" + | "call.in-progress.error-vapifault-minimax-401-unauthorized" + | "call.in-progress.error-vapifault-minimax-403-model-access-denied" + | "call.in-progress.error-vapifault-minimax-429-exceeded-quota" + | "call.in-progress.error-providerfault-minimax-500-server-error" + | "call.in-progress.error-providerfault-minimax-503-server-overloaded-error" | "pipeline-error-inflection-ai-400-bad-request-validation-failed" | "pipeline-error-inflection-ai-401-unauthorized" | "pipeline-error-inflection-ai-403-model-access-denied" @@ -35978,8 +40572,6 @@ export interface ServerMessageEndOfCallReport { | "call.in-progress.error-providerfault-playht-504-gateway-error" | "pipeline-error-custom-transcriber-failed" | "call.in-progress.error-vapifault-custom-transcriber-failed" - | "pipeline-error-eleven-labs-transcriber-failed" - | "call.in-progress.error-vapifault-eleven-labs-transcriber-failed" | "pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination" | "pipeline-error-deepgram-returning-401-invalid-credentials" | "pipeline-error-deepgram-returning-403-model-access-denied" @@ -35995,10 +40587,6 @@ export interface ServerMessageEndOfCallReport { | "call.in-progress.error-providerfault-deepgram-returning-500-invalid-json" | "call.in-progress.error-providerfault-deepgram-returning-502-network-error" | "call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach" - | "pipeline-error-google-transcriber-failed" - | "call.in-progress.error-vapifault-google-transcriber-failed" - | "pipeline-error-openai-transcriber-failed" - | "call.in-progress.error-vapifault-openai-transcriber-failed" | "call.in-progress.error-warm-transfer-max-duration" | "call.in-progress.error-warm-transfer-assistant-cancelled" | "call.in-progress.error-warm-transfer-silence-timeout" @@ -36015,6 +40603,7 @@ export interface ServerMessageEndOfCallReport { | "customer-ended-call" | "customer-ended-call-before-warm-transfer" | "customer-ended-call-after-warm-transfer-attempt" + | "customer-ended-call-during-transfer" | "customer-did-not-answer" | "customer-did-not-give-microphone-permission" | "exceeded-max-duration" @@ -36022,18 +40611,15 @@ export interface ServerMessageEndOfCallReport { | "phone-call-provider-closed-websocket" | "call.forwarding.operator-busy" | "silence-timed-out" - | "call.in-progress.error-sip-inbound-call-failed-to-connect" | "call.in-progress.error-providerfault-outbound-sip-403-forbidden" | "call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required" - | "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable" + | "call.in-progress.error-providerfault-outbound-sip-408-request-timeout" | "call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable" - | "call.in-progress.error-sip-outbound-call-failed-to-connect" | "call.ringing.hook-executed-say" | "call.ringing.hook-executed-transfer" | "call.ending.hook-executed-say" | "call.ending.hook-executed-transfer" | "call.ringing.sip-inbound-caller-hungup-before-call-connect" - | "call.ringing.error-sip-inbound-call-failed-to-connect" | "twilio-failed-to-connect-call" | "twilio-reported-customer-misdialed" | "vonage-rejected" @@ -36052,6 +40638,11 @@ export interface ServerMessageEndOfCallReport { | AnalysisCost | KnowledgeBaseCost )[]; + /** + * This is the destination the call was transferred to, if the call was forwarded. + * This can also be found at `call.destination` on GET /call/:id. + */ + destination?: TransferDestinationNumber | TransferDestinationSip; /** This is the timestamp of the message. */ timestamp?: number; /** These are the artifacts from the call. This can also be found at `call.artifact` on GET /call/:id. */ @@ -36192,6 +40783,11 @@ export interface ServerMessageModelOutput { | CreateTelnyxPhoneNumberDTO; /** This is the type of the message. "model-output" is sent as the model outputs tokens. */ type: "model-output"; + /** + * This is the unique identifier for the current LLM turn. All tokens from the same + * LLM response share the same turnId. Use this to group tokens and discard on interruption. + */ + turnId?: string; /** This is the timestamp of the message. */ timestamp?: number; /** @@ -36346,6 +40942,7 @@ export interface ServerMessageStatusUpdate { | "pipeline-error-sesame-voice-failed" | "pipeline-error-inworld-voice-failed" | "pipeline-error-minimax-voice-failed" + | "pipeline-error-wellsaid-voice-failed" | "pipeline-error-tavus-video-failed" | "call.in-progress.error-vapifault-openai-voice-failed" | "call.in-progress.error-vapifault-cartesia-voice-failed" @@ -36362,6 +40959,7 @@ export interface ServerMessageStatusUpdate { | "call.in-progress.error-vapifault-sesame-voice-failed" | "call.in-progress.error-vapifault-inworld-voice-failed" | "call.in-progress.error-vapifault-minimax-voice-failed" + | "call.in-progress.error-vapifault-wellsaid-voice-failed" | "call.in-progress.error-vapifault-tavus-video-failed" | "pipeline-error-vapi-llm-failed" | "pipeline-error-vapi-400-bad-request-validation-failed" @@ -36400,6 +40998,22 @@ export interface ServerMessageStatusUpdate { | "call.in-progress.error-vapifault-talkscriber-transcriber-failed" | "pipeline-error-azure-speech-transcriber-failed" | "call.in-progress.error-vapifault-azure-speech-transcriber-failed" + | "pipeline-error-eleven-labs-transcriber-failed" + | "call.in-progress.error-vapifault-eleven-labs-transcriber-failed" + | "pipeline-error-google-transcriber-failed" + | "call.in-progress.error-vapifault-google-transcriber-failed" + | "pipeline-error-openai-transcriber-failed" + | "call.in-progress.error-vapifault-openai-transcriber-failed" + | "pipeline-error-soniox-transcriber-auth-failed" + | "pipeline-error-soniox-transcriber-rate-limited" + | "pipeline-error-soniox-transcriber-invalid-config" + | "pipeline-error-soniox-transcriber-server-error" + | "pipeline-error-soniox-transcriber-failed" + | "call.in-progress.error-vapifault-soniox-transcriber-auth-failed" + | "call.in-progress.error-vapifault-soniox-transcriber-rate-limited" + | "call.in-progress.error-vapifault-soniox-transcriber-invalid-config" + | "call.in-progress.error-vapifault-soniox-transcriber-server-error" + | "call.in-progress.error-vapifault-soniox-transcriber-failed" | "call.in-progress.error-pipeline-no-available-llm-model" | "worker-shutdown" | "vonage-disconnected" @@ -36414,15 +41028,21 @@ export interface ServerMessageStatusUpdate { | "call.in-progress.error-vapifault-worker-died" | "call.in-progress.twilio-completed-call" | "call.in-progress.sip-completed-call" + | "call.in-progress.error-sip-inbound-call-failed-to-connect" + | "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable" + | "call.in-progress.error-sip-outbound-call-failed-to-connect" + | "call.ringing.error-sip-inbound-call-failed-to-connect" | "call.in-progress.error-providerfault-openai-llm-failed" | "call.in-progress.error-providerfault-azure-openai-llm-failed" | "call.in-progress.error-providerfault-groq-llm-failed" | "call.in-progress.error-providerfault-google-llm-failed" | "call.in-progress.error-providerfault-xai-llm-failed" | "call.in-progress.error-providerfault-mistral-llm-failed" + | "call.in-progress.error-providerfault-minimax-llm-failed" | "call.in-progress.error-providerfault-inflection-ai-llm-failed" | "call.in-progress.error-providerfault-cerebras-llm-failed" | "call.in-progress.error-providerfault-deep-seek-llm-failed" + | "call.in-progress.error-providerfault-baseten-llm-failed" | "call.in-progress.error-vapifault-chat-pipeline-failed-to-start" | "pipeline-error-openai-400-bad-request-validation-failed" | "pipeline-error-openai-401-unauthorized" @@ -36482,6 +41102,19 @@ export interface ServerMessageStatusUpdate { | "call.in-progress.error-vapifault-xai-429-exceeded-quota" | "call.in-progress.error-providerfault-xai-500-server-error" | "call.in-progress.error-providerfault-xai-503-server-overloaded-error" + | "pipeline-error-baseten-400-bad-request-validation-failed" + | "pipeline-error-baseten-401-unauthorized" + | "pipeline-error-baseten-403-model-access-denied" + | "pipeline-error-baseten-429-exceeded-quota" + | "pipeline-error-baseten-500-server-error" + | "pipeline-error-baseten-503-server-overloaded-error" + | "pipeline-error-baseten-llm-failed" + | "call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed" + | "call.in-progress.error-vapifault-baseten-401-unauthorized" + | "call.in-progress.error-vapifault-baseten-403-model-access-denied" + | "call.in-progress.error-vapifault-baseten-429-exceeded-quota" + | "call.in-progress.error-providerfault-baseten-500-server-error" + | "call.in-progress.error-providerfault-baseten-503-server-overloaded-error" | "pipeline-error-mistral-400-bad-request-validation-failed" | "pipeline-error-mistral-401-unauthorized" | "pipeline-error-mistral-403-model-access-denied" @@ -36495,6 +41128,19 @@ export interface ServerMessageStatusUpdate { | "call.in-progress.error-vapifault-mistral-429-exceeded-quota" | "call.in-progress.error-providerfault-mistral-500-server-error" | "call.in-progress.error-providerfault-mistral-503-server-overloaded-error" + | "pipeline-error-minimax-400-bad-request-validation-failed" + | "pipeline-error-minimax-401-unauthorized" + | "pipeline-error-minimax-403-model-access-denied" + | "pipeline-error-minimax-429-exceeded-quota" + | "pipeline-error-minimax-500-server-error" + | "pipeline-error-minimax-503-server-overloaded-error" + | "pipeline-error-minimax-llm-failed" + | "call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed" + | "call.in-progress.error-vapifault-minimax-401-unauthorized" + | "call.in-progress.error-vapifault-minimax-403-model-access-denied" + | "call.in-progress.error-vapifault-minimax-429-exceeded-quota" + | "call.in-progress.error-providerfault-minimax-500-server-error" + | "call.in-progress.error-providerfault-minimax-503-server-overloaded-error" | "pipeline-error-inflection-ai-400-bad-request-validation-failed" | "pipeline-error-inflection-ai-401-unauthorized" | "pipeline-error-inflection-ai-403-model-access-denied" @@ -36772,8 +41418,6 @@ export interface ServerMessageStatusUpdate { | "call.in-progress.error-providerfault-playht-504-gateway-error" | "pipeline-error-custom-transcriber-failed" | "call.in-progress.error-vapifault-custom-transcriber-failed" - | "pipeline-error-eleven-labs-transcriber-failed" - | "call.in-progress.error-vapifault-eleven-labs-transcriber-failed" | "pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination" | "pipeline-error-deepgram-returning-401-invalid-credentials" | "pipeline-error-deepgram-returning-403-model-access-denied" @@ -36789,10 +41433,6 @@ export interface ServerMessageStatusUpdate { | "call.in-progress.error-providerfault-deepgram-returning-500-invalid-json" | "call.in-progress.error-providerfault-deepgram-returning-502-network-error" | "call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach" - | "pipeline-error-google-transcriber-failed" - | "call.in-progress.error-vapifault-google-transcriber-failed" - | "pipeline-error-openai-transcriber-failed" - | "call.in-progress.error-vapifault-openai-transcriber-failed" | "call.in-progress.error-warm-transfer-max-duration" | "call.in-progress.error-warm-transfer-assistant-cancelled" | "call.in-progress.error-warm-transfer-silence-timeout" @@ -36809,6 +41449,7 @@ export interface ServerMessageStatusUpdate { | "customer-ended-call" | "customer-ended-call-before-warm-transfer" | "customer-ended-call-after-warm-transfer-attempt" + | "customer-ended-call-during-transfer" | "customer-did-not-answer" | "customer-did-not-give-microphone-permission" | "exceeded-max-duration" @@ -36816,18 +41457,15 @@ export interface ServerMessageStatusUpdate { | "phone-call-provider-closed-websocket" | "call.forwarding.operator-busy" | "silence-timed-out" - | "call.in-progress.error-sip-inbound-call-failed-to-connect" | "call.in-progress.error-providerfault-outbound-sip-403-forbidden" | "call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required" - | "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable" + | "call.in-progress.error-providerfault-outbound-sip-408-request-timeout" | "call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable" - | "call.in-progress.error-sip-outbound-call-failed-to-connect" | "call.ringing.hook-executed-say" | "call.ringing.hook-executed-transfer" | "call.ending.hook-executed-say" | "call.ending.hook-executed-transfer" | "call.ringing.sip-inbound-caller-hungup-before-call-connect" - | "call.ringing.error-sip-inbound-call-failed-to-connect" | "twilio-failed-to-connect-call" | "twilio-reported-customer-misdialed" | "vonage-rejected" @@ -37032,6 +41670,11 @@ export interface ServerMessageUserInterrupted { | CreateTelnyxPhoneNumberDTO; /** This is the type of the message. "user-interrupted" is sent when the user interrupts the assistant. */ type: "user-interrupted"; + /** + * This is the turnId of the LLM response that was interrupted. Matches the turnId + * on model-output messages so clients can discard the interrupted turn's tokens. + */ + turnId?: string; /** This is the timestamp of the message. */ timestamp?: number; /** @@ -37110,6 +41753,65 @@ export interface ServerMessageVoiceInput { input: string; } +export interface ServerMessageAssistantSpeech { + /** This is the phone number that the message is associated with. */ + phoneNumber?: + | CreateByoPhoneNumberDTO + | CreateTwilioPhoneNumberDTO + | CreateVonagePhoneNumberDTO + | CreateVapiPhoneNumberDTO + | CreateTelnyxPhoneNumberDTO; + /** This is the type of the message. "assistant-speech" is sent as assistant audio is being played. */ + type: "assistant.speechStarted"; + /** + * The full assistant text for the current turn. This is the complete text, + * not an incremental delta — consumers should use `timing` metadata (e.g. + * `wordsSpoken`) to determine which portion has been spoken so far. + */ + text: string; + /** This is the turn number of the assistant speech event (0-indexed). */ + turn?: number; + /** Indicates how the text was sourced. */ + source?: "model" | "force-say" | "custom-voice"; + /** + * Optional timing metadata. Shape depends on `timing.type`: + * + * - `word-alignment` (ElevenLabs): per-character timing at playback + * cadence. words[] includes space entries. Best consumed by tracking + * a running character count: join timing.words, add to a char cursor, + * and highlight text up to that position. No interpolation needed. + * + * - `word-progress` (Minimax with voice.subtitleType: 'word'): cursor- + * based word count per TTS segment. Use wordsSpoken as the anchor, + * interpolate forward using segmentDurationMs or timing.words until + * the next event arrives. + * + * When absent, the event is a text-only fallback for providers without + * word-level timing (e.g. Cartesia, Deepgram, Azure). Text emits once + * per TTS chunk when audio is playing. Optionally interpolate a word + * cursor at ~3.5 words/sec between events for approximate tracking. + */ + timing?: + | AssistantSpeechWordAlignmentTiming + | AssistantSpeechWordProgressTiming; + /** This is the timestamp of the message. */ + timestamp?: number; + /** + * This is a live version of the `call.artifact`. + * + * This matches what is stored on `call.artifact` after the call. + */ + artifact?: Artifact; + /** This is the assistant that the message is associated with. */ + assistant?: CreateAssistantDTO; + /** This is the customer that the message is associated with. */ + customer?: CreateCustomerDTO; + /** This is the call that the message is associated with. */ + call?: Call; + /** This is the chat object. */ + chat?: Chat; +} + export interface ServerMessageVoiceRequest { /** This is the phone number that the message is associated with. */ phoneNumber?: @@ -37461,6 +42163,7 @@ export interface ServerMessage { | ServerMessageUserInterrupted | ServerMessageLanguageChangeDetected | ServerMessageVoiceInput + | ServerMessageAssistantSpeech | ServerMessageVoiceRequest | ServerMessageCallEndpointingRequest | ServerMessageChatCreated @@ -37551,8 +42254,10 @@ export interface ServerMessageResponseAssistantRequest { } export interface ServerMessageResponseHandoffDestinationRequest { + /** This is the local tool result message returned for the handoff tool call. */ + result?: string; /** This is the destination you'd like the call to be transferred to. */ - destination: HandoffDestinationAssistant; + destination: object; /** This is the error message if the handoff should not be made. */ error?: string; } @@ -37753,6 +42458,13 @@ export interface ClientInboundMessageTransfer { content?: string; } +export interface ClientInboundMessageSendTransportMessage { + /** This is the type of the message. Send "send-transport-message" to send a transport-specific message during the call. */ + type: "send-transport-message"; + /** This is the transport-specific message to send. */ + message: VapiSipTransportMessage | TwilioTransportMessage; +} + export interface ClientInboundMessage { /** These are the messages that can be sent from client-side SDKs to control the call. */ message: @@ -37760,7 +42472,8 @@ export interface ClientInboundMessage { | ClientInboundMessageControl | ClientInboundMessageSay | ClientInboundMessageEndCall - | ClientInboundMessageTransfer; + | ClientInboundMessageTransfer + | ClientInboundMessageSendTransportMessage; } export interface BotMessage { @@ -37778,8 +42491,6 @@ export interface BotMessage { source?: string; /** The duration of the message in seconds. */ duration?: number; - /** Stable speaker label for diarized user speakers (e.g., "Speaker 1"). */ - speakerLabel?: string; } export interface ToolCallMessage { @@ -37795,6 +42506,20 @@ export interface ToolCallMessage { secondsFromStart: number; } +export interface ToolCallResultMessageWarning { + /** + * The kind of warning. Currently: + * - `oversized-tool-response`: the tool's serialized response exceeded the + * recommended size and is likely to bloat the model context, increasing + * latency and risking truncation of earlier instructions. + */ + type: "oversized-tool-response"; + /** The estimated number of tokens in the serialized tool response. */ + tokenCount: number; + /** The threshold (in tokens) above which the warning is raised. */ + threshold: number; +} + export interface ToolCallResultMessage { /** The role of the tool call result in the conversation. */ role: string; @@ -37810,6 +42535,11 @@ export interface ToolCallResultMessage { secondsFromStart: number; /** The metadata for the tool call result. */ metadata?: object; + /** + * Warnings raised for this tool call result, e.g. when the response is + * larger than recommended for voice AI context windows. + */ + warnings?: ToolCallResultMessageWarning[]; } export interface TransportCost { @@ -37868,6 +42598,8 @@ export interface ModelCost { promptTokens: number; /** This is the number of completion tokens generated in the call. These should be total completion tokens used in the call for single assistant calls, while squad calls will have multiple model costs one for each assistant that was used. */ completionTokens: number; + /** This is the number of cached prompt tokens used in the call. This is only applicable to certain providers (e.g., OpenAI, Azure OpenAI) that support prompt caching. Cached tokens are billed at a discounted rate. */ + cachedPromptTokens?: number; /** This is the cost of the component in USD. */ cost: number; } @@ -37919,6 +42651,8 @@ export interface AnalysisCost { promptTokens: number; /** This is the number of completion tokens generated in the analysis. */ completionTokens: number; + /** This is the number of cached prompt tokens used in the analysis. This is only applicable to certain providers (e.g., OpenAI, Azure OpenAI) that support prompt caching. Cached tokens are billed at a discounted rate. */ + cachedPromptTokens?: number; /** This is the cost of the component in USD. */ cost: number; } @@ -38006,6 +42740,10 @@ export interface FunctionToolWithToolCall { * - Webhook expects a response with tool call result. */ server?: Server; + /** Plan to extract variables from the tool response */ + variableExtractionPlan?: VariableExtractionPlan; + /** Static key-value pairs merged into the request body. Values support Liquid templates. */ + parameters?: ToolParameter[]; toolCall: ToolCall; /** This is the function definition of the tool. */ function?: OpenAIFunction; @@ -39235,6 +43973,24 @@ export interface GoHighLevelContactGetToolWithToolCall { rejectionPlan?: ToolRejectionPlan; } +export interface VapiSipTransportMessage { + /** This is the transport type. */ + transport: "vapi.sip"; + /** This is the SIP verb to use. Must be one of INFO, MESSAGE, or NOTIFY. */ + sipVerb: "INFO" | "MESSAGE" | "NOTIFY"; + /** These are the headers to include with the SIP request. */ + headers?: object; + /** This is the body of the SIP request, if any. */ + body?: string; +} + +export interface TwilioTransportMessage { + /** This is the transport type. */ + transport: "twilio"; + /** This is the TwiML to send to the Twilio call. */ + twiml: string; +} + export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; @@ -39717,6 +44473,11 @@ export class Api< */ assistantControllerFindAllPaginated: ( query?: { + /** + * Return only assistants matching the provided ids + * @format uuid + */ + idAny?: string[]; /** * This is the page number to return. Defaults to 1. * @min 1 @@ -39724,6 +44485,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -39793,6 +44556,21 @@ export class Api< */ callControllerCallsExport: ( query?: { + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; + /** + * Filter by multiple squad IDs. Provide as comma-separated values. + * @example "squad-1,squad-2,squad-3" + */ + squadIdAny?: string; + /** + * Filter by any of the specified ended reasons (comma-separated). + * @example "customer-ended-call,assistant-ended-call" + */ + endedReasonAny?: string; /** * Filter by assistant overrides. Use variableValues to filter by template variables. * @example {"variableValues":{"name":"John","age":"25"}} @@ -39803,6 +44581,17 @@ export class Api< * @example {"number":"+1234567890","name":"John Doe"} */ customer?: object; + /** + * Filter by any of the specified customer phone numbers (comma-separated). + * @example "+1234567890,+0987654321" + */ + customerNumberAny?: string; + /** + * Filter by transcript text (case-insensitive partial match). Requires createdAtGe to be set and a date range of 7 days or less. + * @maxLength 500 + * @example "hello world" + */ + transcript?: string; /** * Columns to include in the CSV export * @default ["id","assistantId","squadId","customerId","customerName","customerNumber","customerSipUri","customerExtension","phoneNumberId","endedReason","type","duration","startedAt","endedAt","transcript","summary","successEvaluation","recordingUrl","cost","phoneCallProvider","phoneCallProviderId","createdAt","updatedAt"] @@ -39893,6 +44682,8 @@ export class Api< endedReason?: string; /** This will return calls with the specified phoneNumberId. */ phoneNumberId?: string; + /** This will return calls with any of the specified phoneNumberIds. */ + phoneNumberIdAny?: string[]; /** * Filter calls by structured output values. Use structured output ID as key and filter operators as values. * @example {"c9dddda4-d70a-4dad-aa5c-aaf117f85cea":{"eq":"2","gt":"1"}} @@ -39910,6 +44701,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -39978,6 +44771,21 @@ export class Api< */ callControllerFindAllPaginated: ( query?: { + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; + /** + * Filter by multiple squad IDs. Provide as comma-separated values. + * @example "squad-1,squad-2,squad-3" + */ + squadIdAny?: string; + /** + * Filter by any of the specified ended reasons (comma-separated). + * @example "customer-ended-call,assistant-ended-call" + */ + endedReasonAny?: string; /** * Filter by assistant overrides. Use variableValues to filter by template variables. * @example {"variableValues":{"name":"John","age":"25"}} @@ -39988,6 +44796,17 @@ export class Api< * @example {"number":"+1234567890","name":"John Doe"} */ customer?: object; + /** + * Filter by any of the specified customer phone numbers (comma-separated). + * @example "+1234567890,+0987654321" + */ + customerNumberAny?: string; + /** + * Filter by transcript text (case-insensitive partial match). Requires createdAtGe to be set and a date range of 7 days or less. + * @maxLength 500 + * @example "hello world" + */ + transcript?: string; /** This will return calls with the specified assistantId. */ assistantId?: string; /** @@ -40021,6 +44840,8 @@ export class Api< endedReason?: string; /** This will return calls with the specified phoneNumberId. */ phoneNumberId?: string; + /** This will return calls with any of the specified phoneNumberIds. */ + phoneNumberIdAny?: string[]; /** * Filter calls by structured output values. Use structured output ID as key and filter operators as values. * @example {"c9dddda4-d70a-4dad-aa5c-aaf117f85cea":{"eq":"2","gt":"1"}} @@ -40038,6 +44859,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -40107,6 +44930,21 @@ export class Api< */ callControllerFindAllMetadataPaginated: ( query?: { + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; + /** + * Filter by multiple squad IDs. Provide as comma-separated values. + * @example "squad-1,squad-2,squad-3" + */ + squadIdAny?: string; + /** + * Filter by any of the specified ended reasons (comma-separated). + * @example "customer-ended-call,assistant-ended-call" + */ + endedReasonAny?: string; /** * Filter by assistant overrides. Use variableValues to filter by template variables. * @example {"variableValues":{"name":"John","age":"25"}} @@ -40117,6 +44955,17 @@ export class Api< * @example {"number":"+1234567890","name":"John Doe"} */ customer?: object; + /** + * Filter by any of the specified customer phone numbers (comma-separated). + * @example "+1234567890,+0987654321" + */ + customerNumberAny?: string; + /** + * Filter by transcript text (case-insensitive partial match). Requires createdAtGe to be set and a date range of 7 days or less. + * @maxLength 500 + * @example "hello world" + */ + transcript?: string; /** This will return calls with the specified assistantId. */ assistantId?: string; /** @@ -40150,6 +44999,8 @@ export class Api< endedReason?: string; /** This will return calls with the specified phoneNumberId. */ phoneNumberId?: string; + /** This will return calls with any of the specified phoneNumberIds. */ + phoneNumberIdAny?: string[]; /** * Filter calls by structured output values. Use structured output ID as key and filter operators as values. * @example {"c9dddda4-d70a-4dad-aa5c-aaf117f85cea":{"eq":"2","gt":"1"}} @@ -40167,6 +45018,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -40248,6 +45101,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -40705,7 +45560,7 @@ export class Api< * * @tags Calls * @name CallControllerDeleteCallData - * @summary Delete Call Data + * @summary Delete Call * @request DELETE:/call/{id} * @secure */ @@ -40783,8 +45638,15 @@ export class Api< */ chatControllerListChats: ( query?: { + /** This is the unique identifier for the chat to filter by. */ + id?: string; /** This is the unique identifier for the assistant that will be used for the chat. */ assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; /** This is the unique identifier for the squad that will be used for the chat. */ squadId?: string; /** This is the unique identifier for the session that will be used for the chat. */ @@ -40798,6 +45660,151 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; + /** + * This is the maximum number of items to return. Defaults to 100. + * @min 0 + * @max 1000 + */ + limit?: number; + /** + * This will return items where the createdAt is greater than the specified value. + * @format date-time + */ + createdAtGt?: string; + /** + * This will return items where the createdAt is less than the specified value. + * @format date-time + */ + createdAtLt?: string; + /** + * This will return items where the createdAt is greater than or equal to the specified value. + * @format date-time + */ + createdAtGe?: string; + /** + * This will return items where the createdAt is less than or equal to the specified value. + * @format date-time + */ + createdAtLe?: string; + /** + * This will return items where the updatedAt is greater than the specified value. + * @format date-time + */ + updatedAtGt?: string; + /** + * This will return items where the updatedAt is less than the specified value. + * @format date-time + */ + updatedAtLt?: string; + /** + * This will return items where the updatedAt is greater than or equal to the specified value. + * @format date-time + */ + updatedAtGe?: string; + /** + * This will return items where the updatedAt is less than or equal to the specified value. + * @format date-time + */ + updatedAtLe?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: `/chat`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), + + /** + * @description Creates a new chat with optional SMS delivery via transport field. Requires at least one of: assistantId/assistant, sessionId, or previousChatId. Note: sessionId and previousChatId are mutually exclusive. Transport field enables SMS delivery with two modes: (1) New conversation - provide transport.phoneNumberId and transport.customer to create a new session, (2) Existing conversation - provide sessionId to use existing session data. Cannot specify both sessionId and transport fields together. The transport.useLLMGeneratedMessageForOutbound flag controls whether input is processed by LLM (true, default) or forwarded directly as SMS (false). + * + * @tags Chats + * @name ChatControllerCreateChat + * @summary Create Chat + * @request POST:/chat + * @secure + */ + chatControllerCreateChat: ( + data: CreateChatDTO, + params: RequestParams = {}, + ) => + this.request({ + path: `/chat`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Chats + * @name ChatControllerChatsExport + * @summary Export Chats to CSV + * @request GET:/chat/export + * @secure + */ + chatControllerChatsExport: ( + query?: { + /** This is the unique identifier for the chat to filter by. */ + id?: string; + /** This is the unique identifier for the assistant that will be used for the chat. */ + assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; + /** This is the unique identifier for the squad that will be used for the chat. */ + squadId?: string; + /** This is the unique identifier for the session that will be used for the chat. */ + sessionId?: string; + /** This is the unique identifier for the previous chat to filter by. */ + previousChatId?: string; + /** + * Columns to include in the CSV export + * @default ["id","assistantId","squadId","sessionId","previousChatId","cost","messages","output","createdAt","updatedAt"] + */ + columns?: + | "id" + | "assistantId" + | "squadId" + | "sessionId" + | "previousChatId" + | "cost" + | "messages" + | "output" + | "createdAt" + | "updatedAt"; + /** + * This is the email address to send the export to. + * Required if userId is not available in the request context. + */ + email?: string; + /** + * This is the format of the export. + * + * @default csv + * @default "csv" + */ + format?: "csv" | "json"; + /** + * This is the page number to return. Defaults to 1. + * @min 1 + */ + page?: number; + /** This is the sort order for pagination. Defaults to 'DESC'. */ + sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -40847,35 +45854,11 @@ export class Api< }, params: RequestParams = {}, ) => - this.request({ - path: `/chat`, + this.request({ + path: `/chat/export`, method: "GET", query: query, secure: true, - format: "json", - ...params, - }), - - /** - * @description Creates a new chat with optional SMS delivery via transport field. Requires at least one of: assistantId/assistant, sessionId, or previousChatId. Note: sessionId and previousChatId are mutually exclusive. Transport field enables SMS delivery with two modes: (1) New conversation - provide transport.phoneNumberId and transport.customer to create a new session, (2) Existing conversation - provide sessionId to use existing session data. Cannot specify both sessionId and transport fields together. The transport.useLLMGeneratedMessageForOutbound flag controls whether input is processed by LLM (true, default) or forwarded directly as SMS (false). - * - * @tags Chats - * @name ChatControllerCreateChat - * @summary Create Chat - * @request POST:/chat - * @secure - */ - chatControllerCreateChat: ( - data: CreateChatDTO, - params: RequestParams = {}, - ) => - this.request({ - path: `/chat`, - method: "POST", - body: data, - secure: true, - type: ContentType.Json, - format: "json", ...params, }), @@ -41042,6 +46025,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -41195,6 +46180,8 @@ export class Api< */ sessionControllerFindAllPaginated: ( query?: { + /** This is the unique identifier for the session to filter by. */ + id?: string; /** * This is the name of the customer. This is just for your own reference. * @@ -41204,6 +46191,11 @@ export class Api< name?: string; /** This is the ID of the assistant to filter sessions by. */ assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; /** This is the ID of the squad to filter sessions by. */ squadId?: string; /** This is the ID of the workflow to filter sessions by. */ @@ -41250,6 +46242,15 @@ export class Api< * @maxLength 40 */ externalId?: string; + /** + * Filter by any of the specified customer phone numbers (comma-separated). + * @example "+1234567890,+0987654321" + */ + customerNumberAny?: string; + /** This will return sessions with the specified phoneNumberId. */ + phoneNumberId?: string; + /** This will return sessions with any of the specified phoneNumberIds. */ + phoneNumberIdAny?: string[]; /** * This is the page number to return. Defaults to 1. * @min 1 @@ -41257,6 +46258,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -41315,6 +46318,178 @@ export class Api< ...params, }), + /** + * No description + * + * @tags Sessions + * @name SessionControllerSessionsExport + * @summary Export Sessions to CSV + * @request GET:/session/export + * @secure + */ + sessionControllerSessionsExport: ( + query?: { + /** This is the unique identifier for the session to filter by. */ + id?: string; + /** + * This is the name of the customer. This is just for your own reference. + * + * For SIP inbound calls, this is extracted from the `From` SIP header with format `"Display Name" `. + * @maxLength 40 + */ + name?: string; + /** This is the ID of the assistant to filter sessions by. */ + assistantId?: string; + /** + * Filter by multiple assistant IDs. Provide as comma-separated values. + * @example "assistant-1,assistant-2,assistant-3" + */ + assistantIdAny?: string; + /** This is the ID of the squad to filter sessions by. */ + squadId?: string; + /** This is the ID of the workflow to filter sessions by. */ + workflowId?: string; + /** + * This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. + * + * Use cases: + * - `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks. + * - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. + * + * If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). + * + * @default true (E164 check is enabled) + * @default true + */ + numberE164CheckEnabled?: boolean; + /** + * This is the extension that will be dialed after the call is answered. + * @maxLength 10 + * @example null + */ + extension?: string; + /** + * These are the overrides for the assistant's settings and template variables specific to this customer. + * This allows customization of the assistant's behavior for individual customers in batch calls. + */ + assistantOverrides?: AssistantOverrides; + /** + * This is the number of the customer. + * @minLength 3 + * @maxLength 40 + */ + number?: string; + /** This is the SIP URI of the customer. */ + sipUri?: string; + /** + * This is the email address to send the export to. + * Required if userId is not available in the request context. + */ + email?: string; + /** + * This is the external ID of the customer. + * @maxLength 40 + */ + externalId?: string; + /** + * Filter by any of the specified customer phone numbers (comma-separated). + * @example "+1234567890,+0987654321" + */ + customerNumberAny?: string; + /** + * Columns to include in the CSV export + * @default ["id","name","status","assistantId","squadId","customerName","customerNumber","phoneNumberId","cost","messages","createdAt","updatedAt"] + */ + columns?: + | "id" + | "name" + | "status" + | "assistantId" + | "squadId" + | "customerName" + | "customerNumber" + | "phoneNumberId" + | "cost" + | "messages" + | "createdAt" + | "updatedAt"; + /** + * This is the format of the export. + * + * @default csv + * @default "csv" + */ + format?: "csv" | "json"; + /** This will return sessions with the specified phoneNumberId. */ + phoneNumberId?: string; + /** This will return sessions with any of the specified phoneNumberIds. */ + phoneNumberIdAny?: string[]; + /** + * This is the page number to return. Defaults to 1. + * @min 1 + */ + page?: number; + /** This is the sort order for pagination. Defaults to 'DESC'. */ + sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; + /** + * This is the maximum number of items to return. Defaults to 100. + * @min 0 + * @max 1000 + */ + limit?: number; + /** + * This will return items where the createdAt is greater than the specified value. + * @format date-time + */ + createdAtGt?: string; + /** + * This will return items where the createdAt is less than the specified value. + * @format date-time + */ + createdAtLt?: string; + /** + * This will return items where the createdAt is greater than or equal to the specified value. + * @format date-time + */ + createdAtGe?: string; + /** + * This will return items where the createdAt is less than or equal to the specified value. + * @format date-time + */ + createdAtLe?: string; + /** + * This will return items where the updatedAt is greater than the specified value. + * @format date-time + */ + updatedAtGt?: string; + /** + * This will return items where the updatedAt is less than the specified value. + * @format date-time + */ + updatedAtLt?: string; + /** + * This will return items where the updatedAt is greater than or equal to the specified value. + * @format date-time + */ + updatedAtGe?: string; + /** + * This will return items where the updatedAt is less than or equal to the specified value. + * @format date-time + */ + updatedAtLe?: string; + }, + params: RequestParams = {}, + ) => + this.request({ + path: `/session/export`, + method: "GET", + query: query, + secure: true, + ...params, + }), + /** * No description * @@ -41798,13 +46973,22 @@ export class Api< } & CreateGoHighLevelContactCreateToolDTO) | ({ type: "gohighlevel.contact.get"; - } & CreateGoHighLevelContactGetToolDTO), + } & CreateGoHighLevelContactGetToolDTO) + | ({ + type: "sipRequest"; + } & CreateSipRequestToolDTO) + | ({ + type: "voicemail"; + } & CreateVoicemailToolDTO), params: RequestParams = {}, ) => this.request< | ({ type: "apiRequest"; } & ApiRequestTool) + | ({ + type: "code"; + } & CodeTool) | ({ type: "dtmf"; } & DtmfTool) @@ -41861,7 +47045,13 @@ export class Api< } & GoHighLevelContactCreateTool) | ({ type: "gohighlevel.contact.get"; - } & GoHighLevelContactGetTool), + } & GoHighLevelContactGetTool) + | ({ + type: "sipRequest"; + } & SipRequestTool) + | ({ + type: "voicemail"; + } & VoicemailTool), any >({ path: `/tool`, @@ -41938,6 +47128,9 @@ export class Api< | ({ type: "apiRequest"; } & ApiRequestTool) + | ({ + type: "code"; + } & CodeTool) | ({ type: "dtmf"; } & DtmfTool) @@ -41995,6 +47188,12 @@ export class Api< | ({ type: "gohighlevel.contact.get"; } & GoHighLevelContactGetTool) + | ({ + type: "sipRequest"; + } & SipRequestTool) + | ({ + type: "voicemail"; + } & VoicemailTool) )[], any >({ @@ -42020,6 +47219,9 @@ export class Api< | ({ type: "apiRequest"; } & ApiRequestTool) + | ({ + type: "code"; + } & CodeTool) | ({ type: "dtmf"; } & DtmfTool) @@ -42076,7 +47278,13 @@ export class Api< } & GoHighLevelContactCreateTool) | ({ type: "gohighlevel.contact.get"; - } & GoHighLevelContactGetTool), + } & GoHighLevelContactGetTool) + | ({ + type: "sipRequest"; + } & SipRequestTool) + | ({ + type: "voicemail"; + } & VoicemailTool), any >({ path: `/tool/${id}`, @@ -42157,13 +47365,22 @@ export class Api< } & UpdateGoHighLevelContactCreateToolDTO) | ({ type: "gohighlevel.contact.get"; - } & UpdateGoHighLevelContactGetToolDTO), + } & UpdateGoHighLevelContactGetToolDTO) + | ({ + type: "sipRequest"; + } & UpdateSipRequestToolDTO) + | ({ + type: "voicemail"; + } & UpdateVoicemailToolDTO), params: RequestParams = {}, ) => this.request< | ({ type: "apiRequest"; } & ApiRequestTool) + | ({ + type: "code"; + } & CodeTool) | ({ type: "dtmf"; } & DtmfTool) @@ -42220,7 +47437,13 @@ export class Api< } & GoHighLevelContactCreateTool) | ({ type: "gohighlevel.contact.get"; - } & GoHighLevelContactGetTool), + } & GoHighLevelContactGetTool) + | ({ + type: "sipRequest"; + } & SipRequestTool) + | ({ + type: "voicemail"; + } & VoicemailTool), any >({ path: `/tool/${id}`, @@ -42246,6 +47469,9 @@ export class Api< | ({ type: "apiRequest"; } & ApiRequestTool) + | ({ + type: "code"; + } & CodeTool) | ({ type: "dtmf"; } & DtmfTool) @@ -42302,7 +47528,13 @@ export class Api< } & GoHighLevelContactCreateTool) | ({ type: "gohighlevel.contact.get"; - } & GoHighLevelContactGetTool), + } & GoHighLevelContactGetTool) + | ({ + type: "sipRequest"; + } & SipRequestTool) + | ({ + type: "voicemail"; + } & VoicemailTool), any >({ path: `/tool/${id}`, @@ -42446,22 +47678,15 @@ export class Api< * @secure */ knowledgeBaseControllerCreate: ( - data: - | ({ - provider: "trieve"; - } & CreateTrieveKnowledgeBaseDTO) - | ({ - provider: "custom-knowledge-base"; - } & CreateCustomKnowledgeBaseDTO), + data: { + provider: "custom-knowledge-base"; + } & CreateCustomKnowledgeBaseDTO, params: RequestParams = {}, ) => this.request< - | ({ - provider: "trieve"; - } & TrieveKnowledgeBase) - | ({ - provider: "custom-knowledge-base"; - } & CustomKnowledgeBase), + { + provider: "custom-knowledge-base"; + } & CustomKnowledgeBase, any >({ path: `/knowledge-base`, @@ -42534,14 +47759,9 @@ export class Api< params: RequestParams = {}, ) => this.request< - ( - | ({ - provider: "trieve"; - } & TrieveKnowledgeBase) - | ({ - provider: "custom-knowledge-base"; - } & CustomKnowledgeBase) - )[], + ({ + provider: "custom-knowledge-base"; + } & CustomKnowledgeBase)[], any >({ path: `/knowledge-base`, @@ -42563,12 +47783,9 @@ export class Api< */ knowledgeBaseControllerFindOne: (id: string, params: RequestParams = {}) => this.request< - | ({ - provider: "trieve"; - } & TrieveKnowledgeBase) - | ({ - provider: "custom-knowledge-base"; - } & CustomKnowledgeBase), + { + provider: "custom-knowledge-base"; + } & CustomKnowledgeBase, any >({ path: `/knowledge-base/${id}`, @@ -42589,22 +47806,15 @@ export class Api< */ knowledgeBaseControllerUpdate: ( id: string, - data: - | ({ - provider: "trieve"; - } & UpdateTrieveKnowledgeBaseDTO) - | ({ - provider: "custom-knowledge-base"; - } & UpdateCustomKnowledgeBaseDTO), + data: { + provider: "custom-knowledge-base"; + } & UpdateCustomKnowledgeBaseDTO, params: RequestParams = {}, ) => this.request< - | ({ - provider: "trieve"; - } & TrieveKnowledgeBase) - | ({ - provider: "custom-knowledge-base"; - } & CustomKnowledgeBase), + { + provider: "custom-knowledge-base"; + } & CustomKnowledgeBase, any >({ path: `/knowledge-base/${id}`, @@ -42627,12 +47837,9 @@ export class Api< */ knowledgeBaseControllerRemove: (id: string, params: RequestParams = {}) => this.request< - | ({ - provider: "trieve"; - } & TrieveKnowledgeBase) - | ({ - provider: "custom-knowledge-base"; - } & CustomKnowledgeBase), + { + provider: "custom-knowledge-base"; + } & CustomKnowledgeBase, any >({ path: `/knowledge-base/${id}`, @@ -42665,6 +47872,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -42858,6 +48067,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -43018,6 +48229,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -43232,6 +48445,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -43452,6 +48667,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -43723,6 +48940,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -43915,6 +49134,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -44053,6 +49274,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -44376,6 +49599,42 @@ export class Api< format: "json", ...params, }), + + /** + * No description + * + * @tags Orgs + * @name OrgControllerZdrBuy + * @summary Purchase ZDR add-on + * @request POST:/org/{id}/zdr + * @secure + */ + orgControllerZdrBuy: (id: string, params: RequestParams = {}) => + this.request({ + path: `/org/${id}/zdr`, + method: "POST", + secure: true, + format: "json", + ...params, + }), + + /** + * No description + * + * @tags Orgs + * @name OrgControllerZdrRemove + * @summary Remove ZDR add-on + * @request DELETE:/org/{id}/zdr + * @secure + */ + orgControllerZdrRemove: (id: string, params: RequestParams = {}) => + this.request({ + path: `/org/${id}/zdr`, + method: "DELETE", + secure: true, + format: "json", + ...params, + }), }; token = { /** @@ -44545,6 +49804,9 @@ export class Api< | ({ provider: "anthropic"; } & CreateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & CreateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & CreateAnyscaleCredentialDTO) @@ -44669,8 +49931,8 @@ export class Api< provider: "speechmatics"; } & CreateSpeechmaticsCredentialDTO) | ({ - provider: "trieve"; - } & CreateTrieveCredentialDTO) + provider: "soniox"; + } & CreateSonioxCredentialDTO) | ({ provider: "google.calendar.oauth2-client"; } & CreateGoogleCalendarOAuth2ClientCredentialDTO) @@ -44691,7 +49953,16 @@ export class Api< } & CreateInworldCredentialDTO) | ({ provider: "minimax"; - } & CreateMinimaxCredentialDTO), + } & CreateMinimaxCredentialDTO) + | ({ + provider: "wellsaid"; + } & CreateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & CreateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & CreateSlackWebhookCredentialDTO), params: RequestParams = {}, ) => this.request< @@ -44701,6 +49972,9 @@ export class Api< | ({ provider: "anthropic"; } & AnthropicCredential) + | ({ + provider: "anthropic-bedrock"; + } & AnthropicBedrockCredential) | ({ provider: "anyscale"; } & AnyscaleCredential) @@ -44822,8 +50096,8 @@ export class Api< provider: "speechmatics"; } & SpeechmaticsCredential) | ({ - provider: "trieve"; - } & TrieveCredential) + provider: "soniox"; + } & SonioxCredential) | ({ provider: "telnyx"; } & any) @@ -44853,7 +50127,16 @@ export class Api< } & InworldCredential) | ({ provider: "minimax"; - } & any), + } & any) + | ({ + provider: "wellsaid"; + } & WellSaidCredential) + | ({ + provider: "email"; + } & EmailCredential) + | ({ + provider: "slack-webhook"; + } & SlackWebhookCredential), any >({ path: `/credential`, @@ -44933,6 +50216,9 @@ export class Api< | ({ provider: "anthropic"; } & AnthropicCredential) + | ({ + provider: "anthropic-bedrock"; + } & AnthropicBedrockCredential) | ({ provider: "anyscale"; } & AnyscaleCredential) @@ -45054,8 +50340,8 @@ export class Api< provider: "speechmatics"; } & SpeechmaticsCredential) | ({ - provider: "trieve"; - } & TrieveCredential) + provider: "soniox"; + } & SonioxCredential) | ({ provider: "telnyx"; } & any) @@ -45086,6 +50372,15 @@ export class Api< | ({ provider: "minimax"; } & any) + | ({ + provider: "wellsaid"; + } & WellSaidCredential) + | ({ + provider: "email"; + } & EmailCredential) + | ({ + provider: "slack-webhook"; + } & SlackWebhookCredential) )[], any >({ @@ -45114,6 +50409,9 @@ export class Api< | ({ provider: "anthropic"; } & AnthropicCredential) + | ({ + provider: "anthropic-bedrock"; + } & AnthropicBedrockCredential) | ({ provider: "anyscale"; } & AnyscaleCredential) @@ -45235,8 +50533,8 @@ export class Api< provider: "speechmatics"; } & SpeechmaticsCredential) | ({ - provider: "trieve"; - } & TrieveCredential) + provider: "soniox"; + } & SonioxCredential) | ({ provider: "telnyx"; } & any) @@ -45266,7 +50564,16 @@ export class Api< } & InworldCredential) | ({ provider: "minimax"; - } & any), + } & any) + | ({ + provider: "wellsaid"; + } & WellSaidCredential) + | ({ + provider: "email"; + } & EmailCredential) + | ({ + provider: "slack-webhook"; + } & SlackWebhookCredential), any >({ path: `/credential/${id}`, @@ -45294,6 +50601,9 @@ export class Api< | ({ provider: "anthropic"; } & UpdateAnthropicCredentialDTO) + | ({ + provider: "anthropic-bedrock"; + } & UpdateAnthropicBedrockCredentialDTO) | ({ provider: "anyscale"; } & UpdateAnyscaleCredentialDTO) @@ -45333,6 +50643,9 @@ export class Api< | ({ provider: "gladia"; } & UpdateGladiaCredentialDTO) + | ({ + provider: "soniox"; + } & UpdateSonioxCredentialDTO) | ({ provider: "gohighlevel"; } & UpdateGoHighLevelCredentialDTO) @@ -45377,10 +50690,10 @@ export class Api< } & UpdateS3CredentialDTO) | ({ provider: "supabase"; - } & UpdateSupabaseCredentialDTO) + } & any) | ({ provider: "smallest-ai"; - } & UpdateSmallestAICredentialDTO) + } & any) | ({ provider: "neuphonic"; } & UpdateNeuphonicCredentialDTO) @@ -45389,7 +50702,7 @@ export class Api< } & UpdateHumeCredentialDTO) | ({ provider: "tavus"; - } & UpdateTavusCredentialDTO) + } & any) | ({ provider: "together-ai"; } & UpdateTogetherAICredentialDTO) @@ -45410,7 +50723,19 @@ export class Api< } & UpdateXAiCredentialDTO) | ({ provider: "inworld"; - } & UpdateInworldCredentialDTO), + } & UpdateInworldCredentialDTO) + | ({ + provider: "minimax"; + } & any) + | ({ + provider: "wellsaid"; + } & UpdateWellSaidCredentialDTO) + | ({ + provider: "email"; + } & UpdateEmailCredentialDTO) + | ({ + provider: "slack-webhook"; + } & UpdateSlackWebhookCredentialDTO), params: RequestParams = {}, ) => this.request< @@ -45420,6 +50745,9 @@ export class Api< | ({ provider: "anthropic"; } & AnthropicCredential) + | ({ + provider: "anthropic-bedrock"; + } & AnthropicBedrockCredential) | ({ provider: "anyscale"; } & AnyscaleCredential) @@ -45541,8 +50869,8 @@ export class Api< provider: "speechmatics"; } & SpeechmaticsCredential) | ({ - provider: "trieve"; - } & TrieveCredential) + provider: "soniox"; + } & SonioxCredential) | ({ provider: "telnyx"; } & any) @@ -45572,7 +50900,16 @@ export class Api< } & InworldCredential) | ({ provider: "minimax"; - } & any), + } & any) + | ({ + provider: "wellsaid"; + } & WellSaidCredential) + | ({ + provider: "email"; + } & EmailCredential) + | ({ + provider: "slack-webhook"; + } & SlackWebhookCredential), any >({ path: `/credential/${id}`, @@ -45601,6 +50938,9 @@ export class Api< | ({ provider: "anthropic"; } & AnthropicCredential) + | ({ + provider: "anthropic-bedrock"; + } & AnthropicBedrockCredential) | ({ provider: "anyscale"; } & AnyscaleCredential) @@ -45722,8 +51062,8 @@ export class Api< provider: "speechmatics"; } & SpeechmaticsCredential) | ({ - provider: "trieve"; - } & TrieveCredential) + provider: "soniox"; + } & SonioxCredential) | ({ provider: "telnyx"; } & any) @@ -45753,7 +51093,16 @@ export class Api< } & InworldCredential) | ({ provider: "minimax"; - } & any), + } & any) + | ({ + provider: "wellsaid"; + } & WellSaidCredential) + | ({ + provider: "email"; + } & EmailCredential) + | ({ + provider: "slack-webhook"; + } & SlackWebhookCredential), any >({ path: `/credential/${id}`, @@ -45966,6 +51315,7 @@ export class Api< | "sesame" | "inworld" | "minimax" + | "wellsaid" | "orpheus", query?: { page?: number; @@ -46059,6 +51409,7 @@ export class Api< | "sesame" | "inworld" | "minimax" + | "wellsaid" | "orpheus", params: RequestParams = {}, ) => @@ -46098,6 +51449,7 @@ export class Api< | "sesame" | "inworld" | "minimax" + | "wellsaid" | "orpheus", params: RequestParams = {}, ) => @@ -46165,7 +51517,7 @@ export class Api< * @secure */ providerResourceControllerCreateProviderResource: ( - provider: "11labs", + provider: "cartesia" | "11labs", resourceName: "pronunciation-dictionary", params: RequestParams = {}, ) => @@ -46187,7 +51539,7 @@ export class Api< * @secure */ providerResourceControllerGetProviderResourcesPaginated: ( - provider: "11labs", + provider: "cartesia" | "11labs", resourceName: "pronunciation-dictionary", query?: { id?: string; @@ -46199,6 +51551,8 @@ export class Api< page?: number; /** This is the sort order for pagination. Defaults to 'DESC'. */ sortOrder?: "ASC" | "DESC"; + /** This is the column to sort by. Defaults to 'createdAt'. */ + sortBy?: "createdAt" | "duration" | "cost"; /** * This is the maximum number of items to return. Defaults to 100. * @min 0 @@ -46267,7 +51621,7 @@ export class Api< * @secure */ providerResourceControllerGetProviderResource: ( - provider: "11labs", + provider: "cartesia" | "11labs", resourceName: "pronunciation-dictionary", id: string, params: RequestParams = {}, @@ -46290,7 +51644,7 @@ export class Api< * @secure */ providerResourceControllerDeleteProviderResource: ( - provider: "11labs", + provider: "cartesia" | "11labs", resourceName: "pronunciation-dictionary", id: string, params: RequestParams = {}, @@ -46313,7 +51667,7 @@ export class Api< * @secure */ providerResourceControllerUpdateProviderResource: ( - provider: "11labs", + provider: "cartesia" | "11labs", resourceName: "pronunciation-dictionary", id: string, params: RequestParams = {}, diff --git a/package-lock.json b/package-lock.json index 69cb6584b..4f200b6b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@vapi-ai/web", - "version": "2.5.3", + "version": "2.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@vapi-ai/web", - "version": "2.5.3", + "version": "2.6.0", "license": "MIT", "dependencies": { - "@daily-co/daily-js": "^0.85.0", + "@daily-co/daily-js": "^0.89.1", "events": "^3.3.0" }, "devDependencies": { @@ -25,14 +25,86 @@ "node": ">=18.0.0" } }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.0.1.tgz", + "integrity": "sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-12.1.0.tgz", + "integrity": "sha512-e5mJoswsnAX0jG+J09xHFYQXb/bUc5S3pLpMxUuRUA2H8T2kni3yEoyz2R3Dltw5f4A6j6rPNMpWTK+iVDFlng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "14.0.1", + "@apidevtools/openapi-schemas": "^2.1.0", + "@apidevtools/swagger-methods": "^3.0.2", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "call-me-maybe": "^1.0.2" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -41,9 +113,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", - "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", "dev": true, "license": "MIT", "engines": { @@ -51,21 +123,21 @@ } }, "node_modules/@babel/core": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", - "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.4", - "@babel/types": "^7.28.4", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -82,14 +154,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -99,13 +171,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -126,29 +198,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -158,9 +230,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -178,9 +250,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -198,27 +270,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -283,13 +355,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -325,13 +397,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -451,13 +523,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -467,42 +539,42 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -510,14 +582,14 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -531,15 +603,15 @@ "license": "MIT" }, "node_modules/@biomejs/js-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@biomejs/js-api/-/js-api-3.0.0.tgz", - "integrity": "sha512-5QcGJFj9IO+yXl76ICjvkdE38uxRcTDsBzcCZHEZ+ma+Te/nbvJg4A3KtAds9HCrEF0JKLWiyjMhAbqazuJvYA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@biomejs/js-api/-/js-api-4.0.0.tgz", + "integrity": "sha512-EOArR/6drRzM1/hwOIz1pZw90FL31Ud4Y7hEHGWVtMNmAwS9SrwZ8hMENGlLVXCeGW/kL46p8kX7eO6x9Nmezg==", "dev": true, "license": "MIT OR Apache-2.0", "peerDependencies": { - "@biomejs/wasm-bundler": "^2.2.0", - "@biomejs/wasm-nodejs": "^2.2.0", - "@biomejs/wasm-web": "^2.2.0" + "@biomejs/wasm-bundler": "^2.3.0", + "@biomejs/wasm-nodejs": "^2.3.0", + "@biomejs/wasm-web": "^2.3.0" }, "peerDependenciesMeta": { "@biomejs/wasm-bundler": { @@ -554,9 +626,9 @@ } }, "node_modules/@biomejs/wasm-nodejs": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/wasm-nodejs/-/wasm-nodejs-2.2.4.tgz", - "integrity": "sha512-ExHAa8W9uyinDhvxhe9CXA6V9bHka3RIs9jKQWlzOz7/LEt3IcFA+fo0O+9RdU30q7lmoo83VqUJwWPTLXeWiA==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@biomejs/wasm-nodejs/-/wasm-nodejs-2.4.13.tgz", + "integrity": "sha512-BA64wwPmk5NUz+kP+jrHa8dnIjZSqeX6Q+Q9CC5skZ9c1AqkdS+3vR1QQUzqJ4btbxLPoYVSe1OiTYil7nr8YQ==", "dev": true, "license": "MIT OR Apache-2.0" }, @@ -585,9 +657,9 @@ } }, "node_modules/@daily-co/daily-js": { - "version": "0.85.0", - "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.85.0.tgz", - "integrity": "sha512-lpl111ZWNTUWDnwYcPuNi9PGJPbLCeCw6LzmEY40nG0hv1jg5JLVW8Rq3Cj/+lOCP6W6h4PXm211ss0FFnxITQ==", + "version": "0.89.1", + "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.89.1.tgz", + "integrity": "sha512-1RnXtzg8aeJYLhmMjRK9mnsWRljwsM2OUBJH5onpAOFIjHPSA7h03DSCd8D/YMyrpX8jQHcVMDSWOhcj+tZD/A==", "license": "BSD-2-Clause", "dependencies": { "@babel/runtime": "^7.12.5", @@ -597,25 +669,25 @@ "events": "^3.1.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=22.14.0" } }, "node_modules/@emnapi/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.1.0", + "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, "license": "MIT", "optional": true, @@ -624,9 +696,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "dev": true, "license": "MIT", "optional": true, @@ -677,9 +749,9 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", "engines": { @@ -687,17 +759,17 @@ } }, "node_modules/@jest/console": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.1.2.tgz", - "integrity": "sha512-BGMAxj8VRmoD0MoA/jo9alMXSRoqW8KPeqOfEo1ncxnRLatTBCpRoOwlwlEMdudp68Q6WSGwYrrLtTGOh8fLzw==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz", + "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", + "jest-message-util": "30.3.0", + "jest-util": "30.3.0", "slash": "^3.0.0" }, "engines": { @@ -705,39 +777,38 @@ } }, "node_modules/@jest/core": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.1.3.tgz", - "integrity": "sha512-LIQz7NEDDO1+eyOA2ZmkiAyYvZuo6s1UxD/e2IHldR6D7UYogVq3arTmli07MkENLq6/3JEQjp0mA8rrHHJ8KQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz", + "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", + "@jest/console": "30.3.0", "@jest/pattern": "30.0.1", - "@jest/reporters": "30.1.3", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/reporters": "30.3.0", + "@jest/test-result": "30.3.0", + "@jest/transform": "30.3.0", + "@jest/types": "30.3.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-changed-files": "30.0.5", - "jest-config": "30.1.3", - "jest-haste-map": "30.1.0", - "jest-message-util": "30.1.0", + "jest-changed-files": "30.3.0", + "jest-config": "30.3.0", + "jest-haste-map": "30.3.0", + "jest-message-util": "30.3.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-resolve-dependencies": "30.1.3", - "jest-runner": "30.1.3", - "jest-runtime": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", - "jest-watcher": "30.1.3", - "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "jest-resolve": "30.3.0", + "jest-resolve-dependencies": "30.3.0", + "jest-runner": "30.3.0", + "jest-runtime": "30.3.0", + "jest-snapshot": "30.3.0", + "jest-util": "30.3.0", + "jest-validate": "30.3.0", + "jest-watcher": "30.3.0", + "pretty-format": "30.3.0", "slash": "^3.0.0" }, "engines": { @@ -753,9 +824,9 @@ } }, "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz", + "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==", "dev": true, "license": "MIT", "engines": { @@ -763,39 +834,39 @@ } }, "node_modules/@jest/environment": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.1.2.tgz", - "integrity": "sha512-N8t1Ytw4/mr9uN28OnVf0SYE2dGhaIxOVYcwsf9IInBKjvofAjbFRvedvBBlyTYk2knbJTiEjEJ2PyyDIBnd9w==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz", + "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.1.2", - "@jest/types": "30.0.5", + "@jest/fake-timers": "30.3.0", + "@jest/types": "30.3.0", "@types/node": "*", - "jest-mock": "30.0.5" + "jest-mock": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.1.2.tgz", - "integrity": "sha512-tyaIExOwQRCxPCGNC05lIjWJztDwk2gPDNSDGg1zitXJJ8dC3++G/CRjE5mb2wQsf89+lsgAgqxxNpDLiCViTA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz", + "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.1.2", - "jest-snapshot": "30.1.2" + "expect": "30.3.0", + "jest-snapshot": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.1.2.tgz", - "integrity": "sha512-HXy1qT/bfdjCv7iC336ExbqqYtZvljrV8odNdso7dWK9bSeHtLlvwWWC3YSybSPL03Gg5rug6WLCZAZFH72m0A==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz", + "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==", "dev": true, "license": "MIT", "dependencies": { @@ -806,18 +877,18 @@ } }, "node_modules/@jest/fake-timers": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.1.2.tgz", - "integrity": "sha512-Beljfv9AYkr9K+ETX9tvV61rJTY706BhBUtiaepQHeEGfe0DbpvUA5Z3fomwc5Xkhns6NWrcFDZn+72fLieUnA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz", + "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", - "@sinonjs/fake-timers": "^13.0.0", + "@jest/types": "30.3.0", + "@sinonjs/fake-timers": "^15.0.0", "@types/node": "*", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "jest-message-util": "30.3.0", + "jest-mock": "30.3.0", + "jest-util": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -834,16 +905,16 @@ } }, "node_modules/@jest/globals": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.1.2.tgz", - "integrity": "sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz", + "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/expect": "30.1.2", - "@jest/types": "30.0.5", - "jest-mock": "30.0.5" + "@jest/environment": "30.3.0", + "@jest/expect": "30.3.0", + "@jest/types": "30.3.0", + "jest-mock": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -864,32 +935,32 @@ } }, "node_modules/@jest/reporters": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.1.3.tgz", - "integrity": "sha512-VWEQmJWfXMOrzdFEOyGjUEOuVXllgZsoPtEHZzfdNz18RmzJ5nlR6kp8hDdY8dDS1yGOXAY7DHT+AOHIPSBV0w==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz", + "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.3.0", + "@jest/test-result": "30.3.0", + "@jest/transform": "30.3.0", + "@jest/types": "30.3.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", - "glob": "^10.3.10", + "glob": "^10.5.0", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", - "jest-worker": "30.1.0", + "jest-message-util": "30.3.0", + "jest-util": "30.3.0", + "jest-worker": "30.3.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -920,13 +991,13 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.1.2.tgz", - "integrity": "sha512-vHoMTpimcPSR7OxS2S0V1Cpg8eKDRxucHjoWl5u4RQcnxqQrV3avETiFpl8etn4dqxEGarBeHbIBety/f8mLXw==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz", + "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" @@ -951,14 +1022,14 @@ } }, "node_modules/@jest/test-result": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.1.3.tgz", - "integrity": "sha512-P9IV8T24D43cNRANPPokn7tZh0FAFnYS2HIfi5vK18CjRkTDR9Y3e1BoEcAJnl4ghZZF4Ecda4M/k41QkvurEQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz", + "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.3.0", + "@jest/types": "30.3.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" }, @@ -967,15 +1038,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.1.3.tgz", - "integrity": "sha512-82J+hzC0qeQIiiZDThh+YUadvshdBswi5nuyXlEmXzrhw5ZQSRHeQ5LpVMD/xc8B3wPePvs6VMzHnntxL+4E3w==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz", + "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.1.3", + "@jest/test-result": "30.3.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.3.0", "slash": "^3.0.0" }, "engines": { @@ -983,24 +1054,23 @@ } }, "node_modules/@jest/transform": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.1.2.tgz", - "integrity": "sha512-UYYFGifSgfjujf1Cbd3iU/IQoSd6uwsj8XHj5DSDf5ERDcWMdJOPTkHWXj4U+Z/uMagyOQZ6Vne8C4nRIrCxqA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz", + "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.3.0", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "micromatch": "^4.0.8", + "jest-util": "30.3.0", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" @@ -1010,9 +1080,9 @@ } }, "node_modules/@jest/types": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", - "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz", + "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==", "dev": true, "license": "MIT", "dependencies": { @@ -1116,84 +1186,84 @@ } }, "node_modules/@sentry-internal/browser-utils": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz", - "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==", + "version": "8.55.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.2.tgz", + "integrity": "sha512-GnKod+gL/Y+1FUM/RGV8q6le1CoyiGbT40MitEK7eVwWe+bfTRq1gN7ioupyHFMUg1RlQkDQ4/sENmio/uow5A==", "license": "MIT", "dependencies": { - "@sentry/core": "8.55.0" + "@sentry/core": "8.55.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz", - "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==", + "version": "8.55.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.2.tgz", + "integrity": "sha512-XQy//NWbL0mLLM5w8wNDWMNpXz39VUyW2397dUrH8++kR63WhUVAvTOtL0o0GMVadSAzl1b08oHP9zSUNFQwcg==", "license": "MIT", "dependencies": { - "@sentry/core": "8.55.0" + "@sentry/core": "8.55.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz", - "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==", + "version": "8.55.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.2.tgz", + "integrity": "sha512-+W43Z697EVe/OgpGW07B773sa8xO1UbpnW0Cr+E+3FMDb6ZbXlaBUoagPTUkkQPdwBe35SDh6r8y2M3EOPGbxg==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.55.0", - "@sentry/core": "8.55.0" + "@sentry-internal/browser-utils": "8.55.2", + "@sentry/core": "8.55.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz", - "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==", + "version": "8.55.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.2.tgz", + "integrity": "sha512-P/jGiuR7dRLG9IzD/463fLgiibyYceauav/9prRG0ZxJm1AtuO02OKball2Fs3bbzdzwHCTlcsUuL2ivDF4b5A==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "8.55.0", - "@sentry/core": "8.55.0" + "@sentry-internal/replay": "8.55.2", + "@sentry/core": "8.55.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/browser": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz", - "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==", + "version": "8.55.2", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.2.tgz", + "integrity": "sha512-xHuPIEKhx9zw5quWvv4YgZprnwoVMCfxIhmOIf6KJ9iizyUHeUDcKpLS59xERroqwX4RpvK+l/27AZu4zfZlzQ==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.55.0", - "@sentry-internal/feedback": "8.55.0", - "@sentry-internal/replay": "8.55.0", - "@sentry-internal/replay-canvas": "8.55.0", - "@sentry/core": "8.55.0" + "@sentry-internal/browser-utils": "8.55.2", + "@sentry-internal/feedback": "8.55.2", + "@sentry-internal/replay": "8.55.2", + "@sentry-internal/replay-canvas": "8.55.2", + "@sentry/core": "8.55.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/core": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz", - "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==", + "version": "8.55.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.2.tgz", + "integrity": "sha512-YlEBwybUcOQ/KjMHDmof1vwweVnBtBxYlQp7DE3fOdtW4pqqdHWTnTntQs4VgYfxzjJYgtkd9LHlGtg8qy+JVQ==", "license": "MIT", "engines": { "node": ">=14.18" } }, "node_modules/@sinclair/typebox": { - "version": "0.34.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", - "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", + "version": "0.34.49", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", + "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", "dev": true, "license": "MIT" }, @@ -1208,9 +1278,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.3.2.tgz", + "integrity": "sha512-mrn35Jl2pCpns+mE3HaZa1yPN5EYCRgiMI+135COjr2hr8Cls9DXqIZ57vZe2cz7y2XVSq92tcs6kGQcT1J8Rw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -1218,9 +1288,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "dev": true, "license": "MIT" }, @@ -1246,9 +1316,9 @@ "license": "MIT" }, "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "dev": true, "license": "MIT", "optional": true, @@ -1339,21 +1409,21 @@ "pretty-format": "^30.0.0" } }, - "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "24.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", - "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", + "version": "24.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.2.tgz", + "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.12.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/stack-utils": { @@ -1370,10 +1440,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { @@ -1500,6 +1578,9 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1514,6 +1595,9 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1528,6 +1612,9 @@ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1542,6 +1629,9 @@ "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1556,6 +1646,9 @@ "riscv64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1570,6 +1663,9 @@ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1584,6 +1680,9 @@ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1598,6 +1697,9 @@ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1664,9 +1766,9 @@ ] }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -1677,9 +1779,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, "license": "MIT", "dependencies": { @@ -1689,6 +1791,38 @@ "node": ">=0.4.0" } }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1748,6 +1882,19 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -1766,16 +1913,16 @@ } }, "node_modules/babel-jest": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.1.2.tgz", - "integrity": "sha512-IQCus1rt9kaSh7PQxLYRY5NmkNrNlU2TpabzwV7T2jljnpdHOcmnYYv8QmE04Li4S3a2Lj8/yXyET5pBarPr6g==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz", + "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.1.2", + "@jest/transform": "30.3.0", "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.0", - "babel-preset-jest": "30.0.1", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.3.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" @@ -1784,7 +1931,7 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "node_modules/babel-plugin-istanbul": { @@ -1808,14 +1955,12 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", - "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz", + "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", "@types/babel__core": "^7.20.5" }, "engines": { @@ -1850,20 +1995,20 @@ } }, "node_modules/babel-preset-jest": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", - "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz", + "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.0.1", - "babel-preset-current-node-syntax": "^1.1.0" + "babel-plugin-jest-hoist": "30.3.0", + "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "node_modules/balanced-match": { @@ -1874,48 +2019,38 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", - "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", + "version": "2.10.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.27.tgz", + "integrity": "sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==", "dev": true, "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/bowser": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", - "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", "license": "MIT" }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/browserslist": { - "version": "4.26.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", - "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -1933,11 +2068,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.3", - "caniuse-lite": "^1.0.30001741", - "electron-to-chromium": "^1.5.218", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1977,27 +2112,27 @@ "license": "MIT" }, "node_modules/c12": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.0.tgz", - "integrity": "sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.4.tgz", + "integrity": "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^4.0.3", - "confbox": "^0.2.2", - "defu": "^6.1.4", - "dotenv": "^17.2.2", - "exsolve": "^1.0.7", - "giget": "^2.0.0", - "jiti": "^2.5.1", + "chokidar": "^5.0.0", + "confbox": "^0.2.4", + "defu": "^6.1.6", + "dotenv": "^17.3.1", + "exsolve": "^1.0.8", + "giget": "^3.2.0", + "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", - "perfect-debounce": "^2.0.0", + "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", - "rc9": "^2.1.2" + "rc9": "^3.0.1" }, "peerDependencies": { - "magicast": "^0.3.5" + "magicast": "*" }, "peerDependenciesMeta": { "magicast": { @@ -2033,9 +2168,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001743", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", - "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", "dev": true, "funding": [ { @@ -2081,25 +2216,25 @@ } }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "dev": true, "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -2113,22 +2248,32 @@ } }, "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz", + "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==", "dev": true, - "license": "MIT", - "dependencies": { - "consola": "^3.2.3" - } + "license": "MIT" }, "node_modules/cjs-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", - "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", "dev": true, "license": "MIT" }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2207,6 +2352,16 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -2219,9 +2374,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -2253,9 +2408,9 @@ "license": "MIT" }, "node_modules/confbox": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", - "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", "dev": true, "license": "MIT" }, @@ -2298,6 +2453,13 @@ "node": ">= 8" } }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "dev": true, + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2317,9 +2479,9 @@ } }, "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2342,9 +2504,9 @@ } }, "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "dev": true, "license": "MIT" }, @@ -2375,19 +2537,29 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/dompurify": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.2.tgz", + "integrity": "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA==", + "dev": true, + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, "node_modules/dotenv": { - "version": "17.2.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz", - "integrity": "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2405,9 +2577,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.223", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.223.tgz", - "integrity": "sha512-qKm55ic6nbEmagFlTFczML33rF90aU+WtrJ9MdTCThrcvDNdUHN4p6QfVN78U06ZmguqXIyMPyYhw2TrbDUwPQ==", + "version": "1.5.349", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.349.tgz", + "integrity": "sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A==", "dev": true, "license": "ISC" }, @@ -2441,6 +2613,17 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-toolkit": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.1.tgz", + "integrity": "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", @@ -2483,16 +2666,16 @@ } }, "node_modules/eta": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-4.0.1.tgz", - "integrity": "sha512-0h0oBEsF6qAJU7eu9ztvJoTo8D2PAq/4FvXVIQA1fek3WOTe6KPsVJycekG1+g1N6mfpblkheoGwaUhMtnlH4A==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-3.5.0.tgz", + "integrity": "sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug==", "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/bgub/eta?sponsor=1" + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, "node_modules/events": { @@ -2546,27 +2729,34 @@ } }, "node_modules/expect": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.1.2.tgz", - "integrity": "sha512-xvHszRavo28ejws8FpemjhwswGj4w/BetHIL8cU49u4sGyXDw2+p3YbeDbj6xzlxi6kWTjIRSTJ+9sNXPnF0Zg==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz", + "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.1.2", + "@jest/expect-utils": "30.3.0", "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "jest-matcher-utils": "30.3.0", + "jest-message-util": "30.3.0", + "jest-mock": "30.3.0", + "jest-util": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/exsolve": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", - "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, @@ -2584,6 +2774,23 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.1.tgz", + "integrity": "sha512-h2r7rcm6Ee/J8o0LD5djLuFVcfbZxhvho4vvsbeV0aMvXjUgqv4YpxpkEx0d68l6+IleVfLAdVEfhR7QNMkGHQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -2594,19 +2801,6 @@ "bser": "2.1.1" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2704,27 +2898,20 @@ } }, "node_modules/giget": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", - "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-3.2.0.tgz", + "integrity": "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==", "dev": true, "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.6", - "nypm": "^0.6.0", - "pathe": "^2.0.3" - }, "bin": { "giget": "dist/cli.mjs" } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -2750,9 +2937,9 @@ "license": "ISC" }, "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2881,16 +3068,6 @@ "node": ">=6" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -2939,9 +3116,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3012,16 +3189,16 @@ } }, "node_modules/jest": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.1.3.tgz", - "integrity": "sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz", + "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.1.3", - "@jest/types": "30.0.5", + "@jest/core": "30.3.0", + "@jest/types": "30.3.0", "import-local": "^3.2.0", - "jest-cli": "30.1.3" + "jest-cli": "30.3.0" }, "bin": { "jest": "bin/jest.js" @@ -3039,14 +3216,14 @@ } }, "node_modules/jest-changed-files": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", - "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz", + "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==", "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", - "jest-util": "30.0.5", + "jest-util": "30.3.0", "p-limit": "^3.1.0" }, "engines": { @@ -3054,29 +3231,29 @@ } }, "node_modules/jest-circus": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.1.3.tgz", - "integrity": "sha512-Yf3dnhRON2GJT4RYzM89t/EXIWNxKTpWTL9BfF3+geFetWP4XSvJjiU1vrWplOiUkmq8cHLiwuhz+XuUp9DscA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz", + "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/expect": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/environment": "30.3.0", + "@jest/expect": "30.3.0", + "@jest/test-result": "30.3.0", + "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.1.0", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-runtime": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", + "jest-each": "30.3.0", + "jest-matcher-utils": "30.3.0", + "jest-message-util": "30.3.0", + "jest-runtime": "30.3.0", + "jest-snapshot": "30.3.0", + "jest-util": "30.3.0", "p-limit": "^3.1.0", - "pretty-format": "30.0.5", + "pretty-format": "30.3.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" @@ -3086,21 +3263,21 @@ } }, "node_modules/jest-cli": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.1.3.tgz", - "integrity": "sha512-G8E2Ol3OKch1DEeIBl41NP7OiC6LBhfg25Btv+idcusmoUSpqUkbrneMqbW9lVpI/rCKb/uETidb7DNteheuAQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz", + "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.1.3", - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/core": "30.3.0", + "@jest/test-result": "30.3.0", + "@jest/types": "30.3.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.1.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-config": "30.3.0", + "jest-util": "30.3.0", + "jest-validate": "30.3.0", "yargs": "^17.7.2" }, "bin": { @@ -3119,34 +3296,33 @@ } }, "node_modules/jest-config": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.1.3.tgz", - "integrity": "sha512-M/f7gqdQEPgZNA181Myz+GXCe8jXcJsGjCMXUzRj22FIXsZOyHNte84e0exntOvdPaeh9tA0w+B8qlP2fAezfw==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz", + "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.1.3", - "@jest/types": "30.0.5", - "babel-jest": "30.1.2", + "@jest/test-sequencer": "30.3.0", + "@jest/types": "30.3.0", + "babel-jest": "30.3.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", - "glob": "^10.3.10", + "glob": "^10.5.0", "graceful-fs": "^4.2.11", - "jest-circus": "30.1.3", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.1.2", + "jest-circus": "30.3.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.3.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-runner": "30.1.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", - "micromatch": "^4.0.8", + "jest-resolve": "30.3.0", + "jest-runner": "30.3.0", + "jest-util": "30.3.0", + "jest-validate": "30.3.0", "parse-json": "^5.2.0", - "pretty-format": "30.0.5", + "pretty-format": "30.3.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -3171,25 +3347,25 @@ } }, "node_modules/jest-diff": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.2.tgz", - "integrity": "sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz", + "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.0.1", + "@jest/diff-sequences": "30.3.0", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "pretty-format": "30.0.5" + "pretty-format": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", - "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, "license": "MIT", "dependencies": { @@ -3200,57 +3376,57 @@ } }, "node_modules/jest-each": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.1.0.tgz", - "integrity": "sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz", + "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "chalk": "^4.1.2", - "jest-util": "30.0.5", - "pretty-format": "30.0.5" + "jest-util": "30.3.0", + "pretty-format": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.1.2.tgz", - "integrity": "sha512-w8qBiXtqGWJ9xpJIA98M0EIoq079GOQRQUyse5qg1plShUCQ0Ek1VTTcczqKrn3f24TFAgFtT+4q3aOXvjbsuA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz", + "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/fake-timers": "30.1.2", - "@jest/types": "30.0.5", + "@jest/environment": "30.3.0", + "@jest/fake-timers": "30.3.0", + "@jest/types": "30.3.0", "@types/node": "*", - "jest-mock": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.1.0" + "jest-mock": "30.3.0", + "jest-util": "30.3.0", + "jest-validate": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.1.0.tgz", - "integrity": "sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz", + "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "jest-worker": "30.1.0", - "micromatch": "^4.0.8", + "jest-util": "30.3.0", + "jest-worker": "30.3.0", + "picomatch": "^4.0.3", "walker": "^1.0.8" }, "engines": { @@ -3261,49 +3437,49 @@ } }, "node_modules/jest-leak-detector": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.1.0.tgz", - "integrity": "sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz", + "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "pretty-format": "30.0.5" + "pretty-format": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz", - "integrity": "sha512-7ai16hy4rSbDjvPTuUhuV8nyPBd6EX34HkBsBcBX2lENCuAQ0qKCPb/+lt8OSWUa9WWmGYLy41PrEzkwRwoGZQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz", + "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "jest-diff": "30.1.2", - "pretty-format": "30.0.5" + "jest-diff": "30.3.0", + "pretty-format": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.1.0.tgz", - "integrity": "sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", + "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "picomatch": "^4.0.3", + "pretty-format": "30.3.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" }, @@ -3312,15 +3488,15 @@ } }, "node_modules/jest-mock": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", - "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", + "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "@types/node": "*", - "jest-util": "30.0.5" + "jest-util": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -3355,18 +3531,18 @@ } }, "node_modules/jest-resolve": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.1.3.tgz", - "integrity": "sha512-DI4PtTqzw9GwELFS41sdMK32Ajp3XZQ8iygeDMWkxlRhm7uUTOFSZFVZABFuxr0jvspn8MAYy54NxZCsuCTSOw==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz", + "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.3.0", "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-util": "30.3.0", + "jest-validate": "30.3.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" }, @@ -3375,46 +3551,46 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.3.tgz", - "integrity": "sha512-DNfq3WGmuRyHRHfEet+Zm3QOmVFtIarUOQHHryKPc0YL9ROfgWZxl4+aZq/VAzok2SS3gZdniP+dO4zgo59hBg==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz", + "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==", "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", - "jest-snapshot": "30.1.2" + "jest-snapshot": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.1.3.tgz", - "integrity": "sha512-dd1ORcxQraW44Uz029TtXj85W11yvLpDuIzNOlofrC8GN+SgDlgY4BvyxJiVeuabA1t6idjNbX59jLd2oplOGQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz", + "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", - "@jest/environment": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.3.0", + "@jest/environment": "30.3.0", + "@jest/test-result": "30.3.0", + "@jest/transform": "30.3.0", + "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.1.2", - "jest-haste-map": "30.1.0", - "jest-leak-detector": "30.1.0", - "jest-message-util": "30.1.0", - "jest-resolve": "30.1.3", - "jest-runtime": "30.1.3", - "jest-util": "30.0.5", - "jest-watcher": "30.1.3", - "jest-worker": "30.1.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.3.0", + "jest-haste-map": "30.3.0", + "jest-leak-detector": "30.3.0", + "jest-message-util": "30.3.0", + "jest-resolve": "30.3.0", + "jest-runtime": "30.3.0", + "jest-util": "30.3.0", + "jest-watcher": "30.3.0", + "jest-worker": "30.3.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -3423,32 +3599,32 @@ } }, "node_modules/jest-runtime": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.1.3.tgz", - "integrity": "sha512-WS8xgjuNSphdIGnleQcJ3AKE4tBKOVP+tKhCD0u+Tb2sBmsU8DxfbBpZX7//+XOz81zVs4eFpJQwBNji2Y07DA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz", + "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/fake-timers": "30.1.2", - "@jest/globals": "30.1.2", + "@jest/environment": "30.3.0", + "@jest/fake-timers": "30.3.0", + "@jest/globals": "30.3.0", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/test-result": "30.3.0", + "@jest/transform": "30.3.0", + "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", + "glob": "^10.5.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", + "jest-haste-map": "30.3.0", + "jest-message-util": "30.3.0", + "jest-mock": "30.3.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", + "jest-resolve": "30.3.0", + "jest-snapshot": "30.3.0", + "jest-util": "30.3.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -3457,9 +3633,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.1.2.tgz", - "integrity": "sha512-4q4+6+1c8B6Cy5pGgFvjDy/Pa6VYRiGu0yQafKkJ9u6wQx4G5PqI2QR6nxTl43yy7IWsINwz6oT4o6tD12a8Dg==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz", + "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3468,20 +3644,20 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.1.2", + "@jest/expect-utils": "30.3.0", "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.1.2", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", - "babel-preset-current-node-syntax": "^1.1.0", + "@jest/snapshot-utils": "30.3.0", + "@jest/transform": "30.3.0", + "@jest/types": "30.3.0", + "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", - "expect": "30.1.2", + "expect": "30.3.0", "graceful-fs": "^4.2.11", - "jest-diff": "30.1.2", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", - "pretty-format": "30.0.5", + "jest-diff": "30.3.0", + "jest-matcher-utils": "30.3.0", + "jest-message-util": "30.3.0", + "jest-util": "30.3.0", + "pretty-format": "30.3.0", "semver": "^7.7.2", "synckit": "^0.11.8" }, @@ -3490,9 +3666,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3503,49 +3679,36 @@ } }, "node_modules/jest-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", - "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", + "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "picomatch": "^4.0.3" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-validate": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.1.0.tgz", - "integrity": "sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz", + "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.0.5", + "@jest/types": "30.3.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "30.0.5" + "pretty-format": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -3565,19 +3728,19 @@ } }, "node_modules/jest-watcher": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.1.3.tgz", - "integrity": "sha512-6jQUZCP1BTL2gvG9E4YF06Ytq4yMb4If6YoQGRR6PpjtqOXSP3sKe2kqwB6SQ+H9DezOfZaSLnmka1NtGm3fCQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz", + "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/test-result": "30.3.0", + "@jest/types": "30.3.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "30.0.5", + "jest-util": "30.3.0", "string-length": "^4.0.2" }, "engines": { @@ -3585,15 +3748,15 @@ } }, "node_modules/jest-worker": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.1.0.tgz", - "integrity": "sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz", + "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.0.5", + "jest-util": "30.3.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" }, @@ -3618,9 +3781,9 @@ } }, "node_modules/jiti": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.0.tgz", - "integrity": "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", "bin": { @@ -3635,9 +3798,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -3668,6 +3831,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3711,13 +3881,6 @@ "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -3752,9 +3915,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3788,20 +3951,6 @@ "dev": true, "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -3813,13 +3962,13 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3839,11 +3988,11 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -3856,9 +4005,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", - "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.11.tgz", + "integrity": "sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==", "dev": true, "funding": [ { @@ -3875,9 +4024,9 @@ } }, "node_modules/napi-postinstall": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", - "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "dev": true, "license": "MIT", "bin": { @@ -3938,13 +4087,6 @@ "node": "4.x || >=6.0.0" } }, - "node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", - "dev": true, - "license": "MIT" - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -3963,9 +4105,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "dev": true, "license": "MIT" }, @@ -3992,26 +4134,6 @@ "node": ">=8" } }, - "node_modules/nypm": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", - "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", - "dev": true, - "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.2", - "pathe": "^2.0.3", - "pkg-types": "^2.3.0", - "tinyexec": "^1.0.1" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, "node_modules/oas-kit-common": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", @@ -4038,9 +4160,9 @@ } }, "node_modules/oas-linter/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, "license": "ISC", "engines": { @@ -4068,9 +4190,9 @@ } }, "node_modules/oas-resolver/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, "license": "ISC", "engines": { @@ -4108,9 +4230,9 @@ } }, "node_modules/oas-validator/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, "license": "ISC", "engines": { @@ -4151,9 +4273,9 @@ } }, "node_modules/openai": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.23.0.tgz", - "integrity": "sha512-Cfq155NHzI7VWR67LUNJMIgPZy2oSh7Fld/OKhxq648BiUjELAvcge7g30xJ6vAfwwXf6TVK0KKuN+3nmIJG/A==", + "version": "5.23.2", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.23.2.tgz", + "integrity": "sha512-MQBzmTulj+MM5O8SKEk/gL8a7s5mktS9zUtAkU257WjvobGc9nKcBuVwjyEEcb9SI8a8Y2G/mzn3vm9n1Jlleg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4322,9 +4444,9 @@ "license": "MIT" }, "node_modules/perfect-debounce": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz", - "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", "dev": true, "license": "MIT" }, @@ -4336,13 +4458,13 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -4372,21 +4494,21 @@ } }, "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", "dev": true, "license": "MIT", "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", + "confbox": "^0.2.4", + "exsolve": "^1.0.8", "pathe": "^2.0.3" } }, "node_modules/pretty-format": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", - "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", + "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4429,14 +4551,14 @@ "license": "MIT" }, "node_modules/rc9": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", - "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.1.tgz", + "integrity": "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==", "dev": true, "license": "MIT", "dependencies": { - "defu": "^6.1.4", - "destr": "^2.0.3" + "defu": "^6.1.6", + "destr": "^2.0.5" } }, "node_modules/react-is": { @@ -4447,13 +4569,13 @@ "license": "MIT" }, "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 14.18.0" + "node": ">= 20.19.0" }, "funding": { "type": "individual", @@ -4480,6 +4602,16 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -4762,13 +4894,13 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -4855,34 +4987,52 @@ "license": "ISC" }, "node_modules/swagger-typescript-api": { - "version": "13.2.13", - "resolved": "https://registry.npmjs.org/swagger-typescript-api/-/swagger-typescript-api-13.2.13.tgz", - "integrity": "sha512-d4Ri5iOxCFB8VeTyosuzKnW8jtRBUFZC+XZthFiH78CwNrkMKAzyuSs0YGUZlHtm60VtkZBNxZkp71BHShJ8HQ==", + "version": "13.7.2", + "resolved": "https://registry.npmjs.org/swagger-typescript-api/-/swagger-typescript-api-13.7.2.tgz", + "integrity": "sha512-LQ6LJ6c7HM2/inzly0whDTwme3yAQa6VAHVLh+lBr6ZqDmKt6Zmdu8zFZM793qxX6Rm/WX5uu9GhjeC71KLUiA==", "dev": true, "license": "MIT", "dependencies": { - "@biomejs/js-api": "3.0.0", - "@biomejs/wasm-nodejs": "2.2.4", - "@types/lodash": "^4.17.20", + "@apidevtools/swagger-parser": "12.1.0", + "@biomejs/js-api": "4.0.0", + "@biomejs/wasm-nodejs": "2.4.13", "@types/swagger-schema-official": "^2.0.25", - "c12": "^3.3.0", - "citty": "^0.1.6", + "c12": "^3.3.3", + "citty": "^0.2.1", "consola": "^3.4.2", - "eta": "^4.0.1", - "lodash": "^4.17.21", - "nanoid": "^5.1.5", + "es-toolkit": "^1.44.0", + "eta": "^3.5.0", + "nanoid": "^5.1.6", "openapi-types": "^12.1.3", "swagger-schema-official": "2.0.0-bab6bed", "swagger2openapi": "^7.0.8", - "typescript": "~5.9.2", - "yaml": "^2.8.1" + "type-fest": "^5.4.4", + "typescript": "~6.0.2", + "yaml": "^2.8.2", + "yummies": "7.19.2" }, "bin": { - "sta": "dist/cli.js", - "swagger-typescript-api": "dist/cli.js" + "sta": "dist/cli.mjs", + "swagger-typescript-api": "dist/cli.mjs" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/swagger-typescript-api/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" }, "engines": { "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/swagger2openapi": { @@ -4914,9 +5064,9 @@ } }, "node_modules/swagger2openapi/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, "license": "ISC", "engines": { @@ -4924,9 +5074,9 @@ } }, "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4939,6 +5089,30 @@ "url": "https://opencollective.com/synckit" } }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -4955,9 +5129,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -4969,7 +5143,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -4988,9 +5162,9 @@ } }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -5000,13 +5174,6 @@ "node": "*" } }, - "node_modules/tinyexec": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "dev": true, - "license": "MIT" - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -5014,19 +5181,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -5035,19 +5189,19 @@ "license": "MIT" }, "node_modules/ts-jest": { - "version": "29.4.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.4.tgz", - "integrity": "sha512-ccVcRABct5ZELCT5U0+DZwkXMCcOCLi2doHRrKy1nK/s7J7bch6TzJMsrY09WxgUUIP/ITfmcDS8D2yl63rnXw==", + "version": "29.4.9", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.9.tgz", + "integrity": "sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.8", + "handlebars": "^4.7.9", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.2", + "semver": "^7.7.4", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -5064,7 +5218,7 @@ "babel-jest": "^29.0.0 || ^30.0.0", "jest": "^29.0.0 || ^30.0.0", "jest-util": "^29.0.0 || ^30.0.0", - "typescript": ">=4.3 <6" + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { @@ -5088,9 +5242,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -5189,9 +5343,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5217,9 +5371,9 @@ } }, "node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -5259,9 +5413,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -5496,9 +5650,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", + "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", "dev": true, "license": "ISC", "bin": { @@ -5506,6 +5660,9 @@ }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { @@ -5604,6 +5761,33 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/yummies": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/yummies/-/yummies-7.19.2.tgz", + "integrity": "sha512-3a8C0lsYP3c1sMsnQiPffS/X6hj1T0oIWOV/P6515ytGY5scAtcgaIg4mv8pe3856vyoTjagllvixdMxnitNUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dayjs": "^1.11.20", + "dompurify": "^3.3.3", + "nanoid": "^5.1.7", + "tailwind-merge": "^3.5.0" + }, + "peerDependencies": { + "mobx": "^6.12.4", + "react": "^18 || ^19" + }, + "peerDependenciesMeta": { + "mobx": { + "optional": true + }, + "react": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 56ee61309..012dbee55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vapi-ai/web", - "version": "2.5.3", + "version": "2.6.0", "description": "", "main": "dist/vapi.js", "types": "dist/vapi.d.ts", @@ -31,7 +31,7 @@ "node": ">=18.0.0" }, "dependencies": { - "@daily-co/daily-js": "^0.85.0", + "@daily-co/daily-js": "^0.89.1", "events": "^3.3.0" }, "devDependencies": {