@chanl-ai/sdk 2.0.1

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 (137) hide show
  1. package/dist/adapters/openai.d.ts +106 -0
  2. package/dist/adapters/openai.d.ts.map +1 -0
  3. package/dist/adapters/openai.js +185 -0
  4. package/dist/adapters/openai.js.map +1 -0
  5. package/dist/client.d.ts +74 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +293 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/errors/index.d.ts +179 -0
  10. package/dist/errors/index.d.ts.map +1 -0
  11. package/dist/errors/index.js +319 -0
  12. package/dist/errors/index.js.map +1 -0
  13. package/dist/index.d.ts +38 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +76 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/live/index.d.ts +9 -0
  18. package/dist/live/index.d.ts.map +1 -0
  19. package/dist/live/index.js +16 -0
  20. package/dist/live/index.js.map +1 -0
  21. package/dist/live/live-call.d.ts +48 -0
  22. package/dist/live/live-call.d.ts.map +1 -0
  23. package/dist/live/live-call.js +148 -0
  24. package/dist/live/live-call.js.map +1 -0
  25. package/dist/live/live-chat.d.ts +71 -0
  26. package/dist/live/live-chat.d.ts.map +1 -0
  27. package/dist/live/live-chat.js +95 -0
  28. package/dist/live/live-chat.js.map +1 -0
  29. package/dist/live/live-execution.d.ts +55 -0
  30. package/dist/live/live-execution.d.ts.map +1 -0
  31. package/dist/live/live-execution.js +170 -0
  32. package/dist/live/live-execution.js.map +1 -0
  33. package/dist/live/typed-emitter.d.ts +15 -0
  34. package/dist/live/typed-emitter.d.ts.map +1 -0
  35. package/dist/live/typed-emitter.js +40 -0
  36. package/dist/live/typed-emitter.js.map +1 -0
  37. package/dist/live/types.d.ts +24 -0
  38. package/dist/live/types.d.ts.map +1 -0
  39. package/dist/live/types.js +6 -0
  40. package/dist/live/types.js.map +1 -0
  41. package/dist/modules/agents.d.ts +378 -0
  42. package/dist/modules/agents.d.ts.map +1 -0
  43. package/dist/modules/agents.js +259 -0
  44. package/dist/modules/agents.js.map +1 -0
  45. package/dist/modules/alerts.d.ts +43 -0
  46. package/dist/modules/alerts.d.ts.map +1 -0
  47. package/dist/modules/alerts.js +56 -0
  48. package/dist/modules/alerts.js.map +1 -0
  49. package/dist/modules/audio.d.ts +47 -0
  50. package/dist/modules/audio.d.ts.map +1 -0
  51. package/dist/modules/audio.js +75 -0
  52. package/dist/modules/audio.js.map +1 -0
  53. package/dist/modules/auth.d.ts +76 -0
  54. package/dist/modules/auth.d.ts.map +1 -0
  55. package/dist/modules/auth.js +59 -0
  56. package/dist/modules/auth.js.map +1 -0
  57. package/dist/modules/calls.d.ts +825 -0
  58. package/dist/modules/calls.d.ts.map +1 -0
  59. package/dist/modules/calls.js +398 -0
  60. package/dist/modules/calls.js.map +1 -0
  61. package/dist/modules/chat.d.ts +165 -0
  62. package/dist/modules/chat.d.ts.map +1 -0
  63. package/dist/modules/chat.js +169 -0
  64. package/dist/modules/chat.js.map +1 -0
  65. package/dist/modules/health.d.ts +45 -0
  66. package/dist/modules/health.d.ts.map +1 -0
  67. package/dist/modules/health.js +22 -0
  68. package/dist/modules/health.js.map +1 -0
  69. package/dist/modules/knowledge.d.ts +202 -0
  70. package/dist/modules/knowledge.d.ts.map +1 -0
  71. package/dist/modules/knowledge.js +147 -0
  72. package/dist/modules/knowledge.js.map +1 -0
  73. package/dist/modules/mcp.d.ts +140 -0
  74. package/dist/modules/mcp.d.ts.map +1 -0
  75. package/dist/modules/mcp.js +110 -0
  76. package/dist/modules/mcp.js.map +1 -0
  77. package/dist/modules/memory.d.ts +163 -0
  78. package/dist/modules/memory.d.ts.map +1 -0
  79. package/dist/modules/memory.js +208 -0
  80. package/dist/modules/memory.js.map +1 -0
  81. package/dist/modules/personas.d.ts +168 -0
  82. package/dist/modules/personas.d.ts.map +1 -0
  83. package/dist/modules/personas.js +106 -0
  84. package/dist/modules/personas.js.map +1 -0
  85. package/dist/modules/prompts.d.ts +128 -0
  86. package/dist/modules/prompts.d.ts.map +1 -0
  87. package/dist/modules/prompts.js +93 -0
  88. package/dist/modules/prompts.js.map +1 -0
  89. package/dist/modules/scenarios.d.ts +294 -0
  90. package/dist/modules/scenarios.d.ts.map +1 -0
  91. package/dist/modules/scenarios.js +349 -0
  92. package/dist/modules/scenarios.js.map +1 -0
  93. package/dist/modules/scorecard.d.ts +642 -0
  94. package/dist/modules/scorecard.d.ts.map +1 -0
  95. package/dist/modules/scorecard.js +327 -0
  96. package/dist/modules/scorecard.js.map +1 -0
  97. package/dist/modules/tools.d.ts +222 -0
  98. package/dist/modules/tools.d.ts.map +1 -0
  99. package/dist/modules/tools.js +302 -0
  100. package/dist/modules/tools.js.map +1 -0
  101. package/dist/modules/toolsets.d.ts +173 -0
  102. package/dist/modules/toolsets.d.ts.map +1 -0
  103. package/dist/modules/toolsets.js +216 -0
  104. package/dist/modules/toolsets.js.map +1 -0
  105. package/dist/modules/transcript.d.ts +60 -0
  106. package/dist/modules/transcript.d.ts.map +1 -0
  107. package/dist/modules/transcript.js +69 -0
  108. package/dist/modules/transcript.js.map +1 -0
  109. package/dist/modules/workspace.d.ts +48 -0
  110. package/dist/modules/workspace.d.ts.map +1 -0
  111. package/dist/modules/workspace.js +49 -0
  112. package/dist/modules/workspace.js.map +1 -0
  113. package/dist/types/api.d.ts +8 -0
  114. package/dist/types/api.d.ts.map +1 -0
  115. package/dist/types/api.js +25 -0
  116. package/dist/types/api.js.map +1 -0
  117. package/dist/types/config.d.ts +70 -0
  118. package/dist/types/config.d.ts.map +1 -0
  119. package/dist/types/config.js +3 -0
  120. package/dist/types/config.js.map +1 -0
  121. package/dist/types/memory.d.ts +243 -0
  122. package/dist/types/memory.d.ts.map +1 -0
  123. package/dist/types/memory.js +9 -0
  124. package/dist/types/memory.js.map +1 -0
  125. package/dist/types/tool-calls.d.ts +61 -0
  126. package/dist/types/tool-calls.d.ts.map +1 -0
  127. package/dist/types/tool-calls.js +9 -0
  128. package/dist/types/tool-calls.js.map +1 -0
  129. package/dist/types/tools.d.ts +321 -0
  130. package/dist/types/tools.d.ts.map +1 -0
  131. package/dist/types/tools.js +9 -0
  132. package/dist/types/tools.js.map +1 -0
  133. package/dist/types/toolsets.d.ts +149 -0
  134. package/dist/types/toolsets.d.ts.map +1 -0
  135. package/dist/types/toolsets.js +8 -0
  136. package/dist/types/toolsets.js.map +1 -0
  137. package/package.json +60 -0
