@absolutejs/voice 0.0.22-beta.125 → 0.0.22-beta.127

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 (44) hide show
  1. package/README.md +236 -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 +14600 -12518
  20. package/dist/opsStatus.d.ts +65 -0
  21. package/dist/opsStatusRoutes.d.ts +33 -0
  22. package/dist/phoneAgent.d.ts +4 -0
  23. package/dist/phoneAgentProductionSmoke.d.ts +115 -0
  24. package/dist/postgresStore.d.ts +8 -2
  25. package/dist/productionReadiness.d.ts +94 -0
  26. package/dist/providerRoutingContract.d.ts +38 -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/traceDeliveryRoutes.d.ts +86 -0
  35. package/dist/vue/index.d.ts +1 -1
  36. package/dist/vue/index.js +15 -15
  37. package/dist/vue/useVoiceOpsStatus.d.ts +9 -0
  38. package/package.json +1 -1
  39. package/dist/angular/voice-app-kit-status.service.d.ts +0 -12
  40. package/dist/appKit.d.ts +0 -100
  41. package/dist/client/appKitStatus.d.ts +0 -19
  42. package/dist/react/useVoiceAppKitStatus.d.ts +0 -8
  43. package/dist/svelte/createVoiceAppKitStatus.d.ts +0 -8
  44. package/dist/vue/useVoiceAppKitStatus.d.ts +0 -9
@@ -69,16 +69,24 @@ 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/client/appKitStatus.ts
73
- var fetchVoiceAppKitStatus = async (path = "/app-kit/status", options = {}) => {
72
+ // src/client/campaignDialerProof.ts
73
+ var fetchVoiceCampaignDialerProofStatus = async (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
74
74
  const fetchImpl = options.fetch ?? globalThis.fetch;
75
75
  const response = await fetchImpl(path);
76
76
  if (!response.ok) {
77
- throw new Error(`Voice app kit status failed: HTTP ${response.status}`);
77
+ throw new Error(`Voice campaign dialer proof status failed: HTTP ${response.status}`);
78
78
  }
79
79
  return await response.json();
80
80
  };
81
- var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
81
+ var runVoiceCampaignDialerProofAction = async (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
82
+ const fetchImpl = options.fetch ?? globalThis.fetch;
83
+ const response = await fetchImpl(path, { method: "POST" });
84
+ if (!response.ok) {
85
+ throw new Error(`Voice campaign dialer proof failed: HTTP ${response.status}`);
86
+ }
87
+ return await response.json();
88
+ };
89
+ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
82
90
  const listeners = new Set;
83
91
  let closed = false;
84
92
  let timer;
@@ -93,20 +101,50 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
93
101
  };
94
102
  const refresh = async () => {
95
103
  if (closed) {
96
- return snapshot.report;
104
+ return snapshot.status;
97
105
  }
98
- snapshot = {
99
- ...snapshot,
100
- error: null,
101
- isLoading: true
102
- };
106
+ snapshot = { ...snapshot, error: null, isLoading: true };
107
+ emit();
108
+ try {
109
+ const status = await fetchVoiceCampaignDialerProofStatus(path, options);
110
+ snapshot = {
111
+ ...snapshot,
112
+ error: null,
113
+ isLoading: false,
114
+ status,
115
+ updatedAt: Date.now()
116
+ };
117
+ emit();
118
+ return status;
119
+ } catch (error) {
120
+ snapshot = {
121
+ ...snapshot,
122
+ error: error instanceof Error ? error.message : String(error),
123
+ isLoading: false
124
+ };
125
+ emit();
126
+ throw error;
127
+ }
128
+ };
129
+ const runProof = async () => {
130
+ const runPath = options.runPath ?? snapshot.status?.runPath ?? path;
131
+ snapshot = { ...snapshot, error: null, isLoading: true };
103
132
  emit();
104
133
  try {
105
- const report = await fetchVoiceAppKitStatus(path, options);
134
+ const report = await runVoiceCampaignDialerProofAction(runPath, options);
106
135
  snapshot = {
136
+ ...snapshot,
107
137
  error: null,
108
138
  isLoading: false,
109
139
  report,
140
+ status: {
141
+ generatedAt: Date.now(),
142
+ mode: report.mode,
143
+ ok: report.ok,
144
+ providers: report.providers.map((provider) => provider.provider),
145
+ runPath,
146
+ safe: true
147
+ },
110
148
  updatedAt: Date.now()
111
149
  };
112
150
  emit();
@@ -129,7 +167,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
129
167
  }
130
168
  listeners.clear();
131
169
  };
