@framers/agentos 0.13.78 → 0.13.79

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 (31) hide show
  1. package/dist/io/voice-pipeline/AcousticEndpointDetector.d.ts +2 -0
  2. package/dist/io/voice-pipeline/AcousticEndpointDetector.d.ts.map +1 -1
  3. package/dist/io/voice-pipeline/AcousticEndpointDetector.js +1 -0
  4. package/dist/io/voice-pipeline/AcousticEndpointDetector.js.map +1 -1
  5. package/dist/io/voice-pipeline/HeuristicEndpointDetector.d.ts +2 -0
  6. package/dist/io/voice-pipeline/HeuristicEndpointDetector.d.ts.map +1 -1
  7. package/dist/io/voice-pipeline/HeuristicEndpointDetector.js +4 -0
  8. package/dist/io/voice-pipeline/HeuristicEndpointDetector.js.map +1 -1
  9. package/dist/io/voice-pipeline/ListenSession.d.ts +111 -0
  10. package/dist/io/voice-pipeline/ListenSession.d.ts.map +1 -0
  11. package/dist/io/voice-pipeline/ListenSession.js +242 -0
  12. package/dist/io/voice-pipeline/ListenSession.js.map +1 -0
  13. package/dist/io/voice-pipeline/ReconnectingSTT.d.ts +90 -0
  14. package/dist/io/voice-pipeline/ReconnectingSTT.d.ts.map +1 -0
  15. package/dist/io/voice-pipeline/ReconnectingSTT.js +318 -0
  16. package/dist/io/voice-pipeline/ReconnectingSTT.js.map +1 -0
  17. package/dist/io/voice-pipeline/env-constructor.d.ts +17 -9
  18. package/dist/io/voice-pipeline/env-constructor.d.ts.map +1 -1
  19. package/dist/io/voice-pipeline/env-constructor.js +6 -2
  20. package/dist/io/voice-pipeline/env-constructor.js.map +1 -1
  21. package/dist/io/voice-pipeline/index.d.ts +6 -0
  22. package/dist/io/voice-pipeline/index.d.ts.map +1 -1
  23. package/dist/io/voice-pipeline/index.js +7 -0
  24. package/dist/io/voice-pipeline/index.js.map +1 -1
  25. package/dist/io/voice-pipeline/providers/StreamingSTTChain.d.ts +9 -5
  26. package/dist/io/voice-pipeline/providers/StreamingSTTChain.d.ts.map +1 -1
  27. package/dist/io/voice-pipeline/providers/StreamingSTTChain.js +44 -8
  28. package/dist/io/voice-pipeline/providers/StreamingSTTChain.js.map +1 -1
  29. package/dist/io/voice-pipeline/types.d.ts +6 -0
  30. package/dist/io/voice-pipeline/types.d.ts.map +1 -1
  31. package/package.json +1 -1
