@absolutejs/voice 0.0.22-beta.263 → 0.0.22-beta.264

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/index.d.ts CHANGED
@@ -41,7 +41,7 @@ export { assertVoiceLatencySLOGate, buildVoiceLatencySLOGate, renderVoiceLatency
41
41
  export { createVoiceTurnQualityHTMLHandler, createVoiceTurnQualityJSONHandler, createVoiceTurnQualityRoutes, renderVoiceTurnQualityHTML, summarizeVoiceTurnQuality } from './turnQuality';
42
42
  export { assertVoiceOutcomeContractEvidence, createVoiceOutcomeContractHTMLHandler, createVoiceOutcomeContractJSONHandler, createVoiceOutcomeContractRoutes, evaluateVoiceOutcomeContractEvidence, renderVoiceOutcomeContractHTML, runVoiceOutcomeContractSuite } from './outcomeContract';
43
43
  export { applyVoiceTelephonyOutcome, createMemoryVoiceTelephonyWebhookIdempotencyStore, createVoiceTelephonyOutcomePolicy, createVoiceTelephonyWebhookHandler, createVoiceTelephonyWebhookRoutes, parseVoiceTelephonyWebhookEvent, resolveVoiceTelephonyOutcome, signVoiceTwilioWebhook, verifyVoiceTwilioWebhookSignature, voiceTelephonyOutcomeToRouteResult } from './telephonyOutcome';
44
- export { assertVoicePhoneAssistantEvidence, createVoicePhoneAgent, evaluateVoicePhoneAssistantEvidence } from './phoneAgent';
44
+ export { assertVoicePhoneCallControlEvidence, assertVoicePhoneAssistantEvidence, createVoicePhoneAgent, evaluateVoicePhoneCallControlEvidence, evaluateVoicePhoneAssistantEvidence } from './phoneAgent';
45
45
  export { createStoredVoiceCallReviewArtifact, createStoredVoiceExternalObjectMap, createStoredVoiceIntegrationEvent, createStoredVoiceOpsTask, createVoiceFileIncidentBundleStore, createVoiceFileExternalObjectMapStore, createVoiceFileAssistantMemoryStore, createVoiceFileAuditEventStore, createVoiceFileAuditSinkDeliveryStore, createVoiceFileCampaignStore, createVoiceFileIntegrationEventStore, createVoiceFileReviewStore, createVoiceFileRuntimeStorage, createVoiceFileSessionStore, createVoiceFileTaskStore, createVoiceFileTraceSinkDeliveryStore, createVoiceFileTraceEventStore } from './fileStore';
46
46
  export { createVoiceAssistantMemoryHandle, createVoiceAssistantMemoryRecord, createVoiceMemoryAssistantMemoryStore, resolveVoiceAssistantMemoryNamespace } from './assistantMemory';
47
47
  export { createAnthropicVoiceAssistantModel, createGeminiVoiceAssistantModel, createJSONVoiceAssistantModel, createOpenAIVoiceAssistantModel, resolveVoiceProviderRoutingPolicyPreset, createVoiceProviderRouter } from './modelAdapters';
@@ -116,7 +116,7 @@ export type { VoiceLatencySLOBudget, VoiceLatencySLOGateError, VoiceLatencySLOGa
116
116
  export type { VoiceTurnQualityHTMLHandlerOptions, VoiceTurnQualityItem, VoiceTurnQualityOptions, VoiceTurnQualityReport, VoiceTurnQualityRoutesOptions, VoiceTurnQualityStatus } from './turnQuality';
117
117
  export type { VoiceOutcomeContractAssertionInput, VoiceOutcomeContractAssertionReport, VoiceOutcomeContractDefinition, VoiceOutcomeContractHTMLHandlerOptions, VoiceOutcomeContractIssue, VoiceOutcomeContractOptions, VoiceOutcomeContractReport, VoiceOutcomeContractRoutesOptions, VoiceOutcomeContractStatus, VoiceOutcomeContractSuiteReport } from './outcomeContract';
118
118
  export type { VoiceTelephonyOutcomeAction, VoiceTelephonyOutcomeDecision, VoiceTelephonyOutcomePolicy, VoiceTelephonyOutcomeProviderEvent, VoiceTelephonyOutcomeRouteResult, VoiceTelephonyOutcomeStatusDecision, VoiceTelephonyWebhookDecision, VoiceTelephonyWebhookHandlerOptions, VoiceTelephonyWebhookIdempotencyStore, VoiceTelephonyWebhookParseInput, VoiceTelephonyWebhookProvider, VoiceTelephonyWebhookRoutesOptions, VoiceTelephonyWebhookVerificationResult, StoredVoiceTelephonyWebhookDecision } from './telephonyOutcome';
119
- export type { VoicePhoneAgentCarrier, VoicePhoneAgentCarrierSummary, VoicePhoneAssistantEvidenceInput, VoicePhoneAssistantEvidenceReport, VoicePhoneAgentLifecycleStage, VoicePhoneAgentPlivoCarrier, VoicePhoneAgentRoutes, VoicePhoneAgentRoutesOptions, VoicePhoneAgentSetupReport, VoicePhoneAgentTelnyxCarrier, VoicePhoneAgentTwilioCarrier } from './phoneAgent';
119
+ export type { VoicePhoneAgentCarrier, VoicePhoneAgentCarrierSummary, VoicePhoneAssistantEvidenceInput, VoicePhoneAssistantEvidenceReport, VoicePhoneCallControlEvidenceInput, VoicePhoneCallControlEvidenceReport, VoicePhoneAgentLifecycleStage, VoicePhoneAgentPlivoCarrier, VoicePhoneAgentRoutes, VoicePhoneAgentRoutesOptions, VoicePhoneAgentSetupReport, VoicePhoneAgentTelnyxCarrier, VoicePhoneAgentTwilioCarrier } from './phoneAgent';
120
120
  export type { VoicePhoneAgentProductionSmokeIssue, VoicePhoneAgentProductionSmokeHandlerOptions, VoicePhoneAgentProductionSmokeHTMLHandlerOptions, VoicePhoneAgentProductionSmokeOptions, VoicePhoneAgentProductionSmokeReport, VoicePhoneAgentProductionSmokeRoutesOptions, VoicePhoneAgentProductionSmokeRequirement } from './phoneAgentProductionSmoke';
121
121
  export type { VoiceOpsConsoleLink, VoiceOpsConsoleReport, VoiceOpsConsoleRoutesOptions } from './opsConsoleRoutes';
122
122
  export type { VoiceOpsStatus, VoiceOpsStatusLink, VoiceOpsStatusOptions, VoiceOpsStatusReport, VoiceOpsStatusRoutesOptions } from './opsStatus';
package/dist/index.js CHANGED
@@ -20113,6 +20113,56 @@ var assertVoicePhoneAssistantEvidence = (report, input = {}) => {
20113
20113
  }
20114
20114
  return assertion;
20115
20115
  };
20116
+ var evaluateVoicePhoneCallControlEvidence = (input = {}) => {
20117
+ const issues = [];
20118
+ const setup = input.setup;
20119
+ const productionSmokes = input.productionSmokes ?? [];
20120
+ const lifecycleStages = uniqueSorted3(setup?.lifecycleStages ?? []);
20121
+ const providers = uniqueSorted3(productionSmokes.map((report) => report.provider).filter((provider) => Boolean(provider)));
20122
+ const outcomes = uniqueSorted3(productionSmokes.flatMap((report) => report.observed.lifecycleOutcomes));
20123
+ const failedSmokeReports = productionSmokes.filter((report) => !report.pass).length;
20124
+ const passingSmokeReports = productionSmokes.length - failedSmokeReports;
20125
+ if (productionSmokes.length === 0) {
20126
+ issues.push("Expected phone call-control smoke report(s) to be present.");
20127
+ }
20128
+ if (input.requireSetupLifecycleStages ?? true) {
20129
+ if (!setup) {
20130
+ issues.push("Expected phone setup report to be present.");
20131
+ }
20132
+ for (const stage of findMissing3(lifecycleStages, input.requiredLifecycleStages)) {
20133
+ issues.push(`Missing phone call-control lifecycle stage: ${stage}.`);
20134
+ }
20135
+ }
20136
+ if (input.minPassingSmokeReports !== undefined && passingSmokeReports < input.minPassingSmokeReports) {
20137
+ issues.push(`Expected at least ${String(input.minPassingSmokeReports)} passing phone call-control smoke report(s), found ${String(passingSmokeReports)}.`);
20138
+ }
20139
+ if (input.maxFailedSmokeReports !== undefined && failedSmokeReports > input.maxFailedSmokeReports) {
20140
+ issues.push(`Expected at most ${String(input.maxFailedSmokeReports)} failing phone call-control smoke report(s), found ${String(failedSmokeReports)}.`);
20141
+ }
20142
+ for (const provider of findMissing3(providers, input.requiredProviders)) {
20143
+ issues.push(`Missing phone call-control provider: ${provider}.`);
20144
+ }
20145
+ for (const outcome of findMissing3(outcomes, input.requiredOutcomes)) {
20146
+ issues.push(`Missing phone call-control outcome: ${outcome}.`);
20147
+ }
20148
+ return {
20149
+ failedSmokeReports,
20150
+ issues,
20151
+ lifecycleStages,
20152
+ ok: issues.length === 0,
20153
+ outcomes,
20154
+ passingSmokeReports,
20155
+ providers,
20156
+ smokeReports: productionSmokes.length
20157
+ };
20158
+ };
20159
+ var assertVoicePhoneCallControlEvidence = (input = {}) => {
20160
+ const assertion = evaluateVoicePhoneCallControlEvidence(input);
20161
+ if (!assertion.ok) {
20162
+ throw new Error(`Voice phone call-control evidence assertion failed: ${assertion.issues.join(" ")}`);
20163
+ }
20164
+ return assertion;
20165
+ };
20116
20166
  var buildVoicePhoneAgentSetupInstructions = (input) => input.carriers.map((carrier) => {
20117
20167
  const entry = findCarrierMatrixEntry(input.matrix, carrier);
20118
20168
  const urls = entry?.setup.urls;
@@ -31380,6 +31430,7 @@ export {
31380
31430
  evaluateVoiceProofTrendEvidence,
31381
31431
  evaluateVoiceProductionReadinessEvidence,
31382
31432
  evaluateVoicePlatformCoverage,
31433
+ evaluateVoicePhoneCallControlEvidence,
31383
31434
  evaluateVoicePhoneAssistantEvidence,
31384
31435
  evaluateVoiceOutcomeContractEvidence,
31385
31436
  evaluateVoiceOperationsRecordGuardrails,
@@ -31713,6 +31764,7 @@ export {
31713
31764
  assertVoiceProofTrendEvidence,
31714
31765
  assertVoiceProductionReadinessEvidence,
31715
31766
  assertVoicePlatformCoverage,
31767
+ assertVoicePhoneCallControlEvidence,
31716
31768
  assertVoicePhoneAssistantEvidence,
31717
31769
  assertVoiceOutcomeContractEvidence,
31718
31770
  assertVoiceOperationsRecordGuardrails,
@@ -6,6 +6,7 @@ import { type VoiceTelephonyCarrierMatrix, type VoiceTelephonyCarrierMatrixRoute
6
6
  import { type VoicePhoneAgentProductionSmokeRoutesOptions } from './phoneAgentProductionSmoke';
7
7
  import { type VoiceCampaignDialerProofAssertionReport, type VoiceCampaignDialerProofProvider, type VoiceCampaignDialerProofReport } from './campaignDialers';
8
8
  import type { VoiceTelephonyProvider } from './telephony/contract';
9
+ import type { VoicePhoneAgentProductionSmokeReport } from './phoneAgentProductionSmoke';
9
10
  import type { VoiceSessionRecord } from './types';
10
11
  export type VoicePhoneAgentLifecycleStage = 'ringing' | 'answered' | 'media-started' | 'transcript' | 'assistant-response' | 'transfer' | 'voicemail' | 'no-answer' | 'completed' | 'failed';
11
12
  type VoicePhoneAgentCarrierBase = {
@@ -110,7 +111,29 @@ export type VoicePhoneAssistantEvidenceReport = {
110
111
  setupPath?: string;
111
112
  smokePassing: number;
112
113
  };
114
+ export type VoicePhoneCallControlEvidenceInput = {
115
+ maxFailedSmokeReports?: number;
116
+ minPassingSmokeReports?: number;
117
+ productionSmokes?: VoicePhoneAgentProductionSmokeReport[];
118
+ requiredLifecycleStages?: VoicePhoneAgentLifecycleStage[];
119
+ requiredOutcomes?: string[];
120
+ requiredProviders?: VoiceTelephonyProvider[];
121
+ requireSetupLifecycleStages?: boolean;
122
+ setup?: VoicePhoneAgentSetupReport;
123
+ };
124
+ export type VoicePhoneCallControlEvidenceReport = {
125
+ failedSmokeReports: number;
126
+ issues: string[];
127
+ lifecycleStages: VoicePhoneAgentLifecycleStage[];
128
+ ok: boolean;
129
+ outcomes: string[];
130
+ passingSmokeReports: number;
131
+ providers: VoiceTelephonyProvider[];
132
+ smokeReports: number;
133
+ };
113
134
  export declare const evaluateVoicePhoneAssistantEvidence: (report: VoicePhoneAgentSetupReport, input?: VoicePhoneAssistantEvidenceInput) => VoicePhoneAssistantEvidenceReport;
114
135
  export declare const assertVoicePhoneAssistantEvidence: (report: VoicePhoneAgentSetupReport, input?: VoicePhoneAssistantEvidenceInput) => VoicePhoneAssistantEvidenceReport;
136
+ export declare const evaluateVoicePhoneCallControlEvidence: (input?: VoicePhoneCallControlEvidenceInput) => VoicePhoneCallControlEvidenceReport;
137
+ export declare const assertVoicePhoneCallControlEvidence: (input?: VoicePhoneCallControlEvidenceInput) => VoicePhoneCallControlEvidenceReport;
115
138
  export declare const createVoicePhoneAgent: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options: VoicePhoneAgentRoutesOptions<TContext, TSession, TResult>) => VoicePhoneAgentRoutes;
116
139
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.263",
3
+ "version": "0.0.22-beta.264",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",