@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.
- package/dist/adapters/openai.d.ts +106 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +185 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/client.d.ts +74 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +293 -0
- package/dist/client.js.map +1 -0
- package/dist/errors/index.d.ts +179 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +319 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/live/index.d.ts +9 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +16 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/live-call.d.ts +48 -0
- package/dist/live/live-call.d.ts.map +1 -0
- package/dist/live/live-call.js +148 -0
- package/dist/live/live-call.js.map +1 -0
- package/dist/live/live-chat.d.ts +71 -0
- package/dist/live/live-chat.d.ts.map +1 -0
- package/dist/live/live-chat.js +95 -0
- package/dist/live/live-chat.js.map +1 -0
- package/dist/live/live-execution.d.ts +55 -0
- package/dist/live/live-execution.d.ts.map +1 -0
- package/dist/live/live-execution.js +170 -0
- package/dist/live/live-execution.js.map +1 -0
- package/dist/live/typed-emitter.d.ts +15 -0
- package/dist/live/typed-emitter.d.ts.map +1 -0
- package/dist/live/typed-emitter.js +40 -0
- package/dist/live/typed-emitter.js.map +1 -0
- package/dist/live/types.d.ts +24 -0
- package/dist/live/types.d.ts.map +1 -0
- package/dist/live/types.js +6 -0
- package/dist/live/types.js.map +1 -0
- package/dist/modules/agents.d.ts +378 -0
- package/dist/modules/agents.d.ts.map +1 -0
- package/dist/modules/agents.js +259 -0
- package/dist/modules/agents.js.map +1 -0
- package/dist/modules/alerts.d.ts +43 -0
- package/dist/modules/alerts.d.ts.map +1 -0
- package/dist/modules/alerts.js +56 -0
- package/dist/modules/alerts.js.map +1 -0
- package/dist/modules/audio.d.ts +47 -0
- package/dist/modules/audio.d.ts.map +1 -0
- package/dist/modules/audio.js +75 -0
- package/dist/modules/audio.js.map +1 -0
- package/dist/modules/auth.d.ts +76 -0
- package/dist/modules/auth.d.ts.map +1 -0
- package/dist/modules/auth.js +59 -0
- package/dist/modules/auth.js.map +1 -0
- package/dist/modules/calls.d.ts +825 -0
- package/dist/modules/calls.d.ts.map +1 -0
- package/dist/modules/calls.js +398 -0
- package/dist/modules/calls.js.map +1 -0
- package/dist/modules/chat.d.ts +165 -0
- package/dist/modules/chat.d.ts.map +1 -0
- package/dist/modules/chat.js +169 -0
- package/dist/modules/chat.js.map +1 -0
- package/dist/modules/health.d.ts +45 -0
- package/dist/modules/health.d.ts.map +1 -0
- package/dist/modules/health.js +22 -0
- package/dist/modules/health.js.map +1 -0
- package/dist/modules/knowledge.d.ts +202 -0
- package/dist/modules/knowledge.d.ts.map +1 -0
- package/dist/modules/knowledge.js +147 -0
- package/dist/modules/knowledge.js.map +1 -0
- package/dist/modules/mcp.d.ts +140 -0
- package/dist/modules/mcp.d.ts.map +1 -0
- package/dist/modules/mcp.js +110 -0
- package/dist/modules/mcp.js.map +1 -0
- package/dist/modules/memory.d.ts +163 -0
- package/dist/modules/memory.d.ts.map +1 -0
- package/dist/modules/memory.js +208 -0
- package/dist/modules/memory.js.map +1 -0
- package/dist/modules/personas.d.ts +168 -0
- package/dist/modules/personas.d.ts.map +1 -0
- package/dist/modules/personas.js +106 -0
- package/dist/modules/personas.js.map +1 -0
- package/dist/modules/prompts.d.ts +128 -0
- package/dist/modules/prompts.d.ts.map +1 -0
- package/dist/modules/prompts.js +93 -0
- package/dist/modules/prompts.js.map +1 -0
- package/dist/modules/scenarios.d.ts +294 -0
- package/dist/modules/scenarios.d.ts.map +1 -0
- package/dist/modules/scenarios.js +349 -0
- package/dist/modules/scenarios.js.map +1 -0
- package/dist/modules/scorecard.d.ts +642 -0
- package/dist/modules/scorecard.d.ts.map +1 -0
- package/dist/modules/scorecard.js +327 -0
- package/dist/modules/scorecard.js.map +1 -0
- package/dist/modules/tools.d.ts +222 -0
- package/dist/modules/tools.d.ts.map +1 -0
- package/dist/modules/tools.js +302 -0
- package/dist/modules/tools.js.map +1 -0
- package/dist/modules/toolsets.d.ts +173 -0
- package/dist/modules/toolsets.d.ts.map +1 -0
- package/dist/modules/toolsets.js +216 -0
- package/dist/modules/toolsets.js.map +1 -0
- package/dist/modules/transcript.d.ts +60 -0
- package/dist/modules/transcript.d.ts.map +1 -0
- package/dist/modules/transcript.js +69 -0
- package/dist/modules/transcript.js.map +1 -0
- package/dist/modules/workspace.d.ts +48 -0
- package/dist/modules/workspace.d.ts.map +1 -0
- package/dist/modules/workspace.js +49 -0
- package/dist/modules/workspace.js.map +1 -0
- package/dist/types/api.d.ts +8 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +25 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/config.d.ts +70 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/memory.d.ts +243 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +9 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/tool-calls.d.ts +61 -0
- package/dist/types/tool-calls.d.ts.map +1 -0
- package/dist/types/tool-calls.js +9 -0
- package/dist/types/tool-calls.js.map +1 -0
- package/dist/types/tools.d.ts +321 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +9 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/toolsets.d.ts +149 -0
- package/dist/types/toolsets.d.ts.map +1 -0
- package/dist/types/toolsets.js +8 -0
- package/dist/types/toolsets.js.map +1 -0
- 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":"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"}
|