@absolutejs/voice 0.0.22-beta.126 → 0.0.22-beta.128

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.
Files changed (47) hide show
  1. package/README.md +255 -26
  2. package/dist/agent.d.ts +5 -0
  3. package/dist/angular/index.d.ts +1 -1
  4. package/dist/angular/index.js +16 -16
  5. package/dist/angular/voice-ops-status.service.d.ts +12 -0
  6. package/dist/audit.d.ts +128 -0
  7. package/dist/auditDeliveryRoutes.d.ts +85 -0
  8. package/dist/auditExport.d.ts +34 -0
  9. package/dist/auditRoutes.d.ts +66 -0
  10. package/dist/auditSinks.d.ts +133 -0
  11. package/dist/client/index.d.ts +2 -2
  12. package/dist/client/index.js +11 -11
  13. package/dist/client/opsStatus.d.ts +19 -0
  14. package/dist/client/opsStatusWidget.d.ts +7 -7
  15. package/dist/dataControl.d.ts +47 -0
  16. package/dist/demoReadyRoutes.d.ts +98 -0
  17. package/dist/fileStore.d.ts +8 -2
  18. package/dist/index.d.ts +27 -6
  19. package/dist/index.js +15193 -12626
  20. package/dist/openaiRealtime.d.ts +27 -0
  21. package/dist/opsStatus.d.ts +65 -0
  22. package/dist/opsStatusRoutes.d.ts +33 -0
  23. package/dist/phoneAgent.d.ts +4 -0
  24. package/dist/phoneAgentProductionSmoke.d.ts +115 -0
  25. package/dist/postgresStore.d.ts +8 -2
  26. package/dist/productionReadiness.d.ts +82 -0
  27. package/dist/react/index.d.ts +1 -1
  28. package/dist/react/index.js +16 -16
  29. package/dist/react/useVoiceOpsStatus.d.ts +8 -0
  30. package/dist/sqliteStore.d.ts +8 -2
  31. package/dist/svelte/createVoiceOpsStatus.d.ts +2 -2
  32. package/dist/svelte/index.d.ts +0 -1
  33. package/dist/svelte/index.js +72 -75
  34. package/dist/telephony/twilio.d.ts +3 -2
  35. package/dist/testing/index.js +74 -21
  36. package/dist/traceDeliveryRoutes.d.ts +86 -0
  37. package/dist/types.d.ts +6 -2
  38. package/dist/vue/index.d.ts +1 -1
  39. package/dist/vue/index.js +15 -15
  40. package/dist/vue/useVoiceOpsStatus.d.ts +9 -0
  41. package/package.json +1 -1
  42. package/dist/angular/voice-app-kit-status.service.d.ts +0 -12
  43. package/dist/appKit.d.ts +0 -100
  44. package/dist/client/appKitStatus.d.ts +0 -19
  45. package/dist/react/useVoiceAppKitStatus.d.ts +0 -8
  46. package/dist/svelte/createVoiceAppKitStatus.d.ts +0 -8
  47. package/dist/vue/useVoiceAppKitStatus.d.ts +0 -9