132
- if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
170
+ if (options.intervalMs && options.intervalMs > 0) {
133
171
  timer = setInterval(() => {
134
172
  refresh().catch(() => {});
135
173
  }, options.intervalMs);
@@ -139,6 +177,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
139
177
  getServerSnapshot: () => snapshot,
140
178
  getSnapshot: () => snapshot,
141
179
  refresh,
180
+ runProof,
142
181
  subscribe: (listener) => {
143
182
  listeners.add(listener);
144
183
  return () => {
@@ -148,26 +187,18 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
148
187
  };
149
188
  };
150
189
 
151
- // src/svelte/createVoiceAppKitStatus.ts
152
- var createVoiceAppKitStatus = (path = "/app-kit/status", options = {}) => createVoiceAppKitStatusStore(path, options);
153
- // src/client/campaignDialerProof.ts
154
- var fetchVoiceCampaignDialerProofStatus = async (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
190
+ // src/svelte/createVoiceCampaignDialerProof.ts
191
+ var createVoiceCampaignDialerProof = (path = "/api/voice/campaigns/dialer-proof", options = {}) => createVoiceCampaignDialerProofStore(path, options);
192
+ // src/client/opsStatus.ts
193
+ var fetchVoiceOpsStatus = async (path = "/api/voice/ops-status", options = {}) => {
155
194
  const fetchImpl = options.fetch ?? globalThis.fetch;
156
195
  const response = await fetchImpl(path);
157
196
  if (!response.ok) {
158
- throw new Error(`Voice campaign dialer proof status failed: HTTP ${response.status}`);
197
+ throw new Error(`Voice ops status failed: HTTP ${response.status}`);
159
198
  }
160
199
  return await response.json();
161
200
  };
162
- var runVoiceCampaignDialerProofAction = async (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
163
- const fetchImpl = options.fetch ?? globalThis.fetch;
164
- const response = await fetchImpl(path, { method: "POST" });
165
- if (!response.ok) {
166
- throw new Error(`Voice campaign dialer proof failed: HTTP ${response.status}`);
167
- }
168
- return await response.json();
169
- };
170
- var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
201
+ var createVoiceOpsStatusStore = (path = "/api/voice/ops-status", options = {}) => {
171
202
  const listeners = new Set;
172
203
  let closed = false;
173
204
  let timer;
@@ -182,50 +213,20 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
182
213
  };
183
214
  const refresh = async () => {
184
215
  if (closed) {
185
- return snapshot.status;
186
- }
187
- snapshot = { ...snapshot, error: null, isLoading: true };
188
- emit();
189
- try {
190
- const status = await fetchVoiceCampaignDialerProofStatus(path, options);
191
- snapshot = {
192
- ...snapshot,
193
- error: null,
194
- isLoading: false,
195
- status,
196
- updatedAt: Date.now()
197
- };
198
- emit();
199
- return status;
200
- } catch (error) {
201
- snapshot = {
202
- ...snapshot,
203
- error: error instanceof Error ? error.message : String(error),
204
- isLoading: false
205
- };
206
- emit();
207
- throw error;
216
+ return snapshot.report;
208
217
  }
209
- };
210
- const runProof = async () => {
211
- const runPath = options.runPath ?? snapshot.status?.runPath ?? path;
212
- snapshot = { ...snapshot, error: null, isLoading: true };
218
+ snapshot = {
219
+ ...snapshot,
220
+ error: null,
221
+ isLoading: true
222
+ };
213
223
  emit();
214
224
  try {
215
- const report = await runVoiceCampaignDialerProofAction(runPath, options);
225
+ const report = await fetchVoiceOpsStatus(path, options);
216
226
  snapshot = {
217
- ...snapshot,
218
227
  error: null,
219
228
  isLoading: false,
220
229
  report,
221
- status: {
222
- generatedAt: Date.now(),
223
- mode: report.mode,
224
- ok: report.ok,
225
- providers: report.providers.map((provider) => provider.provider),
226
- runPath,
227
- safe: true
228
- },
229
230
  updatedAt: Date.now()
230
231
  };
231
232
  emit();
@@ -248,7 +249,7 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
248
249
  }
249
250
  listeners.clear();
250
251
  };
251
- if (options.intervalMs && options.intervalMs > 0) {
252
+ if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
252
253
  timer = setInterval(() => {
253
254
  refresh().catch(() => {});
254
255
  }, options.intervalMs);
@@ -258,7 +259,6 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
258
259
  getServerSnapshot: () => snapshot,
259
260
  getSnapshot: () => snapshot,
260
261
  refresh,
261
- runProof,
262
262
  subscribe: (listener) => {
263
263
  listeners.add(listener);
264
264
  return () => {
@@ -268,11 +268,9 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
268
268
  };
269
269
  };
270
270
 
271
- // src/svelte/createVoiceCampaignDialerProof.ts
272
- var createVoiceCampaignDialerProof = (path = "/api/voice/campaigns/dialer-proof", options = {}) => createVoiceCampaignDialerProofStore(path, options);
273
271
  // src/client/opsStatusWidget.ts
274
272
  var DEFAULT_TITLE = "Voice Ops Status";
275
- var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from the AbsoluteJS voice app kit.";
273
+ var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from your AbsoluteJS voice app.";
276
274
  var SURFACE_LABELS = {
277
275
  handoffs: "Handoffs",
278
276
  providers: "Providers",
@@ -357,8 +355,8 @@ var renderVoiceOpsStatusHTML = (snapshot, options = {}) => {
357
355
  </section>`;
358
356
  };
359
357
  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}`;
360
- var mountVoiceOpsStatus = (element, path = "/app-kit/status", options = {}) => {
361
- const store = createVoiceAppKitStatusStore(path, options);
358
+ var mountVoiceOpsStatus = (element, path = "/api/voice/ops-status", options = {}) => {
359
+ const store = createVoiceOpsStatusStore(path, options);
362
360
  const render = () => {
363
361
  element.innerHTML = renderVoiceOpsStatusHTML(store.getSnapshot(), options);
364
362
  };
@@ -381,7 +379,7 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
381
379
  mounted;
382
380
  connectedCallback() {
383
381
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
384
- this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/app-kit/status", {
382
+ this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/api/voice/ops-status", {
385
383
  description: this.getAttribute("description") ?? undefined,
386
384
  includeLinks: this.getAttribute("include-links") !== "false",
387
385
  intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
@@ -396,8 +394,8 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
396
394
  };
397
395
 
398
396
  // src/svelte/createVoiceOpsStatus.ts
399
- var createVoiceOpsStatus = (path = "/app-kit/status", options = {}) => {
400
- const store = createVoiceAppKitStatusStore(path, options);
397
+ var createVoiceOpsStatus = (path = "/api/voice/ops-status", options = {}) => {
398
+ const store = createVoiceOpsStatusStore(path, options);
401
399
  return {
402
400
  close: store.close,
403
401
  getHTML: () => renderVoiceOpsStatusHTML(store.getSnapshot(), options),
@@ -3017,6 +3015,5 @@ export {
3017
3015
  createVoiceProviderCapabilities,
3018
3016
  createVoiceOpsStatus,
3019
3017
  createVoiceController,
3020
- createVoiceCampaignDialerProof,
3021
- createVoiceAppKitStatus
3018
+ createVoiceCampaignDialerProof
3022
3019
  };
@@ -0,0 +1,86 @@
1
+ import { Elysia } from 'elysia';
2
+ import { type VoiceTraceSinkDeliveryQueueSummary, type VoiceTraceSinkDeliveryWorkerResult } from './queue';
3
+ import type { VoiceTraceSinkDeliveryQueueStatus, VoiceTraceSinkDeliveryRecord, VoiceTraceSinkDeliveryStore } from './trace';
4
+ export type VoiceTraceDeliveryReport = {
5
+ checkedAt: number;
6
+ deliveries: VoiceTraceSinkDeliveryRecord[];
7
+ filter: VoiceTraceDeliveryFilter;
8
+ summary: VoiceTraceSinkDeliveryQueueSummary;
9
+ };
10
+ export type VoiceTraceDeliveryDrainWorker = {
11
+ drain: () => Promise<VoiceTraceSinkDeliveryWorkerResult> | VoiceTraceSinkDeliveryWorkerResult;
12
+ };
13
+ export type VoiceTraceDeliveryDrainReport = VoiceTraceSinkDeliveryWorkerResult & {
14
+ drainedAt: number;
15
+ };
16
+ export type VoiceTraceDeliveryFilter = {
17
+ limit?: number;
18
+ q?: string;
19
+ status?: VoiceTraceSinkDeliveryQueueStatus | 'all';
20
+ };
21
+ export type VoiceTraceDeliveryRoutesOptions = {
22
+ deadLetters?: VoiceTraceSinkDeliveryStore;
23
+ filter?: VoiceTraceDeliveryFilter;
24
+ headers?: HeadersInit;
25
+ htmlPath?: false | string;
26
+ limit?: number;
27
+ name?: string;
28
+ path?: string;
29
+ render?: (report: VoiceTraceDeliveryReport) => string | Promise<string>;
30
+ store: VoiceTraceSinkDeliveryStore;
31
+ title?: string;
32
+ worker?: VoiceTraceDeliveryDrainWorker;
33
+ workerPath?: false | string;
34
+ };
35
+ export declare const resolveVoiceTraceDeliveryFilter: (query?: Record<string, unknown>, base?: VoiceTraceDeliveryFilter) => VoiceTraceDeliveryFilter;
36
+ export declare const buildVoiceTraceDeliveryReport: (options: VoiceTraceDeliveryRoutesOptions, filter?: VoiceTraceDeliveryFilter) => Promise<VoiceTraceDeliveryReport>;
37
+ export declare const renderVoiceTraceDeliveryHTML: (report: VoiceTraceDeliveryReport, options?: {
38
+ title?: string;
39
+ workerPath?: false | string;
40
+ }) => string;
41
+ export declare const createVoiceTraceDeliveryJSONHandler: (options: VoiceTraceDeliveryRoutesOptions) => ({ query }: {
42
+ query?: Record<string, string | undefined>;
43
+ }) => Promise<VoiceTraceDeliveryReport>;
44
+ export declare const createVoiceTraceDeliveryHTMLHandler: (options: VoiceTraceDeliveryRoutesOptions) => ({ query }: {
45
+ query?: Record<string, string | undefined>;
46
+ }) => Promise<Response>;
47
+ export declare const createVoiceTraceDeliveryRoutes: (options: VoiceTraceDeliveryRoutesOptions) => Elysia<"", {
48
+ decorator: {};
49
+ store: {};
50
+ derive: {};
51
+ resolve: {};
52
+ }, {
53
+ typebox: {};
54
+ error: {};
55
+ }, {
56
+ schema: {};
57
+ standaloneSchema: {};
58
+ macro: {};
59
+ macroFn: {};
60
+ parser: {};
61
+ response: {};
62
+ }, {
63
+ [x: string]: {
64
+ get: {
65
+ body: unknown;
66
+ params: {};
67
+ query: unknown;
68
+ headers: unknown;
69
+ response: {
70
+ 200: VoiceTraceDeliveryReport;
71
+ };
72
+ };
73
+ };
74
+ }, {
75
+ derive: {};
76
+ resolve: {};
77
+ schema: {};
78
+ standaloneSchema: {};
79
+ response: {};
80
+ }, {
81
+ derive: {};
82
+ resolve: {};
83
+ schema: {};
84
+ standaloneSchema: {};
85
+ response: {};
86
+ }>;
@@ -5,7 +5,7 @@ export { VoiceProviderStatus } from './VoiceProviderStatus';
5
5
  export { VoiceRoutingStatus } from './VoiceRoutingStatus';
6
6
  export { VoiceTurnLatency } from './VoiceTurnLatency';
7
7
  export { VoiceTurnQuality } from './VoiceTurnQuality';
8
- export { useVoiceAppKitStatus } from './useVoiceAppKitStatus';
8
+ export { useVoiceOpsStatus } from './useVoiceOpsStatus';
9
9
  export { useVoiceCampaignDialerProof } from './useVoiceCampaignDialerProof';
10
10
  export { useVoiceStream } from './useVoiceStream';
11
11
  export { useVoiceController } from './useVoiceController';
package/dist/vue/index.js CHANGED
@@ -72,16 +72,16 @@ var __decorateElement = (array, flags, name, decorators, target, extra) => {
72
72
  // src/vue/VoiceOpsStatus.ts
73
73
  import { defineComponent, h } from "vue";
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,
@@ -153,7 +153,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
153
153
 
154
154
  // src/client/opsStatusWidget.ts
155
155
  var DEFAULT_TITLE = "Voice Ops Status";
156
- var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from the AbsoluteJS voice app kit.";
156
+ var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from your AbsoluteJS voice app.";
157
157
  var SURFACE_LABELS = {
158
158
  handoffs: "Handoffs",
159
159
  providers: "Providers",
@@ -238,8 +238,8 @@ var renderVoiceOpsStatusHTML = (snapshot, options = {}) => {
238
238
  </section>`;
239
239
  };
240
240
  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}`;
241
- var mountVoiceOpsStatus = (element, path = "/app-kit/status", options = {}) => {
242
- const store = createVoiceAppKitStatusStore(path, options);
241
+ var mountVoiceOpsStatus = (element, path = "/api/voice/ops-status", options = {}) => {
242
+ const store = createVoiceOpsStatusStore(path, options);
243
243
  const render = () => {
244
244
  element.innerHTML = renderVoiceOpsStatusHTML(store.getSnapshot(), options);
245
245
  };
@@ -262,7 +262,7 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
262
262
  mounted;
263
263
  connectedCallback() {
264
264
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
265
- this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/app-kit/status", {
265
+ this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/api/voice/ops-status", {
266
266
  description: this.getAttribute("description") ?? undefined,
267
267
  includeLinks: this.getAttribute("include-links") !== "false",
268
268
  intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
@@ -276,10 +276,10 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
276
276
  });
277
277
  };
278
278
 
279
- // src/vue/useVoiceAppKitStatus.ts
279
+ // src/vue/useVoiceOpsStatus.ts
280
280
  import { onUnmounted, ref, shallowRef } from "vue";
281
- function useVoiceAppKitStatus(path = "/app-kit/status", options = {}) {
282
- const store = createVoiceAppKitStatusStore(path, options);
281
+ function useVoiceOpsStatus(path = "/api/voice/ops-status", options = {}) {
282
+ const store = createVoiceOpsStatusStore(path, options);
283
283
  const error = ref(null);
284
284
  const isLoading = ref(false);
285
285
  const report = shallowRef(undefined);
@@ -320,7 +320,7 @@ var VoiceOpsStatus = defineComponent({
320
320
  },
321
321
  intervalMs: Number,
322
322
  path: {
323
- default: "/app-kit/status",
323
+ default: "/api/voice/ops-status",
324
324
  type: String
325
325
  },
326
326
  title: String
@@ -332,7 +332,7 @@ var VoiceOpsStatus = defineComponent({
332
332
  intervalMs: props.intervalMs,
333
333
  title: props.title
334
334
  };
335
- const status = useVoiceAppKitStatus(props.path, options);
335
+ const status = useVoiceOpsStatus(props.path, options);
336
336
  return () => {
337
337
  const model = createVoiceOpsStatusViewModel({
338
338
  error: status.error.value,
@@ -3754,9 +3754,9 @@ export {
3754
3754
  useVoiceProviderStatus,
3755
3755
  useVoiceProviderSimulationControls,
3756
3756
  useVoiceProviderCapabilities,
3757
+ useVoiceOpsStatus,
3757
3758
  useVoiceController,
3758
3759
  useVoiceCampaignDialerProof,
3759
- useVoiceAppKitStatus,
3760
3760
  VoiceTurnQuality,
3761
3761
  VoiceTurnLatency,
3762
3762
  VoiceRoutingStatus,
@@ -0,0 +1,9 @@
1
+ import { type VoiceOpsStatusClientOptions } from '../client/opsStatus';
2
+ import type { VoiceOpsStatusReport } from '../opsStatus';
3
+ export declare function useVoiceOpsStatus(path?: string, options?: VoiceOpsStatusClientOptions): {
4
+ error: import("vue").Ref<string | null, string | null>;
5
+ isLoading: import("vue").Ref<boolean, boolean>;
6
+ refresh: () => Promise<VoiceOpsStatusReport | undefined>;
7
+ report: import("vue").ShallowRef<VoiceOpsStatusReport | undefined, VoiceOpsStatusReport | undefined>;
8
+ updatedAt: import("vue").Ref<number | undefined, number | undefined>;
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.125",
3
+ "version": "0.0.22-beta.127",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,12 +0,0 @@
1
- import { type VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
2
- import type { VoiceAppKitStatusReport } from '../appKit';
3
- export declare class VoiceAppKitStatusService {
4
- connect(path?: string, options?: VoiceAppKitStatusClientOptions): {
5
- close: () => void;
6
- error: import("@angular/core").Signal<string | null>;
7
- isLoading: import("@angular/core").Signal<boolean>;
8
- refresh: () => Promise<VoiceAppKitStatusReport | undefined>;
9
- report: import("@angular/core").Signal<VoiceAppKitStatusReport | undefined>;
10
- updatedAt: import("@angular/core").Signal<number | undefined>;
11
- };
12
- }
package/dist/appKit.d.ts DELETED
@@ -1,100 +0,0 @@
1
- import { Elysia } from 'elysia';
2
- import { type VoiceAssistantHealthRoutesOptions } from './assistantHealth';
3
- import { type VoiceBargeInRoutesOptions } from './bargeInRoutes';
4
- import { type VoiceDiagnosticsRoutesOptions } from './diagnosticsRoutes';
5
- import { type VoiceEvalRoutesOptions, type VoiceEvalLink } from './evalRoutes';
6
- import { type VoiceHandoffHealthRoutesOptions } from './handoffHealth';
7
- import { type VoiceOpsConsoleRoutesOptions } from './opsConsoleRoutes';
8
- import { type VoiceProviderHealthRoutesOptions } from './providerHealth';
9
- import { type VoiceProviderCapabilityRoutesOptions } from './providerCapabilities';
10
- import { type VoiceProductionReadinessRoutesOptions } from './productionReadiness';
11
- import { type VoiceQualityRoutesOptions } from './qualityRoutes';
12
- import { type VoiceResilienceRoutesOptions } from './resilienceRoutes';
13
- import { type VoiceSessionListRoutesOptions, type VoiceSessionReplayRoutesOptions } from './sessionReplay';
14
- import { type VoiceTraceEventStore } from './trace';
15
- import { type VoiceTraceTimelineRoutesOptions } from './traceTimeline';
16
- export type VoiceAppKitSurface = 'assistantHealth' | 'bargeIn' | 'diagnostics' | 'evals' | 'handoffs' | 'opsConsole' | 'providerCapabilities' | 'providerHealth' | 'productionReadiness' | 'quality' | 'resilience' | 'sessionReplay' | 'sessions' | 'traceTimeline';
17
- export type VoiceAppKitLink = VoiceEvalLink & {
18
- description?: string;
19
- statusHref?: string;
20
- };
21
- export type VoiceAppKitRoutesOptions<TProvider extends string = string> = {
22
- appStatus?: false | VoiceAppKitStatusOptions;
23
- assistantHealth?: false | Partial<VoiceAssistantHealthRoutesOptions<TProvider>>;
24
- bargeIn?: false | Partial<VoiceBargeInRoutesOptions>;
25
- diagnostics?: false | Partial<Omit<VoiceDiagnosticsRoutesOptions, 'store'>>;
26
- evals?: false | Partial<VoiceEvalRoutesOptions>;
27
- handoffs?: false | Partial<VoiceHandoffHealthRoutesOptions>;
28
- headers?: HeadersInit;
29
- links?: VoiceAppKitLink[];
30
- llmProviders?: readonly TProvider[];
31
- name?: string;
32
- opsConsole?: false | Partial<VoiceOpsConsoleRoutesOptions>;
33
- providerCapabilities?: false | Partial<VoiceProviderCapabilityRoutesOptions<TProvider>>;
34
- providerHealth?: false | Partial<VoiceProviderHealthRoutesOptions<TProvider>>;
35
- productionReadiness?: false | Partial<VoiceProductionReadinessRoutesOptions>;
36
- quality?: false | Partial<VoiceQualityRoutesOptions>;
37
- resilience?: false | Partial<VoiceResilienceRoutesOptions>;
38
- sessionReplay?: false | Partial<VoiceSessionReplayRoutesOptions>;
39
- sessions?: false | Partial<VoiceSessionListRoutesOptions>;
40
- store: VoiceTraceEventStore;
41
- sttProviders?: readonly string[];
42
- title?: string;
43
- traceTimeline?: false | Partial<VoiceTraceTimelineRoutesOptions>;
44
- ttsProviders?: readonly string[];
45
- };
46
- export type VoiceAppKitStatus = 'pass' | 'fail';
47
- export type VoiceAppKitStatusOptions = {
48
- include?: {
49
- handoffs?: boolean;
50
- providers?: boolean;
51
- quality?: boolean;
52
- sessions?: boolean;
53
- workflows?: boolean;
54
- };
55
- path?: string;
56
- preferFixtureWorkflows?: boolean;
57
- };
58
- export type VoiceAppKitStatusReport = {
59
- checkedAt: number;
60
- failed: number;
61
- links: VoiceAppKitLink[];
62
- passed: number;
63
- status: VoiceAppKitStatus;
64
- surfaces: {
65
- handoffs?: {
66
- failed: number;
67
- status: VoiceAppKitStatus;
68
- total: number;
69
- };
70
- providers?: {
71
- degraded: number;
72
- status: VoiceAppKitStatus;
73
- total: number;
74
- };
75
- quality?: {
76
- status: VoiceAppKitStatus;
77
- };
78
- sessions?: {
79
- failed: number;
80
- status: VoiceAppKitStatus;
81
- total: number;
82
- };
83
- workflows?: {
84
- failed: number;
85
- source: 'fixtures' | 'live';
86
- status: VoiceAppKitStatus;
87
- total: number;
88
- };
89
- };
90
- total: number;
91
- };
92
- export type VoiceAppKitRoutes<TProvider extends string = string> = {
93
- links: VoiceAppKitLink[];
94
- routes: Elysia;
95
- surfaces: VoiceAppKitSurface[];
96
- use: Elysia['use'];
97
- };
98
- export declare const summarizeVoiceAppKitStatus: <TProvider extends string = string>(options: VoiceAppKitRoutesOptions<TProvider>) => Promise<VoiceAppKitStatusReport>;
99
- export declare const createVoiceAppKitRoutes: <TProvider extends string = string>(options: VoiceAppKitRoutesOptions<TProvider>) => VoiceAppKitRoutes<TProvider>;
100
- export declare const createVoiceAppKit: <TProvider extends string = string>(options: VoiceAppKitRoutesOptions<TProvider>) => VoiceAppKitRoutes<TProvider>;
@@ -1,19 +0,0 @@
1
- import type { VoiceAppKitStatusReport } from '../appKit';
2
- export type VoiceAppKitStatusClientOptions = {
3
- fetch?: typeof fetch;
4
- intervalMs?: number;
5
- };
6
- export type VoiceAppKitStatusSnapshot = {
7
- error: string | null;
8
- isLoading: boolean;
9
- report?: VoiceAppKitStatusReport;
10
- updatedAt?: number;
11
- };
12
- export declare const fetchVoiceAppKitStatus: (path?: string, options?: Pick<VoiceAppKitStatusClientOptions, "fetch">) => Promise<VoiceAppKitStatusReport>;
13
- export declare const createVoiceAppKitStatusStore: (path?: string, options?: VoiceAppKitStatusClientOptions) => {
14
- close: () => void;
15
- getServerSnapshot: () => VoiceAppKitStatusSnapshot;
16
- getSnapshot: () => VoiceAppKitStatusSnapshot;
17
- refresh: () => Promise<VoiceAppKitStatusReport | undefined>;
18
- subscribe: (listener: () => void) => () => void;
19
- };
@@ -1,8 +0,0 @@
1
- import { type VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
2
- export declare const useVoiceAppKitStatus: (path?: string, options?: VoiceAppKitStatusClientOptions) => {
3
- refresh: () => Promise<import("..").VoiceAppKitStatusReport | undefined>;
4
- error: string | null;
5
- isLoading: boolean;
6
- report?: import("..").VoiceAppKitStatusReport;
7
- updatedAt?: number;
8
- };
@@ -1,8 +0,0 @@
1
- import type { VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
2
- export declare const createVoiceAppKitStatus: (path?: string, options?: VoiceAppKitStatusClientOptions) => {
3
- close: () => void;
4
- getServerSnapshot: () => import("../client").VoiceAppKitStatusSnapshot;
5
- getSnapshot: () => import("../client").VoiceAppKitStatusSnapshot;
6
- refresh: () => Promise<import("..").VoiceAppKitStatusReport | undefined>;
7
- subscribe: (listener: () => void) => () => void;
8
- };
@@ -1,9 +0,0 @@
1
- import { type VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
2
- import type { VoiceAppKitStatusReport } from '../appKit';
3
- export declare function useVoiceAppKitStatus(path?: string, options?: VoiceAppKitStatusClientOptions): {
4
- error: import("vue").Ref<string | null, string | null>;
5
- isLoading: import("vue").Ref<boolean, boolean>;
6
- refresh: () => Promise<VoiceAppKitStatusReport | undefined>;
7
- report: import("vue").ShallowRef<VoiceAppKitStatusReport | undefined, VoiceAppKitStatusReport | undefined>;
8
- updatedAt: import("vue").Ref<number | undefined, number | undefined>;
9
- };