@llmrtc/llmrtc-web-client 1.0.0 → 1.1.0
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/CHANGELOG.md +34 -0
- package/NOTICE +7 -0
- package/dist/connection-state.d.ts +4 -0
- package/dist/connection-state.js +7 -1
- package/dist/connection-state.js.map +1 -1
- package/dist/index.d.ts +33 -2
- package/dist/index.js +292 -77
- package/dist/index.js.map +1 -1
- package/package.json +13 -5
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @llmrtc/llmrtc-web-client
|
|
2
|
+
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8ff3ea3: Correctness release: make the advertised behavior actually work end to end.
|
|
8
|
+
- Core: system prompt is always sent and pinned outside the history window;
|
|
9
|
+
runTurnStream accepts an AbortSignal (barge-in); onLLMEnd has real
|
|
10
|
+
guardrail semantics; concurrent turns serialize correctly; clearHistory
|
|
11
|
+
transitions clear conversation history; PlaybookHooks are wired; tool
|
|
12
|
+
executor abort/ordering fixes; deep tool-argument validation.
|
|
13
|
+
- Providers: multi-turn tool calling now works across OpenAI, Anthropic,
|
|
14
|
+
Gemini, Bedrock, OpenRouter, LMStudio, and Ollama (history replay,
|
|
15
|
+
parallel tool results, streaming accumulation); malformed tool arguments
|
|
16
|
+
are flagged instead of silently becoming {}; Bedrock defaults to an
|
|
17
|
+
invocable inference profile; Ollama NDJSON streaming is buffered
|
|
18
|
+
correctly; ElevenLabs format mapping fixed; Whisper uploads are named by
|
|
19
|
+
their actual container.
|
|
20
|
+
- Backend: turns serialize per connection and barge-in aborts the in-flight
|
|
21
|
+
turn in any phase; session reconnection binds the recovered history;
|
|
22
|
+
Metered TURN credentials refresh on a TTL; start()/stop() lifecycle
|
|
23
|
+
fixes; real-time audio pacing.
|
|
24
|
+
- Web client: vision frames are delivered in time to reach the turn;
|
|
25
|
+
session resume follows the protocol and actually restores history;
|
|
26
|
+
close()/failure releases the microphone and camera; frame capture works
|
|
27
|
+
outside Chromium; non-WebRTC fallback (sendAudio/ttsChunk) is usable.
|
|
28
|
+
- Packaging: packages resolve under require(), clean checkouts build first
|
|
29
|
+
try, and npm tarballs ship the NOTICE file.
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- Updated dependencies [8ff3ea3]
|
|
34
|
+
- @llmrtc/llmrtc-core@1.1.0
|
package/NOTICE
ADDED
|
@@ -82,6 +82,10 @@ export declare class ConnectionStateMachine extends EventEmitter<ConnectionState
|
|
|
82
82
|
* Reset the state machine to initial state.
|
|
83
83
|
*/
|
|
84
84
|
reset(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Reset only the retry counter (e.g. when the user restarts the client).
|
|
87
|
+
*/
|
|
88
|
+
resetRetries(): void;
|
|
85
89
|
/**
|
|
86
90
|
* Update the configuration.
|
|
87
91
|
*/
|
package/dist/connection-state.js
CHANGED
|
@@ -116,7 +116,7 @@ export class ConnectionStateMachine extends EventEmitter {
|
|
|
116
116
|
ConnectionState.FAILED
|
|
117
117
|
],
|
|
118
118
|
[ConnectionState.FAILED]: [ConnectionState.CONNECTING], // Allow retry from failed
|
|
119
|
-
[ConnectionState.CLOSED]: [] //
|
|
119
|
+
[ConnectionState.CLOSED]: [ConnectionState.CONNECTING] // Allow restart after close()
|
|
120
120
|
};
|
|
121
121
|
return validTransitions[from]?.includes(to) ?? false;
|
|
122
122
|
}
|
|
@@ -148,6 +148,12 @@ export class ConnectionStateMachine extends EventEmitter {
|
|
|
148
148
|
this._state = ConnectionState.DISCONNECTED;
|
|
149
149
|
this._retryCount = 0;
|
|
150
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Reset only the retry counter (e.g. when the user restarts the client).
|
|
153
|
+
*/
|
|
154
|
+
resetRetries() {
|
|
155
|
+
this._retryCount = 0;
|
|
156
|
+
}
|
|
151
157
|
/**
|
|
152
158
|
* Update the configuration.
|
|
153
159
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-state.js","sourceRoot":"","sources":["../src/connection-state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"connection-state.js","sourceRoot":"","sources":["../src/connection-state.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -38,10 +38,12 @@ export interface StageChangePayload {
|
|
|
38
38
|
reason: string;
|
|
39
39
|
}
|
|
40
40
|
export type ClientEvents = {
|
|
41
|
-
transcript: (text: string) => void;
|
|
41
|
+
transcript: (text: string, isFinal?: boolean) => void;
|
|
42
42
|
llm: (text: string) => void;
|
|
43
43
|
llmChunk: (text: string) => void;
|
|
44
44
|
tts: (audio: ArrayBuffer, format: string) => void;
|
|
45
|
+
/** Streaming TTS audio when no WebRTC audio track is available */
|
|
46
|
+
ttsChunk: (audio: ArrayBuffer, format: string, sampleRate?: number) => void;
|
|
45
47
|
ttsTrack: (stream: MediaStream) => void;
|
|
46
48
|
ttsStart: () => void;
|
|
47
49
|
ttsComplete: () => void;
|
|
@@ -54,6 +56,8 @@ export type ClientEvents = {
|
|
|
54
56
|
error: (error: ClientError) => void;
|
|
55
57
|
stateChange: (state: ConnectionState) => void;
|
|
56
58
|
reconnecting: (attempt: number, maxAttempts: number) => void;
|
|
59
|
+
/** Fired after a reconnect completes; indicates whether history was recovered */
|
|
60
|
+
reconnected: (historyRecovered: boolean) => void;
|
|
57
61
|
};
|
|
58
62
|
export interface FrameCaptureController {
|
|
59
63
|
stop(): void;
|
|
@@ -72,6 +76,12 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
|
|
|
72
76
|
private heartbeatTimeout?;
|
|
73
77
|
private missedHeartbeats;
|
|
74
78
|
private reconnectTimeout?;
|
|
79
|
+
/**
|
|
80
|
+
* Incremented on every cleanup. An in-flight reconnect attempt compares
|
|
81
|
+
* its captured epoch after each await; a mismatch means close() (or a
|
|
82
|
+
* newer attempt) superseded it and it must not resurrect the connection.
|
|
83
|
+
*/
|
|
84
|
+
private connectionEpoch;
|
|
75
85
|
/** ICE servers received from server in ready message */
|
|
76
86
|
private serverIceServers;
|
|
77
87
|
private audioTrack?;
|
|
@@ -93,6 +103,11 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
|
|
|
93
103
|
*/
|
|
94
104
|
start(): Promise<void>;
|
|
95
105
|
private connect;
|
|
106
|
+
/**
|
|
107
|
+
* Send a reconnect request and wait for the ack.
|
|
108
|
+
* Resolves with whether the server recovered the previous history.
|
|
109
|
+
*/
|
|
110
|
+
private requestSessionResume;
|
|
96
111
|
private connectWebSocket;
|
|
97
112
|
private waitForReady;
|
|
98
113
|
private setupPeerEventHandlers;
|
|
@@ -101,6 +116,14 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
|
|
|
101
116
|
private handlePayload;
|
|
102
117
|
private handleWebSocketClose;
|
|
103
118
|
private handleConnectionError;
|
|
119
|
+
/**
|
|
120
|
+
* Terminal failure: release every live resource (most importantly the
|
|
121
|
+
* microphone and camera - a failed client must not keep recording) and
|
|
122
|
+
* report the error.
|
|
123
|
+
*/
|
|
124
|
+
private enterFailedState;
|
|
125
|
+
/** Stop microphone and capture tracks and drop the references. */
|
|
126
|
+
private stopMediaTracks;
|
|
104
127
|
private scheduleReconnect;
|
|
105
128
|
private attemptReconnect;
|
|
106
129
|
private startHeartbeat;
|
|
@@ -111,6 +134,13 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
|
|
|
111
134
|
*/
|
|
112
135
|
shareAudio(stream: MediaStream): Promise<AudioController>;
|
|
113
136
|
private waitForStableSignaling;
|
|
137
|
+
/**
|
|
138
|
+
* Send a complete audio utterance over the signaling channel.
|
|
139
|
+
* This is the non-WebRTC fallback path (e.g. when the server reports
|
|
140
|
+
* WEBRTC_UNAVAILABLE): the server transcribes the buffer and replies
|
|
141
|
+
* over the WebSocket, streaming TTS via 'ttsChunk'/'tts' events.
|
|
142
|
+
*/
|
|
143
|
+
sendAudio(audio: ArrayBuffer, attachments?: AttachmentPayload[]): void;
|
|
114
144
|
/**
|
|
115
145
|
* Send vision attachments to include with next speech segment.
|
|
116
146
|
*/
|
|
@@ -119,7 +149,8 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
|
|
|
119
149
|
shareVideo(stream: MediaStream, intervalMs?: number): FrameCaptureController;
|
|
120
150
|
shareScreen(stream: MediaStream, intervalMs?: number): FrameCaptureController;
|
|
121
151
|
/**
|
|
122
|
-
* Close the connection.
|
|
152
|
+
* Close the connection and release all media (microphone included).
|
|
153
|
+
* The client can be started again with start().
|
|
123
154
|
*/
|
|
124
155
|
close(): void;
|
|
125
156
|
private cleanup;
|
package/dist/index.js
CHANGED
|
@@ -75,6 +75,17 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
75
75
|
writable: true,
|
|
76
76
|
value: void 0
|
|
77
77
|
});
|
|
78
|
+
/**
|
|
79
|
+
* Incremented on every cleanup. An in-flight reconnect attempt compares
|
|
80
|
+
* its captured epoch after each await; a mismatch means close() (or a
|
|
81
|
+
* newer attempt) superseded it and it must not resurrect the connection.
|
|
82
|
+
*/
|
|
83
|
+
Object.defineProperty(this, "connectionEpoch", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
configurable: true,
|
|
86
|
+
writable: true,
|
|
87
|
+
value: 0
|
|
88
|
+
});
|
|
78
89
|
/** ICE servers received from server in ready message */
|
|
79
90
|
Object.defineProperty(this, "serverIceServers", {
|
|
80
91
|
enumerable: true,
|
|
@@ -139,9 +150,15 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
139
150
|
* Start the connection to the server.
|
|
140
151
|
*/
|
|
141
152
|
async start() {
|
|
142
|
-
|
|
153
|
+
const restartableStates = [
|
|
154
|
+
ConnectionState.DISCONNECTED,
|
|
155
|
+
ConnectionState.FAILED,
|
|
156
|
+
ConnectionState.CLOSED
|
|
157
|
+
];
|
|
158
|
+
if (!restartableStates.includes(this.stateMachine.state)) {
|
|
143
159
|
throw new Error('Client already started or connecting');
|
|
144
160
|
}
|
|
161
|
+
this.stateMachine.resetRetries();
|
|
145
162
|
this.stateMachine.transition(ConnectionState.CONNECTING);
|
|
146
163
|
try {
|
|
147
164
|
await this.connect();
|
|
@@ -152,12 +169,19 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
152
169
|
throw error;
|
|
153
170
|
}
|
|
154
171
|
}
|
|
155
|
-
async connect() {
|
|
172
|
+
async connect(resumeSessionId) {
|
|
156
173
|
// 1. Establish WebSocket
|
|
157
174
|
await this.connectWebSocket();
|
|
158
175
|
// 2. Wait for ready message with session ID and ICE servers
|
|
159
176
|
await this.waitForReady();
|
|
160
|
-
// 3.
|
|
177
|
+
// 3. Resume the previous session BEFORE negotiating the peer, so the
|
|
178
|
+
// server binds the recovered conversation to this connection
|
|
179
|
+
// (protocol order: ready -> reconnect -> reconnect-ack -> offer)
|
|
180
|
+
if (resumeSessionId) {
|
|
181
|
+
const recovered = await this.requestSessionResume(resumeSessionId);
|
|
182
|
+
this.emit('reconnected', recovered);
|
|
183
|
+
}
|
|
184
|
+
// 4. Resolve ICE servers
|
|
161
185
|
// Priority: client config > server-provided > default STUN
|
|
162
186
|
const iceServers = this.config.iceServers?.length
|
|
163
187
|
? this.config.iceServers
|
|
@@ -165,16 +189,53 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
165
189
|
? this.serverIceServers
|
|
166
190
|
: DEFAULT_ICE_SERVERS;
|
|
167
191
|
console.log('[web-client] Using', iceServers.length, 'ICE servers');
|
|
168
|
-
//
|
|
192
|
+
// 5. Create peer connection
|
|
169
193
|
this.peer = new NativePeer({ iceServers, trickle: false }, true);
|
|
170
194
|
this.setupPeerEventHandlers();
|
|
171
|
-
//
|
|
195
|
+
// 6. Create offer (triggers signal event which sends to server)
|
|
172
196
|
await this.peer.createOffer();
|
|
173
|
-
//
|
|
197
|
+
// 7. Wait for peer connection to be established
|
|
174
198
|
await this.waitForPeerConnection();
|
|
175
|
-
//
|
|
199
|
+
// 8. Start heartbeat
|
|
176
200
|
this.startHeartbeat();
|
|
177
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Send a reconnect request and wait for the ack.
|
|
204
|
+
* Resolves with whether the server recovered the previous history.
|
|
205
|
+
*/
|
|
206
|
+
requestSessionResume(sessionId) {
|
|
207
|
+
return new Promise((resolve) => {
|
|
208
|
+
const ws = this.ws;
|
|
209
|
+
if (!ws || ws.readyState !== WebSocket.OPEN) {
|
|
210
|
+
resolve(false);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const timeout = setTimeout(() => {
|
|
214
|
+
ws.removeEventListener('message', handler);
|
|
215
|
+
console.warn('[web-client] Timed out waiting for reconnect-ack');
|
|
216
|
+
resolve(false);
|
|
217
|
+
}, 5000);
|
|
218
|
+
const handler = (ev) => {
|
|
219
|
+
try {
|
|
220
|
+
const msg = JSON.parse(ev.data);
|
|
221
|
+
if (msg.type === 'reconnect-ack') {
|
|
222
|
+
clearTimeout(timeout);
|
|
223
|
+
ws.removeEventListener('message', handler);
|
|
224
|
+
if (msg.success && msg.sessionId) {
|
|
225
|
+
this.sessionId = msg.sessionId;
|
|
226
|
+
}
|
|
227
|
+
resolve(Boolean(msg.success && msg.historyRecovered));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
// Ignore parse errors
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
ws.addEventListener('message', handler);
|
|
235
|
+
console.log('[web-client] Requesting session resume:', sessionId);
|
|
236
|
+
ws.send(JSON.stringify({ type: 'reconnect', sessionId }));
|
|
237
|
+
});
|
|
238
|
+
}
|
|
178
239
|
connectWebSocket() {
|
|
179
240
|
return new Promise((resolve, reject) => {
|
|
180
241
|
console.log('[web-client] Connecting to', this.config.signallingUrl);
|
|
@@ -202,6 +263,7 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
202
263
|
waitForReady() {
|
|
203
264
|
return new Promise((resolve, reject) => {
|
|
204
265
|
const timeout = setTimeout(() => {
|
|
266
|
+
this.ws?.removeEventListener('message', handler);
|
|
205
267
|
reject(new Error('Timeout waiting for ready message'));
|
|
206
268
|
}, 10000);
|
|
207
269
|
const handler = (ev) => {
|
|
@@ -313,7 +375,14 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
313
375
|
case 'signal':
|
|
314
376
|
if (this.peer && !this.peer.destroyed) {
|
|
315
377
|
console.log('[web-client] Received answer signal');
|
|
316
|
-
this.peer.signal(msg.signal)
|
|
378
|
+
this.peer.signal(msg.signal).catch((err) => {
|
|
379
|
+
console.error('[web-client] Failed to apply signal:', err);
|
|
380
|
+
this.emit('error', {
|
|
381
|
+
code: 'SIGNALING_ERROR',
|
|
382
|
+
message: err.message,
|
|
383
|
+
recoverable: true
|
|
384
|
+
});
|
|
385
|
+
});
|
|
317
386
|
}
|
|
318
387
|
break;
|
|
319
388
|
case 'pong':
|
|
@@ -351,7 +420,7 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
351
420
|
const msg = JSON.parse(raw);
|
|
352
421
|
switch (msg.type) {
|
|
353
422
|
case 'transcript':
|
|
354
|
-
this.emit('transcript', msg.text);
|
|
423
|
+
this.emit('transcript', msg.text, msg.isFinal ?? true);
|
|
355
424
|
break;
|
|
356
425
|
case 'llm-chunk':
|
|
357
426
|
if (msg.content)
|
|
@@ -364,6 +433,11 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
364
433
|
if (msg.data)
|
|
365
434
|
this.emit('tts', base64ToArrayBuffer(msg.data), msg.format ?? 'mp3');
|
|
366
435
|
break;
|
|
436
|
+
case 'tts-chunk':
|
|
437
|
+
// Streaming TTS fallback when no WebRTC audio track exists
|
|
438
|
+
if (msg.data)
|
|
439
|
+
this.emit('ttsChunk', base64ToArrayBuffer(msg.data), msg.format ?? 'pcm', msg.sampleRate);
|
|
440
|
+
break;
|
|
367
441
|
case 'tts-start':
|
|
368
442
|
this.emit('ttsStart');
|
|
369
443
|
break;
|
|
@@ -374,10 +448,14 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
374
448
|
this.emit('ttsCancelled');
|
|
375
449
|
break;
|
|
376
450
|
case 'speech-start':
|
|
451
|
+
// Ship the current camera/screen frames now, while the utterance
|
|
452
|
+
// is still in progress - the server snapshots attachments the
|
|
453
|
+
// moment its VAD ends the turn, so sending them on speech-end
|
|
454
|
+
// arrives too late to be included
|
|
455
|
+
this.sendAttachments();
|
|
377
456
|
this.emit('speechStart');
|
|
378
457
|
break;
|
|
379
458
|
case 'speech-end':
|
|
380
|
-
this.sendAttachments();
|
|
381
459
|
this.emit('speechEnd');
|
|
382
460
|
break;
|
|
383
461
|
case 'tool-call-start':
|
|
@@ -427,33 +505,49 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
427
505
|
this.scheduleReconnect();
|
|
428
506
|
}
|
|
429
507
|
else {
|
|
430
|
-
this.
|
|
431
|
-
this.emit('error', {
|
|
432
|
-
code: 'CONNECTION_ERROR',
|
|
433
|
-
message: error.message,
|
|
434
|
-
recoverable: false
|
|
435
|
-
});
|
|
508
|
+
this.enterFailedState('CONNECTION_ERROR', error.message);
|
|
436
509
|
}
|
|
437
510
|
}
|
|
511
|
+
/**
|
|
512
|
+
* Terminal failure: release every live resource (most importantly the
|
|
513
|
+
* microphone and camera - a failed client must not keep recording) and
|
|
514
|
+
* report the error.
|
|
515
|
+
*/
|
|
516
|
+
enterFailedState(code, message) {
|
|
517
|
+
this.stopMediaTracks();
|
|
518
|
+
this.cleanup(false);
|
|
519
|
+
this.stateMachine.transition(ConnectionState.FAILED);
|
|
520
|
+
this.emit('error', { code, message, recoverable: false });
|
|
521
|
+
}
|
|
522
|
+
/** Stop microphone and capture tracks and drop the references. */
|
|
523
|
+
stopMediaTracks() {
|
|
524
|
+
this.audioTrack?.stop();
|
|
525
|
+
this.audioStream?.getTracks().forEach((t) => t.stop());
|
|
526
|
+
this.audioTrack = undefined;
|
|
527
|
+
this.audioStream = undefined;
|
|
528
|
+
this.audioSender = undefined;
|
|
529
|
+
this.videoCapture?.stop();
|
|
530
|
+
this.screenCapture?.stop();
|
|
531
|
+
this.videoCapture = undefined;
|
|
532
|
+
this.screenCapture = undefined;
|
|
533
|
+
}
|
|
438
534
|
scheduleReconnect() {
|
|
439
535
|
if (!this.stateMachine.reconnectionEnabled) {
|
|
440
|
-
this.
|
|
536
|
+
this.enterFailedState('CONNECTION_ERROR', 'Connection lost');
|
|
441
537
|
return;
|
|
442
538
|
}
|
|
443
539
|
// Clear any existing reconnect timeout
|
|
444
540
|
if (this.reconnectTimeout) {
|
|
445
541
|
clearTimeout(this.reconnectTimeout);
|
|
446
542
|
}
|
|
543
|
+
// The old connection's heartbeat must not fire during backoff - it
|
|
544
|
+
// would burn retries against a socket we already know is dead
|
|
545
|
+
this.stopHeartbeat();
|
|
447
546
|
this.stateMachine.transition(ConnectionState.RECONNECTING);
|
|
448
547
|
const delay = this.stateMachine.getNextRetryDelay();
|
|
449
548
|
if (delay === null) {
|
|
450
549
|
// Max retries exceeded
|
|
451
|
-
this.
|
|
452
|
-
this.emit('error', {
|
|
453
|
-
code: 'RECONNECTION_FAILED',
|
|
454
|
-
message: 'Maximum reconnection attempts exceeded',
|
|
455
|
-
recoverable: false
|
|
456
|
-
});
|
|
550
|
+
this.enterFailedState('RECONNECTION_FAILED', 'Maximum reconnection attempts exceeded');
|
|
457
551
|
return;
|
|
458
552
|
}
|
|
459
553
|
console.log(`[web-client] Reconnecting in ${delay}ms (attempt ${this.stateMachine.retryCount}/${this.stateMachine.maxRetries})`);
|
|
@@ -461,31 +555,45 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
461
555
|
this.reconnectTimeout = setTimeout(() => this.attemptReconnect(), delay);
|
|
462
556
|
}
|
|
463
557
|
async attemptReconnect() {
|
|
558
|
+
if (this.stateMachine.state === ConnectionState.CLOSED ||
|
|
559
|
+
this.stateMachine.state === ConnectionState.FAILED) {
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
464
562
|
// Save old session ID BEFORE cleanup/connect (connect() will set a new sessionId)
|
|
465
563
|
const oldSessionId = this.sessionId;
|
|
466
564
|
// Clean up existing connections but keep session ID
|
|
467
565
|
this.cleanup(false);
|
|
566
|
+
const epoch = this.connectionEpoch;
|
|
468
567
|
this.stateMachine.transition(ConnectionState.CONNECTING);
|
|
469
568
|
try {
|
|
470
|
-
|
|
471
|
-
//
|
|
472
|
-
|
|
473
|
-
//
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
569
|
+
// connect() resumes the old session between ready and the offer, so
|
|
570
|
+
// the recovered history is bound before any turn can run
|
|
571
|
+
await this.connect(oldSessionId);
|
|
572
|
+
// close() may have run while we were connecting; don't resurrect a
|
|
573
|
+
// connection the user has already hung up
|
|
574
|
+
if (this.connectionEpoch !== epoch) {
|
|
575
|
+
console.log('[web-client] Reconnect superseded, tearing down');
|
|
576
|
+
this.peer?.destroy();
|
|
577
|
+
this.peer = null;
|
|
578
|
+
if (this.ws) {
|
|
579
|
+
this.ws.onclose = null;
|
|
580
|
+
this.ws.close();
|
|
581
|
+
this.ws = null;
|
|
582
|
+
}
|
|
583
|
+
this.stopHeartbeat();
|
|
584
|
+
return;
|
|
480
585
|
}
|
|
481
586
|
// Re-add audio track if we had one
|
|
482
|
-
if (this.audioStream && this.audioTrack) {
|
|
587
|
+
if (this.audioStream && this.audioTrack && this.audioTrack.readyState === 'live') {
|
|
483
588
|
console.log('[web-client] Re-adding audio track after reconnect');
|
|
484
589
|
this.audioSender = this.peer?.addTrack(this.audioTrack, this.audioStream);
|
|
485
590
|
}
|
|
486
591
|
this.stateMachine.transition(ConnectionState.CONNECTED);
|
|
487
592
|
}
|
|
488
593
|
catch (error) {
|
|
594
|
+
if (this.connectionEpoch !== epoch) {
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
489
597
|
console.error('[web-client] Reconnect attempt failed:', error);
|
|
490
598
|
this.scheduleReconnect();
|
|
491
599
|
}
|
|
@@ -498,7 +606,8 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
498
606
|
this.heartbeatTimeout = setTimeout(() => {
|
|
499
607
|
this.missedHeartbeats++;
|
|
500
608
|
console.warn(`[web-client] Missed heartbeat (${this.missedHeartbeats}/${MAX_MISSED_HEARTBEATS})`);
|
|
501
|
-
if (this.missedHeartbeats >= MAX_MISSED_HEARTBEATS
|
|
609
|
+
if (this.missedHeartbeats >= MAX_MISSED_HEARTBEATS &&
|
|
610
|
+
this.stateMachine.state === ConnectionState.CONNECTED) {
|
|
502
611
|
console.warn('[web-client] Too many missed heartbeats, reconnecting');
|
|
503
612
|
this.scheduleReconnect();
|
|
504
613
|
}
|
|
@@ -525,43 +634,77 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
525
634
|
if (!this.peer?.connected) {
|
|
526
635
|
throw new Error('Peer not connected');
|
|
527
636
|
}
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
if (!this.audioTrack) {
|
|
637
|
+
const track = stream.getAudioTracks()[0];
|
|
638
|
+
if (!track) {
|
|
531
639
|
throw new Error('No audio track in stream');
|
|
532
640
|
}
|
|
641
|
+
// Sharing again replaces the previous share; two live mic tracks would
|
|
642
|
+
// confuse the server's single-track VAD pipeline
|
|
643
|
+
if (this.audioSender && this.peer) {
|
|
644
|
+
console.log('[web-client] Replacing existing audio share');
|
|
645
|
+
this.peer.removeTrack(this.audioSender);
|
|
646
|
+
this.audioTrack?.stop();
|
|
647
|
+
}
|
|
648
|
+
this.audioStream = stream;
|
|
649
|
+
this.audioTrack = track;
|
|
533
650
|
console.log('[web-client] Adding audio track to peer connection');
|
|
534
|
-
|
|
651
|
+
const sender = this.peer.addTrack(track, stream);
|
|
652
|
+
this.audioSender = sender;
|
|
535
653
|
// Wait for signaling to stabilize
|
|
536
654
|
await this.waitForStableSignaling();
|
|
537
655
|
console.log('[web-client] Audio track added - VAD handled server-side');
|
|
538
656
|
return {
|
|
539
657
|
stop: async () => {
|
|
540
658
|
console.log('[web-client] Stopping audio sharing');
|
|
541
|
-
if
|
|
542
|
-
|
|
659
|
+
// Only touch client state if this share is still the active one
|
|
660
|
+
if (this.audioSender === sender && this.peer) {
|
|
661
|
+
this.peer.removeTrack(sender);
|
|
543
662
|
this.audioSender = undefined;
|
|
663
|
+
this.audioTrack = undefined;
|
|
664
|
+
this.audioStream = undefined;
|
|
544
665
|
}
|
|
545
|
-
|
|
666
|
+
track.stop();
|
|
546
667
|
stream.getTracks().forEach((t) => t.stop());
|
|
547
|
-
this.audioTrack = undefined;
|
|
548
|
-
this.audioStream = undefined;
|
|
549
668
|
}
|
|
550
669
|
};
|
|
551
670
|
}
|
|
552
|
-
waitForStableSignaling() {
|
|
553
|
-
return new Promise((resolve) => {
|
|
671
|
+
waitForStableSignaling(timeoutMs = 10000) {
|
|
672
|
+
return new Promise((resolve, reject) => {
|
|
673
|
+
const deadline = Date.now() + timeoutMs;
|
|
554
674
|
const checkState = () => {
|
|
555
|
-
if (this.peer
|
|
675
|
+
if (!this.peer || this.peer.destroyed) {
|
|
676
|
+
reject(new Error('Peer closed while waiting for stable signaling'));
|
|
677
|
+
return;
|
|
678
|
+
}
|
|
679
|
+
if (this.peer.signalingState === 'stable') {
|
|
556
680
|
resolve();
|
|
681
|
+
return;
|
|
557
682
|
}
|
|
558
|
-
|
|
559
|
-
|
|
683
|
+
if (Date.now() >= deadline) {
|
|
684
|
+
reject(new Error('Timed out waiting for stable signaling'));
|
|
685
|
+
return;
|
|
560
686
|
}
|
|
687
|
+
setTimeout(checkState, 100);
|
|
561
688
|
};
|
|
562
689
|
setTimeout(checkState, 100);
|
|
563
690
|
});
|
|
564
691
|
}
|
|
692
|
+
/**
|
|
693
|
+
* Send a complete audio utterance over the signaling channel.
|
|
694
|
+
* This is the non-WebRTC fallback path (e.g. when the server reports
|
|
695
|
+
* WEBRTC_UNAVAILABLE): the server transcribes the buffer and replies
|
|
696
|
+
* over the WebSocket, streaming TTS via 'ttsChunk'/'tts' events.
|
|
697
|
+
*/
|
|
698
|
+
sendAudio(audio, attachments) {
|
|
699
|
+
if (this.ws?.readyState !== WebSocket.OPEN) {
|
|
700
|
+
throw new Error('Signaling channel not open');
|
|
701
|
+
}
|
|
702
|
+
this.ws.send(JSON.stringify({
|
|
703
|
+
type: 'audio',
|
|
704
|
+
data: arrayBufferToBase64(audio),
|
|
705
|
+
attachments: attachments ?? this.gatherAttachments()
|
|
706
|
+
}));
|
|
707
|
+
}
|
|
565
708
|
/**
|
|
566
709
|
* Send vision attachments to include with next speech segment.
|
|
567
710
|
*/
|
|
@@ -594,20 +737,22 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
594
737
|
return ctrl;
|
|
595
738
|
}
|
|
596
739
|
/**
|
|
597
|
-
* Close the connection.
|
|
740
|
+
* Close the connection and release all media (microphone included).
|
|
741
|
+
* The client can be started again with start().
|
|
598
742
|
*/
|
|
599
743
|
close() {
|
|
600
744
|
this.stateMachine.transition(ConnectionState.CLOSED);
|
|
745
|
+
this.stopMediaTracks();
|
|
601
746
|
this.cleanup(true);
|
|
602
747
|
}
|
|
603
748
|
cleanup(fullCleanup) {
|
|
749
|
+
// Invalidate any in-flight reconnect attempt
|
|
750
|
+
this.connectionEpoch++;
|
|
604
751
|
this.stopHeartbeat();
|
|
605
752
|
if (this.reconnectTimeout) {
|
|
606
753
|
clearTimeout(this.reconnectTimeout);
|
|
607
754
|
this.reconnectTimeout = undefined;
|
|
608
755
|
}
|
|
609
|
-
this.videoCapture?.stop();
|
|
610
|
-
this.screenCapture?.stop();
|
|
611
756
|
this.peer?.destroy();
|
|
612
757
|
this.peer = null;
|
|
613
758
|
if (this.ws) {
|
|
@@ -616,16 +761,30 @@ export class LLMRTCWebClient extends EventEmitter {
|
|
|
616
761
|
this.ws = null;
|
|
617
762
|
}
|
|
618
763
|
if (fullCleanup) {
|
|
764
|
+
// Frame captures are local (frames travel over the data channel), so
|
|
765
|
+
// they survive reconnects; they only stop on close()/failure
|
|
766
|
+
this.videoCapture?.stop();
|
|
767
|
+
this.screenCapture?.stop();
|
|
768
|
+
this.videoCapture = undefined;
|
|
769
|
+
this.screenCapture = undefined;
|
|
619
770
|
this.sessionId = null;
|
|
620
771
|
this.serverIceServers = null;
|
|
621
772
|
this.audioTrack = undefined;
|
|
622
773
|
this.audioStream = undefined;
|
|
623
774
|
this.audioSender = undefined;
|
|
624
|
-
this.stateMachine.reset();
|
|
625
775
|
}
|
|
626
776
|
}
|
|
627
777
|
}
|
|
628
778
|
// Helper functions
|
|
779
|
+
function arrayBufferToBase64(buffer) {
|
|
780
|
+
const bytes = new Uint8Array(buffer);
|
|
781
|
+
let binary = '';
|
|
782
|
+
const chunkSize = 0x8000;
|
|
783
|
+
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
784
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
|
|
785
|
+
}
|
|
786
|
+
return btoa(binary);
|
|
787
|
+
}
|
|
629
788
|
function base64ToArrayBuffer(base64) {
|
|
630
789
|
const binary = atob(base64);
|
|
631
790
|
const bytes = new Uint8Array(binary.length);
|
|
@@ -636,15 +795,22 @@ function base64ToArrayBuffer(base64) {
|
|
|
636
795
|
}
|
|
637
796
|
export async function recordOnce(durationMs = 4000) {
|
|
638
797
|
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
639
|
-
|
|
798
|
+
// Pick a container the browser actually supports (Safari records mp4/aac,
|
|
799
|
+
// Chromium and Firefox record webm)
|
|
800
|
+
const mimeType = ['audio/webm', 'audio/mp4', 'audio/ogg'].find((t) => typeof MediaRecorder.isTypeSupported === 'function' ? MediaRecorder.isTypeSupported(t) : true);
|
|
801
|
+
const recorder = new MediaRecorder(stream, mimeType ? { mimeType } : undefined);
|
|
640
802
|
const chunks = [];
|
|
641
|
-
return new Promise((resolve) => {
|
|
803
|
+
return new Promise((resolve, reject) => {
|
|
642
804
|
recorder.ondataavailable = (e) => {
|
|
643
805
|
if (e.data.size > 0)
|
|
644
806
|
chunks.push(e.data);
|
|
645
807
|
};
|
|
808
|
+
recorder.onerror = (e) => {
|
|
809
|
+
stream.getTracks().forEach((t) => t.stop());
|
|
810
|
+
reject(e.error ?? new Error('Recording failed'));
|
|
811
|
+
};
|
|
646
812
|
recorder.onstop = async () => {
|
|
647
|
-
const blob = new Blob(chunks, { type: 'audio/webm' });
|
|
813
|
+
const blob = new Blob(chunks, { type: recorder.mimeType || 'audio/webm' });
|
|
648
814
|
const buf = await blob.arrayBuffer();
|
|
649
815
|
stream.getTracks().forEach((t) => t.stop());
|
|
650
816
|
resolve(buf);
|
|
@@ -660,49 +826,98 @@ export async function captureScreenFrame() {
|
|
|
660
826
|
track.stop();
|
|
661
827
|
return image;
|
|
662
828
|
}
|
|
663
|
-
|
|
664
|
-
const
|
|
665
|
-
|
|
829
|
+
function createFrameGrabber(stream) {
|
|
830
|
+
const track = stream.getVideoTracks()[0];
|
|
831
|
+
if (!track) {
|
|
832
|
+
throw new Error('No video track in stream');
|
|
833
|
+
}
|
|
666
834
|
const canvas = document.createElement('canvas');
|
|
667
|
-
canvas.width = bitmap.width;
|
|
668
|
-
canvas.height = bitmap.height;
|
|
669
835
|
const ctx = canvas.getContext('2d');
|
|
670
|
-
if (!ctx)
|
|
836
|
+
if (!ctx) {
|
|
671
837
|
throw new Error('canvas context missing');
|
|
672
|
-
|
|
673
|
-
const
|
|
674
|
-
|
|
838
|
+
}
|
|
839
|
+
const ImageCaptureCtor = window.ImageCapture;
|
|
840
|
+
if (ImageCaptureCtor) {
|
|
841
|
+
const capture = new ImageCaptureCtor(track);
|
|
842
|
+
return {
|
|
843
|
+
grab: async () => {
|
|
844
|
+
const bitmap = await capture.grabFrame();
|
|
845
|
+
canvas.width = bitmap.width;
|
|
846
|
+
canvas.height = bitmap.height;
|
|
847
|
+
ctx.drawImage(bitmap, 0, 0);
|
|
848
|
+
return canvas.toDataURL('image/jpeg', 0.6);
|
|
849
|
+
},
|
|
850
|
+
dispose: () => {
|
|
851
|
+
// Nothing to release
|
|
852
|
+
}
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
// Fallback: hidden video element
|
|
856
|
+
const video = document.createElement('video');
|
|
857
|
+
video.muted = true;
|
|
858
|
+
video.playsInline = true;
|
|
859
|
+
video.srcObject = stream;
|
|
860
|
+
const playing = video.play().catch(() => {
|
|
861
|
+
// Autoplay of a muted, detached video element is permitted everywhere;
|
|
862
|
+
// failures surface on grab() as zero dimensions
|
|
863
|
+
});
|
|
864
|
+
return {
|
|
865
|
+
grab: async () => {
|
|
866
|
+
await playing;
|
|
867
|
+
if (!video.videoWidth || !video.videoHeight) {
|
|
868
|
+
throw new Error('Video frame not ready');
|
|
869
|
+
}
|
|
870
|
+
canvas.width = video.videoWidth;
|
|
871
|
+
canvas.height = video.videoHeight;
|
|
872
|
+
ctx.drawImage(video, 0, 0);
|
|
873
|
+
return canvas.toDataURL('image/jpeg', 0.6);
|
|
874
|
+
},
|
|
875
|
+
dispose: () => {
|
|
876
|
+
video.pause();
|
|
877
|
+
video.srcObject = null;
|
|
878
|
+
}
|
|
879
|
+
};
|
|
880
|
+
}
|
|
881
|
+
async function grabFrame(track) {
|
|
882
|
+
const grabber = createFrameGrabber(new MediaStream([track]));
|
|
883
|
+
try {
|
|
884
|
+
return await grabber.grab();
|
|
885
|
+
}
|
|
886
|
+
finally {
|
|
887
|
+
grabber.dispose();
|
|
888
|
+
}
|
|
675
889
|
}
|
|
676
890
|
function startFrameCapture(stream, intervalMs) {
|
|
677
|
-
const track = stream.getVideoTracks()[0];
|
|
678
891
|
let stopped = false;
|
|
679
|
-
const canvas = document.createElement('canvas');
|
|
680
|
-
const ctx = canvas.getContext('2d');
|
|
681
892
|
let lastFrame = null;
|
|
893
|
+
let consecutiveFailures = 0;
|
|
894
|
+
const grabber = createFrameGrabber(stream);
|
|
682
895
|
const tick = async () => {
|
|
683
896
|
if (stopped)
|
|
684
897
|
return;
|
|
685
898
|
try {
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
canvas.width = bitmap.width;
|
|
689
|
-
canvas.height = bitmap.height;
|
|
690
|
-
ctx?.drawImage(bitmap, 0, 0);
|
|
691
|
-
lastFrame = canvas.toDataURL('image/jpeg', 0.6);
|
|
899
|
+
lastFrame = await grabber.grab();
|
|
900
|
+
consecutiveFailures = 0;
|
|
692
901
|
}
|
|
693
902
|
catch (err) {
|
|
694
|
-
|
|
903
|
+
consecutiveFailures++;
|
|
904
|
+
if (consecutiveFailures === 5) {
|
|
905
|
+
console.warn('[web-client] Frame capture failing repeatedly; no frames will be attached:', err);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
if (!stopped) {
|
|
909
|
+
timer = window.setTimeout(tick, intervalMs);
|
|
695
910
|
}
|
|
696
|
-
timer = window.setTimeout(tick, intervalMs);
|
|
697
911
|
};
|
|
698
912
|
let timer = window.setTimeout(tick, intervalMs);
|
|
699
913
|
return {
|
|
700
914
|
stop: () => {
|
|
701
915
|
stopped = true;
|
|
702
916
|
window.clearTimeout(timer);
|
|
917
|
+
grabber.dispose();
|
|
703
918
|
stream.getTracks().forEach((t) => t.stop());
|
|
704
919
|
},
|
|
705
|
-
getLastFrame: () => lastFrame
|
|
920
|
+
getLastFrame: () => (stopped ? null : lastFrame)
|
|
706
921
|
};
|
|
707
922
|
}
|
|
708
923
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llmrtc/llmrtc-web-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Browser client SDK for @llmrtc/LLMRTC",
|
|
5
5
|
"homepage": "https://www.llmrtc.org",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
12
13
|
"import": "./dist/index.js",
|
|
13
|
-
"
|
|
14
|
-
}
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./package.json": "./package.json"
|
|
15
17
|
},
|
|
16
18
|
"repository": {
|
|
17
19
|
"type": "git",
|
|
@@ -28,7 +30,9 @@
|
|
|
28
30
|
"files": [
|
|
29
31
|
"dist",
|
|
30
32
|
"README.md",
|
|
31
|
-
"LICENSE"
|
|
33
|
+
"LICENSE",
|
|
34
|
+
"NOTICE",
|
|
35
|
+
"CHANGELOG.md"
|
|
32
36
|
],
|
|
33
37
|
"scripts": {
|
|
34
38
|
"build": "tsc -b",
|
|
@@ -36,8 +40,12 @@
|
|
|
36
40
|
"prepublishOnly": "npm run build"
|
|
37
41
|
},
|
|
38
42
|
"dependencies": {
|
|
39
|
-
"@llmrtc/llmrtc-core": "^1.
|
|
43
|
+
"@llmrtc/llmrtc-core": "^1.1.0",
|
|
40
44
|
"eventemitter3": "^5.0.1",
|
|
41
45
|
"zod": "^3.23.8"
|
|
46
|
+
},
|
|
47
|
+
"sideEffects": false,
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=20"
|
|
42
50
|
}
|
|
43
51
|
}
|