@@ -0,0 +1,27 @@
1
+ import type { RealtimeAdapter } from './types';
2
+ export type OpenAIRealtimeModel = 'gpt-realtime' | 'gpt-realtime-mini' | 'gpt-4o-realtime-preview' | 'gpt-4o-mini-realtime-preview' | (string & {});
3
+ export type OpenAIRealtimeVoice = 'alloy' | 'ash' | 'ballad' | 'cedar' | 'coral' | 'echo' | 'marin' | 'sage' | 'shimmer' | 'verse' | {
4
+ id: string;
5
+ } | (string & {});
6
+ export type OpenAIRealtimeTranscriptionModel = 'gpt-4o-mini-transcribe' | 'gpt-4o-transcribe' | 'whisper-1' | (string & {});
7
+ export type OpenAIRealtimeNoiseReduction = 'near_field' | 'far_field';
8
+ export type OpenAIRealtimeResponseMode = 'audio' | 'text';
9
+ export type OpenAIRealtimeAdapterOptions = {
10
+ apiKey: string;
11
+ autoCommitSilenceMs?: number;
12
+ baseUrl?: string;
13
+ emitResponseTranscripts?: boolean;
14
+ inputTranscriptionLanguage?: string;
15
+ inputTranscriptionModel?: OpenAIRealtimeTranscriptionModel | null;
16
+ inputTranscriptionPrompt?: string;
17
+ instructions?: string;
18
+ maxOutputTokens?: number | 'inf';
19
+ model?: OpenAIRealtimeModel;
20
+ noiseReduction?: OpenAIRealtimeNoiseReduction;
21
+ responseMode?: OpenAIRealtimeResponseMode;
22
+ speed?: number;
23
+ temperature?: number;
24
+ voice?: OpenAIRealtimeVoice;
25
+ webSocket?: typeof WebSocket;
26
+ };
27
+ export declare const createOpenAIRealtimeAdapter: (options: OpenAIRealtimeAdapterOptions) => RealtimeAdapter;
@@ -0,0 +1,65 @@
1
+ import { type VoiceEvalLink, type VoiceEvalRoutesOptions } from './evalRoutes';
2
+ import { type VoiceQualityRoutesOptions } from './qualityRoutes';
3
+ import { type VoiceTraceEventStore } from './trace';
4
+ export type VoiceOpsStatus = 'pass' | 'fail';
5
+ export type VoiceOpsStatusLink = VoiceEvalLink & {
6
+ description?: string;
7
+ statusHref?: string;
8
+ };
9
+ export type VoiceOpsStatusOptions<TProvider extends string = string> = {
10
+ evals?: false | Partial<VoiceEvalRoutesOptions>;
11
+ include?: {
12
+ handoffs?: boolean;
13
+ providers?: boolean;
14
+ quality?: boolean;
15
+ sessions?: boolean;
16
+ workflows?: boolean;
17
+ };
18
+ links?: VoiceOpsStatusLink[];
19
+ llmProviders?: readonly TProvider[];
20
+ preferFixtureWorkflows?: boolean;
21
+ quality?: false | Partial<VoiceQualityRoutesOptions>;
22
+ store: VoiceTraceEventStore;
23
+ sttProviders?: readonly string[];
24
+ ttsProviders?: readonly string[];
25
+ };
26
+ export type VoiceOpsStatusReport = {
27
+ checkedAt: number;
28
+ failed: number;
29
+ links: VoiceOpsStatusLink[];
30
+ passed: number;
31
+ status: VoiceOpsStatus;
32
+ surfaces: {
33
+ handoffs?: {
34
+ failed: number;
35
+ status: VoiceOpsStatus;
36
+ total: number;
37
+ };
38
+ providers?: {
39
+ degraded: number;
40
+ status: VoiceOpsStatus;
41
+ total: number;
42
+ };
43
+ quality?: {
44
+ status: VoiceOpsStatus;
45
+ };
46
+ sessions?: {
47
+ failed: number;
48
+ status: VoiceOpsStatus;
49
+ total: number;
50
+ };
51
+ workflows?: {
52
+ failed: number;
53
+ source: 'fixtures' | 'live';
54
+ status: VoiceOpsStatus;
55
+ total: number;
56
+ };
57
+ };
58
+ total: number;
59
+ };
60
+ export type VoiceOpsStatusRoutesOptions<TProvider extends string = string> = VoiceOpsStatusOptions<TProvider> & {
61
+ headers?: HeadersInit;
62
+ name?: string;
63
+ path?: string;
64
+ };
65
+ export declare const summarizeVoiceOpsStatus: <TProvider extends string = string>(options: VoiceOpsStatusOptions<TProvider>) => Promise<VoiceOpsStatusReport>;
@@ -0,0 +1,33 @@
1
+ import { Elysia } from 'elysia';
2
+ import { type VoiceOpsStatusReport, type VoiceOpsStatusRoutesOptions } from './opsStatus';
3
+ export declare const renderVoiceOpsStatusHTML: (report: VoiceOpsStatusReport, options?: {
4
+ title?: string;
5
+ }) => string;
6
+ export declare const createVoiceOpsStatusRoutes: (options: VoiceOpsStatusRoutesOptions) => Elysia<"", {
7
+ decorator: {};
8
+ store: {};
9
+ derive: {};
10
+ resolve: {};
11
+ }, {
12
+ typebox: {};
13
+ error: {};
14
+ }, {
15
+ schema: {};
16
+ standaloneSchema: {};
17
+ macro: {};
18
+ macroFn: {};
19
+ parser: {};
20
+ response: {};
21
+ }, {}, {
22
+ derive: {};
23
+ resolve: {};
24
+ schema: {};
25
+ standaloneSchema: {};
26
+ response: {};
27
+ }, {
28
+ derive: {};
29
+ resolve: {};
30
+ schema: {};
31
+ standaloneSchema: {};
32
+ response: {};
33
+ }>;
@@ -3,6 +3,7 @@ import { type PlivoVoiceRoutesOptions } from './telephony/plivo';
3
3
  import { type TelnyxVoiceRoutesOptions } from './telephony/telnyx';
4
4
  import { type TwilioVoiceRoutesOptions } from './telephony/twilio';
5
5
  import { type VoiceTelephonyCarrierMatrix, type VoiceTelephonyCarrierMatrixRoutesOptions } from './telephony/matrix';
6
+ import { type VoicePhoneAgentProductionSmokeRoutesOptions } from './phoneAgentProductionSmoke';
6
7
  import type { VoiceSessionRecord } from './types';
7
8
  export type VoicePhoneAgentLifecycleStage = 'ringing' | 'answered' | 'media-started' | 'transcript' | 'assistant-response' | 'transfer' | 'voicemail' | 'no-answer' | 'completed' | 'failed';