@@ -0,0 +1,294 @@
1
+ /**
2
+ * ScenariosModule - SDK module for scenario management
3
+ *
4
+ * Provides CRUD operations for test scenarios.
5
+ */
6
+ import { ChanlSDK } from '../client';
7
+ import { ApiResponse } from '../types/config';
8
+ import { ToolCall } from '../types/tool-calls';
9
+ export interface Scenario {
10
+ id: string;
11
+ name: string;
12
+ description?: string;
13
+ prompt?: string;
14
+ category?: string;
15
+ difficulty?: 'easy' | 'medium' | 'hard';
16
+ status?: 'draft' | 'active' | 'paused' | 'completed' | 'archived';
17
+ tags?: string[];
18
+ agentId?: string;
19
+ workspaceId: string;
20
+ createdBy?: string;
21
+ createdAt: string;
22
+ updatedAt: string;
23
+ }
24
+ export interface ScenarioFilters {
25
+ agentId?: string;
26
+ type?: string;
27
+ status?: string;
28
+ category?: string;
29
+ difficulty?: string;
30
+ tags?: string;
31
+ createdBy?: string;
32
+ page?: number;
33
+ limit?: number;
34
+ sortBy?: string;
35
+ sortOrder?: 'asc' | 'desc';
36
+ enriched?: boolean;
37
+ }
38
+ export interface ScenarioListResponse {
39
+ scenarios: Scenario[];
40
+ pagination: {
41
+ total: number;
42
+ page: number;
43
+ limit: number;
44
+ pages: number;
45
+ };
46
+ }
47
+ export interface ScenarioResponse {
48
+ scenario: Scenario;
49
+ }
50
+ export interface ExecuteScenarioOptions {
51
+ agentId?: string;
52
+ triggeredBy?: string;
53
+ phoneNumber?: string;
54
+ parameters?: Record<string, unknown>;
55
+ maxDurationSeconds?: number;
56
+ dryRun?: boolean;
57
+ simulationMode?: 'text' | 'websocket' | 'phone';
58
+ }
59
+ export interface ScenarioExecution {
60
+ id: string;
61
+ executionId?: string;
62
+ scenarioId: string;
63
+ agentId?: string;
64
+ status: 'queued' | 'running' | 'completed' | 'failed' | 'timeout' | 'cancelled';
65
+ triggeredBy?: string;
66
+ startTime?: string;
67
+ endTime?: string;
68
+ duration?: number;
69
+ overallScore?: number;
70
+ stepResults?: Array<{
71
+ stepId: string;
72
+ status: string;
73
+ actualResponse?: string;
74
+ expectedResponse?: string;
75
+ score?: number;
76
+ duration?: number;
77
+ toolCalls?: ToolCall[];
78
+ errorMessages?: string[];
79
+ }>;
80
+ callDetails?: {
81
+ callId?: string;
82
+ phoneNumber?: string;
83
+ recordingUrl?: string;
84
+ transcription?: string;
85
+ };
86
+ metrics?: {
87
+ responseTime?: number;
88
+ accuracy?: number;
89
+ completion?: number;
90
+ satisfaction?: number;
91
+ };
92
+ errorMessages?: string[];
93
+ createdAt?: string;
94
+ updatedAt?: string;
95
+ }
96
+ export interface ExecuteScenarioResponse {
97
+ execution: ScenarioExecution;
98
+ executionId?: string;
99
+ message?: string;
100
+ }
101
+ export interface ScenarioExecutionFilters {
102
+ scenarioId?: string;
103
+ agentId?: string;
104
+ status?: string;
105
+ triggeredBy?: string;
106
+ dateFrom?: string;
107
+ dateTo?: string;
108
+ page?: number;
109
+ limit?: number;
110
+ sortBy?: string;
111
+ sortOrder?: 'asc' | 'desc';
112
+ }
113
+ export interface ScenarioExecutionListResponse {
114
+ executions: ScenarioExecution[];
115
+ total: number;
116
+ pagination?: {
117
+ page: number;
118
+ limit: number;
119
+ pages: number;
120
+ };
121
+ }
122
+ export interface ExecutionResponse {
123
+ execution: ScenarioExecution;
124
+ }
125
+ export interface SimulationsResponse {
126
+ simulations: ScenarioExecution[];
127
+ }
128
+ export interface BatchExecutionOptions {
129
+ agentId: string;
130
+ minScore?: number;
131
+ parallel?: number;
132
+ mode?: 'text' | 'phone';
133
+ }
134
+ export interface BatchScenarioResult {
135
+ scenarioId: string;
136
+ scenarioName: string;
137
+ executionId: string;
138
+ status: 'completed' | 'failed' | 'error';
139
+ score: number;
140
+ duration: number;
141
+ toolCallCount: number;
142
+ passed: boolean;
143
+ }
144
+ export interface BatchResult {
145
+ agentId: string;
146
+ totalScenarios: number;
147
+ passed: number;
148
+ failed: number;
149
+ averageScore: number;
150
+ allPassed: boolean;
151
+ minScore: number;
152
+ results: BatchScenarioResult[];
153
+ }
154
+ import { LiveExecution } from '../live/live-execution';
155
+ import type { LiveOptions } from '../live/types';
156
+ export declare class ScenariosModule {
157
+ private sdk;
158
+ constructor(sdk: ChanlSDK);
159
+ /**
160
+ * List all scenarios with optional filters
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * const { data } = await sdk.scenarios.list();
165
+ * console.log(data.scenarios);
166
+ * ```
167
+ */
168
+ list(filters?: ScenarioFilters): Promise<ApiResponse<ScenarioListResponse>>;
169
+ /**
170
+ * Get a single scenario by ID
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * const { data } = await sdk.scenarios.get('scenario_abc');
175
+ * console.log(data.scenario.name);
176
+ * ```
177
+ */
178
+ get(id: string): Promise<ApiResponse<ScenarioResponse>>;
179
+ /**
180
+ * Execute a scenario
181
+ *
182
+ * Queues a scenario for execution against an agent. The execution runs
183
+ * asynchronously - use getExecution() to poll for status.
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * // Run with default settings
188
+ * const { data } = await sdk.scenarios.run('scenario_abc');
189
+ * console.log('Execution started:', data.executionId);
190
+ *
191
+ * // Run with specific agent and phone call mode
192
+ * const { data } = await sdk.scenarios.run('scenario_abc', {
193
+ * agentId: 'agent_xyz',
194
+ * simulationMode: 'phone',
195
+ * phoneNumber: '+14155551234'
196
+ * });
197
+ * ```
198
+ */
199
+ run(scenarioId: string, options?: ExecuteScenarioOptions): Promise<ApiResponse<ExecuteScenarioResponse>>;
200
+ /**
201
+ * Get a specific execution by ID
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * const { data } = await sdk.scenarios.getExecution('exec_abc');
206
+ * console.log('Status:', data.execution.status);
207
+ * console.log('Score:', data.execution.overallScore);
208
+ * ```
209
+ */
210
+ getExecution(executionId: string): Promise<ApiResponse<ExecutionResponse>>;
211
+ /**
212
+ * List scenario executions with optional filters
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * // List all executions
217
+ * const { data } = await sdk.scenarios.getExecutions();
218
+ *
219
+ * // Filter by scenario and status
220
+ * const { data } = await sdk.scenarios.getExecutions({
221
+ * scenarioId: 'scenario_abc',
222
+ * status: 'completed',
223
+ * limit: 10
224
+ * });
225
+ * ```
226
+ */
227
+ getExecutions(filters?: ScenarioExecutionFilters): Promise<ApiResponse<ScenarioExecutionListResponse>>;
228
+ /**
229
+ * Get simulation history for a scenario (last N runs)
230
+ *
231
+ * @example
232
+ * ```typescript
233
+ * // Get last 10 simulations (default)
234
+ * const { data } = await sdk.scenarios.getSimulations('scenario_abc');
235
+ *
236
+ * // Get last 5 simulations
237
+ * const { data } = await sdk.scenarios.getSimulations('scenario_abc', 5);
238
+ * ```
239
+ */
240
+ getSimulations(scenarioId: string, limit?: number): Promise<ApiResponse<SimulationsResponse>>;
241
+ /**
242
+ * Run all scenarios for an agent and aggregate results
243
+ *
244
+ * Client-side orchestration method that:
245
+ * 1. Lists all active scenarios for the agent
246
+ * 2. Executes each scenario (with concurrency limit)
247
+ * 3. Polls each execution until completion
248
+ * 4. Aggregates results with pass/fail based on minScore
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * const result = await sdk.scenarios.runAll({
253
+ * agentId: 'agent_abc',
254
+ * minScore: 80,
255
+ * parallel: 3,
256
+ * });
257
+ * console.log(`${result.passed}/${result.totalScenarios} passed`);
258
+ * ```
259
+ */
260
+ runAll(options: BatchExecutionOptions): Promise<BatchResult>;
261
+ /**
262
+ * Execute a scenario and return a LiveExecution monitor
263
+ *
264
+ * Combines `run()` with live monitoring. The returned `LiveExecution`
265
+ * emits events as the execution progresses and resolves `.completed` when done.
266
+ *
267
+ * @example
268
+ * ```typescript
269
+ * const live = await sdk.scenarios.runLive('scenario_abc', {
270
+ * agentId: 'agent_xyz',
271
+ * });
272
+ * live.on('step', (s) => console.log(`Step ${s.index}: ${s.status}`));
273
+ * live.on('completed', (exec) => console.log('Score:', exec.overallScore));
274
+ * await live.completed;
275
+ * ```
276
+ */
277
+ runLive(scenarioId: string, executeOptions?: ExecuteScenarioOptions, liveOptions?: LiveOptions): Promise<LiveExecution>;
278
+ /**
279
+ * Monitor an existing scenario execution
280
+ *
281
+ * Returns a LiveExecution that polls execution status, emitting typed
282
+ * events as data arrives. For voice scenarios, also streams transcript.
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * const live = sdk.scenarios.watchExecution('exec_abc');
287
+ * live.on('status', (s) => console.log('Status:', s));
288
+ * live.on('transcript', (seg) => console.log(`${seg.speaker}: ${seg.text}`));
289
+ * await live.completed;
290
+ * ```
291
+ */
292
+ watchExecution(executionId: string, options?: LiveOptions): LiveExecution;
293
+ }
294
+ //# sourceMappingURL=scenarios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../../src/modules/scenarios.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,349 @@
1
+ "use strict";
2
+ /**
3
+ * ScenariosModule - SDK module for scenario management
4
+ *
5
+ * Provides CRUD operations for test scenarios.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ScenariosModule = void 0;
9
+ const live_execution_1 = require("../live/live-execution");
10
+ class ScenariosModule {
11
+ constructor(sdk) {
12
+ this.sdk = sdk;
13
+ }
14
+ /**
15
+ * List all scenarios with optional filters
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const { data } = await sdk.scenarios.list();
20
+ * console.log(data.scenarios);
21
+ * ```
22
+ */
23
+ async list(filters) {
24
+ const queryParams = new URLSearchParams();
25
+ if (filters?.agentId)
26
+ queryParams.append('agentId', filters.agentId);
27
+ if (filters?.type)
28
+ queryParams.append('type', filters.type);
29
+ if (filters?.status)
30
+ queryParams.append('status', filters.status);
31
+ if (filters?.category)
32
+ queryParams.append('category', filters.category);
33
+ if (filters?.difficulty)
34
+ queryParams.append('difficulty', filters.difficulty);
35
+ if (filters?.tags)
36
+ queryParams.append('tags', filters.tags);
37
+ if (filters?.createdBy)
38
+ queryParams.append('createdBy', filters.createdBy);
39
+ if (filters?.page)
40
+ queryParams.append('page', filters.page.toString());
41
+ if (filters?.limit)
42
+ queryParams.append('limit', filters.limit.toString());
43
+ if (filters?.sortBy)
44
+ queryParams.append('sortBy', filters.sortBy);
45
+ if (filters?.sortOrder)
46
+ queryParams.append('sortOrder', filters.sortOrder);
47
+ if (filters?.enriched)
48
+ queryParams.append('enriched', 'true');
49
+ const url = `/api/v1/scenarios${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
50
+ return this.sdk.request('GET', url);
51
+ }
52
+ /**
53
+ * Get a single scenario by ID
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const { data } = await sdk.scenarios.get('scenario_abc');
58
+ * console.log(data.scenario.name);
59
+ * ```
60
+ */
61
+ async get(id) {
62
+ return this.sdk.request('GET', `/api/v1/scenarios/${id}`);
63
+ }
64
+ /**
65
+ * Execute a scenario
66
+ *
67
+ * Queues a scenario for execution against an agent. The execution runs
68
+ * asynchronously - use getExecution() to poll for status.
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * // Run with default settings
73
+ * const { data } = await sdk.scenarios.run('scenario_abc');
74
+ * console.log('Execution started:', data.executionId);
75
+ *
76
+ * // Run with specific agent and phone call mode
77
+ * const { data } = await sdk.scenarios.run('scenario_abc', {
78
+ * agentId: 'agent_xyz',
79
+ * simulationMode: 'phone',
80
+ * phoneNumber: '+14155551234'
81
+ * });
82
+ * ```
83
+ */
84
+ async run(scenarioId, options) {
85
+ return this.sdk.request('POST', `/api/v1/scenarios/${scenarioId}/execute`, options || {});
86
+ }
87
+ /**
88
+ * Get a specific execution by ID
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const { data } = await sdk.scenarios.getExecution('exec_abc');
93
+ * console.log('Status:', data.execution.status);
94
+ * console.log('Score:', data.execution.overallScore);
95
+ * ```
96
+ */
97
+ async getExecution(executionId) {
98
+ return this.sdk.request('GET', `/api/v1/scenarios/executions/${executionId}`);
99
+ }
100
+ /**
101
+ * List scenario executions with optional filters
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * // List all executions
106
+ * const { data } = await sdk.scenarios.getExecutions();
107
+ *
108
+ * // Filter by scenario and status
109
+ * const { data } = await sdk.scenarios.getExecutions({
110
+ * scenarioId: 'scenario_abc',
111
+ * status: 'completed',
112
+ * limit: 10
113
+ * });
114
+ * ```
115
+ */
116
+ async getExecutions(filters) {
117
+ const queryParams = new URLSearchParams();
118
+ if (filters?.scenarioId)
119
+ queryParams.append('scenarioId', filters.scenarioId);
120
+ if (filters?.agentId)
121
+ queryParams.append('agentId', filters.agentId);
122
+ if (filters?.status)
123
+ queryParams.append('status', filters.status);
124
+ if (filters?.triggeredBy)
125
+ queryParams.append('triggeredBy', filters.triggeredBy);
126
+ if (filters?.dateFrom)
127
+ queryParams.append('dateFrom', filters.dateFrom);
128
+ if (filters?.dateTo)
129
+ queryParams.append('dateTo', filters.dateTo);
130
+ if (filters?.page)
131
+ queryParams.append('page', filters.page.toString());
132
+ if (filters?.limit)
133
+ queryParams.append('limit', filters.limit.toString());
134
+ if (filters?.sortBy)
135
+ queryParams.append('sortBy', filters.sortBy);
136
+ if (filters?.sortOrder)
137
+ queryParams.append('sortOrder', filters.sortOrder);
138
+ const url = `/api/v1/scenarios/executions${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
139
+ return this.sdk.request('GET', url);
140
+ }
141
+ /**
142
+ * Get simulation history for a scenario (last N runs)
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * // Get last 10 simulations (default)
147
+ * const { data } = await sdk.scenarios.getSimulations('scenario_abc');
148
+ *
149
+ * // Get last 5 simulations
150
+ * const { data } = await sdk.scenarios.getSimulations('scenario_abc', 5);
151
+ * ```
152
+ */
153
+ async getSimulations(scenarioId, limit) {
154
+ const queryParams = new URLSearchParams();
155
+ if (limit)
156
+ queryParams.append('limit', limit.toString());
157
+ const url = `/api/v1/scenarios/${scenarioId}/simulations${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
158
+ return this.sdk.request('GET', url);
159
+ }
160
+ /**
161
+ * Run all scenarios for an agent and aggregate results
162
+ *
163
+ * Client-side orchestration method that:
164
+ * 1. Lists all active scenarios for the agent
165
+ * 2. Executes each scenario (with concurrency limit)
166
+ * 3. Polls each execution until completion
167
+ * 4. Aggregates results with pass/fail based on minScore
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * const result = await sdk.scenarios.runAll({
172
+ * agentId: 'agent_abc',
173
+ * minScore: 80,
174
+ * parallel: 3,
175
+ * });
176
+ * console.log(`${result.passed}/${result.totalScenarios} passed`);
177
+ * ```
178
+ */
179
+ async runAll(options) {
180
+ const minScore = options.minScore ?? 0;
181
+ const parallel = options.parallel ?? 3;
182
+ // 1. List all active scenarios for the agent
183
+ const listResponse = await this.list({
184
+ agentId: options.agentId,
185
+ status: 'active',
186
+ limit: 100,
187
+ });
188
+ const scenarios = listResponse.data?.scenarios ?? [];
189
+ if (scenarios.length === 0) {
190
+ return {
191
+ agentId: options.agentId,
192
+ totalScenarios: 0,
193
+ passed: 0,
194
+ failed: 0,
195
+ averageScore: 0,
196
+ allPassed: true,
197
+ minScore,
198
+ results: [],
199
+ };
200
+ }
201
+ // 2. Execute scenarios with concurrency limit
202
+ const results = [];
203
+ const queue = [...scenarios];
204
+ const executeOne = async (scenario) => {
205
+ try {
206
+ // Start execution
207
+ const runResponse = await this.run(scenario.id, {
208
+ agentId: options.agentId,
209
+ simulationMode: options.mode === 'phone' ? 'phone' : 'text',
210
+ });
211
+ const executionId = runResponse.data?.executionId ||
212
+ runResponse.data?.execution?.executionId ||
213
+ runResponse.data?.execution?.id ||
214
+ '';
215
+ // Poll until terminal status
216
+ const terminalStatuses = ['completed', 'failed', 'timeout', 'cancelled'];
217
+ const pollInterval = 1000;
218
+ const maxPolls = 300; // 5 minutes max
219
+ let execution;
220
+ for (let i = 0; i < maxPolls; i++) {
221
+ const execResponse = await this.getExecution(executionId);
222
+ // SDK single-key unwrapping means data may be the execution directly
223
+ // or wrapped as { execution: ... } depending on response shape
224
+ const execData = execResponse.data;
225
+ execution = execData?.['execution'] ??
226
+ execData;
227
+ if (execution && terminalStatuses.includes(execution.status)) {
228
+ break;
229
+ }
230
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
231
+ }
232
+ if (!execution) {
233
+ return {
234
+ scenarioId: scenario.id,
235
+ scenarioName: scenario.name,
236
+ executionId,
237
+ status: 'error',
238
+ score: 0,
239
+ duration: 0,
240
+ toolCallCount: 0,
241
+ passed: false,
242
+ };
243
+ }
244
+ const score = execution.overallScore ?? 0;
245
+ const duration = execution.duration ?? 0;
246
+ const toolCallCount = (execution.stepResults ?? []).reduce((count, step) => count + (step.toolCalls?.length ?? 0), 0);
247
+ const status = execution.status === 'completed' ? 'completed' :
248
+ execution.status === 'failed' ? 'failed' : 'error';
249
+ const passed = status === 'completed' && score >= minScore;
250
+ return {
251
+ scenarioId: scenario.id,
252
+ scenarioName: scenario.name,
253
+ executionId,
254
+ status,
255
+ score,
256
+ duration,
257
+ toolCallCount,
258
+ passed,
259
+ };
260
+ }
261
+ catch {
262
+ return {
263
+ scenarioId: scenario.id,
264
+ scenarioName: scenario.name,
265
+ executionId: '',
266
+ status: 'error',
267
+ score: 0,
268
+ duration: 0,
269
+ toolCallCount: 0,
270
+ passed: false,
271
+ };
272
+ }
273
+ };
274
+ // Process queue with concurrency limit
275
+ const running = [];
276
+ let index = 0;
277
+ const processNext = async () => {
278
+ while (index < queue.length) {
279
+ const scenario = queue[index++];
280
+ const result = await executeOne(scenario);
281
+ results.push(result);
282
+ }
283
+ };
284
+ const workers = Math.min(parallel, queue.length);
285
+ for (let i = 0; i < workers; i++) {
286
+ running.push(processNext());
287
+ }
288
+ await Promise.all(running);
289
+ // 3. Aggregate results
290
+ const passed = results.filter((r) => r.passed).length;
291
+ const failed = results.length - passed;
292
+ const totalScore = results.reduce((sum, r) => sum + r.score, 0);
293
+ const averageScore = results.length > 0 ? Math.round((totalScore / results.length) * 100) / 100 : 0;
294
+ return {
295
+ agentId: options.agentId,
296
+ totalScenarios: results.length,
297
+ passed,
298
+ failed,
299
+ averageScore,
300
+ allPassed: failed === 0,
301
+ minScore,
302
+ results,
303
+ };
304
+ }
305
+ /**
306
+ * Execute a scenario and return a LiveExecution monitor
307
+ *
308
+ * Combines `run()` with live monitoring. The returned `LiveExecution`
309
+ * emits events as the execution progresses and resolves `.completed` when done.
310
+ *
311
+ * @example
312
+ * ```typescript
313
+ * const live = await sdk.scenarios.runLive('scenario_abc', {
314
+ * agentId: 'agent_xyz',
315
+ * });
316
+ * live.on('step', (s) => console.log(`Step ${s.index}: ${s.status}`));
317
+ * live.on('completed', (exec) => console.log('Score:', exec.overallScore));
318
+ * await live.completed;
319
+ * ```
320
+ */
321
+ async runLive(scenarioId, executeOptions, liveOptions) {
322
+ const response = await this.run(scenarioId, executeOptions);
323
+ if (!response.success || !response.data) {
324
+ throw new Error(response.message || 'Failed to start execution');
325
+ }
326
+ const { execution, executionId } = response.data;
327
+ const execId = executionId || execution?.id || execution?.executionId || '';
328
+ return new live_execution_1.LiveExecution(this.sdk, execId, liveOptions);
329
+ }
330
+ /**
331
+ * Monitor an existing scenario execution
332
+ *
333
+ * Returns a LiveExecution that polls execution status, emitting typed
334
+ * events as data arrives. For voice scenarios, also streams transcript.
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * const live = sdk.scenarios.watchExecution('exec_abc');
339
+ * live.on('status', (s) => console.log('Status:', s));
340
+ * live.on('transcript', (seg) => console.log(`${seg.speaker}: ${seg.text}`));
341
+ * await live.completed;
342
+ * ```
343
+ */
344
+ watchExecution(executionId, options) {
345
+ return new live_execution_1.LiveExecution(this.sdk, executionId, options);
346
+ }
347
+ }
348
+ exports.ScenariosModule = ScenariosModule;
349
+ //# sourceMappingURL=scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../../src/modules/scenarios.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAwKH,2DAAuD;AAGvD,MAAa,eAAe;IAC1B,YAAoB,GAAa;QAAb,QAAG,GAAH,GAAG,CAAU;IAAG,CAAC;IAErC;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CACR,OAAyB;QAEzB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAE1C,IAAI,OAAO,EAAE,OAAO;YAAE,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,OAAO,EAAE,IAAI;YAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE,QAAQ;YAAE,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,OAAO,EAAE,UAAU;YAAE,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,OAAO,EAAE,IAAI;YAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE,SAAS;YAAE,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,OAAO,EAAE,IAAI;YAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,IAAI,OAAO,EAAE,KAAK;YAAE,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,IAAI,OAAO,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE,SAAS;YAAE,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,OAAO,EAAE,QAAQ;YAAE,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,oBAAoB,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,GAAG,CACP,EAAU;QAEV,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,GAAG,CACP,UAAkB,EAClB,OAAgC;QAEhC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,UAAU,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,YAAY,CAChB,WAAmB;QAEnB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,gCAAgC,WAAW,EAAE,CAAC,CAAC;IAChF,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,aAAa,CACjB,OAAkC;QAElC,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAE1C,IAAI,OAAO,EAAE,UAAU;YAAE,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,OAAO,EAAE,OAAO;YAAE,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,OAAO,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE,WAAW;YAAE,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACjF,IAAI,OAAO,EAAE,QAAQ;YAAE,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,OAAO,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE,IAAI;YAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,IAAI,OAAO,EAAE,KAAK;YAAE,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,IAAI,OAAO,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE,SAAS;YAAE,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAE3E,MAAM,GAAG,GAAG,+BAA+B,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxG,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,cAAc,CAClB,UAAkB,EAClB,KAAc;QAEd,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,IAAI,KAAK;YAAE,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,qBAAqB,UAAU,eAAe,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACvH,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,MAAM,CACV,OAA8B;QAE9B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QAEvC,6CAA6C;QAC7C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;QAErD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,cAAc,EAAE,CAAC;gBACjB,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,IAAI;gBACf,QAAQ;gBACR,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;QAE7B,MAAM,UAAU,GAAG,KAAK,EAAE,QAAkB,EAAgC,EAAE;YAC5E,IAAI,CAAC;gBACH,kBAAkB;gBAClB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,cAAc,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;iBAC5D,CAAC,CAAC;gBAEH,MAAM,WAAW,GACf,WAAW,CAAC,IAAI,EAAE,WAAW;oBAC7B,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW;oBACxC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;oBAC/B,EAAE,CAAC;gBAEL,6BAA6B;gBAC7B,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;gBACzE,MAAM,YAAY,GAAG,IAAI,CAAC;gBAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,gBAAgB;gBACtC,IAAI,SAAwC,CAAC;gBAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;oBAC1D,qEAAqE;oBACrE,+DAA+D;oBAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,IAA2C,CAAC;oBAC1E,SAAS,GAAI,QAAQ,EAAE,CAAC,WAAW,CAAmC;wBACnE,QAAqD,CAAC;oBAEzD,IAAI,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7D,MAAM;oBACR,CAAC;oBAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;gBACpE,CAAC;gBAED,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO;wBACL,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,YAAY,EAAE,QAAQ,CAAC,IAAI;wBAC3B,WAAW;wBACX,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,CAAC;wBACX,aAAa,EAAE,CAAC;wBAChB,MAAM,EAAE,KAAK;qBACd,CAAC;gBACJ,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC;gBACzC,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CACxD,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,EACtD,CAAC,CACF,CAAC;gBAEF,MAAM,MAAM,GACV,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;oBAChD,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;gBAErD,MAAM,MAAM,GAAG,MAAM,KAAK,WAAW,IAAI,KAAK,IAAI,QAAQ,CAAC;gBAE3D,OAAO;oBACL,UAAU,EAAE,QAAQ,CAAC,EAAE;oBACvB,YAAY,EAAE,QAAQ,CAAC,IAAI;oBAC3B,WAAW;oBACX,MAAM;oBACN,KAAK;oBACL,QAAQ;oBACR,aAAa;oBACb,MAAM;iBACP,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,UAAU,EAAE,QAAQ,CAAC,EAAE;oBACvB,YAAY,EAAE,QAAQ,CAAC,IAAI;oBAC3B,WAAW,EAAE,EAAE;oBACf,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE,CAAC;oBACX,aAAa,EAAE,CAAC;oBAChB,MAAM,EAAE,KAAK;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,uCAAuC;QACvC,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;YAC5C,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE3B,uBAAuB;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpG,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,cAAc,EAAE,OAAO,CAAC,MAAM;YAC9B,MAAM;YACN,MAAM;YACN,YAAY;YACZ,SAAS,EAAE,MAAM,KAAK,CAAC;YACvB,QAAQ;YACR,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,cAAuC,EACvC,WAAyB;QAEzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,2BAA2B,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;QACjD,MAAM,MAAM,GAAG,WAAW,IAAI,SAAS,EAAE,EAAE,IAAI,SAAS,EAAE,WAAW,IAAI,EAAE,CAAC;QAE5E,OAAO,IAAI,8BAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,cAAc,CACZ,WAAmB,EACnB,OAAqB;QAErB,OAAO,IAAI,8BAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;CACF;AAvXD,0CAuXC"}