@absolutejs/voice 0.0.22-beta.4 → 0.0.22-beta.41

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/dist/angular/index.d.ts +1 -0
  2. package/dist/angular/index.js +172 -2
  3. package/dist/angular/voice-provider-status.service.d.ts +12 -0
  4. package/dist/angular/voice-stream.service.d.ts +2 -0
  5. package/dist/assistantHealth.d.ts +81 -0
  6. package/dist/client/actions.d.ts +22 -0
  7. package/dist/client/connection.d.ts +3 -0
  8. package/dist/client/htmxBootstrap.js +44 -2
  9. package/dist/client/index.d.ts +2 -0
  10. package/dist/client/index.js +125 -2
  11. package/dist/client/providerStatus.d.ts +19 -0
  12. package/dist/diagnosticsRoutes.d.ts +44 -0
  13. package/dist/handoff.d.ts +54 -0
  14. package/dist/handoffHealth.d.ts +94 -0
  15. package/dist/index.d.ts +26 -2
  16. package/dist/index.js +3551 -128
  17. package/dist/modelAdapters.d.ts +99 -0
  18. package/dist/opsConsoleRoutes.d.ts +77 -0
  19. package/dist/opsWebhook.d.ts +126 -0
  20. package/dist/providerAdapters.d.ts +37 -0
  21. package/dist/providerHealth.d.ts +79 -0
  22. package/dist/qualityRoutes.d.ts +76 -0
  23. package/dist/queue.d.ts +52 -0
  24. package/dist/react/index.d.ts +1 -0
  25. package/dist/react/index.js +148 -2
  26. package/dist/react/useVoiceController.d.ts +2 -0
  27. package/dist/react/useVoiceProviderStatus.d.ts +8 -0
  28. package/dist/react/useVoiceStream.d.ts +2 -0
  29. package/dist/resilienceRoutes.d.ts +106 -0
  30. package/dist/sessionReplay.d.ts +175 -0
  31. package/dist/svelte/createVoiceProviderStatus.d.ts +8 -0
  32. package/dist/svelte/index.d.ts +1 -0
  33. package/dist/svelte/index.js +127 -2
  34. package/dist/testing/index.d.ts +2 -0
  35. package/dist/testing/index.js +1468 -7
  36. package/dist/testing/ioProviderSimulator.d.ts +41 -0
  37. package/dist/testing/providerSimulator.d.ts +44 -0
  38. package/dist/trace.d.ts +1 -1
  39. package/dist/types.d.ts +84 -2
  40. package/dist/vue/index.d.ts +1 -0
  41. package/dist/vue/index.js +161 -2
  42. package/dist/vue/useVoiceProviderStatus.d.ts +9 -0
  43. package/dist/vue/useVoiceStream.d.ts +2 -0
  44. package/package.json +1 -1
@@ -117,6 +117,12 @@ var serverMessageToAction = (message) => {
117
117
  sessionId: message.sessionId,
118
118
  type: "complete"
119
119
  };
120
+ case "call_lifecycle":
121
+ return {
122
+ event: message.event,
123
+ sessionId: message.sessionId,
124
+ type: "call_lifecycle"
125
+ };
120
126
  case "error":