8
9
  type VoicePhoneAgentCarrierBase = {
@@ -27,6 +28,7 @@ export type VoicePhoneAgentRoutesOptions<TContext = unknown, TSession extends Vo
27
28
  carriers: readonly VoicePhoneAgentCarrier<TContext, TSession, TResult>[];
28
29
  matrix?: false | Omit<VoiceTelephonyCarrierMatrixRoutesOptions, 'load'>;
29
30
  name?: string;
31
+ productionSmoke?: false | VoicePhoneAgentProductionSmokeRoutesOptions;
30
32
  setup?: false | {
31
33
  path?: string;
32
34
  title?: string;
@@ -41,6 +43,7 @@ export type VoicePhoneAgentCarrierSummary = {
41
43
  export type VoicePhoneAgentRoutes = {
42
44
  carriers: VoicePhoneAgentCarrierSummary[];
43
45
  matrixPath?: string;
46
+ productionSmokePath?: string;
44
47
  routes: Elysia;
45
48
  setupPath?: string;
46
49
  };
@@ -50,6 +53,7 @@ export type VoicePhoneAgentSetupReport = {
50
53
  lifecycleStages: VoicePhoneAgentLifecycleStage[];
51
54
  matrix?: VoiceTelephonyCarrierMatrix;
52
55
  matrixPath?: string;
56
+ productionSmokePath?: string;
53
57
  ready: boolean;
54
58
  setupPath?: string;
55
59
  title: string;
@@ -0,0 +1,115 @@
1
+ import { Elysia } from 'elysia';
2
+ import type { StoredVoiceTraceEvent, VoiceTraceEventStore } from './trace';
3
+ import type { VoiceTelephonyContractReport, VoiceTelephonyProvider } from './telephony/contract';
4
+ export type VoicePhoneAgentProductionSmokeRequirement = 'assistant-response' | 'carrier-contract' | 'fresh-trace' | 'lifecycle-outcome' | 'media-started' | 'no-session-error' | 'transcript';
5
+ export type VoicePhoneAgentProductionSmokeIssue = {
6
+ message: string;
7
+ requirement: VoicePhoneAgentProductionSmokeRequirement;
8
+ severity: 'error' | 'warning';
9
+ };
10
+ export type VoicePhoneAgentProductionSmokeReport<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = {
11
+ contract?: VoiceTelephonyContractReport<TProvider>;
12
+ contractId: string;
13
+ generatedAt: number;
14
+ issues: VoicePhoneAgentProductionSmokeIssue[];
15
+ maxAgeMs?: number;
16
+ observed: {
17
+ assistantResponses: number;
18
+ carrierContract?: boolean;
19
+ lifecycleOutcomes: string[];
20
+ latestEventAt?: number;
21
+ mediaStarts: number;
22
+ sessionErrors: number;
23
+ transcripts: number;
24
+ };
25
+ pass: boolean;
26
+ provider?: TProvider;
27
+ required: VoicePhoneAgentProductionSmokeRequirement[];
28
+ scenarioId?: string;
29
+ sessionId?: string;
30
+ traceId?: string;
31
+ };
32
+ export type VoicePhoneAgentProductionSmokeOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = {
33
+ contract?: VoiceTelephonyContractReport<TProvider>;
34
+ contractId?: string;
35
+ events?: readonly StoredVoiceTraceEvent[];
36
+ maxAgeMs?: number;
37
+ now?: number;
38
+ provider?: TProvider;
39
+ required?: readonly VoicePhoneAgentProductionSmokeRequirement[];
40
+ scenarioId?: string;
41
+ sessionId?: string;
42
+ store?: VoiceTraceEventStore;
43
+ traceId?: string;
44
+ };
45
+ export type VoicePhoneAgentProductionSmokeHandlerOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = Omit<VoicePhoneAgentProductionSmokeOptions<TProvider>, 'events' | 'scenarioId' | 'sessionId' | 'traceId'> & {
46
+ getContract?: (input: {
47
+ query: Record<string, unknown>;
48
+ request: Request;
49
+ }) => Promise<VoiceTelephonyContractReport<TProvider> | undefined> | VoiceTelephonyContractReport<TProvider> | undefined;
50
+ scenarioId?: string;
51
+ sessionId?: string;
52
+ traceId?: string;
53
+ };
54
+ export type VoicePhoneAgentProductionSmokeHTMLHandlerOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = VoicePhoneAgentProductionSmokeHandlerOptions<TProvider> & {
55
+ headers?: HeadersInit;
56
+ render?: (report: VoicePhoneAgentProductionSmokeReport<TProvider>) => Promise<string> | string;
57
+ title?: string;
58
+ };
59
+ export type VoicePhoneAgentProductionSmokeRoutesOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = VoicePhoneAgentProductionSmokeHTMLHandlerOptions<TProvider> & {
60
+ htmlPath?: false | string;
61
+ name?: string;
62
+ path?: string;
63
+ };
64
+ export declare const runVoicePhoneAgentProductionSmokeContract: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeOptions<TProvider>) => Promise<VoicePhoneAgentProductionSmokeReport<TProvider>>;
65
+ export declare const renderVoicePhoneAgentProductionSmokeHTML: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(report: VoicePhoneAgentProductionSmokeReport<TProvider>, options?: {
66
+ title?: string;
67
+ }) => string;
68
+ export declare const createVoicePhoneAgentProductionSmokeJSONHandler: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeHandlerOptions<TProvider>) => ({ query, request }: {
69
+ query: Record<string, unknown>;
70
+ request: Request;
71
+ }) => Promise<VoicePhoneAgentProductionSmokeReport<TProvider>>;
72
+ export declare const createVoicePhoneAgentProductionSmokeHTMLHandler: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeHTMLHandlerOptions<TProvider>) => ({ query, request }: {
73
+ query: Record<string, unknown>;
74
+ request: Request;
75
+ }) => Promise<Response>;
76
+ export declare const createVoicePhoneAgentProductionSmokeRoutes: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeRoutesOptions<TProvider>) => Elysia<"", {
77
+ decorator: {};
78
+ store: {};
79
+ derive: {};
80
+ resolve: {};
81
+ }, {
82
+ typebox: {};
83
+ error: {};
84
+ }, {
85
+ schema: {};
86
+ standaloneSchema: {};
87
+ macro: {};
88
+ macroFn: {};
89
+ parser: {};
90
+ response: {};
91
+ }, {
92
+ [x: string]: {
93
+ get: {
94
+ body: unknown;
95
+ params: {};
96
+ query: unknown;
97
+ headers: unknown;
98
+ response: {
99
+ 200: VoicePhoneAgentProductionSmokeReport<TProvider>;
100
+ };
101
+ };
102
+ };
103
+ }, {
104
+ derive: {};
105
+ resolve: {};
106
+ schema: {};
107
+ standaloneSchema: {};
108
+ response: {};
109
+ }, {
110
+ derive: {};
111
+ resolve: {};
112
+ schema: {};
113
+ standaloneSchema: {};
114
+ response: {};
115
+ }>;
@@ -1,4 +1,6 @@
1
1
  import { type StoredVoiceTraceEvent, type VoiceTraceSinkDeliveryRecord, type VoiceTraceSinkDeliveryStore, type VoiceTraceEventStore } from './trace';
