@pinecall/room 0.1.3 → 0.1.4

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 (66) hide show
  1. package/README.md +2 -2
  2. package/dist/code.js +1 -1
  3. package/dist/code.js.map +1 -1
  4. package/dist/karaoke.d.ts +1 -1
  5. package/dist/karaoke.d.ts.map +1 -1
  6. package/dist/karaoke.js +2 -1
  7. package/dist/karaoke.js.map +1 -1
  8. package/dist/log/fold.d.ts +2 -1
  9. package/dist/log/fold.d.ts.map +1 -1
  10. package/dist/log/fold.js +4 -1
  11. package/dist/log/fold.js.map +1 -1
  12. package/dist/log/follow.js +1 -1
  13. package/dist/log/follow.js.map +1 -1
  14. package/dist/room.d.ts +2 -1
  15. package/dist/room.d.ts.map +1 -1
  16. package/dist/room.js +3 -1
  17. package/dist/room.js.map +1 -1
  18. package/dist/rows.d.ts +1 -1
  19. package/dist/rows.d.ts.map +1 -1
  20. package/dist/rows.js +1 -0
  21. package/dist/rows.js.map +1 -1
  22. package/dist/wire/codec.d.ts +22 -0
  23. package/dist/wire/codec.d.ts.map +1 -0
  24. package/dist/wire/codec.js +23 -0
  25. package/dist/wire/codec.js.map +1 -0
  26. package/dist/wire/defs.d.ts +302 -0
  27. package/dist/wire/defs.d.ts.map +1 -0
  28. package/dist/wire/defs.js +171 -0
  29. package/dist/wire/defs.js.map +1 -0
  30. package/dist/wire/envelope.d.ts +17 -0
  31. package/dist/wire/envelope.d.ts.map +1 -0
  32. package/dist/wire/envelope.js +16 -0
  33. package/dist/wire/envelope.js.map +1 -0
  34. package/dist/wire/events-call.d.ts +422 -0
  35. package/dist/wire/events-call.d.ts.map +1 -0
  36. package/dist/wire/events-call.js +182 -0
  37. package/dist/wire/events-call.js.map +1 -0
  38. package/dist/wire/events.d.ts +923 -0
  39. package/dist/wire/events.d.ts.map +1 -0
  40. package/dist/wire/events.js +292 -0
  41. package/dist/wire/events.js.map +1 -0
  42. package/dist/wire/metrics.d.ts +366 -0
  43. package/dist/wire/metrics.d.ts.map +1 -0
  44. package/dist/wire/metrics.js +269 -0
  45. package/dist/wire/metrics.js.map +1 -0
  46. package/dist/wire/reduce.d.ts +12 -0
  47. package/dist/wire/reduce.d.ts.map +1 -0
  48. package/dist/wire/reduce.js +375 -0
  49. package/dist/wire/reduce.js.map +1 -0
  50. package/dist/wire/registry.d.ts +1395 -0
  51. package/dist/wire/registry.d.ts.map +1 -0
  52. package/dist/wire/registry.js +81 -0
  53. package/dist/wire/registry.js.map +1 -0
  54. package/dist/wire/rest.d.ts +18 -0
  55. package/dist/wire/rest.d.ts.map +1 -0
  56. package/dist/wire/rest.js +14 -0
  57. package/dist/wire/rest.js.map +1 -0
  58. package/dist/wire/room.d.ts +106 -0
  59. package/dist/wire/room.d.ts.map +1 -0
  60. package/dist/wire/room.js +73 -0
  61. package/dist/wire/room.js.map +1 -0
  62. package/dist/wire/state.d.ts +915 -0
  63. package/dist/wire/state.d.ts.map +1 -0
  64. package/dist/wire/state.js +189 -0
  65. package/dist/wire/state.js.map +1 -0
  66. package/package.json +2 -2
