@absolutejs/voice 0.0.22-beta.250 → 0.0.22-beta.252
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 +30 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +231 -0
- package/dist/observabilityExport.d.ts +53 -0
- package/dist/platformCoverage.d.ts +18 -0
- package/dist/productionReadiness.d.ts +18 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1386,6 +1386,21 @@ app.use(
|
|
|
1386
1386
|
);
|
|
1387
1387
|
```
|
|
1388
1388
|
|
|
1389
|
+
Use `evaluateVoiceProductionReadinessEvidence(...)` or `assertVoiceProductionReadinessEvidence(...)` when a proof pack should check the readiness JSON directly. This keeps release gates tied to structured evidence instead of route text:
|
|
1390
|
+
|
|
1391
|
+
```ts
|
|
1392
|
+
const readiness = await buildVoiceProductionReadinessReport({
|
|
1393
|
+
store: runtime.traces,
|
|
1394
|
+
providerSlo,
|
|
1395
|
+
opsRecovery
|
|
1396
|
+
});
|
|
1397
|
+
|
|
1398
|
+
assertVoiceProductionReadinessEvidence(readiness, {
|
|
1399
|
+
requireStatus: 'pass',
|
|
1400
|
+
requiredChecks: ['Provider SLO gates', 'Session health', 'Turn quality']
|
|
1401
|
+
});
|
|
1402
|
+
```
|
|
1403
|
+
|
|
1389
1404
|
Built-in profiles:
|
|
1390
1405
|
|
|
1391
1406
|
- `meeting-recorder`: live latency, session health, provider fallback, routing contracts, reconnect proof, and barge-in interruption proof.
|
|
@@ -2874,6 +2889,21 @@ console.log(voiceObservabilityExportSchemaId, voiceObservabilityExportSchemaVers
|
|
|
2874
2889
|
|
|
2875
2890
|
Use `validateVoiceObservabilityExportRecord(...)` or `assertVoiceObservabilityExportRecord(...)` when reading customer-owned records back from SQLite, Postgres, S3, a webhook collector, a warehouse, or a SIEM. The validator accepts manifests, artifact indexes, delivery reports, delivery receipts, delivery histories, and database payload records, then checks the stable schema id/version plus the minimum shape required for safe ingestion.
|
|
2876
2891
|
|
|
2892
|
+
Use `evaluateVoicePlatformCoverage(...)` or `assertVoicePlatformCoverage(...)` when the product needs a structured "Vapi replacement surface coverage" gate. The assertion checks required buyer surfaces, evidence artifact names, total surface count, and failed-surface count:
|
|
2893
|
+
|
|
2894
|
+
```ts
|
|
2895
|
+
const coverage = buildVoicePlatformCoverageSummary({
|
|
2896
|
+
coverage: latestProofPack.vapiCoverage,
|
|
2897
|
+
runId: latestProofPack.runId
|
|
2898
|
+
});
|
|
2899
|
+
|
|
2900
|
+
assertVoicePlatformCoverage(coverage, {
|
|
2901
|
+
minSurfaces: 12,
|
|
2902
|
+
requiredEvidence: ['productionReadiness', 'operationsRecord', 'providerSlo'],
|
|
2903
|
+
requiredSurfaces: ['Web voice assistant', 'Call logs and incident handoff']
|
|
2904
|
+
});
|
|
2905
|
+
```
|
|
2906
|
+
|
|
2877
2907
|
Use `replayVoiceObservabilityExport(...)` when you need to prove an already-delivered evidence bundle is still usable:
|
|
2878
2908
|
|
|
2879
2909
|
```ts
|
package/dist/index.d.ts
CHANGED
|
@@ -14,8 +14,8 @@ export { buildVoiceDiagnosticsMarkdown, createVoiceDiagnosticsRoutes, resolveVoi
|
|
|
14
14
|
export { buildVoiceDemoReadyReport, createVoiceDemoReadyRoutes, renderVoiceDemoReadyHTML } from './demoReadyRoutes';
|
|
15
15
|
export { buildVoiceDeliverySinkReport, createVoiceDeliverySinkDescriptor, createVoiceDeliverySinkPair, createVoiceDeliverySinkRoutes, createVoiceFileDeliverySink, createVoicePostgresDeliverySink, createVoiceS3DeliverySink, createVoiceSQLiteDeliverySink, createVoiceWebhookDeliverySink, renderVoiceDeliverySinkHTML } from './deliverySinkRoutes';
|
|
16
16
|
export { buildVoiceOpsActionHistoryReport, createVoiceOpsActionAuditRoutes, recordVoiceOpsActionAudit, renderVoiceOpsActionHistoryHTML } from './opsActionAuditRoutes';
|
|
17
|
-
export { buildVoicePlatformCoverageSummary, createVoicePlatformCoverageRoutes } from './platformCoverage';
|
|
18
|
-
export type { VoicePlatformCoverageEvidence, VoicePlatformCoverageRoutesOptions, VoicePlatformCoverageStatus, VoicePlatformCoverageSummary, VoicePlatformCoverageSummaryInput, VoicePlatformCoverageSurface } from './platformCoverage';
|
|
17
|
+
export { assertVoicePlatformCoverage, buildVoicePlatformCoverageSummary, createVoicePlatformCoverageRoutes, evaluateVoicePlatformCoverage } from './platformCoverage';
|
|
18
|
+
export type { VoicePlatformCoverageAssertionInput, VoicePlatformCoverageAssertionReport, VoicePlatformCoverageEvidence, VoicePlatformCoverageRoutesOptions, VoicePlatformCoverageStatus, VoicePlatformCoverageSummary, VoicePlatformCoverageSummaryInput, VoicePlatformCoverageSurface } from './platformCoverage';
|
|
19
19
|
export { buildEmptyVoiceProofTrendReport, buildVoiceProofTrendReport, createVoiceProofTrendRoutes, DEFAULT_VOICE_PROOF_TRENDS_MAX_AGE_MS, formatVoiceProofTrendAge, normalizeVoiceProofTrendReport, readVoiceProofTrendReportFile } from './proofTrends';
|
|
20
20
|
export type { VoiceProofTrendCycle, VoiceProofTrendReport, VoiceProofTrendReportInput, VoiceProofTrendRoutesOptions, VoiceProofTrendStatus, VoiceProofTrendSummary } from './proofTrends';
|
|
21
21
|
export { buildVoiceLiveOpsControlState, createVoiceLiveOpsController, createVoiceLiveOpsRoutes, createVoiceMemoryLiveOpsControlStore, getVoiceLiveOpsControlStatus, VOICE_LIVE_OPS_ACTIONS } from './liveOps';
|
|
@@ -52,12 +52,12 @@ export { createVoiceProviderCapabilityHTMLHandler, createVoiceProviderCapability
|
|
|
52
52
|
export { assertVoiceProviderRoutingContract, runVoiceProviderRoutingContract } from './providerRoutingContract';
|
|
53
53
|
export { assertVoiceProviderSloEvidence, buildVoiceProviderSloReport, createVoiceProviderSloRoutes, evaluateVoiceProviderSloEvidence, renderVoiceProviderSloHTML, renderVoiceProviderSloMarkdown } from './providerSlo';
|
|
54
54
|
export { createVoicePhoneAgentProductionSmokeHTMLHandler, createVoicePhoneAgentProductionSmokeJSONHandler, createVoicePhoneAgentProductionSmokeRoutes, renderVoicePhoneAgentProductionSmokeHTML, runVoicePhoneAgentProductionSmokeContract } from './phoneAgentProductionSmoke';
|
|
55
|
-
export { buildVoiceProductionReadinessGate, buildVoiceProductionReadinessReport, createVoiceProductionReadinessRoutes, renderVoiceProductionReadinessHTML, summarizeVoiceProductionReadinessGate } from './productionReadiness';
|
|
55
|
+
export { assertVoiceProductionReadinessEvidence, buildVoiceProductionReadinessGate, buildVoiceProductionReadinessReport, createVoiceProductionReadinessRoutes, evaluateVoiceProductionReadinessEvidence, renderVoiceProductionReadinessHTML, summarizeVoiceProductionReadinessGate } from './productionReadiness';
|
|
56
56
|
export { createVoiceReadinessProfile, recommendVoiceReadinessProfile } from './readinessProfiles';
|
|
57
57
|
export { buildVoiceProviderContractMatrix, createVoiceProviderContractMatrixHTMLHandler, createVoiceProviderContractMatrixJSONHandler, createVoiceProviderContractMatrixPreset, createVoiceProviderContractMatrixRoutes, evaluateVoiceProviderStackGaps, renderVoiceProviderContractMatrixHTML, recommendVoiceProviderStack } from './providerStackRecommendations';
|
|
58
58
|
export { buildVoiceOpsConsoleReport, createVoiceOpsConsoleRoutes, renderVoiceOpsConsoleHTML } from './opsConsoleRoutes';
|
|
59
59
|
export { assertVoiceOperationsRecordGuardrails, buildVoiceOperationsRecord, createVoiceOperationsRecordRoutes, evaluateVoiceOperationsRecordGuardrails, renderVoiceOperationsRecordGuardrailMarkdown, renderVoiceOperationsRecordHTML, renderVoiceOperationsRecordIncidentMarkdown } from './operationsRecord';
|
|
60
|
-
export { assertVoiceObservabilityExportRecord, buildVoiceObservabilityArtifactIndex, buildVoiceObservabilityExportDeliveryHistory, buildVoiceObservabilityExportReplayReport, buildVoiceObservabilityExport, assertVoiceObservabilityExportSchema, createVoiceObservabilityExportSchema, createVoiceFileObservabilityExportDeliveryReceiptStore, createVoiceMemoryObservabilityExportDeliveryReceiptStore, createVoiceObservabilityExportRoutes, createVoiceObservabilityExportReplayRoutes, deliverVoiceObservabilityExport, loadVoiceObservabilityExportReplaySource, replayVoiceObservabilityExport, renderVoiceObservabilityExportReplayHTML, renderVoiceObservabilityExportMarkdown, validateVoiceObservabilityExportRecord, voiceObservabilityExportSchemaId, voiceObservabilityExportSchemaVersion } from './observabilityExport';
|
|
60
|
+
export { assertVoiceObservabilityExportDeliveryEvidence, assertVoiceObservabilityExportRecord, assertVoiceObservabilityExportReplayEvidence, buildVoiceObservabilityArtifactIndex, buildVoiceObservabilityExportDeliveryHistory, buildVoiceObservabilityExportReplayReport, buildVoiceObservabilityExport, assertVoiceObservabilityExportSchema, createVoiceObservabilityExportSchema, createVoiceFileObservabilityExportDeliveryReceiptStore, createVoiceMemoryObservabilityExportDeliveryReceiptStore, createVoiceObservabilityExportRoutes, createVoiceObservabilityExportReplayRoutes, deliverVoiceObservabilityExport, evaluateVoiceObservabilityExportDeliveryEvidence, evaluateVoiceObservabilityExportReplayEvidence, loadVoiceObservabilityExportReplaySource, replayVoiceObservabilityExport, renderVoiceObservabilityExportReplayHTML, renderVoiceObservabilityExportMarkdown, validateVoiceObservabilityExportRecord, voiceObservabilityExportSchemaId, voiceObservabilityExportSchemaVersion } from './observabilityExport';
|
|
61
61
|
export { buildVoiceOpsRecoveryReadinessCheck, buildVoiceOpsRecoveryReport, createVoiceOpsRecoveryRoutes, renderVoiceOpsRecoveryHTML, renderVoiceOpsRecoveryMarkdown } from './opsRecovery';
|
|
62
62
|
export { buildVoiceIncidentBundle, createStoredVoiceIncidentBundleArtifact, createVoiceIncidentBundleRoutes, createVoiceMemoryIncidentBundleStore, pruneVoiceIncidentBundleArtifacts, saveVoiceIncidentBundleArtifact } from './incidentBundle';
|
|
63
63
|
export { summarizeVoiceOpsStatus } from './opsStatus';
|
|
@@ -120,11 +120,11 @@ export type { VoicePhoneAgentCarrier, VoicePhoneAgentCarrierSummary, VoicePhoneA
|
|
|
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';
|
|
123
|
-
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';
|
|
123
|
+
export type { VoiceProductionReadinessAction, VoiceProductionReadinessAuditOptions, VoiceProductionReadinessAuditRequirement, VoiceProductionReadinessAuditSummary, VoiceProductionReadinessAssertionInput, VoiceProductionReadinessAssertionReport, VoiceProductionReadinessCheck, VoiceProductionReadinessGateIssue, VoiceProductionReadinessGateOptions, VoiceProductionReadinessGateProfile, VoiceProductionReadinessGateProfileSurface, VoiceProductionReadinessGateReport, VoiceProductionReadinessOpsActionHistoryOptions, VoiceProductionReadinessOpsActionHistorySummary, VoiceProductionReadinessOperationsRecordLink, VoiceProductionReadinessOperationsRecordLinks, VoiceProductionReadinessProfileExplanation, VoiceProductionReadinessProfileSurface, VoiceProductionReadinessProofSource, VoiceProductionReadinessReport, VoiceProductionReadinessRoutesOptions, VoiceProductionReadinessTraceDeliverySummary, VoiceProductionReadinessAuditDeliveryOptions, VoiceProductionReadinessAuditDeliverySummary, VoiceProductionReadinessTraceDeliveryOptions, VoiceProductionReadinessStatus } from './productionReadiness';
|
|
124
124
|
export type { VoiceReadinessProfileName, VoiceReadinessProfileOptions, VoiceReadinessProfileRecommendation, VoiceReadinessProfileRecommendationScore, VoiceReadinessProfileRoutesOptions } from './readinessProfiles';
|
|
125
125
|
export type { VoiceProviderStackChoice, VoiceProviderStackCapabilities, VoiceProviderStackCapabilityGap, VoiceProviderStackCapabilityGapInput, VoiceProviderStackCapabilityGapReport, VoiceProviderContractCheck, VoiceProviderContractCheckStatus, VoiceProviderContractDefinition, VoiceProviderContractMatrixHandlerOptions, VoiceProviderContractMatrixHTMLHandlerOptions, VoiceProviderContractMatrixInput, VoiceProviderContractMatrixPresetOptions, VoiceProviderContractMatrixReport, VoiceProviderContractMatrixRoutesOptions, VoiceProviderContractMatrixRow, VoiceProviderStackInput, VoiceProviderStackKind, VoiceProviderStackRecommendation } from './providerStackRecommendations';
|
|
126
126
|
export type { VoiceOperationsRecord, VoiceOperationsRecordAgentHandoff, VoiceOperationsRecordAuditSummary, VoiceOperationsRecordGuardrailAssertionInput, VoiceOperationsRecordGuardrailAssertionReport, VoiceOperationsRecordGuardrailDecision, VoiceOperationsRecordGuardrailFinding, VoiceOperationsRecordGuardrailSummary, VoiceOperationsRecordIntegrationEventSummary, VoiceOperationsRecordOptions, VoiceOperationsRecordOutcome, VoiceOperationsRecordProviderDecision, VoiceOperationsRecordReviewSummary, VoiceOperationsRecordRoutesOptions, VoiceOperationsRecordStatus, VoiceOperationsRecordTaskSummary, VoiceOperationsRecordTranscriptTurn, VoiceOperationsRecordTool } from './operationsRecord';
|
|
127
|
-
export type { VoiceObservabilityExportArtifact, VoiceObservabilityExportArtifactChecksum, VoiceObservabilityExportArtifactFreshness, VoiceObservabilityExportArtifactIndex, VoiceObservabilityExportArtifactIndexItem, VoiceObservabilityExportArtifactKind, VoiceObservabilityExportDeliverySummary, VoiceObservabilityExportDeliveryDestination, VoiceObservabilityExportDeliveryDestinationResult, VoiceObservabilityExportDeliveryHistory, VoiceObservabilityExportDeliveryOptions, VoiceObservabilityExportDeliveryReceipt, VoiceObservabilityExportDeliveryReceiptStore, VoiceObservabilityExportDeliveryReport, VoiceObservabilityExportEnvelope, VoiceObservabilityExportIssue, VoiceObservabilityExportIssueCode, VoiceObservabilityExportOptions, VoiceObservabilityExportIngestedRecordKind, VoiceObservabilityExportRedactionSummary, VoiceObservabilityExportRecordValidationOptions, VoiceObservabilityExportReplayIssue, VoiceObservabilityExportReplayIssueCode, VoiceObservabilityExportReplayRecords, VoiceObservabilityExportReplayReport, VoiceObservabilityExportReplayRoutesOptions, VoiceObservabilityExportReplaySource, VoiceObservabilityExportReport, VoiceObservabilityExportRoutesOptions, VoiceObservabilityExportSchema, VoiceObservabilityExportStatus, VoiceObservabilityExportValidationIssue, VoiceObservabilityExportValidationResult } from './observabilityExport';
|
|
127
|
+
export type { VoiceObservabilityExportArtifact, VoiceObservabilityExportArtifactChecksum, VoiceObservabilityExportArtifactFreshness, VoiceObservabilityExportArtifactIndex, VoiceObservabilityExportArtifactIndexItem, VoiceObservabilityExportArtifactKind, VoiceObservabilityExportDeliveryAssertionInput, VoiceObservabilityExportDeliveryAssertionReport, VoiceObservabilityExportDeliverySummary, VoiceObservabilityExportDeliveryDestination, VoiceObservabilityExportDeliveryDestinationResult, VoiceObservabilityExportDeliveryHistory, VoiceObservabilityExportDeliveryOptions, VoiceObservabilityExportDeliveryReceipt, VoiceObservabilityExportDeliveryReceiptStore, VoiceObservabilityExportDeliveryReport, VoiceObservabilityExportEnvelope, VoiceObservabilityExportIssue, VoiceObservabilityExportIssueCode, VoiceObservabilityExportOptions, VoiceObservabilityExportIngestedRecordKind, VoiceObservabilityExportRedactionSummary, VoiceObservabilityExportRecordValidationOptions, VoiceObservabilityExportReplayIssue, VoiceObservabilityExportReplayIssueCode, VoiceObservabilityExportReplayAssertionInput, VoiceObservabilityExportReplayAssertionReport, VoiceObservabilityExportReplayRecords, VoiceObservabilityExportReplayReport, VoiceObservabilityExportReplayRoutesOptions, VoiceObservabilityExportReplaySource, VoiceObservabilityExportReport, VoiceObservabilityExportRoutesOptions, VoiceObservabilityExportSchema, VoiceObservabilityExportStatus, VoiceObservabilityExportValidationIssue, VoiceObservabilityExportValidationResult } from './observabilityExport';
|
|
128
128
|
export type { VoiceOpsRecoveryFailedSession, VoiceOpsRecoveryInterventionSummary, VoiceOpsRecoveryIssue, VoiceOpsRecoveryIssueCode, VoiceOpsRecoveryLinks, VoiceOpsRecoveryProviderSummary, VoiceOpsRecoveryReport, VoiceOpsRecoveryReportOptions, VoiceOpsRecoveryRoutesOptions, VoiceOpsRecoveryStatus } from './opsRecovery';
|
|
129
129
|
export type { StoredVoiceIncidentBundleArtifact, VoiceIncidentBundle, VoiceIncidentBundleArtifactOptions, VoiceIncidentBundleFormat, VoiceIncidentBundleOptions, VoiceIncidentBundleRetentionOptions, VoiceIncidentBundleRetentionReport, VoiceIncidentBundleRoutesOptions, VoiceIncidentBundleStore, VoiceIncidentBundleStoreFilter, VoiceIncidentBundleSummary } from './incidentBundle';
|
|
130
130
|
export type { VoiceQualityLink, VoiceQualityMetric, VoiceQualityReport, VoiceQualityRoutesOptions, VoiceQualityStatus, VoiceQualityThresholds } from './qualityRoutes';
|
package/dist/index.js
CHANGED
|
@@ -12277,6 +12277,48 @@ var buildVoicePlatformCoverageSummary = (input) => {
|
|
|
12277
12277
|
total: coverage.length
|
|
12278
12278
|
};
|
|
12279
12279
|
};
|
|
12280
|
+
var evaluateVoicePlatformCoverage = (summary, input = {}) => {
|
|
12281
|
+
const issues = [];
|
|
12282
|
+
const surfaces = summary.coverage.map((surface) => surface.surface).sort();
|
|
12283
|
+
const failed = summary.coverage.filter((surface) => surface.status !== "pass").length;
|
|
12284
|
+
const missing = summary.coverage.reduce((total, surface) => total + (surface.missing ?? 0), 0);
|
|
12285
|
+
const evidenceNames = new Set(summary.coverage.flatMap((surface) => surface.evidence.map((evidence) => evidence.name)));
|
|
12286
|
+
if ((input.requirePass ?? true) && !summary.ok) {
|
|
12287
|
+
issues.push(`Expected platform coverage to pass, found ${summary.status}.`);
|
|
12288
|
+
}
|
|
12289
|
+
if (input.minSurfaces !== undefined && summary.total < input.minSurfaces) {
|
|
12290
|
+
issues.push(`Expected at least ${String(input.minSurfaces)} platform coverage surfaces, found ${String(summary.total)}.`);
|
|
12291
|
+
}
|
|
12292
|
+
if (input.maxFailedSurfaces !== undefined && failed > input.maxFailedSurfaces) {
|
|
12293
|
+
issues.push(`Expected at most ${String(input.maxFailedSurfaces)} failing platform coverage surfaces, found ${String(failed)}.`);
|
|
12294
|
+
}
|
|
12295
|
+
for (const surface of input.requiredSurfaces ?? []) {
|
|
12296
|
+
if (!surfaces.includes(surface)) {
|
|
12297
|
+
issues.push(`Missing platform coverage surface: ${surface}.`);
|
|
12298
|
+
}
|
|
12299
|
+
}
|
|
12300
|
+
for (const evidence of input.requiredEvidence ?? []) {
|
|
12301
|
+
if (!evidenceNames.has(evidence)) {
|
|
12302
|
+
issues.push(`Missing platform coverage evidence: ${evidence}.`);
|
|
12303
|
+
}
|
|
12304
|
+
}
|
|
12305
|
+
return {
|
|
12306
|
+
failed,
|
|
12307
|
+
issues,
|
|
12308
|
+
missing,
|
|
12309
|
+
ok: issues.length === 0,
|
|
12310
|
+
status: summary.status,
|
|
12311
|
+
surfaces,
|
|
12312
|
+
total: summary.total
|
|
12313
|
+
};
|
|
12314
|
+
};
|
|
12315
|
+
var assertVoicePlatformCoverage = (summary, input = {}) => {
|
|
12316
|
+
const report = evaluateVoicePlatformCoverage(summary, input);
|
|
12317
|
+
if (!report.ok) {
|
|
12318
|
+
throw new Error(`Voice platform coverage assertion failed: ${report.issues.join(" ")}`);
|
|
12319
|
+
}
|
|
12320
|
+
return report;
|
|
12321
|
+
};
|
|
12280
12322
|
var normalizeCoverageSummary = (value) => ("status" in value) && ("total" in value) && ("coverage" in value) ? value : buildVoicePlatformCoverageSummary(value);
|
|
12281
12323
|
var createVoicePlatformCoverageRoutes = (options) => {
|
|
12282
12324
|
const path = options.path ?? "/api/voice/platform-coverage";
|
|
@@ -23809,6 +23851,62 @@ var buildVoiceObservabilityExportReplayReport = (records) => {
|
|
|
23809
23851
|
}
|
|
23810
23852
|
};
|
|
23811
23853
|
};
|
|
23854
|
+
var evaluateVoiceObservabilityExportReplayEvidence = (report, input = {}) => {
|
|
23855
|
+
const issues = [];
|
|
23856
|
+
const requiredStatus = input.requireStatus ?? "pass";
|
|
23857
|
+
const maxIssues = input.maxIssues ?? 0;
|
|
23858
|
+
const maxValidationIssues = input.maxValidationIssues ?? 0;
|
|
23859
|
+
const maxFailedArtifacts = input.maxFailedArtifacts ?? 0;
|
|
23860
|
+
const maxFailedDeliveryDestinations = input.maxFailedDeliveryDestinations ?? 0;
|
|
23861
|
+
const minArtifacts = input.minArtifacts ?? 1;
|
|
23862
|
+
const minDeliveryDestinations = input.minDeliveryDestinations;
|
|
23863
|
+
const recordKinds = Object.values(report.records).map((record) => record?.kind).filter((kind) => Boolean(kind)).sort();
|
|
23864
|
+
if (report.status !== requiredStatus) {
|
|
23865
|
+
issues.push(`Expected observability export replay status ${requiredStatus}, found ${report.status}.`);
|
|
23866
|
+
}
|
|
23867
|
+
if (report.issues.length > maxIssues) {
|
|
23868
|
+
issues.push(`Expected at most ${String(maxIssues)} observability export replay issue(s), found ${String(report.issues.length)}.`);
|
|
23869
|
+
}
|
|
23870
|
+
if (report.summary.validationIssues > maxValidationIssues) {
|
|
23871
|
+
issues.push(`Expected at most ${String(maxValidationIssues)} observability export replay validation issue(s), found ${String(report.summary.validationIssues)}.`);
|
|
23872
|
+
}
|
|
23873
|
+
if (report.summary.failedArtifacts > maxFailedArtifacts) {
|
|
23874
|
+
issues.push(`Expected at most ${String(maxFailedArtifacts)} failed observability export artifact(s), found ${String(report.summary.failedArtifacts)}.`);
|
|
23875
|
+
}
|
|
23876
|
+
if (report.summary.failedDeliveryDestinations > maxFailedDeliveryDestinations) {
|
|
23877
|
+
issues.push(`Expected at most ${String(maxFailedDeliveryDestinations)} failed observability export delivery destination(s), found ${String(report.summary.failedDeliveryDestinations)}.`);
|
|
23878
|
+
}
|
|
23879
|
+
if (report.summary.artifacts < minArtifacts) {
|
|
23880
|
+
issues.push(`Expected at least ${String(minArtifacts)} replayed observability export artifact(s), found ${String(report.summary.artifacts)}.`);
|
|
23881
|
+
}
|
|
23882
|
+
if (minDeliveryDestinations !== undefined && report.summary.deliveryDestinations < minDeliveryDestinations) {
|
|
23883
|
+
issues.push(`Expected at least ${String(minDeliveryDestinations)} replayed observability export delivery destination(s), found ${String(report.summary.deliveryDestinations)}.`);
|
|
23884
|
+
}
|
|
23885
|
+
for (const recordKind of input.requiredRecordKinds ?? []) {
|
|
23886
|
+
if (!recordKinds.includes(recordKind)) {
|
|
23887
|
+
issues.push(`Missing observability export replay record kind: ${recordKind}.`);
|
|
23888
|
+
}
|
|
23889
|
+
}
|
|
23890
|
+
return {
|
|
23891
|
+
artifacts: report.summary.artifacts,
|
|
23892
|
+
deliveryDestinations: report.summary.deliveryDestinations,
|
|
23893
|
+
failedArtifacts: report.summary.failedArtifacts,
|
|
23894
|
+
failedDeliveryDestinations: report.summary.failedDeliveryDestinations,
|
|
23895
|
+
issues,
|
|
23896
|
+
ok: issues.length === 0,
|
|
23897
|
+
recordKinds,
|
|
23898
|
+
replayIssues: report.issues.length,
|
|
23899
|
+
status: report.status,
|
|
23900
|
+
validationIssues: report.summary.validationIssues
|
|
23901
|
+
};
|
|
23902
|
+
};
|
|
23903
|
+
var assertVoiceObservabilityExportReplayEvidence = (report, input = {}) => {
|
|
23904
|
+
const assertion = evaluateVoiceObservabilityExportReplayEvidence(report, input);
|
|
23905
|
+
if (!assertion.ok) {
|
|
23906
|
+
throw new Error(`Voice observability export replay assertion failed: ${assertion.issues.join(" ")}`);
|
|
23907
|
+
}
|
|
23908
|
+
return assertion;
|
|
23909
|
+
};
|
|
23812
23910
|
var loadVoiceObservabilityExportReplaySource = async (source) => {
|
|
23813
23911
|
if (source.kind === "records") {
|
|
23814
23912
|
return source;
|
|
@@ -24079,6 +24177,89 @@ var buildVoiceObservabilityExportDeliveryHistory = async (store) => {
|
|
|
24079
24177
|
}
|
|
24080
24178
|
};
|
|
24081
24179
|
};
|
|
24180
|
+
var getSuccessfulObservabilityExportReceipts = (history) => history.receipts.filter((receipt) => receipt.status === "pass" && receipt.exportStatus === "pass" && receipt.summary.delivered > 0 && receipt.summary.failed === 0);
|
|
24181
|
+
var getLatestSuccessfulObservabilityExportReceipt = (history) => getSuccessfulObservabilityExportReceipts(history).sort((left, right) => right.checkedAt - left.checkedAt)[0];
|
|
24182
|
+
var evaluateVoiceObservabilityExportDeliveryEvidence = (history, input = {}) => {
|
|
24183
|
+
const issues = [];
|
|
24184
|
+
const requiredStatus = input.requireStatus ?? "pass";
|
|
24185
|
+
const maxFailed = input.maxFailed ?? 0;
|
|
24186
|
+
const maxFailedReceipts = input.maxFailedReceipts ?? 0;
|
|
24187
|
+
const maxFailedExportReceipts = input.maxFailedExportReceipts ?? 0;
|
|
24188
|
+
const minDelivered = input.minDelivered ?? 1;
|
|
24189
|
+
const minReceipts = input.minReceipts ?? 1;
|
|
24190
|
+
const minTotalDestinations = input.minTotalDestinations ?? 1;
|
|
24191
|
+
const now = input.now ?? Date.now();
|
|
24192
|
+
const failedReceipts = history.receipts.filter((receipt) => receipt.status === "fail").length;
|
|
24193
|
+
const failedExportReceipts = history.receipts.filter((receipt) => receipt.exportStatus === "fail").length;
|
|
24194
|
+
const latestSuccess = getLatestSuccessfulObservabilityExportReceipt(history);
|
|
24195
|
+
const latestSuccessAgeMs = latestSuccess ? Math.max(0, now - latestSuccess.checkedAt) : undefined;
|
|
24196
|
+
const destinations = history.receipts.flatMap((receipt) => receipt.destinations);
|
|
24197
|
+
const destinationIds = [
|
|
24198
|
+
...new Set(destinations.map((destination) => destination.destinationId))
|
|
24199
|
+
].sort();
|
|
24200
|
+
const destinationKinds = [
|
|
24201
|
+
...new Set(destinations.map((destination) => destination.destinationKind))
|
|
24202
|
+
].sort();
|
|
24203
|
+
if (history.status !== requiredStatus) {
|
|
24204
|
+
issues.push(`Expected observability export delivery status ${requiredStatus}, found ${history.status}.`);
|
|
24205
|
+
}
|
|
24206
|
+
if (history.summary.failed > maxFailed) {
|
|
24207
|
+
issues.push(`Expected at most ${String(maxFailed)} failed observability export delivery destination(s), found ${String(history.summary.failed)}.`);
|
|
24208
|
+
}
|
|
24209
|
+
if (failedReceipts > maxFailedReceipts) {
|
|
24210
|
+
issues.push(`Expected at most ${String(maxFailedReceipts)} failed observability export delivery receipt(s), found ${String(failedReceipts)}.`);
|
|
24211
|
+
}
|
|
24212
|
+
if (failedExportReceipts > maxFailedExportReceipts) {
|
|
24213
|
+
issues.push(`Expected at most ${String(maxFailedExportReceipts)} failed observability export receipt manifest(s), found ${String(failedExportReceipts)}.`);
|
|
24214
|
+
}
|
|
24215
|
+
if (history.summary.delivered < minDelivered) {
|
|
24216
|
+
issues.push(`Expected at least ${String(minDelivered)} delivered observability export destination(s), found ${String(history.summary.delivered)}.`);
|
|
24217
|
+
}
|
|
24218
|
+
if (history.summary.receipts < minReceipts) {
|
|
24219
|
+
issues.push(`Expected at least ${String(minReceipts)} observability export delivery receipt(s), found ${String(history.summary.receipts)}.`);
|
|
24220
|
+
}
|
|
24221
|
+
if (history.summary.totalDestinations < minTotalDestinations) {
|
|
24222
|
+
issues.push(`Expected at least ${String(minTotalDestinations)} observability export destination(s), found ${String(history.summary.totalDestinations)}.`);
|
|
24223
|
+
}
|
|
24224
|
+
if (input.maxLatestSuccessAgeMs !== undefined) {
|
|
24225
|
+
if (latestSuccessAgeMs === undefined) {
|
|
24226
|
+
issues.push("Missing successful observability export delivery receipt.");
|
|
24227
|
+
} else if (latestSuccessAgeMs > input.maxLatestSuccessAgeMs) {
|
|
24228
|
+
issues.push(`Expected latest successful observability export delivery age at most ${String(input.maxLatestSuccessAgeMs)}ms, found ${String(latestSuccessAgeMs)}ms.`);
|
|
24229
|
+
}
|
|
24230
|
+
}
|
|
24231
|
+
for (const destinationId of input.requiredDestinationIds ?? []) {
|
|
24232
|
+
if (!destinationIds.includes(destinationId)) {
|
|
24233
|
+
issues.push(`Missing observability export delivery destination: ${destinationId}.`);
|
|
24234
|
+
}
|
|
24235
|
+
}
|
|
24236
|
+
for (const destinationKind of input.requiredDestinationKinds ?? []) {
|
|
24237
|
+
if (!destinationKinds.includes(destinationKind)) {
|
|
24238
|
+
issues.push(`Missing observability export delivery destination kind: ${destinationKind}.`);
|
|
24239
|
+
}
|
|
24240
|
+
}
|
|
24241
|
+
return {
|
|
24242
|
+
delivered: history.summary.delivered,
|
|
24243
|
+
destinationIds,
|
|
24244
|
+
destinationKinds,
|
|
24245
|
+
failed: history.summary.failed,
|
|
24246
|
+
failedExportReceipts,
|
|
24247
|
+
failedReceipts,
|
|
24248
|
+
issues,
|
|
24249
|
+
latestSuccessAgeMs,
|
|
24250
|
+
ok: issues.length === 0,
|
|
24251
|
+
receipts: history.summary.receipts,
|
|
24252
|
+
status: history.status,
|
|
24253
|
+
totalDestinations: history.summary.totalDestinations
|
|
24254
|
+
};
|
|
24255
|
+
};
|
|
24256
|
+
var assertVoiceObservabilityExportDeliveryEvidence = (history, input = {}) => {
|
|
24257
|
+
const assertion = evaluateVoiceObservabilityExportDeliveryEvidence(history, input);
|
|
24258
|
+
if (!assertion.ok) {
|
|
24259
|
+
throw new Error(`Voice observability export delivery assertion failed: ${assertion.issues.join(" ")}`);
|
|
24260
|
+
}
|
|
24261
|
+
return assertion;
|
|
24262
|
+
};
|
|
24082
24263
|
var inferContentType = (artifact) => {
|
|
24083
24264
|
if (artifact.contentType) {
|
|
24084
24265
|
return artifact.contentType;
|
|
@@ -24776,6 +24957,48 @@ var summarizeVoiceProductionReadinessGate = (report, options = {}) => {
|
|
|
24776
24957
|
warnings
|
|
24777
24958
|
};
|
|
24778
24959
|
};
|
|
24960
|
+
var evaluateVoiceProductionReadinessEvidence = (report, input = {}) => {
|
|
24961
|
+
const gate = summarizeVoiceProductionReadinessGate(report);
|
|
24962
|
+
const issues = [];
|
|
24963
|
+
const checks = report.checks.map((check) => check.label).sort();
|
|
24964
|
+
const requiredStatus = input.requireStatus ?? "pass";
|
|
24965
|
+
const requireGateOk = input.requireGateOk ?? true;
|
|
24966
|
+
const maxFailures = input.maxFailures ?? 0;
|
|
24967
|
+
const maxWarnings = input.maxWarnings;
|
|
24968
|
+
if (report.status !== requiredStatus) {
|
|
24969
|
+
issues.push(`Expected production readiness status ${requiredStatus}, found ${report.status}.`);
|
|
24970
|
+
}
|
|
24971
|
+
if (requireGateOk && !gate.ok) {
|
|
24972
|
+
issues.push(`Expected production readiness gate to pass, found ${gate.status}.`);
|
|
24973
|
+
}
|
|
24974
|
+
if (gate.failures.length > maxFailures) {
|
|
24975
|
+
issues.push(`Expected at most ${String(maxFailures)} production readiness failures, found ${String(gate.failures.length)}.`);
|
|
24976
|
+
}
|
|
24977
|
+
if (maxWarnings !== undefined && gate.warnings.length > maxWarnings) {
|
|
24978
|
+
issues.push(`Expected at most ${String(maxWarnings)} production readiness warnings, found ${String(gate.warnings.length)}.`);
|
|
24979
|
+
}
|
|
24980
|
+
for (const check of input.requiredChecks ?? []) {
|
|
24981
|
+
if (!checks.includes(check)) {
|
|
24982
|
+
issues.push(`Missing production readiness check: ${check}.`);
|
|
24983
|
+
}
|
|
24984
|
+
}
|
|
24985
|
+
return {
|
|
24986
|
+
checks,
|
|
24987
|
+
failures: gate.failures.length,
|
|
24988
|
+
gateOk: gate.ok,
|
|
24989
|
+
issues,
|
|
24990
|
+
ok: issues.length === 0,
|
|
24991
|
+
status: report.status,
|
|
24992
|
+
warnings: gate.warnings.length
|
|
24993
|
+
};
|
|
24994
|
+
};
|
|
24995
|
+
var assertVoiceProductionReadinessEvidence = (report, input = {}) => {
|
|
24996
|
+
const assertion = evaluateVoiceProductionReadinessEvidence(report, input);
|
|
24997
|
+
if (!assertion.ok) {
|
|
24998
|
+
throw new Error(`Voice production readiness assertion failed: ${assertion.issues.join(" ")}`);
|
|
24999
|
+
}
|
|
25000
|
+
return assertion;
|
|
25001
|
+
};
|
|
24779
25002
|
var carrierStatus = (matrix) => matrix.summary.failing > 0 ? "fail" : matrix.summary.warnings > 0 || matrix.summary.ready < matrix.summary.providers ? "warn" : "pass";
|
|
24780
25003
|
var resolveCarriers = async (options, input) => {
|
|
24781
25004
|
if (options.carriers === false || options.carriers === undefined) {
|
|
@@ -30074,7 +30297,11 @@ export {
|
|
|
30074
30297
|
evaluateVoiceQuality,
|
|
30075
30298
|
evaluateVoiceProviderStackGaps,
|
|
30076
30299
|
evaluateVoiceProviderSloEvidence,
|
|
30300
|
+
evaluateVoiceProductionReadinessEvidence,
|
|
30301
|
+
evaluateVoicePlatformCoverage,
|
|
30077
30302
|
evaluateVoiceOperationsRecordGuardrails,
|
|
30303
|
+
evaluateVoiceObservabilityExportReplayEvidence,
|
|
30304
|
+
evaluateVoiceObservabilityExportDeliveryEvidence,
|
|
30078
30305
|
evaluateVoiceGuardrailPolicy,
|
|
30079
30306
|
encodeTwilioMulawBase64,
|
|
30080
30307
|
deliverVoiceTraceEventsToSinks,
|
|
@@ -30389,9 +30616,13 @@ export {
|
|
|
30389
30616
|
assignVoiceOpsTask,
|
|
30390
30617
|
assertVoiceProviderSloEvidence,
|
|
30391
30618
|
assertVoiceProviderRoutingContract,
|
|
30619
|
+
assertVoiceProductionReadinessEvidence,
|
|
30620
|
+
assertVoicePlatformCoverage,
|
|
30392
30621
|
assertVoiceOperationsRecordGuardrails,
|
|
30393
30622
|
assertVoiceObservabilityExportSchema,
|
|
30623
|
+
assertVoiceObservabilityExportReplayEvidence,
|
|
30394
30624
|
assertVoiceObservabilityExportRecord,
|
|
30625
|
+
assertVoiceObservabilityExportDeliveryEvidence,
|
|
30395
30626
|
assertVoiceLatencySLOGate,
|
|
30396
30627
|
assertVoiceAgentSquadContract,
|
|
30397
30628
|
applyVoiceTelephonyOutcome,
|
|
@@ -269,6 +269,55 @@ export type VoiceObservabilityExportReplayReport = {
|
|
|
269
269
|
validationIssues: number;
|
|
270
270
|
};
|
|
271
271
|
};
|
|
272
|
+
export type VoiceObservabilityExportDeliveryAssertionInput = {
|
|
273
|
+
maxFailed?: number;
|
|
274
|
+
maxFailedExportReceipts?: number;
|
|
275
|
+
maxFailedReceipts?: number;
|
|
276
|
+
maxLatestSuccessAgeMs?: number;
|
|
277
|
+
minDelivered?: number;
|
|
278
|
+
minReceipts?: number;
|
|
279
|
+
minTotalDestinations?: number;
|
|
280
|
+
now?: number;
|
|
281
|
+
requireStatus?: VoiceObservabilityExportStatus;
|
|
282
|
+
requiredDestinationIds?: string[];
|
|
283
|
+
requiredDestinationKinds?: VoiceObservabilityExportDeliveryDestination['kind'][];
|
|
284
|
+
};
|
|
285
|
+
export type VoiceObservabilityExportDeliveryAssertionReport = {
|
|
286
|
+
delivered: number;
|
|
287
|
+
destinationIds: string[];
|
|
288
|
+
destinationKinds: VoiceObservabilityExportDeliveryDestination['kind'][];
|
|
289
|
+
failed: number;
|
|
290
|
+
failedExportReceipts: number;
|
|
291
|
+
failedReceipts: number;
|
|
292
|
+
issues: string[];
|
|
293
|
+
latestSuccessAgeMs?: number;
|
|
294
|
+
ok: boolean;
|
|
295
|
+
receipts: number;
|
|
296
|
+
status: VoiceObservabilityExportStatus;
|
|
297
|
+
totalDestinations: number;
|
|
298
|
+
};
|
|
299
|
+
export type VoiceObservabilityExportReplayAssertionInput = {
|
|
300
|
+
maxFailedArtifacts?: number;
|
|
301
|
+
maxFailedDeliveryDestinations?: number;
|
|
302
|
+
maxIssues?: number;
|
|
303
|
+
maxValidationIssues?: number;
|
|
304
|
+
minArtifacts?: number;
|
|
305
|
+
minDeliveryDestinations?: number;
|
|
306
|
+
requireStatus?: VoiceObservabilityExportStatus;
|
|
307
|
+
requiredRecordKinds?: VoiceObservabilityExportIngestedRecordKind[];
|
|
308
|
+
};
|
|
309
|
+
export type VoiceObservabilityExportReplayAssertionReport = {
|
|
310
|
+
artifacts: number;
|
|
311
|
+
deliveryDestinations: number;
|
|
312
|
+
failedArtifacts: number;
|
|
313
|
+
failedDeliveryDestinations: number;
|
|
314
|
+
issues: string[];
|
|
315
|
+
ok: boolean;
|
|
316
|
+
recordKinds: VoiceObservabilityExportIngestedRecordKind[];
|
|
317
|
+
replayIssues: number;
|
|
318
|
+
status: VoiceObservabilityExportStatus;
|
|
319
|
+
validationIssues: number;
|
|
320
|
+
};
|
|
272
321
|
export type VoiceObservabilityExportReplaySource = {
|
|
273
322
|
artifactIndex?: unknown;
|
|
274
323
|
databaseRecord?: unknown;
|
|
@@ -354,6 +403,8 @@ export type VoiceObservabilityExportRoutesOptions = VoiceObservabilityExportOpti
|
|
|
354
403
|
title?: string;
|
|
355
404
|
};
|
|
356
405
|
export declare const buildVoiceObservabilityExportReplayReport: (records: VoiceObservabilityExportReplayRecords) => VoiceObservabilityExportReplayReport;
|
|
406
|
+
export declare const evaluateVoiceObservabilityExportReplayEvidence: (report: VoiceObservabilityExportReplayReport, input?: VoiceObservabilityExportReplayAssertionInput) => VoiceObservabilityExportReplayAssertionReport;
|
|
407
|
+
export declare const assertVoiceObservabilityExportReplayEvidence: (report: VoiceObservabilityExportReplayReport, input?: VoiceObservabilityExportReplayAssertionInput) => VoiceObservabilityExportReplayAssertionReport;
|
|
357
408
|
export declare const loadVoiceObservabilityExportReplaySource: (source: VoiceObservabilityExportReplaySource) => Promise<VoiceObservabilityExportReplayRecords>;
|
|
358
409
|
export declare const replayVoiceObservabilityExport: (source: VoiceObservabilityExportReplaySource) => Promise<VoiceObservabilityExportReplayReport>;
|
|
359
410
|
export declare const renderVoiceObservabilityExportReplayHTML: (report: VoiceObservabilityExportReplayReport, options?: {
|
|
@@ -392,6 +443,8 @@ export declare const createVoiceFileObservabilityExportDeliveryReceiptStore: (op
|
|
|
392
443
|
directory: string;
|
|
393
444
|
}) => VoiceObservabilityExportDeliveryReceiptStore;
|
|
394
445
|
export declare const buildVoiceObservabilityExportDeliveryHistory: (store: VoiceObservabilityExportDeliveryReceiptStore) => Promise<VoiceObservabilityExportDeliveryHistory>;
|
|
446
|
+
export declare const evaluateVoiceObservabilityExportDeliveryEvidence: (history: VoiceObservabilityExportDeliveryHistory, input?: VoiceObservabilityExportDeliveryAssertionInput) => VoiceObservabilityExportDeliveryAssertionReport;
|
|
447
|
+
export declare const assertVoiceObservabilityExportDeliveryEvidence: (history: VoiceObservabilityExportDeliveryHistory, input?: VoiceObservabilityExportDeliveryAssertionInput) => VoiceObservabilityExportDeliveryAssertionReport;
|
|
395
448
|
export declare const buildVoiceObservabilityExport: (options?: VoiceObservabilityExportOptions) => Promise<VoiceObservabilityExportReport>;
|
|
396
449
|
export declare const renderVoiceObservabilityExportMarkdown: (report: VoiceObservabilityExportReport, options?: {
|
|
397
450
|
title?: string;
|
|
@@ -42,7 +42,25 @@ export type VoicePlatformCoverageRoutesOptions = {
|
|
|
42
42
|
path?: string;
|
|
43
43
|
source: (() => Promise<VoicePlatformCoverageSummary | VoicePlatformCoverageSummaryInput> | VoicePlatformCoverageSummary | VoicePlatformCoverageSummaryInput) | VoicePlatformCoverageSummary | VoicePlatformCoverageSummaryInput;
|
|
44
44
|
};
|
|
45
|
+
export type VoicePlatformCoverageAssertionInput = {
|
|
46
|
+
maxFailedSurfaces?: number;
|
|
47
|
+
minSurfaces?: number;
|
|
48
|
+
requiredEvidence?: string[];
|
|
49
|
+
requiredSurfaces?: string[];
|
|
50
|
+
requirePass?: boolean;
|
|
51
|
+
};
|
|
52
|
+
export type VoicePlatformCoverageAssertionReport = {
|
|
53
|
+
failed: number;
|
|
54
|
+
issues: string[];
|
|
55
|
+
missing: number;
|
|
56
|
+
ok: boolean;
|
|
57
|
+
status: VoicePlatformCoverageStatus;
|
|
58
|
+
surfaces: string[];
|
|
59
|
+
total: number;
|
|
60
|
+
};
|
|
45
61
|
export declare const buildVoicePlatformCoverageSummary: (input: VoicePlatformCoverageSummaryInput) => VoicePlatformCoverageSummary;
|
|
62
|
+
export declare const evaluateVoicePlatformCoverage: (summary: VoicePlatformCoverageSummary, input?: VoicePlatformCoverageAssertionInput) => VoicePlatformCoverageAssertionReport;
|
|
63
|
+
export declare const assertVoicePlatformCoverage: (summary: VoicePlatformCoverageSummary, input?: VoicePlatformCoverageAssertionInput) => VoicePlatformCoverageAssertionReport;
|
|
46
64
|
export declare const createVoicePlatformCoverageRoutes: (options: VoicePlatformCoverageRoutesOptions) => Elysia<"", {
|
|
47
65
|
decorator: {};
|
|
48
66
|
store: {};
|
|
@@ -58,6 +58,22 @@ export type VoiceProductionReadinessGateReport = {
|
|
|
58
58
|
status: VoiceProductionReadinessStatus;
|
|
59
59
|
warnings: VoiceProductionReadinessGateIssue[];
|
|
60
60
|
};
|
|
61
|
+
export type VoiceProductionReadinessAssertionInput = {
|
|
62
|
+
maxFailures?: number;
|
|
63
|
+
maxWarnings?: number;
|
|
64
|
+
requiredChecks?: string[];
|
|
65
|
+
requireGateOk?: boolean;
|
|
66
|
+
requireStatus?: VoiceProductionReadinessStatus;
|
|
67
|
+
};
|
|
68
|
+
export type VoiceProductionReadinessAssertionReport = {
|
|
69
|
+
checks: string[];
|
|
70
|
+
failures: number;
|
|
71
|
+
gateOk: boolean;
|
|
72
|
+
issues: string[];
|
|
73
|
+
ok: boolean;
|
|
74
|
+
status: VoiceProductionReadinessStatus;
|
|
75
|
+
warnings: number;
|
|
76
|
+
};
|
|
61
77
|
export type VoiceProductionReadinessProofSource = {
|
|
62
78
|
detail?: string;
|
|
63
79
|
href?: string;
|
|
@@ -425,6 +441,8 @@ export type VoiceProductionReadinessRoutesOptions = {
|
|
|
425
441
|
liveLatencyFailAfterMs?: number;
|
|
426
442
|
};
|
|
427
443
|
export declare const summarizeVoiceProductionReadinessGate: (report: VoiceProductionReadinessReport, options?: VoiceProductionReadinessGateOptions) => VoiceProductionReadinessGateReport;
|
|
444
|
+
export declare const evaluateVoiceProductionReadinessEvidence: (report: VoiceProductionReadinessReport, input?: VoiceProductionReadinessAssertionInput) => VoiceProductionReadinessAssertionReport;
|
|
445
|
+
export declare const assertVoiceProductionReadinessEvidence: (report: VoiceProductionReadinessReport, input?: VoiceProductionReadinessAssertionInput) => VoiceProductionReadinessAssertionReport;
|
|
428
446
|
export declare const buildVoiceProductionReadinessReport: (options: VoiceProductionReadinessRoutesOptions, input?: {
|
|
429
447
|
query?: Record<string, unknown>;
|
|
430
448
|
request?: Request;
|