121
127
  return {
122
128
  message: normalizeErrorMessage(message.message),
@@ -160,7 +166,7 @@ var DEFAULT_SCENARIO_QUERY_PARAM = "scenarioId";
160
166
  var noop = () => {};
161
167
  var noopUnsubscribe = () => noop;
162
168
  var NOOP_CONNECTION = {
163
- start: () => {},
169
+ callControl: noop,
164
170
  close: noop,
165
171
  endTurn: noop,
166
172
  getReadyState: () => WS_CLOSED,
@@ -168,6 +174,7 @@ var NOOP_CONNECTION = {
168
174
  getSessionId: () => "",
169
175
  send: noop,
170
176
  sendAudio: noop,
177
+ start: () => {},
171
178
  subscribe: noopUnsubscribe
172
179
  };
173
180
  var createSessionId = () => crypto.randomUUID();
@@ -189,6 +196,7 @@ var isVoiceServerMessage = (value) => {
189
196
  switch (value.type) {
190
197
  case "audio":
191
198
  case "assistant":
199
+ case "call_lifecycle":
192
200
  case "complete":
193
201
  case "error":
194
202
  case "final":
@@ -329,6 +337,12 @@ var createVoiceConnection = (path, options = {}) => {
329
337
  const endTurn = () => {
330
338
  send({ type: "end_turn" });
331
339
  };
340
+ const callControl = (message) => {
341
+ send({
342
+ ...message,
343
+ type: "call_control"
344
+ });
345
+ };
332
346
  const close = () => {
333
347
  clearTimers();
334
348
  if (state.ws) {
@@ -346,7 +360,7 @@ var createVoiceConnection = (path, options = {}) => {
346
360
  };
347
361
  connect();
348
362
  return {
349
- start,
363
+ callControl,
350
364
  close,
351
365
  endTurn,
352
366
  getReadyState: () => state.ws?.readyState ?? WS_CLOSED,
@@ -354,6 +368,7 @@ var createVoiceConnection = (path, options = {}) => {
354
368
  getSessionId: () => state.sessionId,
355
369
  send,
356
370
  sendAudio,
371
+ start,
357
372
  subscribe
358
373
  };
359
374
  };
@@ -362,6 +377,7 @@ var createVoiceConnection = (path, options = {}) => {
362
377
  var createInitialState = () => ({
363
378
  assistantAudio: [],
364
379
  assistantTexts: [],
380
+ call: null,
365
381
  error: null,
366
382
  isConnected: false,
367
383
  scenarioId: null,
@@ -405,6 +421,20 @@ var createVoiceStreamStore = () => {
405
421
  status: "completed"
406
422
  };
407
423
  break;
424
+ case "call_lifecycle":
425
+ state = {
426
+ ...state,
427
+ call: {
428
+ ...state.call,
429
+ disposition: action.event.type === "end" ? action.event.disposition : state.call?.disposition,
430
+ endedAt: action.event.type === "end" ? action.event.at : state.call?.endedAt,
431
+ events: [...state.call?.events ?? [], action.event],
432
+ lastEventAt: action.event.at,
433
+ startedAt: state.call?.startedAt ?? action.event.at
434
+ },
435
+ sessionId: action.sessionId
436
+ };
437
+ break;
408
438
  case "connected":
409
439
  state = {
410
440
  ...state,
@@ -491,6 +521,9 @@ var createVoiceStream = (path, options = {}) => {
491
521
  }
492
522
  });
493
523
  return {
524
+ callControl(message) {
525
+ connection.callControl(message);
526
+ },
494
527
  close() {
495
528
  unsubscribeConnection();
496
529
  connection.close();
@@ -534,6 +567,9 @@ var createVoiceStream = (path, options = {}) => {
534
567
  get assistantAudio() {
535
568
  return store.getSnapshot().assistantAudio;
536
569
  },
570
+ get call() {
571
+ return store.getSnapshot().call;
572
+ },
537
573
  sendAudio(audio) {
538
574
  connection.sendAudio(audio);
539
575
  },
@@ -548,6 +584,88 @@ var createVoiceStream = (path, options = {}) => {
548
584
 
549
585
  // src/svelte/createVoiceStream.ts
550
586
  var createVoiceStream2 = (path, options = {}) => createVoiceStream(path, options);
587
+ // src/client/providerStatus.ts
588
+ var fetchVoiceProviderStatus = async (path = "/api/provider-status", options = {}) => {
589
+ const fetchImpl = options.fetch ?? globalThis.fetch;
590
+ const response = await fetchImpl(path);
591
+ if (!response.ok) {
592
+ throw new Error(`Voice provider status failed: HTTP ${response.status}`);
593
+ }
594
+ return await response.json();
595
+ };
596
+ var createVoiceProviderStatusStore = (path = "/api/provider-status", options = {}) => {
597
+ const listeners = new Set;
598
+ let closed = false;
599
+ let timer;
600
+ let snapshot = {
601
+ error: null,
602
+ isLoading: false,
603
+ providers: []
604
+ };
605
+ const emit = () => {
606
+ for (const listener of listeners) {
607
+ listener();
608
+ }
609
+ };
610
+ const refresh = async () => {
611
+ if (closed) {
612
+ return snapshot.providers;
613
+ }
614
+ snapshot = {
615
+ ...snapshot,
616
+ error: null,
617
+ isLoading: true
618
+ };
619
+ emit();
620
+ try {
621
+ const providers = await fetchVoiceProviderStatus(path, options);
622
+ snapshot = {
623
+ error: null,
624
+ isLoading: false,
625
+ providers,
626
+ updatedAt: Date.now()
627
+ };
628
+ emit();
629
+ return providers;
630
+ } catch (error) {
631
+ snapshot = {
632
+ ...snapshot,
633
+ error: error instanceof Error ? error.message : String(error),
634
+ isLoading: false
635
+ };
636
+ emit();
637
+ throw error;
638
+ }
639
+ };
640
+ const close = () => {
641
+ closed = true;
642
+ if (timer) {
643
+ clearInterval(timer);
644
+ timer = undefined;
645
+ }
646
+ listeners.clear();
647
+ };
648
+ if (options.intervalMs && options.intervalMs > 0) {
649
+ timer = setInterval(() => {
650
+ refresh().catch(() => {});
651
+ }, options.intervalMs);
652
+ }
653
+ return {
654
+ close,
655
+ getServerSnapshot: () => snapshot,
656
+ getSnapshot: () => snapshot,
657
+ refresh,
658
+ subscribe: (listener) => {
659
+ listeners.add(listener);
660
+ return () => {
661
+ listeners.delete(listener);
662
+ };
663
+ }
664
+ };
665
+ };
666
+
667
+ // src/svelte/createVoiceProviderStatus.ts
668
+ var createVoiceProviderStatus = (path = "/api/provider-status", options = {}) => createVoiceProviderStatusStore(path, options);
551
669
  // src/client/htmx.ts
552
670
  var DEFAULT_EVENT_NAME = "voice-refresh";
553
671
  var DEFAULT_QUERY_PARAM = "sessionId";
@@ -1010,6 +1128,7 @@ var resolveVoiceRuntimePreset = (name = "default") => {
1010
1128
  var createInitialState2 = (stream) => ({
1011
1129
  assistantAudio: [...stream.assistantAudio],
1012
1130
  assistantTexts: [...stream.assistantTexts],
1131
+ call: stream.call,
1013
1132
  error: stream.error,
1014
1133
  isConnected: stream.isConnected,
1015
1134
  isRecording: false,
@@ -1039,6 +1158,7 @@ var createVoiceController = (path, options = {}) => {
1039
1158
  ...state,
1040
1159
  assistantAudio: [...stream.assistantAudio],
1041
1160
  assistantTexts: [...stream.assistantTexts],
1161
+ call: stream.call,
1042
1162
  error: stream.error,
1043
1163
  isConnected: stream.isConnected,
1044
1164
  partial: stream.partial,
@@ -1116,6 +1236,7 @@ var createVoiceController = (path, options = {}) => {
1116
1236
  bindHTMX(bindingOptions) {
1117
1237
  return bindVoiceHTMX(stream, bindingOptions);
1118
1238
  },
1239
+ callControl: (message) => stream.callControl(message),
1119
1240
  close,
1120
1241
  endTurn: () => stream.endTurn(),
1121
1242
  get error() {
@@ -1168,10 +1289,14 @@ var createVoiceController = (path, options = {}) => {
1168
1289
  },
1169
1290
  get assistantAudio() {
1170
1291
  return state.assistantAudio;
1292
+ },
1293
+ get call() {
1294
+ return state.call;
1171
1295
  }
1172
1296
  };
1173
1297
  };
1174
1298
  export {
1175
1299
  createVoiceStream2 as createVoiceStream,
1300
+ createVoiceProviderStatus,
1176
1301
  createVoiceController
1177
1302
  };
@@ -3,6 +3,8 @@ export * from './benchmark';
3
3
  export * from './corrected';
4
4
  export * from './duplex';
5
5
  export * from './fixtures';
6
+ export * from './ioProviderSimulator';
7
+ export * from './providerSimulator';
6
8
  export * from './resilience';
7
9
  export * from './review';
8
10
  export * from './sessionBenchmark';