@@ -0,0 +1,318 @@
1
+ /**
2
+ * @module voice-pipeline/ReconnectingSTT
3
+ *
4
+ * One streaming transcriber, reconnected when its session errors or closes:
5
+ * the last seconds of audio are replayed into the new session before the
6
+ * frames that arrived meanwhile, a replayed duplicate is dropped, each new
7
+ * session's clock is moved onto the one session timeline, and the caller
8
+ * hears `stt:reconnected` and `stt:gap`. After the cap, `error` then `close`.
9
+ * A chain of several providers fails over instead ({@link StreamingSTTChain});
10
+ * this wraps a chain of one.
11
+ */
12
+ import { EventEmitter } from 'node:events';
13
+ import { AudioRingBuffer } from './AudioRingBuffer.js';
14
+ import { TranscriptDedupe } from './TranscriptDedupe.js';
15
+ const frameMs = (f) => (f.samples.length / f.sampleRate) * 1000;
16
+ /**
17
+ * An {@link IStreamingSTT} over one provider whose session is reconnected.
18
+ *
19
+ * An `error` or `close` of the provider's session that the caller did not ask
20
+ * for opens a new session of the same provider, at most
21
+ * `maxAttemptsPerMinute` times in any sixty seconds. The new session hears the
22
+ * buffered audio first (the last `ringBufferCapacityMs`, when there is at least
23
+ * `minReplayMs` of it), then the frames pushed while it opened, then live
24
+ * audio. Its `startMs` and `endMs` are moved onto one timeline, the audio
25
+ * pushed since the session began, and a final that repeats one already
26
+ * emitted over the same audio is dropped. Only finals with finite start and end
27
+ * bounds and a positive duration enter the dedupe history; others pass through.
28
+ * Queue overflow leaves a gap after the replay, preserving the original times
29
+ * of both replayed and retained audio. Each reconnect emits
30
+ * `stt:reconnected` ({@link SttReconnectedEvent}) and `stt:gap`
31
+ * ({@link SttGapEvent}). Past the cap the session emits `error`, then `close`.
32
+ *
33
+ * The session forwards `transcript`, `vad`, `speech_start`, `speech_end`,
34
+ * `usage` and `warning` from the provider's sessions; `usage` comes from every
35
+ * one of them, a replaced one too, since a session reports its audio as it
36
+ * closes. `flush()` during a reconnect waits for the replacement, replay and
37
+ * queued audio before flushing it. A close during that flush, or after it with
38
+ * no further provider activity or pushed audio, ends the stream without a
39
+ * reconnect. Activity after a completed flush makes a later close a failure.
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const stt = new ReconnectingSTT(new DeepgramStreamingSTT({ apiKey: process.env.DEEPGRAM_API_KEY! }));
44
+ * const session = await stt.startSession({ language: 'en-US' });
45
+ * session.on('stt:gap', ({ lostMs }: SttGapEvent) => console.log(`the transcriber was away for ${lostMs} ms`));
46
+ * ```
47
+ */
48
+ export class ReconnectingSTT {
49
+ /**
50
+ * @param inner - The provider each session opens, again on every reconnect.
51
+ * @param options - The replay buffer, the attempt cap, the queue and the clock.
52
+ */
53
+ constructor(inner, options = {}) {
54
+ this.inner = inner;
55
+ this.providerId = `reconnecting:${inner.providerId}`;
56
+ this.capacityMs = options.ringBufferCapacityMs ?? 3000;
57
+ this.minReplayMs = options.minReplayMs ?? 400;
58
+ this.maxAttempts = options.maxAttemptsPerMinute ?? 3;
59
+ this.queueCapacityMs = options.queueCapacityMs ?? 2000;
60
+ this.clock = options.clock ?? Date.now;
61
+ }
62
+ /** Whether the inner provider has a session open. */
63
+ get isStreaming() {
64
+ return this.inner.isStreaming;
65
+ }
66
+ /**
67
+ * Opens a session of the inner provider behind a session that reconnects it.
68
+ *
69
+ * @param config - Passed to the inner provider for the first session and for every reconnect.
70
+ * @returns The session, with a read-only `droppedFrames`: the queued frames dropped during reconnects so far.
71
+ * @throws {Error} When the first session fails to open; a session that fails to open on a reconnect is retried
72
+ * within the cap.
73
+ */
74
+ async startSession(config) {
75
+ const facade = new EventEmitter();
76
+ const ring = new AudioRingBuffer({ capacityMs: this.capacityMs, sampleRate: 16000 });
77
+ const dedupe = new TranscriptDedupe();
78
+ const attempts = [];
79
+ const queue = [];
80
+ let queuedMs = 0;
81
+ let droppedQueuedMs = 0;
82
+ let dropped = 0;
83
+ let current = await this.inner.startSession(config);
84
+ // the connection generation: the dedupe skips observations of one provider id, so each session gets an id of its own
85
+ let generation = 0;
86
+ // where each session's clock 0 sits on the session timeline (the audio pushed by the caller since the start)
87
+ let pushedMs = 0;
88
+ let offsetMs = 0;
89
+ let reconnecting = false;
90
+ let reconnectPromise;
91
+ let closedByCaller = false;
92
+ let ended = false;
93
+ // The flush is the last operation until audio or provider activity follows it.
94
+ let flushed = false;
95
+ let flushing;
96
+ /** Ends the session once: `close`, after which nothing but `usage` is forwarded. */
97
+ const finish = () => {
98
+ if (ended)
99
+ return;
100
+ ended = true;
101
+ facade.emit('close');
102
+ };
103
+ const attach = (session, sessionGeneration, sessionOffsetMs, replayedMs = 0, gapMs = 0) => {
104
+ const providerId = `${this.inner.providerId}#${sessionGeneration}`;
105
+ const activity = () => {
106
+ if (session === current)
107
+ flushed = false;
108
+ };
109
+ // End bounds are exclusive: an utterance ending exactly at the replay
110
+ // boundary still belongs to the audio before the gap.
111
+ const mapTime = (time, end = false) => time + sessionOffsetMs + ((end ? time > replayedMs : time >= replayedMs) ? gapMs : 0);
112
+ session.on('transcript', (raw) => {
113
+ if (ended)
114
+ return;
115
+ activity();
116
+ const evt = {
117
+ ...raw,
118
+ ...(raw.startMs !== undefined ? { startMs: mapTime(raw.startMs) } : {}),
119
+ ...(raw.endMs !== undefined ? { endMs: mapTime(raw.endMs, true) } : {}),
120
+ };
121
+ if (evt.isFinal && evt.startMs !== undefined && evt.endMs !== undefined && Number.isFinite(evt.startMs) && Number.isFinite(evt.endMs) && evt.endMs > evt.startMs) {
122
+ const r = dedupe.evaluate({ provider: providerId, text: evt.text, audioStartMs: evt.startMs, audioEndMs: evt.endMs, isFinal: true });
123
+ if (r.isDuplicate)
124
+ return;
125
+ }
126
+ facade.emit('transcript', evt);
127
+ });
128
+ for (const name of ['vad', 'speech_start', 'speech_end']) {
129
+ session.on(name, (...args) => {
130
+ if (ended)
131
+ return;
132
+ activity();
133
+ facade.emit(name, ...args);
134
+ });
135
+ }
136
+ // from every session, a replaced or ended one too: a session reports the audio of its connections as it closes
137
+ session.on('usage', (usage) => {
138
+ activity();
139
+ facade.emit('usage', usage);
140
+ });
141
+ session.on('warning', (warning) => {
142
+ if (ended)
143
+ return;
144
+ activity();
145
+ // Listening here must not silence a warning: a provider session prints one nobody listens for, so the
146
+ // session prints it when its own caller does not listen either.
147
+ if (facade.listenerCount('warning') > 0)
148
+ facade.emit('warning', warning);
149
+ else
150
+ console.warn(`[${this.inner.providerId}] ${warning.message}`);
151
+ });
152
+ session.on('error', (err) => {
153
+ if (closedByCaller || session !== current)
154
+ return;
155
+ activity();
156
+ void reconnect(err);
157
+ });
158
+ session.on('close', () => {
159
+ if (closedByCaller || session !== current || reconnecting)
160
+ return;
161
+ if (flushed || flushing === session) {
162
+ // the provider sent its last final and ended its stream, as the caller's flush asked
163
+ finish();
164
+ return;
165
+ }
166
+ void reconnect(undefined);
167
+ });
168
+ };
169
+ const giveUp = (err) => {
170
+ if (ended)
171
+ return;
172
+ ended = true;
173
+ // the provider's session does not stay open behind a session that reports itself closed
174
+ try {
175
+ current.close();
176
+ }
177
+ catch {
178
+ // already gone
179
+ }
180
+ facade.emit('error', err);
181
+ facade.emit('close');
182
+ };
183
+ const runReconnect = async (err) => {
184
+ if (reconnecting || closedByCaller || ended)
185
+ return;
186
+ reconnecting = true;
187
+ const startedAt = this.clock();
188
+ const minuteAgo = startedAt - 60000;
189
+ while (attempts.length && attempts[0] < minuteAgo)
190
+ attempts.shift();
191
+ if (attempts.length >= this.maxAttempts) {
192
+ reconnecting = false;
193
+ giveUp(err ?? new Error(`${this.inner.providerId}: session ended after ${this.maxAttempts} reconnects in a minute`));
194
+ return;
195
+ }
196
+ attempts.push(startedAt);
197
+ const attempt = attempts.length;
198
+ try {
199
+ current.close();
200
+ }
201
+ catch {
202
+ // already gone
203
+ }
204
+ let next;
205
+ try {
206
+ next = await this.inner.startSession(config);
207
+ }
208
+ catch (startErr) {
209
+ reconnecting = false;
210
+ await runReconnect(startErr instanceof Error ? startErr : new Error(String(startErr)));
211
+ return;
212
+ }
213
+ if (closedByCaller) {
214
+ next.close();
215
+ reconnecting = false;
216
+ return;
217
+ }
218
+ const replay = ring.snapshot();
219
+ const bufferedMs = replay.reduce((duration, frame) => duration + frameMs(frame), 0);
220
+ const replayedMs = bufferedMs >= this.minReplayMs ? bufferedMs : 0;
221
+ // Clock zero belongs to the replay before the failure. Dropped queue
222
+ // audio shifts only the retained queue and the live audio after it.
223
+ generation += 1;
224
+ offsetMs = pushedMs - queuedMs - droppedQueuedMs - replayedMs;
225
+ current = next;
226
+ flushed = false;
227
+ attach(next, generation, offsetMs, replayedMs, droppedQueuedMs);
228
+ if (replayedMs > 0)
229
+ for (const f of replay)
230
+ next.pushAudio(f);
231
+ // After a gap the ring's old span and the retained queue are not contiguous;
232
+ // keep only the audio a later replay can place on one timeline.
233
+ if (droppedQueuedMs > 0)
234
+ ring.clear();
235
+ for (const f of queue.splice(0)) {
236
+ ring.push(f);
237
+ next.pushAudio(f);
238
+ }
239
+ queuedMs = 0;
240
+ droppedQueuedMs = 0;
241
+ reconnecting = false;
242
+ facade.emit('stt:reconnected', { attempt, replayedMs });
243
+ facade.emit('stt:gap', { attempt, lostMs: this.clock() - startedAt });
244
+ };
245
+ const reconnect = (err) => {
246
+ if (reconnecting || closedByCaller || ended)
247
+ return reconnectPromise ?? Promise.resolve();
248
+ reconnectPromise = runReconnect(err);
249
+ return reconnectPromise;
250
+ };
251
+ attach(current, generation, offsetMs);
252
+ const session = Object.assign(facade, {
253
+ pushAudio: (frame) => {
254
+ if (ended || closedByCaller)
255
+ return;
256
+ flushed = false;
257
+ flushing = undefined;
258
+ pushedMs += frameMs(frame);
259
+ if (reconnecting) {
260
+ queue.push(frame);
261
+ queuedMs += frameMs(frame);
262
+ while (queuedMs > this.queueCapacityMs && queue.length) {
263
+ const old = queue.shift();
264
+ queuedMs -= frameMs(old);
265
+ droppedQueuedMs += frameMs(old);
266
+ dropped += 1;
267
+ }
268
+ return;
269
+ }
270
+ ring.push(frame);
271
+ try {
272
+ current.pushAudio(frame);
273
+ }
274
+ catch (err) {
275
+ void reconnect(err instanceof Error ? err : new Error(String(err)));
276
+ }
277
+ },
278
+ /**
279
+ * Waits for any reconnect and its replay, then drains the adopted session. A close during the flush or
280
+ * before subsequent provider activity or audio ends the stream without reconnecting.
281
+ */
282
+ flush: async () => {
283
+ if (ended || closedByCaller)
284
+ return;
285
+ while (reconnecting && reconnectPromise)
286
+ await reconnectPromise;
287
+ if (ended || closedByCaller)
288
+ return;
289
+ const target = current;
290
+ flushed = true;
291
+ flushing = target;
292
+ try {
293
+ await target.flush();
294
+ }
295
+ finally {
296
+ if (flushing === target)
297
+ flushing = undefined;
298
+ }
299
+ },
300
+ /** Closes the live session and emits `close` once, from the facade itself: what the provider does after is ignored. */
301
+ close: () => {
302
+ if (closedByCaller)
303
+ return;
304
+ closedByCaller = true;
305
+ try {
306
+ current.close();
307
+ }
308
+ catch {
309
+ // already gone
310
+ }
311
+ finish();
312
+ },
313
+ });
314
+ Object.defineProperty(session, 'droppedFrames', { get: () => dropped, enumerable: true });
315
+ return session;
316
+ }
317
+ }
318
+ //# sourceMappingURL=ReconnectingSTT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReconnectingSTT.js","sourceRoot":"","sources":["../../../src/io/voice-pipeline/ReconnectingSTT.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAoCzD,MAAM,OAAO,GAAG,CAAC,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAEpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,eAAe;IAS1B;;;OAGG;IACH,YAA6B,KAAoB,EAAE,UAAkC,EAAE;QAA1D,UAAK,GAAL,KAAK,CAAe;QAC/C,IAAI,CAAC,UAAU,GAAG,gBAAgB,KAAK,CAAC,UAAU,EAAE,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,oBAAoB,IAAI,IAAK,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAK,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC;IACzC,CAAC;IAED,qDAAqD;IACrD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY,CAAC,MAA2B;QAC5C,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,KAAM,EAAE,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACpD,qHAAqH;QACrH,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,6GAA6G;QAC7G,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,gBAA2C,CAAC;QAChD,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,+EAA+E;QAC/E,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAyC,CAAC;QAE9C,oFAAoF;QACpF,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,IAAI,KAAK;gBAAE,OAAO;YAClB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,OAA4B,EAAE,iBAAyB,EAAE,eAAuB,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAQ,EAAE;YACnI,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAC;YACnE,MAAM,QAAQ,GAAG,GAAS,EAAE;gBAC1B,IAAI,OAAO,KAAK,OAAO;oBAAE,OAAO,GAAG,KAAK,CAAC;YAC3C,CAAC,CAAC;YACF,sEAAsE;YACtE,sDAAsD;YACtD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,GAAG,GAAG,KAAK,EAAU,EAAE,CAAC,IAAI,GAAG,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7I,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAoB,EAAE,EAAE;gBAChD,IAAI,KAAK;oBAAE,OAAO;gBAClB,QAAQ,EAAE,CAAC;gBACX,MAAM,GAAG,GAAoB;oBAC3B,GAAG,GAAG;oBACN,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvE,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE,CAAC;gBACF,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;oBACjK,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrI,IAAI,CAAC,CAAC,WAAW;wBAAE,OAAO;gBAC5B,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,CAAU,EAAE,CAAC;gBAClE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;oBACtC,IAAI,KAAK;wBAAE,OAAO;oBAClB,QAAQ,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACL,CAAC;YACD,+GAA+G;YAC/G,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;gBACrC,QAAQ,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAc,EAAE,EAAE;gBACvC,IAAI,KAAK;oBAAE,OAAO;gBAClB,QAAQ,EAAE,CAAC;gBACX,sGAAsG;gBACtG,gEAAgE;gBAChE,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;;oBACpE,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACjC,IAAI,cAAc,IAAI,OAAO,KAAK,OAAO;oBAAE,OAAO;gBAClD,QAAQ,EAAE,CAAC;gBACX,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,IAAI,cAAc,IAAI,OAAO,KAAK,OAAO,IAAI,YAAY;oBAAE,OAAO;gBAClE,IAAI,OAAO,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACpC,qFAAqF;oBACrF,MAAM,EAAE,CAAC;oBACT,OAAO;gBACT,CAAC;gBACD,KAAK,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,GAAU,EAAQ,EAAE;YAClC,IAAI,KAAK;gBAAE,OAAO;YAClB,KAAK,GAAG,IAAI,CAAC;YACb,wFAAwF;YACxF,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,EAAE,GAAsB,EAAiB,EAAE;YACnE,IAAI,YAAY,IAAI,cAAc,IAAI,KAAK;gBAAE,OAAO;YACpD,YAAY,GAAG,IAAI,CAAC;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,SAAS,GAAG,KAAM,CAAC;YACrC,OAAO,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS;gBAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpE,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxC,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,yBAAyB,IAAI,CAAC,WAAW,yBAAyB,CAAC,CAAC,CAAC;gBACrH,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;YACD,IAAI,IAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM,YAAY,CAAC,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvF,OAAO;YACT,CAAC;YACD,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,YAAY,GAAG,KAAK,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,qEAAqE;YACrE,oEAAoE;YACpE,UAAU,IAAI,CAAC,CAAC;YAChB,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,GAAG,UAAU,CAAC;YAC9D,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;YAChE,IAAI,UAAU,GAAG,CAAC;gBAAE,KAAK,MAAM,CAAC,IAAI,MAAM;oBAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9D,6EAA6E;YAC7E,gEAAgE;YAChE,IAAI,eAAe,GAAG,CAAC;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,QAAQ,GAAG,CAAC,CAAC;YACb,eAAe,GAAG,CAAC,CAAC;YACpB,YAAY,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAgC,CAAC,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,EAAwB,CAAC,CAAC;QAC9F,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,GAAsB,EAAiB,EAAE;YAC1D,IAAI,YAAY,IAAI,cAAc,IAAI,KAAK;gBAAE,OAAO,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1F,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,gBAAgB,CAAC;QAC1B,CAAC,CAAC;QAEF,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YACpC,SAAS,EAAE,CAAC,KAAiB,EAAQ,EAAE;gBACrC,IAAI,KAAK,IAAI,cAAc;oBAAE,OAAO;gBACpC,OAAO,GAAG,KAAK,CAAC;gBAChB,QAAQ,GAAG,SAAS,CAAC;gBACrB,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,YAAY,EAAE,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAClB,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC3B,OAAO,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACvD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;wBAC3B,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;wBACzB,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;wBAChC,OAAO,IAAI,CAAC,CAAC;oBACf,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,IAAI,CAAC;oBACH,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,KAAK,SAAS,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YACD;;;eAGG;YACH,KAAK,EAAE,KAAK,IAAmB,EAAE;gBAC/B,IAAI,KAAK,IAAI,cAAc;oBAAE,OAAO;gBACpC,OAAO,YAAY,IAAI,gBAAgB;oBAAE,MAAM,gBAAgB,CAAC;gBAChE,IAAI,KAAK,IAAI,cAAc;oBAAE,OAAO;gBACpC,MAAM,MAAM,GAAG,OAAO,CAAC;gBACvB,OAAO,GAAG,IAAI,CAAC;gBACf,QAAQ,GAAG,MAAM,CAAC;gBAClB,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC;wBAAS,CAAC;oBACT,IAAI,QAAQ,KAAK,MAAM;wBAAE,QAAQ,GAAG,SAAS,CAAC;gBAChD,CAAC;YACH,CAAC;YACD,uHAAuH;YACvH,KAAK,EAAE,GAAS,EAAE;gBAChB,IAAI,cAAc;oBAAE,OAAO;gBAC3B,cAAc,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC;oBACH,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;gBACD,MAAM,EAAE,CAAC;YACX,CAAC;SACF,CAAwB,CAAC;QAC1B,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -47,7 +47,9 @@ export interface VoiceProviderEnvConfig {
47
47
  * Whether the STT chain keeps a ring buffer and re-routes mid-utterance.
