@roarkanalytics/sdk 3.11.0 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/client.d.mts +7 -4
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +7 -4
  5. package/client.d.ts.map +1 -1
  6. package/client.js +3 -0
  7. package/client.js.map +1 -1
  8. package/client.mjs +3 -0
  9. package/client.mjs.map +1 -1
  10. package/package.json +1 -1
  11. package/resources/agent-prompt.d.mts +129 -0
  12. package/resources/agent-prompt.d.mts.map +1 -0
  13. package/resources/agent-prompt.d.ts +129 -0
  14. package/resources/agent-prompt.d.ts.map +1 -0
  15. package/resources/agent-prompt.js +58 -0
  16. package/resources/agent-prompt.js.map +1 -0
  17. package/resources/agent-prompt.mjs +54 -0
  18. package/resources/agent-prompt.mjs.map +1 -0
  19. package/resources/call.d.mts +1 -1
  20. package/resources/call.d.mts.map +1 -1
  21. package/resources/call.d.ts +1 -1
  22. package/resources/call.d.ts.map +1 -1
  23. package/resources/config.d.mts +166 -18
  24. package/resources/config.d.mts.map +1 -1
  25. package/resources/config.d.ts +166 -18
  26. package/resources/config.d.ts.map +1 -1
  27. package/resources/customer-flow-edge-case.d.mts +72 -9
  28. package/resources/customer-flow-edge-case.d.mts.map +1 -1
  29. package/resources/customer-flow-edge-case.d.ts +72 -9
  30. package/resources/customer-flow-edge-case.d.ts.map +1 -1
  31. package/resources/customer-flow.d.mts +2005 -78
  32. package/resources/customer-flow.d.mts.map +1 -1
  33. package/resources/customer-flow.d.ts +2005 -78
  34. package/resources/customer-flow.d.ts.map +1 -1
  35. package/resources/customer-flow.js +18 -0
  36. package/resources/customer-flow.js.map +1 -1
  37. package/resources/customer-flow.mjs +18 -0
  38. package/resources/customer-flow.mjs.map +1 -1
  39. package/resources/index.d.mts +3 -2
  40. package/resources/index.d.mts.map +1 -1
  41. package/resources/index.d.ts +3 -2
  42. package/resources/index.d.ts.map +1 -1
  43. package/resources/index.js +3 -1
  44. package/resources/index.js.map +1 -1
  45. package/resources/index.mjs +1 -0
  46. package/resources/index.mjs.map +1 -1
  47. package/resources/simulation-environment.d.mts +163 -1
  48. package/resources/simulation-environment.d.mts.map +1 -1
  49. package/resources/simulation-environment.d.ts +163 -1
  50. package/resources/simulation-environment.d.ts.map +1 -1
  51. package/resources/simulation-environment.js +51 -0
  52. package/resources/simulation-environment.js.map +1 -1
  53. package/resources/simulation-environment.mjs +51 -0
  54. package/resources/simulation-environment.mjs.map +1 -1
  55. package/resources/simulation-job.d.mts +62 -2
  56. package/resources/simulation-job.d.mts.map +1 -1
  57. package/resources/simulation-job.d.ts +62 -2
  58. package/resources/simulation-job.d.ts.map +1 -1
  59. package/resources/simulation-persona.d.mts +42 -6
  60. package/resources/simulation-persona.d.mts.map +1 -1
  61. package/resources/simulation-persona.d.ts +42 -6
  62. package/resources/simulation-persona.d.ts.map +1 -1
  63. package/resources/simulation-run-plan-job.d.mts +31 -1
  64. package/resources/simulation-run-plan-job.d.mts.map +1 -1
  65. package/resources/simulation-run-plan-job.d.ts +31 -1
  66. package/resources/simulation-run-plan-job.d.ts.map +1 -1
  67. package/resources/simulation-run-plan.d.mts +64 -0
  68. package/resources/simulation-run-plan.d.mts.map +1 -1
  69. package/resources/simulation-run-plan.d.ts +64 -0
  70. package/resources/simulation-run-plan.d.ts.map +1 -1
  71. package/resources/simulation-template.d.mts +10 -0
  72. package/resources/simulation-template.d.mts.map +1 -1
  73. package/resources/simulation-template.d.ts +10 -0
  74. package/resources/simulation-template.d.ts.map +1 -1
  75. package/resources/simulation.d.mts +17 -1
  76. package/resources/simulation.d.mts.map +1 -1
  77. package/resources/simulation.d.ts +17 -1
  78. package/resources/simulation.d.ts.map +1 -1
  79. package/src/client.ts +33 -0
  80. package/src/resources/agent-prompt.ts +183 -0
  81. package/src/resources/call.ts +1 -1
  82. package/src/resources/config.ts +310 -20
  83. package/src/resources/customer-flow-edge-case.ts +180 -9
  84. package/src/resources/customer-flow.ts +3091 -63
  85. package/src/resources/index.ts +15 -0
  86. package/src/resources/simulation-environment.ts +244 -0
  87. package/src/resources/simulation-job.ts +92 -2
  88. package/src/resources/simulation-persona.ts +108 -6
  89. package/src/resources/simulation-run-plan-job.ts +39 -1
  90. package/src/resources/simulation-run-plan.ts +74 -0
  91. package/src/resources/simulation-template.ts +11 -0
  92. package/src/resources/simulation.ts +18 -1
  93. package/src/version.ts +1 -1
  94. package/version.d.mts +1 -1
  95. package/version.d.ts +1 -1
  96. package/version.js +1 -1
  97. package/version.mjs +1 -1
