@wildix/wilma-agents-client 1.0.27 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist-cjs/WilmaAgents.js +6 -0
  2. package/dist-cjs/commands/DeletePronunciationDictionaryCommand.js +20 -0
  3. package/dist-cjs/commands/ListPronunciationDictionariesCommand.js +20 -0
  4. package/dist-cjs/commands/PutPronunciationDictionaryCommand.js +20 -0
  5. package/dist-cjs/commands/index.js +3 -0
  6. package/dist-cjs/models/enums.js +46 -7
  7. package/dist-cjs/schemas/schemas_0.js +333 -99
  8. package/dist-es/WilmaAgents.js +6 -0
  9. package/dist-es/commands/DeletePronunciationDictionaryCommand.js +16 -0
  10. package/dist-es/commands/ListPronunciationDictionariesCommand.js +16 -0
  11. package/dist-es/commands/PutPronunciationDictionaryCommand.js +16 -0
  12. package/dist-es/commands/index.js +3 -0
  13. package/dist-es/models/enums.js +45 -6
  14. package/dist-es/schemas/schemas_0.js +329 -95
  15. package/dist-types/WilmaAgents.d.ts +25 -3
  16. package/dist-types/WilmaAgentsClient.d.ts +8 -5
  17. package/dist-types/commands/CreateAgentCommand.d.ts +286 -16
  18. package/dist-types/commands/DeletePronunciationDictionaryCommand.d.ts +82 -0
  19. package/dist-types/commands/GetAgentCommand.d.ts +143 -8
  20. package/dist-types/commands/GetAgentVersionCommand.d.ts +143 -8
  21. package/dist-types/commands/ListAgentsCommand.d.ts +144 -9
  22. package/dist-types/commands/ListAgentsNamesCommand.d.ts +18 -2
  23. package/dist-types/commands/ListPronunciationDictionariesCommand.d.ts +103 -0
  24. package/dist-types/commands/PublishAgentVersionCommand.d.ts +143 -8
  25. package/dist-types/commands/PutPronunciationDictionaryCommand.d.ts +117 -0
  26. package/dist-types/commands/RestoreAgentVersionToDraftCommand.d.ts +143 -8
  27. package/dist-types/commands/UpdateAgentCommand.d.ts +286 -16
  28. package/dist-types/commands/index.d.ts +3 -0
  29. package/dist-types/index.d.ts +3 -3
  30. package/dist-types/models/enums.d.ts +159 -26
  31. package/dist-types/models/models_0.d.ts +913 -49
  32. package/dist-types/schemas/schemas_0.d.ts +29 -1
  33. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import type { DocumentType as __DocumentType } from "@smithy/types";
2
- import type { ActorType, AgentHandoverPipelineType, AgentHandoverVariant, AgentHangupPipelineType, AgentStatus, AgentToolPipelineType, AgentTransferPipelineType, AgentTransferVariant, AgentVariableType, AgentVisibility, AgentWorkflowEntryBehavior, AgentWorkflowFailureKind, AgentWorkflowLayout, AgentWorkflowMessageButtonVariant, ChannelType, SandboxNetworkAccess, SandboxSize, WebSearchContextSize } from "./enums";
2
+ import type { ActorType, AgentGuardrailErrorMode, AgentGuardrailMode, AgentGuardrailPreset, AgentGuardrailSensitivity, AgentGuardrailWindow, AgentHandoverPipelineType, AgentHandoverVariant, AgentHangupPipelineType, AgentStatus, AgentToolPipelineType, AgentTransferPipelineType, AgentTransferVariant, AgentVariableType, AgentVisibility, AgentWorkflowEntryBehavior, AgentWorkflowFailureKind, AgentWorkflowLayout, AgentWorkflowMessageButtonVariant, ChannelType, SandboxNetworkAccess, SandboxSize, VoicePronunciationEncoding, VoiceSpeechProvider, VoiceTranscriptionVendor, WebSearchContextSize } from "./enums";
3
3
  /**
4
4
  * A user or group that access is granted to.
5
5
  * @public
@@ -40,8 +40,9 @@ export declare namespace AgentGrantPrincipal {
40
40
  /**
41
41
  * Who is allowed to use the agent. There is no view/edit dimension — access solely grants the ability to use the agent.
42
42
  * Per channel: on `chat` and `assistant` agents `grants` govern which colleagues can use the agent; on `voice` agents `grants`
43
- * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`); on `workflow` agents agent-level
44
- * access is not used — invocation access is configured per reference on the calling agent (see AgentCallCapability.access).
43
+ * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`). When an agent is
44
+ * invoked as a background task its agent-level access is not used — invocation access is configured per reference on the calling agent
45
+ * (see AgentCallCapability.access).
45
46
  * @public
46
47
  */