48
48
  * Default true. A session is then the chain's failover facade: it forwards
49
49
  * transcripts, speech events, `'usage'` and `'warning'` from its provider
50
- * sessions, and has no `flush()`.
50
+ * sessions, and its `flush()` drains the provider session in use.
51
+ * A provider close after flush and before the next frame emits one facade
52
+ * `close`; later audio is ignored and no backup starts.
51
53
  */
52
54
  enableMidUtteranceFailover?: boolean;
53
55
  /** Whether the TTS chain re-sends accumulated tokens on primary
@@ -57,10 +59,10 @@ export interface VoiceProviderEnvConfig {
57
59
  * Options for the OpenAI Realtime transcription provider, which joins the
58
60
  * STT chain when `OPENAI_API_KEY` is set (model, turn detection, rollover,
59
61
  * usage reports and the rest; the key comes from the environment). With
60
- * mid-utterance failover on, a session has no `flush()`, so a
61
- * configuration in which the caller commits each turn
62
- * (`turnDetection: null`, or a model that takes no server turn detection)
63
- * needs `enableMidUtteranceFailover: false`.
62
+ * mid-utterance failover on, a session's `flush()` reaches the provider
63
+ * session in use, so a configuration in which the caller commits each
64
+ * turn (`turnDetection: null`, or a model that takes no server turn
65
+ * detection) commits through the failover facade too.
64
66
  */
