@voicethere/client 0.17.0 → 0.18.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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.18.0] - 2026-11-01
4
+
5
+ ### Added
6
+
7
+ - Links from the agent. New session option `onAgentContent` on `connectBrowserSession`, `connectBrowserVoiceSession` and the `./node` entry receives `assistant_content` messages (sent by `@voicethere/agent` 0.22+) as `{ turnId, inReplyTo?, spoken, content: { kind: "link", url, label? } }`. Only `https:` links are reported; unknown kinds are skipped. `parseAgentContentEvent` and the `AgentContent` / `AgentContentEvent` types are exported from `.`, `./browser` and `./node`. The embed widget shows each link as a clickable line in the transcript that opens in a new tab.
8
+
9
+ ## [0.17.1] - 2026-10-30
10
+
11
+ ### Fixed
12
+
13
+ - A spoken reply interrupted before its first word was revealed (a barge-in, often the listener's speakers echoing into the mic) no longer disappears. Once the reply's audio has started, `onAgentText` and the spoken caption show at least its first sentence when the turn is interrupted, replaced by the next turn, or when the session closes or reconnects. A reply whose audio never started still shows nothing. An `agent_speaking_start` that arrives just before a turn's first `assistant_delta` now counts for that turn and its text starts revealing right away, and closing the session while a completed reply is still being revealed reports its full text.
14
+
3
15
  ## [0.17.0] - 2026-10-30
4
16
 
5
17
  ### Added
@@ -133,7 +145,7 @@
133
145
  - Session error code `SESSION_ENDED_DURING_RECONNECT` when the gateway rejects the reconnect token with HTTP 401.
134
146
  - `disconnect()` / `disconnectAsync()` send `{ "type": "client_hangup" }` (`CLIENT_HANGUP_MESSAGE_TYPE`) on the control channel before closing.
135
147
 
136
- ## 0.10.0 — 2026-10-04
148
+ ## [0.10.0] - 2026-10-04
137
149
 
138
150
  ### Changed
139
151
 
@@ -145,19 +157,19 @@
145
157
  - `startSession` failures from a rejected `POST /sessions` now include `httpStatus`.
146
158
  - Exported `widgetKeyMapUrl` and `widgetProjectBootstrapUrl` URL builders.
147
159
 
148
- ## 0.9.0 — 2026-09-26
160
+ ## [0.9.0] - 2026-09-26
149
161
 
150
162
  ### Added
151
163
 
152
164
  - **Key-only embed bootstrap** — `createVoiceThereWidgetAsync({ clientKey })` loads `{cdn}/widgets/by-key/{sha256(clientKey)}/bootstrap.json` (no `Authorization`; `credentials: "omit"`), caches the document in `sessionStorage` for repeat navigations, and merges optional published `widget` appearance. Legacy `configUrl` still fetches `config.json` only. Default hosts: `https://sessions.voicethere.io/v1` and `https://cdn.voicethere.io` (staging sessions host pairs with `https://cdn.voicethere.dev`).
153
165
 
154
- ## 0.8.3 — 2026-09-21
166
+ ## [0.8.3] - 2026-09-21
155
167
 
156
168
  ### Added
157
169
 
158
170
  - **Embed spoken chat captions** — optional `streamSpokenText` (default off) reveals incoming agent `chat_reply` text word-by-word during speech; snaps on `agent_speaking_end` and freezes on `barge_in`. Supports `chat_reply` fields `stream`, `utteranceId`, and `durationMs` on voice-control messages.
159
171
 
160
- ## 0.8.2 — 2026-09-19
172
+ ## [0.8.2] - 2026-09-19
161
173
 
162
174
  ### Added
163
175
 
@@ -171,13 +183,13 @@
171
183
  - **Embed panel UX** — opening the chat hides the launcher pill; panel header includes a close control (`data-vt-open` on the root).
172
184
  - **Embed transcript** — message bubbles replace the debug `<pre>` log; `onControlMessage` appends incoming agent/chat text.
173
185
 
174
- ## 0.8.1 — 2026-09-01
186
+ ## [0.8.1] - 2026-09-01
175
187
 
176
188
  ### Fixed
177
189
 
178
190
  - **Mic-denied synthetic fallback** — When microphone permission is denied or unavailable, the synthetic outbound track now sends inaudible looping white noise instead of silence so WebRTC is not DTX-suppressed, the runner receives `ontrack`, and the voice conversation can start. The production embed API `createVoiceThereWidget({ apiBase, projectId, clientKey, mode })` (no `configUrl`) is unchanged.
179
191
 
180
- ## 0.8.0 — 2026-08-31
192
+ ## [0.8.0] - 2026-08-31
181
193
 
182
194
  ### Added
183
195
 
@@ -188,7 +200,7 @@
188
200
  - **Embed widget CDN config** — `createVoiceThereWidgetAsync` still mounts the launcher from inline options when `configUrl` is missing, unreachable, or returns invalid JSON; warns in the console instead of rejecting the promise.
189
201
  - **Audio visualizer idle frame** — `attachAudioVisualizer().stop()` and ended MediaStream tracks now clear the canvas and draw a flat midline instead of freezing on the last analyser snapshot.
190
202
 
191
- ## 0.7.29 — 2026-08-28
203
+ ## [0.7.29] - 2026-08-28
192
204
 
193
205
  ### Added
194
206
 
@@ -203,13 +215,13 @@
203
215
 
204
216
  - **Reconnect callbacks** — `onIceRecovery`, `onReconnecting`, and `onReconnected` accept an optional 2nd arg `VoiceSessionReconnectInfo` (`reason`, effective `iceTransportPolicy`) for E2E/load-test diagnostics.
205
217
 
206
- ## 0.7.28 — 2026-08-15
218
+ ## [0.7.28] - 2026-08-15
207
219
 
208
220
  ### Fixed
209
221
 
210
222
  - Node runtime (`createNodeWebRtcRuntime`) waits for ICE gathering (`gatheringComplete` when available) before sending the SDP answer so relay candidates are in the answer. Browser default remains trickle-immediate.
211
223
 
212
- ## 0.7.27 — 2026-08-12
224
+ ## [0.7.27] - 2026-08-12
213
225
 
214
226
  ### Added
215
227
 
@@ -218,77 +230,77 @@
218
230
  - **`audioInputDeviceId`** option on connect (`deviceId: { ideal }` for initial GUM).
219
231
  - **`client/src/browser/microphone.ts`** helpers exported from `@voicethere/client/browser`.
220
232
 
221
- ## 0.7.26 — 2026-08-05
233
+ ## [0.7.26] - 2026-08-05
222
234
 
223
235
  ### Added
224
236
 
225
237
  - **ICE recovery (relay-leaning)** — before same-session auto-reconnect budget: on PeerConnection fail (or stuck ICE checking ≥12s with `nominated=0`), rebuild via signaling with `iceTransportPolicy=relay`. Uses `onIceRecovery` / `maxIceRecoveryAttempts` (default **1**) and does **not** increment `autoReconnectAttempts` or call `onReconnecting`. Set `maxIceRecoveryAttempts=0` for legacy behavior; `iceRecoveryStuckCheckingMs=0` disables proactive stuck-checking.
226
238
  - **`webrtc ice_triage`** — compact diagnostics line (selected/nominated/succeeded/failed + host/srflx/relay counts) in `formatWebRtcDiagnosticsLines` / `formatIceTriageLine`.
227
239
 
228
- ## 0.7.25 — 2026-08-03
240
+ ## [0.7.25] - 2026-08-03
229
241
 
230
242
  ### Fixed
231
243
 
232
244
  - **`session_reconnect_token`** — after updating join credentials, forward the control message to `onControlMessage` so E2E waiters and app hooks observe the token (previously returned early after internal update only).
233
245
 
234
- ## 0.7.24 — 2026-08-03
246
+ ## [0.7.24] - 2026-08-03
235
247
 
236
248
  ### Added
237
249
 
238
250
  - **`onReconnected`** — callback after same-session reconnect reaches ready again (not on first connect). Enables load/e2e mid-turn phrase resend without treating reconnect as a fresh session.
239
251
 
240
- ## 0.7.23 — 2026-08-03
252
+ ## [0.7.23] - 2026-08-03
241
253
 
242
254
  ### Added
243
255
 
244
256
  - **`session_reconnect_token`** — voice-control handler updates in-memory join credentials when the runner mints an opaque reconnect token; same-session `reconnect()` and auto-reconnect open signaling with the latest token.
245
257
  - **`forceCloseSignalingForTests()`** — test/E2E hook on `BrowserVoiceSession` to force-close the signaling WebSocket and trigger `signaling_closed` auto-reconnect.
246
258
 
247
- ## 0.7.22 — 2026-07-31
259
+ ## [0.7.22] - 2026-07-31
248
260
 
249
261
  ### Fixed
250
262
 
251
263
  - **POST `/sessions` 429 mapping** — monthly usage gate responses (`NWRTC_MONTHLY_USAGE_EXCEEDED`) now surface `MONTHLY_USAGE_EXCEEDED` instead of always `CAPACITY_EXCEEDED`.
252
264
 
253
- ## 0.7.21 — 2026-07-31
265
+ ## [0.7.21] - 2026-07-31
254
266
 
255
267
  ### Fixed
256
268
 
257
269
  - **`getConnectionState()` after idle kick** — inbound `session_close` now sets internal `connectionState` to `closed` (matching connection status), so callers polling `getConnectionState()` observe the disconnect.
258
270
 
259
- ## 0.7.20 — 2026-07-31
271
+ ## [0.7.20] - 2026-07-31
260
272
 
261
273
  ### Changed
262
274
 
263
275
  - **Deps** — `@node-webrtc-rust/{sdk,signaling}` **0.7.0** (Opus SDP omits `maxaveragebitrate` unless env set; encode default 400 kbps).
264
276
 
265
- ## 0.7.19 — 2026-07-30
277
+ ## [0.7.19] - 2026-07-30
266
278
 
267
279
  ### Fixed
268
280
 
269
281
  - **Inbound `session_close`** — idle kick and other server-initiated closes now emit a non-recoverable `session_error` (`SESSION_IDLE_TIMEOUT` or `WEBRTC_CONNECTION_CLOSED`) and stop auto-reconnect so dashboard chat does not stay "Connected".
270
282
  - **`auto_reconnect_exhausted`** — emits `WEBRTC_RECONNECT_EXHAUSTED`, marks the session terminal, and publishes a closed/not-ready connection snapshot.
271
283
 
272
- ## 0.7.18 — 2026-07-30
284
+ ## [0.7.18] - 2026-07-30
273
285
 
274
286
  ### Fixed
275
287
 
276
288
  - **Browser ICE:** send the SDP answer immediately after `setLocalDescription` and trickle candidates via `onicecandidate`, instead of waiting for `iceGatheringState === "complete"`. Waiting for gather-complete delayed CreatePermission on the runner and caused Chromium sessions (especially TURN relay) to fail with `WEBRTC_CONNECTION_FAILED` while Node clients succeeded.
277
289
  - **`waitForConnected`:** fail fast when `connectionState` / `iceConnectionState` enter `failed` or `disconnected`, instead of waiting for the full timeout (dashboard half-open recovery).
278
290
 
279
- ## 0.7.17 — 2026-07-28
291
+ ## [0.7.17] - 2026-07-28
280
292
 
281
293
  ### Changed
282
294
 
283
295
  - Treat control-channel JSON `position` as high-frequency: log at debug (with `keepalive` / `state` / `tick`) so load/redis-sync smokes stay quiet unless `LOAD_TEST_CLIENT_DEBUG=1`.
284
296
 
285
- ## 0.7.16 — 2026-07-28
297
+ ## [0.7.16] - 2026-07-28
286
298
 
287
299
  ### Changed
288
300
 
289
301
  - Stop logging `dc/control_not_open` / `dc/sync_not_open` on every failed send while channels are connecting. Open/close transitions remain single `dc/open` / `dc/close` events (avoids spam from readiness polls).
290
302
 
291
- ## 0.7.15 — 2026-07-28
303
+ ## [0.7.15] - 2026-07-28
292
304
 
293
305
  ### Added
294
306
 
@@ -299,7 +311,7 @@
299
311
 
300
312
  - Consumers that require abortable `startSession` (canonical voice soak) must install this release (or newer). Older published `0.7.14` builds do not advertise the capability.
301
313
 
302
- ## 0.7.14 — 2026-07-27
314
+ ## [0.7.14] - 2026-07-27
303
315
 
304
316
  ### Added
305
317
 
@@ -313,31 +325,31 @@
313
325
  - **Removed startup ICE PC reconstruction** — race-prone automatic peer rebuild on failed/disconnected startup was dropped. Existing same-session signaling reconnect is unchanged.
314
326
  - Diagnostic redaction covers `http(s)`, `ws(s)`, `turn(s)`, `stun` URIs, join tokens, JSON credentials, and SDP `ice-pwd`; async diagnostic handler rejections are isolated.
315
327
 
316
- ## 0.7.13 — 2026-07-26
328
+ ## [0.7.13] - 2026-07-26
317
329
 
318
330
  ### Added
319
331
 
320
332
  - **ICE candidate-pair diagnostics** — `getWebRtcDiagnostics()` / `summarizeRtcStatsReport` now resolve local/remote candidate types for every retained pair (order-independent), including failed non-selected pairs. Aggregate counts add `prflx` / unknown local candidates and total local candidate reports. Formatted lines stay redacted (no addresses, ports, URLs, or credentials).
321
333
 
322
- ## 0.7.12 — 2026-07-24
334
+ ## [0.7.12] - 2026-07-24
323
335
 
324
336
  ### Added
325
337
 
326
338
  - **`fetchSessionApi`** — retries session-service `POST`/`GET` on Envoy-style 502–504 / `upstream connect error` / connection termination (and network `fetch failed`), with short backoff. Wired into `startSession` and status polling so rolling deploys do not fail one-shot polls.
327
339
 
328
- ## 0.7.11 — 2026-07-23
340
+ ## [0.7.11] - 2026-07-23
329
341
 
330
342
  ### Changed
331
343
 
332
344
  - **Adaptive session provisioning polling** — replace fixed 1s status polls with backoff + jitter, and honor Session API `retry_after_ms` hints to cut control-plane load during wait queues.
333
345
 
334
- ## 0.7.10 — 2026-07-21
346
+ ## [0.7.10] - 2026-07-21
335
347
 
336
348
  ### Fixed
337
349
 
338
350
  - **Same-session reconnect after `WEBRTC_SDP_NEGOTIATION_FAILED`** — malformed/empty remote offers (missing `a=ice-ufrag`) now trigger signaling reconnect under the default `same-session` policy so `waitForConnected()` can recover instead of hanging until timeout (scale-up burst flake class).
339
351
 
340
- ## 0.7.9 — 2026-07-17
352
+ ## [0.7.9] - 2026-07-17
341
353
 
342
354
  ### Added
343
355
 
@@ -348,19 +360,19 @@
348
360
 
349
361
  - **`waitForConnected()` after early offer failure** — preserve non-retriable SDP handler errors via `pendingConnectFailure` so callers fail fast instead of waiting for the connect timeout.
350
362
 
351
- ## 0.7.8 — 2026-07-17
363
+ ## [0.7.8] - 2026-07-17
352
364
 
353
365
  ### Fixed
354
366
 
355
367
  - **Terminal `session_error` vs transport failure** — when the server sends `session_error` with `recoverable: false` (e.g. `AGENT_HANDLER_FAILED`), mark the session as gracefully disconnected so auto-reconnect does not overwrite the error with `WEBRTC_CONNECTION_FAILED`.
356
368
 
357
- ## 0.7.7 — 2026-07-15
369
+ ## [0.7.7] - 2026-07-15
358
370
 
359
371
  ### Changed
360
372
 
361
373
  - **Data-channel debug noise** — `keepalive`, `state`, and `tick` payloads log at `debug` instead of `info` (inbound and `sendToAgent` outbound). Staging E2E omits them unless `LOAD_TEST_CLIENT_DEBUG=1`.
362
374
 
363
- ## 0.7.6 — 2026-07-15
375
+ ## [0.7.6] - 2026-07-15
364
376
 
365
377
  ### Added
366
378
 
@@ -371,31 +383,31 @@
371
383
 
372
384
  - **`waitForConnected()` during reconnect** — preserve the connect wait promise across signaling rejoin and ignore intentional peer-connection teardown when applying a replacement server offer.
373
385
 
374
- ## 0.7.5 — 2026-07-13
386
+ ## [0.7.5] - 2026-07-13
375
387
 
376
388
  ### Changed
377
389
 
378
390
  - **`waitForConnected()` timeout** — error message includes connection phase, peer connection state, and data-channel flags for E2E/Loki triage without extra debug tooling.
379
391
 
380
- ## 0.7.4 — 2026-07-10
392
+ ## [0.7.4] - 2026-07-10
381
393
 
382
394
  ### Added
383
395
 
384
396
  - **`getWebRtcDiagnostics()`** on `BrowserVoiceSession` — ICE transport state plus `getStats()` candidate-pair / relay summary for connect failure triage in staging E2E.
385
397
 
386
- ## 0.7.3 — 2026-07-07
398
+ ## [0.7.3] - 2026-07-07
387
399
 
388
400
  ### Fixed
389
401
 
390
402
  - **`waitForIceGatheringComplete` on Node** — fall back to `onicegatheringstatechange` when `RTCPeerConnection.addEventListener` is unavailable (`@node-webrtc-rust/sdk`), fixing headless E2E load tests that use `@voicethere/client/node`.
391
403
 
392
- ## 0.7.2 — 2026-07-07
404
+ ## [0.7.2] - 2026-07-07
393
405
 
394
406
  ### Fixed
395
407
 
396
408
  - **Browser answer ICE gathering** — wait for local ICE gathering to complete before sending the SDP answer (matches agent offer and `@node-webrtc-rust/signaling` auto-negotiate), reducing first-connect `WEBRTC_CONNECTION_FAILED` when TURN relay candidates are required.
397
409
 
398
- ## 0.7.1 — 2026-07-07
410
+ ## [0.7.1] - 2026-07-07
399
411
 
400
412
  ### Added
401
413
 
@@ -412,7 +424,7 @@
412
424
 
413
425
  - **Initial signaling join** — first connect uses a dedicated join path instead of the same-session reconnect flow, avoiding spurious peer-connection resets and reconnect debug noise.
414
426
 
415
- ## 0.7.0 — 2026-07-03
427
+ ## [0.7.0] - 2026-07-03
416
428
 
417
429
  ### Added
418
430
 
@@ -426,7 +438,7 @@
426
438
 
427
439
  - **`connectBrowserSession` mic request** — `requestMic` is derived from resolved mode (`voice` and `voice+data` request mic; data-only provisioning maps to `chat` without mic).
428
440
 
429
- ## 0.6.1 — 2026-06-28
441
+ ## [0.6.1] - 2026-06-28
430
442
 
431
443
  ### Fixed
432
444
 
@@ -437,7 +449,7 @@
437
449
  - **Split binary receive callbacks** — browser voice sessions now support a dedicated `onSyncBinaryMessage` callback for `voicethere-sync`, while `onBinaryMessage` handles `voice-control` binary frames.
438
450
  - **Regression coverage** — added tests to lock callback forwarding and channel-specific binary routing.
439
451
 
440
- ## 0.6.0 — 2026-06-28
452
+ ## [0.6.0] - 2026-06-28
441
453
 
442
454
  ### Changed
443
455
 
@@ -448,13 +460,13 @@
448
460
 
449
461
  - **Boundary regression tests** — added tests that fail if browser-facing sources reintroduce `@node-webrtc-rust/sdk` imports.
450
462
 
451
- ## 0.5.7 — 2026-06-28
463
+ ## [0.5.7] - 2026-06-28
452
464
 
453
465
  ### Added
454
466
 
455
467
  - **Root connection error handler surface** — session and signaling transport errors now bubble to the process-wide root connection error handler so apps can centralize telemetry/logging without wiring `.on("error")` on every connection.
456
468
 
457
- ## 0.5.6 — 2026-06-23
469
+ ## [0.5.6] - 2026-06-23
458
470
 
459
471
  ### Added
460
472
 
@@ -464,20 +476,20 @@
464
476
 
465
477
  - **Dependencies** — `@node-webrtc-rust/signaling@0.6.2`; peer `@node-webrtc-rust/sdk` `>=0.6.2`.
466
478
 
467
- ## 0.5.5 — 2026-06-20
479
+ ## [0.5.5] - 2026-06-20
468
480
 
469
481
  ### Fixed
470
482
 
471
483
  - **`waitForConnected` after transport failure** — clear the internal connect promise when the peer connection enters `failed` or `closed` so same-session auto-reconnect and a subsequent `waitForConnected()` can succeed instead of hanging on a stale rejected promise.
472
484
  - **`micPump: "external"` Node connect** — send a short PCM kick on mic attach (before answer handling) so headless load tests emit RTP during ICE like the default silent pump.
473
485
 
474
- ## 0.5.4 — 2026-06-19
486
+ ## [0.5.4] - 2026-06-19
475
487
 
476
488
  ### Added
477
489
 
478
490
  - **`micPump`** on `connectBrowserVoiceSession` — `'silent'` (default) or `'external'` so headless load tests can pump scripted PCM via `writeSample` without racing the silent mic loop
479
491
 
480
- ## 0.5.3 — 2026-06-19
492
+ ## [0.5.3] - 2026-06-19
481
493
 
482
494
  ### Added
483
495
 
@@ -491,7 +503,7 @@
491
503
 
492
504
  - Recoverable WebRTC disconnects (`WEBRTC_CONNECTION_FAILED`, `WEBRTC_CONNECTION_CLOSED`) emit `session_error` with `recoverable: true` and trigger same-session retry when policy allows
493
505
 
494
- ## 0.5.2 — 2026-06-19
506
+ ## [0.5.2] - 2026-06-19
495
507
 
496
508
  ### Added
497
509
 
@@ -499,13 +511,21 @@
499
511
  - **`onSessionError`** on `startSession` and `connectBrowserSession` — provisioning failures, WebRTC errors, and runner `session_error` DC events
500
512
  - **`customerContext`** on voice/browser sessions — forwarded in `session_hello` for agent `errorHook` context
501
513
  - Exports from `@voicethere/client/browser`: `SESSION_ERROR_CODES`, `createLocalSessionError`, `emitSessionError`, related types
514
+ - **`sendCloseSignal(reason?)`** on browser voice sessions — asks the server to close the WebRTC leg before the client disconnects
515
+ - **`connectDataSession`** (browser and `@voicethere/client/node`) — DataChannel-only session without a microphone
516
+
517
+ ## [0.5.1] - 2026-06-18
502
518
 
503
519
  ### Fixed
504
520
 
505
- - **Node headless voice** — attach mic with `addTrack` **before** `setRemoteDescription` so the answer SDP includes `sendrecv` (required by `@node-webrtc-rust/sdk`; fixes runner mic-track timeout in staging E2E).
506
- - **Mic RTP pump** — after `connected`, send kick + silent PCM frames via `writeSample` so the server receives `ontrack` and starts VoiceAgent.
521
+ - Node headless voice (`@voicethere/client/node`): the microphone track is now attached with `addTrack` before the remote description is set, so the answer SDP includes `sendrecv`.
522
+ - After the connection is up, the Node mic sends a short kick frame and then silent PCM frames through `writeSample`, so the server receives the audio track and starts the voice agent. The pump stops when the connection leaves `connected`.
523
+
524
+ ### Changed
525
+
526
+ - Browser test harness README: documents the CORS requirements for calling the session API from the browser.
507
527
 
508
- ## 0.5.0 — 2026-06-17
528
+ ## [0.5.0] - 2026-06-17
509
529
 
510
530
  ### Added
511
531
 
@@ -513,7 +533,7 @@
513
533
  - Injectable `WebRtcRuntime` on `connectBrowserVoiceSession` for Node test harnesses
514
534
  - `waitForConnected`, `onControlMessage` on browser voice sessions
515
535
 
516
- ## 0.4.0 — 2026-06-16
536
+ ## [0.4.0] - 2026-06-16
517
537
 
518
538
  ### Added
519
539
 
@@ -521,7 +541,7 @@
521
541
  - `onBinaryMessage` callback for inbound binary frames.
522
542
  - Export `VOICE_SYNC_CHANNEL_LABEL` (matches helpers / agent sync channel).
523
543
 
524
- ## 0.3.0 — 2026-06-15
544
+ ## [0.3.0] - 2026-06-15
525
545
 
526
546
  ### Added
527
547
 
@@ -530,6 +550,6 @@
530
550
  - `templates/` — React hook, embed HTML, debug page starters
531
551
  - CI workflow and release tag publish (mirror `@voicethere/cli`)
532
552
 
533
- ## 0.1.0
553
+ ## [0.1.0]
534
554
 
535
555
  - Initial `connectVoiceSession` cloud/local signaling helper
package/README.md CHANGED
@@ -217,6 +217,31 @@ await connectBrowserSession({
217
217
 
218
218
  Agents send these events with `@voicethere/agent` 0.11+ on current runners. Older agents send none, so the callbacks simply never fire. `onControlMessage` still receives the raw payloads.
219
219
 
220
+ ## Links from the agent
221
+
222
+ Agents built on `@voicethere/agent` 0.22+ take links out of what they speak and send each one as an `assistant_content` message. Pass `onAgentContent` to show them, for example as a clickable link under the reply:
223
+
224
+ ```typescript
225
+ await connectBrowserSession({
226
+ mode: "voice",
227
+ credentials: provision.credentials,
228
+ onAgentContent: ({ turnId, spoken, content }) => {
229
+ if (content.kind !== "link") return;
230
+ const a = document.createElement("a");
231
+ a.href = content.url;
232
+ a.target = "_blank";
233
+ a.rel = "noopener noreferrer";
234
+ a.textContent = content.label ?? content.url;
235
+ appendToTurn(turnId, a);
236
+ },
237
+ });
238
+ ```
239
+
240
+ - Only `https:` links are reported. Other schemes, malformed URLs and content kinds this client does not know are skipped, and `onControlMessage` still receives the raw message.
241
+ - `spoken` is `true` when the link belongs to a voice reply. A voice turn that held only a link may have no spoken text at all.
242
+ - `parseAgentContentEvent(payload)` applies the same checks to a raw control message.
243
+ - The embed widget renders each link as its own line in the transcript and opens it in a new tab.
244
+
220
245
  ## Spoken text reveal
221
246
 
222
247
  When the agent speaks, its text arrives as `assistant_delta` (one per sentence, `spoken: true`) and `assistant_done` messages, sent before the audio is heard. Pass `onAgentText` and the session reveals that text word by word while the agent talks, instead of showing every sentence the moment it is sent.
@@ -1,6 +1,12 @@
1
- import type { AgentInterruptedEvent, AgentStateEvent } from "./types.js";
1
+ import type { AgentContentEvent, AgentInterruptedEvent, AgentStateEvent } from "./types.js";
2
2
  /** Parse a voice-control `agent_state` payload; returns null for anything else. */
3
3
  export declare function parseAgentStateEvent(payload: Record<string, unknown>): AgentStateEvent | null;
4
4
  /** Parse a voice-control `agent_interrupted` payload; returns null for anything else. */
5
5
  export declare function parseAgentInterruptedEvent(payload: Record<string, unknown>): AgentInterruptedEvent | null;
6
+ /**
7
+ * Parse an `assistant_content` payload; returns null for anything else.
8
+ * Unknown `content.kind` values and links that are not https are ignored, so
9
+ * newer agents can add kinds without breaking older clients.
10
+ */
11
+ export declare function parseAgentContentEvent(payload: Record<string, unknown>): AgentContentEvent | null;
6
12
  //# sourceMappingURL=agent-control-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-control-events.d.ts","sourceRoot":"","sources":["../src/agent-control-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAUzE,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,eAAe,GAAG,IAAI,CASxB;AAED,yFAAyF;AACzF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,qBAAqB,GAAG,IAAI,CAc9B"}
1
+ {"version":3,"file":"agent-control-events.d.ts","sourceRoot":"","sources":["../src/agent-control-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EAChB,MAAM,YAAY,CAAC;AAYpB,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,eAAe,GAAG,IAAI,CASxB;AAED,yFAAyF;AACzF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,qBAAqB,GAAG,IAAI,CAc9B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,iBAAiB,GAAG,IAAI,CA+B1B"}
@@ -5,6 +5,8 @@ const AGENT_STATES = new Set([
5
5
  "speaking",
6
6
  ]);
7
7
  const MAX_DETAIL_LENGTH = 64;
8
+ const MAX_URL_LENGTH = 2048;
9
+ const MAX_LABEL_LENGTH = 200;
8
10
  /** Parse a voice-control `agent_state` payload; returns null for anything else. */
9
11
  export function parseAgentStateEvent(payload) {
10
12
  if (payload.type !== "agent_state")
@@ -35,4 +37,44 @@ export function parseAgentInterruptedEvent(payload) {
35
37
  }
36
38
  return event;
37
39
  }
40
+ /**
41
+ * Parse an `assistant_content` payload; returns null for anything else.
42
+ * Unknown `content.kind` values and links that are not https are ignored, so
43
+ * newer agents can add kinds without breaking older clients.
44
+ */
45
+ export function parseAgentContentEvent(payload) {
46
+ if (payload.type !== "assistant_content")
47
+ return null;
48
+ if (typeof payload.turnId !== "string" || payload.turnId.length === 0) {
49
+ return null;
50
+ }
51
+ const content = payload.content;
52
+ if (!content || typeof content !== "object" || content.kind !== "link") {
53
+ return null;
54
+ }
55
+ const url = content.url;
56
+ if (typeof url !== "string" || url.length > MAX_URL_LENGTH)
57
+ return null;
58
+ let parsed;
59
+ try {
60
+ parsed = new URL(url);
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ if (parsed.protocol !== "https:")
66
+ return null;
67
+ const label = typeof content.label === "string"
68
+ ? content.label.trim().slice(0, MAX_LABEL_LENGTH)
69
+ : "";
70
+ const event = {
71
+ turnId: payload.turnId,
72
+ spoken: payload.spoken === true,
73
+ content: { kind: "link", url, ...(label ? { label } : {}) },
74
+ };
75
+ if (typeof payload.inReplyTo === "string" && payload.inReplyTo.length > 0) {
76
+ event.inReplyTo = payload.inReplyTo;
77
+ }
78
+ return event;
79
+ }
38
80
  //# sourceMappingURL=agent-control-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-control-events.js","sourceRoot":"","sources":["../src/agent-control-events.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAClC,OAAgC;IAEhC,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,KAAK,GAAoB,EAAE,KAAK,EAAE,KAAiC,EAAE,CAAC;IAC5E,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,0BAA0B,CACxC,OAAgC;IAEhC,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IACrC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAA0B;QACnC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACjC,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,IAAI;KAClD,CAAC;IACF,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"agent-control-events.js","sourceRoot":"","sources":["../src/agent-control-events.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export type ConnectBrowserSessionOptions = {
18
18
  /** The only callback that reports agent text (see {@link BrowserVoiceSessionOptions.onAgentText}). */
19
19
  onAgentText?: BrowserVoiceSessionOptions["onAgentText"];
20
20
  onAgentInterrupted?: BrowserVoiceSessionOptions["onAgentInterrupted"];
21
+ onAgentContent?: BrowserVoiceSessionOptions["onAgentContent"];
21
22
  onBinaryMessage?: BrowserVoiceSessionOptions["onBinaryMessage"];
22
23
  onSyncBinaryMessage?: BrowserVoiceSessionOptions["onSyncBinaryMessage"];
23
24
  onAgentAudioTrack?: BrowserVoiceSessionOptions["onAgentAudioTrack"];
@@ -44,8 +45,8 @@ export declare function connectDataSession(options: Omit<BrowserVoiceSessionOpti
44
45
  export type { ReconnectPolicy, VoiceSessionReconnectInfo, } from "./browser-voice-session.js";
45
46
  export { connectBrowserChatSession, VOICETHERE_CHAT_CHANNEL_LABEL, } from "./browser-chat-session.js";
46
47
  export { CLIENT_HANGUP_MESSAGE_TYPE, connectBrowserVoiceSession, VOICE_SYNC_CHANNEL_LABEL, VOICE_CONTROL_CHANNEL_LABEL, type BinaryMessageHandler, type SyncBinaryMessageHandler, type DataChannelKind, type BrowserVoiceSession, type BrowserVoiceSessionOptions, } from "./browser-voice-session.js";
47
- export { parseAgentInterruptedEvent, parseAgentStateEvent, } from "../agent-control-events.js";
48
- export type { AgentInterruptedEvent, AgentStateEvent, AgentStateName, } from "../types.js";
48
+ export { parseAgentContentEvent, parseAgentInterruptedEvent, parseAgentStateEvent, } from "../agent-control-events.js";
49
+ export type { AgentContent, AgentContentEvent, AgentInterruptedEvent, AgentStateEvent, AgentStateName, } from "../types.js";
49
50
  export { CustomerContextTooLargeError, MAX_CUSTOMER_CONTEXT_BYTES, startSession, } from "./session-provision.js";
50
51
  export { DEFAULT_SESSION_API_RETRY_DELAYS_MS, fetchSessionApi, isRetryableSessionApiBody, isRetryableSessionApiFailure, isRetryableSessionApiNetworkError, isRetryableSessionApiStatus, type FetchSessionApiOptions, type SessionApiRetryRuntime, } from "./session-api-retry.js";
51
52
  export { createLocalSessionError, emitSessionError, isSessionErrorEvent, LOCAL_SESSION_ERROR_CODES, REMOTE_SESSION_ERROR_CODES, SESSION_ERROR_CODES, type SessionErrorCode, type SessionErrorEvent, type SessionErrorHandler, } from "../session-errors.js";
@@ -1 +1 @@
1
- {"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ export async function connectBrowserSession(options) {
34
34
  spokenTextReveal: options.spokenTextReveal,
35
35
  onAgentText: options.onAgentText,
36
36
  onAgentInterrupted: options.onAgentInterrupted,
37
+ onAgentContent: options.onAgentContent,
37
38
  onBinaryMessage: options.onBinaryMessage,
38
39
  onSyncBinaryMessage: options.onSyncBinaryMessage,
39
40
  onAgentAudioTrack: options.onAgentAudioTrack,
@@ -57,7 +58,7 @@ export async function connectDataSession(options) {
57
58
  }
58
59
  export { connectBrowserChatSession, VOICETHERE_CHAT_CHANNEL_LABEL, } from "./browser-chat-session.js";
59
60
  export { CLIENT_HANGUP_MESSAGE_TYPE, connectBrowserVoiceSession, VOICE_SYNC_CHANNEL_LABEL, VOICE_CONTROL_CHANNEL_LABEL, } from "./browser-voice-session.js";
60
- export { parseAgentInterruptedEvent, parseAgentStateEvent, } from "../agent-control-events.js";
61
+ export { parseAgentContentEvent, parseAgentInterruptedEvent, parseAgentStateEvent, } from "../agent-control-events.js";
61
62
  export { CustomerContextTooLargeError, MAX_CUSTOMER_CONTEXT_BYTES, startSession, } from "./session-provision.js";
62
63
  export { DEFAULT_SESSION_API_RETRY_DELAYS_MS, fetchSessionApi, isRetryableSessionApiBody, isRetryableSessionApiFailure, isRetryableSessionApiNetworkError, isRetryableSessionApiStatus, } from "./session-api-retry.js";
63
64
  export { createLocalSessionError, emitSessionError, isSessionErrorEvent, LOCAL_SESSION_ERROR_CODES, REMOTE_SESSION_ERROR_CODES, SESSION_ERROR_CODES, } from "../session-errors.js";
@@ -1 +1 @@
1
- {"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { type AgentTextUpdate, type SpokenTextRevealMode } from "../spoken-text-
2
2
  import { type SessionErrorHandler } from "../session-errors.js";
3
3
  import type { SessionCredentials } from "./session-provision.js";
4
4
  import type { DebugConsole } from "./debug-console.js";
5
- import type { AgentInterruptedEvent, AgentStateEvent } from "../types.js";
5
+ import type { AgentContentEvent, AgentInterruptedEvent, AgentStateEvent } from "../types.js";
6
6
  import { type WebRtcConnectionStatus, type WebRtcReadinessProfile } from "./webrtc-connection-status.js";
7
7
  import { type WebRtcDiagnostics } from "./webrtc-diagnostics.js";
8
8
  import { type WebRtcRuntime } from "./webrtc-runtime.js";
@@ -116,6 +116,11 @@ export type BrowserVoiceSessionOptions = {
116
116
  onAgentState?: (event: AgentStateEvent) => void;
117
117
  /** Fired when the caller cut the agent off (`agent_interrupted` on voice-control). Older agents send none. */
118
118
  onAgentInterrupted?: (event: AgentInterruptedEvent) => void;
119
+ /**
120
+ * Fired once per `assistant_content` message: structured content (today a https link) that belongs
121
+ * to the reply with the same `turnId`. The URL is not part of the reply text. Older agents send none.
122
+ */
123
+ onAgentContent?: (event: AgentContentEvent) => void;
119
124
  /** Fired for binary frames on voice-control. */
120
125
  onBinaryMessage?: BinaryMessageHandler;
121
126
  /** Fired for binary frames on voicethere-sync. */