@@ -0,0 +1,422 @@
1
+ /** The events of a call's life and of the agent that holds it. */
2
+ import { z } from "zod";
3
+ /**
4
+ * The gateway applied an agent.configure. Live calls keep their session; the next call starts with
5
+ * the new config.
6
+ */
7
+ export declare const AgentConfiguredSchema: z.ZodObject<{
8
+ changed: z.ZodArray<z.ZodString>;
9
+ }, z.core.$strict>;
10
+ /** One socket stopped holding the agent. */
11
+ export declare const AgentDetachedSchema: z.ZodObject<{
12
+ app: z.ZodString;
13
+ env: z.ZodEnum<{
14
+ production: "production";
15
+ sandbox: "sandbox";
16
+ }>;
17
+ left: z.ZodBoolean;
18
+ }, z.core.$strict>;
19
+ /** One socket let go of its calls without cutting them. */
20
+ export declare const AgentDrainingSchema: z.ZodObject<{
21
+ app: z.ZodString;
22
+ env: z.ZodEnum<{
23
+ production: "production";
24
+ sandbox: "sandbox";
25
+ }>;
26
+ handed: z.ZodInt;
27
+ parked: z.ZodInt;
28
+ }, z.core.$strict>;
29
+ /**
30
+ * The gateway accepted an agent.register: this socket now speaks for the agent and answers its
31
+ * routes. Many sockets may hold one agent at once — a new call takes the newest of them, unless
32
+ * the caller names one by its `app` id.
33
+ */
34
+ export declare const AgentRegisteredSchema: z.ZodObject<{
35
+ routes: z.ZodArray<z.ZodObject<{
36
+ channel: z.ZodEnum<{
37
+ phone: "phone";
38
+ web: "web";
39
+ whatsapp: "whatsapp";
40
+ }>;
41
+ number: z.ZodNullable<z.ZodString>;
42
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
43
+ }, z.core.$strict>>;
44
+ app: z.ZodString;
45
+ sdk: z.ZodOptional<z.ZodNullable<z.ZodString>>;
46
+ env: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
47
+ production: "production";
48
+ sandbox: "sandbox";
49
+ }>>>;
50
+ }, z.core.$strict>;
51
+ /** The agent's state changed, in the session's own words. */
52
+ export declare const AgentStateChangedSchema: z.ZodObject<{
53
+ state: z.ZodEnum<{
54
+ idle: "idle";
55
+ initializing: "initializing";
56
+ listening: "listening";
57
+ speaking: "speaking";
58
+ thinking: "thinking";
59
+ }>;
60
+ }, z.core.$strict>;
61
+ /**
62
+ * One delta of the reply the agent is giving, never the reply so far: in a voice call one word, as
63
+ * the voice plays it, with the seconds it was aligned to; in a written call one model token. The
64
+ * reply so far is every delta of the same speech_id since the last turn.agent, joined; turn.agent
65
+ * carries the whole reply and closes it. Interim entries are ephemeral.
66
+ */
67
+ export declare const AgentTranscriptSchema: z.ZodObject<{
68
+ speech_id: z.ZodString;
69
+ text: z.ZodString;
70
+ final: z.ZodBoolean;
71
+ start: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
72
+ end: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
73
+ }, z.core.$strict>;
74
+ /**
75
+ * Media is up: the caller and the agent can hear each other, or the text session is open.
76
+ * Everything the agent says and hears comes after this.
77
+ */
78
+ export declare const CallStartedSchema: z.ZodObject<{
79
+ channel: z.ZodEnum<{
80
+ phone: "phone";
81
+ web: "web";
82
+ whatsapp: "whatsapp";
83
+ }>;
84
+ direction: z.ZodEnum<{
85
+ inbound: "inbound";
86
+ outbound: "outbound";
87
+ }>;
88
+ from: z.ZodString;
89
+ to: z.ZodString;
90
+ run: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
91
+ persona: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
92
+ accepts_when: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
93
+ declines_when: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
94
+ caller: z.ZodNullable<z.ZodObject<{
95
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
96
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
97
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
98
+ email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
99
+ external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
100
+ }, z.core.$strict>>;
101
+ started_at: z.ZodNumber;
102
+ env: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
103
+ production: "production";
104
+ sandbox: "sandbox";
105
+ }>>>;
106
+ }, z.core.$strict>;
107
+ /** A call changed hands without ending. */
108
+ export declare const CallAttachedSchema: z.ZodObject<{
109
+ app: z.ZodString;
110
+ started: z.ZodObject<{
111
+ channel: z.ZodEnum<{
112
+ phone: "phone";
113
+ web: "web";
114
+ whatsapp: "whatsapp";
115
+ }>;
116
+ direction: z.ZodEnum<{
117
+ inbound: "inbound";
118
+ outbound: "outbound";
119
+ }>;
120
+ from: z.ZodString;
121
+ to: z.ZodString;
122
+ run: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
123
+ persona: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
124
+ accepts_when: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
125
+ declines_when: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
126
+ caller: z.ZodNullable<z.ZodObject<{
127
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
128
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
129
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
130
+ email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
131
+ external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
132
+ }, z.core.$strict>>;
133
+ started_at: z.ZodNumber;
134
+ env: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
135
+ production: "production";
136
+ sandbox: "sandbox";
137
+ }>>>;
138
+ }, z.core.$strict>;
139
+ state: z.ZodRecord<z.ZodString, z.ZodUnknown>;
140
+ seq: z.ZodInt;
141
+ claimed: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
142
+ }, z.core.$strict>;
143
+ /** The call was bound to a page's code. */
144
+ export declare const CallClaimedSchema: z.ZodObject<{
145
+ code: z.ZodString;
146
+ via: z.ZodEnum<{
147
+ agent: "agent";
148
+ keypad: "keypad";
149
+ }>;
150
+ }, z.core.$strict>;
151
+ /**
152
+ * The platform is placing an outbound call and the far end has not answered yet. The first entry
153
+ * of an outbound call's log.
154
+ */
155
+ export declare const CallDialingSchema: z.ZodObject<{
156
+ channel: z.ZodEnum<{
157
+ phone: "phone";
158
+ web: "web";
159
+ whatsapp: "whatsapp";
160
+ }>;
161
+ from: z.ZodString;
162
+ to: z.ZodString;
163
+ run: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
164
+ caller: z.ZodNullable<z.ZodObject<{
165
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
166
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
167
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
168
+ email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
169
+ external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
170
+ }, z.core.$strict>>;
171
+ external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
172
+ asked_by: z.ZodOptional<z.ZodNullable<z.ZodString>>;
173
+ }, z.core.$strict>;
174
+ /** The call is over. Nothing about the conversation follows; call.summary still does. */
175
+ export declare const CallEndedSchema: z.ZodObject<{
176
+ reason: z.ZodEnum<{
177
+ agent_hung_up: "agent_hung_up";
178
+ app_detached: "app_detached";
179
+ busy: "busy";
180
+ caller_hung_up: "caller_hung_up";
181
+ dial_failed: "dial_failed";
182
+ drained: "drained";
183
+ error: "error";
184
+ no_answer: "no_answer";
185
+ supervisor_ended: "supervisor_ended";
186
+ timeout: "timeout";
187
+ transferred: "transferred";
188
+ }>;
189
+ ended_by: z.ZodEnum<{
190
+ agent: "agent";
191
+ caller: "caller";
192
+ platform: "platform";
193
+ supervisor: "supervisor";
194
+ }>;
195
+ ended_at: z.ZodNumber;
196
+ duration_s: z.ZodNumber;
197
+ }, z.core.$strict>;
198
+ /**
199
+ * The line's hold and mute flags after one of them changed. Both are stated so a reader never has
200
+ * to remember the other.
201
+ */
202
+ export declare const CallLineSchema: z.ZodObject<{
203
+ held: z.ZodBoolean;
204
+ muted: z.ZodBoolean;
205
+ }, z.core.$strict>;
206
+ /**
207
+ * An inbound call is offered to this agent and has not been answered yet. The first entry of an
208
+ * inbound call's log.
209
+ */
210
+ export declare const CallRingingSchema: z.ZodObject<{
211
+ channel: z.ZodEnum<{
212
+ phone: "phone";
213
+ web: "web";
214
+ whatsapp: "whatsapp";
215
+ }>;
216
+ from: z.ZodString;
217
+ to: z.ZodString;
218
+ route: z.ZodObject<{
219
+ channel: z.ZodEnum<{
220
+ phone: "phone";
221
+ web: "web";
222
+ whatsapp: "whatsapp";
223
+ }>;
224
+ number: z.ZodNullable<z.ZodString>;
225
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
226
+ }, z.core.$strict>;
227
+ run: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodString>>>;
228
+ caller: z.ZodNullable<z.ZodObject<{
229
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
230
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
231
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
232
+ email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
233
+ external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
234
+ }, z.core.$strict>>;
235
+ external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
236
+ }, z.core.$strict>;
237
+ /**
238
+ * The last entry of a call: what the judges said about it at hang-up, one row per judge. Written
239
+ * after call.summary, and the entry the log seals on.
240
+ */
241
+ export declare const CallScoreSchema: z.ZodObject<{
242
+ passed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
243
+ not_judged: z.ZodOptional<z.ZodNullable<z.ZodString>>;
244
+ judges: z.ZodArray<z.ZodObject<{
245
+ name: z.ZodString;
246
+ verdict: z.ZodEnum<{
247
+ broken: "broken";
248
+ deferred: "deferred";
249
+ held: "held";
250
+ skipped: "skipped";
251
+ }>;
252
+ criteria: z.ZodString;
253
+ reason: z.ZodString;
254
+ evidence: z.ZodObject<{
255
+ seqs: z.ZodArray<z.ZodInt>;
256
+ said: z.ZodOptional<z.ZodNullable<z.ZodString>>;
257
+ }, z.core.$strict>;
258
+ }, z.core.$strict>>;
259
+ panel: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
260
+ judge_calls: z.ZodInt;
261
+ judge_cost_usd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
262
+ }, z.core.$strict>;
263
+ /**
264
+ * What the call was about, how it went, what it consumed and what that cost. Written after
265
+ * call.ended, once memory and pricing are done; call.score follows it and seals the log.
266
+ */
267
+ export declare const CallSummarySchema: z.ZodObject<{
268
+ reason: z.ZodEnum<{
269
+ agent_hung_up: "agent_hung_up";
270
+ app_detached: "app_detached";
271
+ busy: "busy";
272
+ caller_hung_up: "caller_hung_up";
273
+ dial_failed: "dial_failed";
274
+ drained: "drained";
275
+ error: "error";
276
+ no_answer: "no_answer";
277
+ supervisor_ended: "supervisor_ended";
278
+ timeout: "timeout";
279
+ transferred: "transferred";
280
+ }>;
281
+ outcome: z.ZodString;
282
+ duration_s: z.ZodNumber;
283
+ turns: z.ZodInt;
284
+ usage: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
285
+ type: z.ZodLiteral<"llm_usage">;
286
+ provider: z.ZodString;
287
+ model: z.ZodString;
288
+ input_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
289
+ input_cached_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
290
+ input_cache_creation_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
291
+ input_audio_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
292
+ input_cached_audio_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
293
+ input_text_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
294
+ input_cached_text_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
295
+ input_image_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
296
+ input_cached_image_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
297
+ output_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
298
+ output_audio_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
299
+ output_text_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
300
+ output_reasoning_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
301
+ session_duration: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
302
+ }, z.core.$strict>, z.ZodObject<{
303
+ type: z.ZodLiteral<"tts_usage">;
304
+ provider: z.ZodString;
305
+ model: z.ZodString;
306
+ input_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
307
+ output_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
308
+ characters_count: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
309
+ audio_duration: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
310
+ }, z.core.$strict>, z.ZodObject<{
311
+ type: z.ZodLiteral<"stt_usage">;
312
+ provider: z.ZodString;
313
+ model: z.ZodString;
314
+ input_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
315
+ output_tokens: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
316
+ audio_duration: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
317
+ }, z.core.$strict>, z.ZodObject<{
318
+ type: z.ZodLiteral<"interruption_usage">;
319
+ provider: z.ZodString;
320
+ model: z.ZodString;
321
+ total_requests: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
322
+ }, z.core.$strict>, z.ZodObject<{
323
+ type: z.ZodLiteral<"eot_usage">;
324
+ provider: z.ZodString;
325
+ model: z.ZodString;
326
+ total_requests: z.ZodOptional<z.ZodNullable<z.ZodInt>>;
327
+ }, z.core.$strict>], "type">>;
328
+ cost: z.ZodObject<{
329
+ usd: z.ZodNumber;
330
+ rows: z.ZodArray<z.ZodObject<{
331
+ provider: z.ZodString;
332
+ model: z.ZodString;
333
+ unit: z.ZodEnum<{
334
+ audio_seconds: "audio_seconds";
335
+ cache_creation_tokens: "cache_creation_tokens";
336
+ cached_input_tokens: "cached_input_tokens";
337
+ characters: "characters";
338
+ input_tokens: "input_tokens";
339
+ minutes: "minutes";
340
+ output_tokens: "output_tokens";
341
+ requests: "requests";
342
+ session_seconds: "session_seconds";
343
+ }>;
344
+ quantity: z.ZodNumber;
345
+ unit_price_usd: z.ZodNumber;
346
+ usd: z.ZodNumber;
347
+ }, z.core.$strict>>;
348
+ unpriced: z.ZodArray<z.ZodObject<{
349
+ provider: z.ZodString;
350
+ model: z.ZodString;
351
+ }, z.core.$strict>>;
352
+ }, z.core.$strict>;
353
+ recording: z.ZodOptional<z.ZodNullable<z.ZodString>>;
354
+ }, z.core.$strict>;
355
+ /** A transfer asked for by the agent or a supervisor finished, one way or the other. */
356
+ export declare const CallTransferredSchema: z.ZodObject<{
357
+ to: z.ZodString;
358
+ mode: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodEnum<{
359
+ cold: "cold";
360
+ warm: "warm";
361
+ }>>>>;
362
+ ok: z.ZodBoolean;
363
+ error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
364
+ }, z.core.$strict>;
365
+ /**
366
+ * Somebody asked to be called back: a phone caller the overflow agent answered, a web visitor who
367
+ * left a number at the widget, or a caller who asked the agent for one (call.callback). Written
368
+ * into the agent's own log; the tenant's app reads it and places the call.
369
+ */
370
+ export declare const CallbackRequestedSchema: z.ZodObject<{
371
+ channel: z.ZodEnum<{
372
+ phone: "phone";
373
+ web: "web";
374
+ whatsapp: "whatsapp";
375
+ }>;
376
+ number: z.ZodString;
377
+ via: z.ZodEnum<{
378
+ agent: "agent";
379
+ overflow: "overflow";
380
+ widget: "widget";
381
+ }>;
382
+ call: z.ZodNullable<z.ZodString>;
383
+ when: z.ZodOptional<z.ZodNullable<z.ZodString>>;
384
+ note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
385
+ contact: z.ZodNullable<z.ZodObject<{
386
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
387
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
388
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
389
+ email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
390
+ external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
391
+ }, z.core.$strict>>;
392
+ }, z.core.$strict>;
393
+ /**
394
+ * The agent's reply is over and this is what was said. With it, everything the session measured
395
+ * about the reply.
396
+ */
397
+ export declare const AgentTurnEndedSchema: z.ZodObject<{
398
+ speech_id: z.ZodString;
399
+ item_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
400
+ text: z.ZodString;
401
+ interrupted: z.ZodBoolean;
402
+ metrics: z.ZodObject<{
403
+ started_speaking_at: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
404
+ stopped_speaking_at: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
405
+ llm_node_ttft: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
406
+ llm_node_tps: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
407
+ llm_node_ttfs: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
408
+ tts_node_ttfb: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
409
+ playback_latency: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
410
+ e2e_latency: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
411
+ provider_request_ids: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
412
+ llm_metadata: z.ZodOptional<z.ZodNullable<z.ZodObject<{
413
+ model_name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
414
+ model_provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
415
+ }, z.core.$strict>>>;
416
+ tts_metadata: z.ZodOptional<z.ZodNullable<z.ZodObject<{
417
+ model_name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
418
+ model_provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
419
+ }, z.core.$strict>>>;
420
+ }, z.core.$strict>;
421
+ }, z.core.$strict>;
422
+ //# sourceMappingURL=events-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-call.d.ts","sourceRoot":"","sources":["../../src/wire/events-call.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;kBAEhC,CAAC;AAEH,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB;;;;;;;kBAI9B,CAAC;AAEH,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB;;;;;;;;kBAK9B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;kBAKhC,CAAC;AAEH,6DAA6D;AAC7D,eAAO,MAAM,uBAAuB;;;;;;;;kBAElC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;;;;kBAMhC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAY5B,CAAC;AAEH,2CAA2C;AAC3C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAM7B,CAAC;AAEH,2CAA2C;AAC3C,eAAO,MAAM,iBAAiB;;;;;;kBAG5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;kBAQ5B,CAAC;AAEH,yFAAyF;AACzF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;kBAK1B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc;;;kBAGzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQ5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;kBAO1B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQ5B,CAAC;AAEH,wFAAwF;AACxF,eAAO,MAAM,qBAAqB;;;;;;;;kBAKhC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;kBAQlC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;kBAM/B,CAAC"}
@@ -0,0 +1,182 @@
1
+ /** The events of a call's life and of the agent that holds it. */
2
+ import { z } from "zod";
3
+ import { AgentStateSchema, ChannelSchema, ContactSchema, CostSchema, DirectionSchema, EndedBySchema, EndReasonSchema, EnvSchema, RouteSchema, TransferModeSchema, } from "./defs.js";
4
+ import { JudgmentSchema } from "./events.js";
5
+ import { AgentTurnMetricsSchema, ModelUsageSchema } from "./metrics.js";
6
+ /**
7
+ * The gateway applied an agent.configure. Live calls keep their session; the next call starts with
8
+ * the new config.
9
+ */
10
+ export const AgentConfiguredSchema = z.strictObject({
11
+ changed: z.array(z.string()),
12
+ });
13
+ /** One socket stopped holding the agent. */
14
+ export const AgentDetachedSchema = z.strictObject({
15
+ app: z.string(),
16
+ env: EnvSchema,
17
+ left: z.boolean(),
18
+ });
19
+ /** One socket let go of its calls without cutting them. */
20
+ export const AgentDrainingSchema = z.strictObject({
21
+ app: z.string(),
22
+ env: EnvSchema,
23
+ handed: z.int(),
24
+ parked: z.int(),
25
+ });
26
+ /**
27
+ * The gateway accepted an agent.register: this socket now speaks for the agent and answers its
28
+ * routes. Many sockets may hold one agent at once — a new call takes the newest of them, unless
29
+ * the caller names one by its `app` id.
30
+ */
31
+ export const AgentRegisteredSchema = z.strictObject({
32
+ routes: z.array(RouteSchema),
33
+ app: z.string(),
34
+ sdk: z.string().nullish(),
35
+ env: EnvSchema.nullish(),
36
+ });
37
+ /** The agent's state changed, in the session's own words. */
38
+ export const AgentStateChangedSchema = z.strictObject({
39
+ state: AgentStateSchema,
40
+ });
41
+ /**
42
+ * One delta of the reply the agent is giving, never the reply so far: in a voice call one word, as
43
+ * the voice plays it, with the seconds it was aligned to; in a written call one model token. The
44
+ * reply so far is every delta of the same speech_id since the last turn.agent, joined; turn.agent
45
+ * carries the whole reply and closes it. Interim entries are ephemeral.
46
+ */
47
+ export const AgentTranscriptSchema = z.strictObject({
48
+ speech_id: z.string(),
49
+ text: z.string(),
50
+ final: z.boolean(),
51
+ start: z.number().nullish(),
52
+ end: z.number().nullish(),
53
+ });
54
+ /**
55
+ * Media is up: the caller and the agent can hear each other, or the text session is open.
56
+ * Everything the agent says and hears comes after this.
57
+ */
58
+ export const CallStartedSchema = z.strictObject({
59
+ channel: ChannelSchema,
60
+ direction: DirectionSchema,
61
+ from: z.string(),
62
+ to: z.string(),
63
+ run: z.string().nullable().nullish(),
64
+ persona: z.string().nullable().nullish(),
65
+ accepts_when: z.string().nullable().nullish(),
66
+ declines_when: z.string().nullable().nullish(),
67
+ caller: ContactSchema.nullable(),
68
+ started_at: z.number(),
69
+ env: EnvSchema.nullish(),
70
+ });
71
+ /** A call changed hands without ending. */
72
+ export const CallAttachedSchema = z.strictObject({
73
+ app: z.string(),
74
+ started: CallStartedSchema,
75
+ state: z.record(z.string(), z.unknown()),
76
+ seq: z.int(),
77
+ claimed: z.string().nullable().nullish(),
78
+ });
79
+ /** The call was bound to a page's code. */
80
+ export const CallClaimedSchema = z.strictObject({
81
+ code: z.string(),
82
+ via: z.enum(["keypad", "agent"]),
83
+ });
84
+ /**
85
+ * The platform is placing an outbound call and the far end has not answered yet. The first entry
86
+ * of an outbound call's log.
87
+ */
88
+ export const CallDialingSchema = z.strictObject({
89
+ channel: ChannelSchema,
90
+ from: z.string(),
91
+ to: z.string(),
92
+ run: z.string().nullable().nullish(),
93
+ caller: ContactSchema.nullable(),
94
+ external_id: z.string().nullish(),
95
+ asked_by: z.string().nullish(),
96
+ });
97
+ /** The call is over. Nothing about the conversation follows; call.summary still does. */
98
+ export const CallEndedSchema = z.strictObject({
99
+ reason: EndReasonSchema,
100
+ ended_by: EndedBySchema,
101
+ ended_at: z.number(),
102
+ duration_s: z.number(),
103
+ });
104
+ /**
105
+ * The line's hold and mute flags after one of them changed. Both are stated so a reader never has
106
+ * to remember the other.
107
+ */
108
+ export const CallLineSchema = z.strictObject({
109
+ held: z.boolean(),
110
+ muted: z.boolean(),
111
+ });
112
+ /**
113
+ * An inbound call is offered to this agent and has not been answered yet. The first entry of an
114
+ * inbound call's log.
115
+ */
116
+ export const CallRingingSchema = z.strictObject({
117
+ channel: ChannelSchema,
118
+ from: z.string(),
119
+ to: z.string(),
120
+ route: RouteSchema,
121
+ run: z.string().nullable().nullish(),
122
+ caller: ContactSchema.nullable(),
123
+ external_id: z.string().nullish(),
124
+ });
125
+ /**
126
+ * The last entry of a call: what the judges said about it at hang-up, one row per judge. Written
127
+ * after call.summary, and the entry the log seals on.
128
+ */
129
+ export const CallScoreSchema = z.strictObject({
130
+ passed: z.boolean().nullish(),
131
+ not_judged: z.string().nullish(),
132
+ judges: z.array(JudgmentSchema),
133
+ panel: z.array(z.string()).nullish(),
134
+ judge_calls: z.int(),
135
+ judge_cost_usd: z.number().nullish(),
136
+ });
137
+ /**
138
+ * What the call was about, how it went, what it consumed and what that cost. Written after
139
+ * call.ended, once memory and pricing are done; call.score follows it and seals the log.
140
+ */
141
+ export const CallSummarySchema = z.strictObject({
142
+ reason: EndReasonSchema,
143
+ outcome: z.string(),
144
+ duration_s: z.number(),
145
+ turns: z.int(),
146
+ usage: z.array(ModelUsageSchema),
147
+ cost: CostSchema,
148
+ recording: z.string().nullish(),
149
+ });
150
+ /** A transfer asked for by the agent or a supervisor finished, one way or the other. */
151
+ export const CallTransferredSchema = z.strictObject({
152
+ to: z.string(),
153
+ mode: TransferModeSchema.nullable().nullish(),
154
+ ok: z.boolean(),
155
+ error: z.string().nullish(),
156
+ });
157
+ /**
158
+ * Somebody asked to be called back: a phone caller the overflow agent answered, a web visitor who
159
+ * left a number at the widget, or a caller who asked the agent for one (call.callback). Written
160
+ * into the agent's own log; the tenant's app reads it and places the call.
161
+ */
162
+ export const CallbackRequestedSchema = z.strictObject({
163
+ channel: ChannelSchema,
164
+ number: z.string(),
165
+ via: z.enum(["overflow", "widget", "agent"]),
166
+ call: z.string().nullable(),
167
+ when: z.string().nullish(),
168
+ note: z.string().nullish(),
169
+ contact: ContactSchema.nullable(),
170
+ });
171
+ /**
172
+ * The agent's reply is over and this is what was said. With it, everything the session measured
173
+ * about the reply.
174
+ */
175
+ export const AgentTurnEndedSchema = z.strictObject({
176
+ speech_id: z.string(),
177
+ item_id: z.string().nullish(),
178
+ text: z.string(),
179
+ interrupted: z.boolean(),
180
+ metrics: AgentTurnMetricsSchema,
181
+ });
182
+ //# sourceMappingURL=events-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-call.js","sourceRoot":"","sources":["../../src/wire/events-call.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,YAAY,CAAC;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;CAClB,CAAC,CAAC;AAEH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,YAAY,CAAC;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,SAAS;IACd,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;IACf,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;CAChB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAC5B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IACzB,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE;CACzB,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,YAAY,CAAC;IACpD,KAAK,EAAE,gBAAgB;CACxB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAC1B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9C,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;IACxC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;IAC7C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;IAC9C,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE;CACzB,CAAC,CAAC;AAEH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC/C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,OAAO,EAAE,iBAAiB;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;IACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;CACzC,CAAC,CAAC;AAEH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9C,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAC/B,CAAC,CAAC;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY,CAAC;IAC5C,MAAM,EAAE,eAAe;IACvB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;CACnB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9C,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,WAAW;IAClB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAClC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE;IACpB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CACrC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9C,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;IAChC,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAChC,CAAC,CAAC;AAEH,wFAAwF;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAClD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;IAC7C,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAC5B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,YAAY,CAAC;IACpD,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC1B,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,YAAY,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;IACxB,OAAO,EAAE,sBAAsB;CAChC,CAAC,CAAC"}