2
+ import { type StoredVoiceAuditEvent, type VoiceAuditEventStore } from './audit';
3
+ import type { VoiceAuditSinkDeliveryRecord, VoiceAuditSinkDeliveryStore } from './auditSinks';
2
4
  import type { StoredVoiceIntegrationEvent, StoredVoiceExternalObjectMap, StoredVoiceOpsTask, VoiceExternalObjectMapStore, VoiceIntegrationEventStore, VoiceOpsTaskStore } from './ops';
3
5
  import type { StoredVoiceCallReviewArtifact, VoiceCallReviewStore } from './testing/review';
4
6
  import type { VoiceTelephonyWebhookIdempotencyStore } from './telephonyOutcome';
@@ -14,7 +16,9 @@ export type VoicePostgresStoreOptions = {
14
16
  tableName?: string;
15
17
  tablePrefix?: string;
16
18
  };
17
- export type VoicePostgresRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord> = {
19
+ export type VoicePostgresRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord> = {
20
+ audit: VoiceAuditEventStore<TAudit>;
21
+ auditDeliveries: VoiceAuditSinkDeliveryStore<TAuditDelivery>;
18
22
  campaigns: VoiceCampaignStore;
19
23
  events: VoiceIntegrationEventStore<TEvent>;
20
24
  externalObjects: VoiceExternalObjectMapStore<TMapping>;
@@ -31,6 +35,8 @@ export declare const createVoicePostgresIntegrationEventStore: <TEvent extends S
31
35
  export declare const createVoicePostgresExternalObjectMapStore: <TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap>(options: VoicePostgresStoreOptions) => VoiceExternalObjectMapStore<TMapping>;
32
36
  export declare const createVoicePostgresTraceEventStore: <TEvent extends StoredVoiceTraceEvent = StoredVoiceTraceEvent>(options: VoicePostgresStoreOptions) => VoiceTraceEventStore<TEvent>;
33
37
  export declare const createVoicePostgresTraceSinkDeliveryStore: <TDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoicePostgresStoreOptions) => VoiceTraceSinkDeliveryStore<TDelivery>;
38
+ export declare const createVoicePostgresAuditEventStore: <TEvent extends StoredVoiceAuditEvent = StoredVoiceAuditEvent>(options: VoicePostgresStoreOptions) => VoiceAuditEventStore<TEvent>;
39
+ export declare const createVoicePostgresAuditSinkDeliveryStore: <TDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord>(options: VoicePostgresStoreOptions) => VoiceAuditSinkDeliveryStore<TDelivery>;
34
40
  export declare const createVoicePostgresTelephonyWebhookIdempotencyStore: <TResult = unknown>(options: VoicePostgresStoreOptions) => VoiceTelephonyWebhookIdempotencyStore<TResult>;
35
41
  export declare const createVoicePostgresCampaignStore: (options: VoicePostgresStoreOptions) => VoiceCampaignStore;
36
- export declare const createVoicePostgresRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoicePostgresStoreOptions) => VoicePostgresRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery>;
42
+ export declare const createVoicePostgresRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord>(options: VoicePostgresStoreOptions) => VoicePostgresRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery, TAudit, TAuditDelivery>;
@@ -1,8 +1,12 @@
1
1
  import { Elysia } from 'elysia';
