@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.
- package/dist/angular/index.d.ts +1 -0
- package/dist/angular/index.js +172 -2
- package/dist/angular/voice-provider-status.service.d.ts +12 -0
- package/dist/angular/voice-stream.service.d.ts +2 -0
- package/dist/assistantHealth.d.ts +81 -0
- package/dist/client/actions.d.ts +22 -0
- package/dist/client/connection.d.ts +3 -0
- package/dist/client/htmxBootstrap.js +44 -2
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +125 -2
- package/dist/client/providerStatus.d.ts +19 -0
- package/dist/diagnosticsRoutes.d.ts +44 -0
- package/dist/handoff.d.ts +54 -0
- package/dist/handoffHealth.d.ts +94 -0
- package/dist/index.d.ts +26 -2
- package/dist/index.js +3551 -128
- package/dist/modelAdapters.d.ts +99 -0
- package/dist/opsConsoleRoutes.d.ts +77 -0
- package/dist/opsWebhook.d.ts +126 -0
- package/dist/providerAdapters.d.ts +37 -0
- package/dist/providerHealth.d.ts +79 -0
- package/dist/qualityRoutes.d.ts +76 -0
- package/dist/queue.d.ts +52 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +148 -2
- package/dist/react/useVoiceController.d.ts +2 -0
- package/dist/react/useVoiceProviderStatus.d.ts +8 -0
- package/dist/react/useVoiceStream.d.ts +2 -0
- package/dist/resilienceRoutes.d.ts +106 -0
- package/dist/sessionReplay.d.ts +175 -0
- package/dist/svelte/createVoiceProviderStatus.d.ts +8 -0
- package/dist/svelte/index.d.ts +1 -0
- package/dist/svelte/index.js +127 -2
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.js +1468 -7
- package/dist/testing/ioProviderSimulator.d.ts +41 -0
- package/dist/testing/providerSimulator.d.ts +44 -0
- package/dist/trace.d.ts +1 -1
- package/dist/types.d.ts +84 -2
- package/dist/vue/index.d.ts +1 -0
- package/dist/vue/index.js +161 -2
- package/dist/vue/useVoiceProviderStatus.d.ts +9 -0
- package/dist/vue/useVoiceStream.d.ts +2 -0
- package/package.json +1 -1
package/dist/svelte/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
};
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -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';
|