@absolutejs/voice 0.0.22-beta.153 → 0.0.22-beta.155

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.
@@ -193,9 +193,246 @@ VoiceOpsStatusService = __decorateElement(_init, 0, "VoiceOpsStatusService", _de
193
193
  __runInitializers(_init, 1, VoiceOpsStatusService);
194
194
  __decoratorMetadata(_init, VoiceOpsStatusService);
195
195
  let _VoiceOpsStatusService = VoiceOpsStatusService;
196
- // src/angular/voice-delivery-runtime.service.ts
196
+ // src/angular/voice-ops-action-center.service.ts
197
197
  import { computed as computed2, Injectable as Injectable2, signal as signal2 } from "@angular/core";
198
198
 
199
+ // src/client/opsActionCenter.ts
200
+ var recordVoiceOpsActionResult = async (result, options = {}) => {
201
+ if (options.auditPath === false) {
202
+ return;
203
+ }
204
+ const path = options.auditPath ?? "/api/voice/ops-actions/audit";
205
+ const fetchImpl = options.fetch ?? globalThis.fetch;
206
+ const response = await fetchImpl(path, {
207
+ body: JSON.stringify(result),
208
+ headers: {
209
+ "Content-Type": "application/json"
210
+ },
211
+ method: "POST"
212
+ });
213
+ if (!response.ok) {
214
+ throw new Error(`Voice ops action audit failed: HTTP ${response.status}`);
215
+ }
216
+ };
217
+ var createVoiceOpsActionCenterActions = (options = {}) => {
218
+ const deliveryRuntimePath = options.deliveryRuntimePath ?? "/api/voice-delivery-runtime";
219
+ const actions = [];
220
+ if (options.includeProductionReadiness !== false) {
221
+ actions.push({
222
+ description: "Refresh the production readiness report.",
223
+ id: "production-readiness",
224
+ label: "Refresh readiness",
225
+ method: "GET",
226
+ path: options.productionReadinessPath ?? "/api/production-readiness"
227
+ });
228
+ }
229
+ if (options.includeDeliveryRuntime !== false) {
230
+ actions.push({
231
+ description: "Drain pending and failed audit/trace deliveries.",
232
+ id: "delivery-runtime.tick",
233
+ label: "Tick delivery workers",
234
+ method: "POST",
235
+ path: `${deliveryRuntimePath.replace(/\/$/, "")}/tick`
236
+ }, {
237
+ description: "Move reviewed dead letters back to live delivery queues.",
238
+ id: "delivery-runtime.requeue-dead-letters",
239
+ label: "Requeue dead letters",
240
+ method: "POST",
241
+ path: `${deliveryRuntimePath.replace(/\/$/, "")}/requeue-dead-letters`
242
+ });
243
+ }
244
+ if (options.includeTurnLatencyProof !== false) {
245
+ actions.push({
246
+ description: "Run the synthetic turn latency proof.",
247
+ id: "turn-latency.proof",
248
+ label: "Run latency proof",
249
+ method: "POST",
250
+ path: options.turnLatencyProofPath ?? "/api/turn-latency/proof"
251
+ });
252
+ }
253
+ if (options.includeProviderSimulation !== false) {
254
+ const pathPrefix = options.providerSimulationPathPrefix ?? "/api/stt-simulate";
255
+ for (const provider of options.providers ?? []) {
256
+ actions.push({
257
+ description: `Simulate ${provider} provider failure.`,
258
+ id: `provider.${provider}.failure`,
259
+ label: `Simulate ${provider} failure`,
260
+ method: "POST",
261
+ path: `${pathPrefix}/failure?provider=${encodeURIComponent(provider)}`
262
+ }, {
263
+ description: `Mark ${provider} provider recovered.`,
264
+ id: `provider.${provider}.recovery`,
265
+ label: `Recover ${provider}`,
266
+ method: "POST",
267
+ path: `${pathPrefix}/recovery?provider=${encodeURIComponent(provider)}`
268
+ });
269
+ }
270
+ }
271
+ return actions;
272
+ };
273
+ var runVoiceOpsAction = async (action, options = {}) => {
274
+ const fetchImpl = options.fetch ?? globalThis.fetch;
275
+ const response = await fetchImpl(action.path, {
276
+ method: action.method ?? "POST"
277
+ });
278
+ const body = await response.json().catch(() => null);
279
+ if (!response.ok) {
280
+ const message = body && typeof body === "object" && "error" in body ? String(body.error) : `Voice ops action "${action.id}" failed: HTTP ${response.status}`;
281
+ throw new Error(message);
282
+ }
283
+ return {
284
+ actionId: action.id,
285
+ body,
286
+ ok: response.ok,
287
+ ranAt: Date.now(),
288
+ status: response.status
289
+ };
290
+ };
291
+ var createVoiceOpsActionCenterStore = (options = {}) => {
292
+ const listeners = new Set;
293
+ let closed = false;
294
+ let timer;
295
+ let snapshot = {
296
+ actions: options.actions ?? createVoiceOpsActionCenterActions(),
297
+ error: null,
298
+ isRunning: false
299
+ };
300
+ const emit = () => {
301
+ for (const listener of listeners) {
302
+ listener();
303
+ }
304
+ };
305
+ const setActions = (actions) => {
306
+ snapshot = { ...snapshot, actions, updatedAt: Date.now() };
307
+ emit();
308
+ };
309
+ const run = async (actionId) => {
310
+ if (closed) {
311
+ return snapshot.lastResult;
312
+ }
313
+ const action = snapshot.actions.find((item) => item.id === actionId);
314
+ if (!action) {
315
+ throw new Error(`Voice ops action "${actionId}" is not configured.`);
316
+ }
317
+ if (action.disabled) {
318
+ throw new Error(`Voice ops action "${actionId}" is disabled.`);
319
+ }
320
+ snapshot = {
321
+ ...snapshot,
322
+ error: null,
323
+ isRunning: true,
324
+ runningActionId: action.id
325
+ };
326
+ emit();
327
+ try {
328
+ const result = await runVoiceOpsAction(action, options);
329
+ await options.onActionResult?.(result);
330
+ await recordVoiceOpsActionResult(result, options);
331
+ snapshot = {
332
+ ...snapshot,
333
+ error: null,
334
+ isRunning: false,
335
+ lastResult: result,
336
+ runningActionId: undefined,
337
+ updatedAt: Date.now()
338
+ };
339
+ emit();
340
+ return result;
341
+ } catch (error) {
342
+ const result = {
343
+ actionId: action.id,
344
+ body: null,
345
+ error: error instanceof Error ? error.message : String(error),
346
+ ok: false,
347
+ ranAt: Date.now(),
348
+ status: 0
349
+ };
350
+ await options.onActionResult?.(result);
351
+ await recordVoiceOpsActionResult(result, options).catch(() => {});
352
+ snapshot = {
353
+ ...snapshot,
354
+ error: error instanceof Error ? error.message : String(error),
355
+ isRunning: false,
356
+ runningActionId: undefined
357
+ };
358
+ emit();
359
+ throw error;
360
+ }
361
+ };
362
+ const close = () => {
363
+ closed = true;
364
+ if (timer) {
365
+ clearInterval(timer);
366
+ timer = undefined;
367
+ }
368
+ listeners.clear();
369
+ };
370
+ if (options.intervalMs && options.intervalMs > 0) {
371
+ timer = setInterval(() => {
372
+ emit();
373
+ }, options.intervalMs);
374
+ }
375
+ return {
376
+ close,
377
+ getServerSnapshot: () => snapshot,
378
+ getSnapshot: () => snapshot,
379
+ run,
380
+ setActions,
381
+ subscribe: (listener) => {
382
+ listeners.add(listener);
383
+ return () => {
384
+ listeners.delete(listener);
385
+ };
386
+ }
387
+ };
388
+ };
389
+
390
+ // src/angular/voice-ops-action-center.service.ts
391
+ var _dec = [
392
+ Injectable2({ providedIn: "root" })
393
+ ];
394
+ var _init = __decoratorStart(undefined);
395
+
396
+ class VoiceOpsActionCenterService {
397
+ connect(options = {}) {
398
+ const store = createVoiceOpsActionCenterStore(options);
399
+ const actionsSignal = signal2([]);
400
+ const errorSignal = signal2(null);
401
+ const isRunningSignal = signal2(false);
402
+ const lastResultSignal = signal2(undefined);
403
+ const runningActionIdSignal = signal2(undefined);
404
+ const sync = () => {
405
+ const snapshot = store.getSnapshot();
406
+ actionsSignal.set(snapshot.actions);
407
+ errorSignal.set(snapshot.error);
408
+ isRunningSignal.set(snapshot.isRunning);
409
+ lastResultSignal.set(snapshot.lastResult);
410
+ runningActionIdSignal.set(snapshot.runningActionId);
411
+ };
412
+ const unsubscribe = store.subscribe(sync);
413
+ sync();
414
+ return {
415
+ actions: computed2(() => actionsSignal()),
416
+ close: () => {
417
+ unsubscribe();
418
+ store.close();
419
+ },
420
+ error: computed2(() => errorSignal()),
421
+ isRunning: computed2(() => isRunningSignal()),
422
+ lastResult: computed2(() => lastResultSignal()),
423
+ run: store.run,
424
+ runningActionId: computed2(() => runningActionIdSignal()),
425
+ setActions: store.setActions
426
+ };
427
+ }
428
+ }
429
+ VoiceOpsActionCenterService = __decorateElement(_init, 0, "VoiceOpsActionCenterService", _dec, VoiceOpsActionCenterService);
430
+ __runInitializers(_init, 1, VoiceOpsActionCenterService);
431
+ __decoratorMetadata(_init, VoiceOpsActionCenterService);
432
+ let _VoiceOpsActionCenterService = VoiceOpsActionCenterService;
433
+ // src/angular/voice-delivery-runtime.service.ts
434
+ import { computed as computed3, Injectable as Injectable3, signal as signal3 } from "@angular/core";
435
+
199
436
  // src/client/deliveryRuntime.ts
200
437
  var getDefaultActionPath = (path, action, options) => {
201
438
  if (action === "tick") {
@@ -335,19 +572,19 @@ var createVoiceDeliveryRuntimeStore = (path = "/api/voice-delivery-runtime", opt
335
572
 
336
573
  // src/angular/voice-delivery-runtime.service.ts
337
574
  var _dec = [
338
- Injectable2({ providedIn: "root" })
575
+ Injectable3({ providedIn: "root" })
339
576
  ];
340
577
  var _init = __decoratorStart(undefined);
341
578
 
342
579
  class VoiceDeliveryRuntimeService {
343
580
  connect(path = "/api/voice-delivery-runtime", options = {}) {
344
581
  const store = createVoiceDeliveryRuntimeStore(path, options);
345
- const actionErrorSignal = signal2(null);
346
- const actionStatusSignal = signal2("idle");
347
- const errorSignal = signal2(null);
348
- const isLoadingSignal = signal2(false);
349
- const reportSignal = signal2(undefined);
350
- const updatedAtSignal = signal2(undefined);
582
+ const actionErrorSignal = signal3(null);
583
+ const actionStatusSignal = signal3("idle");
584
+ const errorSignal = signal3(null);
585
+ const isLoadingSignal = signal3(false);
586
+ const reportSignal = signal3(undefined);
587
+ const updatedAtSignal = signal3(undefined);
351
588
  const sync = () => {
352
589
  const snapshot = store.getSnapshot();
353
590
  actionErrorSignal.set(snapshot.actionError);
@@ -367,15 +604,15 @@ class VoiceDeliveryRuntimeService {
367
604
  unsubscribe();
368
605
  store.close();
369
606
  },
370
- error: computed2(() => errorSignal()),
371
- actionError: computed2(() => actionErrorSignal()),
372
- actionStatus: computed2(() => actionStatusSignal()),
373
- isLoading: computed2(() => isLoadingSignal()),
607
+ error: computed3(() => errorSignal()),
608
+ actionError: computed3(() => actionErrorSignal()),
609
+ actionStatus: computed3(() => actionStatusSignal()),
610
+ isLoading: computed3(() => isLoadingSignal()),
374
611
  requeueDeadLetters: store.requeueDeadLetters,
375
612
  refresh: store.refresh,
376
- report: computed2(() => reportSignal()),
613
+ report: computed3(() => reportSignal()),
377
614
  tick: store.tick,
378
- updatedAt: computed2(() => updatedAtSignal())
615
+ updatedAt: computed3(() => updatedAtSignal())
379
616
  };
380
617
  }
381
618
  }
@@ -384,7 +621,7 @@ __runInitializers(_init, 1, VoiceDeliveryRuntimeService);
384
621
  __decoratorMetadata(_init, VoiceDeliveryRuntimeService);
385
622
  let _VoiceDeliveryRuntimeService = VoiceDeliveryRuntimeService;
386
623
  // src/angular/voice-campaign-dialer-proof.service.ts
387
- import { computed as computed3, Injectable as Injectable3, signal as signal3 } from "@angular/core";
624
+ import { computed as computed4, Injectable as Injectable4, signal as signal4 } from "@angular/core";
388
625
 
389
626
  // src/client/campaignDialerProof.ts
390
627
  var fetchVoiceCampaignDialerProofStatus = async (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
@@ -506,18 +743,18 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
506
743
 
507
744
  // src/angular/voice-campaign-dialer-proof.service.ts
508
745
  var _dec = [
509
- Injectable3({ providedIn: "root" })
746
+ Injectable4({ providedIn: "root" })
510
747
  ];
511
748
  var _init = __decoratorStart(undefined);
512
749
 
513
750
  class VoiceCampaignDialerProofService {
514
751
  connect(path = "/api/voice/campaigns/dialer-proof", options = {}) {
515
752
  const store = createVoiceCampaignDialerProofStore(path, options);
516
- const errorSignal = signal3(null);
517
- const isLoadingSignal = signal3(false);
518
- const reportSignal = signal3(undefined);
519
- const statusSignal = signal3(undefined);
520
- const updatedAtSignal = signal3(undefined);
753
+ const errorSignal = signal4(null);
754
+ const isLoadingSignal = signal4(false);
755
+ const reportSignal = signal4(undefined);
756
+ const statusSignal = signal4(undefined);
757
+ const updatedAtSignal = signal4(undefined);
521
758
  const sync = () => {
522
759
  const snapshot = store.getSnapshot();
523
760
  errorSignal.set(snapshot.error);
@@ -534,13 +771,13 @@ class VoiceCampaignDialerProofService {
534
771
  unsubscribe();
535
772
  store.close();
536
773
  },
537
- error: computed3(() => errorSignal()),
538
- isLoading: computed3(() => isLoadingSignal()),
774
+ error: computed4(() => errorSignal()),
775
+ isLoading: computed4(() => isLoadingSignal()),
539
776
  refresh: store.refresh,
540
- report: computed3(() => reportSignal()),
777
+ report: computed4(() => reportSignal()),
541
778
  runProof: store.runProof,
542
- status: computed3(() => statusSignal()),
543
- updatedAt: computed3(() => updatedAtSignal())
779
+ status: computed4(() => statusSignal()),
780
+ updatedAt: computed4(() => updatedAtSignal())
544
781
  };
545
782
  }
546
783
  }
@@ -549,7 +786,7 @@ __runInitializers(_init, 1, VoiceCampaignDialerProofService);
549
786
  __decoratorMetadata(_init, VoiceCampaignDialerProofService);
550
787
  let _VoiceCampaignDialerProofService = VoiceCampaignDialerProofService;
551
788
  // src/angular/voice-stream.service.ts
552
- import { computed as computed4, Injectable as Injectable4, signal as signal4 } from "@angular/core";
789
+ import { computed as computed5, Injectable as Injectable5, signal as signal5 } from "@angular/core";
553
790
 
554
791
  // src/client/actions.ts
555
792
  var normalizeErrorMessage = (value) => {
@@ -1193,23 +1430,23 @@ var createVoiceStream = (path, options = {}) => {
1193
1430
 
1194
1431
  // src/angular/voice-stream.service.ts
1195
1432
  var _dec = [
1196
- Injectable4({ providedIn: "root" })
1433
+ Injectable5({ providedIn: "root" })
1197
1434
  ];
1198
1435
  var _init = __decoratorStart(undefined);
1199
1436
 
1200
1437
  class VoiceStreamService {
1201
1438
  connect(path, options = {}) {
1202
1439
  const stream = createVoiceStream(path, options);
1203
- const assistantAudioSignal = signal4([]);
1204
- const assistantTextsSignal = signal4([]);
1205
- const callSignal = signal4(null);
1206
- const errorSignal = signal4(null);
1207
- const isConnectedSignal = signal4(false);
1208
- const partialSignal = signal4("");
1209
- const reconnectSignal = signal4(stream.reconnect);
1210
- const sessionIdSignal = signal4(stream.sessionId);
1211
- const statusSignal = signal4(stream.status);
1212
- const turnsSignal = signal4([]);
1440
+ const assistantAudioSignal = signal5([]);
1441
+ const assistantTextsSignal = signal5([]);
1442
+ const callSignal = signal5(null);
1443
+ const errorSignal = signal5(null);
1444
+ const isConnectedSignal = signal5(false);
1445
+ const partialSignal = signal5("");
1446
+ const reconnectSignal = signal5(stream.reconnect);
1447
+ const sessionIdSignal = signal5(stream.sessionId);
1448
+ const statusSignal = signal5(stream.status);
1449
+ const turnsSignal = signal5([]);
1213
1450
  const sync = () => {
1214
1451
  assistantAudioSignal.set([...stream.assistantAudio]);
1215
1452
  assistantTextsSignal.set([...stream.assistantTexts]);
@@ -1225,23 +1462,23 @@ class VoiceStreamService {
1225
1462
  const unsubscribe = stream.subscribe(sync);
1226
1463
  sync();
1227
1464
  return {
1228
- assistantAudio: computed4(() => assistantAudioSignal()),
1229
- assistantTexts: computed4(() => assistantTextsSignal()),
1230
- call: computed4(() => callSignal()),
1465
+ assistantAudio: computed5(() => assistantAudioSignal()),
1466
+ assistantTexts: computed5(() => assistantTextsSignal()),
1467
+ call: computed5(() => callSignal()),
1231
1468
  callControl: (message) => stream.callControl(message),
1232
1469
  close: () => {
1233
1470
  unsubscribe();
1234
1471
  stream.close();
1235
1472
  },
1236
1473
  endTurn: () => stream.endTurn(),
1237
- error: computed4(() => errorSignal()),
1238
- isConnected: computed4(() => isConnectedSignal()),
1239
- partial: computed4(() => partialSignal()),
1240
- reconnect: computed4(() => reconnectSignal()),
1474
+ error: computed5(() => errorSignal()),
1475
+ isConnected: computed5(() => isConnectedSignal()),
1476
+ partial: computed5(() => partialSignal()),
1477
+ reconnect: computed5(() => reconnectSignal()),
1241
1478
  sendAudio: (audio) => stream.sendAudio(audio),
1242
- sessionId: computed4(() => sessionIdSignal()),
1243
- status: computed4(() => statusSignal()),
1244
- turns: computed4(() => turnsSignal())
1479
+ sessionId: computed5(() => sessionIdSignal()),
1480
+ status: computed5(() => statusSignal()),
1481
+ turns: computed5(() => turnsSignal())
1245
1482
  };
1246
1483
  }
1247
1484
  }
@@ -1250,7 +1487,7 @@ __runInitializers(_init, 1, VoiceStreamService);
1250
1487
  __decoratorMetadata(_init, VoiceStreamService);
1251
1488
  let _VoiceStreamService = VoiceStreamService;
1252
1489
  // src/angular/voice-controller.service.ts
1253
- import { computed as computed5, Injectable as Injectable5, signal as signal5 } from "@angular/core";
1490
+ import { computed as computed6, Injectable as Injectable6, signal as signal6 } from "@angular/core";
1254
1491
 
1255
1492
  // src/client/htmx.ts
1256
1493
  var DEFAULT_EVENT_NAME = "voice-refresh";
@@ -1895,24 +2132,24 @@ var createVoiceController = (path, options = {}) => {
1895
2132
 
1896
2133
  // src/angular/voice-controller.service.ts
1897
2134
  var _dec = [
1898
- Injectable5({ providedIn: "root" })
2135
+ Injectable6({ providedIn: "root" })
1899
2136
  ];
1900
2137
  var _init = __decoratorStart(undefined);
1901
2138
 
1902
2139
  class VoiceControllerService {
1903
2140
  connect(path, options = {}) {
1904
2141
  const controller = createVoiceController(path, options);
1905
- const assistantAudioSignal = signal5([]);
1906
- const assistantTextsSignal = signal5([]);
1907
- const errorSignal = signal5(null);
1908
- const isConnectedSignal = signal5(false);
1909
- const isRecordingSignal = signal5(false);
1910
- const partialSignal = signal5("");
1911
- const reconnectSignal = signal5(controller.reconnect);
1912
- const recordingErrorSignal = signal5(null);
1913
- const sessionIdSignal = signal5(controller.sessionId);
1914
- const statusSignal = signal5(controller.status);
1915
- const turnsSignal = signal5([]);
2142
+ const assistantAudioSignal = signal6([]);
2143
+ const assistantTextsSignal = signal6([]);
2144
+ const errorSignal = signal6(null);
2145
+ const isConnectedSignal = signal6(false);
2146
+ const isRecordingSignal = signal6(false);
2147
+ const partialSignal = signal6("");
2148
+ const reconnectSignal = signal6(controller.reconnect);
2149
+ const recordingErrorSignal = signal6(null);
2150
+ const sessionIdSignal = signal6(controller.sessionId);
2151
+ const statusSignal = signal6(controller.status);
2152
+ const turnsSignal = signal6([]);
1916
2153
  const sync = () => {
1917
2154
  assistantAudioSignal.set([...controller.assistantAudio]);
1918
2155
  assistantTextsSignal.set([...controller.assistantTexts]);
@@ -1929,27 +2166,27 @@ class VoiceControllerService {
1929
2166
  const unsubscribe = controller.subscribe(sync);
1930
2167
  sync();
1931
2168
  return {
1932
- assistantAudio: computed5(() => assistantAudioSignal()),
1933
- assistantTexts: computed5(() => assistantTextsSignal()),
2169
+ assistantAudio: computed6(() => assistantAudioSignal()),
2170
+ assistantTexts: computed6(() => assistantTextsSignal()),
1934
2171
  bindHTMX: controller.bindHTMX,
1935
2172
  close: () => {
1936
2173
  unsubscribe();
1937
2174
  controller.close();
1938
2175
  },
1939
2176
  endTurn: () => controller.endTurn(),
1940
- error: computed5(() => errorSignal()),
1941
- isConnected: computed5(() => isConnectedSignal()),
1942
- isRecording: computed5(() => isRecordingSignal()),
1943
- partial: computed5(() => partialSignal()),
1944
- reconnect: computed5(() => reconnectSignal()),
1945
- recordingError: computed5(() => recordingErrorSignal()),
2177
+ error: computed6(() => errorSignal()),
2178
+ isConnected: computed6(() => isConnectedSignal()),
2179
+ isRecording: computed6(() => isRecordingSignal()),
2180
+ partial: computed6(() => partialSignal()),
2181
+ reconnect: computed6(() => reconnectSignal()),
2182
+ recordingError: computed6(() => recordingErrorSignal()),
1946
2183
  sendAudio: (audio) => controller.sendAudio(audio),
1947
- sessionId: computed5(() => sessionIdSignal()),
2184
+ sessionId: computed6(() => sessionIdSignal()),
1948
2185
  startRecording: () => controller.startRecording(),
1949
- status: computed5(() => statusSignal()),
2186
+ status: computed6(() => statusSignal()),
1950
2187
  stopRecording: () => controller.stopRecording(),
1951
2188
  toggleRecording: () => controller.toggleRecording(),
1952
- turns: computed5(() => turnsSignal())
2189
+ turns: computed6(() => turnsSignal())
1953
2190
  };
1954
2191
  }
1955
2192
  }
@@ -1958,7 +2195,7 @@ __runInitializers(_init, 1, VoiceControllerService);
1958
2195
  __decoratorMetadata(_init, VoiceControllerService);
1959
2196
  let _VoiceControllerService = VoiceControllerService;
1960
2197
  // src/angular/voice-provider-capabilities.service.ts
1961
- import { computed as computed6, Injectable as Injectable6, signal as signal6 } from "@angular/core";
2198
+ import { computed as computed7, Injectable as Injectable7, signal as signal7 } from "@angular/core";
1962
2199
 
1963
2200
  // src/client/providerCapabilities.ts
1964
2201
  var fetchVoiceProviderCapabilities = async (path = "/api/provider-capabilities", options = {}) => {
@@ -2041,17 +2278,17 @@ var createVoiceProviderCapabilitiesStore = (path = "/api/provider-capabilities",
2041
2278
 
2042
2279
  // src/angular/voice-provider-capabilities.service.ts
2043
2280
  var _dec = [
2044
- Injectable6({ providedIn: "root" })
2281
+ Injectable7({ providedIn: "root" })
2045
2282
  ];
2046
2283
  var _init = __decoratorStart(undefined);
2047
2284
 
2048
2285
  class VoiceProviderCapabilitiesService {
2049
2286
  connect(path = "/api/provider-capabilities", options = {}) {
2050
2287
  const store = createVoiceProviderCapabilitiesStore(path, options);
2051
- const errorSignal = signal6(null);
2052
- const isLoadingSignal = signal6(false);
2053
- const reportSignal = signal6(undefined);
2054
- const updatedAtSignal = signal6(undefined);
2288
+ const errorSignal = signal7(null);
2289
+ const isLoadingSignal = signal7(false);
2290
+ const reportSignal = signal7(undefined);
2291
+ const updatedAtSignal = signal7(undefined);
2055
2292
  const sync = () => {
2056
2293
  const snapshot = store.getSnapshot();
2057
2294
  errorSignal.set(snapshot.error);
@@ -2067,11 +2304,11 @@ class VoiceProviderCapabilitiesService {
2067
2304
  unsubscribe();
2068
2305
  store.close();
2069
2306
  },
2070
- error: computed6(() => errorSignal()),
2071
- isLoading: computed6(() => isLoadingSignal()),
2307
+ error: computed7(() => errorSignal()),
2308
+ isLoading: computed7(() => isLoadingSignal()),
2072
2309
  refresh: store.refresh,
2073
- report: computed6(() => reportSignal()),
2074
- updatedAt: computed6(() => updatedAtSignal())
2310
+ report: computed7(() => reportSignal()),
2311
+ updatedAt: computed7(() => updatedAtSignal())
2075
2312
  };
2076
2313
  }
2077
2314
  }
@@ -2080,7 +2317,7 @@ __runInitializers(_init, 1, VoiceProviderCapabilitiesService);
2080
2317
  __decoratorMetadata(_init, VoiceProviderCapabilitiesService);
2081
2318
  let _VoiceProviderCapabilitiesService = VoiceProviderCapabilitiesService;
2082
2319
  // src/angular/voice-provider-status.service.ts
2083
- import { computed as computed7, Injectable as Injectable7, signal as signal7 } from "@angular/core";
2320
+ import { computed as computed8, Injectable as Injectable8, signal as signal8 } from "@angular/core";
2084
2321
 
2085
2322
  // src/client/providerStatus.ts
2086
2323
  var fetchVoiceProviderStatus = async (path = "/api/provider-status", options = {}) => {
@@ -2164,17 +2401,17 @@ var createVoiceProviderStatusStore = (path = "/api/provider-status", options = {
2164
2401
 
2165
2402
  // src/angular/voice-provider-status.service.ts
2166
2403
  var _dec = [
2167
- Injectable7({ providedIn: "root" })
2404
+ Injectable8({ providedIn: "root" })
2168
2405
  ];
2169
2406
  var _init = __decoratorStart(undefined);
2170
2407
 
2171
2408
  class VoiceProviderStatusService {
2172
2409
  connect(path = "/api/provider-status", options = {}) {
2173
2410
  const store = createVoiceProviderStatusStore(path, options);
2174
- const errorSignal = signal7(null);
2175
- const isLoadingSignal = signal7(false);
2176
- const providersSignal = signal7([]);
2177
- const updatedAtSignal = signal7(undefined);
2411
+ const errorSignal = signal8(null);
2412
+ const isLoadingSignal = signal8(false);
2413
+ const providersSignal = signal8([]);
2414
+ const updatedAtSignal = signal8(undefined);
2178
2415
  const sync = () => {
2179
2416
  const snapshot = store.getSnapshot();
2180
2417
  errorSignal.set(snapshot.error);
@@ -2190,11 +2427,11 @@ class VoiceProviderStatusService {
2190
2427
  unsubscribe();
2191
2428
  store.close();
2192
2429
  },
2193
- error: computed7(() => errorSignal()),
2194
- isLoading: computed7(() => isLoadingSignal()),
2195
- providers: computed7(() => providersSignal()),
2430
+ error: computed8(() => errorSignal()),
2431
+ isLoading: computed8(() => isLoadingSignal()),
2432
+ providers: computed8(() => providersSignal()),
2196
2433
  refresh: store.refresh,
2197
- updatedAt: computed7(() => updatedAtSignal())
2434
+ updatedAt: computed8(() => updatedAtSignal())
2198
2435
  };
2199
2436
  }
2200
2437
  }
@@ -2203,7 +2440,7 @@ __runInitializers(_init, 1, VoiceProviderStatusService);
2203
2440
  __decoratorMetadata(_init, VoiceProviderStatusService);
2204
2441
  let _VoiceProviderStatusService = VoiceProviderStatusService;
2205
2442
  // src/angular/voice-routing-status.service.ts
2206
- import { Injectable as Injectable8, signal as signal8 } from "@angular/core";
2443
+ import { Injectable as Injectable9, signal as signal9 } from "@angular/core";
2207
2444
 
2208
2445
  // src/client/routingStatus.ts
2209
2446
  var fetchVoiceRoutingStatus = async (path = "/api/routing/latest", options = {}) => {
@@ -2287,17 +2524,17 @@ var createVoiceRoutingStatusStore = (path = "/api/routing/latest", options = {})
2287
2524
 
2288
2525
  // src/angular/voice-routing-status.service.ts
2289
2526
  var _dec = [
2290
- Injectable8({ providedIn: "root" })
2527
+ Injectable9({ providedIn: "root" })
2291
2528
  ];
2292
2529
  var _init = __decoratorStart(undefined);
2293
2530
 
2294
2531
  class VoiceRoutingStatusService {
2295
2532
  connect(path = "/api/routing/latest", options = {}) {
2296
2533
  const store = createVoiceRoutingStatusStore(path, options);
2297
- const decisionSignal = signal8(null);
2298
- const errorSignal = signal8(null);
2299
- const isLoadingSignal = signal8(false);
2300
- const updatedAtSignal = signal8(undefined);
2534
+ const decisionSignal = signal9(null);
2535
+ const errorSignal = signal9(null);
2536
+ const isLoadingSignal = signal9(false);
2537
+ const updatedAtSignal = signal9(undefined);
2301
2538
  const sync = () => {
2302
2539
  const snapshot = store.getSnapshot();
2303
2540
  decisionSignal.set(snapshot.decision);
@@ -2326,7 +2563,7 @@ __runInitializers(_init, 1, VoiceRoutingStatusService);
2326
2563
  __decoratorMetadata(_init, VoiceRoutingStatusService);
2327
2564
  let _VoiceRoutingStatusService = VoiceRoutingStatusService;
2328
2565
  // src/angular/voice-trace-timeline.service.ts
2329
- import { computed as computed8, Injectable as Injectable9, signal as signal9 } from "@angular/core";
2566
+ import { computed as computed9, Injectable as Injectable10, signal as signal10 } from "@angular/core";
2330
2567
 
2331
2568
  // src/client/traceTimeline.ts
2332
2569
  var fetchVoiceTraceTimeline = async (path = "/api/voice-traces", options = {}) => {
@@ -2410,17 +2647,17 @@ var createVoiceTraceTimelineStore = (path = "/api/voice-traces", options = {}) =
2410
2647
 
2411
2648
  // src/angular/voice-trace-timeline.service.ts
2412
2649
  var _dec = [
2413
- Injectable9({ providedIn: "root" })
2650
+ Injectable10({ providedIn: "root" })
2414
2651
  ];
2415
2652
  var _init = __decoratorStart(undefined);
2416
2653
 
2417
2654
  class VoiceTraceTimelineService {
2418
2655
  connect(path = "/api/voice-traces", options = {}) {
2419
2656
  const store = createVoiceTraceTimelineStore(path, options);
2420
- const errorSignal = signal9(null);
2421
- const isLoadingSignal = signal9(false);
2422
- const reportSignal = signal9(null);
2423
- const updatedAtSignal = signal9(undefined);
2657
+ const errorSignal = signal10(null);
2658
+ const isLoadingSignal = signal10(false);
2659
+ const reportSignal = signal10(null);
2660
+ const updatedAtSignal = signal10(undefined);
2424
2661
  const sync = () => {
2425
2662
  const snapshot = store.getSnapshot();
2426
2663
  errorSignal.set(snapshot.error);
@@ -2436,11 +2673,11 @@ class VoiceTraceTimelineService {
2436
2673
  unsubscribe();
2437
2674
  store.close();
2438
2675
  },
2439
- error: computed8(() => errorSignal()),
2440
- isLoading: computed8(() => isLoadingSignal()),
2676
+ error: computed9(() => errorSignal()),
2677
+ isLoading: computed9(() => isLoadingSignal()),
2441
2678
  refresh: store.refresh,
2442
- report: computed8(() => reportSignal()),
2443
- updatedAt: computed8(() => updatedAtSignal())
2679
+ report: computed9(() => reportSignal()),
2680
+ updatedAt: computed9(() => updatedAtSignal())
2444
2681
  };
2445
2682
  }
2446
2683
  }
@@ -2449,7 +2686,7 @@ __runInitializers(_init, 1, VoiceTraceTimelineService);
2449
2686
  __decoratorMetadata(_init, VoiceTraceTimelineService);
2450
2687
  let _VoiceTraceTimelineService = VoiceTraceTimelineService;
2451
2688
  // src/angular/voice-turn-latency.service.ts
2452
- import { computed as computed9, Injectable as Injectable10, signal as signal10 } from "@angular/core";
2689
+ import { computed as computed10, Injectable as Injectable11, signal as signal11 } from "@angular/core";
2453
2690
 
2454
2691
  // src/client/turnLatency.ts
2455
2692
  var fetchVoiceTurnLatency = async (path = "/api/turn-latency", options = {}) => {
@@ -2556,17 +2793,17 @@ var createVoiceTurnLatencyStore = (path = "/api/turn-latency", options = {}) =>
2556
2793
 
2557
2794
  // src/angular/voice-turn-latency.service.ts
2558
2795
  var _dec = [
2559
- Injectable10({ providedIn: "root" })
2796
+ Injectable11({ providedIn: "root" })
2560
2797
  ];
2561
2798
  var _init = __decoratorStart(undefined);
2562
2799
 
2563
2800
  class VoiceTurnLatencyService {
2564
2801
  connect(path = "/api/turn-latency", options = {}) {
2565
2802
  const store = createVoiceTurnLatencyStore(path, options);
2566
- const errorSignal = signal10(null);
2567
- const isLoadingSignal = signal10(false);
2568
- const reportSignal = signal10(undefined);
2569
- const updatedAtSignal = signal10(undefined);
2803
+ const errorSignal = signal11(null);
2804
+ const isLoadingSignal = signal11(false);
2805
+ const reportSignal = signal11(undefined);
2806
+ const updatedAtSignal = signal11(undefined);
2570
2807
  const sync = () => {
2571
2808
  const snapshot = store.getSnapshot();
2572
2809
  errorSignal.set(snapshot.error);
@@ -2582,12 +2819,12 @@ class VoiceTurnLatencyService {
2582
2819
  unsubscribe();
2583
2820
  store.close();
2584
2821
  },
2585
- error: computed9(() => errorSignal()),
2586
- isLoading: computed9(() => isLoadingSignal()),
2822
+ error: computed10(() => errorSignal()),
2823
+ isLoading: computed10(() => isLoadingSignal()),
2587
2824
  refresh: store.refresh,
2588
- report: computed9(() => reportSignal()),
2825
+ report: computed10(() => reportSignal()),
2589
2826
  runProof: store.runProof,
2590
- updatedAt: computed9(() => updatedAtSignal())
2827
+ updatedAt: computed10(() => updatedAtSignal())
2591
2828
  };
2592
2829
  }
2593
2830
  }
@@ -2596,7 +2833,7 @@ __runInitializers(_init, 1, VoiceTurnLatencyService);
2596
2833
  __decoratorMetadata(_init, VoiceTurnLatencyService);
2597
2834
  let _VoiceTurnLatencyService = VoiceTurnLatencyService;
2598
2835
  // src/angular/voice-turn-quality.service.ts
2599
- import { computed as computed10, Injectable as Injectable11, signal as signal11 } from "@angular/core";
2836
+ import { computed as computed11, Injectable as Injectable12, signal as signal12 } from "@angular/core";
2600
2837
 
2601
2838
  // src/client/turnQuality.ts
2602
2839
  var fetchVoiceTurnQuality = async (path = "/api/turn-quality", options = {}) => {
@@ -2679,17 +2916,17 @@ var createVoiceTurnQualityStore = (path = "/api/turn-quality", options = {}) =>
2679
2916
 
2680
2917
  // src/angular/voice-turn-quality.service.ts
2681
2918
  var _dec = [
2682
- Injectable11({ providedIn: "root" })
2919
+ Injectable12({ providedIn: "root" })
2683
2920
  ];
2684
2921
  var _init = __decoratorStart(undefined);
2685
2922
 
2686
2923
  class VoiceTurnQualityService {
2687
2924
  connect(path = "/api/turn-quality", options = {}) {
2688
2925
  const store = createVoiceTurnQualityStore(path, options);
2689
- const errorSignal = signal11(null);
2690
- const isLoadingSignal = signal11(false);
2691
- const reportSignal = signal11(undefined);
2692
- const updatedAtSignal = signal11(undefined);
2926
+ const errorSignal = signal12(null);
2927
+ const isLoadingSignal = signal12(false);
2928
+ const reportSignal = signal12(undefined);
2929
+ const updatedAtSignal = signal12(undefined);
2693
2930
  const sync = () => {
2694
2931
  const snapshot = store.getSnapshot();
2695
2932
  errorSignal.set(snapshot.error);
@@ -2705,11 +2942,11 @@ class VoiceTurnQualityService {
2705
2942
  unsubscribe();
2706
2943
  store.close();
2707
2944
  },
2708
- error: computed10(() => errorSignal()),
2709
- isLoading: computed10(() => isLoadingSignal()),
2945
+ error: computed11(() => errorSignal()),
2946
+ isLoading: computed11(() => isLoadingSignal()),
2710
2947
  refresh: store.refresh,
2711
- report: computed10(() => reportSignal()),
2712
- updatedAt: computed10(() => updatedAtSignal())
2948
+ report: computed11(() => reportSignal()),
2949
+ updatedAt: computed11(() => updatedAtSignal())
2713
2950
  };
2714
2951
  }
2715
2952
  }
@@ -2718,7 +2955,7 @@ __runInitializers(_init, 1, VoiceTurnQualityService);
2718
2955
  __decoratorMetadata(_init, VoiceTurnQualityService);
2719
2956
  let _VoiceTurnQualityService = VoiceTurnQualityService;
2720
2957
  // src/angular/voice-workflow-status.service.ts
2721
- import { computed as computed11, Injectable as Injectable12, signal as signal12 } from "@angular/core";
2958
+ import { computed as computed12, Injectable as Injectable13, signal as signal13 } from "@angular/core";
2722
2959
 
2723
2960
  // src/client/workflowStatus.ts
2724
2961
  var fetchVoiceWorkflowStatus = async (path = "/evals/scenarios/json", options = {}) => {
@@ -2801,17 +3038,17 @@ var createVoiceWorkflowStatusStore = (path = "/evals/scenarios/json", options =
2801
3038
 
2802
3039
  // src/angular/voice-workflow-status.service.ts
2803
3040
  var _dec = [
2804
- Injectable12({ providedIn: "root" })
3041
+ Injectable13({ providedIn: "root" })
2805
3042
  ];
2806
3043
  var _init = __decoratorStart(undefined);
2807
3044
 
2808
3045
  class VoiceWorkflowStatusService {
2809
3046
  connect(path = "/evals/scenarios/json", options = {}) {
2810
3047
  const store = createVoiceWorkflowStatusStore(path, options);
2811
- const errorSignal = signal12(null);
2812
- const isLoadingSignal = signal12(false);
2813
- const reportSignal = signal12(undefined);
2814
- const updatedAtSignal = signal12(undefined);
3048
+ const errorSignal = signal13(null);
3049
+ const isLoadingSignal = signal13(false);
3050
+ const reportSignal = signal13(undefined);
3051
+ const updatedAtSignal = signal13(undefined);
2815
3052
  const sync = () => {
2816
3053
  const snapshot = store.getSnapshot();
2817
3054
  errorSignal.set(snapshot.error);
@@ -2829,11 +3066,11 @@ class VoiceWorkflowStatusService {
2829
3066
  unsubscribe();
2830
3067
  store.close();
2831
3068
  },
2832
- error: computed11(() => errorSignal()),
2833
- isLoading: computed11(() => isLoadingSignal()),
3069
+ error: computed12(() => errorSignal()),
3070
+ isLoading: computed12(() => isLoadingSignal()),
2834
3071
  refresh: store.refresh,
2835
- report: computed11(() => reportSignal()),
2836
- updatedAt: computed11(() => updatedAtSignal())
3072
+ report: computed12(() => reportSignal()),
3073
+ updatedAt: computed12(() => updatedAtSignal())
2837
3074
  };
2838
3075
  }
2839
3076
  }
@@ -2842,7 +3079,7 @@ __runInitializers(_init, 1, VoiceWorkflowStatusService);
2842
3079
  __decoratorMetadata(_init, VoiceWorkflowStatusService);
2843
3080
  let _VoiceWorkflowStatusService = VoiceWorkflowStatusService;
2844
3081
  // src/angular/voice-delivery-runtime.component.ts
2845
- import { Component, Input, signal as signal13 } from "@angular/core";
3082
+ import { Component, Input, signal as signal14 } from "@angular/core";
2846
3083
 
2847
3084
  // src/client/deliveryRuntimeWidget.ts
2848
3085
  var DEFAULT_TITLE = "Voice Delivery Runtime";
@@ -3082,7 +3319,7 @@ class VoiceDeliveryRuntimeComponent {
3082
3319
  }
3083
3320
  cleanup = () => {};
3084
3321
  store;
3085
- model = signal13(createVoiceDeliveryRuntimeViewModel({
3322
+ model = signal14(createVoiceDeliveryRuntimeViewModel({
3086
3323
  actionError: null,
3087
3324
  actionStatus: "idle",
3088
3325
  error: null,
@@ -3139,6 +3376,7 @@ export {
3139
3376
  VoiceProviderStatusService,
3140
3377
  VoiceProviderCapabilitiesService,
3141
3378
  VoiceOpsStatusService,
3379
+ VoiceOpsActionCenterService,
3142
3380
  VoiceDeliveryRuntimeService,
3143
3381
  VoiceDeliveryRuntimeComponent,
3144
3382
  VoiceControllerService,