65
67
  openaiRealtime?: Omit<OpenAIRealtimeTranscriptionSTTConfig, 'apiKey'>;
66
68
  }
@@ -79,7 +81,9 @@ export interface VoiceProviderBundle {
79
81
  * with a shared circuit breaker and metrics reporter. Both chains fail over
80
82
  * mid-call by default. An STT session is then the chain's failover facade:
81
83
  * it forwards transcripts, speech events, `'usage'` and `'warning'` from its
82
- * provider sessions, and has no `flush()`.
84
+ * provider sessions, and its `flush()` drains the provider session in use.
85
+ * A provider close after flush and before the next frame emits one facade
86
+ * `close`; later audio is ignored and no backup starts.
83
87
  *
84
88
  * @param config - Environment source, preferences, failover switches and OpenAI Realtime options.
85
89
  * @returns The chains with their metrics reporter and circuit breaker.
@@ -94,8 +98,10 @@ export interface SttProviderEnvConfig {
94
98
  * Whether the chain keeps a ring buffer and re-routes mid-utterance.
95
99
  * Default false here: with failover off a session is its provider's own,
96
100
  * with `flush()` and every event the provider emits. The failover facade
97
- * forwards transcripts, speech events, `'usage'` and `'warning'`, and has
98
- * no `flush()`.
101
+ * forwards transcripts, speech events, `'usage'` and `'warning'`, and its
102
+ * `flush()` drains the provider session in use.
103
+ * A provider close after flush and before the next frame emits one facade
104
+ * `close`; later audio is ignored and no backup starts.
99
105
  */
100
106
  enableMidUtteranceFailover?: boolean;
101
107
  /**
@@ -154,7 +160,9 @@ export declare function sttEntryPricePerMinute(entry: string): number | undefine
154
160
  * it on, as in {@link createSttChainFromEnv}. With failover off a session is
155
161
  * its provider's own, with `flush()` and every event the provider emits; the
156
162
  * failover facade forwards transcripts, speech events, `'usage'` and
157
- * `'warning'`, and has no `flush()`.
163
+ * `'warning'`, and its `flush()` drains the provider session in use.
164
+ * A provider close after flush and before the next frame emits one facade
165
+ * `close`; later audio is ignored and no backup starts.
158
166
  *
159
167
  * Entries of one vendor share that vendor's provider id (every `openai`
160
168
  * entry is `openai-realtime-transcription`), so `currentProviderId`, the
@@ -1 +1 @@
1
- {"version":3,"file":"env-constructor.d.ts","sourceRoot":"","sources":["../../../src/io/voice-pipeline/env-constructor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env-constructor.d.ts","sourceRoot":"","sources":["../../../src/io/voice-pipeline/env-constructor.ts"],"names":[],"mappings":"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"}
@@ -63,7 +63,9 @@ function sttProvidersFromEnv(env, openaiRealtime = {}) {
63
63
  * with a shared circuit breaker and metrics reporter. Both chains fail over
64
64
  * mid-call by default. An STT session is then the chain's failover facade:
65
65
  * it forwards transcripts, speech events, `'usage'` and `'warning'` from its
66
- * provider sessions, and has no `flush()`.
66
+ * provider sessions, and its `flush()` drains the provider session in use.
67
+ * A provider close after flush and before the next frame emits one facade
68
+ * `close`; later audio is ignored and no backup starts.
67
69
  *
68
70
  * @param config - Environment source, preferences, failover switches and OpenAI Realtime options.
69
71
  * @returns The chains with their metrics reporter and circuit breaker.
@@ -216,7 +218,9 @@ export function sttEntryPricePerMinute(entry) {
216
218
  * it on, as in {@link createSttChainFromEnv}. With failover off a session is
217
219
  * its provider's own, with `flush()` and every event the provider emits; the
218
220
  * failover facade forwards transcripts, speech events, `'usage'` and
219
- * `'warning'`, and has no `flush()`.
221
+ * `'warning'`, and its `flush()` drains the provider session in use.
222
+ * A provider close after flush and before the next frame emits one facade
223
+ * `close`; later audio is ignored and no backup starts.
220
224
  *
221
225
  * Entries of one vendor share that vendor's provider id (every `openai`
222
226
  * entry is `openai-realtime-transcription`), so `currentProviderId`, the
@@ -1 +1 @@
1
- {"version":3,"file":"env-constructor.js","sourceRoot":"","sources":["../../../src/io/voice-pipeline/env-constructor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env-constructor.js","sourceRoot":"","sources":["../../../src/io/voice-pipeline/env-constructor.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,10 @@
43
43
  * **Agent Adapter:**
44
44
  * - {@link AgentSessionVoiceAdapter} — Wraps any AgentOS `AgentSession` as `IVoicePipelineAgentSession`.
45
45
  *
46
+ * **Listening:**
47
+ * - {@link startListenSession}: a transport's audio into a transcriber and each final into a sink as a numbered turn, with no speech output.
48
+ * - {@link ReconnectingSTT}: one transcriber whose session is reconnected, with the buffered audio replayed and replayed duplicates dropped.
49
+ *
46
50
  * ## Usage
47
51
  *
48
52
  * ```typescript
@@ -105,6 +109,8 @@ export { AcousticEndpointDetector } from './AcousticEndpointDetector.js';
105
109
  export { WebSocketStreamTransport } from './WebSocketStreamTransport.js';
106
110
  export { WebRTCStreamTransport, createWebRTCTransport } from './WebRTCStreamTransport.js';
107
111
  export { VoicePipelineOrchestrator } from './VoicePipelineOrchestrator.js';
112
+ export { startListenSession, type ListenSession, type ListenSessionOverrides, type ListenSessionStats, type ListenSessionState, type ListenEndReason } from './ListenSession.js';
113
+ export { ReconnectingSTT, type ReconnectingSTTOptions, type SttReconnectedEvent, type SttGapEvent } from './ReconnectingSTT.js';
108
114
  export { VoiceInterruptError } from './VoiceInterruptError.js';
109
115
  export { DeepgramStreamingSTT, type DeepgramStreamingSTTConfig, ElevenLabsStreamingSTT, type ElevenLabsStreamingSTTConfig, OpenAIRealtimeTranscriptionSTT, type OpenAIRealtimeTranscriptionSTTConfig, type OpenAIRealtimeTranscriptionRollover, type OpenAIRealtimeRolloverRequest, type OpenAIRealtimeTurnDetection, ElevenLabsStreamingTTS, type ElevenLabsStreamingTTSConfig, DeepgramAuraStreamingTTS, type DeepgramAuraStreamingTTSConfig, AgentSessionVoiceAdapter, StreamingSTTChain, type StreamingSTTChainOptions, type ProviderSelectedEvent, type ProviderFailedEvent, type ProviderFailoverEvent, StreamingTTSChain, type StreamingTTSChainOptions, type TTSProviderSelectedEvent, type TTSProviderFailedEvent, type TTSProviderFailoverEvent, } from './providers/index.js';
110
116
  export { BatchSTTFallback, EmptyTranscriptError, DeepgramPreRecordedBatchSTT, type DeepgramPreRecordedBatchSTTConfig, OpenAIWhisperBatchSTT, type OpenAIWhisperBatchSTTConfig, } from './providers/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/io/voice-pipeline/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/io/voice-pipeline/index.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,10 @@
43
43
  * **Agent Adapter:**
44
44
  * - {@link AgentSessionVoiceAdapter} — Wraps any AgentOS `AgentSession` as `IVoicePipelineAgentSession`.
45
45
  *
46
+ * **Listening:**
47
+ * - {@link startListenSession}: a transport's audio into a transcriber and each final into a sink as a numbered turn, with no speech output.
48
+ * - {@link ReconnectingSTT}: one transcriber whose session is reconnected, with the buffered audio replayed and replayed duplicates dropped.
49
+ *
46
50
  * ## Usage
47
51
  *
48
52
  * ```typescript
@@ -113,6 +117,9 @@ export { WebSocketStreamTransport } from './WebSocketStreamTransport.js';
113
117
  export { WebRTCStreamTransport, createWebRTCTransport } from './WebRTCStreamTransport.js';
114
118
  // Central pipeline orchestrator (state machine)
115
119
  export { VoicePipelineOrchestrator } from './VoicePipelineOrchestrator.js';
120
+ // A listen-only session and a transcriber that reconnects (TranscriptTurn and ITranscriptInputSink come from types.ts, above)
121
+ export { startListenSession } from './ListenSession.js';
122
+ export { ReconnectingSTT } from './ReconnectingSTT.js';
116
123
  // Typed error for barge-in interruptions
117
124
  export { VoiceInterruptError } from './VoiceInterruptError.js';
118
125
  // Streaming provider implementations
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/io/voice-pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGG;AAEH,wDAAwD;AACxD,8EAA8E;AAC9E,cAAc,YAAY,CAAC;AAE3B,+DAA+D;AAC/D,OAAO,EAAE,iBAAiB,EAA0B,MAAM,sBAAsB,CAAC;AAEjF,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,6CAA6C;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,2CAA2C;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,oDAAoD;AACpD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,yCAAyC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EAEpB,sBAAsB,EAEtB,8BAA8B,EAK9B,sBAAsB,EAEtB,wBAAwB,EAExB,wBAAwB,EACxB,iBAAiB,EAKjB,iBAAiB,GAKlB,MAAM,sBAAsB,CAAC;AAE9B,iDAAiD;AACjD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAE3B,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAE9B,wBAAwB;AACxB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAGpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAiC,MAAM,iBAAiB,CAAC;AACjG,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GAGxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gCAAgC,EAChC,2BAA2B,EAC3B,8BAA8B,EAC9B,6BAA6B,EAC7B,gBAAgB,EAChB,0BAA0B,GAI3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAmE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,8BAA8B,EAK9B,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,iBAAiB,GAIlB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/io/voice-pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqGG;AAEH,wDAAwD;AACxD,8EAA8E;AAC9E,cAAc,YAAY,CAAC;AAE3B,+DAA+D;AAC/D,OAAO,EAAE,iBAAiB,EAA0B,MAAM,sBAAsB,CAAC;AAEjF,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,6CAA6C;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,2CAA2C;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,oDAAoD;AACpD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,8HAA8H;AAC9H,OAAO,EAAE,kBAAkB,EAA2H,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,eAAe,EAA2E,MAAM,sBAAsB,CAAC;AAEhI,yCAAyC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EAEpB,sBAAsB,EAEtB,8BAA8B,EAK9B,sBAAsB,EAEtB,wBAAwB,EAExB,wBAAwB,EACxB,iBAAiB,EAKjB,iBAAiB,GAKlB,MAAM,sBAAsB,CAAC;AAE9B,iDAAiD;AACjD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAE3B,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAE9B,wBAAwB;AACxB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAGpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAiC,MAAM,iBAAiB,CAAC;AACjG,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GAGxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gCAAgC,EAChC,2BAA2B,EAC3B,8BAA8B,EAC9B,6BAA6B,EAC7B,gBAAgB,EAChB,0BAA0B,GAI3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAmE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,8BAA8B,EAK9B,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,iBAAiB,GAIlB,MAAM,sBAAsB,CAAC"}
@@ -44,8 +44,9 @@ export interface StreamingSTTChainOptions {
44
44
  /** When true, the chain tracks audio via a ring buffer and re-routes to
45
45
  * the next backup on mid-session failure. The session is then the
46
46
  * chain's facade: it forwards transcripts, speech events, `'usage'` and
47
- * `'warning'` from its provider sessions, and has no `flush()`.
48
- * Default: false. */
47
+ * `'warning'` from its provider sessions, and its `flush()` drains the
48
+ * provider session in use. A provider close after flush and before the next
49
+ * frame emits one facade close; later audio is ignored. Default: false. */
49
50
  enableMidUtteranceFailover?: boolean;
50
51
  /** Ring buffer capacity in ms for mid-utterance replay. Default 3000. */
51
52
  ringBufferCapacityMs?: number;
@@ -76,9 +77,12 @@ export declare class StreamingSTTChain implements IStreamingSTT {
76
77
  * for ends the session: it starts no backup, and a backup still starting
77
78
  * then is closed when it opens. The facade forwards `'transcript'`,
78
79
  * `'vad'`, `'speech_start'`, `'speech_end'`, `'usage'` and `'warning'`
79
- * from its sessions, and has `pushAudio()` and `close()` but no `flush()`:
80
- * a caller that ends turns with `flush()` runs the chain with failover
81
- * off, where the session is the provider's own.
80
+ * from its sessions, and has `pushAudio()`, `flush()` and `close()`.
81
+ * `flush()` drains the provider session in use; a close that session makes
82
+ * before the next frame is pushed is the provider ending its stream, as
83
+ * the session contract has it (a final, then `'close'`), and starts no
84
+ * backup. Both that close and the caller's close emit `'close'` once, release
85
+ * the active session, and ignore subsequent `pushAudio()` and `flush()` calls.
82
86
  */
83
87
  private wrapSession;
84
88
  private emitMetric;
@@ -1 +1 @@
1
- {"version":3,"file":"StreamingSTTChain.d.ts","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/StreamingSTTChain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D;;;;0BAIsB;IACtB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;qDACiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;AAEnD,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,SAAS,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,wBAA6B;IAQzE;gDAC4C;IAC5C,IAAI,SAAS,IAAI,SAAS,WAAW,EAAE,CAEtC;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAEK,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6D7E,OAAO,CAAC,gBAAgB;IAOxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IA4KnB,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"StreamingSTTChain.d.ts","sourceRoot":"","sources":["../../../../src/io/voice-pipeline/providers/StreamingSTTChain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D;;;;;gFAK4E;IAC5E,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;qDACiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;AAEnD,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,SAAS,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,wBAA6B;IAQzE;gDAC4C;IAC5C,IAAI,SAAS,IAAI,SAAS,WAAW,EAAE,CAEtC;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAEK,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6D7E,OAAO,CAAC,gBAAgB;IAOxB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,WAAW;IAuMnB,OAAO,CAAC,UAAU;CAGnB"}