47
48
  export interface AgentAccess {
@@ -56,6 +57,64 @@ export interface AgentAccess {
56
57
  */
57
58
  grants?: AgentGrantPrincipal[] | undefined;
58
59
  }
60
+ /**
61
+ * A starter prompt offered as a card on an empty thread. Picking it sends `prompt` as the user's first message, so the user never types it.
62
+ * @public
63
+ */
64
+ export interface AssistantQuickCommand {
65
+ /**
66
+ * Card label, e.g. 'Summarize my day'. Rendered on one line and truncated when it does not fit.
67
+ * @public
68
+ */
69
+ title: string;
70
+ /**
71
+ * Optional line under the label. Also one line, so keep it to a short clarification of what the command does.
72
+ * @public
73
+ */
74
+ description?: string | undefined;
75
+ /**
76
+ * The message actually sent when the card is picked. Usually longer and more explicit than the label, since it is what the model reads.
77
+ * @public
78
+ */
79
+ prompt: string;
80
+ }
81
+ /**
82
+ * Greeting shown on an empty thread, above the quick commands.
83
+ * @public
84
+ */
85
+ export interface AssistantWelcomeSettings {
86
+ /**
87
+ * Heading, e.g. 'How can I help?'. Rendered on one line.
88
+ * @public
89
+ */
90
+ title?: string | undefined;
91
+ /**
92
+ * Line under the heading, saying what this agent is for, e.g. 'Ask about your conversations, accounts and calls.'.
93
+ * @public
94
+ */
95
+ subtitle?: string | undefined;
96
+ }
97
+ /**
98
+ * How the agent presents itself in the assistant UI: what the user reads before typing anything, and what they can start from without typing at all. Everything here is presentation — it never changes what the agent can do.
99
+ * @public
100
+ */
101
+ export interface AssistantUiSettings {
102
+ /**
103
+ * Greeting shown on an empty thread, above the quick commands.
104
+ * @public
105
+ */
106
+ welcome?: AssistantWelcomeSettings | undefined;
107
+ /**
108
+ * Cards offered under the welcome message on an empty thread, in the order given. Empty or omitted shows no cards.
109
+ * @public
110
+ */
111
+ commands?: AssistantQuickCommand[] | undefined;
112
+ /**
113
+ * Placeholder text in the composer, e.g. 'Ask about an account…'. Defaults to the client's own placeholder when omitted.
114
+ * @public
115
+ */
116
+ placeholder?: string | undefined;
117
+ }
59
118
  /**
60
119
  * @public
61
120
  */
@@ -65,6 +124,11 @@ export interface AssistantChannelSettings {
65
124
  * @public
66
125
  */
67
126
  default?: boolean | undefined;
127
+ /**
128
+ * How the agent presents itself in the assistant UI. Served to clients on AgentInfo, so it reaches the end user without exposing the rest of the agent definition.
129
+ * @public
130
+ */
131
+ ui?: AssistantUiSettings | undefined;
68
132
  }
69
133
  /**
70
134
  * @public
@@ -218,6 +282,262 @@ export interface VoiceSilenceTimeoutSettings {
218
282
  seconds: number;
219
283
  action: VoiceTerminateAction;
220
284
  }
285
+ /**
286
+ * A reference to a stored secret, held by other services in place of the value.
287
+ * Resolved server-to-server via GetSecretValue at execution time — always to the current value.
288
+ * @public
289
+ */
290
+ export interface SecretRef {
291
+ /**
292
+ * Unique identifier of a secret.
293
+ * @public
294
+ */
295
+ id: string;
296
+ }
297
+ /**
298
+ * A pronunciation rule for one phrase. Belongs to a LANGUAGE, not to the agent: 'Wildix' is
299
+ * respelled differently for an Italian and a German voice. A dictionary shared ACROSS languages
300
+ * would fight itself, which is why the company dictionary is keyed by language too — see
301
+ * PronunciationDictionary.
302
+ * @public
303
+ */
304
+ export interface VoicePronunciation {
305
+ /**
306
+ * The phrase as it appears in the text, e.g. 'Wildix'. Bounded because every rule is compiled into ONE regular expression — see the list below.
307
+ * @public
308
+ */
309
+ phrase: string;
310
+ /**
311
+ * Respelling (ALIAS) or phonetic transcription (IPA), e.g. 'Wil-dix'.
312
+ * @public
313
+ */
314
+ as: string;
315
+ /**
316
+ * Defaults to ALIAS.
317
+ * @public
318
+ */
319
+ encoding?: VoicePronunciationEncoding | undefined;
320
+ }
321
+ /**
322
+ * Synthesis options, used at two levels: as provider-level defaults on VoiceSpeechSettings and as
323
+ * per-language overrides on VoiceLanguage. Absent means inherit; there is no way to express
324
+ * 'explicitly the same as the parent', which is the intended simplification — the merged result is
325
+ * identical either way. Which members apply is a property of the provider AND the model (Chirp 3:
326
+ * HD documents only speakingRate; eleven_v3 carries no stability, similarity or speaker boost), so
327
+ * the console renders them from a catalog rather than unconditionally.
328
+ * @public
329
+ */
330
+ export interface VoiceSynthesisOptions {
331
+ /**
332
+ * Provider model id, e.g. 'eleven_flash_v2_5'.
333
+ * @public
334
+ */
335
+ model?: string | undefined;
336
+ /**
337
+ * Speaking rate. ElevenLabs 0.7-1.2 (default 1.0); Google 0.25-2.0 (default 1.0).
338
+ * @public
339
+ */
340
+ speed?: number | undefined;
341
+ /**
342
+ * ElevenLabs stability, 0-1 (default 0.5). Our clamp, not a vendor-stated bound.
343
+ * @public
344
+ */
345
+ stability?: number | undefined;
346
+ /**
347
+ * ElevenLabs similarity boost, 0-1 (default 0.75). Our clamp.
348
+ * @public
349
+ */
350
+ similarity?: number | undefined;
351
+ /**
352
+ * ElevenLabs style exaggeration, 0-1 (default 0). Our clamp.
353
+ * @public
354
+ */
355
+ style?: number | undefined;
356
+ /**
357
+ * ElevenLabs speaker boost (default true).
358
+ * @public
359
+ */
360
+ speakerBoost?: boolean | undefined;
361
+ /**
362
+ * Google pitch in semitones, -20 to 20. Not offered for Chirp 3: HD voices.
363
+ * @public
364
+ */
365
+ pitch?: number | undefined;
366
+ /**
367
+ * Google volume gain in dB, -96 to 16 (default 0); the vendor recommends staying under +10. Not offered for Chirp 3: HD voices.
368
+ * @public
369
+ */
370
+ volumeGain?: number | undefined;
371
+ }
372
+ /**
373
+ * One configured language: its voice, its initial phrase and its overrides.
374
+ * @public
375
+ */
376
+ export interface VoiceLanguage {
377
+ /**
378
+ * BCP-47 code with locale, e.g. 'en-US', 'it-IT'.
379
+ * @public
380
+ */
381
+ code: string;
382
+ /**
383
+ * Text-to-speech provider for THIS language. Absent falls back to
384
+ * VoiceSpeechSettings.provider, which is what records written before this member
385
+ * existed rely on. The console writes it on every language it creates.
386
+ *
387
+ * Per language rather than per bot because provider quality is not uniform across
388
+ * languages, and because a single bot-wide provider made changing it invalidate
389
+ * every configured voice at once: a voice id belongs to one provider, so switching
390
+ * the bot meant reselecting a speaker for every language.
391
+ * @public
392
+ */
393
+ provider?: VoiceSpeechProvider | undefined;
394
+ /**
395
+ * Provider voice id (ElevenLabs voice_id, Google voice name, Polly Id).
396
+ * A CR OR LF IS REFUSED BY THE PATTERN, and the reason is not tidiness: this value reaches the
397
+ * PBX as an AMI action parameter, and AMI frames on CRLF, so a newline inside it closes the
398
+ * action and starts another one on a local, already-authenticated manager connection. Whoever
399
+ * configures a voice agent in the cloud needs no PBX credential, so the model is the first place
400
+ * that can refuse it. `pbx-data-engine` refuses it again on the send path — two layers, because
401
+ * the AMI serializer is out of tree and neither layer can promise the other's behaviour.
402
+ * @public
403
+ */
404
+ voice: string;
405
+ /**
406
+ * Initial phrase spoken when the call starts in this language. Absent or empty means
407
+ * the agent says nothing and waits — it does NOT fall back to VoiceChannelSettings.greeting,
408
+ * which would speak one language's text in another language's voice.
409
+ * @public
410
+ */
411
+ greeting?: string | undefined;
412
+ /**
413
+ * Marks the language a caller hears when their own matches nothing configured.
414
+ *
415
+ * THE FULL RESOLUTION ORDER, since a client author reading only this contract cannot
416
+ * otherwise find it: an exact match on the call's language, then a match on its primary
417
+ * subtag (`fr` finds `fr-FR`), then the language marked here, then a language whose
418
+ * primary subtag is `en`, then the first entry in the list.
419
+ *
420
+ * Marked is consulted BEFORE the English step, so a record with none marked resolves
421
+ * exactly as it did before this member existed. English is deliberate rather than
422
+ * arbitrary — it is the language a caller the agent was not built for is likeliest to
423
+ * understand — and the last step exists only to keep the rule total, which is why list
424
+ * order should not be treated as configuration.
425
+ *
426
+ * At most one language may carry it. A record with two — reachable through the API or
427
+ * the CLI, where no form prevents it — resolves to the first marked one in list order,
428
+ * because refusing a call over configuration drift is worse than serving it and saying
429
+ * so in the trace.
430
+ * @public
431
+ */
432
+ isDefault?: boolean | undefined;
433
+ /**
434
+ * Extra instructions active only while the conversation runs in this language.
435
+ * @public
436
+ */
437
+ instructions?: string | undefined;
438
+ /**
439
+ * Overrides VoiceSpeechSettings.synthesis member by member.
440
+ * @public
441
+ */
442
+ synthesis?: VoiceSynthesisOptions | undefined;
443
+ /**
444
+ * The company's own credential for THIS language's provider (secret variant
445
+ * `auth_bearer`). Absent falls back to VoiceSpeechSettings.credential, then to the
446
+ * platform key.
447
+ *
448
+ * It lives beside the provider because a credential belongs to one: a company's
449
+ * ElevenLabs key cannot serve a language synthesized by Google, and a single
450
+ * bot-wide credential would have been silently inapplicable to some languages.
451
+ * @public
452
+ */
453
+ credential?: SecretRef | undefined;
454
+ /**
455
+ * This agent's OWN rules for this language. A rule whose phrase also exists in the
456
+ * company dictionary replaces it; a rule whose phrase does not is simply an addition —
457
+ * the two are the same member because they are the same act.
458
+ * @public
459
+ */
460
+ pronunciations?: VoicePronunciation[] | undefined;
461
+ /**
462
+ * Company-dictionary phrases this agent declines. See VoicePronunciationSuppressionList.
463
+ * @public
464
+ */
465
+ pronunciationSuppressions?: string[] | undefined;
466
+ }
467
+ /**
468
+ * Speech-to-text configuration. Vendor-specific recognition options — term hints, custom
469
+ * vocabulary — land here alongside the vendors that take them; nothing writes them today.
470
+ * @public
471
+ */
472
+ export interface VoiceTranscriptionSettings {
473
+ /**
474
+ * Recognition vendor. Absent resolves to the platform default (`aws` today), resolved by the
475
+ * server so exactly one component decides it.
476
+ *
477
+ * DELIBERATELY NOT @required, and the sentence above is why: the server already answers the
478
+ * default for a `transcription` that carries no vendor, and both consoles were written to
479
+ * that promise. @required contradicted it — it made the server-side default reachable only
480
+ * for a WHOLLY ABSENT `transcription`, and refused a shape this documentation describes as
481
+ * legal.
482
+ * @public
483
+ */
484
+ vendor?: VoiceTranscriptionVendor | undefined;
485
+ }
486
+ /**
487
+ * Speech configuration for the voice channel. When present it WINS over the dialplan's `voice` and
488
+ * `initialMessage` connect parameters; `language` is the single exception, because it is the
489
+ * channel's own input signal and the feature has no starting point without it.
490
+ * @public
491
+ */
492
+ export interface VoiceSpeechSettings {
493
+ /**
494
+ * DEFAULT text-to-speech provider, used by a language that names none of its own.
495
+ * Still required, so a record always answers 'which provider' — but the console now
496
+ * writes `provider` on every language, so this is what pre-existing records and API
497
+ * callers fall back to rather than the primary control.
498
+ * @public
499
+ */
500
+ provider: VoiceSpeechProvider;
501
+ /**
502
+ * Configured languages. The @length bound is a STORAGE ceiling, not the product rule: the real
503
+ * cap is the selected transcription vendor's `maxCandidates` (five for Amazon Transcribe),
504
+ * enforced in the service from its catalog so a vendor with a different limit needs no model
505
+ * change.
506
+ * @public
507
+ */
508
+ languages: VoiceLanguage[];
509
+ /**
510
+ * Identify the caller's language automatically and switch voice and reply language mid-call. Requires at least two languages and a vendor that can identify languages; the server clamps it to false otherwise.
511
+ * @public
512
+ */
513
+ autoDetect?: boolean | undefined;
514
+ /**
515
+ * Speak the first message of every configured language in turn when the call is answered, each
516
+ * in the voice, provider account and pronunciation rules of its own language, instead of only the
517
+ * language the call resolved to. Languages whose first message is empty, and languages the PBX
518
+ * synthesizes itself, are skipped. Absent means off. Requires at least two languages carrying a
519
+ * first message; below that the runtime speaks only the resolved language's phrase, and the
520
+ * console clamps the member on save.
521
+ * @public
522
+ */
523
+ greetEveryLanguage?: boolean | undefined;
524
+ /**
525
+ * Speech-to-text configuration. Vendor-specific recognition options — term hints, custom
526
+ * vocabulary — land here alongside the vendors that take them; nothing writes them today.
527
+ * @public
528
+ */
529
+ transcription?: VoiceTranscriptionSettings | undefined;
530
+ /**
531
+ * Provider-level synthesis defaults, inherited by every language.
532
+ * @public
533
+ */
534
+ synthesis?: VoiceSynthesisOptions | undefined;
535
+ /**
536
+ * The company's own provider credential (secret variant `auth_bearer`). Absent means the platform key. Has no counterpart in wim-voicebots — a deliberate parity gap.
537
+ * @public
538
+ */
539
+ credential?: SecretRef | undefined;
540
+ }
221
541
  /**
222
542
  * Voice channel settings. Note: a voice agent's AgentAccess.grants are ignored — inbound calls are routed by the PBX dialplan and data ACL is the agent-level `settings.pbxGroupId`, not per-user grants.
223
543
  * @public
@@ -228,6 +548,25 @@ export interface VoiceChannelSettings {
228
548
  * @public
229
549
  */
230
550
  greeting?: string | undefined;
551
+ /**
552
+ * Ambient background played under the call, as a music-on-hold class name.
553
+ *
554
+ * ABSENT MEANS OFF. There is no value meaning 'none': the member is simply not sent, which is
555
+ * exactly the state every call was in before this setting existed, so a bot that never touches
556
+ * it behaves as it always did and the PBX needs no new case.
557
+ *
558
+ * It belongs to the CHANNEL rather than to `speech`, even though the console shows the control
559
+ * under the automatic-language switch. `speech` is the recognition and synthesis
560
+ * configuration and is sent only when languages are configured — background audio has nothing
561
+ * to do with either, and a bot with no languages must still be able to have it.
562
+ * @public
563
+ */
564
+ backgroundSound?: string | undefined;
565
+ /**
566
+ * Provider, languages, voices, initial phrases and pronunciation. Absent means the legacy behavior: voice URI from the dialplan connect parameter, one voice, language as prompt context only.
567
+ * @public
568
+ */
569
+ speech?: VoiceSpeechSettings | undefined;
231
570
  interruptions?: VoiceInterruptionSettings | undefined;
232
571
  silenceTimeout?: VoiceSilenceTimeoutSettings | undefined;
233
572
  maxDuration?: VoiceMaxDurationSettings | undefined;
@@ -238,12 +577,6 @@ export interface VoiceChannelSettings {
238
577
  */
239
578
  callerMetadata?: VoiceCallerMetadataSettings | undefined;
240
579
  }
241
- /**
242
- * Workflow channel settings. Currently empty; presence enables the workflow channel.
243
- * @public
244
- */
245
- export interface WorkflowChannelSettings {
246
- }
247
580
  /**
248
581
  * The channels an agent serves and their channel-specific settings. Presence of a member enables that channel; at least one must be set. Enabled channels are mirrored as ChannelType values on AgentInfo.
249
582
  * @public
@@ -256,11 +589,6 @@ export interface AgentChannels {
256
589
  voice?: VoiceChannelSettings | undefined;
257
590
  chat?: ChatChannelSettings | undefined;
258
591
  assistant?: AssistantChannelSettings | undefined;
259
- /**
260
- * Workflow channel settings. Currently empty; presence enables the workflow channel.
261
- * @public
262
- */
263
- workflow?: WorkflowChannelSettings | undefined;
264
592
  }