@@ -57,6 +57,22 @@ export declare class CustomerFlow extends APIResource {
57
57
  * ```
58
58
  */
59
59
  delete(flowID: string, options?: RequestOptions): APIPromise<CustomerFlowDeleteResponse>;
60
+ /**
61
+ * Deep-copies a flow into a new project-owned flow. The copy carries the source's
62
+ * description, branching mode, linked agents, flow-level expectations and
63
+ * flow-owned metrics. A scripted flow copies its whole step graph; an improv flow
64
+ * copies its variants (personas, briefs, expectations). Duplicating a
65
+ * Roark-managed flow is how you customise it. Voicemail flows are Roark-managed
66
+ * and cannot be duplicated.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * const response = await client.customerFlow.duplicate(
71
+ * '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
72
+ * );
73
+ * ```
74
+ */
75
+ duplicate(flowID: string, body?: CustomerFlowDuplicateParams | null | undefined, options?: RequestOptions): APIPromise<CustomerFlowDuplicateResponse>;
60
76
  /**
61
77
  * Returns a customer flow with its happy path, edge cases, expectations and linked
62
78
  * agents. Scripted flows also carry their step graph.
@@ -125,23 +141,44 @@ export declare class CustomerFlow extends APIResource {
125
141
  * step is a root wired straight from the start of the flow, so a merge target
126
142
  * parked there would also be reachable directly.
127
143
  *
144
+ * A `CUSTOMER_TURN` describes what the simulated customer says and the persona
145
+ * phrases it; a `CUSTOMER_VERBATIM_TURN` is said word for word, and one placed as
146
+ * a top-level step opens the call the moment it connects, before the agent speaks.
147
+ * `CUSTOMER_FIRST_MESSAGE` is the retired name for that opening case: still
148
+ * accepted, stored and returned as `CUSTOMER_VERBATIM_TURN`.
149
+ *
128
150
  * The two DTMF types are mirror images and both require `dtmfDigits`.
129
151
  * `CUSTOMER_DTMF` is keys the simulated caller presses while navigating your
130
152
  * agent. `AGENT_DTMF` is keys your agent under test is expected to press while
131
153
  * navigating a menu the simulation is playing, so its digits are an assertion the
132
154
  * run is graded against rather than an instruction, and it counts as an agent turn
133
155
  * for role alternation.
156
+ *
157
+ * In a STRICT flow an `AGENT_TURN` may carry its own `offScriptPolicy`, which
158
+ * replaces the flow-level one at that step. Omit it (or send null) to follow the
159
+ * flow's policy. Use it where one missed step makes the rest of the call
160
+ * meaningless: an authentication menu, say, with `then: HANG_UP_INVALIDATE`.
134
161
  */
135
- export type FlowStep = FlowStep.UnionMember0 | FlowStep.UnionMember1 | FlowStep.UnionMember2 | FlowStep.UnionMember3 | FlowStep.UnionMember4 | FlowStep.UnionMember5 | FlowStep.UnionMember6 | FlowStep.UnionMember7;
162
+ export type FlowStep = FlowStep.UnionMember0 | FlowStep.UnionMember1 | FlowStep.UnionMember2 | FlowStep.UnionMember3 | FlowStep.UnionMember4 | FlowStep.UnionMember5 | FlowStep.UnionMember6 | FlowStep.UnionMember7 | FlowStep.UnionMember8;
136
163
  export declare namespace FlowStep {
137
164
  interface UnionMember0 {
138
165
  type: 'AGENT_TURN';
139
166
  content?: string | null;
140
167
  mergeIntoNodeIds?: Array<string>;
141
168
  nodeId?: string;
169
+ offScriptPolicy?: UnionMember0.OffScriptPolicy | null;
142
170
  ref?: string;
143
171
  steps?: Array<CustomerFlowAPI.FlowStep>;
144
172
  }
173
+ namespace UnionMember0 {
174
+ interface OffScriptPolicy {
175
+ maxAttempts: number;
176
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
177
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
178
+ sayLine?: string | null;
179
+ waitSeconds?: number | null;
180
+ }
181
+ }
145
182
  interface UnionMember1 {
146
183
  type: 'CUSTOMER_TURN';
147
184
  content?: string | null;
@@ -159,6 +196,14 @@ export declare namespace FlowStep {
159
196
  steps?: Array<CustomerFlowAPI.FlowStep>;
160
197
  }
161
198
  interface UnionMember3 {
199
+ type: 'CUSTOMER_VERBATIM_TURN';
200
+ content?: string | null;
201
+ mergeIntoNodeIds?: Array<string>;
202
+ nodeId?: string;
203
+ ref?: string;
204
+ steps?: Array<CustomerFlowAPI.FlowStep>;
205
+ }
206
+ interface UnionMember4 {
162
207
  type: 'CUSTOMER_SILENCE';
163
208
  mergeIntoNodeIds?: Array<string>;
164
209
  nodeId?: string;
@@ -166,7 +211,7 @@ export declare namespace FlowStep {
166
211
  silenceDurationSeconds?: number | null;
167
212
  steps?: Array<CustomerFlowAPI.FlowStep>;
168
213
  }
169
- interface UnionMember4 {
214
+ interface UnionMember5 {
170
215
  type: 'CUSTOMER_DTMF';
171
216
  dtmfDigits?: string | null;
172
217
  mergeIntoNodeIds?: Array<string>;
@@ -174,7 +219,7 @@ export declare namespace FlowStep {
174
219
  ref?: string;
175
220
  steps?: Array<CustomerFlowAPI.FlowStep>;
176
221
  }
177
- interface UnionMember5 {
222
+ interface UnionMember6 {
178
223
  type: 'AGENT_DTMF';
179
224
  dtmfDigits?: string | null;
180
225
  mergeIntoNodeIds?: Array<string>;
@@ -182,14 +227,14 @@ export declare namespace FlowStep {
182
227
  ref?: string;
183
228
  steps?: Array<CustomerFlowAPI.FlowStep>;
184
229
  }
185
- interface UnionMember6 {
230
+ interface UnionMember7 {
186
231
  type: 'VOICEMAIL';
187
232
  mergeIntoNodeIds?: Array<string>;
188
233
  nodeId?: string;
189
234
  ref?: string;
190
235
  steps?: Array<CustomerFlowAPI.FlowStep>;
191
236
  }
192
- interface UnionMember7 {
237
+ interface UnionMember8 {
193
238
  type: 'SCENARIO_LINK';
194
239
  linkedCustomerFlowId?: string | null;
195
240
  linkedCustomerFlowVariantId?: string | null;
@@ -199,13 +244,1434 @@ export declare namespace FlowStep {
199
244
  steps?: Array<CustomerFlowAPI.FlowStep>;
200
245
  }
201
246
  }
202
- export interface CustomerFlowCreateResponse {
247
+ export interface CustomerFlowCreateResponse {
248
+ /**
249
+ * The conversation a simulated customer has with the agent under test.
250
+ */
251
+ data: CustomerFlowCreateResponse.ScriptedCustomerFlow | CustomerFlowCreateResponse.ImprovCustomerFlow | CustomerFlowCreateResponse.VoicemailCustomerFlow;
252
+ }
253
+ export declare namespace CustomerFlowCreateResponse {
254
+ /**
255
+ * A flow whose conversation is written out as a graph of turns.
256
+ */
257
+ interface ScriptedCustomerFlow {
258
+ id: string;
259
+ agentExpectations: Array<ScriptedCustomerFlow.AgentExpectation>;
260
+ /**
261
+ * The agents this flow is run against.
262
+ */
263
+ agents: Array<ScriptedCustomerFlow.Agent>;
264
+ /**
265
+ * How a run walks the graph. DETERMINISTIC ("Simulate every path" in the app)
266
+ * places one call per variant, each following its path exactly whatever the agent
267
+ * says. ADAPTIVE ("Adapt to your agent") collapses the paths into one call PER
268
+ * PERSONA, on which the simulated customer picks a branch from what the agent
269
+ * actually said. Both modes speak the exact authored lines, and neither changes
270
+ * how metrics or expectations grade.
271
+ */
272
+ branchingMode: 'DETERMINISTIC' | 'ADAPTIVE';
273
+ /**
274
+ * Creation timestamp in ISO 8601 format
275
+ */
276
+ createdAt: string;
277
+ /**
278
+ * Every other way of running this flow.
279
+ */
280
+ edgeCases: Array<ScriptedCustomerFlow.EdgeCase>;
281
+ /**
282
+ * One path through a scripted flow. The path engine owns which paths exist, so
283
+ * editing the graph is what creates and removes these.
284
+ */
285
+ happyPath: ScriptedCustomerFlow.HappyPath | null;
286
+ /**
287
+ * STRICT only. What the simulated customer does when your agent does not say the
288
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
289
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
290
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
291
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
292
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
293
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
294
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
295
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
296
+ * AGENT_TURN step can carry its own.
297
+ */
298
+ offScriptPolicy: ScriptedCustomerFlow.OffScriptPolicy | null;
299
+ /**
300
+ * How closely a run follows the script. LOOSE (default) hands the whole script to
301
+ * the simulated customer as one prompt; it keeps the call moving whatever your
302
+ * agent says. STRICT runs the script as a state machine on the agent service: at
303
+ * every agent step the simulated customer waits, silent, until your agent has said
304
+ * the expected line, and only then moves on. Scripted flows only; STRICT needs the
305
+ * agent-service transport and is not available on realtime models.
306
+ */
307
+ scriptAdherence: 'LOOSE' | 'STRICT';
308
+ source: 'SYSTEM' | 'CUSTOM';
309
+ title: string;
310
+ type: 'SCRIPTED';
311
+ /**
312
+ * Last update timestamp in ISO 8601 format
313
+ */
314
+ updatedAt: string;
315
+ description?: string | null;
316
+ /**
317
+ * The conversation, as a graph of steps. Present on a single flow; omitted from
318
+ * the list, where reading it would mean walking the project step graph once per
319
+ * row.
320
+ */
321
+ graph?: Array<CustomerFlowAPI.FlowStep>;
322
+ }
323
+ namespace ScriptedCustomerFlow {
324
+ /**
325
+ * One thing the agent under test is graded against.
326
+ */
327
+ interface AgentExpectation {
328
+ id: string;
329
+ /**
330
+ * What the agent under test is graded against.
331
+ */
332
+ prompt: string;
333
+ }
334
+ interface Agent {
335
+ /**
336
+ * Unique identifier of the agent
337
+ */
338
+ id: string;
339
+ /**
340
+ * Creation timestamp in ISO 8601 format
341
+ */
342
+ createdAt: string;
343
+ /**
344
+ * Custom identifier for the agent
345
+ */
346
+ customId: string | null;
347
+ /**
348
+ * Description of the agent
349
+ */
350
+ description: string | null;
351
+ /**
352
+ * Name of the agent
353
+ */
354
+ name: string;
355
+ /**
356
+ * Last update timestamp in ISO 8601 format
357
+ */
358
+ updatedAt: string;
359
+ }
360
+ /**
361
+ * One path through a scripted flow. The path engine owns which paths exist, so
362
+ * editing the graph is what creates and removes these.
363
+ */
364
+ interface EdgeCase {
365
+ id: string;
366
+ /**
367
+ * Graded on top of the flow's own expectations, for this variant only.
368
+ */
369
+ additionalExpectations: Array<EdgeCase.AdditionalExpectation>;
370
+ /**
371
+ * Creation timestamp in ISO 8601 format
372
+ */
373
+ createdAt: string;
374
+ /**
375
+ * A simulation environment: the ambient conditions a customer flow variant runs
376
+ * under. The list includes both your own and the ones Roark curates for every
377
+ * project.
378
+ */
379
+ environment: EdgeCase.Environment | null;
380
+ isGenerated: boolean;
381
+ /**
382
+ * The persona this runs as instead of the happy path's. Null means it inherits.
383
+ */
384
+ personaOverride: EdgeCase.PersonaOverride | null;
385
+ precededByCustomerFlowId: string | null;
386
+ precededByCustomerFlowVariantId: string | null;
387
+ /**
388
+ * The one path through the graph this variant runs, in order. Linear by
389
+ * construction, so these steps never nest.
390
+ */
391
+ steps: Array<CustomerFlowAPI.FlowStep>;
392
+ title: string;
393
+ type: 'SCRIPTED';
394
+ /**
395
+ * Last update timestamp in ISO 8601 format
396
+ */
397
+ updatedAt: string;
398
+ systemKey?: string | null;
399
+ }
400
+ namespace EdgeCase {
401
+ /**
402
+ * One thing the agent under test is graded against.
403
+ */
404
+ interface AdditionalExpectation {
405
+ id: string;
406
+ /**
407
+ * What the agent under test is graded against.
408
+ */
409
+ prompt: string;
410
+ }
411
+ /**
412
+ * A simulation environment: the ambient conditions a customer flow variant runs
413
+ * under. The list includes both your own and the ones Roark curates for every
414
+ * project.
415
+ */
416
+ interface Environment {
417
+ id: string;
418
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
419
+ backgroundNoiseVolume: number;
420
+ /**
421
+ * Creation timestamp in ISO 8601 format
422
+ */
423
+ createdAt: string;
424
+ name: string;
425
+ /**
426
+ * Last update timestamp in ISO 8601 format
427
+ */
428
+ updatedAt: string;
429
+ description?: string | null;
430
+ }
431
+ /**
432
+ * The persona this runs as instead of the happy path's. Null means it inherits.
433
+ */
434
+ interface PersonaOverride {
435
+ /**
436
+ * Unique identifier of the persona
437
+ */
438
+ id: string;
439
+ /**
440
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
441
+ * optional variants
442
+ */
443
+ accent: 'US' | 'US_X_SOUTH' | 'GB' | 'ES' | 'DE' | 'IN' | 'FR' | 'NL' | 'SA' | 'GR' | 'AU' | 'IT' | 'ID' | 'TH' | 'JP' | 'NZ' | 'PH' | 'SG' | 'MY' | 'HK' | 'TR' | 'PT' | 'IL';
444
+ /**
445
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
446
+ * voice for are accepted; defaults to ADULT, which every accent supports.
447
+ */
448
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
449
+ /**
450
+ * Background noise setting
451
+ */
452
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
453
+ /**
454
+ * Base emotional state of the persona
455
+ */
456
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
457
+ /**
458
+ * How the persona confirms information
459
+ */
460
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
461
+ /**
462
+ * Creation timestamp
463
+ */
464
+ createdAt: string;
465
+ /**
466
+ * Gender of the persona
467
+ */
468
+ gender: 'MALE' | 'FEMALE';
469
+ /**
470
+ * Whether the persona uses filler words like "um" and "uh"
471
+ */
472
+ hasDisfluencies: boolean;
473
+ /**
474
+ * Maximum number of idle messages the persona will send before giving up
475
+ */
476
+ idleMessageMaxSpokenCount: number;
477
+ /**
478
+ * Whether the idle message counter resets when the agent speaks
479
+ */
480
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
481
+ /**
482
+ * Messages the persona will say when the agent goes silent during a call. null =
483
+ * "Automatic": language-appropriate defaults are used at call time.
484
+ */
485
+ idleMessages: Array<string> | null;
486
+ /**
487
+ * Seconds of silence before the persona sends an idle message
488
+ */
489
+ idleTimeoutSeconds: number;
490
+ /**
491
+ * How clearly the persona expresses their intentions
492
+ */
493
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
494
+ /**
495
+ * Primary language ISO 639-1 code for the persona
496
+ */
497
+ language: 'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE';
498
+ /**
499
+ * How reliable the persona's memory is
500
+ */
501
+ memoryReliability: 'HIGH' | 'LOW';
502
+ /**
503
+ * The name the agent will identify as during conversations
504
+ */
505
+ name: string;
506
+ /**
507
+ * Additional custom properties about the persona
508
+ */
509
+ properties: {
510
+ [key: string]: unknown;
511
+ };
512
+ /**
513
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
514
+ * NORMAL, RELAXED)
515
+ */
516
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK';
517
+ /**
518
+ * Speech clarity of the persona
519
+ */
520
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
521
+ /**
522
+ * Speech pace of the persona
523
+ */
524
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
525
+ /**
526
+ * Languages the persona can understand. Multilingual combinations are limited by
527
+ * multilingual speech recognition support.
528
+ */
529
+ understoodLanguages: Array<'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE'>;
530
+ /**
531
+ * Last update timestamp
532
+ */
533
+ updatedAt: string;
534
+ /**
535
+ * Background story and behavioral patterns for the persona
536
+ */
537
+ backstoryPrompt?: string | null;
538
+ /**
539
+ * Human-readable description of the persona
540
+ */
541
+ description?: string | null;
542
+ /**
543
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
544
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
545
+ * or set null to display the name itself.
546
+ */
547
+ displayName?: string | null;
548
+ /**
549
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
550
+ */
551
+ secondaryLanguage?: 'EN' | null;
552
+ }
553
+ }
554
+ /**
555
+ * One path through a scripted flow. The path engine owns which paths exist, so
556
+ * editing the graph is what creates and removes these.
557
+ */
558
+ interface HappyPath {
559
+ id: string;
560
+ /**
561
+ * Graded on top of the flow's own expectations, for this variant only.
562
+ */
563
+ additionalExpectations: Array<HappyPath.AdditionalExpectation>;
564
+ /**
565
+ * Creation timestamp in ISO 8601 format
566
+ */
567
+ createdAt: string;
568
+ /**
569
+ * A simulation environment: the ambient conditions a customer flow variant runs
570
+ * under. The list includes both your own and the ones Roark curates for every
571
+ * project.
572
+ */
573
+ environment: HappyPath.Environment | null;
574
+ isGenerated: boolean;
575
+ /**
576
+ * The persona this runs as instead of the happy path's. Null means it inherits.
577
+ */
578
+ personaOverride: HappyPath.PersonaOverride | null;
579
+ precededByCustomerFlowId: string | null;
580
+ precededByCustomerFlowVariantId: string | null;
581
+ /**
582
+ * The one path through the graph this variant runs, in order. Linear by
583
+ * construction, so these steps never nest.
584
+ */
585
+ steps: Array<CustomerFlowAPI.FlowStep>;
586
+ title: string;
587
+ type: 'SCRIPTED';
588
+ /**
589
+ * Last update timestamp in ISO 8601 format
590
+ */
591
+ updatedAt: string;
592
+ systemKey?: string | null;
593
+ }
594
+ namespace HappyPath {
595
+ /**
596
+ * One thing the agent under test is graded against.
597
+ */
598
+ interface AdditionalExpectation {
599
+ id: string;
600
+ /**
601
+ * What the agent under test is graded against.
602
+ */
603
+ prompt: string;
604
+ }
605
+ /**
606
+ * A simulation environment: the ambient conditions a customer flow variant runs
607
+ * under. The list includes both your own and the ones Roark curates for every
608
+ * project.
609
+ */
610
+ interface Environment {
611
+ id: string;
612
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
613
+ backgroundNoiseVolume: number;
614
+ /**
615
+ * Creation timestamp in ISO 8601 format
616
+ */
617
+ createdAt: string;
618
+ name: string;
619
+ /**
620
+ * Last update timestamp in ISO 8601 format
621
+ */
622
+ updatedAt: string;
623
+ description?: string | null;
624
+ }
625
+ /**
626
+ * The persona this runs as instead of the happy path's. Null means it inherits.
627
+ */
628
+ interface PersonaOverride {
629
+ /**
630
+ * Unique identifier of the persona
631
+ */
632
+ id: string;
633
+ /**
634
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
635
+ * optional variants
636
+ */
637
+ accent: 'US' | 'US_X_SOUTH' | 'GB' | 'ES' | 'DE' | 'IN' | 'FR' | 'NL' | 'SA' | 'GR' | 'AU' | 'IT' | 'ID' | 'TH' | 'JP' | 'NZ' | 'PH' | 'SG' | 'MY' | 'HK' | 'TR' | 'PT' | 'IL';
638
+ /**
639
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
640
+ * voice for are accepted; defaults to ADULT, which every accent supports.
641
+ */
642
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
643
+ /**
644
+ * Background noise setting
645
+ */
646
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
647
+ /**
648
+ * Base emotional state of the persona
649
+ */
650
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
651
+ /**
652
+ * How the persona confirms information
653
+ */
654
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
655
+ /**
656
+ * Creation timestamp
657
+ */
658
+ createdAt: string;
659
+ /**
660
+ * Gender of the persona
661
+ */
662
+ gender: 'MALE' | 'FEMALE';
663
+ /**
664
+ * Whether the persona uses filler words like "um" and "uh"
665
+ */
666
+ hasDisfluencies: boolean;
667
+ /**
668
+ * Maximum number of idle messages the persona will send before giving up
669
+ */
670
+ idleMessageMaxSpokenCount: number;
671
+ /**
672
+ * Whether the idle message counter resets when the agent speaks
673
+ */
674
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
675
+ /**
676
+ * Messages the persona will say when the agent goes silent during a call. null =
677
+ * "Automatic": language-appropriate defaults are used at call time.
678
+ */
679
+ idleMessages: Array<string> | null;
680
+ /**
681
+ * Seconds of silence before the persona sends an idle message
682
+ */
683
+ idleTimeoutSeconds: number;
684
+ /**
685
+ * How clearly the persona expresses their intentions
686
+ */
687
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
688
+ /**
689
+ * Primary language ISO 639-1 code for the persona
690
+ */
691
+ language: 'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE';
692
+ /**
693
+ * How reliable the persona's memory is
694
+ */
695
+ memoryReliability: 'HIGH' | 'LOW';
696
+ /**
697
+ * The name the agent will identify as during conversations
698
+ */
699
+ name: string;
700
+ /**
701
+ * Additional custom properties about the persona
702
+ */
703
+ properties: {
704
+ [key: string]: unknown;
705
+ };
706
+ /**
707
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
708
+ * NORMAL, RELAXED)
709
+ */
710
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK';
711
+ /**
712
+ * Speech clarity of the persona
713
+ */
714
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
715
+ /**
716
+ * Speech pace of the persona
717
+ */
718
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
719
+ /**
720
+ * Languages the persona can understand. Multilingual combinations are limited by
721
+ * multilingual speech recognition support.
722
+ */
723
+ understoodLanguages: Array<'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE'>;
724
+ /**
725
+ * Last update timestamp
726
+ */
727
+ updatedAt: string;
728
+ /**
729
+ * Background story and behavioral patterns for the persona
730
+ */
731
+ backstoryPrompt?: string | null;
732
+ /**
733
+ * Human-readable description of the persona
734
+ */
735
+ description?: string | null;
736
+ /**
737
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
738
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
739
+ * or set null to display the name itself.
740
+ */
741
+ displayName?: string | null;
742
+ /**
743
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
744
+ */
745
+ secondaryLanguage?: 'EN' | null;
746
+ }
747
+ }
748
+ /**
749
+ * STRICT only. What the simulated customer does when your agent does not say the
750
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
751
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
752
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
753
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
754
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
755
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
756
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
757
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
758
+ * AGENT_TURN step can carry its own.
759
+ */
760
+ interface OffScriptPolicy {
761
+ maxAttempts: number;
762
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
763
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
764
+ sayLine?: string | null;
765
+ waitSeconds?: number | null;
766
+ }
767
+ }
768
+ /**
769
+ * A flow whose conversation is not written out: each variant gives the simulated
770
+ * customer a brief and lets it improvise.
771
+ */
772
+ interface ImprovCustomerFlow {
773
+ id: string;
774
+ agentExpectations: Array<ImprovCustomerFlow.AgentExpectation>;
775
+ /**
776
+ * The agents this flow is run against.
777
+ */
778
+ agents: Array<ImprovCustomerFlow.Agent>;
779
+ /**
780
+ * Creation timestamp in ISO 8601 format
781
+ */
782
+ createdAt: string;
783
+ /**
784
+ * Every other way of running this flow.
785
+ */
786
+ edgeCases: Array<ImprovCustomerFlow.EdgeCase>;
787
+ /**
788
+ * One brief to run an improv flow with.
789
+ */
790
+ happyPath: ImprovCustomerFlow.HappyPath | null;
791
+ source: 'SYSTEM' | 'CUSTOM';
792
+ title: string;
793
+ type: 'IMPROV';
794
+ /**
795
+ * Last update timestamp in ISO 8601 format
796
+ */
797
+ updatedAt: string;
798
+ description?: string | null;
799
+ }
800
+ namespace ImprovCustomerFlow {
801
+ /**
802
+ * One thing the agent under test is graded against.
803
+ */
804
+ interface AgentExpectation {
805
+ id: string;
806
+ /**
807
+ * What the agent under test is graded against.
808
+ */
809
+ prompt: string;
810
+ }
811
+ interface Agent {
812
+ /**
813
+ * Unique identifier of the agent
814
+ */
815
+ id: string;
816
+ /**
817
+ * Creation timestamp in ISO 8601 format
818
+ */
819
+ createdAt: string;
820
+ /**
821
+ * Custom identifier for the agent
822
+ */
823
+ customId: string | null;
824
+ /**
825
+ * Description of the agent
826
+ */
827
+ description: string | null;
828
+ /**
829
+ * Name of the agent
830
+ */
831
+ name: string;
832
+ /**
833
+ * Last update timestamp in ISO 8601 format
834
+ */
835
+ updatedAt: string;
836
+ }
837
+ /**
838
+ * One brief to run an improv flow with.
839
+ */
840
+ interface EdgeCase {
841
+ id: string;
842
+ /**
843
+ * Graded on top of the flow's own expectations, for this variant only.
844
+ */
845
+ additionalExpectations: Array<EdgeCase.AdditionalExpectation>;
846
+ /**
847
+ * Creation timestamp in ISO 8601 format
848
+ */
849
+ createdAt: string;
850
+ /**
851
+ * A simulation environment: the ambient conditions a customer flow variant runs
852
+ * under. The list includes both your own and the ones Roark curates for every
853
+ * project.
854
+ */
855
+ environment: EdgeCase.Environment | null;
856
+ isGenerated: boolean;
857
+ /**
858
+ * The persona this runs as instead of the happy path's. Null means it inherits.
859
+ */
860
+ personaOverride: EdgeCase.PersonaOverride | null;
861
+ precededByCustomerFlowId: string | null;
862
+ precededByCustomerFlowVariantId: string | null;
863
+ title: string;
864
+ type: 'IMPROV';
865
+ /**
866
+ * Last update timestamp in ISO 8601 format
867
+ */
868
+ updatedAt: string;
869
+ /**
870
+ * The brief the simulated customer improvises from.
871
+ */
872
+ prompt?: string | null;
873
+ systemKey?: string | null;
874
+ }
875
+ namespace EdgeCase {
876
+ /**
877
+ * One thing the agent under test is graded against.
878
+ */
879
+ interface AdditionalExpectation {
880
+ id: string;
881
+ /**
882
+ * What the agent under test is graded against.
883
+ */
884
+ prompt: string;
885
+ }
886
+ /**
887
+ * A simulation environment: the ambient conditions a customer flow variant runs
888
+ * under. The list includes both your own and the ones Roark curates for every
889
+ * project.
890
+ */
891
+ interface Environment {
892
+ id: string;
893
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
894
+ backgroundNoiseVolume: number;
895
+ /**
896
+ * Creation timestamp in ISO 8601 format
897
+ */
898
+ createdAt: string;
899
+ name: string;
900
+ /**
901
+ * Last update timestamp in ISO 8601 format
902
+ */
903
+ updatedAt: string;
904
+ description?: string | null;
905
+ }
906
+ /**
907
+ * The persona this runs as instead of the happy path's. Null means it inherits.
908
+ */
909
+ interface PersonaOverride {
910
+ /**
911
+ * Unique identifier of the persona
912
+ */
913
+ id: string;
914
+ /**
915
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
916
+ * optional variants
917
+ */
918
+ accent: 'US' | 'US_X_SOUTH' | 'GB' | 'ES' | 'DE' | 'IN' | 'FR' | 'NL' | 'SA' | 'GR' | 'AU' | 'IT' | 'ID' | 'TH' | 'JP' | 'NZ' | 'PH' | 'SG' | 'MY' | 'HK' | 'TR' | 'PT' | 'IL';
919
+ /**
920
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
921
+ * voice for are accepted; defaults to ADULT, which every accent supports.
922
+ */
923
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
924
+ /**
925
+ * Background noise setting
926
+ */
927
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
928
+ /**
929
+ * Base emotional state of the persona
930
+ */
931
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
932
+ /**
933
+ * How the persona confirms information
934
+ */
935
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
936
+ /**
937
+ * Creation timestamp
938
+ */
939
+ createdAt: string;
940
+ /**
941
+ * Gender of the persona
942
+ */
943
+ gender: 'MALE' | 'FEMALE';
944
+ /**
945
+ * Whether the persona uses filler words like "um" and "uh"
946
+ */
947
+ hasDisfluencies: boolean;
948
+ /**
949
+ * Maximum number of idle messages the persona will send before giving up
950
+ */
951
+ idleMessageMaxSpokenCount: number;
952
+ /**
953
+ * Whether the idle message counter resets when the agent speaks
954
+ */
955
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
956
+ /**
957
+ * Messages the persona will say when the agent goes silent during a call. null =
958
+ * "Automatic": language-appropriate defaults are used at call time.
959
+ */
960
+ idleMessages: Array<string> | null;
961
+ /**
962
+ * Seconds of silence before the persona sends an idle message
963
+ */
964
+ idleTimeoutSeconds: number;
965
+ /**
966
+ * How clearly the persona expresses their intentions
967
+ */
968
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
969
+ /**
970
+ * Primary language ISO 639-1 code for the persona
971
+ */
972
+ language: 'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE';
973
+ /**
974
+ * How reliable the persona's memory is
975
+ */
976
+ memoryReliability: 'HIGH' | 'LOW';
977
+ /**
978
+ * The name the agent will identify as during conversations
979
+ */
980
+ name: string;
981
+ /**
982
+ * Additional custom properties about the persona
983
+ */
984
+ properties: {
985
+ [key: string]: unknown;
986
+ };
987
+ /**
988
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
989
+ * NORMAL, RELAXED)
990
+ */
991
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK';
992
+ /**
993
+ * Speech clarity of the persona
994
+ */
995
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
996
+ /**
997
+ * Speech pace of the persona
998
+ */
999
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
1000
+ /**
1001
+ * Languages the persona can understand. Multilingual combinations are limited by
1002
+ * multilingual speech recognition support.
1003
+ */
1004
+ understoodLanguages: Array<'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE'>;
1005
+ /**
1006
+ * Last update timestamp
1007
+ */
1008
+ updatedAt: string;
1009
+ /**
1010
+ * Background story and behavioral patterns for the persona
1011
+ */
1012
+ backstoryPrompt?: string | null;
1013
+ /**
1014
+ * Human-readable description of the persona
1015
+ */
1016
+ description?: string | null;
1017
+ /**
1018
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
1019
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
1020
+ * or set null to display the name itself.
1021
+ */
1022
+ displayName?: string | null;
1023
+ /**
1024
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1025
+ */
1026
+ secondaryLanguage?: 'EN' | null;
1027
+ }
1028
+ }
1029
+ /**
1030
+ * One brief to run an improv flow with.
1031
+ */
1032
+ interface HappyPath {
1033
+ id: string;
1034
+ /**
1035
+ * Graded on top of the flow's own expectations, for this variant only.
1036
+ */
1037
+ additionalExpectations: Array<HappyPath.AdditionalExpectation>;
1038
+ /**
1039
+ * Creation timestamp in ISO 8601 format
1040
+ */
1041
+ createdAt: string;
1042
+ /**
1043
+ * A simulation environment: the ambient conditions a customer flow variant runs
1044
+ * under. The list includes both your own and the ones Roark curates for every
1045
+ * project.
1046
+ */
1047
+ environment: HappyPath.Environment | null;
1048
+ isGenerated: boolean;
1049
+ /**
1050
+ * The persona this runs as instead of the happy path's. Null means it inherits.
1051
+ */
1052
+ personaOverride: HappyPath.PersonaOverride | null;
1053
+ precededByCustomerFlowId: string | null;
1054
+ precededByCustomerFlowVariantId: string | null;
1055
+ title: string;
1056
+ type: 'IMPROV';
1057
+ /**
1058
+ * Last update timestamp in ISO 8601 format
1059
+ */
1060
+ updatedAt: string;
1061
+ /**
1062
+ * The brief the simulated customer improvises from.
1063
+ */
1064
+ prompt?: string | null;
1065
+ systemKey?: string | null;
1066
+ }
1067
+ namespace HappyPath {
1068
+ /**
1069
+ * One thing the agent under test is graded against.
1070
+ */
1071
+ interface AdditionalExpectation {
1072
+ id: string;
1073
+ /**
1074
+ * What the agent under test is graded against.
1075
+ */
1076
+ prompt: string;
1077
+ }
1078
+ /**
1079
+ * A simulation environment: the ambient conditions a customer flow variant runs
1080
+ * under. The list includes both your own and the ones Roark curates for every
1081
+ * project.
1082
+ */
1083
+ interface Environment {
1084
+ id: string;
1085
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
1086
+ backgroundNoiseVolume: number;
1087
+ /**
1088
+ * Creation timestamp in ISO 8601 format
1089
+ */
1090
+ createdAt: string;
1091
+ name: string;
1092
+ /**
1093
+ * Last update timestamp in ISO 8601 format
1094
+ */
1095
+ updatedAt: string;
1096
+ description?: string | null;
1097
+ }
1098
+ /**
1099
+ * The persona this runs as instead of the happy path's. Null means it inherits.
1100
+ */
1101
+ interface PersonaOverride {
1102
+ /**
1103
+ * Unique identifier of the persona
1104
+ */
1105
+ id: string;
1106
+ /**
1107
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
1108
+ * optional variants
1109
+ */
1110
+ accent: 'US' | 'US_X_SOUTH' | 'GB' | 'ES' | 'DE' | 'IN' | 'FR' | 'NL' | 'SA' | 'GR' | 'AU' | 'IT' | 'ID' | 'TH' | 'JP' | 'NZ' | 'PH' | 'SG' | 'MY' | 'HK' | 'TR' | 'PT' | 'IL';
1111
+ /**
1112
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
1113
+ * voice for are accepted; defaults to ADULT, which every accent supports.
1114
+ */
1115
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
1116
+ /**
1117
+ * Background noise setting
1118
+ */
1119
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
1120
+ /**
1121
+ * Base emotional state of the persona
1122
+ */
1123
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1124
+ /**
1125
+ * How the persona confirms information
1126
+ */
1127
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
1128
+ /**
1129
+ * Creation timestamp
1130
+ */
1131
+ createdAt: string;
1132
+ /**
1133
+ * Gender of the persona
1134
+ */
1135
+ gender: 'MALE' | 'FEMALE';
1136
+ /**
1137
+ * Whether the persona uses filler words like "um" and "uh"
1138
+ */
1139
+ hasDisfluencies: boolean;
1140
+ /**
1141
+ * Maximum number of idle messages the persona will send before giving up
1142
+ */
1143
+ idleMessageMaxSpokenCount: number;
1144
+ /**
1145
+ * Whether the idle message counter resets when the agent speaks
1146
+ */
1147
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
1148
+ /**
1149
+ * Messages the persona will say when the agent goes silent during a call. null =
1150
+ * "Automatic": language-appropriate defaults are used at call time.
1151
+ */
1152
+ idleMessages: Array<string> | null;
1153
+ /**
1154
+ * Seconds of silence before the persona sends an idle message
1155
+ */
1156
+ idleTimeoutSeconds: number;
1157
+ /**
1158
+ * How clearly the persona expresses their intentions
1159
+ */
1160
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
1161
+ /**
1162
+ * Primary language ISO 639-1 code for the persona
1163
+ */
1164
+ language: 'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE';
1165
+ /**
1166
+ * How reliable the persona's memory is
1167
+ */
1168
+ memoryReliability: 'HIGH' | 'LOW';
1169
+ /**
1170
+ * The name the agent will identify as during conversations
1171
+ */
1172
+ name: string;
1173
+ /**
1174
+ * Additional custom properties about the persona
1175
+ */
1176
+ properties: {
1177
+ [key: string]: unknown;
1178
+ };
1179
+ /**
1180
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
1181
+ * NORMAL, RELAXED)
1182
+ */
1183
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK';
1184
+ /**
1185
+ * Speech clarity of the persona
1186
+ */
1187
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
1188
+ /**
1189
+ * Speech pace of the persona
1190
+ */
1191
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
1192
+ /**
1193
+ * Languages the persona can understand. Multilingual combinations are limited by
1194
+ * multilingual speech recognition support.
1195
+ */
1196
+ understoodLanguages: Array<'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE'>;
1197
+ /**
1198
+ * Last update timestamp
1199
+ */
1200
+ updatedAt: string;
1201
+ /**
1202
+ * Background story and behavioral patterns for the persona
1203
+ */
1204
+ backstoryPrompt?: string | null;
1205
+ /**
1206
+ * Human-readable description of the persona
1207
+ */
1208
+ description?: string | null;
1209
+ /**
1210
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
1211
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
1212
+ * or set null to display the name itself.
1213
+ */
1214
+ displayName?: string | null;
1215
+ /**
1216
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1217
+ */
1218
+ secondaryLanguage?: 'EN' | null;
1219
+ }
1220
+ }
1221
+ }
1222
+ /**
1223
+ * A flow that leaves a voicemail. Curated by Roark, read-only.
1224
+ */
1225
+ interface VoicemailCustomerFlow {
1226
+ id: string;
1227
+ agentExpectations: Array<VoicemailCustomerFlow.AgentExpectation>;
1228
+ /**
1229
+ * The agents this flow is run against.
1230
+ */
1231
+ agents: Array<VoicemailCustomerFlow.Agent>;
1232
+ /**
1233
+ * Creation timestamp in ISO 8601 format
1234
+ */
1235
+ createdAt: string;
1236
+ /**
1237
+ * Every other way of running this flow.
1238
+ */
1239
+ edgeCases: Array<VoicemailCustomerFlow.EdgeCase>;
1240
+ /**
1241
+ * One voicemail greeting.
1242
+ */
1243
+ happyPath: VoicemailCustomerFlow.HappyPath | null;
1244
+ source: 'SYSTEM' | 'CUSTOM';
1245
+ title: string;
1246
+ type: 'VOICEMAIL';
1247
+ /**
1248
+ * Last update timestamp in ISO 8601 format
1249
+ */
1250
+ updatedAt: string;
1251
+ description?: string | null;
1252
+ }
1253
+ namespace VoicemailCustomerFlow {
1254
+ /**
1255
+ * One thing the agent under test is graded against.
1256
+ */
1257
+ interface AgentExpectation {
1258
+ id: string;
1259
+ /**
1260
+ * What the agent under test is graded against.
1261
+ */
1262
+ prompt: string;
1263
+ }
1264
+ interface Agent {
1265
+ /**
1266
+ * Unique identifier of the agent
1267
+ */
1268
+ id: string;
1269
+ /**
1270
+ * Creation timestamp in ISO 8601 format
1271
+ */
1272
+ createdAt: string;
1273
+ /**
1274
+ * Custom identifier for the agent
1275
+ */
1276
+ customId: string | null;
1277
+ /**
1278
+ * Description of the agent
1279
+ */
1280
+ description: string | null;
1281
+ /**
1282
+ * Name of the agent
1283
+ */
1284
+ name: string;
1285
+ /**
1286
+ * Last update timestamp in ISO 8601 format
1287
+ */
1288
+ updatedAt: string;
1289
+ }
1290
+ /**
1291
+ * One voicemail greeting.
1292
+ */
1293
+ interface EdgeCase {
1294
+ id: string;
1295
+ /**
1296
+ * Graded on top of the flow's own expectations, for this variant only.
1297
+ */
1298
+ additionalExpectations: Array<EdgeCase.AdditionalExpectation>;
1299
+ /**
1300
+ * Creation timestamp in ISO 8601 format
1301
+ */
1302
+ createdAt: string;
1303
+ /**
1304
+ * A simulation environment: the ambient conditions a customer flow variant runs
1305
+ * under. The list includes both your own and the ones Roark curates for every
1306
+ * project.
1307
+ */
1308
+ environment: EdgeCase.Environment | null;
1309
+ isGenerated: boolean;
1310
+ /**
1311
+ * The persona this runs as instead of the happy path's. Null means it inherits.
1312
+ */
1313
+ personaOverride: EdgeCase.PersonaOverride | null;
1314
+ precededByCustomerFlowId: string | null;
1315
+ precededByCustomerFlowVariantId: string | null;
1316
+ title: string;
1317
+ type: 'VOICEMAIL';
1318
+ /**
1319
+ * Last update timestamp in ISO 8601 format
1320
+ */
1321
+ updatedAt: string;
1322
+ systemKey?: string | null;
1323
+ }
1324
+ namespace EdgeCase {
1325
+ /**
1326
+ * One thing the agent under test is graded against.
1327
+ */
1328
+ interface AdditionalExpectation {
1329
+ id: string;
1330
+ /**
1331
+ * What the agent under test is graded against.
1332
+ */
1333
+ prompt: string;
1334
+ }
1335
+ /**
1336
+ * A simulation environment: the ambient conditions a customer flow variant runs
1337
+ * under. The list includes both your own and the ones Roark curates for every
1338
+ * project.
1339
+ */
1340
+ interface Environment {
1341
+ id: string;
1342
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
1343
+ backgroundNoiseVolume: number;
1344
+ /**
1345
+ * Creation timestamp in ISO 8601 format
1346
+ */
1347
+ createdAt: string;
1348
+ name: string;
1349
+ /**
1350
+ * Last update timestamp in ISO 8601 format
1351
+ */
1352
+ updatedAt: string;
1353
+ description?: string | null;
1354
+ }
1355
+ /**
1356
+ * The persona this runs as instead of the happy path's. Null means it inherits.
1357
+ */
1358
+ interface PersonaOverride {
1359
+ /**
1360
+ * Unique identifier of the persona
1361
+ */
1362
+ id: string;
1363
+ /**
1364
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
1365
+ * optional variants
1366
+ */
1367
+ accent: 'US' | 'US_X_SOUTH' | 'GB' | 'ES' | 'DE' | 'IN' | 'FR' | 'NL' | 'SA' | 'GR' | 'AU' | 'IT' | 'ID' | 'TH' | 'JP' | 'NZ' | 'PH' | 'SG' | 'MY' | 'HK' | 'TR' | 'PT' | 'IL';
1368
+ /**
1369
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
1370
+ * voice for are accepted; defaults to ADULT, which every accent supports.
1371
+ */
1372
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
1373
+ /**
1374
+ * Background noise setting
1375
+ */
1376
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
1377
+ /**
1378
+ * Base emotional state of the persona
1379
+ */
1380
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1381
+ /**
1382
+ * How the persona confirms information
1383
+ */
1384
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
1385
+ /**
1386
+ * Creation timestamp
1387
+ */
1388
+ createdAt: string;
1389
+ /**
1390
+ * Gender of the persona
1391
+ */
1392
+ gender: 'MALE' | 'FEMALE';
1393
+ /**
1394
+ * Whether the persona uses filler words like "um" and "uh"
1395
+ */
1396
+ hasDisfluencies: boolean;
1397
+ /**
1398
+ * Maximum number of idle messages the persona will send before giving up
1399
+ */
1400
+ idleMessageMaxSpokenCount: number;
1401
+ /**
1402
+ * Whether the idle message counter resets when the agent speaks
1403
+ */
1404
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
1405
+ /**
1406
+ * Messages the persona will say when the agent goes silent during a call. null =
1407
+ * "Automatic": language-appropriate defaults are used at call time.
1408
+ */
1409
+ idleMessages: Array<string> | null;
1410
+ /**
1411
+ * Seconds of silence before the persona sends an idle message
1412
+ */
1413
+ idleTimeoutSeconds: number;
1414
+ /**
1415
+ * How clearly the persona expresses their intentions
1416
+ */
1417
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
1418
+ /**
1419
+ * Primary language ISO 639-1 code for the persona
1420
+ */
1421
+ language: 'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE';
1422
+ /**
1423
+ * How reliable the persona's memory is
1424
+ */
1425
+ memoryReliability: 'HIGH' | 'LOW';
1426
+ /**
1427
+ * The name the agent will identify as during conversations
1428
+ */
1429
+ name: string;
1430
+ /**
1431
+ * Additional custom properties about the persona
1432
+ */
1433
+ properties: {
1434
+ [key: string]: unknown;
1435
+ };
1436
+ /**
1437
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
1438
+ * NORMAL, RELAXED)
1439
+ */
1440
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK';
1441
+ /**
1442
+ * Speech clarity of the persona
1443
+ */
1444
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
1445
+ /**
1446
+ * Speech pace of the persona
1447
+ */
1448
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
1449
+ /**
1450
+ * Languages the persona can understand. Multilingual combinations are limited by
1451
+ * multilingual speech recognition support.
1452
+ */
1453
+ understoodLanguages: Array<'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE'>;
1454
+ /**
1455
+ * Last update timestamp
1456
+ */
1457
+ updatedAt: string;
1458
+ /**
1459
+ * Background story and behavioral patterns for the persona
1460
+ */
1461
+ backstoryPrompt?: string | null;
1462
+ /**
1463
+ * Human-readable description of the persona
1464
+ */
1465
+ description?: string | null;
1466
+ /**
1467
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
1468
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
1469
+ * or set null to display the name itself.
1470
+ */
1471
+ displayName?: string | null;
1472
+ /**
1473
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1474
+ */
1475
+ secondaryLanguage?: 'EN' | null;
1476
+ }
1477
+ }
1478
+ /**
1479
+ * One voicemail greeting.
1480
+ */
1481
+ interface HappyPath {
1482
+ id: string;
1483
+ /**
1484
+ * Graded on top of the flow's own expectations, for this variant only.
1485
+ */
1486
+ additionalExpectations: Array<HappyPath.AdditionalExpectation>;
1487
+ /**
1488
+ * Creation timestamp in ISO 8601 format
1489
+ */
1490
+ createdAt: string;
1491
+ /**
1492
+ * A simulation environment: the ambient conditions a customer flow variant runs
1493
+ * under. The list includes both your own and the ones Roark curates for every
1494
+ * project.
1495
+ */
1496
+ environment: HappyPath.Environment | null;
1497
+ isGenerated: boolean;
1498
+ /**
1499
+ * The persona this runs as instead of the happy path's. Null means it inherits.
1500
+ */
1501
+ personaOverride: HappyPath.PersonaOverride | null;
1502
+ precededByCustomerFlowId: string | null;
1503
+ precededByCustomerFlowVariantId: string | null;
1504
+ title: string;
1505
+ type: 'VOICEMAIL';
1506
+ /**
1507
+ * Last update timestamp in ISO 8601 format
1508
+ */
1509
+ updatedAt: string;
1510
+ systemKey?: string | null;
1511
+ }
1512
+ namespace HappyPath {
1513
+ /**
1514
+ * One thing the agent under test is graded against.
1515
+ */
1516
+ interface AdditionalExpectation {
1517
+ id: string;
1518
+ /**
1519
+ * What the agent under test is graded against.
1520
+ */
1521
+ prompt: string;
1522
+ }
1523
+ /**
1524
+ * A simulation environment: the ambient conditions a customer flow variant runs
1525
+ * under. The list includes both your own and the ones Roark curates for every
1526
+ * project.
1527
+ */
1528
+ interface Environment {
1529
+ id: string;
1530
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
1531
+ backgroundNoiseVolume: number;
1532
+ /**
1533
+ * Creation timestamp in ISO 8601 format
1534
+ */
1535
+ createdAt: string;
1536
+ name: string;
1537
+ /**
1538
+ * Last update timestamp in ISO 8601 format
1539
+ */
1540
+ updatedAt: string;
1541
+ description?: string | null;
1542
+ }
1543
+ /**
1544
+ * The persona this runs as instead of the happy path's. Null means it inherits.
1545
+ */
1546
+ interface PersonaOverride {
1547
+ /**
1548
+ * Unique identifier of the persona
1549
+ */
1550
+ id: string;
1551
+ /**
1552
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
1553
+ * optional variants
1554
+ */
1555
+ accent: 'US' | 'US_X_SOUTH' | 'GB' | 'ES' | 'DE' | 'IN' | 'FR' | 'NL' | 'SA' | 'GR' | 'AU' | 'IT' | 'ID' | 'TH' | 'JP' | 'NZ' | 'PH' | 'SG' | 'MY' | 'HK' | 'TR' | 'PT' | 'IL';
1556
+ /**
1557
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
1558
+ * voice for are accepted; defaults to ADULT, which every accent supports.
1559
+ */
1560
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
1561
+ /**
1562
+ * Background noise setting
1563
+ */
1564
+ backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
1565
+ /**
1566
+ * Base emotional state of the persona
1567
+ */
1568
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1569
+ /**
1570
+ * How the persona confirms information
1571
+ */
1572
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
1573
+ /**
1574
+ * Creation timestamp
1575
+ */
1576
+ createdAt: string;
1577
+ /**
1578
+ * Gender of the persona
1579
+ */
1580
+ gender: 'MALE' | 'FEMALE';
1581
+ /**
1582
+ * Whether the persona uses filler words like "um" and "uh"
1583
+ */
1584
+ hasDisfluencies: boolean;
1585
+ /**
1586
+ * Maximum number of idle messages the persona will send before giving up
1587
+ */
1588
+ idleMessageMaxSpokenCount: number;
1589
+ /**
1590
+ * Whether the idle message counter resets when the agent speaks
1591
+ */
1592
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
1593
+ /**
1594
+ * Messages the persona will say when the agent goes silent during a call. null =
1595
+ * "Automatic": language-appropriate defaults are used at call time.
1596
+ */
1597
+ idleMessages: Array<string> | null;
1598
+ /**
1599
+ * Seconds of silence before the persona sends an idle message
1600
+ */
1601
+ idleTimeoutSeconds: number;
1602
+ /**
1603
+ * How clearly the persona expresses their intentions
1604
+ */
1605
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
1606
+ /**
1607
+ * Primary language ISO 639-1 code for the persona
1608
+ */
1609
+ language: 'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE';
1610
+ /**
1611
+ * How reliable the persona's memory is
1612
+ */
1613
+ memoryReliability: 'HIGH' | 'LOW';
1614
+ /**
1615
+ * The name the agent will identify as during conversations
1616
+ */
1617
+ name: string;
1618
+ /**
1619
+ * Additional custom properties about the persona
1620
+ */
1621
+ properties: {
1622
+ [key: string]: unknown;
1623
+ };
1624
+ /**
1625
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
1626
+ * NORMAL, RELAXED)
1627
+ */
1628
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK';
1629
+ /**
1630
+ * Speech clarity of the persona
1631
+ */
1632
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
1633
+ /**
1634
+ * Speech pace of the persona
1635
+ */
1636
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
1637
+ /**
1638
+ * Languages the persona can understand. Multilingual combinations are limited by
1639
+ * multilingual speech recognition support.
1640
+ */
1641
+ understoodLanguages: Array<'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE'>;
1642
+ /**
1643
+ * Last update timestamp
1644
+ */
1645
+ updatedAt: string;
1646
+ /**
1647
+ * Background story and behavioral patterns for the persona
1648
+ */
1649
+ backstoryPrompt?: string | null;
1650
+ /**
1651
+ * Human-readable description of the persona
1652
+ */
1653
+ description?: string | null;
1654
+ /**
1655
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
1656
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
1657
+ * or set null to display the name itself.
1658
+ */
1659
+ displayName?: string | null;
1660
+ /**
1661
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1662
+ */
1663
+ secondaryLanguage?: 'EN' | null;
1664
+ }
1665
+ }
1666
+ }
1667
+ }
1668
+ export interface CustomerFlowUpdateResponse {
203
1669
  /**
204
1670
  * The conversation a simulated customer has with the agent under test.
205
1671
  */
206
- data: CustomerFlowCreateResponse.ScriptedCustomerFlow | CustomerFlowCreateResponse.ImprovCustomerFlow | CustomerFlowCreateResponse.VoicemailCustomerFlow;
1672
+ data: CustomerFlowUpdateResponse.ScriptedCustomerFlow | CustomerFlowUpdateResponse.ImprovCustomerFlow | CustomerFlowUpdateResponse.VoicemailCustomerFlow;
207
1673
  }
208
- export declare namespace CustomerFlowCreateResponse {
1674
+ export declare namespace CustomerFlowUpdateResponse {
209
1675
  /**
210
1676
  * A flow whose conversation is written out as a graph of turns.
211
1677
  */
@@ -238,6 +1704,28 @@ export declare namespace CustomerFlowCreateResponse {
238
1704
  * editing the graph is what creates and removes these.
239
1705
  */
240
1706
  happyPath: ScriptedCustomerFlow.HappyPath | null;
1707
+ /**
1708
+ * STRICT only. What the simulated customer does when your agent does not say the
1709
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
1710
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
1711
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
1712
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
1713
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
1714
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
1715
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
1716
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
1717
+ * AGENT_TURN step can carry its own.
1718
+ */
1719
+ offScriptPolicy: ScriptedCustomerFlow.OffScriptPolicy | null;
1720
+ /**
1721
+ * How closely a run follows the script. LOOSE (default) hands the whole script to
1722
+ * the simulated customer as one prompt; it keeps the call moving whatever your
1723
+ * agent says. STRICT runs the script as a state machine on the agent service: at
1724
+ * every agent step the simulated customer waits, silent, until your agent has said
1725
+ * the expected line, and only then moves on. Scripted flows only; STRICT needs the
1726
+ * agent-service transport and is not available on realtime models.
1727
+ */
1728
+ scriptAdherence: 'LOOSE' | 'STRICT';
241
1729
  source: 'SYSTEM' | 'CUSTOM';
242
1730
  title: string;
243
1731
  type: 'SCRIPTED';
@@ -349,6 +1837,7 @@ export declare namespace CustomerFlowCreateResponse {
349
1837
  interface Environment {
350
1838
  id: string;
351
1839
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
1840
+ backgroundNoiseVolume: number;
352
1841
  /**
353
1842
  * Creation timestamp in ISO 8601 format
354
1843
  */
@@ -385,7 +1874,7 @@ export declare namespace CustomerFlowCreateResponse {
385
1874
  /**
386
1875
  * Base emotional state of the persona
387
1876
  */
388
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
1877
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
389
1878
  /**
390
1879
  * How the persona confirms information
391
1880
  */
@@ -471,6 +1960,12 @@ export declare namespace CustomerFlowCreateResponse {
471
1960
  * Human-readable description of the persona
472
1961
  */
473
1962
  description?: string | null;
1963
+ /**
1964
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
1965
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
1966
+ * or set null to display the name itself.
1967
+ */
1968
+ displayName?: string | null;
474
1969
  /**
475
1970
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
476
1971
  */
@@ -536,6 +2031,7 @@ export declare namespace CustomerFlowCreateResponse {
536
2031
  interface Environment {
537
2032
  id: string;
538
2033
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
2034
+ backgroundNoiseVolume: number;
539
2035
  /**
540
2036
  * Creation timestamp in ISO 8601 format
541
2037
  */
@@ -572,7 +2068,7 @@ export declare namespace CustomerFlowCreateResponse {
572
2068
  /**
573
2069
  * Base emotional state of the persona
574
2070
  */
575
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
2071
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
576
2072
  /**
577
2073
  * How the persona confirms information
578
2074
  */
@@ -658,12 +2154,37 @@ export declare namespace CustomerFlowCreateResponse {
658
2154
  * Human-readable description of the persona
659
2155
  */
660
2156
  description?: string | null;
2157
+ /**
2158
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
2159
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
2160
+ * or set null to display the name itself.
2161
+ */
2162
+ displayName?: string | null;
661
2163
  /**
662
2164
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
663
2165
  */
664
2166
  secondaryLanguage?: 'EN' | null;
665
2167
  }
666
2168
  }
2169
+ /**
2170
+ * STRICT only. What the simulated customer does when your agent does not say the
2171
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
2172
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
2173
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
2174
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
2175
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
2176
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
2177
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
2178
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
2179
+ * AGENT_TURN step can carry its own.
2180
+ */
2181
+ interface OffScriptPolicy {
2182
+ maxAttempts: number;
2183
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
2184
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
2185
+ sayLine?: string | null;
2186
+ waitSeconds?: number | null;
2187
+ }
667
2188
  }
668
2189
  /**
669
2190
  * A flow whose conversation is not written out: each variant gives the simulated
@@ -791,6 +2312,7 @@ export declare namespace CustomerFlowCreateResponse {
791
2312
  interface Environment {
792
2313
  id: string;
793
2314
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
2315
+ backgroundNoiseVolume: number;
794
2316
  /**
795
2317
  * Creation timestamp in ISO 8601 format
796
2318
  */
@@ -827,7 +2349,7 @@ export declare namespace CustomerFlowCreateResponse {
827
2349
  /**
828
2350
  * Base emotional state of the persona
829
2351
  */
830
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
2352
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
831
2353
  /**
832
2354
  * How the persona confirms information
833
2355
  */
@@ -913,6 +2435,12 @@ export declare namespace CustomerFlowCreateResponse {
913
2435
  * Human-readable description of the persona
914
2436
  */
915
2437
  description?: string | null;
2438
+ /**
2439
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
2440
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
2441
+ * or set null to display the name itself.
2442
+ */
2443
+ displayName?: string | null;
916
2444
  /**
917
2445
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
918
2446
  */
@@ -976,6 +2504,7 @@ export declare namespace CustomerFlowCreateResponse {
976
2504
  interface Environment {
977
2505
  id: string;
978
2506
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
2507
+ backgroundNoiseVolume: number;
979
2508
  /**
980
2509
  * Creation timestamp in ISO 8601 format
981
2510
  */
@@ -1012,7 +2541,7 @@ export declare namespace CustomerFlowCreateResponse {
1012
2541
  /**
1013
2542
  * Base emotional state of the persona
1014
2543
  */
1015
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
2544
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1016
2545
  /**
1017
2546
  * How the persona confirms information
1018
2547
  */
@@ -1098,6 +2627,12 @@ export declare namespace CustomerFlowCreateResponse {
1098
2627
  * Human-readable description of the persona
1099
2628
  */
1100
2629
  description?: string | null;
2630
+ /**
2631
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
2632
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
2633
+ * or set null to display the name itself.
2634
+ */
2635
+ displayName?: string | null;
1101
2636
  /**
1102
2637
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1103
2638
  */
@@ -1226,6 +2761,7 @@ export declare namespace CustomerFlowCreateResponse {
1226
2761
  interface Environment {
1227
2762
  id: string;
1228
2763
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
2764
+ backgroundNoiseVolume: number;
1229
2765
  /**
1230
2766
  * Creation timestamp in ISO 8601 format
1231
2767
  */
@@ -1262,7 +2798,7 @@ export declare namespace CustomerFlowCreateResponse {
1262
2798
  /**
1263
2799
  * Base emotional state of the persona
1264
2800
  */
1265
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
2801
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1266
2802
  /**
1267
2803
  * How the persona confirms information
1268
2804
  */
@@ -1348,6 +2884,12 @@ export declare namespace CustomerFlowCreateResponse {
1348
2884
  * Human-readable description of the persona
1349
2885
  */
1350
2886
  description?: string | null;
2887
+ /**
2888
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
2889
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
2890
+ * or set null to display the name itself.
2891
+ */
2892
+ displayName?: string | null;
1351
2893
  /**
1352
2894
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1353
2895
  */
@@ -1407,6 +2949,7 @@ export declare namespace CustomerFlowCreateResponse {
1407
2949
  interface Environment {
1408
2950
  id: string;
1409
2951
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
2952
+ backgroundNoiseVolume: number;
1410
2953
  /**
1411
2954
  * Creation timestamp in ISO 8601 format
1412
2955
  */
@@ -1443,7 +2986,7 @@ export declare namespace CustomerFlowCreateResponse {
1443
2986
  /**
1444
2987
  * Base emotional state of the persona
1445
2988
  */
1446
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
2989
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1447
2990
  /**
1448
2991
  * How the persona confirms information
1449
2992
  */
@@ -1529,6 +3072,12 @@ export declare namespace CustomerFlowCreateResponse {
1529
3072
  * Human-readable description of the persona
1530
3073
  */
1531
3074
  description?: string | null;
3075
+ /**
3076
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
3077
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
3078
+ * or set null to display the name itself.
3079
+ */
3080
+ displayName?: string | null;
1532
3081
  /**
1533
3082
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1534
3083
  */
@@ -1537,13 +3086,14 @@ export declare namespace CustomerFlowCreateResponse {
1537
3086
  }
1538
3087
  }
1539
3088
  }
1540
- export interface CustomerFlowUpdateResponse {
1541
- /**
1542
- * The conversation a simulated customer has with the agent under test.
1543
- */
1544
- data: CustomerFlowUpdateResponse.ScriptedCustomerFlow | CustomerFlowUpdateResponse.ImprovCustomerFlow | CustomerFlowUpdateResponse.VoicemailCustomerFlow;
3089
+ /**
3090
+ * Paginated list of customer flows
3091
+ */
3092
+ export interface CustomerFlowListResponse {
3093
+ data: Array<CustomerFlowListResponse.ScriptedCustomerFlow | CustomerFlowListResponse.ImprovCustomerFlow | CustomerFlowListResponse.VoicemailCustomerFlow>;
3094
+ pagination: CustomerFlowListResponse.Pagination;
1545
3095
  }
1546
- export declare namespace CustomerFlowUpdateResponse {
3096
+ export declare namespace CustomerFlowListResponse {
1547
3097
  /**
1548
3098
  * A flow whose conversation is written out as a graph of turns.
1549
3099
  */
@@ -1576,6 +3126,28 @@ export declare namespace CustomerFlowUpdateResponse {
1576
3126
  * editing the graph is what creates and removes these.
1577
3127
  */
1578
3128
  happyPath: ScriptedCustomerFlow.HappyPath | null;
3129
+ /**
3130
+ * STRICT only. What the simulated customer does when your agent does not say the
3131
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
3132
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
3133
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
3134
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
3135
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
3136
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
3137
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
3138
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
3139
+ * AGENT_TURN step can carry its own.
3140
+ */
3141
+ offScriptPolicy: ScriptedCustomerFlow.OffScriptPolicy | null;
3142
+ /**
3143
+ * How closely a run follows the script. LOOSE (default) hands the whole script to
3144
+ * the simulated customer as one prompt; it keeps the call moving whatever your
3145
+ * agent says. STRICT runs the script as a state machine on the agent service: at
3146
+ * every agent step the simulated customer waits, silent, until your agent has said
3147
+ * the expected line, and only then moves on. Scripted flows only; STRICT needs the
3148
+ * agent-service transport and is not available on realtime models.
3149
+ */
3150
+ scriptAdherence: 'LOOSE' | 'STRICT';
1579
3151
  source: 'SYSTEM' | 'CUSTOM';
1580
3152
  title: string;
1581
3153
  type: 'SCRIPTED';
@@ -1687,6 +3259,7 @@ export declare namespace CustomerFlowUpdateResponse {
1687
3259
  interface Environment {
1688
3260
  id: string;
1689
3261
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
3262
+ backgroundNoiseVolume: number;
1690
3263
  /**
1691
3264
  * Creation timestamp in ISO 8601 format
1692
3265
  */
@@ -1723,7 +3296,7 @@ export declare namespace CustomerFlowUpdateResponse {
1723
3296
  /**
1724
3297
  * Base emotional state of the persona
1725
3298
  */
1726
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
3299
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1727
3300
  /**
1728
3301
  * How the persona confirms information
1729
3302
  */
@@ -1809,6 +3382,12 @@ export declare namespace CustomerFlowUpdateResponse {
1809
3382
  * Human-readable description of the persona
1810
3383
  */
1811
3384
  description?: string | null;
3385
+ /**
3386
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
3387
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
3388
+ * or set null to display the name itself.
3389
+ */
3390
+ displayName?: string | null;
1812
3391
  /**
1813
3392
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
1814
3393
  */
@@ -1874,6 +3453,7 @@ export declare namespace CustomerFlowUpdateResponse {
1874
3453
  interface Environment {
1875
3454
  id: string;
1876
3455
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
3456
+ backgroundNoiseVolume: number;
1877
3457
  /**
1878
3458
  * Creation timestamp in ISO 8601 format
1879
3459
  */
@@ -1910,7 +3490,7 @@ export declare namespace CustomerFlowUpdateResponse {
1910
3490
  /**
1911
3491
  * Base emotional state of the persona
1912
3492
  */
1913
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
3493
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
1914
3494
  /**
1915
3495
  * How the persona confirms information
1916
3496
  */
@@ -1996,12 +3576,37 @@ export declare namespace CustomerFlowUpdateResponse {
1996
3576
  * Human-readable description of the persona
1997
3577
  */
1998
3578
  description?: string | null;
3579
+ /**
3580
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
3581
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
3582
+ * or set null to display the name itself.
3583
+ */
3584
+ displayName?: string | null;
1999
3585
  /**
2000
3586
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
2001
3587
  */
2002
3588
  secondaryLanguage?: 'EN' | null;
2003
3589
  }
2004
3590
  }
3591
+ /**
3592
+ * STRICT only. What the simulated customer does when your agent does not say the
3593
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
3594
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
3595
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
3596
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
3597
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
3598
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
3599
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
3600
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
3601
+ * AGENT_TURN step can carry its own.
3602
+ */
3603
+ interface OffScriptPolicy {
3604
+ maxAttempts: number;
3605
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
3606
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
3607
+ sayLine?: string | null;
3608
+ waitSeconds?: number | null;
3609
+ }
2005
3610
  }
2006
3611
  /**
2007
3612
  * A flow whose conversation is not written out: each variant gives the simulated
@@ -2129,6 +3734,7 @@ export declare namespace CustomerFlowUpdateResponse {
2129
3734
  interface Environment {
2130
3735
  id: string;
2131
3736
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
3737
+ backgroundNoiseVolume: number;
2132
3738
  /**
2133
3739
  * Creation timestamp in ISO 8601 format
2134
3740
  */
@@ -2165,7 +3771,7 @@ export declare namespace CustomerFlowUpdateResponse {
2165
3771
  /**
2166
3772
  * Base emotional state of the persona
2167
3773
  */
2168
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
3774
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
2169
3775
  /**
2170
3776
  * How the persona confirms information
2171
3777
  */
@@ -2251,6 +3857,12 @@ export declare namespace CustomerFlowUpdateResponse {
2251
3857
  * Human-readable description of the persona
2252
3858
  */
2253
3859
  description?: string | null;
3860
+ /**
3861
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
3862
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
3863
+ * or set null to display the name itself.
3864
+ */
3865
+ displayName?: string | null;
2254
3866
  /**
2255
3867
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
2256
3868
  */
@@ -2314,6 +3926,7 @@ export declare namespace CustomerFlowUpdateResponse {
2314
3926
  interface Environment {
2315
3927
  id: string;
2316
3928
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
3929
+ backgroundNoiseVolume: number;
2317
3930
  /**
2318
3931
  * Creation timestamp in ISO 8601 format
2319
3932
  */
@@ -2350,7 +3963,7 @@ export declare namespace CustomerFlowUpdateResponse {
2350
3963
  /**
2351
3964
  * Base emotional state of the persona
2352
3965
  */
2353
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
3966
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
2354
3967
  /**
2355
3968
  * How the persona confirms information
2356
3969
  */
@@ -2436,6 +4049,12 @@ export declare namespace CustomerFlowUpdateResponse {
2436
4049
  * Human-readable description of the persona
2437
4050
  */
2438
4051
  description?: string | null;
4052
+ /**
4053
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
4054
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
4055
+ * or set null to display the name itself.
4056
+ */
4057
+ displayName?: string | null;
2439
4058
  /**
2440
4059
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
2441
4060
  */
@@ -2564,6 +4183,7 @@ export declare namespace CustomerFlowUpdateResponse {
2564
4183
  interface Environment {
2565
4184
  id: string;
2566
4185
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
4186
+ backgroundNoiseVolume: number;
2567
4187
  /**
2568
4188
  * Creation timestamp in ISO 8601 format
2569
4189
  */
@@ -2600,7 +4220,7 @@ export declare namespace CustomerFlowUpdateResponse {
2600
4220
  /**
2601
4221
  * Base emotional state of the persona
2602
4222
  */
2603
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
4223
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
2604
4224
  /**
2605
4225
  * How the persona confirms information
2606
4226
  */
@@ -2686,6 +4306,12 @@ export declare namespace CustomerFlowUpdateResponse {
2686
4306
  * Human-readable description of the persona
2687
4307
  */
2688
4308
  description?: string | null;
4309
+ /**
4310
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
4311
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
4312
+ * or set null to display the name itself.
4313
+ */
4314
+ displayName?: string | null;
2689
4315
  /**
2690
4316
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
2691
4317
  */
@@ -2745,6 +4371,7 @@ export declare namespace CustomerFlowUpdateResponse {
2745
4371
  interface Environment {
2746
4372
  id: string;
2747
4373
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
4374
+ backgroundNoiseVolume: number;
2748
4375
  /**
2749
4376
  * Creation timestamp in ISO 8601 format
2750
4377
  */
@@ -2781,7 +4408,7 @@ export declare namespace CustomerFlowUpdateResponse {
2781
4408
  /**
2782
4409
  * Base emotional state of the persona
2783
4410
  */
2784
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
4411
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
2785
4412
  /**
2786
4413
  * How the persona confirms information
2787
4414
  */
@@ -2867,6 +4494,12 @@ export declare namespace CustomerFlowUpdateResponse {
2867
4494
  * Human-readable description of the persona
2868
4495
  */
2869
4496
  description?: string | null;
4497
+ /**
4498
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
4499
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
4500
+ * or set null to display the name itself.
4501
+ */
4502
+ displayName?: string | null;
2870
4503
  /**
2871
4504
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
2872
4505
  */
@@ -2874,15 +4507,39 @@ export declare namespace CustomerFlowUpdateResponse {
2874
4507
  }
2875
4508
  }
2876
4509
  }
4510
+ interface Pagination {
4511
+ /**
4512
+ * Whether there are more items to fetch
4513
+ */
4514
+ hasMore: boolean;
4515
+ /**
4516
+ * Cursor for the next page of items
4517
+ */
4518
+ nextCursor: string | null;
4519
+ /**
4520
+ * Total number of items
4521
+ */
4522
+ total: number;
4523
+ }
2877
4524
  }
2878
- /**
2879
- * Paginated list of customer flows
2880
- */
2881
- export interface CustomerFlowListResponse {
2882
- data: Array<CustomerFlowListResponse.ScriptedCustomerFlow | CustomerFlowListResponse.ImprovCustomerFlow | CustomerFlowListResponse.VoicemailCustomerFlow>;
2883
- pagination: CustomerFlowListResponse.Pagination;
4525
+ export interface CustomerFlowDeleteResponse {
4526
+ data: CustomerFlowDeleteResponse.Data;
2884
4527
  }
2885
- export declare namespace CustomerFlowListResponse {
4528
+ export declare namespace CustomerFlowDeleteResponse {
4529
+ interface Data {
4530
+ /**
4531
+ * Whether the flow was deleted
4532
+ */
4533
+ deleted: boolean;
4534
+ }
4535
+ }
4536
+ export interface CustomerFlowDuplicateResponse {
4537
+ /**
4538
+ * The conversation a simulated customer has with the agent under test.
4539
+ */
4540
+ data: CustomerFlowDuplicateResponse.ScriptedCustomerFlow | CustomerFlowDuplicateResponse.ImprovCustomerFlow | CustomerFlowDuplicateResponse.VoicemailCustomerFlow;
4541
+ }
4542
+ export declare namespace CustomerFlowDuplicateResponse {
2886
4543
  /**
2887
4544
  * A flow whose conversation is written out as a graph of turns.
2888
4545
  */
@@ -2915,6 +4572,28 @@ export declare namespace CustomerFlowListResponse {
2915
4572
  * editing the graph is what creates and removes these.
2916
4573
  */
2917
4574
  happyPath: ScriptedCustomerFlow.HappyPath | null;
4575
+ /**
4576
+ * STRICT only. What the simulated customer does when your agent does not say the
4577
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
4578
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
4579
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
4580
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
4581
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
4582
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
4583
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
4584
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
4585
+ * AGENT_TURN step can carry its own.
4586
+ */
4587
+ offScriptPolicy: ScriptedCustomerFlow.OffScriptPolicy | null;
4588
+ /**
4589
+ * How closely a run follows the script. LOOSE (default) hands the whole script to
4590
+ * the simulated customer as one prompt; it keeps the call moving whatever your
4591
+ * agent says. STRICT runs the script as a state machine on the agent service: at
4592
+ * every agent step the simulated customer waits, silent, until your agent has said
4593
+ * the expected line, and only then moves on. Scripted flows only; STRICT needs the
4594
+ * agent-service transport and is not available on realtime models.
4595
+ */
4596
+ scriptAdherence: 'LOOSE' | 'STRICT';
2918
4597
  source: 'SYSTEM' | 'CUSTOM';
2919
4598
  title: string;
2920
4599
  type: 'SCRIPTED';
@@ -3026,6 +4705,7 @@ export declare namespace CustomerFlowListResponse {
3026
4705
  interface Environment {
3027
4706
  id: string;
3028
4707
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
4708
+ backgroundNoiseVolume: number;
3029
4709
  /**
3030
4710
  * Creation timestamp in ISO 8601 format
3031
4711
  */
@@ -3062,7 +4742,7 @@ export declare namespace CustomerFlowListResponse {
3062
4742
  /**
3063
4743
  * Base emotional state of the persona
3064
4744
  */
3065
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
4745
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
3066
4746
  /**
3067
4747
  * How the persona confirms information
3068
4748
  */
@@ -3148,6 +4828,12 @@ export declare namespace CustomerFlowListResponse {
3148
4828
  * Human-readable description of the persona
3149
4829
  */
3150
4830
  description?: string | null;
4831
+ /**
4832
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
4833
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
4834
+ * or set null to display the name itself.
4835
+ */
4836
+ displayName?: string | null;
3151
4837
  /**
3152
4838
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
3153
4839
  */
@@ -3213,6 +4899,7 @@ export declare namespace CustomerFlowListResponse {
3213
4899
  interface Environment {
3214
4900
  id: string;
3215
4901
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
4902
+ backgroundNoiseVolume: number;
3216
4903
  /**
3217
4904
  * Creation timestamp in ISO 8601 format
3218
4905
  */
@@ -3249,7 +4936,7 @@ export declare namespace CustomerFlowListResponse {
3249
4936
  /**
3250
4937
  * Base emotional state of the persona
3251
4938
  */
3252
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
4939
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
3253
4940
  /**
3254
4941
  * How the persona confirms information
3255
4942
  */
@@ -3335,12 +5022,37 @@ export declare namespace CustomerFlowListResponse {
3335
5022
  * Human-readable description of the persona
3336
5023
  */
3337
5024
  description?: string | null;
5025
+ /**
5026
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
5027
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
5028
+ * or set null to display the name itself.
5029
+ */
5030
+ displayName?: string | null;
3338
5031
  /**
3339
5032
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
3340
5033
  */
3341
5034
  secondaryLanguage?: 'EN' | null;
3342
5035
  }
3343
5036
  }
5037
+ /**
5038
+ * STRICT only. What the simulated customer does when your agent does not say the
5039
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
5040
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
5041
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
5042
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
5043
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
5044
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
5045
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
5046
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
5047
+ * AGENT_TURN step can carry its own.
5048
+ */
5049
+ interface OffScriptPolicy {
5050
+ maxAttempts: number;
5051
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
5052
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
5053
+ sayLine?: string | null;
5054
+ waitSeconds?: number | null;
5055
+ }
3344
5056
  }
3345
5057
  /**
3346
5058
  * A flow whose conversation is not written out: each variant gives the simulated
@@ -3468,6 +5180,7 @@ export declare namespace CustomerFlowListResponse {
3468
5180
  interface Environment {
3469
5181
  id: string;
3470
5182
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
5183
+ backgroundNoiseVolume: number;
3471
5184
  /**
3472
5185
  * Creation timestamp in ISO 8601 format
3473
5186
  */
@@ -3504,7 +5217,7 @@ export declare namespace CustomerFlowListResponse {
3504
5217
  /**
3505
5218
  * Base emotional state of the persona
3506
5219
  */
3507
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
5220
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
3508
5221
  /**
3509
5222
  * How the persona confirms information
3510
5223
  */
@@ -3590,6 +5303,12 @@ export declare namespace CustomerFlowListResponse {
3590
5303
  * Human-readable description of the persona
3591
5304
  */
3592
5305
  description?: string | null;
5306
+ /**
5307
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
5308
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
5309
+ * or set null to display the name itself.
5310
+ */
5311
+ displayName?: string | null;
3593
5312
  /**
3594
5313
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
3595
5314
  */
@@ -3653,6 +5372,7 @@ export declare namespace CustomerFlowListResponse {
3653
5372
  interface Environment {
3654
5373
  id: string;
3655
5374
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
5375
+ backgroundNoiseVolume: number;
3656
5376
  /**
3657
5377
  * Creation timestamp in ISO 8601 format
3658
5378
  */
@@ -3689,7 +5409,7 @@ export declare namespace CustomerFlowListResponse {
3689
5409
  /**
3690
5410
  * Base emotional state of the persona
3691
5411
  */
3692
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
5412
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
3693
5413
  /**
3694
5414
  * How the persona confirms information
3695
5415
  */
@@ -3775,6 +5495,12 @@ export declare namespace CustomerFlowListResponse {
3775
5495
  * Human-readable description of the persona
3776
5496
  */
3777
5497
  description?: string | null;
5498
+ /**
5499
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
5500
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
5501
+ * or set null to display the name itself.
5502
+ */
5503
+ displayName?: string | null;
3778
5504
  /**
3779
5505
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
3780
5506
  */
@@ -3903,6 +5629,7 @@ export declare namespace CustomerFlowListResponse {
3903
5629
  interface Environment {
3904
5630
  id: string;
3905
5631
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
5632
+ backgroundNoiseVolume: number;
3906
5633
  /**
3907
5634
  * Creation timestamp in ISO 8601 format
3908
5635
  */
@@ -3939,7 +5666,7 @@ export declare namespace CustomerFlowListResponse {
3939
5666
  /**
3940
5667
  * Base emotional state of the persona
3941
5668
  */
3942
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
5669
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
3943
5670
  /**
3944
5671
  * How the persona confirms information
3945
5672
  */
@@ -4025,6 +5752,12 @@ export declare namespace CustomerFlowListResponse {
4025
5752
  * Human-readable description of the persona
4026
5753
  */
4027
5754
  description?: string | null;
5755
+ /**
5756
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
5757
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
5758
+ * or set null to display the name itself.
5759
+ */
5760
+ displayName?: string | null;
4028
5761
  /**
4029
5762
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
4030
5763
  */
@@ -4084,6 +5817,7 @@ export declare namespace CustomerFlowListResponse {
4084
5817
  interface Environment {
4085
5818
  id: string;
4086
5819
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
5820
+ backgroundNoiseVolume: number;
4087
5821
  /**
4088
5822
  * Creation timestamp in ISO 8601 format
4089
5823
  */
@@ -4120,7 +5854,7 @@ export declare namespace CustomerFlowListResponse {
4120
5854
  /**
4121
5855
  * Base emotional state of the persona
4122
5856
  */
4123
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
5857
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
4124
5858
  /**
4125
5859
  * How the persona confirms information
4126
5860
  */
@@ -4206,6 +5940,12 @@ export declare namespace CustomerFlowListResponse {
4206
5940
  * Human-readable description of the persona
4207
5941
  */
4208
5942
  description?: string | null;
5943
+ /**
5944
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
5945
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
5946
+ * or set null to display the name itself.
5947
+ */
5948
+ displayName?: string | null;
4209
5949
  /**
4210
5950
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
4211
5951
  */
@@ -4213,31 +5953,6 @@ export declare namespace CustomerFlowListResponse {
4213
5953
  }
4214
5954
  }
4215
5955
  }
4216
- interface Pagination {
4217
- /**
4218
- * Whether there are more items to fetch
4219
- */
4220
- hasMore: boolean;
4221
- /**
4222
- * Cursor for the next page of items
4223
- */
4224
- nextCursor: string | null;
4225
- /**
4226
- * Total number of items
4227
- */
4228
- total: number;
4229
- }
4230
- }
4231
- export interface CustomerFlowDeleteResponse {
4232
- data: CustomerFlowDeleteResponse.Data;
4233
- }
4234
- export declare namespace CustomerFlowDeleteResponse {
4235
- interface Data {
4236
- /**
4237
- * Whether the flow was deleted
4238
- */
4239
- deleted: boolean;
4240
- }
4241
5956
  }
4242
5957
  export interface CustomerFlowGetByIDResponse {
4243
5958
  /**
@@ -4278,6 +5993,28 @@ export declare namespace CustomerFlowGetByIDResponse {
4278
5993
  * editing the graph is what creates and removes these.
4279
5994
  */
4280
5995
  happyPath: ScriptedCustomerFlow.HappyPath | null;
5996
+ /**
5997
+ * STRICT only. What the simulated customer does when your agent does not say the
5998
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
5999
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
6000
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
6001
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
6002
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
6003
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
6004
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
6005
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
6006
+ * AGENT_TURN step can carry its own.
6007
+ */
6008
+ offScriptPolicy: ScriptedCustomerFlow.OffScriptPolicy | null;
6009
+ /**
6010
+ * How closely a run follows the script. LOOSE (default) hands the whole script to
6011
+ * the simulated customer as one prompt; it keeps the call moving whatever your
6012
+ * agent says. STRICT runs the script as a state machine on the agent service: at
6013
+ * every agent step the simulated customer waits, silent, until your agent has said
6014
+ * the expected line, and only then moves on. Scripted flows only; STRICT needs the
6015
+ * agent-service transport and is not available on realtime models.
6016
+ */
6017
+ scriptAdherence: 'LOOSE' | 'STRICT';
4281
6018
  source: 'SYSTEM' | 'CUSTOM';
4282
6019
  title: string;
4283
6020
  type: 'SCRIPTED';
@@ -4389,6 +6126,7 @@ export declare namespace CustomerFlowGetByIDResponse {
4389
6126
  interface Environment {
4390
6127
  id: string;
4391
6128
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
6129
+ backgroundNoiseVolume: number;
4392
6130
  /**
4393
6131
  * Creation timestamp in ISO 8601 format
4394
6132
  */
@@ -4425,7 +6163,7 @@ export declare namespace CustomerFlowGetByIDResponse {
4425
6163
  /**
4426
6164
  * Base emotional state of the persona
4427
6165
  */
4428
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
6166
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
4429
6167
  /**
4430
6168
  * How the persona confirms information
4431
6169
  */
@@ -4511,6 +6249,12 @@ export declare namespace CustomerFlowGetByIDResponse {
4511
6249
  * Human-readable description of the persona
4512
6250
  */
4513
6251
  description?: string | null;
6252
+ /**
6253
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
6254
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
6255
+ * or set null to display the name itself.
6256
+ */
6257
+ displayName?: string | null;
4514
6258
  /**
4515
6259
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
4516
6260
  */
@@ -4576,6 +6320,7 @@ export declare namespace CustomerFlowGetByIDResponse {
4576
6320
  interface Environment {
4577
6321
  id: string;
4578
6322
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
6323
+ backgroundNoiseVolume: number;
4579
6324
  /**
4580
6325
  * Creation timestamp in ISO 8601 format
4581
6326
  */
@@ -4612,7 +6357,7 @@ export declare namespace CustomerFlowGetByIDResponse {
4612
6357
  /**
4613
6358
  * Base emotional state of the persona
4614
6359
  */
4615
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
6360
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
4616
6361
  /**
4617
6362
  * How the persona confirms information
4618
6363
  */
@@ -4698,12 +6443,37 @@ export declare namespace CustomerFlowGetByIDResponse {
4698
6443
  * Human-readable description of the persona
4699
6444
  */
4700
6445
  description?: string | null;
6446
+ /**
6447
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
6448
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
6449
+ * or set null to display the name itself.
6450
+ */
6451
+ displayName?: string | null;
4701
6452
  /**
4702
6453
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
4703
6454
  */
4704
6455
  secondaryLanguage?: 'EN' | null;
4705
6456
  }
4706
6457
  }
6458
+ /**
6459
+ * STRICT only. What the simulated customer does when your agent does not say the
6460
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
6461
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
6462
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
6463
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
6464
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
6465
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
6466
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
6467
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
6468
+ * AGENT_TURN step can carry its own.
6469
+ */
6470
+ interface OffScriptPolicy {
6471
+ maxAttempts: number;
6472
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
6473
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
6474
+ sayLine?: string | null;
6475
+ waitSeconds?: number | null;
6476
+ }
4707
6477
  }
4708
6478
  /**
4709
6479
  * A flow whose conversation is not written out: each variant gives the simulated
@@ -4831,6 +6601,7 @@ export declare namespace CustomerFlowGetByIDResponse {
4831
6601
  interface Environment {
4832
6602
  id: string;
4833
6603
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
6604
+ backgroundNoiseVolume: number;
4834
6605
  /**
4835
6606
  * Creation timestamp in ISO 8601 format
4836
6607
  */
@@ -4867,7 +6638,7 @@ export declare namespace CustomerFlowGetByIDResponse {
4867
6638
  /**
4868
6639
  * Base emotional state of the persona
4869
6640
  */
4870
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
6641
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
4871
6642
  /**
4872
6643
  * How the persona confirms information
4873
6644
  */
@@ -4953,6 +6724,12 @@ export declare namespace CustomerFlowGetByIDResponse {
4953
6724
  * Human-readable description of the persona
4954
6725
  */
4955
6726
  description?: string | null;
6727
+ /**
6728
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
6729
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
6730
+ * or set null to display the name itself.
6731
+ */
6732
+ displayName?: string | null;
4956
6733
  /**
4957
6734
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
4958
6735
  */
@@ -5016,6 +6793,7 @@ export declare namespace CustomerFlowGetByIDResponse {
5016
6793
  interface Environment {
5017
6794
  id: string;
5018
6795
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
6796
+ backgroundNoiseVolume: number;
5019
6797
  /**
5020
6798
  * Creation timestamp in ISO 8601 format
5021
6799
  */
@@ -5052,7 +6830,7 @@ export declare namespace CustomerFlowGetByIDResponse {
5052
6830
  /**
5053
6831
  * Base emotional state of the persona
5054
6832
  */
5055
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
6833
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
5056
6834
  /**
5057
6835
  * How the persona confirms information
5058
6836
  */
@@ -5138,6 +6916,12 @@ export declare namespace CustomerFlowGetByIDResponse {
5138
6916
  * Human-readable description of the persona
5139
6917
  */
5140
6918
  description?: string | null;
6919
+ /**
6920
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
6921
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
6922
+ * or set null to display the name itself.
6923
+ */
6924
+ displayName?: string | null;
5141
6925
  /**
5142
6926
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
5143
6927
  */
@@ -5266,6 +7050,7 @@ export declare namespace CustomerFlowGetByIDResponse {
5266
7050
  interface Environment {
5267
7051
  id: string;
5268
7052
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
7053
+ backgroundNoiseVolume: number;
5269
7054
  /**
5270
7055
  * Creation timestamp in ISO 8601 format
5271
7056
  */
@@ -5302,7 +7087,7 @@ export declare namespace CustomerFlowGetByIDResponse {
5302
7087
  /**
5303
7088
  * Base emotional state of the persona
5304
7089
  */
5305
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
7090
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
5306
7091
  /**
5307
7092
  * How the persona confirms information
5308
7093
  */
@@ -5388,6 +7173,12 @@ export declare namespace CustomerFlowGetByIDResponse {
5388
7173
  * Human-readable description of the persona
5389
7174
  */
5390
7175
  description?: string | null;
7176
+ /**
7177
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
7178
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
7179
+ * or set null to display the name itself.
7180
+ */
7181
+ displayName?: string | null;
5391
7182
  /**
5392
7183
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
5393
7184
  */
@@ -5447,6 +7238,7 @@ export declare namespace CustomerFlowGetByIDResponse {
5447
7238
  interface Environment {
5448
7239
  id: string;
5449
7240
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
7241
+ backgroundNoiseVolume: number;
5450
7242
  /**
5451
7243
  * Creation timestamp in ISO 8601 format
5452
7244
  */
@@ -5483,7 +7275,7 @@ export declare namespace CustomerFlowGetByIDResponse {
5483
7275
  /**
5484
7276
  * Base emotional state of the persona
5485
7277
  */
5486
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
7278
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
5487
7279
  /**
5488
7280
  * How the persona confirms information
5489
7281
  */
@@ -5569,6 +7361,12 @@ export declare namespace CustomerFlowGetByIDResponse {
5569
7361
  * Human-readable description of the persona
5570
7362
  */
5571
7363
  description?: string | null;
7364
+ /**
7365
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
7366
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
7367
+ * or set null to display the name itself.
7368
+ */
7369
+ displayName?: string | null;
5572
7370
  /**
5573
7371
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
5574
7372
  */
@@ -5658,6 +7456,7 @@ export declare namespace CustomerFlowReplaceGraphResponse {
5658
7456
  interface Environment {
5659
7457
  id: string;
5660
7458
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
7459
+ backgroundNoiseVolume: number;
5661
7460
  /**
5662
7461
  * Creation timestamp in ISO 8601 format
5663
7462
  */
@@ -5694,7 +7493,7 @@ export declare namespace CustomerFlowReplaceGraphResponse {
5694
7493
  /**
5695
7494
  * Base emotional state of the persona
5696
7495
  */
5697
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
7496
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
5698
7497
  /**
5699
7498
  * How the persona confirms information
5700
7499
  */
@@ -5780,6 +7579,12 @@ export declare namespace CustomerFlowReplaceGraphResponse {
5780
7579
  * Human-readable description of the persona
5781
7580
  */
5782
7581
  description?: string | null;
7582
+ /**
7583
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
7584
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
7585
+ * or set null to display the name itself.
7586
+ */
7587
+ displayName?: string | null;
5783
7588
  /**
5784
7589
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
5785
7590
  */
@@ -5843,6 +7648,7 @@ export declare namespace CustomerFlowReplaceGraphResponse {
5843
7648
  interface Environment {
5844
7649
  id: string;
5845
7650
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
7651
+ backgroundNoiseVolume: number;
5846
7652
  /**
5847
7653
  * Creation timestamp in ISO 8601 format
5848
7654
  */
@@ -5879,7 +7685,7 @@ export declare namespace CustomerFlowReplaceGraphResponse {
5879
7685
  /**
5880
7686
  * Base emotional state of the persona
5881
7687
  */
5882
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
7688
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
5883
7689
  /**
5884
7690
  * How the persona confirms information
5885
7691
  */
@@ -5965,6 +7771,12 @@ export declare namespace CustomerFlowReplaceGraphResponse {
5965
7771
  * Human-readable description of the persona
5966
7772
  */
5967
7773
  description?: string | null;
7774
+ /**
7775
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
7776
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
7777
+ * or set null to display the name itself.
7778
+ */
7779
+ displayName?: string | null;
5968
7780
  /**
5969
7781
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
5970
7782
  */
@@ -6024,6 +7836,7 @@ export declare namespace CustomerFlowReplaceGraphResponse {
6024
7836
  interface Environment {
6025
7837
  id: string;
6026
7838
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
7839
+ backgroundNoiseVolume: number;
6027
7840
  /**
6028
7841
  * Creation timestamp in ISO 8601 format
6029
7842
  */
@@ -6060,7 +7873,7 @@ export declare namespace CustomerFlowReplaceGraphResponse {
6060
7873
  /**
6061
7874
  * Base emotional state of the persona
6062
7875
  */
6063
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
7876
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
6064
7877
  /**
6065
7878
  * How the persona confirms information
6066
7879
  */
@@ -6146,6 +7959,12 @@ export declare namespace CustomerFlowReplaceGraphResponse {
6146
7959
  * Human-readable description of the persona
6147
7960
  */
6148
7961
  description?: string | null;
7962
+ /**
7963
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
7964
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
7965
+ * or set null to display the name itself.
7966
+ */
7967
+ displayName?: string | null;
6149
7968
  /**
6150
7969
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
6151
7970
  */
@@ -6220,6 +8039,7 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6220
8039
  interface Environment {
6221
8040
  id: string;
6222
8041
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
8042
+ backgroundNoiseVolume: number;
6223
8043
  /**
6224
8044
  * Creation timestamp in ISO 8601 format
6225
8045
  */
@@ -6256,7 +8076,7 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6256
8076
  /**
6257
8077
  * Base emotional state of the persona
6258
8078
  */
6259
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
8079
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
6260
8080
  /**
6261
8081
  * How the persona confirms information
6262
8082
  */
@@ -6342,6 +8162,12 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6342
8162
  * Human-readable description of the persona
6343
8163
  */
6344
8164
  description?: string | null;
8165
+ /**
8166
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
8167
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
8168
+ * or set null to display the name itself.
8169
+ */
8170
+ displayName?: string | null;
6345
8171
  /**
6346
8172
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
6347
8173
  */
@@ -6405,6 +8231,7 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6405
8231
  interface Environment {
6406
8232
  id: string;
6407
8233
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
8234
+ backgroundNoiseVolume: number;
6408
8235
  /**
6409
8236
  * Creation timestamp in ISO 8601 format
6410
8237
  */
@@ -6441,7 +8268,7 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6441
8268
  /**
6442
8269
  * Base emotional state of the persona
6443
8270
  */
6444
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
8271
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
6445
8272
  /**
6446
8273
  * How the persona confirms information
6447
8274
  */
@@ -6527,6 +8354,12 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6527
8354
  * Human-readable description of the persona
6528
8355
  */
6529
8356
  description?: string | null;
8357
+ /**
8358
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
8359
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
8360
+ * or set null to display the name itself.
8361
+ */
8362
+ displayName?: string | null;
6530
8363
  /**
6531
8364
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
6532
8365
  */
@@ -6586,6 +8419,7 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6586
8419
  interface Environment {
6587
8420
  id: string;
6588
8421
  backgroundNoise: 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM';
8422
+ backgroundNoiseVolume: number;
6589
8423
  /**
6590
8424
  * Creation timestamp in ISO 8601 format
6591
8425
  */
@@ -6622,7 +8456,7 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6622
8456
  /**
6623
8457
  * Base emotional state of the persona
6624
8458
  */
6625
- baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED';
8459
+ baseEmotion: 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED' | 'ANGRY' | 'ANXIOUS' | 'SAD';
6626
8460
  /**
6627
8461
  * How the persona confirms information
6628
8462
  */
@@ -6708,6 +8542,12 @@ export declare namespace CustomerFlowUpdateHappyPathResponse {
6708
8542
  * Human-readable description of the persona
6709
8543
  */
6710
8544
  description?: string | null;
8545
+ /**
8546
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
8547
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
8548
+ * or set null to display the name itself.
8549
+ */
8550
+ displayName?: string | null;
6711
8551
  /**
6712
8552
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
6713
8553
  */
@@ -6721,7 +8561,8 @@ export declare namespace CustomerFlowCreateParams {
6721
8561
  /**
6722
8562
  * The conversation, as a graph of steps. At most 100 steps across at most 25
6723
8563
  * paths. The variants come from the graph: one per path, so they are not sent
6724
- * here.
8564
+ * here. A CUSTOMER_TURN describes what the simulated customer says and the persona
8565
+ * phrases it; a CUSTOMER_VERBATIM_TURN is said word for word.
6725
8566
  */
6726
8567
  graph: Array<FlowStep>;
6727
8568
  title: string;
@@ -6741,6 +8582,29 @@ export declare namespace CustomerFlowCreateParams {
6741
8582
  */
6742
8583
  branchingMode?: 'DETERMINISTIC' | 'ADAPTIVE';
6743
8584
  description?: string | null;
8585
+ /**
8586
+ * STRICT only. What the simulated customer does when your agent does not say the
8587
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
8588
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
8589
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
8590
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
8591
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
8592
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
8593
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
8594
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
8595
+ * AGENT_TURN step can carry its own.
8596
+ */
8597
+ offScriptPolicy?: CreateScriptedCustomerFlowInput.OffScriptPolicy | null;
8598
+ /**
8599
+ * How closely a run follows the script. LOOSE (default) hands the whole script to
8600
+ * the simulated customer as one prompt; it keeps the call moving whatever your
8601
+ * agent says. STRICT runs the script as a state machine on the agent service: at
8602
+ * every agent step the simulated customer waits, silent, until your agent has said
8603
+ * the expected line, and only then moves on. Scripted flows only; STRICT needs the
8604
+ * agent-service transport and is not available on realtime models. (LOOSE is the
8605
+ * default.)
8606
+ */
8607
+ scriptAdherence?: 'LOOSE' | 'STRICT';
6744
8608
  }
6745
8609
  namespace CreateScriptedCustomerFlowInput {
6746
8610
  interface AgentExpectation {
@@ -6749,6 +8613,25 @@ export declare namespace CustomerFlowCreateParams {
6749
8613
  */
6750
8614
  prompt: string;
6751
8615
  }
8616
+ /**
8617
+ * STRICT only. What the simulated customer does when your agent does not say the
8618
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
8619
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
8620
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
8621
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
8622
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
8623
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
8624
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
8625
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
8626
+ * AGENT_TURN step can carry its own.
8627
+ */
8628
+ interface OffScriptPolicy {
8629
+ maxAttempts: number;
8630
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
8631
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
8632
+ sayLine?: string | null;
8633
+ waitSeconds?: number | null;
8634
+ }
6752
8635
  }
6753
8636
  interface CreateImprovCustomerFlowInput {
6754
8637
  /**
@@ -6827,6 +8710,29 @@ export interface CustomerFlowUpdateParams {
6827
8710
  */
6828
8711
  branchingMode?: 'DETERMINISTIC' | 'ADAPTIVE';
6829
8712
  description?: string | null;
8713
+ /**
8714
+ * STRICT only. What the simulated customer does when your agent does not say the
8715
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
8716
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
8717
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
8718
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
8719
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
8720
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
8721
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
8722
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
8723
+ * AGENT_TURN step can carry its own.
8724
+ */
8725
+ offScriptPolicy?: CustomerFlowUpdateParams.OffScriptPolicy | null;
8726
+ /**
8727
+ * Scripted flows only. How closely a run follows the script. LOOSE (default) hands
8728
+ * the whole script to the simulated customer as one prompt; it keeps the call
8729
+ * moving whatever your agent says. STRICT runs the script as a state machine on
8730
+ * the agent service: at every agent step the simulated customer waits, silent,
8731
+ * until your agent has said the expected line, and only then moves on. Scripted
8732
+ * flows only; STRICT needs the agent-service transport and is not available on
8733
+ * realtime models.
8734
+ */
8735
+ scriptAdherence?: 'LOOSE' | 'STRICT';
6830
8736
  title?: string;
6831
8737
  }
6832
8738
  export declare namespace CustomerFlowUpdateParams {
@@ -6836,6 +8742,25 @@ export declare namespace CustomerFlowUpdateParams {
6836
8742
  */
6837
8743
  prompt: string;
6838
8744
  }
8745
+ /**
8746
+ * STRICT only. What the simulated customer does when your agent does not say the
8747
+ * expected line. Each unmatched agent utterance is an attempt: `reaction` runs per
8748
+ * attempt (STAY_SILENT, REPEAT its last scripted line, RESPOND once in character
8749
+ * without moving on, or SAY `sayLine`), and `then` runs when attempts reach
8750
+ * `maxAttempts` or your agent stays silent for `waitSeconds` (HANG_UP ends the
8751
+ * call with ended reason SCRIPT_DIVERGED, HANG_UP_INVALIDATE ends it the same way
8752
+ * and invalidates the run so it is scored by nothing and counted nowhere, MOVE_ON
8753
+ * advances anyway, ADAPT hands the rest of the call to loose behaviour). Null:
8754
+ * stay silent, 3 attempts, hang up. The default for every agent step; an
8755
+ * AGENT_TURN step can carry its own.
8756
+ */
8757
+ interface OffScriptPolicy {
8758
+ maxAttempts: number;
8759
+ reaction: 'STAY_SILENT' | 'REPEAT' | 'RESPOND' | 'SAY';
8760
+ then: 'HANG_UP' | 'MOVE_ON' | 'ADAPT' | 'HANG_UP_INVALIDATE';
8761
+ sayLine?: string | null;
8762
+ waitSeconds?: number | null;
8763
+ }
6839
8764
  }
6840
8765
  export interface CustomerFlowListParams {
6841
8766
  after?: string;
@@ -6844,6 +8769,8 @@ export interface CustomerFlowListParams {
6844
8769
  searchText?: string;
6845
8770
  type?: 'SCRIPTED' | 'IMPROV' | 'VOICEMAIL';
6846
8771
  }
8772
+ export interface CustomerFlowDuplicateParams {
8773
+ }
6847
8774
  export interface CustomerFlowReplaceGraphParams {
6848
8775
  /**
6849
8776
  * The complete graph. This replaces the flow's existing steps rather than merging
@@ -6884,6 +8811,6 @@ export declare namespace CustomerFlowUpdateHappyPathParams {
6884
8811
  }
6885
8812
  }
6886
8813
  export declare namespace CustomerFlow {
6887
- export { type FlowStep as FlowStep, type CustomerFlowCreateResponse as CustomerFlowCreateResponse, type CustomerFlowUpdateResponse as CustomerFlowUpdateResponse, type CustomerFlowListResponse as CustomerFlowListResponse, type CustomerFlowDeleteResponse as CustomerFlowDeleteResponse, type CustomerFlowGetByIDResponse as CustomerFlowGetByIDResponse, type CustomerFlowReplaceGraphResponse as CustomerFlowReplaceGraphResponse, type CustomerFlowUpdateHappyPathResponse as CustomerFlowUpdateHappyPathResponse, type CustomerFlowCreateParams as CustomerFlowCreateParams, type CustomerFlowUpdateParams as CustomerFlowUpdateParams, type CustomerFlowListParams as CustomerFlowListParams, type CustomerFlowReplaceGraphParams as CustomerFlowReplaceGraphParams, type CustomerFlowUpdateHappyPathParams as CustomerFlowUpdateHappyPathParams, };
8814
+ export { type FlowStep as FlowStep, type CustomerFlowCreateResponse as CustomerFlowCreateResponse, type CustomerFlowUpdateResponse as CustomerFlowUpdateResponse, type CustomerFlowListResponse as CustomerFlowListResponse, type CustomerFlowDeleteResponse as CustomerFlowDeleteResponse, type CustomerFlowDuplicateResponse as CustomerFlowDuplicateResponse, type CustomerFlowGetByIDResponse as CustomerFlowGetByIDResponse, type CustomerFlowReplaceGraphResponse as CustomerFlowReplaceGraphResponse, type CustomerFlowUpdateHappyPathResponse as CustomerFlowUpdateHappyPathResponse, type CustomerFlowCreateParams as CustomerFlowCreateParams, type CustomerFlowUpdateParams as CustomerFlowUpdateParams, type CustomerFlowListParams as CustomerFlowListParams, type CustomerFlowDuplicateParams as CustomerFlowDuplicateParams, type CustomerFlowReplaceGraphParams as CustomerFlowReplaceGraphParams, type CustomerFlowUpdateHappyPathParams as CustomerFlowUpdateHappyPathParams, };
6888
8815
  }
6889
8816
  //# sourceMappingURL=customer-flow.d.mts.map