@absolutejs/voice 0.0.22-beta.256 → 0.0.22-beta.258
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/campaign.d.ts +22 -0
- package/dist/campaignDialers.d.ts +21 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +165 -0
- package/dist/simulationSuite.d.ts +22 -0
- package/package.json +1 -1
package/dist/campaign.d.ts
CHANGED
|
@@ -190,6 +190,26 @@ export type VoiceCampaignReadinessProofReport = {
|
|
|
190
190
|
windowBlocked: VoiceCampaignTickResult;
|
|
191
191
|
};
|
|
192
192
|
};
|
|
193
|
+
export type VoiceCampaignReadinessAssertionInput = {
|
|
194
|
+
maxFailedChecks?: number;
|
|
195
|
+
minAcceptedImports?: number;
|
|
196
|
+
minRejectedImports?: number;
|
|
197
|
+
minTotalImports?: number;
|
|
198
|
+
requiredBlockedReasons?: VoiceCampaignTickResult['blocked'][number]['reason'][];
|
|
199
|
+
requiredChecks?: string[];
|
|
200
|
+
requireOk?: boolean;
|
|
201
|
+
};
|
|
202
|
+
export type VoiceCampaignReadinessAssertionReport = {
|
|
203
|
+
acceptedImports: number;
|
|
204
|
+
blockedReasons: VoiceCampaignTickResult['blocked'][number]['reason'][];
|
|
205
|
+
failed: number;
|
|
206
|
+
issues: string[];
|
|
207
|
+
ok: boolean;
|
|
208
|
+
passed: number;
|
|
209
|
+
rejectedImports: number;
|
|
210
|
+
total: number;
|
|
211
|
+
totalImports: number;
|
|
212
|
+
};
|
|
193
213
|
export type VoiceCampaignSummary = {
|
|
194
214
|
attempts: {
|
|
195
215
|
failed: number;
|
|
@@ -381,6 +401,8 @@ export declare const applyVoiceCampaignTelephonyOutcome: <TResult = unknown>(inp
|
|
|
381
401
|
export declare const createVoiceCampaignTelephonyOutcomeHandler: <TResult = unknown>(options: VoiceCampaignTelephonyOutcomeOptions<TResult>) => (input: VoiceTelephonyWebhookDecision<TResult>) => Promise<VoiceCampaignTelephonyOutcomeResult>;
|
|
382
402
|
export declare const runVoiceCampaignProof: (options?: VoiceCampaignProofOptions) => Promise<VoiceCampaignProofReport>;
|
|
383
403
|
export declare const runVoiceCampaignReadinessProof: (options?: VoiceCampaignReadinessProofOptions) => Promise<VoiceCampaignReadinessProofReport>;
|
|
404
|
+
export declare const evaluateVoiceCampaignReadinessEvidence: (report: VoiceCampaignReadinessProofReport, input?: VoiceCampaignReadinessAssertionInput) => VoiceCampaignReadinessAssertionReport;
|
|
405
|
+
export declare const assertVoiceCampaignReadinessEvidence: (report: VoiceCampaignReadinessProofReport, input?: VoiceCampaignReadinessAssertionInput) => VoiceCampaignReadinessAssertionReport;
|
|
384
406
|
export declare const renderVoiceCampaignsHTML: (records: VoiceCampaignRecord[], options?: Pick<VoiceCampaignRoutesOptions, "operationsRecordHref" | "title">) => string;
|
|
385
407
|
export declare const renderVoiceCampaignObservabilityHTML: (report: VoiceCampaignObservabilityReport, options?: {
|
|
386
408
|
title?: string;
|
|
@@ -82,9 +82,30 @@ export type VoiceCampaignDialerProofOptions = {
|
|
|
82
82
|
runPath?: string;
|
|
83
83
|
store?: VoiceCampaignStore;
|
|
84
84
|
};
|
|
85
|
+
export type VoiceCampaignDialerProofAssertionInput = {
|
|
86
|
+
maxFailedProviders?: number;
|
|
87
|
+
minCarrierRequests?: number;
|
|
88
|
+
minProviders?: number;
|
|
89
|
+
minSuccessfulOutcomes?: number;
|
|
90
|
+
requiredProviders?: VoiceCampaignDialerProofProvider[];
|
|
91
|
+
requireDryRun?: boolean;
|
|
92
|
+
requireOk?: boolean;
|
|
93
|
+
};
|
|
94
|
+
export type VoiceCampaignDialerProofAssertionReport = {
|
|
95
|
+
carrierRequests: number;
|
|
96
|
+
failedProviders: number;
|
|
97
|
+
issues: string[];
|
|
98
|
+
mode: VoiceCampaignDialerProofReport['mode'];
|
|
99
|
+
ok: boolean;
|
|
100
|
+
providers: VoiceCampaignDialerProofProvider[];
|
|
101
|
+
successfulOutcomes: number;
|
|
102
|
+
totalProviders: number;
|
|
103
|
+
};
|
|
85
104
|
export declare const createVoiceTwilioCampaignDialer: (options: VoiceTwilioCampaignDialerOptions) => VoiceCampaignDialer;
|
|
86
105
|
export declare const createVoiceTelnyxCampaignDialer: (options: VoiceTelnyxCampaignDialerOptions) => VoiceCampaignDialer;
|
|
87
106
|
export declare const createVoicePlivoCampaignDialer: (options: VoicePlivoCampaignDialerOptions) => VoiceCampaignDialer;
|
|
88
107
|
export declare const getVoiceCampaignDialerProofStatus: (options?: Pick<VoiceCampaignDialerProofOptions, "providers" | "runPath">) => VoiceCampaignDialerProofStatus;
|
|
89
108
|
export declare const runVoiceCampaignDialerProof: (options?: VoiceCampaignDialerProofOptions) => Promise<VoiceCampaignDialerProofReport>;
|
|
109
|
+
export declare const evaluateVoiceCampaignDialerProofEvidence: (report: VoiceCampaignDialerProofReport, input?: VoiceCampaignDialerProofAssertionInput) => VoiceCampaignDialerProofAssertionReport;
|
|
110
|
+
export declare const assertVoiceCampaignDialerProofEvidence: (report: VoiceCampaignDialerProofReport, input?: VoiceCampaignDialerProofAssertionInput) => VoiceCampaignDialerProofAssertionReport;
|
|
90
111
|
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { voice } from './plugin';
|
|
2
|
-
export { applyVoiceCampaignTelephonyOutcome, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, importVoiceCampaignRecipients, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, runVoiceCampaignReadinessProof, summarizeVoiceCampaigns } from './campaign';
|
|
3
|
-
export { createVoicePlivoCampaignDialer, createVoiceTelnyxCampaignDialer, createVoiceTwilioCampaignDialer, getVoiceCampaignDialerProofStatus, runVoiceCampaignDialerProof } from './campaignDialers';
|
|
2
|
+
export { applyVoiceCampaignTelephonyOutcome, assertVoiceCampaignReadinessEvidence, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, evaluateVoiceCampaignReadinessEvidence, importVoiceCampaignRecipients, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, runVoiceCampaignReadinessProof, summarizeVoiceCampaigns } from './campaign';
|
|
3
|
+
export { assertVoiceCampaignDialerProofEvidence, createVoicePlivoCampaignDialer, createVoiceTelnyxCampaignDialer, createVoiceTwilioCampaignDialer, evaluateVoiceCampaignDialerProofEvidence, getVoiceCampaignDialerProofStatus, runVoiceCampaignDialerProof } from './campaignDialers';
|
|
4
4
|
export { createVoiceAssistant, createVoiceExperiment, summarizeVoiceAssistantRuns } from './assistant';
|
|
5
5
|
export { createVoiceAssistantHealthHTMLHandler, createVoiceAssistantHealthJSONHandler, createVoiceAssistantHealthRoutes, renderVoiceAssistantHealthHTML, summarizeVoiceAssistantHealth } from './assistantHealth';
|
|
6
6
|
export { createVoiceAuditEvent, createVoiceAuditLogger, createVoiceMemoryAuditEventStore, filterVoiceAuditEvents, recordVoiceAuditEvent, recordVoiceHandoffAuditEvent, recordVoiceOperatorAuditEvent, recordVoiceProviderAuditEvent, recordVoiceRetentionAuditEvent, recordVoiceToolAuditEvent } from './audit';
|
|
@@ -28,7 +28,7 @@ export type { VoiceDeliverySinkDescriptor, VoiceDeliverySinkDescriptorInput, Voi
|
|
|
28
28
|
export type { VoiceOpsActionAuditRecord, VoiceOpsActionAuditRoutesOptions, VoiceOpsActionHistoryEntry, VoiceOpsActionHistoryReport } from './opsActionAuditRoutes';
|
|
29
29
|
export type { VoiceDeliveryRuntime, VoiceDeliveryRuntimeAuditConfig, VoiceDeliveryRuntimeConfig, VoiceDeliveryRuntimeFilePresetOptions, VoiceDeliveryRuntimePresetLeaseConfig, VoiceDeliveryRuntimePresetMode, VoiceDeliveryRuntimePresetOptions, VoiceDeliveryRuntimeReport, VoiceDeliveryRuntimeRoutesOptions, VoiceDeliveryRuntimeS3PresetOptions, VoiceDeliveryRuntimeSummary, VoiceDeliveryRuntimeTickResult, VoiceDeliveryRuntimeTraceConfig, VoiceDeliveryRuntimeWebhookPresetOptions } from './deliveryRuntime';
|
|
30
30
|
export { compareVoiceEvalBaseline, createVoiceFileEvalBaselineStore, createVoiceFileScenarioFixtureStore, createVoiceEvalRoutes, renderVoiceEvalBaselineHTML, renderVoiceEvalHTML, renderVoiceScenarioEvalHTML, renderVoiceScenarioFixtureEvalHTML, runVoiceScenarioEvals, runVoiceScenarioFixtureEvals, runVoiceSessionEvals } from './evalRoutes';
|
|
31
|
-
export { createVoiceSimulationSuiteRoutes, renderVoiceSimulationSuiteHTML, runVoiceSimulationSuite } from './simulationSuite';
|
|
31
|
+
export { assertVoiceSimulationSuiteEvidence, createVoiceSimulationSuiteRoutes, evaluateVoiceSimulationSuiteEvidence, renderVoiceSimulationSuiteHTML, runVoiceSimulationSuite } from './simulationSuite';
|
|
32
32
|
export { createVoiceWorkflowContract, createVoiceWorkflowContractHandler, createVoiceWorkflowContractPreset, createVoiceWorkflowScenario, recordVoiceWorkflowContractTrace, validateVoiceWorkflowRouteResult } from './workflowContract';
|
|
33
33
|
export { createVoiceSessionListRoutes, createVoiceSessionReplayHTMLHandler, createVoiceSessionReplayJSONHandler, createVoiceSessionReplayRoutes, createVoiceSessionsHTMLHandler, createVoiceSessionsJSONHandler, renderVoiceSessionsHTML, summarizeVoiceProviderFallbackRecovery, summarizeVoiceSessions, summarizeVoiceSessionReplay } from './sessionReplay';
|
|
34
34
|
export { createVoiceAgent, createVoiceAgentSquad, createVoiceAgentTool } from './agent';
|
|
@@ -92,15 +92,15 @@ export { conditionAudioChunk, resolveAudioConditioningConfig } from './audioCond
|
|
|
92
92
|
export { resolveVoiceRuntimePreset } from './presets';
|
|
93
93
|
export { resolveTurnDetectionConfig, TURN_PROFILE_DEFAULTS } from './turnProfiles';
|
|
94
94
|
export { createVoiceCallReviewFromLiveTelephonyReport, createVoiceCallReviewRecorder, renderVoiceCallReviewHTML, renderVoiceCallReviewMarkdown } from './testing/review';
|
|
95
|
-
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';
|
|
96
|
-
export type { VoiceCampaignDialerProofCarrierRequest, VoiceCampaignDialerProofOptions, VoiceCampaignDialerProofProvider, VoiceCampaignDialerProofProviderResult, VoiceCampaignDialerProofReport, VoiceCampaignDialerProofStatus, VoicePlivoCampaignDialerOptions, VoiceTelnyxCampaignDialerOptions, VoiceTwilioCampaignDialerOptions } from './campaignDialers';
|
|
95
|
+
export type { VoiceCampaign, VoiceCampaignAttempt, VoiceCampaignAttemptResultInput, VoiceCampaignAttemptStatus, VoiceCampaignCreateInput, VoiceCampaignDialer, VoiceCampaignDialerInput, VoiceCampaignDialerResult, VoiceCampaignProofOptions, VoiceCampaignProofReport, VoiceCampaignReadinessAssertionInput, VoiceCampaignReadinessAssertionReport, 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';
|
|
96
|
+
export type { VoiceCampaignDialerProofAssertionInput, VoiceCampaignDialerProofAssertionReport, VoiceCampaignDialerProofCarrierRequest, VoiceCampaignDialerProofOptions, VoiceCampaignDialerProofProvider, VoiceCampaignDialerProofProviderResult, VoiceCampaignDialerProofReport, VoiceCampaignDialerProofStatus, VoicePlivoCampaignDialerOptions, VoiceTelnyxCampaignDialerOptions, VoiceTwilioCampaignDialerOptions } from './campaignDialers';
|
|
97
97
|
export type { VoiceBargeInReport, VoiceBargeInRoutesOptions } from './bargeInRoutes';
|
|
98
98
|
export type { VoiceAssistant, VoiceAssistantArtifactPlan, VoiceAssistantExperiment, VoiceAssistantExperimentOptions, VoiceAssistantGuardrailInput, VoiceAssistantGuardrails, VoiceAssistantMemoryLifecycle, VoiceAssistantMemoryLifecycleInput, VoiceAssistantOptions, VoiceAssistantOutputGuardrailInput, VoiceAssistantPreset, VoiceAssistantRunsSummary, VoiceAssistantRunSummary, VoiceAssistantVariant } from './assistant';
|
|
99
99
|
export type { VoiceAssistantHealthFailure, VoiceAssistantHealthHTMLHandlerOptions, VoiceAssistantHealthRoutesOptions, VoiceAssistantHealthSummary, VoiceAssistantHealthSummaryOptions } from './assistantHealth';
|
|
100
100
|
export type { VoiceAssistantMemoryBinding, VoiceAssistantMemoryHandle, VoiceAssistantMemoryOptions, VoiceAssistantMemoryRecord, VoiceAssistantMemoryStore } from './assistantMemory';
|
|
101
101
|
export type { VoiceDiagnosticsRoutesOptions } from './diagnosticsRoutes';
|
|
102
102
|
export type { VoiceEvalBaselineComparison, VoiceEvalBaselineComparisonOptions, VoiceEvalBaselineStore, VoiceEvalBaselineSummary, VoiceEvalLink, VoiceEvalReport, VoiceEvalRoutesOptions, VoiceEvalSessionReport, VoiceEvalStatus, VoiceEvalTrendBucket, VoiceScenarioEvalDefinition, VoiceScenarioEvalReport, VoiceScenarioEvalResult, VoiceScenarioEvalSessionResult, VoiceScenarioFixture, VoiceScenarioFixtureEvalReport, VoiceScenarioFixtureEvalResult, VoiceScenarioFixtureStore } from './evalRoutes';
|
|
103
|
-
export type { VoiceSimulationSuiteEvalRoutesOptions, VoiceSimulationSuiteOptions, VoiceSimulationSuiteReport, VoiceSimulationSuiteRoutesOptions, VoiceSimulationSuiteSectionSummary, VoiceSimulationSuiteStatus } from './simulationSuite';
|
|
103
|
+
export type { VoiceSimulationSuiteAssertionInput, VoiceSimulationSuiteAssertionReport, VoiceSimulationSuiteEvalRoutesOptions, VoiceSimulationSuiteOptions, VoiceSimulationSuiteReport, VoiceSimulationSuiteRoutesOptions, VoiceSimulationSuiteSection, VoiceSimulationSuiteSectionSummary, VoiceSimulationSuiteStatus } from './simulationSuite';
|
|
104
104
|
export type { VoiceWorkflowContract, VoiceWorkflowContractDefinition, VoiceWorkflowContractField, VoiceWorkflowContractFieldMatch, VoiceWorkflowContractPresetName, VoiceWorkflowContractPresetOptions, VoiceWorkflowContractTracePayload, VoiceWorkflowContractValidation, VoiceWorkflowContractValidationIssue, VoiceWorkflowOutcome } from './workflowContract';
|
|
105
105
|
export type { VoiceSessionListHTMLHandlerOptions, VoiceSessionListItem, VoiceSessionListOptions, VoiceSessionListRoutesOptions, VoiceSessionListStatus, VoiceProviderFallbackRecoverySummary, VoiceSessionReplay, VoiceSessionReplayHTMLHandlerOptions, VoiceSessionReplayOptions, VoiceSessionReplayRoutesOptions, VoiceSessionReplayTurn } from './sessionReplay';
|
|
106
106
|
export type { AnthropicVoiceAssistantModelOptions, GeminiVoiceAssistantModelOptions, OpenAIVoiceAssistantModelOptions, VoiceProviderRouterEvent, VoiceProviderRouterFallbackMode, VoiceProviderRouterHealthOptions, VoiceProviderRouterOptions, VoiceProviderRouterPolicy, VoiceProviderRouterPolicyPreset, VoiceProviderRouterPolicyWeights, VoiceProviderRouterProviderHealth, VoiceProviderRouterProviderProfile, VoiceProviderRouterStrategy, VoiceJSONAssistantModelHandler, VoiceJSONAssistantModelOptions } from './modelAdapters';
|
package/dist/index.js
CHANGED
|
@@ -6661,6 +6661,60 @@ recipient-no-consent,Barbara,+15550001004,no,delta`,
|
|
|
6661
6661
|
}
|
|
6662
6662
|
};
|
|
6663
6663
|
};
|
|
6664
|
+
var evaluateVoiceCampaignReadinessEvidence = (report, input = {}) => {
|
|
6665
|
+
const issues = [];
|
|
6666
|
+
const maxFailedChecks = input.maxFailedChecks ?? 0;
|
|
6667
|
+
const requireOk = input.requireOk ?? true;
|
|
6668
|
+
const failed = report.checks.filter((check) => check.status === "fail").length;
|
|
6669
|
+
const passed = report.checks.length - failed;
|
|
6670
|
+
const checkNames = new Set(report.checks.map((check) => check.name));
|
|
6671
|
+
const blockedReasons = [
|
|
6672
|
+
...new Set(Object.values(report.ticks).flatMap((tick) => tick.blocked.map((block) => block.reason)))
|
|
6673
|
+
].sort();
|
|
6674
|
+
if (requireOk && !report.ok) {
|
|
6675
|
+
issues.push("Expected campaign readiness proof to pass.");
|
|
6676
|
+
}
|
|
6677
|
+
if (failed > maxFailedChecks) {
|
|
6678
|
+
issues.push(`Expected at most ${String(maxFailedChecks)} failing campaign readiness check(s), found ${String(failed)}.`);
|
|
6679
|
+
}
|
|
6680
|
+
if (input.minTotalImports !== undefined && report.import.total < input.minTotalImports) {
|
|
6681
|
+
issues.push(`Expected at least ${String(input.minTotalImports)} campaign import row(s), found ${String(report.import.total)}.`);
|
|
6682
|
+
}
|
|
6683
|
+
if (input.minAcceptedImports !== undefined && report.import.accepted.length < input.minAcceptedImports) {
|
|
6684
|
+
issues.push(`Expected at least ${String(input.minAcceptedImports)} accepted campaign import(s), found ${String(report.import.accepted.length)}.`);
|
|
6685
|
+
}
|
|
6686
|
+
if (input.minRejectedImports !== undefined && report.import.rejected.length < input.minRejectedImports) {
|
|
6687
|
+
issues.push(`Expected at least ${String(input.minRejectedImports)} rejected campaign import(s), found ${String(report.import.rejected.length)}.`);
|
|
6688
|
+
}
|
|
6689
|
+
for (const check of input.requiredChecks ?? []) {
|
|
6690
|
+
if (!checkNames.has(check)) {
|
|
6691
|
+
issues.push(`Missing campaign readiness check: ${check}.`);
|
|
6692
|
+
}
|
|
6693
|
+
}
|
|
6694
|
+
for (const reason of input.requiredBlockedReasons ?? []) {
|
|
6695
|
+
if (!blockedReasons.includes(reason)) {
|
|
6696
|
+
issues.push(`Missing campaign readiness blocked reason: ${reason}.`);
|
|
6697
|
+
}
|
|
6698
|
+
}
|
|
6699
|
+
return {
|
|
6700
|
+
acceptedImports: report.import.accepted.length,
|
|
6701
|
+
blockedReasons,
|
|
6702
|
+
failed,
|
|
6703
|
+
issues,
|
|
6704
|
+
ok: issues.length === 0,
|
|
6705
|
+
passed,
|
|
6706
|
+
rejectedImports: report.import.rejected.length,
|
|
6707
|
+
total: report.checks.length,
|
|
6708
|
+
totalImports: report.import.total
|
|
6709
|
+
};
|
|
6710
|
+
};
|
|
6711
|
+
var assertVoiceCampaignReadinessEvidence = (report, input = {}) => {
|
|
6712
|
+
const assertion = evaluateVoiceCampaignReadinessEvidence(report, input);
|
|
6713
|
+
if (!assertion.ok) {
|
|
6714
|
+
throw new Error(`Voice campaign readiness evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
6715
|
+
}
|
|
6716
|
+
return assertion;
|
|
6717
|
+
};
|
|
6664
6718
|
var escapeHtml3 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
6665
6719
|
var getString = (value) => typeof value === "string" && value.length > 0 ? value : undefined;
|
|
6666
6720
|
var campaignAttemptSessionId = (attempt) => getString(attempt.metadata?.sessionId) ?? getString(attempt.metadata?.voiceSessionId) ?? getString(attempt.metadata?.callSessionId);
|
|
@@ -7094,6 +7148,56 @@ var runVoiceCampaignDialerProof = async (options = {}) => {
|
|
|
7094
7148
|
providers: results
|
|
7095
7149
|
};
|
|
7096
7150
|
};
|
|
7151
|
+
var evaluateVoiceCampaignDialerProofEvidence = (report, input = {}) => {
|
|
7152
|
+
const issues = [];
|
|
7153
|
+
const maxFailedProviders = input.maxFailedProviders ?? 0;
|
|
7154
|
+
const requireOk = input.requireOk ?? true;
|
|
7155
|
+
const requireDryRun = input.requireDryRun ?? true;
|
|
7156
|
+
const providers = report.providers.map((provider) => provider.provider).sort();
|
|
7157
|
+
const carrierRequests = report.providers.reduce((total, provider) => total + provider.carrierRequests.length, 0);
|
|
7158
|
+
const successfulOutcomes = report.providers.reduce((total, provider) => total + provider.outcomes.filter((outcome) => outcome.applied).length, 0);
|
|
7159
|
+
const failedProviders = report.providers.filter((provider) => provider.carrierRequests.length === 0 || provider.outcomes.some((outcome) => !outcome.applied)).length;
|
|
7160
|
+
if (requireOk && !report.ok) {
|
|
7161
|
+
issues.push("Expected campaign dialer proof to pass.");
|
|
7162
|
+
}
|
|
7163
|
+
if (requireDryRun && report.mode !== "dry-run") {
|
|
7164
|
+
issues.push(`Expected campaign dialer proof mode dry-run, found ${report.mode}.`);
|
|
7165
|
+
}
|
|
7166
|
+
if (failedProviders > maxFailedProviders) {
|
|
7167
|
+
issues.push(`Expected at most ${String(maxFailedProviders)} failing campaign dialer provider(s), found ${String(failedProviders)}.`);
|
|
7168
|
+
}
|
|
7169
|
+
if (input.minProviders !== undefined && report.providers.length < input.minProviders) {
|
|
7170
|
+
issues.push(`Expected at least ${String(input.minProviders)} campaign dialer provider(s), found ${String(report.providers.length)}.`);
|
|
7171
|
+
}
|
|
7172
|
+
if (input.minCarrierRequests !== undefined && carrierRequests < input.minCarrierRequests) {
|
|
7173
|
+
issues.push(`Expected at least ${String(input.minCarrierRequests)} campaign dialer carrier request(s), found ${String(carrierRequests)}.`);
|
|
7174
|
+
}
|
|
7175
|
+
if (input.minSuccessfulOutcomes !== undefined && successfulOutcomes < input.minSuccessfulOutcomes) {
|
|
7176
|
+
issues.push(`Expected at least ${String(input.minSuccessfulOutcomes)} applied campaign dialer outcome(s), found ${String(successfulOutcomes)}.`);
|
|
7177
|
+
}
|
|
7178
|
+
for (const provider of input.requiredProviders ?? []) {
|
|
7179
|
+
if (!providers.includes(provider)) {
|
|
7180
|
+
issues.push(`Missing campaign dialer provider: ${provider}.`);
|
|
7181
|
+
}
|
|
7182
|
+
}
|
|
7183
|
+
return {
|
|
7184
|
+
carrierRequests,
|
|
7185
|
+
failedProviders,
|
|
7186
|
+
issues,
|
|
7187
|
+
mode: report.mode,
|
|
7188
|
+
ok: issues.length === 0,
|
|
7189
|
+
providers,
|
|
7190
|
+
successfulOutcomes,
|
|
7191
|
+
totalProviders: report.providers.length
|
|
7192
|
+
};
|
|
7193
|
+
};
|
|
7194
|
+
var assertVoiceCampaignDialerProofEvidence = (report, input = {}) => {
|
|
7195
|
+
const assertion = evaluateVoiceCampaignDialerProofEvidence(report, input);
|
|
7196
|
+
if (!assertion.ok) {
|
|
7197
|
+
throw new Error(`Voice campaign dialer proof evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
7198
|
+
}
|
|
7199
|
+
return assertion;
|
|
7200
|
+
};
|
|
7097
7201
|
// src/audit.ts
|
|
7098
7202
|
var includes = (filter, value) => {
|
|
7099
7203
|
if (!filter) {
|
|
@@ -15280,6 +15384,61 @@ var runVoiceSimulationSuite = async (options) => {
|
|
|
15280
15384
|
total: sections.length
|
|
15281
15385
|
};
|
|
15282
15386
|
};
|
|
15387
|
+
var simulationSectionNames = [
|
|
15388
|
+
"fixtures",
|
|
15389
|
+
"outcomes",
|
|
15390
|
+
"scenarios",
|
|
15391
|
+
"sessions",
|
|
15392
|
+
"tools"
|
|
15393
|
+
];
|
|
15394
|
+
var evaluateVoiceSimulationSuiteEvidence = (report, input = {}) => {
|
|
15395
|
+
const issues = [];
|
|
15396
|
+
const maxFailed = input.maxFailed ?? 0;
|
|
15397
|
+
const maxActions = input.maxActions ?? 0;
|
|
15398
|
+
const sections = simulationSectionNames.filter((section) => report.summary[section] !== undefined);
|
|
15399
|
+
const sectionTotals = Object.fromEntries(sections.map((section) => [section, report.summary[section]?.total ?? 0]));
|
|
15400
|
+
if (report.failed > maxFailed) {
|
|
15401
|
+
issues.push(`Expected at most ${String(maxFailed)} failing simulation section(s), found ${String(report.failed)}.`);
|
|
15402
|
+
}
|
|
15403
|
+
if (report.actions.length > maxActions) {
|
|
15404
|
+
issues.push(`Expected at most ${String(maxActions)} simulation action(s), found ${String(report.actions.length)}.`);
|
|
15405
|
+
}
|
|
15406
|
+
if (input.minSections !== undefined && report.total < input.minSections) {
|
|
15407
|
+
issues.push(`Expected at least ${String(input.minSections)} simulation section(s), found ${String(report.total)}.`);
|
|
15408
|
+
}
|
|
15409
|
+
if (input.minPassed !== undefined && report.passed < input.minPassed) {
|
|
15410
|
+
issues.push(`Expected at least ${String(input.minPassed)} passing simulation section(s), found ${String(report.passed)}.`);
|
|
15411
|
+
}
|
|
15412
|
+
for (const section of input.requiredSections ?? []) {
|
|
15413
|
+
if (!sections.includes(section)) {
|
|
15414
|
+
issues.push(`Missing simulation section: ${section}.`);
|
|
15415
|
+
}
|
|
15416
|
+
}
|
|
15417
|
+
for (const [section, minimum] of Object.entries(input.sectionMinimums ?? {})) {
|
|
15418
|
+
const total = sectionTotals[section] ?? 0;
|
|
15419
|
+
if (total < minimum) {
|
|
15420
|
+
issues.push(`Expected simulation section ${section} to include at least ${String(minimum)} item(s), found ${String(total)}.`);
|
|
15421
|
+
}
|
|
15422
|
+
}
|
|
15423
|
+
return {
|
|
15424
|
+
actions: report.actions.length,
|
|
15425
|
+
failed: report.failed,
|
|
15426
|
+
issues,
|
|
15427
|
+
ok: issues.length === 0,
|
|
15428
|
+
passed: report.passed,
|
|
15429
|
+
sections,
|
|
15430
|
+
sectionTotals,
|
|
15431
|
+
status: report.status,
|
|
15432
|
+
total: report.total
|
|
15433
|
+
};
|
|
15434
|
+
};
|
|
15435
|
+
var assertVoiceSimulationSuiteEvidence = (report, input = {}) => {
|
|
15436
|
+
const assertion = evaluateVoiceSimulationSuiteEvidence(report, input);
|
|
15437
|
+
if (!assertion.ok) {
|
|
15438
|
+
throw new Error(`Voice simulation suite evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
15439
|
+
}
|
|
15440
|
+
return assertion;
|
|
15441
|
+
};
|
|
15283
15442
|
var renderSection = (label, summary) => {
|
|
15284
15443
|
if (!summary) {
|
|
15285
15444
|
return "";
|
|
@@ -30852,6 +31011,7 @@ export {
|
|
|
30852
31011
|
evaluateVoiceTrace,
|
|
30853
31012
|
evaluateVoiceToolContractEvidence,
|
|
30854
31013
|
evaluateVoiceTelephonyContract,
|
|
31014
|
+
evaluateVoiceSimulationSuiteEvidence,
|
|
30855
31015
|
evaluateVoiceQuality,
|
|
30856
31016
|
evaluateVoiceProviderStackGaps,
|
|
30857
31017
|
evaluateVoiceProviderStackEvidence,
|
|
@@ -30866,6 +31026,8 @@ export {
|
|
|
30866
31026
|
evaluateVoiceObservabilityExportReplayEvidence,
|
|
30867
31027
|
evaluateVoiceObservabilityExportDeliveryEvidence,
|
|
30868
31028
|
evaluateVoiceGuardrailPolicy,
|
|
31029
|
+
evaluateVoiceCampaignReadinessEvidence,
|
|
31030
|
+
evaluateVoiceCampaignDialerProofEvidence,
|
|
30869
31031
|
evaluateVoiceAgentSquadContractEvidence,
|
|
30870
31032
|
encodeTwilioMulawBase64,
|
|
30871
31033
|
deliverVoiceTraceEventsToSinks,
|
|
@@ -31179,6 +31341,7 @@ export {
|
|
|
31179
31341
|
buildEmptyVoiceProofTrendReport,
|
|
31180
31342
|
assignVoiceOpsTask,
|
|
31181
31343
|
assertVoiceToolContractEvidence,
|
|
31344
|
+
assertVoiceSimulationSuiteEvidence,
|
|
31182
31345
|
assertVoiceProviderStackEvidence,
|
|
31183
31346
|
assertVoiceProviderSloEvidence,
|
|
31184
31347
|
assertVoiceProviderRoutingContractEvidence,
|
|
@@ -31194,6 +31357,8 @@ export {
|
|
|
31194
31357
|
assertVoiceObservabilityExportRecord,
|
|
31195
31358
|
assertVoiceObservabilityExportDeliveryEvidence,
|
|
31196
31359
|
assertVoiceLatencySLOGate,
|
|
31360
|
+
assertVoiceCampaignReadinessEvidence,
|
|
31361
|
+
assertVoiceCampaignDialerProofEvidence,
|
|
31197
31362
|
assertVoiceAgentSquadContractEvidence,
|
|
31198
31363
|
assertVoiceAgentSquadContract,
|
|
31199
31364
|
applyVoiceTelephonyOutcome,
|
|
@@ -39,6 +39,26 @@ export type VoiceSimulationSuiteSectionSummary = {
|
|
|
39
39
|
status: VoiceSimulationSuiteStatus;
|
|
40
40
|
total: number;
|
|
41
41
|
};
|
|
42
|
+
export type VoiceSimulationSuiteSection = 'fixtures' | 'outcomes' | 'scenarios' | 'sessions' | 'tools';
|
|
43
|
+
export type VoiceSimulationSuiteAssertionInput = {
|
|
44
|
+
maxActions?: number;
|
|
45
|
+
maxFailed?: number;
|
|
46
|
+
minPassed?: number;
|
|
47
|
+
minSections?: number;
|
|
48
|
+
requiredSections?: VoiceSimulationSuiteSection[];
|
|
49
|
+
sectionMinimums?: Partial<Record<VoiceSimulationSuiteSection, number>>;
|
|
50
|
+
};
|
|
51
|
+
export type VoiceSimulationSuiteAssertionReport = {
|
|
52
|
+
actions: number;
|
|
53
|
+
failed: number;
|
|
54
|
+
issues: string[];
|
|
55
|
+
ok: boolean;
|
|
56
|
+
passed: number;
|
|
57
|
+
sections: VoiceSimulationSuiteSection[];
|
|
58
|
+
sectionTotals: Partial<Record<VoiceSimulationSuiteSection, number>>;
|
|
59
|
+
status: VoiceSimulationSuiteStatus;
|
|
60
|
+
total: number;
|
|
61
|
+
};
|
|
42
62
|
export type VoiceSimulationSuiteOptions<TSession extends VoiceSessionRecord = VoiceSessionRecord> = {
|
|
43
63
|
actionLinks?: {
|
|
44
64
|
fixtures?: string;
|
|
@@ -75,6 +95,8 @@ export type VoiceSimulationSuiteRoutesOptions<TSession extends VoiceSessionRecor
|
|
|
75
95
|
title?: string;
|
|
76
96
|
};
|
|
77
97
|
export declare const runVoiceSimulationSuite: <TSession extends VoiceSessionRecord = VoiceSessionRecord>(options: VoiceSimulationSuiteOptions<TSession>) => Promise<VoiceSimulationSuiteReport>;
|
|
98
|
+
export declare const evaluateVoiceSimulationSuiteEvidence: (report: VoiceSimulationSuiteReport, input?: VoiceSimulationSuiteAssertionInput) => VoiceSimulationSuiteAssertionReport;
|
|
99
|
+
export declare const assertVoiceSimulationSuiteEvidence: (report: VoiceSimulationSuiteReport, input?: VoiceSimulationSuiteAssertionInput) => VoiceSimulationSuiteAssertionReport;
|
|
78
100
|
export declare const renderVoiceSimulationSuiteHTML: (report: VoiceSimulationSuiteReport, options?: {
|
|
79
101
|
title?: string;
|
|
80
102
|
}) => string;
|