265
593
  /**
266
594
  * Who performed an action: an interactive user, an API key or an internal service.
@@ -384,7 +712,7 @@ export interface AgentToolVariable {
384
712
  handler?: AgentToolVariableHandler | undefined;
385
713
  }
386
714
  /**
387
- * Invoke another agent (typically a workflow agent) as a dedicated execution with its own state. The called agent runs independently and returns its result.
715
+ * Invoke another agent as a dedicated execution with its own state. The called agent runs independently and returns its result.
388
716
  * @public
389
717
  */
390
718
  export interface AgentCallCapability {
@@ -397,12 +725,19 @@ export interface AgentCallCapability {
397
725
  /**
398
726
  * Who may invoke this sub-agent tool. Evaluated per invoking user when the calling agent (chat / assistant) builds its
399
727
  * toolset: if the user is not granted, this capability is omitted from the tools offered to the model for that session.
400
- * When omitted, the tool is available to everyone who can use the calling agent. This is where a workflow agent's
401
- * invocation access is configured, since workflow agents have no agent-level access of their own.
728
+ * When omitted, the tool is available to everyone who can use the calling agent. This is the only place invocation
729
+ * access is configured — the called agent's own access settings do not apply to being invoked.
402
730
  * @public
403
731
  */
404
732
  access?: AgentAccess | undefined;
405
733
  variables?: AgentToolVariable[] | undefined;
734
+ /**
735
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
736
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
737
+ * still ignored there, because the chat channel has no call to transfer.
738
+ * @public
739
+ */
740
+ channels?: ChannelType[] | undefined;
406
741
  }
407
742
  /**
408
743
  * Comment annotation emitted after a tool completes.
@@ -587,6 +922,13 @@ export interface AgentConnectorCapability {
587
922
  * @public
588
923
  */
589
924
  approval?: AgentToolApproval | undefined;
925
+ /**
926
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
927
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
928
+ * still ignored there, because the chat channel has no call to transfer.
929
+ * @public
930
+ */
931
+ channels?: ChannelType[] | undefined;
590
932
  annotations?: AgentToolAnnotation[] | undefined;
591
933
  }
