@absolutejs/voice 0.0.22-beta.191 → 0.0.22-beta.193
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/README.md +112 -1
- package/dist/agent.d.ts +1 -0
- package/dist/angular/voice-live-ops.service.d.ts +1 -1
- package/dist/campaign.d.ts +132 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +896 -73
- package/dist/latencySlo.d.ts +56 -0
- package/dist/operationsRecord.d.ts +30 -0
- package/dist/productionReadiness.d.ts +12 -0
- package/dist/readinessProfiles.d.ts +1 -0
- package/dist/testing/index.js +23 -0
- package/dist/types.d.ts +10 -0
- package/dist/vue/useVoiceLiveOps.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ Pick the path that matches what you are building:
|
|
|
21
21
|
|
|
22
22
|
- Browser voice agent: mount `voice(...)`, choose an STT adapter, and use the React/Vue/Svelte/Angular/HTML/HTMX client helpers for mic, transcript, reconnect, and status UI.
|
|
23
23
|
- Phone voice agent: mount Twilio, Telnyx, or Plivo routes, normalize carrier outcomes, inspect carrier readiness, and persist call lifecycle traces.
|
|
24
|
+
- Outbound campaigns: create self-hosted campaign queues, import CSV/JSON recipients, enforce rate limits/quiet hours/retry backoff, dry-run carrier dialers, and fail production readiness when campaign proof regresses.
|
|
24
25
|
- Production readiness: mount the status and proof primitives you need, such as `createVoiceOpsStatusRoutes(...)`, `createVoiceProductionReadinessRoutes(...)`, quality routes, trace routes, eval routes, and smoke contracts.
|
|
25
26
|
- Provider routing and fallback: use LLM/STT/TTS provider routers, provider health, provider simulation controls, and cost/latency-aware routing policies.
|
|
26
27
|
- Evals and simulation: mount `createVoiceSimulationSuiteRoutes(...)` to run scenario fixtures, workflow contracts, tool contracts, outcome contracts, baseline comparisons, and saved benchmark artifacts before live traffic.
|
|
@@ -240,7 +241,7 @@ app.use(
|
|
|
240
241
|
Built-in profiles:
|
|
241
242
|
|
|
242
243
|
- `meeting-recorder`: live latency, session health, provider fallback, routing contracts, reconnect proof, and barge-in interruption proof.
|
|
243
|
-
- `phone-agent`: carrier readiness, phone-agent smoke proof, handoffs, provider routing contracts, audit/trace delivery health, and delivery runtime proof.
|
|
244
|
+
- `phone-agent`: carrier readiness, phone-agent smoke proof, campaign readiness proof, handoffs, provider routing contracts, audit/trace delivery health, and delivery runtime proof.
|
|
244
245
|
- `ops-heavy`: audit evidence, operator action history, audit/trace delivery health, delivery runtime proof, and deploy-gate support.
|
|
245
246
|
|
|
246
247
|
Phone-agent fast path:
|
|
@@ -250,6 +251,10 @@ app.use(
|
|
|
250
251
|
createVoiceProductionReadinessRoutes({
|
|
251
252
|
...createVoiceReadinessProfile('phone-agent', {
|
|
252
253
|
auditDeliveries: runtime.auditDeliveries,
|
|
254
|
+
campaignReadiness: () =>
|
|
255
|
+
runVoiceCampaignReadinessProof({
|
|
256
|
+
store: runtime.campaigns
|
|
257
|
+
}),
|
|
253
258
|
carriers: loadCarrierMatrixInputs,
|
|
254
259
|
deliveryRuntime,
|
|
255
260
|
explain: true,
|
|
@@ -443,6 +448,112 @@ app.use(
|
|
|
443
448
|
|
|
444
449
|
The suite rolls up session quality, scenario evals, fixture simulations, tool contracts, and outcome contracts into one pass/fail report. It is the code-owned equivalent of "test this voice flow before production" without requiring a hosted voice-agent dashboard.
|
|
445
450
|
|
|
451
|
+
## Self-Hosted Campaigns
|
|
452
|
+
|
|
453
|
+
Use `createVoiceCampaignRoutes(...)` when you need Retell/Bland-style outbound campaign primitives without giving a hosted dialer ownership of recipients, attempts, outcomes, or readiness proof.
|
|
454
|
+
|
|
455
|
+
```ts
|
|
456
|
+
import {
|
|
457
|
+
createVoiceCampaignRoutes,
|
|
458
|
+
createVoiceProductionReadinessRoutes,
|
|
459
|
+
createVoiceReadinessProfile,
|
|
460
|
+
createVoiceSQLiteCampaignStore,
|
|
461
|
+
runVoiceCampaignReadinessProof
|
|
462
|
+
} from '@absolutejs/voice';
|
|
463
|
+
|
|
464
|
+
const campaigns = createVoiceSQLiteCampaignStore({
|
|
465
|
+
path: '.voice-runtime/campaigns.sqlite'
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
app.use(
|
|
469
|
+
createVoiceCampaignRoutes({
|
|
470
|
+
htmlPath: '/voice/campaigns',
|
|
471
|
+
path: '/api/voice/campaigns',
|
|
472
|
+
store: campaigns,
|
|
473
|
+
title: 'Outbound Campaigns'
|
|
474
|
+
})
|
|
475
|
+
);
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
The campaign runtime gives you explicit primitives instead of a campaign app kit:
|
|
479
|
+
|
|
480
|
+
- `importVoiceCampaignRecipients(...)`: validates CSV/JSON rows, phone numbers, consent, duplicates, variables, and metadata.
|
|
481
|
+
- `VoiceCampaignRuntime.importRecipients(...)`: persists accepted recipients and returns rejected-row evidence.
|
|
482
|
+
- `tick(...)`: enforces campaign status, max concurrency, attempt windows, quiet hours, rolling rate limits, retry backoff, and `maxAttempts`.
|
|
483
|
+
- `pause(...)`, `resume(...)`, `cancel(...)`: operator-safe campaign controls.
|
|
484
|
+
- `applyVoiceCampaignTelephonyOutcome(...)`: maps Twilio/Telnyx/Plivo webhook decisions back into campaign attempts.
|
|
485
|
+
- `buildVoiceCampaignObservabilityReport(...)`: queue depth, active attempts, leases, attempt rates, failures, and stuck work.
|
|
486
|
+
|
|
487
|
+
Import recipients through the route API:
|
|
488
|
+
|
|
489
|
+
```ts
|
|
490
|
+
await fetch('/api/voice/campaigns/campaign-1/recipients/import', {
|
|
491
|
+
body: JSON.stringify({
|
|
492
|
+
csv: `id,name,phone,consent,segment
|
|
493
|
+
recipient-1,Ada,+15550001001,yes,trial
|
|
494
|
+
recipient-2,Grace,+15550001002,true,enterprise`,
|
|
495
|
+
requireConsent: true,
|
|
496
|
+
variableColumns: ['segment']
|
|
497
|
+
}),
|
|
498
|
+
headers: {
|
|
499
|
+
'content-type': 'application/json'
|
|
500
|
+
},
|
|
501
|
+
method: 'POST'
|
|
502
|
+
});
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
Create campaigns with scheduling controls:
|
|
506
|
+
|
|
507
|
+
```ts
|
|
508
|
+
await runtime.create({
|
|
509
|
+
maxAttempts: 3,
|
|
510
|
+
maxConcurrentAttempts: 10,
|
|
511
|
+
name: 'Renewal outreach',
|
|
512
|
+
schedule: {
|
|
513
|
+
attemptWindow: { startHour: 9, endHour: 17 },
|
|
514
|
+
quietHours: { startHour: 12, endHour: 13 },
|
|
515
|
+
rateLimit: { maxAttempts: 60, windowMs: 60_000 },
|
|
516
|
+
retryPolicy: { backoffMs: [5 * 60_000, 30 * 60_000] }
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
Certify the campaign path without live carrier traffic:
|
|
522
|
+
|
|
523
|
+
```ts
|
|
524
|
+
const campaignReadiness = await runVoiceCampaignReadinessProof({
|
|
525
|
+
store: campaigns
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
if (!campaignReadiness.ok) {
|
|
529
|
+
throw new Error(
|
|
530
|
+
campaignReadiness.checks
|
|
531
|
+
.filter((check) => check.status !== 'pass')
|
|
532
|
+
.map((check) => check.name)
|
|
533
|
+
.join('\n')
|
|
534
|
+
);
|
|
535
|
+
}
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
Pass that proof into production readiness so campaign regressions block deploys:
|
|
539
|
+
|
|
540
|
+
```ts
|
|
541
|
+
app.use(
|
|
542
|
+
createVoiceProductionReadinessRoutes({
|
|
543
|
+
...createVoiceReadinessProfile('phone-agent', {
|
|
544
|
+
campaignReadiness: () =>
|
|
545
|
+
runVoiceCampaignReadinessProof({
|
|
546
|
+
store: campaigns
|
|
547
|
+
}),
|
|
548
|
+
explain: true
|
|
549
|
+
}),
|
|
550
|
+
store: runtime.traces
|
|
551
|
+
})
|
|
552
|
+
);
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
For carrier-specific outbound dialing, use `createVoiceTwilioCampaignDialer(...)`, `createVoiceTelnyxCampaignDialer(...)`, or `createVoicePlivoCampaignDialer(...)` as the campaign `dialer`. `runVoiceCampaignDialerProof(...)` dry-runs those provider requests with intercepted fetch calls and synthetic webhook outcomes, so you can prove metadata and outcome application before a real campaign sends traffic.
|
|
556
|
+
|
|
446
557
|
## Phone Voice Agent In 20 Minutes
|
|
447
558
|
|
|
448
559
|
Use `createVoicePhoneAgent(...)` when the agent needs to answer or place calls through your own Twilio, Telnyx, or Plivo account. This is the self-hosted alternative to a hosted phone-agent dashboard: your app owns the carrier routes, stream URLs, webhooks, traces, readiness checks, and lifecycle outcomes.
|
package/dist/agent.d.ts
CHANGED
|
@@ -103,6 +103,7 @@ export type VoiceAgent<TContext = unknown, TSession extends VoiceSessionRecord =
|
|
|
103
103
|
context: TContext;
|
|
104
104
|
messages?: VoiceAgentMessage[];
|
|
105
105
|
session: TSession;
|
|
106
|
+
system?: string;
|
|
106
107
|
turn: VoiceTurnRecord;
|
|
107
108
|
}) => Promise<VoiceAgentRunResult<TResult>>;
|
|
108
109
|
};
|
|
@@ -6,6 +6,6 @@ export declare class VoiceLiveOpsService {
|
|
|
6
6
|
isRunning: import("@angular/core").Signal<boolean>;
|
|
7
7
|
lastResult: import("@angular/core").Signal<VoiceLiveOpsActionResult | undefined>;
|
|
8
8
|
run: (input: import("..").VoiceLiveOpsActionInput) => Promise<VoiceLiveOpsActionResult | undefined>;
|
|
9
|
-
runningAction: import("@angular/core").Signal<"
|
|
9
|
+
runningAction: import("@angular/core").Signal<"assign" | "create-task" | "escalate" | "force-handoff" | "inject-instruction" | "operator-takeover" | "pause-assistant" | "resume-assistant" | "tag" | undefined>;
|
|
10
10
|
};
|
|
11
11
|
}
|
package/dist/campaign.d.ts
CHANGED
|
@@ -4,6 +4,26 @@ import type { VoiceTelephonyOutcomeDecision, VoiceTelephonyOutcomeProviderEvent,
|
|
|
4
4
|
export type VoiceCampaignStatus = 'canceled' | 'completed' | 'draft' | 'paused' | 'running';
|
|
5
5
|
export type VoiceCampaignRecipientStatus = 'canceled' | 'completed' | 'failed' | 'pending' | 'queued';
|
|
6
6
|
export type VoiceCampaignAttemptStatus = 'canceled' | 'failed' | 'queued' | 'running' | 'succeeded';
|
|
7
|
+
export type VoiceCampaignTimeWindow = {
|
|
8
|
+
daysOfWeek?: number[];
|
|
9
|
+
endHour: number;
|
|
10
|
+
startHour: number;
|
|
11
|
+
timeZoneOffsetMinutes?: number;
|
|
12
|
+
};
|
|
13
|
+
export type VoiceCampaignRateLimit = {
|
|
14
|
+
maxAttempts: number;
|
|
15
|
+
windowMs: number;
|
|
16
|
+
};
|
|
17
|
+
export type VoiceCampaignRetryPolicy = {
|
|
18
|
+
backoffMs?: number | number[];
|
|
19
|
+
maxBackoffMs?: number;
|
|
20
|
+
};
|
|
21
|
+
export type VoiceCampaignSchedule = {
|
|
22
|
+
attemptWindow?: VoiceCampaignTimeWindow;
|
|
23
|
+
quietHours?: VoiceCampaignTimeWindow;
|
|
24
|
+
rateLimit?: VoiceCampaignRateLimit;
|
|
25
|
+
retryPolicy?: VoiceCampaignRetryPolicy;
|
|
26
|
+
};
|
|
7
27
|
export type VoiceCampaignRecipient = {
|
|
8
28
|
attempts: number;
|
|
9
29
|
completedAt?: number;
|
|
@@ -38,6 +58,7 @@ export type VoiceCampaign = {
|
|
|
38
58
|
maxConcurrentAttempts: number;
|
|
39
59
|
metadata?: Record<string, unknown>;
|
|
40
60
|
name: string;
|
|
61
|
+
schedule?: VoiceCampaignSchedule;
|
|
41
62
|
status: VoiceCampaignStatus;
|
|
42
63
|
updatedAt: number;
|
|
43
64
|
};
|
|
@@ -70,6 +91,7 @@ export type VoiceCampaignCreateInput = {
|
|
|
70
91
|
maxConcurrentAttempts?: number;
|
|
71
92
|
metadata?: Record<string, unknown>;
|
|
72
93
|
name: string;
|
|
94
|
+
schedule?: VoiceCampaignSchedule;
|
|
73
95
|
};
|
|
74
96
|
export type VoiceCampaignRecipientInput = {
|
|
75
97
|
id?: string;
|
|
@@ -78,6 +100,32 @@ export type VoiceCampaignRecipientInput = {
|
|
|
78
100
|
phone: string;
|
|
79
101
|
variables?: VoiceCampaignRecipient['variables'];
|
|
80
102
|
};
|
|
103
|
+
export type VoiceCampaignRecipientImportRow = Record<string, unknown>;
|
|
104
|
+
export type VoiceCampaignRecipientImportIssueCode = 'duplicate' | 'missing-consent' | 'missing-phone' | 'invalid-phone';
|
|
105
|
+
export type VoiceCampaignRecipientImportIssue = {
|
|
106
|
+
code: VoiceCampaignRecipientImportIssueCode;
|
|
107
|
+
message: string;
|
|
108
|
+
row: number;
|
|
109
|
+
value?: unknown;
|
|
110
|
+
};
|
|
111
|
+
export type VoiceCampaignRecipientImportOptions = {
|
|
112
|
+
consentColumn?: string;
|
|
113
|
+
csv?: string;
|
|
114
|
+
dedupe?: boolean;
|
|
115
|
+
idColumn?: string;
|
|
116
|
+
metadataColumns?: string[];
|
|
117
|
+
nameColumn?: string;
|
|
118
|
+
phoneColumn?: string;
|
|
119
|
+
requireConsent?: boolean;
|
|
120
|
+
rows?: VoiceCampaignRecipientImportRow[];
|
|
121
|
+
variableColumns?: string[];
|
|
122
|
+
};
|
|
123
|
+
export type VoiceCampaignRecipientImportResult = {
|
|
124
|
+
accepted: VoiceCampaignRecipientInput[];
|
|
125
|
+
duplicates: number;
|
|
126
|
+
rejected: VoiceCampaignRecipientImportIssue[];
|
|
127
|
+
total: number;
|
|
128
|
+
};
|
|
81
129
|
export type VoiceCampaignAttemptResultInput = {
|
|
82
130
|
error?: string;
|
|
83
131
|
externalCallId?: string;
|
|
@@ -86,6 +134,11 @@ export type VoiceCampaignAttemptResultInput = {
|
|
|
86
134
|
};
|
|
87
135
|
export type VoiceCampaignTickResult = {
|
|
88
136
|
attempted: number;
|
|
137
|
+
blocked: Array<{
|
|
138
|
+
reason: 'outside-attempt-window' | 'quiet-hours' | 'rate-limit' | 'retry-backoff';
|
|
139
|
+
recipientId?: string;
|
|
140
|
+
until?: number;
|
|
141
|
+
}>;
|
|
89
142
|
campaignId: string;
|
|
90
143
|
errors: Array<{
|
|
91
144
|
error: string;
|
|
@@ -109,6 +162,34 @@ export type VoiceCampaignProofReport = {
|
|
|
109
162
|
summary: VoiceCampaignSummary;
|
|
110
163
|
tick: VoiceCampaignTickResult;
|
|
111
164
|
};
|
|
165
|
+
export type VoiceCampaignReadinessCheck = {
|
|
166
|
+
details?: Record<string, unknown>;
|
|
167
|
+
name: string;
|
|
168
|
+
status: 'fail' | 'pass';
|
|
169
|
+
};
|
|
170
|
+
export type VoiceCampaignReadinessProofOptions = {
|
|
171
|
+
store?: VoiceCampaignStore;
|
|
172
|
+
};
|
|
173
|
+
export type VoiceCampaignReadinessProofReport = {
|
|
174
|
+
campaigns: {
|
|
175
|
+
retry: VoiceCampaignRecord;
|
|
176
|
+
scheduled: VoiceCampaignRecord;
|
|
177
|
+
};
|
|
178
|
+
checks: VoiceCampaignReadinessCheck[];
|
|
179
|
+
generatedAt: number;
|
|
180
|
+
import: VoiceCampaignRecipientImportResult;
|
|
181
|
+
ok: boolean;
|
|
182
|
+
proof: 'voice-campaign-readiness';
|
|
183
|
+
ticks: {
|
|
184
|
+
allowed: VoiceCampaignTickResult;
|
|
185
|
+
quietHours: VoiceCampaignTickResult;
|
|
186
|
+
rateLimited: VoiceCampaignTickResult;
|
|
187
|
+
retryAllowed: VoiceCampaignTickResult;
|
|
188
|
+
retryBackoff: VoiceCampaignTickResult;
|
|
189
|
+
retryInitial: VoiceCampaignTickResult;
|
|
190
|
+
windowBlocked: VoiceCampaignTickResult;
|
|
191
|
+
};
|
|
192
|
+
};
|
|
112
193
|
export type VoiceCampaignSummary = {
|
|
113
194
|
attempts: {
|
|
114
195
|
failed: number;
|
|
@@ -136,6 +217,7 @@ export type VoiceCampaignSummary = {
|
|
|
136
217
|
};
|
|
137
218
|
export type VoiceCampaignRuntimeOptions = {
|
|
138
219
|
dialer?: VoiceCampaignDialer;
|
|
220
|
+
now?: () => number;
|
|
139
221
|
store: VoiceCampaignStore;
|
|
140
222
|
};
|
|
141
223
|
export type VoiceCampaignRuntime = {
|
|
@@ -145,6 +227,9 @@ export type VoiceCampaignRuntime = {
|
|
|
145
227
|
create: (input: VoiceCampaignCreateInput) => Promise<VoiceCampaignRecord>;
|
|
146
228
|
enqueue: (campaignId: string) => Promise<VoiceCampaignRecord>;
|
|
147
229
|
get: (campaignId: string) => Promise<VoiceCampaignRecord | undefined>;
|
|
230
|
+
importRecipients: (campaignId: string, input: VoiceCampaignRecipientImportOptions) => Promise<VoiceCampaignRecord & {
|
|
231
|
+
import: VoiceCampaignRecipientImportResult;
|
|
232
|
+
}>;
|
|
148
233
|
list: () => Promise<VoiceCampaignRecord[]>;
|
|
149
234
|
pause: (campaignId: string) => Promise<VoiceCampaignRecord>;
|
|
150
235
|
remove: (campaignId: string) => Promise<void>;
|
|
@@ -279,6 +364,7 @@ export type VoiceCampaignTelephonyOutcomeResult = {
|
|
|
279
364
|
status?: 'failed' | 'succeeded';
|
|
280
365
|
attemptId?: string;
|
|
281
366
|
};
|
|
367
|
+
export declare const importVoiceCampaignRecipients: (options: VoiceCampaignRecipientImportOptions) => VoiceCampaignRecipientImportResult;
|
|
282
368
|
export declare const createVoiceMemoryCampaignStore: () => VoiceCampaignStore;
|
|
283
369
|
export declare const summarizeVoiceCampaigns: (records: VoiceCampaignRecord[]) => VoiceCampaignSummary;
|
|
284
370
|
export declare const buildVoiceCampaignObservabilityReport: (records: VoiceCampaignRecord[], options?: VoiceCampaignObservabilityOptions) => Promise<VoiceCampaignObservabilityReport>;
|
|
@@ -288,6 +374,7 @@ export declare const createVoiceCampaignWorkerLoop: (options: VoiceCampaignWorke
|
|
|
288
374
|
export declare const applyVoiceCampaignTelephonyOutcome: <TResult = unknown>(input: VoiceCampaignTelephonyOutcomeInput<TResult>, options?: VoiceCampaignTelephonyOutcomeOptions<TResult>) => Promise<VoiceCampaignTelephonyOutcomeResult>;
|
|
289
375
|
export declare const createVoiceCampaignTelephonyOutcomeHandler: <TResult = unknown>(options: VoiceCampaignTelephonyOutcomeOptions<TResult>) => (input: VoiceTelephonyWebhookDecision<TResult>) => Promise<VoiceCampaignTelephonyOutcomeResult>;
|
|
290
376
|
export declare const runVoiceCampaignProof: (options?: VoiceCampaignProofOptions) => Promise<VoiceCampaignProofReport>;
|
|
377
|
+
export declare const runVoiceCampaignReadinessProof: (options?: VoiceCampaignReadinessProofOptions) => Promise<VoiceCampaignReadinessProofReport>;
|
|
291
378
|
export declare const renderVoiceCampaignsHTML: (records: VoiceCampaignRecord[], options?: {
|
|
292
379
|
title?: string;
|
|
293
380
|
}) => string;
|
|
@@ -338,6 +425,20 @@ export declare const createVoiceCampaignRoutes: (options: VoiceCampaignRoutesOpt
|
|
|
338
425
|
};
|
|
339
426
|
};
|
|
340
427
|
};
|
|
428
|
+
} & {
|
|
429
|
+
[x: string]: {
|
|
430
|
+
"readiness-proof": {
|
|
431
|
+
get: {
|
|
432
|
+
body: unknown;
|
|
433
|
+
params: {};
|
|
434
|
+
query: unknown;
|
|
435
|
+
headers: unknown;
|
|
436
|
+
response: {
|
|
437
|
+
200: VoiceCampaignReadinessProofReport;
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
};
|
|
441
|
+
};
|
|
341
442
|
} & {
|
|
342
443
|
[x: string]: {
|
|
343
444
|
post: {
|
|
@@ -428,6 +529,37 @@ export declare const createVoiceCampaignRoutes: (options: VoiceCampaignRoutesOpt
|
|
|
428
529
|
};
|
|
429
530
|
};
|
|
430
531
|
};
|
|
532
|
+
} & {
|
|
533
|
+
[x: string]: {
|
|
534
|
+
":campaignId": {
|
|
535
|
+
recipients: {
|
|
536
|
+
import: {
|
|
537
|
+
post: {
|
|
538
|
+
body: unknown;
|
|
539
|
+
params: {
|
|
540
|
+
campaignId: string;
|
|
541
|
+
} & {};
|
|
542
|
+
query: unknown;
|
|
543
|
+
headers: unknown;
|
|
544
|
+
response: {
|
|
545
|
+
200: VoiceCampaignRecord & {
|
|
546
|
+
import: VoiceCampaignRecipientImportResult;
|
|
547
|
+
};
|
|
548
|
+
422: {
|
|
549
|
+
type: "validation";
|
|
550
|
+
on: string;
|
|
551
|
+
summary?: string;
|
|
552
|
+
message?: string;
|
|
553
|
+
found?: unknown;
|
|
554
|
+
property?: string;
|
|
555
|
+
expected?: string;
|
|
556
|
+
};
|
|
557
|
+
};
|
|
558
|
+
};
|
|
559
|
+
};
|
|
560
|
+
};
|
|
561
|
+
};
|
|
562
|
+
};
|
|
431
563
|
} & {
|
|
432
564
|
[x: string]: {
|
|
433
565
|
":campaignId": {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { voice } from './plugin';
|
|
2
|
-
export { applyVoiceCampaignTelephonyOutcome, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, summarizeVoiceCampaigns } from './campaign';
|
|
2
|
+
export { applyVoiceCampaignTelephonyOutcome, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, importVoiceCampaignRecipients, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, runVoiceCampaignReadinessProof, summarizeVoiceCampaigns } from './campaign';
|
|
3
3
|
export { createVoicePlivoCampaignDialer, createVoiceTelnyxCampaignDialer, createVoiceTwilioCampaignDialer, getVoiceCampaignDialerProofStatus, runVoiceCampaignDialerProof } from './campaignDialers';
|
|
4
4
|
export { createVoiceAssistant, createVoiceExperiment, summarizeVoiceAssistantRuns } from './assistant';
|
|
5
5
|
export { createVoiceAssistantHealthHTMLHandler, createVoiceAssistantHealthJSONHandler, createVoiceAssistantHealthRoutes, renderVoiceAssistantHealthHTML, summarizeVoiceAssistantHealth } from './assistantHealth';
|
|
@@ -33,6 +33,7 @@ export { createVoiceToolIdempotencyKey, createVoiceToolRuntime } from './toolRun
|
|
|
33
33
|
export { createVoiceToolContract, createVoiceToolContractHTMLHandler, createVoiceToolContractJSONHandler, createVoiceToolContractRoutes, createVoiceToolRuntimeContractDefaults, renderVoiceToolContractHTML, runVoiceToolContractSuite, runVoiceToolContract } from './toolContract';
|
|
34
34
|
export { createVoiceTurnLatencyHTMLHandler, createVoiceTurnLatencyJSONHandler, createVoiceTurnLatencyRoutes, renderVoiceTurnLatencyHTML, summarizeVoiceTurnLatency } from './turnLatency';
|
|
35
35
|
export { createVoiceLiveLatencyRoutes, renderVoiceLiveLatencyHTML, summarizeVoiceLiveLatency } from './liveLatency';
|
|
36
|
+
export { assertVoiceLatencySLOGate, buildVoiceLatencySLOGate, renderVoiceLatencySLOMarkdown } from './latencySlo';
|
|
36
37
|
export { createVoiceTurnQualityHTMLHandler, createVoiceTurnQualityJSONHandler, createVoiceTurnQualityRoutes, renderVoiceTurnQualityHTML, summarizeVoiceTurnQuality } from './turnQuality';
|
|
37
38
|
export { createVoiceOutcomeContractHTMLHandler, createVoiceOutcomeContractJSONHandler, createVoiceOutcomeContractRoutes, renderVoiceOutcomeContractHTML, runVoiceOutcomeContractSuite } from './outcomeContract';
|
|
38
39
|
export { applyVoiceTelephonyOutcome, createMemoryVoiceTelephonyWebhookIdempotencyStore, createVoiceTelephonyOutcomePolicy, createVoiceTelephonyWebhookHandler, createVoiceTelephonyWebhookRoutes, parseVoiceTelephonyWebhookEvent, resolveVoiceTelephonyOutcome, signVoiceTwilioWebhook, verifyVoiceTwilioWebhookSignature, voiceTelephonyOutcomeToRouteResult } from './telephonyOutcome';
|
|
@@ -82,7 +83,7 @@ export { conditionAudioChunk, resolveAudioConditioningConfig } from './audioCond
|
|
|
82
83
|
export { resolveVoiceRuntimePreset } from './presets';
|
|
83
84
|
export { resolveTurnDetectionConfig, TURN_PROFILE_DEFAULTS } from './turnProfiles';
|
|
84
85
|
export { createVoiceCallReviewFromLiveTelephonyReport, createVoiceCallReviewRecorder, renderVoiceCallReviewHTML, renderVoiceCallReviewMarkdown } from './testing/review';
|
|
85
|
-
export type { VoiceCampaign, VoiceCampaignAttempt, VoiceCampaignAttemptResultInput, VoiceCampaignAttemptStatus, VoiceCampaignCreateInput, VoiceCampaignDialer, VoiceCampaignDialerInput, VoiceCampaignDialerResult, VoiceCampaignProofOptions, VoiceCampaignProofReport, VoiceCampaignRecipient, VoiceCampaignRecipientInput, VoiceCampaignRecipientStatus, VoiceCampaignRecord, VoiceCampaignRoutesOptions, VoiceCampaignRuntime, VoiceCampaignRuntimeOptions, VoiceCampaignStatus, VoiceCampaignStore, VoiceCampaignSummary, VoiceCampaignTickResult } from './campaign';
|
|
86
|
+
export type { VoiceCampaign, VoiceCampaignAttempt, VoiceCampaignAttemptResultInput, VoiceCampaignAttemptStatus, VoiceCampaignCreateInput, VoiceCampaignDialer, VoiceCampaignDialerInput, VoiceCampaignDialerResult, VoiceCampaignProofOptions, VoiceCampaignProofReport, VoiceCampaignReadinessCheck, VoiceCampaignReadinessProofOptions, VoiceCampaignReadinessProofReport, VoiceCampaignRecipient, VoiceCampaignRecipientImportIssue, VoiceCampaignRecipientImportIssueCode, VoiceCampaignRecipientImportOptions, VoiceCampaignRecipientImportResult, VoiceCampaignRecipientImportRow, VoiceCampaignRecipientInput, VoiceCampaignRecipientStatus, VoiceCampaignRecord, VoiceCampaignRoutesOptions, VoiceCampaignRuntime, VoiceCampaignRuntimeOptions, VoiceCampaignRateLimit, VoiceCampaignRetryPolicy, VoiceCampaignSchedule, VoiceCampaignStatus, VoiceCampaignStore, VoiceCampaignSummary, VoiceCampaignTimeWindow, VoiceCampaignTickResult } from './campaign';
|
|
86
87
|
export type { VoiceCampaignDialerProofCarrierRequest, VoiceCampaignDialerProofOptions, VoiceCampaignDialerProofProvider, VoiceCampaignDialerProofProviderResult, VoiceCampaignDialerProofReport, VoiceCampaignDialerProofStatus, VoicePlivoCampaignDialerOptions, VoiceTelnyxCampaignDialerOptions, VoiceTwilioCampaignDialerOptions } from './campaignDialers';
|
|
87
88
|
export type { VoiceBargeInReport, VoiceBargeInRoutesOptions } from './bargeInRoutes';
|
|
88
89
|
export type { VoiceAssistant, VoiceAssistantArtifactPlan, VoiceAssistantExperiment, VoiceAssistantExperimentOptions, VoiceAssistantGuardrailInput, VoiceAssistantGuardrails, VoiceAssistantMemoryLifecycle, VoiceAssistantMemoryLifecycleInput, VoiceAssistantOptions, VoiceAssistantOutputGuardrailInput, VoiceAssistantPreset, VoiceAssistantRunsSummary, VoiceAssistantRunSummary, VoiceAssistantVariant } from './assistant';
|
|
@@ -101,6 +102,7 @@ export type { VoiceProviderCapabilityDefinition, VoiceProviderCapabilityHandlerO
|
|
|
101
102
|
export type { VoiceProviderRoutingContractDefinition, VoiceProviderRoutingContractIssue, VoiceProviderRoutingContractReport, VoiceProviderRoutingContractRunOptions, VoiceProviderRoutingExpectation, VoiceProviderRoutingStatus } from './providerRoutingContract';
|
|
102
103
|
export type { VoiceTurnLatencyHTMLHandlerOptions, VoiceTurnLatencyItem, VoiceTurnLatencyOptions, VoiceTurnLatencyReport, VoiceTurnLatencyRoutesOptions, VoiceTurnLatencyStage, VoiceTurnLatencyStatus } from './turnLatency';
|
|
103
104
|
export type { VoiceLiveLatencyOptions, VoiceLiveLatencyReport, VoiceLiveLatencyRoutesOptions, VoiceLiveLatencySample, VoiceLiveLatencyStatus } from './liveLatency';
|
|
105
|
+
export type { VoiceLatencySLOBudget, VoiceLatencySLOGateError, VoiceLatencySLOGateOptions, VoiceLatencySLOGateReport, VoiceLatencySLOMeasurement, VoiceLatencySLOStage, VoiceLatencySLOStageSummary, VoiceLatencySLOStatus } from './latencySlo';
|
|
104
106
|
export type { VoiceTurnQualityHTMLHandlerOptions, VoiceTurnQualityItem, VoiceTurnQualityOptions, VoiceTurnQualityReport, VoiceTurnQualityRoutesOptions, VoiceTurnQualityStatus } from './turnQuality';
|
|
105
107
|
export type { VoiceOutcomeContractDefinition, VoiceOutcomeContractHTMLHandlerOptions, VoiceOutcomeContractIssue, VoiceOutcomeContractOptions, VoiceOutcomeContractReport, VoiceOutcomeContractRoutesOptions, VoiceOutcomeContractStatus, VoiceOutcomeContractSuiteReport } from './outcomeContract';
|
|
106
108
|
export type { VoiceTelephonyOutcomeAction, VoiceTelephonyOutcomeDecision, VoiceTelephonyOutcomePolicy, VoiceTelephonyOutcomeProviderEvent, VoiceTelephonyOutcomeRouteResult, VoiceTelephonyOutcomeStatusDecision, VoiceTelephonyWebhookDecision, VoiceTelephonyWebhookHandlerOptions, VoiceTelephonyWebhookIdempotencyStore, VoiceTelephonyWebhookParseInput, VoiceTelephonyWebhookProvider, VoiceTelephonyWebhookRoutesOptions, VoiceTelephonyWebhookVerificationResult, StoredVoiceTelephonyWebhookDecision } from './telephonyOutcome';
|
|
@@ -111,7 +113,7 @@ export type { VoiceOpsStatus, VoiceOpsStatusLink, VoiceOpsStatusOptions, VoiceOp
|
|
|
111
113
|
export type { VoiceProductionReadinessAction, VoiceProductionReadinessAuditOptions, VoiceProductionReadinessAuditRequirement, VoiceProductionReadinessAuditSummary, VoiceProductionReadinessCheck, VoiceProductionReadinessGateIssue, VoiceProductionReadinessGateOptions, VoiceProductionReadinessGateProfile, VoiceProductionReadinessGateProfileSurface, VoiceProductionReadinessGateReport, VoiceProductionReadinessOpsActionHistoryOptions, VoiceProductionReadinessOpsActionHistorySummary, VoiceProductionReadinessOperationsRecordLink, VoiceProductionReadinessOperationsRecordLinks, VoiceProductionReadinessProfileExplanation, VoiceProductionReadinessProfileSurface, VoiceProductionReadinessProofSource, VoiceProductionReadinessReport, VoiceProductionReadinessRoutesOptions, VoiceProductionReadinessTraceDeliverySummary, VoiceProductionReadinessAuditDeliveryOptions, VoiceProductionReadinessAuditDeliverySummary, VoiceProductionReadinessTraceDeliveryOptions, VoiceProductionReadinessStatus } from './productionReadiness';
|
|
112
114
|
export type { VoiceReadinessProfileName, VoiceReadinessProfileOptions, VoiceReadinessProfileRecommendation, VoiceReadinessProfileRecommendationScore, VoiceReadinessProfileRoutesOptions } from './readinessProfiles';
|
|
113
115
|
export type { VoiceProviderStackChoice, VoiceProviderStackCapabilities, VoiceProviderStackCapabilityGap, VoiceProviderStackCapabilityGapInput, VoiceProviderStackCapabilityGapReport, VoiceProviderContractCheck, VoiceProviderContractCheckStatus, VoiceProviderContractDefinition, VoiceProviderContractMatrixHandlerOptions, VoiceProviderContractMatrixHTMLHandlerOptions, VoiceProviderContractMatrixInput, VoiceProviderContractMatrixPresetOptions, VoiceProviderContractMatrixReport, VoiceProviderContractMatrixRoutesOptions, VoiceProviderContractMatrixRow, VoiceProviderStackInput, VoiceProviderStackKind, VoiceProviderStackRecommendation } from './providerStackRecommendations';
|
|
114
|
-
export type { VoiceOperationsRecord, VoiceOperationsRecordAgentHandoff, VoiceOperationsRecordAuditSummary, VoiceOperationsRecordOptions, VoiceOperationsRecordOutcome, VoiceOperationsRecordRoutesOptions, VoiceOperationsRecordStatus, VoiceOperationsRecordTool } from './operationsRecord';
|
|
116
|
+
export type { VoiceOperationsRecord, VoiceOperationsRecordAgentHandoff, VoiceOperationsRecordAuditSummary, VoiceOperationsRecordIntegrationEventSummary, VoiceOperationsRecordOptions, VoiceOperationsRecordOutcome, VoiceOperationsRecordReviewSummary, VoiceOperationsRecordRoutesOptions, VoiceOperationsRecordStatus, VoiceOperationsRecordTaskSummary, VoiceOperationsRecordTool } from './operationsRecord';
|
|
115
117
|
export type { StoredVoiceIncidentBundleArtifact, VoiceIncidentBundle, VoiceIncidentBundleArtifactOptions, VoiceIncidentBundleFormat, VoiceIncidentBundleOptions, VoiceIncidentBundleRetentionOptions, VoiceIncidentBundleRetentionReport, VoiceIncidentBundleRoutesOptions, VoiceIncidentBundleStore, VoiceIncidentBundleStoreFilter, VoiceIncidentBundleSummary } from './incidentBundle';
|
|
116
118
|
export type { VoiceQualityLink, VoiceQualityMetric, VoiceQualityReport, VoiceQualityRoutesOptions, VoiceQualityStatus, VoiceQualityThresholds } from './qualityRoutes';
|
|
117
119
|
export type { VoiceResilienceIOSimulator, VoiceResilienceLink, VoiceResiliencePageData, VoiceResilienceRoutesOptions, VoiceResilienceSimulationProvider, VoiceRoutingKindSummary, VoiceRoutingDecisionSummary, VoiceRoutingDecisionSummaryOptions, VoiceRoutingEvent, VoiceRoutingEventKind, VoiceRoutingSessionSummary, VoiceRoutingSessionSummaryOptions } from './resilienceRoutes';
|