@livekit/agents 1.2.1 → 1.2.2
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/audio.cjs +10 -0
- package/dist/audio.cjs.map +1 -1
- package/dist/audio.d.cts +1 -1
- package/dist/audio.d.ts +1 -1
- package/dist/audio.d.ts.map +1 -1
- package/dist/audio.js +10 -0
- package/dist/audio.js.map +1 -1
- package/dist/inference/api_protos.d.cts +26 -26
- package/dist/inference/api_protos.d.ts +26 -26
- package/dist/inference/tts.cjs +14 -1
- package/dist/inference/tts.cjs.map +1 -1
- package/dist/inference/tts.d.ts.map +1 -1
- package/dist/inference/tts.js +24 -3
- package/dist/inference/tts.js.map +1 -1
- package/dist/ipc/job_proc_lazy_main.cjs +7 -2
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/job_proc_lazy_main.js +7 -2
- package/dist/ipc/job_proc_lazy_main.js.map +1 -1
- package/dist/ipc/supervised_proc.cjs +4 -1
- package/dist/ipc/supervised_proc.cjs.map +1 -1
- package/dist/ipc/supervised_proc.d.ts.map +1 -1
- package/dist/ipc/supervised_proc.js +4 -1
- package/dist/ipc/supervised_proc.js.map +1 -1
- package/dist/ipc/supervised_proc.test.cjs +82 -0
- package/dist/ipc/supervised_proc.test.cjs.map +1 -1
- package/dist/ipc/supervised_proc.test.js +82 -0
- package/dist/ipc/supervised_proc.test.js.map +1 -1
- package/dist/job.cjs +2 -1
- package/dist/job.cjs.map +1 -1
- package/dist/job.d.ts.map +1 -1
- package/dist/job.js +2 -1
- package/dist/job.js.map +1 -1
- package/dist/utils.cjs +28 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +18 -0
- package/dist/utils.d.ts +18 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +25 -0
- package/dist/utils.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/voice/agent_activity.cjs +10 -0
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +11 -0
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_session.cjs +1 -1
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +4 -2
- package/dist/voice/agent_session.d.ts +4 -2
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +1 -1
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/events.cjs +11 -0
- package/dist/voice/events.cjs.map +1 -1
- package/dist/voice/events.d.cts +12 -1
- package/dist/voice/events.d.ts +12 -1
- package/dist/voice/events.d.ts.map +1 -1
- package/dist/voice/events.js +10 -0
- package/dist/voice/events.js.map +1 -1
- package/dist/voice/generation.cjs +23 -4
- package/dist/voice/generation.cjs.map +1 -1
- package/dist/voice/generation.d.ts.map +1 -1
- package/dist/voice/generation.js +32 -5
- package/dist/voice/generation.js.map +1 -1
- package/dist/voice/generation_tts_timeout.test.cjs +85 -0
- package/dist/voice/generation_tts_timeout.test.cjs.map +1 -0
- package/dist/voice/generation_tts_timeout.test.js +84 -0
- package/dist/voice/generation_tts_timeout.test.js.map +1 -0
- package/dist/voice/index.cjs.map +1 -1
- package/dist/voice/index.d.cts +1 -1
- package/dist/voice/index.d.ts +1 -1
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/index.js +3 -1
- package/dist/voice/index.js.map +1 -1
- package/dist/voice/recorder_io/recorder_io.cjs +1 -2
- package/dist/voice/recorder_io/recorder_io.cjs.map +1 -1
- package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -1
- package/dist/voice/recorder_io/recorder_io.js +2 -3
- package/dist/voice/recorder_io/recorder_io.js.map +1 -1
- package/dist/voice/report.cjs +1 -1
- package/dist/voice/report.cjs.map +1 -1
- package/dist/voice/report.js +1 -1
- package/dist/voice/report.js.map +1 -1
- package/dist/voice/report.test.cjs +70 -0
- package/dist/voice/report.test.cjs.map +1 -1
- package/dist/voice/report.test.js +70 -0
- package/dist/voice/report.test.js.map +1 -1
- package/dist/voice/room_io/room_io.cjs +5 -1
- package/dist/voice/room_io/room_io.cjs.map +1 -1
- package/dist/voice/room_io/room_io.d.ts.map +1 -1
- package/dist/voice/room_io/room_io.js +5 -1
- package/dist/voice/room_io/room_io.js.map +1 -1
- package/dist/voice/room_io/room_io.test.cjs +18 -0
- package/dist/voice/room_io/room_io.test.cjs.map +1 -0
- package/dist/voice/room_io/room_io.test.js +17 -0
- package/dist/voice/room_io/room_io.test.js.map +1 -0
- package/package.json +1 -1
- package/src/audio.ts +12 -1
- package/src/inference/tts.ts +25 -3
- package/src/ipc/job_proc_lazy_main.ts +7 -2
- package/src/ipc/supervised_proc.test.ts +96 -0
- package/src/ipc/supervised_proc.ts +8 -1
- package/src/job.ts +1 -0
- package/src/utils.ts +43 -0
- package/src/voice/agent_activity.ts +11 -0
- package/src/voice/agent_session.ts +13 -7
- package/src/voice/events.ts +21 -0
- package/src/voice/generation.ts +35 -8
- package/src/voice/generation_tts_timeout.test.ts +112 -0
- package/src/voice/index.ts +6 -1
- package/src/voice/recorder_io/recorder_io.ts +2 -7
- package/src/voice/report.test.ts +78 -0
- package/src/voice/report.ts +1 -1
- package/src/voice/room_io/room_io.test.ts +38 -0
- package/src/voice/room_io/room_io.ts +7 -2
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 LiveKit, Inc.
|
|
2
|
+
//
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { IdentityTransform } from '../../stream/identity_transform.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Regression tests proving WritableStream.close() rejects when the writer is
|
|
9
|
+
* already closed or errored — the exact scenario RoomIO.close() guards against
|
|
10
|
+
* with a try/catch.
|
|
11
|
+
*
|
|
12
|
+
* RoomIO holds a WritableStreamDefaultWriter for user transcript forwarding.
|
|
13
|
+
* During teardown, the writer may already be closed or errored (e.g. a
|
|
14
|
+
* concurrent write failed during speech interruption). Without the guard,
|
|
15
|
+
* close() throws ERR_INVALID_STATE and crashes teardown.
|
|
16
|
+
*/
|
|
17
|
+
describe('RoomIO WritableStream close guard', () => {
|
|
18
|
+
it('should reject when closing an already-closed writer', async () => {
|
|
19
|
+
const transform = new IdentityTransform<string>();
|
|
20
|
+
const writer = transform.writable.getWriter();
|
|
21
|
+
|
|
22
|
+
await writer.close();
|
|
23
|
+
|
|
24
|
+
// Proves the bug: second close() rejects — RoomIO.close() must guard this.
|
|
25
|
+
await expect(writer.close()).rejects.toThrow();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('should reject when closing a writer on an errored stream', async () => {
|
|
29
|
+
const transform = new IdentityTransform<string>();
|
|
30
|
+
const writer = transform.writable.getWriter();
|
|
31
|
+
|
|
32
|
+
// Force the stream into an errored state
|
|
33
|
+
await writer.abort(new Error('simulated write failure'));
|
|
34
|
+
|
|
35
|
+
// Proves the bug: close() on errored writer rejects — RoomIO.close() must guard this.
|
|
36
|
+
await expect(writer.close()).rejects.toThrow();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -529,8 +529,13 @@ export class RoomIO {
|
|
|
529
529
|
await this.initTask?.cancelAndWait();
|
|
530
530
|
|
|
531
531
|
// Close stream FIRST so reader.read() in forwardUserTranscript can exit.
|
|
532
|
-
//
|
|
533
|
-
|
|
532
|
+
// Writer may already be closed or errored if a concurrent write failed
|
|
533
|
+
// during session teardown (e.g. speech interruption race). Safe to ignore.
|
|
534
|
+
try {
|
|
535
|
+
await this.userTranscriptWriter.close();
|
|
536
|
+
} catch (e) {
|
|
537
|
+
this.logger.debug({ error: e }, 'userTranscriptWriter already closed or errored');
|
|
538
|
+
}
|
|
534
539
|
await this.forwardUserTranscriptTask?.cancelAndWait();
|
|
535
540
|
|
|
536
541
|
await this.audioInput?.close();
|