2
2
  import { type VoiceTelephonyCarrierMatrixInput } from './telephony/matrix';
3
3
  import type { VoiceTraceEventStore } from './trace';
4
+ import type { VoiceTraceSinkDeliveryStore } from './trace';
4
5
  import type { VoiceAgentSquadContractReport } from './agentSquadContract';
5
6
  import type { VoiceProviderRoutingContractReport } from './providerRoutingContract';
7
+ import type { VoicePhoneAgentProductionSmokeReport } from './phoneAgentProductionSmoke';
8
+ import type { VoiceAuditEventStore, VoiceAuditEventType, VoiceAuditOutcome } from './audit';
9
+ import { type VoiceAuditSinkDeliveryStore } from './auditSinks';
6
10
  export type VoiceProductionReadinessStatus = 'fail' | 'pass' | 'warn';
7
11
  export type VoiceProductionReadinessAction = {
8
12
  description?: string;
@@ -23,14 +27,18 @@ export type VoiceProductionReadinessReport = {
23
27
  checks: VoiceProductionReadinessCheck[];
24
28
  links: {
25
29
  agentSquadContracts?: string;
30
+ audit?: string;
31
+ auditDeliveries?: string;
26
32
  carriers?: string;
27
33
  handoffs?: string;
28
34
  handoffRetry?: string;
29
35
  liveLatency?: string;
36
+ phoneAgentSmoke?: string;
30
37
  providerRoutingContracts?: string;
31
38
  quality?: string;
32
39
  resilience?: string;
33
40
  sessions?: string;
41
+ traceDeliveries?: string;
34
42
  };
35
43
  status: VoiceProductionReadinessStatus;
36
44
  summary: {
@@ -40,6 +48,8 @@ export type VoiceProductionReadinessReport = {
40
48
  status: VoiceProductionReadinessStatus;
41
49
  total: number;
42
50
  };
51
+ audit?: VoiceProductionReadinessAuditSummary;
52
+ auditDeliveries?: VoiceProductionReadinessAuditDeliverySummary;
43
53
  carriers?: {
44
54
  failing: number;
45
55
  providers: number;
@@ -62,6 +72,12 @@ export type VoiceProductionReadinessReport = {
62
72
  degraded: number;
63
73
  total: number;
64
74
  };
75
+ phoneAgentSmokes?: {
76
+ failed: number;
77
+ passed: number;
78
+ status: VoiceProductionReadinessStatus;
79
+ total: number;
80
+ };
65
81
  providerRoutingContracts?: {
66
82
  failed: number;
67
83
  passed: number;
@@ -79,13 +95,74 @@ export type VoiceProductionReadinessReport = {
79
95
  failed: number;
80
96
  total: number;
81
97
  };
98
+ traceDeliveries?: VoiceProductionReadinessTraceDeliverySummary;
82
99
  };
83
100
  };
101
+ export type VoiceProductionReadinessAuditRequirement = {
102
+ label?: string;
103
+ maxAgeMs?: number;
104
+ outcomes?: VoiceAuditOutcome[];
105
+ status?: VoiceProductionReadinessStatus;
106
+ type: VoiceAuditEventType;
107
+ };
108
+ export type VoiceProductionReadinessAuditSummary = {
109
+ events: number;
110
+ missing: VoiceProductionReadinessAuditRequirement[];
111
+ present: Record<VoiceAuditEventType, number>;
112
+ required: VoiceProductionReadinessAuditRequirement[];
113
+ status: VoiceProductionReadinessStatus;
114
+ };
115
+ export type VoiceProductionReadinessAuditDeliverySummary = {
116
+ deadLettered: number;
117
+ delivered: number;
118
+ failed: number;
119
+ failPendingAfterMs: number;
120
+ pending: number;
121
+ retryEligible: number;
122
+ skipped: number;
123
+ staleFailing: number;
124
+ staleWarning: number;
125
+ status: VoiceProductionReadinessStatus;
126
+ total: number;
127
+ warnPendingAfterMs: number;
128
+ };
129
+ export type VoiceProductionReadinessTraceDeliverySummary = {
130
+ deadLettered: number;
131
+ delivered: number;
132
+ failed: number;
133
+ failPendingAfterMs: number;
134
+ pending: number;
135
+ retryEligible: number;
136
+ skipped: number;
137
+ staleFailing: number;
138
+ staleWarning: number;
139
+ status: VoiceProductionReadinessStatus;
140
+ total: number;
141
+ warnPendingAfterMs: number;
142
+ };
143
+ export type VoiceProductionReadinessAuditOptions = VoiceAuditEventStore | {
144
+ require?: readonly (VoiceAuditEventType | VoiceProductionReadinessAuditRequirement)[];
145
+ store: VoiceAuditEventStore;
146
+ };
147
+ export type VoiceProductionReadinessAuditDeliveryOptions = VoiceAuditSinkDeliveryStore | {
148
+ deadLetters?: VoiceAuditSinkDeliveryStore;
149
+ failPendingAfterMs?: number;
150
+ store: VoiceAuditSinkDeliveryStore;
151
+ warnPendingAfterMs?: number;
152
+ };
153
+ export type VoiceProductionReadinessTraceDeliveryOptions = VoiceTraceSinkDeliveryStore | {
154
+ deadLetters?: VoiceTraceSinkDeliveryStore;
155
+ failPendingAfterMs?: number;
156
+ store: VoiceTraceSinkDeliveryStore;
157
+ warnPendingAfterMs?: number;
158
+ };
84
159
  export type VoiceProductionReadinessRoutesOptions = {
85
160
  agentSquadContracts?: false | readonly VoiceAgentSquadContractReport[] | ((input: {
86
161
  query: Record<string, unknown>;
87
162
  request: Request;
88
163
  }) => Promise<readonly VoiceAgentSquadContractReport[]> | readonly VoiceAgentSquadContractReport[]);
164
+ audit?: false | VoiceProductionReadinessAuditOptions;
165
+ auditDeliveries?: false | VoiceProductionReadinessAuditDeliveryOptions;
89
166
  carriers?: false | readonly VoiceTelephonyCarrierMatrixInput[] | ((input: {
90
167
  query: Record<string, unknown>;
91
168
  request: Request;
@@ -96,6 +173,10 @@ export type VoiceProductionReadinessRoutesOptions = {
96
173
  llmProviders?: readonly string[];
97
174
  name?: string;
98
175
  path?: string;
176
+ phoneAgentSmokes?: false | readonly VoicePhoneAgentProductionSmokeReport[] | ((input: {
177
+ query: Record<string, unknown>;
178
+ request: Request;
179
+ }) => Promise<readonly VoicePhoneAgentProductionSmokeReport[]> | readonly VoicePhoneAgentProductionSmokeReport[]);
99
180
  providerRoutingContracts?: false | readonly VoiceProviderRoutingContractReport[] | ((input: {
100
181
  query: Record<string, unknown>;
101
182
  request: Request;
@@ -104,6 +185,7 @@ export type VoiceProductionReadinessRoutesOptions = {
104
185
  store: VoiceTraceEventStore;
105
186
  sttProviders?: readonly string[];
106
187
  title?: string;
188
+ traceDeliveries?: false | VoiceProductionReadinessTraceDeliveryOptions;
107
189
  ttsProviders?: readonly string[];
108
190
  liveLatencyWarnAfterMs?: number;
109
191
  liveLatencyFailAfterMs?: number;
@@ -6,7 +6,7 @@ export { VoiceRoutingStatus } from './VoiceRoutingStatus';
6
6
  export { VoiceTraceTimeline } from './VoiceTraceTimeline';
7
7
  export { VoiceTurnLatency } from './VoiceTurnLatency';
8
8
  export { VoiceTurnQuality } from './VoiceTurnQuality';
9
- export { useVoiceAppKitStatus } from './useVoiceAppKitStatus';
9
+ export { useVoiceOpsStatus } from './useVoiceOpsStatus';
10
10
  export { useVoiceCampaignDialerProof } from './useVoiceCampaignDialerProof';
11
11
  export { useVoiceStream } from './useVoiceStream';
12
12
  export { useVoiceController } from './useVoiceController';
@@ -69,19 +69,19 @@ var __decorateElement = (array, flags, name, decorators, target, extra) => {
69
69
  return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
70
70
  };
71
71
 
72
- // src/react/useVoiceAppKitStatus.tsx
72
+ // src/react/useVoiceOpsStatus.tsx
73
73
  import { useEffect, useRef, useSyncExternalStore } from "react";
74
74
 
75
- // src/client/appKitStatus.ts
76
- var fetchVoiceAppKitStatus = async (path = "/app-kit/status", options = {}) => {
75
+ // src/client/opsStatus.ts
76
+ var fetchVoiceOpsStatus = async (path = "/api/voice/ops-status", options = {}) => {
77
77
  const fetchImpl = options.fetch ?? globalThis.fetch;
78
78
  const response = await fetchImpl(path);
79
79
  if (!response.ok) {
80
- throw new Error(`Voice app kit status failed: HTTP ${response.status}`);
80
+ throw new Error(`Voice ops status failed: HTTP ${response.status}`);
81
81
  }
82
82
  return await response.json();
83
83
  };
84
- var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
84
+ var createVoiceOpsStatusStore = (path = "/api/voice/ops-status", options = {}) => {
85
85
  const listeners = new Set;
86
86
  let closed = false;
87
87
  let timer;
@@ -105,7 +105,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
105
105
  };
106
106
  emit();
107
107
  try {
108
- const report = await fetchVoiceAppKitStatus(path, options);
108
+ const report = await fetchVoiceOpsStatus(path, options);
109
109
  snapshot = {
110
110
  error: null,
111
111
  isLoading: false,
@@ -151,11 +151,11 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
151
151
  };
152
152
  };
153
153
 
154
- // src/react/useVoiceAppKitStatus.tsx
155
- var useVoiceAppKitStatus = (path = "/app-kit/status", options = {}) => {
154
+ // src/react/useVoiceOpsStatus.tsx
155
+ var useVoiceOpsStatus = (path = "/api/voice/ops-status", options = {}) => {
156
156
  const storeRef = useRef(null);
157
157
  if (!storeRef.current) {
158
- storeRef.current = createVoiceAppKitStatusStore(path, options);
158
+ storeRef.current = createVoiceOpsStatusStore(path, options);
159
159
  }
160
160
  const store = storeRef.current;
161
161
  useEffect(() => {
@@ -170,7 +170,7 @@ var useVoiceAppKitStatus = (path = "/app-kit/status", options = {}) => {
170
170
 
171
171
  // src/client/opsStatusWidget.ts
172
172
  var DEFAULT_TITLE = "Voice Ops Status";
173
- var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from the AbsoluteJS voice app kit.";
173
+ var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from your AbsoluteJS voice app.";
174
174
  var SURFACE_LABELS = {
175
175
  handoffs: "Handoffs",
176
176
  providers: "Providers",
@@ -255,8 +255,8 @@ var renderVoiceOpsStatusHTML = (snapshot, options = {}) => {
255
255
  </section>`;
256
256
  };
257
257
  var getVoiceOpsStatusCSS = () => `.absolute-voice-ops-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-ops-status--fail,.absolute-voice-ops-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-ops-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-ops-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-ops-status__label{font-size:28px;line-height:1}.absolute-voice-ops-status__description{color:#514733;margin:12px 0 0}.absolute-voice-ops-status__summary,.absolute-voice-ops-status__links{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.absolute-voice-ops-status__summary span,.absolute-voice-ops-status__links a{border:1px solid #e6ddca;border-radius:999px;color:inherit;padding:6px 10px;text-decoration:none}.absolute-voice-ops-status__surfaces{display:grid;gap:8px;list-style:none;margin:16px 0 0;padding:0}.absolute-voice-ops-status__surface{align-items:center;background:#fff;border:1px solid #eee4d2;border-radius:14px;display:flex;gap:12px;justify-content:space-between;padding:10px 12px}.absolute-voice-ops-status__surface--fail{border-color:#f2a7a7}.absolute-voice-ops-status__surface span{color:#655944}.absolute-voice-ops-status__error{color:#9f1239;font-weight:700}`;
258
- var mountVoiceOpsStatus = (element, path = "/app-kit/status", options = {}) => {
259
- const store = createVoiceAppKitStatusStore(path, options);
258
+ var mountVoiceOpsStatus = (element, path = "/api/voice/ops-status", options = {}) => {
259
+ const store = createVoiceOpsStatusStore(path, options);
260
260
  const render = () => {
261
261
  element.innerHTML = renderVoiceOpsStatusHTML(store.getSnapshot(), options);
262
262
  };
@@ -279,7 +279,7 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
279
279
  mounted;
280
280
  connectedCallback() {
281
281
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
282
- this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/app-kit/status", {
282
+ this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/api/voice/ops-status", {
283
283
  description: this.getAttribute("description") ?? undefined,
284
284
  includeLinks: this.getAttribute("include-links") !== "false",
285
285
  intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
@@ -297,10 +297,10 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
297
297
  import { jsxDEV } from "react/jsx-dev-runtime";
298
298
  var VoiceOpsStatus = ({
299
299
  className,
300
- path = "/app-kit/status",
300
+ path = "/api/voice/ops-status",
301
301
  ...options
302
302
  }) => {
303
- const snapshot = useVoiceAppKitStatus(path, options);
303
+ const snapshot = useVoiceOpsStatus(path, options);
304
304
  const model = createVoiceOpsStatusViewModel(snapshot, options);
305
305
  return /* @__PURE__ */ jsxDEV("section", {
306
306
  className: [
@@ -3820,9 +3820,9 @@ export {
3820
3820
  useVoiceProviderStatus,
3821
3821
  useVoiceProviderSimulationControls,
3822
3822
  useVoiceProviderCapabilities,
3823
+ useVoiceOpsStatus,
3823
3824
  useVoiceController,
3824
3825
  useVoiceCampaignDialerProof,
3825
- useVoiceAppKitStatus,
3826
3826
  VoiceTurnQuality,
3827
3827
  VoiceTurnLatency,
3828
3828
  VoiceTraceTimeline,
@@ -0,0 +1,8 @@
1
+ import { type VoiceOpsStatusClientOptions } from '../client/opsStatus';
2
+ export declare const useVoiceOpsStatus: (path?: string, options?: VoiceOpsStatusClientOptions) => {
3
+ refresh: () => Promise<import("..").VoiceOpsStatusReport | undefined>;
4
+ error: string | null;
5
+ isLoading: boolean;
6
+ report?: import("..").VoiceOpsStatusReport;
7
+ updatedAt?: number;
8
+ };
@@ -1,4 +1,6 @@
1
1
  import { type StoredVoiceTraceEvent, type VoiceTraceSinkDeliveryRecord, type VoiceTraceSinkDeliveryStore, type VoiceTraceEventStore } from './trace';
2
+ import { type StoredVoiceAuditEvent, type VoiceAuditEventStore } from './audit';
3
+ import type { VoiceAuditSinkDeliveryRecord, VoiceAuditSinkDeliveryStore } from './auditSinks';
2
4
  import type { StoredVoiceIntegrationEvent, StoredVoiceExternalObjectMap, StoredVoiceOpsTask, VoiceExternalObjectMapStore, VoiceIntegrationEventStore, VoiceOpsTaskStore } from './ops';
3
5
  import type { StoredVoiceCallReviewArtifact, VoiceCallReviewStore } from './testing/review';
4
6
  import type { VoiceTelephonyWebhookIdempotencyStore } from './telephonyOutcome';
@@ -9,7 +11,9 @@ export type VoiceSQLiteStoreOptions = {
9
11
  tableName?: string;
10
12
  tablePrefix?: string;
11
13
  };
12
- export type VoiceSQLiteRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord> = {
14
+ export type VoiceSQLiteRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord> = {
15
+ audit: VoiceAuditEventStore<TAudit>;
16
+ auditDeliveries: VoiceAuditSinkDeliveryStore<TAuditDelivery>;
13
17
  campaigns: VoiceCampaignStore;
14
18
  events: VoiceIntegrationEventStore<TEvent>;
15
19
  externalObjects: VoiceExternalObjectMapStore<TMapping>;
@@ -26,6 +30,8 @@ export declare const createVoiceSQLiteIntegrationEventStore: <TEvent extends Sto
26
30
  export declare const createVoiceSQLiteExternalObjectMapStore: <TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap>(options: VoiceSQLiteStoreOptions) => VoiceExternalObjectMapStore<TMapping>;
27
31
  export declare const createVoiceSQLiteTraceEventStore: <TEvent extends StoredVoiceTraceEvent = StoredVoiceTraceEvent>(options: VoiceSQLiteStoreOptions) => VoiceTraceEventStore<TEvent>;
28
32
  export declare const createVoiceSQLiteTraceSinkDeliveryStore: <TDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoiceSQLiteStoreOptions) => VoiceTraceSinkDeliveryStore<TDelivery>;
33
+ export declare const createVoiceSQLiteAuditEventStore: <TEvent extends StoredVoiceAuditEvent = StoredVoiceAuditEvent>(options: VoiceSQLiteStoreOptions) => VoiceAuditEventStore<TEvent>;
34
+ export declare const createVoiceSQLiteAuditSinkDeliveryStore: <TDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord>(options: VoiceSQLiteStoreOptions) => VoiceAuditSinkDeliveryStore<TDelivery>;
29
35
  export declare const createVoiceSQLiteTelephonyWebhookIdempotencyStore: <TResult = unknown>(options: VoiceSQLiteStoreOptions) => VoiceTelephonyWebhookIdempotencyStore<TResult>;
30
36
  export declare const createVoiceSQLiteCampaignStore: (options: VoiceSQLiteStoreOptions) => VoiceCampaignStore;
31
- export declare const createVoiceSQLiteRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoiceSQLiteStoreOptions) => VoiceSQLiteRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery>;
37
+ export declare const createVoiceSQLiteRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord>(options: VoiceSQLiteStoreOptions) => VoiceSQLiteRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery, TAudit, TAuditDelivery>;
@@ -2,8 +2,8 @@ import { type VoiceOpsStatusWidgetOptions } from '../client/opsStatusWidget';
2
2
  export declare const createVoiceOpsStatus: (path?: string, options?: VoiceOpsStatusWidgetOptions) => {
3
3
  close: () => void;
4
4
  getHTML: () => string;
5
- getSnapshot: () => import("../client").VoiceAppKitStatusSnapshot;
5
+ getSnapshot: () => import("../client").VoiceOpsStatusSnapshot;
6
6
  getViewModel: () => import("../client").VoiceOpsStatusViewModel;
7
- refresh: () => Promise<import("..").VoiceAppKitStatusReport | undefined>;
7
+ refresh: () => Promise<import("..").VoiceOpsStatusReport | undefined>;
8
8
  subscribe: (listener: () => void) => () => void;
9
9
  };
@@ -1,4 +1,3 @@
1
- export { createVoiceAppKitStatus } from './createVoiceAppKitStatus';
2
1
  export { createVoiceCampaignDialerProof } from './createVoiceCampaignDialerProof';
3
2
  export { createVoiceOpsStatus } from './createVoiceOpsStatus';
4
3
  export { createVoiceProviderSimulationControls } from './createVoiceProviderSimulationControls';