592
934
  /**
@@ -614,6 +956,13 @@ export interface AgentDelegationCapability {
614
956
  * @public
615
957
  */
616
958
  agentVersion?: number | undefined;
959
+ /**
960
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
961
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
962
+ * still ignored there, because the chat channel has no call to transfer.
963
+ * @public
964
+ */
965
+ channels?: ChannelType[] | undefined;
617
966
  annotations?: AgentToolAnnotation[] | undefined;
618
967
  }
619
968
  /**
@@ -664,6 +1013,13 @@ export interface AgentHandoverCapability {
664
1013
  */
665
1014
  silent?: boolean | undefined;
666
1015
  pipeline?: AgentHandoverPipeline | undefined;
1016
+ /**
1017
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1018
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1019
+ * still ignored there, because the chat channel has no call to transfer.
1020
+ * @public
1021
+ */
1022
+ channels?: ChannelType[] | undefined;
667
1023
  annotations?: AgentToolAnnotation[] | undefined;
668
1024
  }
669
1025
  /**
@@ -693,6 +1049,13 @@ export interface AgentHangupCapability {
693
1049
  */
694
1050
  description?: string | undefined;
695
1051
  pipeline?: AgentHangupPipeline | undefined;
1052
+ /**
1053
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1054
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1055
+ * still ignored there, because the chat channel has no call to transfer.
1056
+ * @public
1057
+ */
1058
+ channels?: ChannelType[] | undefined;
696
1059
  annotations?: AgentToolAnnotation[] | undefined;
697
1060
  }
698
1061
  /**
@@ -705,6 +1068,13 @@ export interface AgentKnowledgeBase {
705
1068
  * @public
706
1069
  */
707
1070
  instructions?: string | undefined;
1071
+ /**
1072
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1073
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1074
+ * still ignored there, because the chat channel has no call to transfer.
1075
+ * @public
1076
+ */
1077
+ channels?: ChannelType[] | undefined;
708
1078
  annotations?: AgentToolAnnotation[] | undefined;
709
1079
  }
710
1080
  /**
@@ -755,7 +1125,7 @@ export interface AgentVercelSandboxOptions {
755
1125
  allowedDomains?: string[] | undefined;
756
1126
  }
757
1127
  /**
758
- * Embedded sandbox: shell + file tools backed by an execution environment.
1128
+ * Embedded sandbox: shell + file tools backed by an execution environment. The only capability with no `channels` list — being a union it has nowhere to carry one — so it is offered on every channel the agent serves.
759
1129
  * @public
760
1130
  */
761
1131
  export type AgentSandboxCapability = AgentSandboxCapability.SnapshotMember | AgentSandboxCapability.VercelMember | AgentSandboxCapability.$UnknownMember;
@@ -809,6 +1179,13 @@ export interface AgentSuggestionsCapability {
809
1179
  * @public
810
1180
  */
811
1181
  name?: string | undefined;
1182
+ /**
1183
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1184
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1185
+ * still ignored there, because the chat channel has no call to transfer.
1186
+ * @public
1187
+ */
1188
+ channels?: ChannelType[] | undefined;
812
1189
  annotations?: AgentToolAnnotation[] | undefined;
813
1190
  }
814
1191
  /**
@@ -920,6 +1297,13 @@ export interface AgentTool {
920
1297
  * @public
921
1298
  */
922
1299
  approval?: AgentToolApproval | undefined;
1300
+ /**
1301
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1302
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1303
+ * still ignored there, because the chat channel has no call to transfer.
1304
+ * @public
1305
+ */
1306
+ channels?: ChannelType[] | undefined;
923
1307
  annotations?: AgentToolAnnotation[] | undefined;
924
1308
  }
925
1309
  /**
@@ -960,6 +1344,13 @@ export interface AgentTransferCapability {
960
1344
  */
961
1345
  extension?: string | undefined;
962
1346
  pipeline?: AgentTransferPipeline | undefined;
1347
+ /**
1348
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1349
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1350
+ * still ignored there, because the chat channel has no call to transfer.
1351
+ * @public
1352
+ */
1353
+ channels?: ChannelType[] | undefined;
963
1354
  annotations?: AgentToolAnnotation[] | undefined;
964
1355
  }
965
1356
  /**
@@ -982,6 +1373,13 @@ export interface AgentWaitCapability {
982
1373
  * @public
983
1374
  */
984
1375
  message?: string | undefined;
1376
+ /**
1377
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1378
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1379
+ * still ignored there, because the chat channel has no call to transfer.
1380
+ * @public
1381
+ */
1382
+ channels?: ChannelType[] | undefined;
985
1383
  annotations?: AgentToolAnnotation[] | undefined;
986
1384
  }
987
1385
  /**
@@ -994,6 +1392,13 @@ export interface AgentWebFetchCapability {
994
1392
  * @public
995
1393
  */
996
1394
  allowedDomains?: string[] | undefined;
1395
+ /**
1396
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1397
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1398
+ * still ignored there, because the chat channel has no call to transfer.
1399
+ * @public
1400
+ */
1401
+ channels?: ChannelType[] | undefined;
997
1402
  }
998
1403
  /**
999
1404
  * @public
@@ -1028,6 +1433,13 @@ export interface AgentWebSearchCapability {
1028
1433
  */
1029
1434
  allowedDomains?: string[] | undefined;
1030
1435
  userLocation?: WebSearchUserLocation | undefined;
1436
+ /**
1437
+ * Channels this capability is offered on. Absent or empty — the default — means every channel the agent serves
1438
+ * that can honour it. Listing channels narrows that set and never widens it: a `transfer` listed for `chat` is
1439
+ * still ignored there, because the chat channel has no call to transfer.
1440
+ * @public
1441
+ */
1442
+ channels?: ChannelType[] | undefined;
1031
1443
  }
1032
1444
  /**
1033
1445
  * @public
@@ -1093,7 +1505,7 @@ export declare namespace AgentCapability {
1093
1505
  $unknown?: never;
1094
1506
  }
1095
1507
  /**
1096
- * Embedded sandbox: shell + file tools backed by an execution environment.
1508
+ * Embedded sandbox: shell + file tools backed by an execution environment. The only capability with no `channels` list — being a union it has nowhere to carry one — so it is offered on every channel the agent serves.
1097
1509
  * @public
1098
1510
  */
