@absolutejs/voice 0.0.22-beta.357 → 0.0.22-beta.359
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.js +16 -0
- package/dist/angular/voice-stream.service.d.ts +1 -0
- package/dist/client/actions.d.ts +11 -0
- package/dist/client/htmxBootstrap.js +13 -0
- package/dist/client/index.js +13 -0
- package/dist/index.js +31 -4
- package/dist/profileSwitchRecommendation.d.ts +9 -2
- package/dist/react/index.js +14 -0
- package/dist/react/useVoiceController.d.ts +1 -0
- package/dist/react/useVoiceStream.d.ts +1 -0
- package/dist/svelte/index.js +13 -0
- package/dist/testing/index.js +15 -0
- package/dist/types.d.ts +10 -0
- package/dist/vue/index.js +16 -0
- package/dist/vue/useVoiceStream.d.ts +1 -0
- package/package.json +1 -1
package/dist/angular/index.js
CHANGED
|
@@ -1486,6 +1486,7 @@ var serverMessageToAction = (message) => {
|
|
|
1486
1486
|
partial: message.partial,
|
|
1487
1487
|
scenarioId: message.scenarioId,
|
|
1488
1488
|
sessionId: message.sessionId,
|
|
1489
|
+
sessionMetadata: message.sessionMetadata,
|
|
1489
1490
|
status: message.status,
|
|
1490
1491
|
turns: message.turns,
|
|
1491
1492
|
type: "replay"
|
|
@@ -1493,6 +1494,7 @@ var serverMessageToAction = (message) => {
|
|
|
1493
1494
|
case "session":
|
|
1494
1495
|
return {
|
|
1495
1496
|
sessionId: message.sessionId,
|
|
1497
|
+
sessionMetadata: message.sessionMetadata,
|
|
1496
1498
|
scenarioId: message.scenarioId,
|
|
1497
1499
|
status: message.status,
|
|
1498
1500
|
type: "session"
|
|
@@ -2518,6 +2520,7 @@ var createInitialState = () => ({
|
|
|
2518
2520
|
call: null,
|
|
2519
2521
|
error: null,
|
|
2520
2522
|
isConnected: false,
|
|
2523
|
+
sessionMetadata: null,
|
|
2521
2524
|
scenarioId: null,
|
|
2522
2525
|
partial: "",
|
|
2523
2526
|
reconnect: createInitialReconnectState(),
|
|
@@ -2633,6 +2636,7 @@ var createVoiceStreamStore = () => {
|
|
|
2633
2636
|
} : state.reconnect,
|
|
2634
2637
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
2635
2638
|
sessionId: action.sessionId,
|
|
2639
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
2636
2640
|
status: action.status,
|
|
2637
2641
|
turns: [...action.turns]
|
|
2638
2642
|
};
|
|
@@ -2644,6 +2648,7 @@ var createVoiceStreamStore = () => {
|
|
|
2644
2648
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
2645
2649
|
isConnected: action.status === "active",
|
|
2646
2650
|
sessionId: action.sessionId,
|
|
2651
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
2647
2652
|
status: action.status
|
|
2648
2653
|
};
|
|
2649
2654
|
break;
|
|
@@ -2750,6 +2755,9 @@ var createVoiceStream = (path, options = {}) => {
|
|
|
2750
2755
|
get scenarioId() {
|
|
2751
2756
|
return store.getSnapshot().scenarioId;
|
|
2752
2757
|
},
|
|
2758
|
+
get sessionMetadata() {
|
|
2759
|
+
return store.getSnapshot().sessionMetadata;
|
|
2760
|
+
},
|
|
2753
2761
|
start,
|
|
2754
2762
|
get partial() {
|
|
2755
2763
|
return store.getSnapshot().partial;
|
|
@@ -2804,6 +2812,7 @@ class VoiceStreamService {
|
|
|
2804
2812
|
const partialSignal = signal10("");
|
|
2805
2813
|
const reconnectSignal = signal10(stream.reconnect);
|
|
2806
2814
|
const sessionIdSignal = signal10(stream.sessionId);
|
|
2815
|
+
const sessionMetadataSignal = signal10(stream.sessionMetadata);
|
|
2807
2816
|
const statusSignal = signal10(stream.status);
|
|
2808
2817
|
const turnsSignal = signal10([]);
|
|
2809
2818
|
const sync = () => {
|
|
@@ -2815,6 +2824,7 @@ class VoiceStreamService {
|
|
|
2815
2824
|
partialSignal.set(stream.partial);
|
|
2816
2825
|
reconnectSignal.set(stream.reconnect);
|
|
2817
2826
|
sessionIdSignal.set(stream.sessionId);
|
|
2827
|
+
sessionMetadataSignal.set(stream.sessionMetadata);
|
|
2818
2828
|
statusSignal.set(stream.status);
|
|
2819
2829
|
turnsSignal.set([...stream.turns]);
|
|
2820
2830
|
};
|
|
@@ -2836,6 +2846,7 @@ class VoiceStreamService {
|
|
|
2836
2846
|
reconnect: computed10(() => reconnectSignal()),
|
|
2837
2847
|
sendAudio: (audio) => stream.sendAudio(audio),
|
|
2838
2848
|
sessionId: computed10(() => sessionIdSignal()),
|
|
2849
|
+
sessionMetadata: computed10(() => sessionMetadataSignal()),
|
|
2839
2850
|
status: computed10(() => statusSignal()),
|
|
2840
2851
|
turns: computed10(() => turnsSignal())
|
|
2841
2852
|
};
|
|
@@ -3318,6 +3329,7 @@ var createInitialState2 = (stream) => ({
|
|
|
3318
3329
|
reconnect: stream.reconnect,
|
|
3319
3330
|
recordingError: null,
|
|
3320
3331
|
sessionId: stream.sessionId,
|
|
3332
|
+
sessionMetadata: stream.sessionMetadata,
|
|
3321
3333
|
scenarioId: stream.scenarioId,
|
|
3322
3334
|
status: stream.status,
|
|
3323
3335
|
turns: [...stream.turns]
|
|
@@ -3347,6 +3359,7 @@ var createVoiceController = (path, options = {}) => {
|
|
|
3347
3359
|
partial: stream.partial,
|
|
3348
3360
|
reconnect: stream.reconnect,
|
|
3349
3361
|
sessionId: stream.sessionId,
|
|
3362
|
+
sessionMetadata: stream.sessionMetadata,
|
|
3350
3363
|
scenarioId: stream.scenarioId,
|
|
3351
3364
|
status: stream.status,
|
|
3352
3365
|
turns: [...stream.turns]
|
|
@@ -3453,6 +3466,9 @@ var createVoiceController = (path, options = {}) => {
|
|
|
3453
3466
|
get sessionId() {
|
|
3454
3467
|
return state.sessionId;
|
|
3455
3468
|
},
|
|
3469
|
+
get sessionMetadata() {
|
|
3470
|
+
return state.sessionMetadata;
|
|
3471
|
+
},
|
|
3456
3472
|
get scenarioId() {
|
|
3457
3473
|
return state.scenarioId;
|
|
3458
3474
|
},
|
|
@@ -18,6 +18,7 @@ export declare class VoiceStreamService {
|
|
|
18
18
|
reconnect: import("@angular/core").Signal<import("..").VoiceReconnectClientState>;
|
|
19
19
|
sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
|
|
20
20
|
sessionId: import("@angular/core").Signal<string | null>;
|
|
21
|
+
sessionMetadata: import("@angular/core").Signal<Record<string, unknown> | null>;
|
|
21
22
|
status: import("@angular/core").Signal<import("..").VoiceSessionStatus | "idle">;
|
|
22
23
|
turns: import("@angular/core").Signal<VoiceTurnRecord<TResult>[]>;
|
|
23
24
|
};
|
package/dist/client/actions.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
15
15
|
call?: undefined;
|
|
16
16
|
partial?: undefined;
|
|
17
17
|
scenarioId?: undefined;
|
|
18
|
+
sessionMetadata?: undefined;
|
|
18
19
|
status?: undefined;
|
|
19
20
|
turns?: undefined;
|
|
20
21
|
turn?: undefined;
|
|
@@ -34,6 +35,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
34
35
|
call?: undefined;
|
|
35
36
|
partial?: undefined;
|
|
36
37
|
scenarioId?: undefined;
|
|
38
|
+
sessionMetadata?: undefined;
|
|
37
39
|
status?: undefined;
|
|
38
40
|
turns?: undefined;
|
|
39
41
|
turn?: undefined;
|
|
@@ -53,6 +55,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
53
55
|
call?: undefined;
|
|
54
56
|
partial?: undefined;
|
|
55
57
|
scenarioId?: undefined;
|
|
58
|
+
sessionMetadata?: undefined;
|
|
56
59
|
status?: undefined;
|
|
57
60
|
turns?: undefined;
|
|
58
61
|
turn?: undefined;
|
|
@@ -72,6 +75,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
72
75
|
call?: undefined;
|
|
73
76
|
partial?: undefined;
|
|
74
77
|
scenarioId?: undefined;
|
|
78
|
+
sessionMetadata?: undefined;
|
|
75
79
|
status?: undefined;
|
|
76
80
|
turns?: undefined;
|
|
77
81
|
turn?: undefined;
|
|
@@ -91,6 +95,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
91
95
|
call?: undefined;
|
|
92
96
|
partial?: undefined;
|
|
93
97
|
scenarioId?: undefined;
|
|
98
|
+
sessionMetadata?: undefined;
|
|
94
99
|
status?: undefined;
|
|
95
100
|
turns?: undefined;
|
|
96
101
|
turn?: undefined;
|
|
@@ -110,6 +115,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
110
115
|
call?: undefined;
|
|
111
116
|
partial?: undefined;
|
|
112
117
|
scenarioId?: undefined;
|
|
118
|
+
sessionMetadata?: undefined;
|
|
113
119
|
status?: undefined;
|
|
114
120
|
turns?: undefined;
|
|
115
121
|
turn?: undefined;
|
|
@@ -129,6 +135,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
129
135
|
call?: undefined;
|
|
130
136
|
partial?: undefined;
|
|
131
137
|
scenarioId?: undefined;
|
|
138
|
+
sessionMetadata?: undefined;
|
|
132
139
|
status?: undefined;
|
|
133
140
|
turns?: undefined;
|
|
134
141
|
turn?: undefined;
|
|
@@ -148,6 +155,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
148
155
|
call?: undefined;
|
|
149
156
|
partial?: undefined;
|
|
150
157
|
scenarioId?: undefined;
|
|
158
|
+
sessionMetadata?: undefined;
|
|
151
159
|
status?: undefined;
|
|
152
160
|
turns?: undefined;
|
|
153
161
|
turn?: undefined;
|
|
@@ -157,6 +165,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
157
165
|
partial: string;
|
|
158
166
|
scenarioId: string | undefined;
|
|
159
167
|
sessionId: string;
|
|
168
|
+
sessionMetadata: Record<string, unknown> | undefined;
|
|
160
169
|
status: import("..").VoiceSessionStatus;
|
|
161
170
|
turns: import("..").VoiceTurnRecord<TResult>[];
|
|
162
171
|
type: "replay";
|
|
@@ -172,6 +181,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
172
181
|
turn?: undefined;
|
|
173
182
|
} | {
|
|
174
183
|
sessionId: string;
|
|
184
|
+
sessionMetadata: Record<string, unknown> | undefined;
|
|
175
185
|
scenarioId: string | undefined;
|
|
176
186
|
status: import("..").VoiceSessionStatus;
|
|
177
187
|
type: "session";
|
|
@@ -206,6 +216,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
|
|
|
206
216
|
call?: undefined;
|
|
207
217
|
partial?: undefined;
|
|
208
218
|
scenarioId?: undefined;
|
|
219
|
+
sessionMetadata?: undefined;
|
|
209
220
|
status?: undefined;
|
|
210
221
|
turns?: undefined;
|
|
211
222
|
} | null;
|
|
@@ -221,6 +221,7 @@ var serverMessageToAction = (message) => {
|
|
|
221
221
|
partial: message.partial,
|
|
222
222
|
scenarioId: message.scenarioId,
|
|
223
223
|
sessionId: message.sessionId,
|
|
224
|
+
sessionMetadata: message.sessionMetadata,
|
|
224
225
|
status: message.status,
|
|
225
226
|
turns: message.turns,
|
|
226
227
|
type: "replay"
|
|
@@ -228,6 +229,7 @@ var serverMessageToAction = (message) => {
|
|
|
228
229
|
case "session":
|
|
229
230
|
return {
|
|
230
231
|
sessionId: message.sessionId,
|
|
232
|
+
sessionMetadata: message.sessionMetadata,
|
|
231
233
|
scenarioId: message.scenarioId,
|
|
232
234
|
status: message.status,
|
|
233
235
|
type: "session"
|
|
@@ -744,6 +746,7 @@ var createInitialState = () => ({
|
|
|
744
746
|
call: null,
|
|
745
747
|
error: null,
|
|
746
748
|
isConnected: false,
|
|
749
|
+
sessionMetadata: null,
|
|
747
750
|
scenarioId: null,
|
|
748
751
|
partial: "",
|
|
749
752
|
reconnect: createInitialReconnectState(),
|
|
@@ -859,6 +862,7 @@ var createVoiceStreamStore = () => {
|
|
|
859
862
|
} : state.reconnect,
|
|
860
863
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
861
864
|
sessionId: action.sessionId,
|
|
865
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
862
866
|
status: action.status,
|
|
863
867
|
turns: [...action.turns]
|
|
864
868
|
};
|
|
@@ -870,6 +874,7 @@ var createVoiceStreamStore = () => {
|
|
|
870
874
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
871
875
|
isConnected: action.status === "active",
|
|
872
876
|
sessionId: action.sessionId,
|
|
877
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
873
878
|
status: action.status
|
|
874
879
|
};
|
|
875
880
|
break;
|
|
@@ -976,6 +981,9 @@ var createVoiceStream = (path, options = {}) => {
|
|
|
976
981
|
get scenarioId() {
|
|
977
982
|
return store.getSnapshot().scenarioId;
|
|
978
983
|
},
|
|
984
|
+
get sessionMetadata() {
|
|
985
|
+
return store.getSnapshot().sessionMetadata;
|
|
986
|
+
},
|
|
979
987
|
start,
|
|
980
988
|
get partial() {
|
|
981
989
|
return store.getSnapshot().partial;
|
|
@@ -1304,6 +1312,7 @@ var createInitialState2 = (stream) => ({
|
|
|
1304
1312
|
reconnect: stream.reconnect,
|
|
1305
1313
|
recordingError: null,
|
|
1306
1314
|
sessionId: stream.sessionId,
|
|
1315
|
+
sessionMetadata: stream.sessionMetadata,
|
|
1307
1316
|
scenarioId: stream.scenarioId,
|
|
1308
1317
|
status: stream.status,
|
|
1309
1318
|
turns: [...stream.turns]
|
|
@@ -1333,6 +1342,7 @@ var createVoiceController = (path, options = {}) => {
|
|
|
1333
1342
|
partial: stream.partial,
|
|
1334
1343
|
reconnect: stream.reconnect,
|
|
1335
1344
|
sessionId: stream.sessionId,
|
|
1345
|
+
sessionMetadata: stream.sessionMetadata,
|
|
1336
1346
|
scenarioId: stream.scenarioId,
|
|
1337
1347
|
status: stream.status,
|
|
1338
1348
|
turns: [...stream.turns]
|
|
@@ -1439,6 +1449,9 @@ var createVoiceController = (path, options = {}) => {
|
|
|
1439
1449
|
get sessionId() {
|
|
1440
1450
|
return state.sessionId;
|
|
1441
1451
|
},
|
|
1452
|
+
get sessionMetadata() {
|
|
1453
|
+
return state.sessionMetadata;
|
|
1454
|
+
},
|
|
1442
1455
|
get scenarioId() {
|
|
1443
1456
|
return state.scenarioId;
|
|
1444
1457
|
},
|
package/dist/client/index.js
CHANGED
|
@@ -759,6 +759,7 @@ var serverMessageToAction = (message) => {
|
|
|
759
759
|
partial: message.partial,
|
|
760
760
|
scenarioId: message.scenarioId,
|
|
761
761
|
sessionId: message.sessionId,
|
|
762
|
+
sessionMetadata: message.sessionMetadata,
|
|
762
763
|
status: message.status,
|
|
763
764
|
turns: message.turns,
|
|
764
765
|
type: "replay"
|
|
@@ -766,6 +767,7 @@ var serverMessageToAction = (message) => {
|
|
|
766
767
|
case "session":
|
|
767
768
|
return {
|
|
768
769
|
sessionId: message.sessionId,
|
|
770
|
+
sessionMetadata: message.sessionMetadata,
|
|
769
771
|
scenarioId: message.scenarioId,
|
|
770
772
|
status: message.status,
|
|
771
773
|
type: "session"
|
|
@@ -1527,6 +1529,7 @@ var createInitialState2 = () => ({
|
|
|
1527
1529
|
call: null,
|
|
1528
1530
|
error: null,
|
|
1529
1531
|
isConnected: false,
|
|
1532
|
+
sessionMetadata: null,
|
|
1530
1533
|
scenarioId: null,
|
|
1531
1534
|
partial: "",
|
|
1532
1535
|
reconnect: createInitialReconnectState(),
|
|
@@ -1642,6 +1645,7 @@ var createVoiceStreamStore = () => {
|
|
|
1642
1645
|
} : state.reconnect,
|
|
1643
1646
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
1644
1647
|
sessionId: action.sessionId,
|
|
1648
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
1645
1649
|
status: action.status,
|
|
1646
1650
|
turns: [...action.turns]
|
|
1647
1651
|
};
|
|
@@ -1653,6 +1657,7 @@ var createVoiceStreamStore = () => {
|
|
|
1653
1657
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
1654
1658
|
isConnected: action.status === "active",
|
|
1655
1659
|
sessionId: action.sessionId,
|
|
1660
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
1656
1661
|
status: action.status
|
|
1657
1662
|
};
|
|
1658
1663
|
break;
|
|
@@ -1759,6 +1764,9 @@ var createVoiceStream = (path, options = {}) => {
|
|
|
1759
1764
|
get scenarioId() {
|
|
1760
1765
|
return store.getSnapshot().scenarioId;
|
|
1761
1766
|
},
|
|
1767
|
+
get sessionMetadata() {
|
|
1768
|
+
return store.getSnapshot().sessionMetadata;
|
|
1769
|
+
},
|
|
1762
1770
|
start,
|
|
1763
1771
|
get partial() {
|
|
1764
1772
|
return store.getSnapshot().partial;
|
|
@@ -2265,6 +2273,7 @@ var createInitialState3 = (stream) => ({
|
|
|
2265
2273
|
reconnect: stream.reconnect,
|
|
2266
2274
|
recordingError: null,
|
|
2267
2275
|
sessionId: stream.sessionId,
|
|
2276
|
+
sessionMetadata: stream.sessionMetadata,
|
|
2268
2277
|
scenarioId: stream.scenarioId,
|
|
2269
2278
|
status: stream.status,
|
|
2270
2279
|
turns: [...stream.turns]
|
|
@@ -2294,6 +2303,7 @@ var createVoiceController = (path, options = {}) => {
|
|
|
2294
2303
|
partial: stream.partial,
|
|
2295
2304
|
reconnect: stream.reconnect,
|
|
2296
2305
|
sessionId: stream.sessionId,
|
|
2306
|
+
sessionMetadata: stream.sessionMetadata,
|
|
2297
2307
|
scenarioId: stream.scenarioId,
|
|
2298
2308
|
status: stream.status,
|
|
2299
2309
|
turns: [...stream.turns]
|
|
@@ -2400,6 +2410,9 @@ var createVoiceController = (path, options = {}) => {
|
|
|
2400
2410
|
get sessionId() {
|
|
2401
2411
|
return state.sessionId;
|
|
2402
2412
|
},
|
|
2413
|
+
get sessionMetadata() {
|
|
2414
|
+
return state.sessionMetadata;
|
|
2415
|
+
},
|
|
2403
2416
|
get scenarioId() {
|
|
2404
2417
|
return state.scenarioId;
|
|
2405
2418
|
},
|
package/dist/index.js
CHANGED
|
@@ -3703,6 +3703,7 @@ var createVoiceSession = (options) => {
|
|
|
3703
3703
|
partial: session.currentTurn.partialText,
|
|
3704
3704
|
scenarioId: session.scenarioId,
|
|
3705
3705
|
sessionId: options.id,
|
|
3706
|
+
sessionMetadata: session.metadata && typeof session.metadata === "object" ? session.metadata : undefined,
|
|
3706
3707
|
status: session.status,
|
|
3707
3708
|
turns: session.turns,
|
|
3708
3709
|
type: "replay"
|
|
@@ -5048,6 +5049,7 @@ var createVoiceSession = (options) => {
|
|
|
5048
5049
|
await send({
|
|
5049
5050
|
sessionId: options.id,
|
|
5050
5051
|
status: session.status,
|
|
5052
|
+
sessionMetadata: session.metadata && typeof session.metadata === "object" ? session.metadata : undefined,
|
|
5051
5053
|
scenarioId: session.scenarioId,
|
|
5052
5054
|
type: "session"
|
|
5053
5055
|
});
|
|
@@ -5465,18 +5467,26 @@ var recommendVoiceProfileSwitch = (options) => {
|
|
|
5465
5467
|
var applyVoiceProfileSwitchGuard = async (options) => {
|
|
5466
5468
|
const mode = options.mode ?? "recommend";
|
|
5467
5469
|
const minConfidence = options.minConfidence ?? 0.75;
|
|
5470
|
+
const maxAutoSwitchesPerSession = Math.max(0, Math.floor(options.maxAutoSwitchesPerSession ?? 1));
|
|
5471
|
+
const autoSwitchCount = Math.max(0, Math.floor(options.autoSwitchCount ?? 0));
|
|
5468
5472
|
const recommendation = recommendVoiceProfileSwitch(options);
|
|
5469
5473
|
const confidence = estimateSwitchConfidence(recommendation);
|
|
5470
5474
|
const previousProfileId = recommendation.currentProfile?.profileId;
|
|
5471
5475
|
const recommendedProfileId = recommendation.recommendedProfile?.profileId;
|
|
5472
|
-
const
|
|
5473
|
-
const
|
|
5476
|
+
const isRecommendedAllowed = !recommendedProfileId || !options.allowedProfileIds || options.allowedProfileIds.length === 0 || options.allowedProfileIds.includes(recommendedProfileId);
|
|
5477
|
+
const isRecommendedBlocked = recommendedProfileId ? Boolean(options.blockedProfileIds?.includes(recommendedProfileId)) : false;
|
|
5478
|
+
const blockedByPolicy = !isRecommendedAllowed ? "allowed-profiles" : isRecommendedBlocked ? "blocked-profiles" : mode === "auto" && autoSwitchCount >= maxAutoSwitchesPerSession ? "max-switches" : undefined;
|
|
5479
|
+
const canSwitch = mode !== "off" && recommendation.status === "switch" && recommendation.ok && Boolean(recommendedProfileId) && confidence >= minConfidence && !blockedByPolicy;
|
|
5480
|
+
const action = mode === "off" ? "disabled" : recommendation.status === "stay" ? "stay" : canSwitch ? mode === "auto" ? "switch" : "recommend" : "blocked";
|
|
5474
5481
|
const selectedProfileId = action === "switch" ? recommendedProfileId : previousProfileId ?? recommendedProfileId;
|
|
5475
|
-
const reason = action === "switch" ? `Auto-switched from ${previousProfileId ?? "unknown"} to ${recommendedProfileId}.` : action === "recommend" ? `Recommended ${recommendedProfileId} but left selection unchanged because mode is recommend.` : action === "blocked" ? `Blocked profile switch because confidence ${confidence} is below ${minConfidence} or evidence is incomplete.` : "Kept current profile because measured evidence does not require a switch.";
|
|
5482
|
+
const reason = action === "disabled" ? "Profile switch guard is disabled by policy." : action === "switch" ? `Auto-switched from ${previousProfileId ?? "unknown"} to ${recommendedProfileId}.` : action === "recommend" ? `Recommended ${recommendedProfileId} but left selection unchanged because mode is recommend.` : action === "blocked" ? blockedByPolicy === "allowed-profiles" ? `Blocked profile switch because ${recommendedProfileId} is not in the allowed profile list.` : blockedByPolicy === "blocked-profiles" ? `Blocked profile switch because ${recommendedProfileId} is in the blocked profile list.` : blockedByPolicy === "max-switches" ? `Blocked profile switch because the session already used ${autoSwitchCount} of ${maxAutoSwitchesPerSession} allowed automatic switch(es).` : `Blocked profile switch because confidence ${confidence} is below ${minConfidence} or evidence is incomplete.` : "Kept current profile because measured evidence does not require a switch.";
|
|
5476
5483
|
const decision = {
|
|
5477
5484
|
action,
|
|
5478
5485
|
autoApplied: action === "switch",
|
|
5486
|
+
autoSwitchCount,
|
|
5487
|
+
blockedByPolicy,
|
|
5479
5488
|
confidence,
|
|
5489
|
+
maxAutoSwitchesPerSession,
|
|
5480
5490
|
minConfidence,
|
|
5481
5491
|
mode,
|
|
5482
5492
|
previousProfileId,
|
|
@@ -5494,10 +5504,13 @@ var applyVoiceProfileSwitchGuard = async (options) => {
|
|
|
5494
5504
|
name: "AbsoluteJS Voice Profile Switch Guard"
|
|
5495
5505
|
},
|
|
5496
5506
|
metadata: options.metadata,
|
|
5497
|
-
outcome: action === "blocked" ? "skipped" : "success",
|
|
5507
|
+
outcome: action === "blocked" || action === "disabled" ? "skipped" : "success",
|
|
5498
5508
|
payload: {
|
|
5499
5509
|
autoApplied: decision.autoApplied,
|
|
5510
|
+
autoSwitchCount,
|
|
5511
|
+
blockedByPolicy,
|
|
5500
5512
|
confidence,
|
|
5513
|
+
maxAutoSwitchesPerSession,
|
|
5501
5514
|
minConfidence,
|
|
5502
5515
|
mode,
|
|
5503
5516
|
previousProfileId,
|
|
@@ -5730,12 +5743,19 @@ var resolveProfileSwitchGuard = async (config, runtime, input) => {
|
|
|
5730
5743
|
const currentProfileId = await resolveMaybeFunction(guard.currentProfileId, resolverInput);
|
|
5731
5744
|
const metadata = await resolveMaybeFunction(guard.metadata, resolverInput);
|
|
5732
5745
|
const minConfidence = await resolveMaybeFunction(guard.minConfidence, resolverInput);
|
|
5746
|
+
const maxAutoSwitchesPerSession = await resolveMaybeFunction(guard.maxAutoSwitchesPerSession, resolverInput);
|
|
5747
|
+
const allowedProfileIds = await resolveMaybeFunction(guard.allowedProfileIds, resolverInput);
|
|
5748
|
+
const blockedProfileIds = await resolveMaybeFunction(guard.blockedProfileIds, resolverInput);
|
|
5733
5749
|
const mode = await resolveMaybeFunction(guard.mode, resolverInput);
|
|
5734
5750
|
const decision = await applyVoiceProfileSwitchGuard({
|
|
5735
5751
|
actor: guard.actor,
|
|
5752
|
+
allowedProfileIds,
|
|
5736
5753
|
audit: guard.audit,
|
|
5754
|
+
autoSwitchCount: runtime.profileSwitchGuardAutoSwitchCounts.get(input.sessionId) ?? 0,
|
|
5755
|
+
blockedProfileIds,
|
|
5737
5756
|
defaultProfileId: guard.defaultProfileId,
|
|
5738
5757
|
defaults,
|
|
5758
|
+
maxAutoSwitchesPerSession,
|
|
5739
5759
|
metadata,
|
|
5740
5760
|
minConfidence,
|
|
5741
5761
|
mode,
|
|
@@ -5745,6 +5765,9 @@ var resolveProfileSwitchGuard = async (config, runtime, input) => {
|
|
|
5745
5765
|
},
|
|
5746
5766
|
sessionId: input.sessionId
|
|
5747
5767
|
});
|
|
5768
|
+
if (decision.autoApplied) {
|
|
5769
|
+
runtime.profileSwitchGuardAutoSwitchCounts.set(input.sessionId, decision.autoSwitchCount + 1);
|
|
5770
|
+
}
|
|
5748
5771
|
await guard.onDecision?.({
|
|
5749
5772
|
context: input.context,
|
|
5750
5773
|
decision,
|
|
@@ -5762,7 +5785,10 @@ var resolveProfileSwitchGuard = async (config, runtime, input) => {
|
|
|
5762
5785
|
payload: {
|
|
5763
5786
|
action: decision.action,
|
|
5764
5787
|
autoApplied: decision.autoApplied,
|
|
5788
|
+
autoSwitchCount: decision.autoSwitchCount,
|
|
5789
|
+
blockedByPolicy: decision.blockedByPolicy,
|
|
5765
5790
|
confidence: decision.confidence,
|
|
5791
|
+
maxAutoSwitchesPerSession: decision.maxAutoSwitchesPerSession,
|
|
5766
5792
|
minConfidence: decision.minConfidence,
|
|
5767
5793
|
mode: decision.mode,
|
|
5768
5794
|
previousProfileId: decision.previousProfileId,
|
|
@@ -5785,6 +5811,7 @@ var voice = (config) => {
|
|
|
5785
5811
|
const runtime = {
|
|
5786
5812
|
activeSessions: new Map,
|
|
5787
5813
|
logger: resolveLogger(config.logger),
|
|
5814
|
+
profileSwitchGuardAutoSwitchCounts: new Map,
|
|
5788
5815
|
profileSwitchGuardedSessions: new Set,
|
|
5789
5816
|
socketSessions: new WeakMap
|
|
5790
5817
|
};
|
|
@@ -36,15 +36,18 @@ export type VoiceProfileSwitchRecommendationOptions = {
|
|
|
36
36
|
minImprovementMs?: number;
|
|
37
37
|
observed?: VoiceProfileSwitchObservedSignals;
|
|
38
38
|
};
|
|
39
|
-
export type VoiceProfileSwitchGuardMode = 'auto' | 'recommend';
|
|
40
|
-
export type VoiceProfileSwitchGuardAction = 'blocked' | 'recommend' | 'stay' | 'switch';
|
|
39
|
+
export type VoiceProfileSwitchGuardMode = 'auto' | 'off' | 'recommend';
|
|
40
|
+
export type VoiceProfileSwitchGuardAction = 'blocked' | 'disabled' | 'recommend' | 'stay' | 'switch';
|
|
41
41
|
export type VoiceProfileSwitchGuardDecision = {
|
|
42
42
|
action: VoiceProfileSwitchGuardAction;
|
|
43
43
|
auditEvent?: StoredVoiceAuditEvent;
|
|
44
44
|
autoApplied: boolean;
|
|
45
|
+
autoSwitchCount: number;
|
|
46
|
+
blockedByPolicy?: 'allowed-profiles' | 'blocked-profiles' | 'max-switches';
|
|
45
47
|
confidence: number;
|
|
46
48
|
minConfidence: number;
|
|
47
49
|
mode: VoiceProfileSwitchGuardMode;
|
|
50
|
+
maxAutoSwitchesPerSession: number;
|
|
48
51
|
previousProfileId?: string;
|
|
49
52
|
reason: string;
|
|
50
53
|
recommendation: VoiceProfileSwitchRecommendation;
|
|
@@ -53,7 +56,11 @@ export type VoiceProfileSwitchGuardDecision = {
|
|
|
53
56
|
};
|
|
54
57
|
export type VoiceProfileSwitchGuardOptions = VoiceProfileSwitchRecommendationOptions & {
|
|
55
58
|
actor?: VoiceAuditActor;
|
|
59
|
+
allowedProfileIds?: string[];
|
|
56
60
|
audit?: VoiceAuditEventStore;
|
|
61
|
+
autoSwitchCount?: number;
|
|
62
|
+
blockedProfileIds?: string[];
|
|
63
|
+
maxAutoSwitchesPerSession?: number;
|
|
57
64
|
metadata?: Record<string, unknown>;
|
|
58
65
|
minConfidence?: number;
|
|
59
66
|
mode?: VoiceProfileSwitchGuardMode;
|
package/dist/react/index.js
CHANGED
|
@@ -6363,6 +6363,7 @@ var serverMessageToAction = (message) => {
|
|
|
6363
6363
|
partial: message.partial,
|
|
6364
6364
|
scenarioId: message.scenarioId,
|
|
6365
6365
|
sessionId: message.sessionId,
|
|
6366
|
+
sessionMetadata: message.sessionMetadata,
|
|
6366
6367
|
status: message.status,
|
|
6367
6368
|
turns: message.turns,
|
|
6368
6369
|
type: "replay"
|
|
@@ -6370,6 +6371,7 @@ var serverMessageToAction = (message) => {
|
|
|
6370
6371
|
case "session":
|
|
6371
6372
|
return {
|
|
6372
6373
|
sessionId: message.sessionId,
|
|
6374
|
+
sessionMetadata: message.sessionMetadata,
|
|
6373
6375
|
scenarioId: message.scenarioId,
|
|
6374
6376
|
status: message.status,
|
|
6375
6377
|
type: "session"
|
|
@@ -7395,6 +7397,7 @@ var createInitialState = () => ({
|
|
|
7395
7397
|
call: null,
|
|
7396
7398
|
error: null,
|
|
7397
7399
|
isConnected: false,
|
|
7400
|
+
sessionMetadata: null,
|
|
7398
7401
|
scenarioId: null,
|
|
7399
7402
|
partial: "",
|
|
7400
7403
|
reconnect: createInitialReconnectState(),
|
|
@@ -7510,6 +7513,7 @@ var createVoiceStreamStore = () => {
|
|
|
7510
7513
|
} : state.reconnect,
|
|
7511
7514
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
7512
7515
|
sessionId: action.sessionId,
|
|
7516
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
7513
7517
|
status: action.status,
|
|
7514
7518
|
turns: [...action.turns]
|
|
7515
7519
|
};
|
|
@@ -7521,6 +7525,7 @@ var createVoiceStreamStore = () => {
|
|
|
7521
7525
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
7522
7526
|
isConnected: action.status === "active",
|
|
7523
7527
|
sessionId: action.sessionId,
|
|
7528
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
7524
7529
|
status: action.status
|
|
7525
7530
|
};
|
|
7526
7531
|
break;
|
|
@@ -7627,6 +7632,9 @@ var createVoiceStream = (path, options = {}) => {
|
|
|
7627
7632
|
get scenarioId() {
|
|
7628
7633
|
return store.getSnapshot().scenarioId;
|
|
7629
7634
|
},
|
|
7635
|
+
get sessionMetadata() {
|
|
7636
|
+
return store.getSnapshot().sessionMetadata;
|
|
7637
|
+
},
|
|
7630
7638
|
start,
|
|
7631
7639
|
get partial() {
|
|
7632
7640
|
return store.getSnapshot().partial;
|
|
@@ -7678,6 +7686,7 @@ var EMPTY_SNAPSHOT = {
|
|
|
7678
7686
|
status: "idle"
|
|
7679
7687
|
},
|
|
7680
7688
|
sessionId: "",
|
|
7689
|
+
sessionMetadata: null,
|
|
7681
7690
|
status: "idle",
|
|
7682
7691
|
turns: []
|
|
7683
7692
|
};
|
|
@@ -8170,6 +8179,7 @@ var createInitialState2 = (stream) => ({
|
|
|
8170
8179
|
reconnect: stream.reconnect,
|
|
8171
8180
|
recordingError: null,
|
|
8172
8181
|
sessionId: stream.sessionId,
|
|
8182
|
+
sessionMetadata: stream.sessionMetadata,
|
|
8173
8183
|
scenarioId: stream.scenarioId,
|
|
8174
8184
|
status: stream.status,
|
|
8175
8185
|
turns: [...stream.turns]
|
|
@@ -8199,6 +8209,7 @@ var createVoiceController = (path, options = {}) => {
|
|
|
8199
8209
|
partial: stream.partial,
|
|
8200
8210
|
reconnect: stream.reconnect,
|
|
8201
8211
|
sessionId: stream.sessionId,
|
|
8212
|
+
sessionMetadata: stream.sessionMetadata,
|
|
8202
8213
|
scenarioId: stream.scenarioId,
|
|
8203
8214
|
status: stream.status,
|
|
8204
8215
|
turns: [...stream.turns]
|
|
@@ -8305,6 +8316,9 @@ var createVoiceController = (path, options = {}) => {
|
|
|
8305
8316
|
get sessionId() {
|
|
8306
8317
|
return state.sessionId;
|
|
8307
8318
|
},
|
|
8319
|
+
get sessionMetadata() {
|
|
8320
|
+
return state.sessionMetadata;
|
|
8321
|
+
},
|
|
8308
8322
|
get scenarioId() {
|
|
8309
8323
|
return state.scenarioId;
|
|
8310
8324
|
},
|
|
@@ -9,6 +9,7 @@ export declare const useVoiceController: <TResult = unknown>(path: string, optio
|
|
|
9
9
|
stopRecording: () => void;
|
|
10
10
|
toggleRecording: () => Promise<void>;
|
|
11
11
|
call: import("..").VoiceCallLifecycleState | null;
|
|
12
|
+
sessionMetadata: Record<string, unknown> | null;
|
|
12
13
|
sessionId: string | null;
|
|
13
14
|
scenarioId: string | null;
|
|
14
15
|
status: import("..").VoiceSessionStatus | "idle";
|
|
@@ -5,6 +5,7 @@ export declare const useVoiceStream: <TResult = unknown>(path: string, options?:
|
|
|
5
5
|
endTurn: () => void;
|
|
6
6
|
sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
|
|
7
7
|
call: import("..").VoiceCallLifecycleState | null;
|
|
8
|
+
sessionMetadata: Record<string, unknown> | null;
|
|
8
9
|
sessionId: string | null;
|
|
9
10
|
scenarioId: string | null;
|
|
10
11
|
status: import("..").VoiceSessionStatus | "idle";
|
package/dist/svelte/index.js
CHANGED
|
@@ -3421,6 +3421,7 @@ var serverMessageToAction = (message) => {
|
|
|
3421
3421
|
partial: message.partial,
|
|
3422
3422
|
scenarioId: message.scenarioId,
|
|
3423
3423
|
sessionId: message.sessionId,
|
|
3424
|
+
sessionMetadata: message.sessionMetadata,
|
|
3424
3425
|
status: message.status,
|
|
3425
3426
|
turns: message.turns,
|
|
3426
3427
|
type: "replay"
|
|
@@ -3428,6 +3429,7 @@ var serverMessageToAction = (message) => {
|
|
|
3428
3429
|
case "session":
|
|
3429
3430
|
return {
|
|
3430
3431
|
sessionId: message.sessionId,
|
|
3432
|
+
sessionMetadata: message.sessionMetadata,
|
|
3431
3433
|
scenarioId: message.scenarioId,
|
|
3432
3434
|
status: message.status,
|
|
3433
3435
|
type: "session"
|
|
@@ -4453,6 +4455,7 @@ var createInitialState = () => ({
|
|
|
4453
4455
|
call: null,
|
|
4454
4456
|
error: null,
|
|
4455
4457
|
isConnected: false,
|
|
4458
|
+
sessionMetadata: null,
|
|
4456
4459
|
scenarioId: null,
|
|
4457
4460
|
partial: "",
|
|
4458
4461
|
reconnect: createInitialReconnectState(),
|
|
@@ -4568,6 +4571,7 @@ var createVoiceStreamStore = () => {
|
|
|
4568
4571
|
} : state.reconnect,
|
|
4569
4572
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
4570
4573
|
sessionId: action.sessionId,
|
|
4574
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
4571
4575
|
status: action.status,
|
|
4572
4576
|
turns: [...action.turns]
|
|
4573
4577
|
};
|
|
@@ -4579,6 +4583,7 @@ var createVoiceStreamStore = () => {
|
|
|
4579
4583
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
4580
4584
|
isConnected: action.status === "active",
|
|
4581
4585
|
sessionId: action.sessionId,
|
|
4586
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
4582
4587
|
status: action.status
|
|
4583
4588
|
};
|
|
4584
4589
|
break;
|
|
@@ -4685,6 +4690,9 @@ var createVoiceStream = (path, options = {}) => {
|
|
|
4685
4690
|
get scenarioId() {
|
|
4686
4691
|
return store.getSnapshot().scenarioId;
|
|
4687
4692
|
},
|
|
4693
|
+
get sessionMetadata() {
|
|
4694
|
+
return store.getSnapshot().sessionMetadata;
|
|
4695
|
+
},
|
|
4688
4696
|
start,
|
|
4689
4697
|
get partial() {
|
|
4690
4698
|
return store.getSnapshot().partial;
|
|
@@ -6489,6 +6497,7 @@ var createInitialState2 = (stream) => ({
|
|
|
6489
6497
|
reconnect: stream.reconnect,
|
|
6490
6498
|
recordingError: null,
|
|
6491
6499
|
sessionId: stream.sessionId,
|
|
6500
|
+
sessionMetadata: stream.sessionMetadata,
|
|
6492
6501
|
scenarioId: stream.scenarioId,
|
|
6493
6502
|
status: stream.status,
|
|
6494
6503
|
turns: [...stream.turns]
|
|
@@ -6518,6 +6527,7 @@ var createVoiceController = (path, options = {}) => {
|
|
|
6518
6527
|
partial: stream.partial,
|
|
6519
6528
|
reconnect: stream.reconnect,
|
|
6520
6529
|
sessionId: stream.sessionId,
|
|
6530
|
+
sessionMetadata: stream.sessionMetadata,
|
|
6521
6531
|
scenarioId: stream.scenarioId,
|
|
6522
6532
|
status: stream.status,
|
|
6523
6533
|
turns: [...stream.turns]
|
|
@@ -6624,6 +6634,9 @@ var createVoiceController = (path, options = {}) => {
|
|
|
6624
6634
|
get sessionId() {
|
|
6625
6635
|
return state.sessionId;
|
|
6626
6636
|
},
|
|
6637
|
+
get sessionMetadata() {
|
|
6638
|
+
return state.sessionMetadata;
|
|
6639
|
+
},
|
|
6627
6640
|
get scenarioId() {
|
|
6628
6641
|
return state.scenarioId;
|
|
6629
6642
|
},
|
package/dist/testing/index.js
CHANGED
|
@@ -2138,6 +2138,7 @@ var serverMessageToAction = (message) => {
|
|
|
2138
2138
|
partial: message.partial,
|
|
2139
2139
|
scenarioId: message.scenarioId,
|
|
2140
2140
|
sessionId: message.sessionId,
|
|
2141
|
+
sessionMetadata: message.sessionMetadata,
|
|
2141
2142
|
status: message.status,
|
|
2142
2143
|
turns: message.turns,
|
|
2143
2144
|
type: "replay"
|
|
@@ -2145,6 +2146,7 @@ var serverMessageToAction = (message) => {
|
|
|
2145
2146
|
case "session":
|
|
2146
2147
|
return {
|
|
2147
2148
|
sessionId: message.sessionId,
|
|
2149
|
+
sessionMetadata: message.sessionMetadata,
|
|
2148
2150
|
scenarioId: message.scenarioId,
|
|
2149
2151
|
status: message.status,
|
|
2150
2152
|
type: "session"
|
|
@@ -3170,6 +3172,7 @@ var createInitialState2 = () => ({
|
|
|
3170
3172
|
call: null,
|
|
3171
3173
|
error: null,
|
|
3172
3174
|
isConnected: false,
|
|
3175
|
+
sessionMetadata: null,
|
|
3173
3176
|
scenarioId: null,
|
|
3174
3177
|
partial: "",
|
|
3175
3178
|
reconnect: createInitialReconnectState(),
|
|
@@ -3285,6 +3288,7 @@ var createVoiceStreamStore = () => {
|
|
|
3285
3288
|
} : state.reconnect,
|
|
3286
3289
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
3287
3290
|
sessionId: action.sessionId,
|
|
3291
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
3288
3292
|
status: action.status,
|
|
3289
3293
|
turns: [...action.turns]
|
|
3290
3294
|
};
|
|
@@ -3296,6 +3300,7 @@ var createVoiceStreamStore = () => {
|
|
|
3296
3300
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
3297
3301
|
isConnected: action.status === "active",
|
|
3298
3302
|
sessionId: action.sessionId,
|
|
3303
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
3299
3304
|
status: action.status
|
|
3300
3305
|
};
|
|
3301
3306
|
break;
|
|
@@ -3402,6 +3407,9 @@ var createVoiceStream = (path, options = {}) => {
|
|
|
3402
3407
|
get scenarioId() {
|
|
3403
3408
|
return store.getSnapshot().scenarioId;
|
|
3404
3409
|
},
|
|
3410
|
+
get sessionMetadata() {
|
|
3411
|
+
return store.getSnapshot().sessionMetadata;
|
|
3412
|
+
},
|
|
3405
3413
|
start,
|
|
3406
3414
|
get partial() {
|
|
3407
3415
|
return store.getSnapshot().partial;
|
|
@@ -3767,6 +3775,7 @@ var createInitialState3 = (stream) => ({
|
|
|
3767
3775
|
reconnect: stream.reconnect,
|
|
3768
3776
|
recordingError: null,
|
|
3769
3777
|
sessionId: stream.sessionId,
|
|
3778
|
+
sessionMetadata: stream.sessionMetadata,
|
|
3770
3779
|
scenarioId: stream.scenarioId,
|
|
3771
3780
|
status: stream.status,
|
|
3772
3781
|
turns: [...stream.turns]
|
|
@@ -3796,6 +3805,7 @@ var createVoiceController = (path, options = {}) => {
|
|
|
3796
3805
|
partial: stream.partial,
|
|
3797
3806
|
reconnect: stream.reconnect,
|
|
3798
3807
|
sessionId: stream.sessionId,
|
|
3808
|
+
sessionMetadata: stream.sessionMetadata,
|
|
3799
3809
|
scenarioId: stream.scenarioId,
|
|
3800
3810
|
status: stream.status,
|
|
3801
3811
|
turns: [...stream.turns]
|
|
@@ -3902,6 +3912,9 @@ var createVoiceController = (path, options = {}) => {
|
|
|
3902
3912
|
get sessionId() {
|
|
3903
3913
|
return state.sessionId;
|
|
3904
3914
|
},
|
|
3915
|
+
get sessionMetadata() {
|
|
3916
|
+
return state.sessionMetadata;
|
|
3917
|
+
},
|
|
3905
3918
|
get scenarioId() {
|
|
3906
3919
|
return state.scenarioId;
|
|
3907
3920
|
},
|
|
@@ -6272,6 +6285,7 @@ var createVoiceSession = (options) => {
|
|
|
6272
6285
|
partial: session.currentTurn.partialText,
|
|
6273
6286
|
scenarioId: session.scenarioId,
|
|
6274
6287
|
sessionId: options.id,
|
|
6288
|
+
sessionMetadata: session.metadata && typeof session.metadata === "object" ? session.metadata : undefined,
|
|
6275
6289
|
status: session.status,
|
|
6276
6290
|
turns: session.turns,
|
|
6277
6291
|
type: "replay"
|
|
@@ -7617,6 +7631,7 @@ var createVoiceSession = (options) => {
|
|
|
7617
7631
|
await send({
|
|
7618
7632
|
sessionId: options.id,
|
|
7619
7633
|
status: session.status,
|
|
7634
|
+
sessionMetadata: session.metadata && typeof session.metadata === "object" ? session.metadata : undefined,
|
|
7620
7635
|
scenarioId: session.scenarioId,
|
|
7621
7636
|
type: "session"
|
|
7622
7637
|
});
|
package/dist/types.d.ts
CHANGED
|
@@ -624,12 +624,15 @@ export type VoiceProfileSwitchGuardResolverInput<TContext = unknown> = {
|
|
|
624
624
|
};
|
|
625
625
|
export type VoicePluginProfileSwitchGuardConfig<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
|
|
626
626
|
actor?: VoiceAuditActor;
|
|
627
|
+
allowedProfileIds?: string[] | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<string[] | undefined> | string[] | undefined);
|
|
627
628
|
audit?: VoiceAuditEventStore;
|
|
629
|
+
blockedProfileIds?: string[] | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<string[] | undefined> | string[] | undefined);
|
|
628
630
|
currentProfileId?: string | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<string | undefined> | string | undefined);
|
|
629
631
|
defaultProfileId?: string;
|
|
630
632
|
defaults: VoiceRealCallProfileDefaultsReport | VoiceRealCallProfileHistoryReport | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<VoiceRealCallProfileDefaultsReport | VoiceRealCallProfileHistoryReport> | VoiceRealCallProfileDefaultsReport | VoiceRealCallProfileHistoryReport);
|
|
631
633
|
metadata?: Record<string, unknown> | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<Record<string, unknown> | undefined> | Record<string, unknown> | undefined);
|
|
632
634
|
minConfidence?: number | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<number | undefined> | number | undefined);
|
|
635
|
+
maxAutoSwitchesPerSession?: number | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<number | undefined> | number | undefined);
|
|
633
636
|
mode?: VoiceProfileSwitchGuardMode | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<VoiceProfileSwitchGuardMode | undefined> | VoiceProfileSwitchGuardMode | undefined);
|
|
634
637
|
observed?: VoiceProfileSwitchObservedSignals | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<VoiceProfileSwitchObservedSignals | undefined> | VoiceProfileSwitchObservedSignals | undefined);
|
|
635
638
|
onDecision?: (input: {
|
|
@@ -734,6 +737,7 @@ export type VoiceServerSessionMessage = {
|
|
|
734
737
|
sessionId: string;
|
|
735
738
|
status: VoiceSessionStatus;
|
|
736
739
|
scenarioId?: string;
|
|
740
|
+
sessionMetadata?: Record<string, unknown>;
|
|
737
741
|
};
|
|
738
742
|
export type VoiceServerReplayMessage<TResult = unknown> = {
|
|
739
743
|
type: 'replay';
|
|
@@ -742,6 +746,7 @@ export type VoiceServerReplayMessage<TResult = unknown> = {
|
|
|
742
746
|
partial: string;
|
|
743
747
|
scenarioId?: string;
|
|
744
748
|
sessionId: string;
|
|
749
|
+
sessionMetadata?: Record<string, unknown>;
|
|
745
750
|
status: VoiceSessionStatus;
|
|
746
751
|
turns: VoiceTurnRecord<TResult>[];
|
|
747
752
|
};
|
|
@@ -931,6 +936,7 @@ export type VoiceHTMXOptions<TSession extends VoiceSessionRecord = VoiceSessionR
|
|
|
931
936
|
export type VoiceHTMXConfig<TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = VoiceHTMXRenderer<TSession, TResult> | VoiceHTMXOptions<TSession, TResult>;
|
|
932
937
|
export type VoiceStreamState<TResult = unknown> = {
|
|
933
938
|
call: VoiceCallLifecycleState | null;
|
|
939
|
+
sessionMetadata: Record<string, unknown> | null;
|
|
934
940
|
sessionId: string | null;
|
|
935
941
|
scenarioId: string | null;
|
|
936
942
|
status: VoiceSessionStatus | 'idle';
|
|
@@ -964,6 +970,7 @@ export type VoiceStream<TResult = unknown> = {
|
|
|
964
970
|
reconnect: VoiceReconnectClientState;
|
|
965
971
|
sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
|
|
966
972
|
sessionId: string | null;
|
|
973
|
+
sessionMetadata: Record<string, unknown> | null;
|
|
967
974
|
scenarioId: string | null;
|
|
968
975
|
status: VoiceSessionStatus | 'idle';
|
|
969
976
|
subscribe: (subscriber: () => void) => () => void;
|
|
@@ -1035,6 +1042,7 @@ export type VoiceController<TResult = unknown> = {
|
|
|
1035
1042
|
recordingError: string | null;
|
|
1036
1043
|
sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
|
|
1037
1044
|
sessionId: string | null;
|
|
1045
|
+
sessionMetadata: Record<string, unknown> | null;
|
|
1038
1046
|
scenarioId: string | null;
|
|
1039
1047
|
startRecording: () => Promise<void>;
|
|
1040
1048
|
status: VoiceSessionStatus | 'idle';
|
|
@@ -1063,6 +1071,7 @@ export type VoiceHTMXBindingOptions = {
|
|
|
1063
1071
|
export type VoiceStoreAction<TResult = unknown> = {
|
|
1064
1072
|
type: 'session';
|
|
1065
1073
|
sessionId: string;
|
|
1074
|
+
sessionMetadata?: Record<string, unknown>;
|
|
1066
1075
|
scenarioId?: string;
|
|
1067
1076
|
status: VoiceSessionStatus;
|
|
1068
1077
|
} | {
|
|
@@ -1072,6 +1081,7 @@ export type VoiceStoreAction<TResult = unknown> = {
|
|
|
1072
1081
|
partial: string;
|
|
1073
1082
|
scenarioId?: string;
|
|
1074
1083
|
sessionId: string;
|
|
1084
|
+
sessionMetadata?: Record<string, unknown>;
|
|
1075
1085
|
status: VoiceSessionStatus;
|
|
1076
1086
|
turns: VoiceTurnRecord<TResult>[];
|
|
1077
1087
|
} | {
|
package/dist/vue/index.js
CHANGED
|
@@ -5743,6 +5743,7 @@ var serverMessageToAction = (message) => {
|
|
|
5743
5743
|
partial: message.partial,
|
|
5744
5744
|
scenarioId: message.scenarioId,
|
|
5745
5745
|
sessionId: message.sessionId,
|
|
5746
|
+
sessionMetadata: message.sessionMetadata,
|
|
5746
5747
|
status: message.status,
|
|
5747
5748
|
turns: message.turns,
|
|
5748
5749
|
type: "replay"
|
|
@@ -5750,6 +5751,7 @@ var serverMessageToAction = (message) => {
|
|
|
5750
5751
|
case "session":
|
|
5751
5752
|
return {
|
|
5752
5753
|
sessionId: message.sessionId,
|
|
5754
|
+
sessionMetadata: message.sessionMetadata,
|
|
5753
5755
|
scenarioId: message.scenarioId,
|
|
5754
5756
|
status: message.status,
|
|
5755
5757
|
type: "session"
|
|
@@ -6775,6 +6777,7 @@ var createInitialState = () => ({
|
|
|
6775
6777
|
call: null,
|
|
6776
6778
|
error: null,
|
|
6777
6779
|
isConnected: false,
|
|
6780
|
+
sessionMetadata: null,
|
|
6778
6781
|
scenarioId: null,
|
|
6779
6782
|
partial: "",
|
|
6780
6783
|
reconnect: createInitialReconnectState(),
|
|
@@ -6890,6 +6893,7 @@ var createVoiceStreamStore = () => {
|
|
|
6890
6893
|
} : state.reconnect,
|
|
6891
6894
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
6892
6895
|
sessionId: action.sessionId,
|
|
6896
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
6893
6897
|
status: action.status,
|
|
6894
6898
|
turns: [...action.turns]
|
|
6895
6899
|
};
|
|
@@ -6901,6 +6905,7 @@ var createVoiceStreamStore = () => {
|
|
|
6901
6905
|
scenarioId: action.scenarioId ?? state.scenarioId,
|
|
6902
6906
|
isConnected: action.status === "active",
|
|
6903
6907
|
sessionId: action.sessionId,
|
|
6908
|
+
sessionMetadata: action.sessionMetadata ?? state.sessionMetadata,
|
|
6904
6909
|
status: action.status
|
|
6905
6910
|
};
|
|
6906
6911
|
break;
|
|
@@ -7007,6 +7012,9 @@ var createVoiceStream = (path, options = {}) => {
|
|
|
7007
7012
|
get scenarioId() {
|
|
7008
7013
|
return store.getSnapshot().scenarioId;
|
|
7009
7014
|
},
|
|
7015
|
+
get sessionMetadata() {
|
|
7016
|
+
return store.getSnapshot().sessionMetadata;
|
|
7017
|
+
},
|
|
7010
7018
|
start,
|
|
7011
7019
|
get partial() {
|
|
7012
7020
|
return store.getSnapshot().partial;
|
|
@@ -7055,6 +7063,7 @@ function useVoiceStream(path, options = {}) {
|
|
|
7055
7063
|
const partial = ref13("");
|
|
7056
7064
|
const reconnect = shallowRef16(stream.reconnect);
|
|
7057
7065
|
const sessionId = ref13(stream.sessionId);
|
|
7066
|
+
const sessionMetadata = shallowRef16(stream.sessionMetadata);
|
|
7058
7067
|
const status = ref13(stream.status);
|
|
7059
7068
|
const turns = shallowRef16([]);
|
|
7060
7069
|
const sync = () => {
|
|
@@ -7066,6 +7075,7 @@ function useVoiceStream(path, options = {}) {
|
|
|
7066
7075
|
partial.value = stream.partial;
|
|
7067
7076
|
reconnect.value = stream.reconnect;
|
|
7068
7077
|
sessionId.value = stream.sessionId;
|
|
7078
|
+
sessionMetadata.value = stream.sessionMetadata;
|
|
7069
7079
|
status.value = stream.status;
|
|
7070
7080
|
turns.value = [...stream.turns];
|
|
7071
7081
|
};
|
|
@@ -7089,6 +7099,7 @@ function useVoiceStream(path, options = {}) {
|
|
|
7089
7099
|
reconnect,
|
|
7090
7100
|
sendAudio: (audio) => stream.sendAudio(audio),
|
|
7091
7101
|
sessionId,
|
|
7102
|
+
sessionMetadata,
|
|
7092
7103
|
status,
|
|
7093
7104
|
turns
|
|
7094
7105
|
};
|
|
@@ -7566,6 +7577,7 @@ var createInitialState2 = (stream) => ({
|
|
|
7566
7577
|
reconnect: stream.reconnect,
|
|
7567
7578
|
recordingError: null,
|
|
7568
7579
|
sessionId: stream.sessionId,
|
|
7580
|
+
sessionMetadata: stream.sessionMetadata,
|
|
7569
7581
|
scenarioId: stream.scenarioId,
|
|
7570
7582
|
status: stream.status,
|
|
7571
7583
|
turns: [...stream.turns]
|
|
@@ -7595,6 +7607,7 @@ var createVoiceController = (path, options = {}) => {
|
|
|
7595
7607
|
partial: stream.partial,
|
|
7596
7608
|
reconnect: stream.reconnect,
|
|
7597
7609
|
sessionId: stream.sessionId,
|
|
7610
|
+
sessionMetadata: stream.sessionMetadata,
|
|
7598
7611
|
scenarioId: stream.scenarioId,
|
|
7599
7612
|
status: stream.status,
|
|
7600
7613
|
turns: [...stream.turns]
|
|
@@ -7701,6 +7714,9 @@ var createVoiceController = (path, options = {}) => {
|
|
|
7701
7714
|
get sessionId() {
|
|
7702
7715
|
return state.sessionId;
|
|
7703
7716
|
},
|
|
7717
|
+
get sessionMetadata() {
|
|
7718
|
+
return state.sessionMetadata;
|
|
7719
|
+
},
|
|
7704
7720
|
get scenarioId() {
|
|
7705
7721
|
return state.scenarioId;
|
|
7706
7722
|
},
|
|
@@ -22,6 +22,7 @@ export declare function useVoiceStream<TResult = unknown>(path: string, options?
|
|
|
22
22
|
reconnect: import("vue").ShallowRef<import("..").VoiceReconnectClientState, import("..").VoiceReconnectClientState>;
|
|
23
23
|
sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
|
|
24
24
|
sessionId: import("vue").Ref<string | null, string | null>;
|
|
25
|
+
sessionMetadata: import("vue").ShallowRef<Record<string, unknown> | null, Record<string, unknown> | null>;
|
|
25
26
|
status: import("vue").Ref<import("..").VoiceSessionStatus | "idle", import("..").VoiceSessionStatus | "idle">;
|
|
26
27
|
turns: import("vue").ShallowRef<VoiceTurnRecord<TResult>[], VoiceTurnRecord<TResult>[]>;
|
|
27
28
|
};
|