realtime-avatar 0.26.1 → 0.27.1

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/README.md CHANGED
@@ -222,7 +222,7 @@ all), and the `video` policy types are deliberately not one-to-one with the wire
222
222
 
223
223
  ```ts
224
224
  // calls
225
- rta.startCall({ avatarId, mode?, instructions?, context?, maxSeconds?, video?, recording?, connectionHistory?, transcript?, metadata? })
225
+ rta.startCall({ avatarId, mode?, instructions?, context?, maxSeconds?, video?, recording?, connectionHistory?, transcript?, metadata?, llm? })
226
226
  rta.endCall(sessionId, { reason? }) // free an abandoned call's slot; idempotent, never throws
227
227
  rta.leaveQueue(queueTicketId, { reason? }) // give up a queued call's place in line; idempotent, never throws
228
228
 
@@ -322,6 +322,9 @@ connects), a mute made then is kept when the call goes live, and after `end()` t
322
322
  once the call ended). While it is `blocked`, `AvatarCall` shows a "Tap to turn on sound" button,
323
323
  top-centre in a polite live region, that calls `call.startAudio()`. Pass `audioUnlockPrompt` a
324
324
  function to render your own (your words, your placement), or `false` for nothing.
325
+ The small "live" badge over the video is on by default; pass `showLiveBadge={false}` when your own
326
+ UI already shows the call's status. `AvatarVideoSurface` takes the same prop, plus `debug` to show
327
+ the live layer's resolution on the badge while you develop.
325
328
  `startAudio()` must run inside a click or tap handler; it never rejects and resolves whether
326
329
  playback is allowed afterwards.
327
330
 
@@ -350,6 +353,28 @@ a last line first.
350
353
  On the lower-level hooks, `reconnect()` redials (a double tap mints once), and so does setting
351
354
  `active` to false and back. `reset()` does not undo an end.
352
355
 
356
+ ### Waiting for the character
357
+
358
+ Joining the room is not enough to start a conversation: the character's agent must also
359
+ arrive. The shared React and React Native lifecycle allows at most 30 seconds from the first
360
+ held grant to that readiness, including automatic retries and signaling reconnects. The
361
+ existing connect watchdog (12 seconds by default) also recovers a connected room whose agent
362
+ never arrives. A transport connection alone does not reset the retry count or buy more time.
363
+
364
+ When the budget or retry count runs out, the SDK releases the session, leaves the room and
365
+ ends with `phase.reason: "error"` / `onEnded({ reason: "failed" })`. The optional `phase.code`
366
+ distinguishes `agent_timeout` from `connection_timeout`; these are client observations, not
367
+ HTTP status codes. `agent_timeout` means at least one room connected but the call never became
368
+ ready; retries may also have transport delays. `connection_timeout` means no room connected.
369
+ While connecting, `phase.waitingFor` distinguishes `agent` from `transport`.
370
+ No automatic mint follows that failure; `reconnect()` starts a fresh budget. A call that
371
+ already reached live keeps LiveKit's normal recovery of its existing room.
372
+
373
+ On `useRealtimeSession` or `useSessionLifecycle`, `readyTimeoutSeconds` changes the total
374
+ budget (positive, default 30). `connectWatchdogSeconds` changes the per-attempt wait; disabling
375
+ that watchdog with zero still leaves the total budget in force. Neither setting fabricates
376
+ media readiness or changes the application's first-video-frame gate.
377
+
353
378
  ### Optional connection details
354
379
 
355
380
  `AvatarCall` provides call status, actions and end reasons for your default UI. To show
@@ -665,7 +665,7 @@ var liveKitSessionReleaseReasonSchema = z.enum([
665
665
 
666
666
  // ../http-client/src/client.ts
667
667
  var DEFAULT_BASE_URL = "https://realtimeavatar.ai/api/v1";
668
- var SDK_VERSION = "0.26.1";
668
+ var SDK_VERSION = "0.27.1";
669
669
  var RealtimeAvatar = class {
670
670
  #apiKey;
671
671
  #baseUrl;
@@ -717,6 +717,11 @@ var RealtimeAvatar = class {
717
717
  if (options.recording !== void 0) body.recording = recordingModeSchema.parse(options.recording);
718
718
  if (options.connectionHistory !== void 0) body.connection_history = options.connectionHistory;
719
719
  if (options.clientTools) body.capabilities = ["client_tools"];
720
+ if (options.llm !== void 0) {
721
+ const { backend, model, baseUrl, token } = options.llm;
722
+ body.llm = model === void 0 ? { backend } : { backend, model };
723
+ body.external_llm = { base_url: baseUrl, token };
724
+ }
720
725
  if (options.transcript !== void 0) {
721
726
  body.transcript_webhook = { url: options.transcript.url, secret: options.transcript.secret };
722
727
  }
@@ -1,4 +1,4 @@
1
- import { sessionModeSchema, liveKitSessionReleaseReasonSchema, RealtimeAvatar, ROUTE_TIMEOUT_MS, isQueued, RealtimeAvatarHttpError, RealtimeAvatarError } from './chunk-V3PQ7RNX.js';
1
+ import { sessionModeSchema, liveKitSessionReleaseReasonSchema, RealtimeAvatar, ROUTE_TIMEOUT_MS, isQueued, RealtimeAvatarHttpError, RealtimeAvatarError } from './chunk-4IEGR75H.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // ../http-client/src/generated/error-semantics.ts
package/dist/express.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ProxyConfig } from './types-C7B7jOx6.js';
2
- import './types-D77jgSms.js';
1
+ import { P as ProxyConfig } from './types-JtCwa0Ip.js';
2
+ import './types-6MUqx800.js';
3
3
  import 'zod';
4
4
 
5
5
  type Expressish = {
package/dist/express.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createProxyHandler } from './chunk-MSPXJU5P.js';
2
- import './chunk-V3PQ7RNX.js';
1
+ import { createProxyHandler } from './chunk-DOHZ365B.js';
2
+ import './chunk-4IEGR75H.js';
3
3
  import './chunk-MCIXU6XP.js';
4
4
 
5
5
  // ../proxy/src/express.ts
package/dist/hono.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ProxyConfig } from './types-C7B7jOx6.js';
2
- import './types-D77jgSms.js';
1
+ import { P as ProxyConfig } from './types-JtCwa0Ip.js';
2
+ import './types-6MUqx800.js';
3
3
  import 'zod';
4
4
 
5
5
  /**
package/dist/hono.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createProxyHandler } from './chunk-MSPXJU5P.js';
2
- import './chunk-V3PQ7RNX.js';
1
+ import { createProxyHandler } from './chunk-DOHZ365B.js';
2
+ import './chunk-4IEGR75H.js';
3
3
  import './chunk-MCIXU6XP.js';
4
4
 
5
5
  // ../proxy/src/hono.ts
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as CallPolicy, C as CallMode, S as StartCallResult, E as EndCallOptions, A as Avatar, b as AvatarUpdate, c as AvatarSourceSwap, d as ClipLibraryDeclaration, e as ClipLibraryUpdate, L as LoopRedirect, f as ClipLibrary, g as AssetKind, h as Asset, i as ListSessionsOptions, U as UsageSessionPage, j as UsageSession, k as ListRecordingsQuery, l as ListRecordingsResponse, R as RecordingArtifact, m as RecordingAccessResponse, n as CreditBalance, T as TranscriptPayload } from './types-D77jgSms.js';
2
- export { o as AvatarClip, p as CallConnection, q as CallQueued, r as ClipDeclaration, s as ClipLibraryPlan, t as ClipSource, u as ContextMessage, v as EndCallReason, w as RecordingArtifactStatus, x as RecordingMode, V as VideoPolicy, y as isQueued, z as listRecordingsResponseSchema, B as recordingAccessResponseSchema, D as recordingArtifactSchema, F as recordingModeSchema } from './types-D77jgSms.js';
1
+ import { a as CallPolicy, C as CallMode, S as StartCallResult, E as EndCallOptions, A as Avatar, b as AvatarUpdate, c as AvatarSourceSwap, d as ClipLibraryDeclaration, e as ClipLibraryUpdate, L as LoopRedirect, f as ClipLibrary, g as AssetKind, h as Asset, i as ListSessionsOptions, U as UsageSessionPage, j as UsageSession, k as ListRecordingsQuery, l as ListRecordingsResponse, R as RecordingArtifact, m as RecordingAccessResponse, n as CreditBalance, T as TranscriptPayload } from './types-6MUqx800.js';
2
+ export { o as AvatarClip, p as CallConnection, q as CallQueued, r as ClipDeclaration, s as ClipLibraryPlan, t as ClipSource, u as ContextMessage, v as EndCallReason, w as ExternalLlm, x as RecordingArtifactStatus, y as RecordingMode, V as VideoPolicy, z as isQueued, B as listRecordingsResponseSchema, D as recordingAccessResponseSchema, F as recordingArtifactSchema, G as recordingModeSchema } from './types-6MUqx800.js';
3
3
  import { ConnectionHistoryResponse } from './connection-history.js';
4
4
  import { z } from 'zod';
5
5
 
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-V3PQ7RNX.js';
1
+ export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-4IEGR75H.js';
2
2
  import './chunk-MCIXU6XP.js';
package/dist/nextjs.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ProxyConfig } from './types-C7B7jOx6.js';
2
- import './types-D77jgSms.js';
1
+ import { P as ProxyConfig } from './types-JtCwa0Ip.js';
2
+ import './types-6MUqx800.js';
3
3
  import 'zod';
4
4
 
5
5
  /**
package/dist/nextjs.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createProxyHandler } from './chunk-MSPXJU5P.js';
2
- import './chunk-V3PQ7RNX.js';
1
+ import { createProxyHandler } from './chunk-DOHZ365B.js';
2
+ import './chunk-4IEGR75H.js';
3
3
  import './chunk-MCIXU6XP.js';
4
4
 
5
5
  // ../proxy/src/nextjs.ts
@@ -715,8 +715,16 @@ type AvatarVideoSurfaceProps = {
715
715
  * against the box and stays clickable while she is live.
716
716
  */
717
717
  children?: ReactNode;
718
- /** Surface a small "live · WxH" badge when the live layer is shown. Default true. */
718
+ /**
719
+ * Surface a small "live" badge when the live layer is shown. Default true. Turn it off when
720
+ * your own UI already says the call is live.
721
+ */
719
722
  showLiveBadge?: boolean;
723
+ /**
724
+ * Show diagnostic readouts: today, the live layer's resolution on the badge
725
+ * ("live · 576×1010"). Default false. A development aid, never product copy.
726
+ */
727
+ debug?: boolean;
720
728
  /**
721
729
  * Reclaim the flat 0.5s de-jitter cushion on clean networks: a 1Hz closed loop
722
730
  * over `getStats()` that descends toward a 150ms floor while jitter and loss stay
@@ -1362,6 +1370,9 @@ type ReconnectPolicy = {
1362
1370
  * {@link SessionLifecycleApi.reconnect}.
1363
1371
  */
1364
1372
  type SessionEndReason = "idle" | "disconnected" | "error" | "user";
1373
+ /** Client-observed readiness failure, not an HTTP/provider error code. `agent_timeout` means
1374
+ * at least one room connected without reaching agent readiness; retries may also have transport delays. */
1375
+ type SessionReadinessFailure = "agent_timeout" | "connection_timeout";
1365
1376
  type SessionLifecyclePhase = {
1366
1377
  kind: "idle";
1367
1378
  } | {
@@ -1372,6 +1383,7 @@ type SessionLifecyclePhase = {
1372
1383
  } | {
1373
1384
  kind: "connecting";
1374
1385
  grant: LiveKitSessionGrant;
1386
+ waitingFor?: "transport" | "agent";
1375
1387
  } | {
1376
1388
  kind: "live";
1377
1389
  } | {
@@ -1384,9 +1396,11 @@ type SessionLifecyclePhase = {
1384
1396
  attempt: number;
1385
1397
  /** Native LiveKit recovery keeps the same grant; fresh-grant recovery re-mints. */
1386
1398
  strategy: "in-place" | "fresh-grant";
1399
+ reason?: SessionReadinessFailure;
1387
1400
  } | {
1388
1401
  kind: "ended";
1389
1402
  reason?: SessionEndReason;
1403
+ code?: SessionReadinessFailure;
1390
1404
  };
1391
1405
  type SessionLifecyclePhaseKind = SessionLifecyclePhase["kind"];
1392
1406
  /**
@@ -1401,14 +1415,18 @@ type RecoveryState = {
1401
1415
  } | {
1402
1416
  kind: "refreshing";
1403
1417
  attempt: number;
1418
+ reason?: SessionReadinessFailure;
1404
1419
  } | {
1405
1420
  kind: "reconnecting";
1406
1421
  attempt: number;
1422
+ reason?: SessionReadinessFailure;
1407
1423
  } | {
1408
1424
  kind: "failed";
1425
+ reason?: SessionReadinessFailure;
1409
1426
  } | {
1410
1427
  kind: "ended";
1411
1428
  reason?: SessionEndReason;
1429
+ code?: SessionReadinessFailure;
1412
1430
  };
1413
1431
  /**
1414
1432
  * The CLIENT-OWNED idle budget (seconds): how long "quiet" before the client-
@@ -1458,8 +1476,8 @@ type UseSessionLifecycleInput<T extends LLMProvider = LLMProvider> = {
1458
1476
  /** Auto-reconnect give-up bound. Default {@link MAX_RECONNECT_ATTEMPTS}. */
1459
1477
  maxReconnectAttempts?: number;
1460
1478
  /**
1461
- * How long a held grant may sit UNCONNECTED before we give the slot back
1462
- * (seconds). Default {@link DEFAULT_CONNECT_WATCHDOG_SECONDS}.
1479
+ * Per-attempt wait for the room connection, then for its first agent, before giving the
1480
+ * slot back (seconds). Default {@link DEFAULT_CONNECT_WATCHDOG_SECONDS}.
1463
1481
  *
1464
1482
  * A grant that never reaches a live room is invisible to every other timer here:
1465
1483
  * the idle clock only runs once connected, and LiveKit reports no disconnect for
@@ -1468,9 +1486,16 @@ type UseSessionLifecycleInput<T extends LLMProvider = LLMProvider> = {
1468
1486
  * the caller's only slot, so their retry is refused by a call they never saw.
1469
1487
  * Measured in prod: 8 of 12 never-connected sessions held for 76-81s.
1470
1488
  *
1471
- * Set 0 to disable (the platform timeout remains the backstop).
1489
+ * Set 0 to disable per-attempt recovery; the total readiness budget still applies.
1472
1490
  */
1473
1491
  connectWatchdogSeconds?: number;
1492
+ /**
1493
+ * Total pre-live readiness budget from the first held grant, including automatic retries.
1494
+ * A transport connection alone never resets it. Default {@link DEFAULT_READY_TIMEOUT_SECONDS}.
1495
+ * Non-positive/non-finite overrides use the default. Explicit reconnect starts a new budget.
1496
+ * The existing connect watchdog also bounds each connected room's wait for its first agent.
1497
+ */
1498
+ readyTimeoutSeconds?: number;
1474
1499
  /** Forwarded to {@link useLiveKitAvatarGrant}. Defaults true (queue auto-retry). */
1475
1500
  autoRetryBusy?: boolean;
1476
1501
  requestOptions?: UseLiveKitAvatarGrantInput<T>["requestOptions"];
@@ -1491,7 +1516,7 @@ type SessionLifecycleApi = {
1491
1516
  grant: LiveKitSessionGrant | null;
1492
1517
  /** The underlying capacity signal (queue position/size, error) — unchanged. */
1493
1518
  capacity: LiveKitCapacityState;
1494
- /** The DOM recovery contract: auto-reconnect attempts since the last connect. */
1519
+ /** The DOM recovery contract: auto-reconnect attempts since the last room + agent readiness. */
1495
1520
  attempt: number;
1496
1521
  /**
1497
1522
  * ms until the CLIENT-ENFORCED idle end, or null when not connected/live. Drives
@@ -1550,6 +1575,8 @@ type SessionLifecycleApi = {
1550
1575
  /** Reset to idle (mode/avatar change). Does not undo {@link end}: an ended call stays ended. */
1551
1576
  reset: () => void;
1552
1577
  };
1578
+ /** Maximum automatic startup wait across grants; successful room + agent readiness ends it. */
1579
+ declare const DEFAULT_READY_TIMEOUT_SECONDS = 30;
1553
1580
  declare function useSessionLifecycle<T extends LLMProvider = LLMProvider>(input: UseSessionLifecycleInput<T>): SessionLifecycleApi;
1554
1581
  /**
1555
1582
  * The optional realtime-session sinks the bridge ALSO fills when given the richer
@@ -2018,4 +2045,4 @@ interface ProxyClientOptions {
2018
2045
  }
2019
2046
  declare function createProxyClient(options: ProxyClientOptions): AvatarSessionClient;
2020
2047
 
2021
- export { type ProxyClientOptions as $, type AvatarVideoFit as A, type BehaviorSnapshot as B, type CallTranscript as C, DEFAULT_APPROACHING_END_LEAD_SECONDS as D, type EndReason as E, type FishTtsModel as F, type Governor as G, type GovernorSignal as H, type GovernorState as I, type GraceWindowClosedEvent as J, type GraceWindowOpenEvent as K, type LiveKitSessionGrant as L, type GraceWindowState as M, type IdleWarningEvent as N, type InboundRtpCursor as O, type InboundRtpReading as P, type KnownBehaviorState as Q, type LLMProvider as R, type LLMSelection as S, type LiveKitAvatarGrantState as T, type LiveKitAvatarGrantStatus as U, type LiveKitCapacityState as V, type LiveKitConnectionStatus as W, type LiveKitSessionRequest as X, type LiveKitSessionStartResult as Y, MAX_RECONNECT_ATTEMPTS as Z, MAX_SESSION_INSTRUCTIONS_CHARS as _, AdaptivePlayoutController as a, RealtimeAvatarCapacityError as a$, type QualityCap as a0, RECONNECT_BACKOFF_MS as a1, type RealtimeAvatarRequestOptions as a2, type RealtimeSessionApi as a3, type RealtimeSessionMedia as a4, type RealtimeSessionRoomSinks as a5, type ReconnectPolicy as a6, type ReconnectingEvent as a7, type RecoveryState as a8, type RetryStep as a9, mapTurnState as aA, readInboundRtp as aB, sessionBehaviorSchema as aC, sessionClipSchema as aD, splitCallTranscript as aE, useAvatarAdaptivePlayoutDelay as aF, useAvatarCamera as aG, useAvatarPlayoutDelay as aH, useAvatarQualityGovernor as aI, useCallTranscript as aJ, useLiveKitAvatarGrant as aK, useLiveTrackProducing as aL, useMicLease as aM, useRealtimeSession as aN, useReleaseMicLeaseOnTrackEnded as aO, useSessionLifecycle as aP, type CallMicrophone as aQ, type CallAudioPlayback as aR, type CallMicrophoneProblem as aS, AvatarVideoSurface as aT, type AvatarVideoSurfaceProps as aU, type LivePlaybackKeeper as aV, MIC_LEASE_ENDED_TIMEOUT_MS as aW, type MicLease as aX, NETWORK_QUALITY_POLICY as aY, type NetworkQualityStatus as aZ, type PlayableVideoElement as a_, type SendTurnOptions as aa, type SessionBehavior as ab, type SessionClip as ac, type SessionClocks as ad, type SessionEndReason as ae, type SessionLifecycleApi as af, type SessionLifecyclePhase as ag, type SessionLifecyclePhaseKind as ah, SessionLifecycleRoomBridge as ai, type SessionLifecycleRoomBridgeProps as aj, type SurfaceLayers as ak, type TranscriptSender as al, type TranscriptSenderOptions as am, type TurnState as an, type TurnTimeoutEvent as ao, type UseAvatarQualityGovernorInput as ap, type UseLiveKitAvatarGrantInput as aq, type UseRealtimeSessionInput as ar, type UseSessionLifecycleInput as as, type VoiceSpec as at, type VoiceSpecInput as au, capacityErrorFromBusy as av, capacityStateFromGrant as aw, createProxyClient as ax, isNativeLiveTrackSubscribed as ay, knownBehaviorStates as az, type AdaptivePlayoutDecision as b, RealtimeAvatarLiveKitRoom as b0, type RealtimeAvatarLiveKitRoomProps as b1, shouldReplayPendingTurn as b2, type AdaptivePlayoutOptions as c, type AdaptivePlayoutSample as d, type ApproachingEndEvent as e, type ApproachingEndReason as f, type AvatarConnectionDetails as g, type AvatarSessionClient as h, type CallTranscriptSegment as i, type CartesiaTtsModel as j, type ClipResult as k, type ClosingTurnResult as l, type CreditsLowEvent as m, DEFAULT_CREDITS_LOW_LEAD_SECONDS as n, DEFAULT_GOVERNOR_CONFIG as o, DEFAULT_GRACE_CEILING_SECONDS as p, DEFAULT_GRACE_WINDOW_LEAD_SECONDS as q, DEFAULT_IDLE_SECONDS as r, DEFAULT_IDLE_WARN_LEAD_SECONDS as s, DEFAULT_TURN_TIMEOUT_SECONDS as t, type DeclaredInputSource as u, type EndedEvent as v, type ExtendResult as w, type FreezeReadingFn as x, type GovernorAction as y, type GovernorConfig as z };
2048
+ export { MAX_SESSION_INSTRUCTIONS_CHARS as $, type AvatarVideoFit as A, type BehaviorSnapshot as B, type CallTranscript as C, DEFAULT_APPROACHING_END_LEAD_SECONDS as D, type EndReason as E, type FishTtsModel as F, type Governor as G, type GovernorConfig as H, type GovernorSignal as I, type GovernorState as J, type GraceWindowClosedEvent as K, type LiveKitSessionGrant as L, type GraceWindowOpenEvent as M, type GraceWindowState as N, type IdleWarningEvent as O, type InboundRtpCursor as P, type InboundRtpReading as Q, type KnownBehaviorState as R, type LLMProvider as S, type LLMSelection as T, type LiveKitAvatarGrantState as U, type LiveKitAvatarGrantStatus as V, type LiveKitCapacityState as W, type LiveKitConnectionStatus as X, type LiveKitSessionRequest as Y, type LiveKitSessionStartResult as Z, MAX_RECONNECT_ATTEMPTS as _, AdaptivePlayoutController as a, type NetworkQualityStatus as a$, type ProxyClientOptions as a0, type QualityCap as a1, RECONNECT_BACKOFF_MS as a2, type RealtimeAvatarRequestOptions as a3, type RealtimeSessionApi as a4, type RealtimeSessionMedia as a5, type RealtimeSessionRoomSinks as a6, type ReconnectPolicy as a7, type ReconnectingEvent as a8, type RecoveryState as a9, isNativeLiveTrackSubscribed as aA, knownBehaviorStates as aB, mapTurnState as aC, readInboundRtp as aD, sessionBehaviorSchema as aE, sessionClipSchema as aF, splitCallTranscript as aG, useAvatarAdaptivePlayoutDelay as aH, useAvatarCamera as aI, useAvatarPlayoutDelay as aJ, useAvatarQualityGovernor as aK, useCallTranscript as aL, useLiveKitAvatarGrant as aM, useLiveTrackProducing as aN, useMicLease as aO, useRealtimeSession as aP, useReleaseMicLeaseOnTrackEnded as aQ, useSessionLifecycle as aR, type CallMicrophone as aS, type CallAudioPlayback as aT, type CallMicrophoneProblem as aU, AvatarVideoSurface as aV, type AvatarVideoSurfaceProps as aW, type LivePlaybackKeeper as aX, MIC_LEASE_ENDED_TIMEOUT_MS as aY, type MicLease as aZ, NETWORK_QUALITY_POLICY as a_, type RetryStep as aa, type SendTurnOptions as ab, type SessionBehavior as ac, type SessionClip as ad, type SessionClocks as ae, type SessionEndReason as af, type SessionLifecycleApi as ag, type SessionLifecyclePhase as ah, type SessionLifecyclePhaseKind as ai, SessionLifecycleRoomBridge as aj, type SessionLifecycleRoomBridgeProps as ak, type SessionReadinessFailure as al, type SurfaceLayers as am, type TranscriptSender as an, type TranscriptSenderOptions as ao, type TurnState as ap, type TurnTimeoutEvent as aq, type UseAvatarQualityGovernorInput as ar, type UseLiveKitAvatarGrantInput as as, type UseRealtimeSessionInput as at, type UseSessionLifecycleInput as au, type VoiceSpec as av, type VoiceSpecInput as aw, capacityErrorFromBusy as ax, capacityStateFromGrant as ay, createProxyClient as az, type AdaptivePlayoutDecision as b, type PlayableVideoElement as b0, RealtimeAvatarCapacityError as b1, RealtimeAvatarLiveKitRoom as b2, type RealtimeAvatarLiveKitRoomProps as b3, shouldReplayPendingTurn as b4, type AdaptivePlayoutOptions as c, type AdaptivePlayoutSample as d, type ApproachingEndEvent as e, type ApproachingEndReason as f, type AvatarConnectionDetails as g, type AvatarSessionClient as h, type CallTranscriptSegment as i, type CartesiaTtsModel as j, type ClipResult as k, type ClosingTurnResult as l, type CreditsLowEvent as m, DEFAULT_CREDITS_LOW_LEAD_SECONDS as n, DEFAULT_GOVERNOR_CONFIG as o, DEFAULT_GRACE_CEILING_SECONDS as p, DEFAULT_GRACE_WINDOW_LEAD_SECONDS as q, DEFAULT_IDLE_SECONDS as r, DEFAULT_IDLE_WARN_LEAD_SECONDS as s, DEFAULT_READY_TIMEOUT_SECONDS as t, DEFAULT_TURN_TIMEOUT_SECONDS as u, type DeclaredInputSource as v, type EndedEvent as w, type ExtendResult as x, type FreezeReadingFn as y, type GovernorAction as z };
@@ -1,7 +1,7 @@
1
1
  import { LiveKitRoomProps } from '@livekit/react-native';
2
2
  export { AudioSession, VideoTrack, VideoTrackProps, registerGlobals } from '@livekit/react-native';
3
- import { L as LiveKitSessionGrant, A as AvatarVideoFit } from './proxy-client-C8M_G_Kk.js';
4
- export { a as AdaptivePlayoutController, b as AdaptivePlayoutDecision, c as AdaptivePlayoutOptions, d as AdaptivePlayoutSample, e as ApproachingEndEvent, f as ApproachingEndReason, g as AvatarConnectionDetails, h as AvatarSessionClient, B as BehaviorSnapshot, C as CallTranscript, i as CallTranscriptSegment, j as CartesiaTtsModel, k as ClipResult, l as ClosingTurnResult, m as CreditsLowEvent, D as DEFAULT_APPROACHING_END_LEAD_SECONDS, n as DEFAULT_CREDITS_LOW_LEAD_SECONDS, o as DEFAULT_GOVERNOR_CONFIG, p as DEFAULT_GRACE_CEILING_SECONDS, q as DEFAULT_GRACE_WINDOW_LEAD_SECONDS, r as DEFAULT_IDLE_SECONDS, s as DEFAULT_IDLE_WARN_LEAD_SECONDS, t as DEFAULT_TURN_TIMEOUT_SECONDS, u as DeclaredInputSource, E as EndReason, v as EndedEvent, w as ExtendResult, F as FishTtsModel, x as FreezeReadingFn, G as Governor, y as GovernorAction, z as GovernorConfig, H as GovernorSignal, I as GovernorState, J as GraceWindowClosedEvent, K as GraceWindowOpenEvent, M as GraceWindowState, N as IdleWarningEvent, O as InboundRtpCursor, P as InboundRtpReading, Q as KnownBehaviorState, R as LLMProvider, S as LLMSelection, T as LiveKitAvatarGrantState, U as LiveKitAvatarGrantStatus, V as LiveKitCapacityState, W as LiveKitConnectionStatus, X as LiveKitSessionRequest, Y as LiveKitSessionStartResult, Z as MAX_RECONNECT_ATTEMPTS, _ as MAX_SESSION_INSTRUCTIONS_CHARS, $ as ProxyClientOptions, a0 as QualityCap, a1 as RECONNECT_BACKOFF_MS, a2 as RealtimeAvatarRequestOptions, a3 as RealtimeSessionApi, a4 as RealtimeSessionMedia, a5 as RealtimeSessionRoomSinks, a6 as ReconnectPolicy, a7 as ReconnectingEvent, a8 as RecoveryState, a9 as RetryStep, aa as SendTurnOptions, ab as SessionBehavior, ac as SessionClip, ad as SessionClocks, ae as SessionEndReason, af as SessionLifecycleApi, ag as SessionLifecyclePhase, ah as SessionLifecyclePhaseKind, ai as SessionLifecycleRoomBridge, aj as SessionLifecycleRoomBridgeProps, ak as SurfaceLayers, al as TranscriptSender, am as TranscriptSenderOptions, an as TurnState, ao as TurnTimeoutEvent, ap as UseAvatarQualityGovernorInput, aq as UseLiveKitAvatarGrantInput, ar as UseRealtimeSessionInput, as as UseSessionLifecycleInput, at as VoiceSpec, au as VoiceSpecInput, av as capacityErrorFromBusy, aw as capacityStateFromGrant, ax as createProxyClient, ay as isNativeLiveTrackSubscribed, az as knownBehaviorStates, aA as mapTurnState, aB as readInboundRtp, aC as sessionBehaviorSchema, aD as sessionClipSchema, aE as splitCallTranscript, aF as useAvatarAdaptivePlayoutDelay, aG as useAvatarCamera, aH as useAvatarPlayoutDelay, aI as useAvatarQualityGovernor, aJ as useCallTranscript, aK as useLiveKitAvatarGrant, aL as useLiveTrackProducing, aM as useMicLease, aN as useRealtimeSession, aO as useReleaseMicLeaseOnTrackEnded, aP as useSessionLifecycle } from './proxy-client-C8M_G_Kk.js';
3
+ import { L as LiveKitSessionGrant, A as AvatarVideoFit } from './proxy-client-Cs2azqD1.js';
4
+ export { a as AdaptivePlayoutController, b as AdaptivePlayoutDecision, c as AdaptivePlayoutOptions, d as AdaptivePlayoutSample, e as ApproachingEndEvent, f as ApproachingEndReason, g as AvatarConnectionDetails, h as AvatarSessionClient, B as BehaviorSnapshot, C as CallTranscript, i as CallTranscriptSegment, j as CartesiaTtsModel, k as ClipResult, l as ClosingTurnResult, m as CreditsLowEvent, D as DEFAULT_APPROACHING_END_LEAD_SECONDS, n as DEFAULT_CREDITS_LOW_LEAD_SECONDS, o as DEFAULT_GOVERNOR_CONFIG, p as DEFAULT_GRACE_CEILING_SECONDS, q as DEFAULT_GRACE_WINDOW_LEAD_SECONDS, r as DEFAULT_IDLE_SECONDS, s as DEFAULT_IDLE_WARN_LEAD_SECONDS, t as DEFAULT_READY_TIMEOUT_SECONDS, u as DEFAULT_TURN_TIMEOUT_SECONDS, v as DeclaredInputSource, E as EndReason, w as EndedEvent, x as ExtendResult, F as FishTtsModel, y as FreezeReadingFn, G as Governor, z as GovernorAction, H as GovernorConfig, I as GovernorSignal, J as GovernorState, K as GraceWindowClosedEvent, M as GraceWindowOpenEvent, N as GraceWindowState, O as IdleWarningEvent, P as InboundRtpCursor, Q as InboundRtpReading, R as KnownBehaviorState, S as LLMProvider, T as LLMSelection, U as LiveKitAvatarGrantState, V as LiveKitAvatarGrantStatus, W as LiveKitCapacityState, X as LiveKitConnectionStatus, Y as LiveKitSessionRequest, Z as LiveKitSessionStartResult, _ as MAX_RECONNECT_ATTEMPTS, $ as MAX_SESSION_INSTRUCTIONS_CHARS, a0 as ProxyClientOptions, a1 as QualityCap, a2 as RECONNECT_BACKOFF_MS, a3 as RealtimeAvatarRequestOptions, a4 as RealtimeSessionApi, a5 as RealtimeSessionMedia, a6 as RealtimeSessionRoomSinks, a7 as ReconnectPolicy, a8 as ReconnectingEvent, a9 as RecoveryState, aa as RetryStep, ab as SendTurnOptions, ac as SessionBehavior, ad as SessionClip, ae as SessionClocks, af as SessionEndReason, ag as SessionLifecycleApi, ah as SessionLifecyclePhase, ai as SessionLifecyclePhaseKind, aj as SessionLifecycleRoomBridge, ak as SessionLifecycleRoomBridgeProps, al as SessionReadinessFailure, am as SurfaceLayers, an as TranscriptSender, ao as TranscriptSenderOptions, ap as TurnState, aq as TurnTimeoutEvent, ar as UseAvatarQualityGovernorInput, as as UseLiveKitAvatarGrantInput, at as UseRealtimeSessionInput, au as UseSessionLifecycleInput, av as VoiceSpec, aw as VoiceSpecInput, ax as capacityErrorFromBusy, ay as capacityStateFromGrant, az as createProxyClient, aA as isNativeLiveTrackSubscribed, aB as knownBehaviorStates, aC as mapTurnState, aD as readInboundRtp, aE as sessionBehaviorSchema, aF as sessionClipSchema, aG as splitCallTranscript, aH as useAvatarAdaptivePlayoutDelay, aI as useAvatarCamera, aJ as useAvatarPlayoutDelay, aK as useAvatarQualityGovernor, aL as useCallTranscript, aM as useLiveKitAvatarGrant, aN as useLiveTrackProducing, aO as useMicLease, aP as useRealtimeSession, aQ as useReleaseMicLeaseOnTrackEnded, aR as useSessionLifecycle } from './proxy-client-Cs2azqD1.js';
5
5
  import { ReactNode, ReactElement } from 'react';
6
6
  import { StyleProp, ViewStyle } from 'react-native';
7
7
  export { useChat, useConnectionState, useLocalParticipant, useRoomContext, useTrackToggle, useTranscriptions, useVoiceAssistant } from '@livekit/components-react';
@@ -87,8 +87,13 @@ type AvatarVideoSurfaceProps = {
87
87
  style?: StyleProp<ViewStyle>;
88
88
  /** Overlay content rendered above both media layers (badges, chrome, scrims). */
89
89
  children?: ReactNode;
90
- /** Surface a small "live · WxH" badge when the live layer is shown. Default true. */
90
+ /**
91
+ * Surface a small "live" badge when the live layer is shown. Default true. Turn it off when
92
+ * your own UI already says the call is live.
93
+ */
91
94
  showLiveBadge?: boolean;
95
+ /** Show diagnostic readouts: today, the live layer's resolution on the badge. Default false. */
96
+ debug?: boolean;
92
97
  /**
93
98
  * Reclaim the flat 0.5s de-jitter cushion on clean networks — the same opt-in
94
99
  * closed loop the web surface takes, sharing the same implementation. Default