1099
1511
  interface SandboxMember {
@@ -1153,7 +1565,7 @@ export declare namespace AgentCapability {
1153
1565
  $unknown?: never;
1154
1566
  }
1155
1567
  /**
1156
- * Invoke another agent (typically a workflow agent) as a dedicated execution with its own state. The called agent runs independently and returns its result.
1568
+ * Invoke another agent as a dedicated execution with its own state. The called agent runs independently and returns its result.
1157
1569
  * @public
1158
1570
  */
1159
1571
  interface AgentMember {
@@ -1332,6 +1744,298 @@ export declare namespace AgentCapability {
1332
1744
  _: (name: string, value: any) => T;
1333
1745
  }
1334
1746
  }
1747
+ /**
1748
+ * Refuse the turn. The agent's model is never called, no tool runs, and the caller is answered with `message` instead. The session stays alive and the conversation continues, so on a check meant to redirect rather than stop — 'let me take a few details first' — the message is doing the work.
1749
+ * @public
1750
+ */
1751
+ export interface AgentGuardrailBlockAction {
1752
+ /**
1753
+ * Said to the caller in place of the agent's reply. Falls back to a channel default when unset.
1754
+ * @public
1755
+ */
1756
+ message?: string | undefined;
1757
+ }
1758
+ /**
1759
+ * End the session. It lands in SessionStatus TERMINATED — not STOPPED, which is what a user asking to stop means — so a refused session is never read back as a clean finish. On voice this hangs up the call; on the other channels the session simply accepts no further turns.
1760
+ * @public
1761
+ */
1762
+ export interface AgentGuardrailEndAction {
1763
+ /**
1764
+ * Said to the caller before the session ends.
1765
+ * @public
1766
+ */
1767
+ message?: string | undefined;
1768
+ }
1769
+ /**
1770
+ * Record the verdict and let the turn through. The rollout mode: every guardrail should run here first, against real traffic, until its trips are read and its sensitivity is tuned. A tripped check still emits GuardrailTrippedEvent and still appears in the trace, which is what makes this a tuning tool rather than a switched-off check.
1771
+ * @public
1772
+ */
1773
+ export interface AgentGuardrailObserveAction {
1774
+ }
1775
+ /**
1776
+ * Mask the matched spans and let the turn continue. The mask is chosen by the platform and is not configurable — a tenant-authored placeholder that collides with real text, or that the model reads as an instruction, is worse than having no choice. Only valid on checks that return spans (PII, SECRETS).
1777
+ * @public
1778
+ */
1779
+ export interface AgentGuardrailRedactAction {
1780
+ }
1781
+ /**
1782
+ * What happens when a check trips. Exactly one member is set.
1783
+ *
1784
+ * Ordered by severity: observe < redact < block < end. When more than one check trips in the same call the
1785
+ * most severe action wins and ties break on the order of `checks`, so a set can mix an observed check with
1786
+ * an enforced one without the observation weakening the enforcement.
1787
+ *
1788
+ * There is no hand-over member yet. Handing a session to a human is a different mechanism on every channel
1789
+ * — a voice transfer, a chat assignment, an assistant with no human behind it — and wiring a guardrail into
1790
+ * all of them is out of proportion to the rest of this feature. Until AgentHandoverCapability has a runtime
1791
+ * on more than one channel, the crisis path is a block whose message routes the caller.
1792
+ * @public
1793
+ */
1794
+ export type AgentGuardrailAction = AgentGuardrailAction.BlockMember | AgentGuardrailAction.EndMember | AgentGuardrailAction.ObserveMember | AgentGuardrailAction.RedactMember | AgentGuardrailAction.$UnknownMember;
1795
+ /**
1796
+ * @public
1797
+ */
1798
+ export declare namespace AgentGuardrailAction {
1799
+ /**
1800
+ * Record the verdict and let the turn through. The rollout mode: every guardrail should run here first, against real traffic, until its trips are read and its sensitivity is tuned. A tripped check still emits GuardrailTrippedEvent and still appears in the trace, which is what makes this a tuning tool rather than a switched-off check.
1801
+ * @public
1802
+ */
1803
+ interface ObserveMember {
1804
+ observe: AgentGuardrailObserveAction;
1805
+ redact?: never;
1806
+ block?: never;
1807
+ end?: never;
1808
+ $unknown?: never;
1809
+ }
1810
+ /**
1811
+ * Mask the matched spans and let the turn continue. The mask is chosen by the platform and is not configurable — a tenant-authored placeholder that collides with real text, or that the model reads as an instruction, is worse than having no choice. Only valid on checks that return spans (PII, SECRETS).
1812
+ * @public
1813
+ */
1814
+ interface RedactMember {
1815
+ observe?: never;
1816
+ redact: AgentGuardrailRedactAction;
1817
+ block?: never;
1818
+ end?: never;
1819
+ $unknown?: never;
1820
+ }
1821
+ /**
1822
+ * Refuse the turn. The agent's model is never called, no tool runs, and the caller is answered with `message` instead. The session stays alive and the conversation continues, so on a check meant to redirect rather than stop — 'let me take a few details first' — the message is doing the work.
1823
+ * @public
1824
+ */
1825
+ interface BlockMember {
1826
+ observe?: never;
1827
+ redact?: never;
1828
+ block: AgentGuardrailBlockAction;
1829
+ end?: never;
1830
+ $unknown?: never;
1831
+ }
1832
+ /**
1833
+ * End the session. It lands in SessionStatus TERMINATED — not STOPPED, which is what a user asking to stop means — so a refused session is never read back as a clean finish. On voice this hangs up the call; on the other channels the session simply accepts no further turns.
1834
+ * @public
1835
+ */
1836
+ interface EndMember {
1837
+ observe?: never;
1838
+ redact?: never;
1839
+ block?: never;
1840
+ end: AgentGuardrailEndAction;
1841
+ $unknown?: never;
1842
+ }
1843
+ /**
1844
+ * @public
1845
+ */
1846
+ interface $UnknownMember {
1847
+ observe?: never;
1848
+ redact?: never;
1849
+ block?: never;
1850
+ end?: never;
1851
+ $unknown: [string, any];
1852
+ }
1853
+ /**
1854
+ * @deprecated unused in schema-serde mode.
1855
+ *
1856
+ */
1857
+ interface Visitor<T> {
1858
+ observe: (value: AgentGuardrailObserveAction) => T;
1859
+ redact: (value: AgentGuardrailRedactAction) => T;
1860
+ block: (value: AgentGuardrailBlockAction) => T;
1861
+ end: (value: AgentGuardrailEndAction) => T;
1862
+ _: (name: string, value: any) => T;
1863
+ }
1864
+ }
1865
+ /**
1866
+ * A check written by the tenant. A name and a prompt is the whole surface: no category enum can express the rules customers actually buy, such as refusing to quote a price before qualifying.
1867
+ * @public
1868
+ */
1869
+ export interface AgentGuardrailCustomCheck {
1870
+ /**
1871
+ * Natural-language description of what a custom check looks for. Describe the *content* to be caught, not an instruction to the checker: 'The caller is asking about cryptocurrency investments' works, 'Block all content about crypto' does not, and a negative definition ('anything except billing questions') reliably misfires.
1872
+ * @public
1873
+ */
1874
+ instructions: string;
1875
+ /**
1876
+ * Up to five turns that should trip this check. They steer the model's judgement and are NOT matched literally — a description plus examples catches the plural, the typo and the paraphrase that a term list misses.
1877
+ * @public
1878
+ */
1879
+ examples?: string[] | undefined;
1880
+ }
1881
+ /**
1882
+ * A check backed by one of the platform's prebuilt prompts.
1883
+ * @public
1884
+ */
1885
+ export interface AgentGuardrailPresetCheck {
1886
+ /**
1887
+ * A prebuilt check. Each preset is a platform-maintained prompt shipped in code and versioned with the
1888
+ * platform, not a tenant row — so a support question about what a preset caught has one answer. A preset
1889
+ * check is otherwise an ordinary AgentGuardrailCheck: its sensitivity and action are the tenant's to set,
1890
+ * and `notes` narrows its prompt without replacing it.
1891
+ * @public
1892
+ */
1893
+ preset: AgentGuardrailPreset;
1894
+ /**
1895
+ * Appended to the preset's prompt. For narrowing, not redefining — 'ignore card numbers read back after our own IVR prompts for them' — so the preset keeps its maintenance while fitting a tenant whose product would otherwise fight it.
1896
+ * @public
1897
+ */
1898
+ notes?: string | undefined;
1899
+ }
1900
+ /**
1901
+ * What a check is: one of the platform's presets, or a prompt the tenant wrote. Exactly one member is set.
1902
+ * @public
1903
+ */
1904
+ export type AgentGuardrailCheckKind = AgentGuardrailCheckKind.CustomMember | AgentGuardrailCheckKind.PresetMember | AgentGuardrailCheckKind.$UnknownMember;
1905
+ /**
1906
+ * @public
1907
+ */
1908
+ export declare namespace AgentGuardrailCheckKind {
1909
+ /**
1910
+ * A check backed by one of the platform's prebuilt prompts.
1911
+ * @public
1912
+ */
1913
+ interface PresetMember {
1914
+ preset: AgentGuardrailPresetCheck;
1915
+ custom?: never;
1916
+ $unknown?: never;
1917
+ }
1918
+ /**
1919
+ * A check written by the tenant. A name and a prompt is the whole surface: no category enum can express the rules customers actually buy, such as refusing to quote a price before qualifying.
1920
+ * @public
1921
+ */
1922
+ interface CustomMember {
1923
+ preset?: never;
1924
+ custom: AgentGuardrailCustomCheck;
1925
+ $unknown?: never;
1926
+ }
1927
+ /**
1928
+ * @public
1929
+ */
1930
+ interface $UnknownMember {
1931
+ preset?: never;
1932
+ custom?: never;
1933
+ $unknown: [string, any];
1934
+ }
1935
+ /**
1936
+ * @deprecated unused in schema-serde mode.
1937
+ *
1938
+ */
1939
+ interface Visitor<T> {
1940
+ preset: (value: AgentGuardrailPresetCheck) => T;
1941
+ custom: (value: AgentGuardrailCustomCheck) => T;
1942
+ _: (name: string, value: any) => T;
1943
+ }
1944
+ }
1945
+ /**
1946
+ * One thing the checker is asked about a turn. There is deliberately no `enabled` flag: a check that
1947
+ * should not run is removed, so a published version never carries a switched-off check that reads like
1948
+ * policy.
1949
+ * @public
1950
+ */
1951
+ export interface AgentGuardrailCheck {
1952
+ /**
1953
+ * Name of a check, unique within a guardrail set. Stable and machine-facing: session events and trace spans report a verdict by this name, so a reader needs no copy of the agent definition to tell which check fired.
1954
+ * @public
1955
+ */
1956
+ name: string;
1957
+ description?: string | undefined;
1958
+ /**
1959
+ * What a check is: one of the platform's presets, or a prompt the tenant wrote. Exactly one member is set.
1960
+ * @public
1961
+ */
1962
+ kind: AgentGuardrailCheckKind;
1963
+ /**
1964
+ * How much confidence a verdict needs before it counts as tripped. The checker reports a confidence per
1965
+ * check and this is the threshold against it, so raising sensitivity catches more and costs more false
1966
+ * positives without changing the prompt or the model: `low` trips only on high confidence, `medium` on
1967
+ * high and medium, `high` on anything but a clear pass. Defaults to MEDIUM.
1968
+ * @public
1969
+ */
1970
+ sensitivity?: AgentGuardrailSensitivity | undefined;
1971
+ /**
1972
+ * What happens when this check trips. Defaults to the preset's own — a block for most, a redaction for PII and SECRETS, and for SELF_HARM a block whose message routes the caller. A custom check with none defaults to a block.
1973
+ * @public
1974
+ */
1975
+ action?: AgentGuardrailAction | undefined;
1976
+ }
1977
+ /**
1978
+ * Screening applied to what reaches the model.
1979
+ *
1980
+ * There is deliberately no bundle or preset-group member. A named group that expands to a set of checks
1981
+ * reads like convenience and behaves like version skew: the same agent definition would mean different
1982
+ * things before and after a platform release, invisibly to the tenant who published it. Listing the checks
1983
+ * costs a few lines in a document the console writes anyway, and the published version then states exactly
1984
+ * what it enforces.
1985
+ *
1986
+ * There is also no set-level default action. One field standing behind every check reads as a convenience
1987
+ * and hides the thing a reader most needs to see: what a given check will actually do. A check's action is
1988
+ * its own or its preset's, and both are visible on the check.
1989
+ * @public
1990
+ */
1991
+ export interface AgentGuardrailInput {
1992
+ /**
1993
+ * The checks to run, evaluated together in one call. Absent or empty means no screening.
1994
+ * @public
1995
+ */
1996
+ checks?: AgentGuardrailCheck[] | undefined;
1997
+ /**
1998
+ * The model that runs the checks. Defaults to the platform's guardrail model — deliberately small and fast, and deliberately not the agent's own, whose cost and latency are what this exists to avoid spending on a bad turn.
1999
+ * @public
2000
+ */
2001
+ model?: string | undefined;
2002
+ /**
2003
+ * Runs the checker before the agent's model (BLOCKING) or alongside it (PARALLEL). Blocking costs the checker's latency on every turn but guarantees that a refused turn spent no tokens and fired no tool; parallel adds no latency and is the right trade on voice, where the delay is audible, at the risk that part of a reply reaches the caller and that a tool has already run before the cancellation lands. Defaults to BLOCKING.
2004
+ * @public
2005
+ */
2006
+ mode?: AgentGuardrailMode | undefined;
2007
+ /**
2008
+ * What happens when the checker itself errors or times out. OPEN lets the turn through unscreened and records GuardrailFailedEvent, so an unscreened turn is a fact in the log rather than an absence; CLOSED refuses it. Defaults to OPEN: an agent that stops answering because a small model had a bad minute is a worse and far likelier outage than the rare turn that goes unscreened. Background tasks, where nobody is waiting and a retry is free, are the case for CLOSED.
2009
+ * @public
2010
+ */
2011
+ errorMode?: AgentGuardrailErrorMode | undefined;
2012
+ /**
2013
+ * How much of the conversation the checker sees. Defaults to LAST_WITH_PRIOR, because the jailbreaks worth catching are built across several turns — establish a fiction, then cash it in — and a checker shown only the last turn sees an innocuous sentence. There is no full-transcript option: screening a whole call on every turn would make the guardrail dearer than the agent.
2014
+ * @public
2015
+ */
2016
+ window?: AgentGuardrailWindow | undefined;
2017
+ }
2018
+ /**
2019
+ * Turn screening, by side. Only `input` exists: it guards what reaches the model, and output screening is a separate policy with different actions, added here when it is built.
2020
+ * @public
2021
+ */
2022
+ export interface AgentGuardrails {
2023
+ /**
2024
+ * Screening applied to what reaches the model.
2025
+ *
2026
+ * There is deliberately no bundle or preset-group member. A named group that expands to a set of checks
2027
+ * reads like convenience and behaves like version skew: the same agent definition would mean different
2028
+ * things before and after a platform release, invisibly to the tenant who published it. Listing the checks
2029
+ * costs a few lines in a document the console writes anyway, and the published version then states exactly
2030
+ * what it enforces.
2031
+ *
2032
+ * There is also no set-level default action. One field standing behind every check reads as a convenience
2033
+ * and hides the thing a reader most needs to see: what a given check will actually do. A check's action is
2034
+ * its own or its preset's, and both are visible on the check.
2035
+ * @public
2036
+ */
2037
+ input?: AgentGuardrailInput | undefined;
2038
+ }
1335
2039
  /**
1336
2040
  * Reference to a skill attached to an agent.
1337
2041
  * @public
@@ -2298,15 +3002,12 @@ export interface AgentWorkflowStep {
2298
3002
  */
2299
3003
  id: string;
2300
3004
  /**
2301
- * Human readable name of a step, shown in the builder and in traces. Never a routing key — see AgentWorkflowStepId — but it is read by the model as the fallback preview of an exit that leads here when the step carries no `summary`.
3005
+ * Human readable name of a step, e.g. 'Transfer to the sales desk'. Shown in the builder and in traces, and
3006
+ * read by the model too: when this step is an exit of the live step, the label is the preview offered alongside
3007
+ * the exit's condition. Never a routing key — see AgentWorkflowStepId — so renaming one never unwires a graph.
2302
3008
  * @public
2303
3009
  */
2304
3010
  label: string;
2305
- /**
2306
- * One line saying what happens here, shown to the model as the preview of any exit that leads to this step.
2307
- * @public
2308
- */
2309
- summary?: string | undefined;
2310
3011
  /**
2311
3012
  * The phase this step belongs to. Inherited by steps downstream, so a handful of tags organise a long graph.
2312
3013
  * @public
@@ -2425,6 +3126,15 @@ export interface AgentAiEngine {
2425
3126
  * @public
2426
3127
  */
2427
3128
  workflow?: AgentWorkflow | undefined;
3129
+ /**
3130
+ * Screening applied to a turn before this agent's model sees it. Sits next to `instructions` and
3131
+ * `workflow` because it is the third thing that governs a session, and it is enforced outside the prompt
3132
+ * on purpose: a refusal written into `instructions` is one the caller can argue the agent out of.
3133
+ * Optional — absent means no screening, which is what every agent authored before guardrails existed
3134
+ * keeps doing. See AgentGuardrails.
3135
+ * @public
3136
+ */
3137
+ guardrails?: AgentGuardrails | undefined;
2428
3138
  /**
2429
3139
  * Defaults to the platform default model when omitted.
2430
3140
  * @public
@@ -2452,18 +3162,6 @@ export interface AgentAiEngine {
2452
3162
  capabilities?: AgentCapability[] | undefined;
2453
3163
  variables?: AgentVariable[] | undefined;
2454
3164
  }
2455
- /**
2456
- * A reference to a stored secret, held by other services in place of the value.
2457
- * Resolved server-to-server via GetSecretValue at execution time — always to the current value.
2458
- * @public
2459
- */
2460
- export interface SecretRef {
2461
- /**
2462
- * Unique identifier of a secret.
2463
- * @public
2464
- */
2465
- id: string;
2466
- }
2467
3165
  /**
2468
3166
  * Bring-your-own backend over SQS: turns are forwarded to the queue, replies are posted back via the API.
2469
3167
  * @public
@@ -2595,8 +3293,9 @@ export interface Agent {
2595
3293
  /**
2596
3294
  * Who is allowed to use the agent. There is no view/edit dimension — access solely grants the ability to use the agent.
2597
3295
  * Per channel: on `chat` and `assistant` agents `grants` govern which colleagues can use the agent; on `voice` agents `grants`
2598
- * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`); on `workflow` agents agent-level
2599
- * access is not used — invocation access is configured per reference on the calling agent (see AgentCallCapability.access).
3296
+ * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`). When an agent is
3297
+ * invoked as a background task its agent-level access is not used — invocation access is configured per reference on the calling agent
3298
+ * (see AgentCallCapability.access).
2600
3299
  * @public
2601
3300
  */
2602
3301
  access?: AgentAccess | undefined;
@@ -2710,25 +3409,44 @@ export interface AgentDefinitionSnapshot {
2710
3409
  /**
2711
3410
  * Who is allowed to use the agent. There is no view/edit dimension — access solely grants the ability to use the agent.
2712
3411
  * Per channel: on `chat` and `assistant` agents `grants` govern which colleagues can use the agent; on `voice` agents `grants`
2713
- * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`); on `workflow` agents agent-level
2714
- * access is not used — invocation access is configured per reference on the calling agent (see AgentCallCapability.access).
3412
+ * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`). When an agent is
3413
+ * invoked as a background task its agent-level access is not used — invocation access is configured per reference on the calling agent
3414
+ * (see AgentCallCapability.access).
2715
3415
  * @public
2716
3416
  */
2717
3417
  access?: AgentAccess | undefined;
2718
3418
  }
2719
3419
  /**
3420
+ * What a client needs to render an agent, and nothing more: AgentInfo is the end-user view of an agent,
3421
+ * served by the channel runtimes (e.g. GetAgent / GetSettings on wilma-assistant) to callers who must not
3422
+ * see instructions, capabilities or access rules. Everything here is safe to show to whoever can use the agent.
2720
3423
  * @public
2721
3424
  */
2722
3425
  export interface AgentInfo {
2723
3426
  id: string;
2724
3427
  name: string;
3428
+ /**
3429
+ * Avatar URL, from the agent definition.
3430
+ * @public
3431
+ */
3432
+ picture?: string | undefined;
2725
3433
  category?: string | undefined;
2726
3434
  status: AgentStatus;
2727
3435
  /**
2728
- * The channels this agent serves (voice / chat / assistant / workflow).
3436
+ * The channels this agent serves (voice / chat / assistant).
2729
3437
  * @public
2730
3438
  */
2731
3439
  channels: ChannelType[];
3440
+ /**
3441
+ * Whether the agent's voice channel has at least one configured speech language. A dialplan form partitions its application lists on this, so the answer has to travel with the list rather than cost one lookup per entry. Absent is read as false.
3442
+ * @public
3443
+ */
3444
+ speechConfigured?: boolean | undefined;
3445
+ /**
3446
+ * How the agent presents itself in the assistant UI: welcome message, quick commands and composer placeholder, copied from `channels.assistant.ui`. Absent when the agent does not serve the assistant channel, or when its author configured no presentation and the client should use its own defaults.
3447
+ * @public
3448
+ */
3449
+ assistant?: AssistantUiSettings | undefined;
2732
3450
  /**
2733
3451
  * Published agent version number. Monotonic within an agent's version history, starting at 1.
2734
3452
  * @public
@@ -2897,8 +3615,9 @@ export interface CreateAgentInput {
2897
3615
  /**
2898
3616
  * Who is allowed to use the agent. There is no view/edit dimension — access solely grants the ability to use the agent.
2899
3617
  * Per channel: on `chat` and `assistant` agents `grants` govern which colleagues can use the agent; on `voice` agents `grants`
2900
- * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`); on `workflow` agents agent-level
2901
- * access is not used — invocation access is configured per reference on the calling agent (see AgentCallCapability.access).
3618
+ * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`). When an agent is
3619
+ * invoked as a background task its agent-level access is not used — invocation access is configured per reference on the calling agent
3620
+ * (see AgentCallCapability.access).
2902
3621
  * @public
2903
3622
  */
2904
3623
  access?: AgentAccess | undefined;
@@ -2963,6 +3682,25 @@ export interface DeleteAgentApiKeyInput {
2963
3682
  */
2964
3683
  export interface DeleteAgentApiKeyOutput {
2965
3684
  }
3685
+ /**
3686
+ * @public
3687
+ */
3688
+ export interface DeletePronunciationDictionaryInput {
3689
+ company?: string | undefined;
3690
+ /**
3691
+ * BCP-47 language tag, optionally with a region subtag: 'en', 'en-US', 'pt-BR'. Deliberately a
3692
+ * constrained string rather than an enum: the offerable set is a property of the selected
3693
+ * transcription vendor and changes with it, so an enumeration here would cap the set at whatever
3694
+ * was known when the model was released.
3695
+ * @public
3696
+ */
3697
+ code: string;
3698
+ }
3699
+ /**
3700
+ * @public
3701
+ */
3702
+ export interface DeletePronunciationDictionaryOutput {
3703
+ }
2966
3704
  /**
2967
3705
  * @public
2968
3706
  */
@@ -3034,7 +3772,7 @@ export interface ListAgentApiKeysOutput {
3034
3772
  export interface ListAgentsInput {
3035
3773
  company?: string | undefined;
3036
3774
  /**
3037
- * Only agents that have this channel enabled (voice / chat / assistant / workflow).
3775
+ * Only agents that have this channel enabled (voice / chat / assistant).
3038
3776
  * @public
3039
3777
  */
3040
3778
  channel?: ChannelType | undefined;
@@ -3068,7 +3806,7 @@ export interface ListAgentsOutput {
3068
3806
  export interface ListAgentsNamesInput {
3069
3807
  company?: string | undefined;
3070
3808
  /**
3071
- * A channel an agent can serve (see AgentChannels for enablement). Also the runtime channel recorded by the channel runtimes / wilma-traces.
3809
+ * A channel an agent can serve (see AgentChannels for enablement). Also the runtime channel recorded by the channel runtimes / wilma-traces. A background task has no delivery surface and therefore no channel.
3072
3810
  * @public
3073
3811
  */
3074
3812
  channel?: ChannelType | undefined;
@@ -3103,6 +3841,72 @@ export interface ListAgentVersionsOutput {
3103
3841
  */
3104
3842
  nextCursor?: string | undefined;
3105
3843
  }
3844
+ /**
3845
+ * @public
3846
+ */
3847
+ export interface ListPronunciationDictionariesInput {
3848
+ company?: string | undefined;
3849
+ /**
3850
+ * Page size. ABSENT MEANS EVERY DICTIONARY — see the operation's documentation.
3851
+ * @public
3852
+ */
3853
+ limit?: number | undefined;
3854
+ /**
3855
+ * Opaque cursor returned by a previous page; pass it back to fetch the next page.
3856
+ * @public
3857
+ */
3858
+ cursor?: string | undefined;
3859
+ }
3860
+ /**
3861
+ * Every pronunciation rule a company has written for one language.
3862
+ * @public
3863
+ */
3864
+ export interface PronunciationDictionary {
3865
+ id: string;
3866
+ /**
3867
+ * BCP-47 code with locale, e.g. 'en-US'. Unique per company — this is the link.
3868
+ * @public
3869
+ */
3870
+ code: string;
3871
+ /**
3872
+ * Pronunciation rules for one language.
3873
+ *
3874
+ * BOUNDED, and the bound is not decoration. Both runtimes compile every rule of a language into
3875
+ * a SINGLE alternating regular expression, so the cost is the pattern's total size: measured
3876
+ * against the real escaping and matching logic, 1,000 rules cost ~0.9 s of CPU per synthesized
3877
+ * sentence, 5,000 cost ~4.9 s, and around 10,000 `new RegExp` throws V8's pattern-size error.
3878
+ *
3879
+ * 200 is far above any real use — a product glossary is a handful of names — and far below where
3880
+ * either cost begins. Found by a security review.
3881
+ * NO LOWER BOUND on `phrase` or `as`, deliberately. Both consoles add an EMPTY rule row the
3882
+ * moment someone clicks 'Add pronunciation', so a `min: 1` would make saving an agent with a
3883
+ * half-typed row fail entirely — and the runtime already ignores a rule with no phrase. Dropping
3884
+ * blank rows belongs in the consoles' save filters, not in a refusal here.
3885
+ * @public
3886
+ */
3887
+ rules: VoicePronunciation[];
3888
+ /**
3889
+ * ISO-8601 timestamp with millisecond precision, e.g. '2026-07-10T14:12:30.123Z'.
3890
+ * @public
3891
+ */
3892
+ updatedAt: string;
3893
+ /**
3894
+ * Who performed an action: an interactive user, an API key or an internal service.
3895
+ * @public
3896
+ */
3897
+ updatedBy: Actor;
3898
+ }
3899
+ /**
3900
+ * @public
3901
+ */
3902
+ export interface ListPronunciationDictionariesOutput {
3903
+ dictionaries: PronunciationDictionary[];
3904
+ /**
3905
+ * Absent on the last page, and always absent when `limit` was not sent — there is then nothing left to continue from.
3906
+ * @public
3907
+ */
3908
+ nextCursor?: string | undefined;
3909
+ }
3106
3910
  /**
3107
3911
  * @public
3108
3912
  */
@@ -3153,6 +3957,65 @@ export interface PutAgentDeploymentOutput {
3153
3957
  */
3154
3958
  deployment: AgentDeploymentRoute[];
3155
3959
  }
3960
+ /**
3961
+ * @public
3962
+ */
3963
+ export interface PutPronunciationDictionaryInput {
3964
+ company?: string | undefined;
3965
+ /**
3966
+ * BCP-47 language tag, optionally with a region subtag: 'en', 'en-US', 'pt-BR'. Deliberately a
3967
+ * constrained string rather than an enum: the offerable set is a property of the selected
3968
+ * transcription vendor and changes with it, so an enumeration here would cap the set at whatever
3969
+ * was known when the model was released.
3970
+ * @public
3971
+ */
3972
+ code: string;
3973
+ /**
3974
+ * Pronunciation rules for one language.
3975
+ *
3976
+ * BOUNDED, and the bound is not decoration. Both runtimes compile every rule of a language into
3977
+ * a SINGLE alternating regular expression, so the cost is the pattern's total size: measured
3978
+ * against the real escaping and matching logic, 1,000 rules cost ~0.9 s of CPU per synthesized
3979
+ * sentence, 5,000 cost ~4.9 s, and around 10,000 `new RegExp` throws V8's pattern-size error.
3980
+ *
3981
+ * 200 is far above any real use — a product glossary is a handful of names — and far below where
3982
+ * either cost begins. Found by a security review.
3983
+ * NO LOWER BOUND on `phrase` or `as`, deliberately. Both consoles add an EMPTY rule row the
3984
+ * moment someone clicks 'Add pronunciation', so a `min: 1` would make saving an agent with a
3985
+ * half-typed row fail entirely — and the runtime already ignores a rule with no phrase. Dropping
3986
+ * blank rows belongs in the consoles' save filters, not in a refusal here.
3987
+ * @public
3988
+ */
3989
+ rules: VoicePronunciation[];
3990
+ /**
3991
+ * Precondition: the `updatedAt` of the dictionary this edit was made against, echoed back
3992
+ * from the PronunciationDictionary the caller read. When it does not match the stored value
3993
+ * the write is refused with RevisionConflictException and the caller re-reads rather than
3994
+ * overwriting an edit it never saw.
3995
+ *
3996
+ * A TIMESTAMP RATHER THAN AN INTEGER REVISION, unlike UpdateAgent: the dictionary already
3997
+ * carries `updatedAt` on every read, so the round trip exists today and no stored record
3998
+ * needs a new field to take part. The meaning is UpdateAgent's meaning — 'based on the
3999
+ * version I read' — and the error is the same one.
4000
+ *
4001
+ * OPTIONAL, and ABSENCE MEANS LAST-WRITE-WINS: this operation shipped without a precondition,
4002
+ * so making it mandatory would break every existing caller for a guarantee they can opt into.
4003
+ * RevisionConflictException carries no `currentRevision` here — this resource is versioned by
4004
+ * its timestamp, and the current one is on the dictionary a re-read returns.
4005
+ * @public
4006
+ */
4007
+ expectedUpdatedAt?: string | undefined;
4008
+ }
4009
+ /**
4010
+ * @public
4011
+ */
4012
+ export interface PutPronunciationDictionaryOutput {
4013
+ /**
4014
+ * Every pronunciation rule a company has written for one language.
4015
+ * @public
4016
+ */
4017
+ dictionary: PronunciationDictionary;
4018
+ }
3156
4019
  /**
3157
4020
  * @public
3158
4021
  */
@@ -3232,8 +4095,9 @@ export interface UpdateAgentInput {
3232
4095
  /**
3233
4096
  * Who is allowed to use the agent. There is no view/edit dimension — access solely grants the ability to use the agent.
3234
4097
  * Per channel: on `chat` and `assistant` agents `grants` govern which colleagues can use the agent; on `voice` agents `grants`
3235
- * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`); on `workflow` agents agent-level
3236
- * access is not used — invocation access is configured per reference on the calling agent (see AgentCallCapability.access).
4098
+ * are ignored (inbound calls are routed by the PBX dialplan, and data ACL is the agent-level `settings.pbxGroupId`). When an agent is
4099
+ * invoked as a background task its agent-level access is not used — invocation access is configured per reference on the calling agent
4100
+ * (see AgentCallCapability.access).
3237
4101
  * @public
3238
4102
  */
3239
4103
  access?: AgentAccess | undefined;