@vivix-ai/ivi-frontend-sdk 0.2.3 → 0.3.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/dist/index.d.ts CHANGED
@@ -1,12 +1,18 @@
1
- import { IviRealtimeSession, IviStage, IviTrack, IviSource, IviSourcePlayback, IviSessionSourceFailedPayload, IviStream, IviStreamStatus, IviConversationItemRole, IviConversationItem, IviConversationItemContent, ReceiveSessionEndedEvent, ParsedIviEvent, IviRealtimeResponseCreateParams, ReceiveConversationItemAddedEvent, ReceiveConversationItemDoneEvent, ReceiveResponseCreatedEvent, IviSourcePlaybackTrtc, IviClient, IviClientConfig } from '@vivix/ivi-sdk-ts';
1
+ import { ReceiveSessionSourceReadyPayload, IviStream, IviConversationItem, IviRealtimeSessionConfig, IviStageComposition, IviTrack, IviSourceAsset, ReceiveSessionSourceFailedPayload, IviConversationItemContent, ReceiveSessionEndedEvent, ParsedIviEvent, IviRealtimeResponseCreateParams, ReceiveConversationItemAddedEvent, ReceiveConversationItemDoneEvent, ReceiveResponseCreatedEvent, IviClient, IviClientConfig } from '@vivix-ai/ivi-sdk-ts';
2
+ import { LiveKitBrowserTransportConfig } from '@vivix-ai/ivi-sdk-ts/transports/livekit-browser';
2
3
  import { ReactNode, CSSProperties, ReactElement, VideoHTMLAttributes, ImgHTMLAttributes } from 'react';
3
- import { IviClientLogEntry } from '@vivix/ivi-sdk-ts/client';
4
+ import { IviClientLogEntry } from '@vivix-ai/ivi-sdk-ts/client';
5
+
6
+ type IviConversationItemRole = NonNullable<IviConversationItem["role"]>;
7
+ type IviSourcePlayback = NonNullable<ReceiveSessionSourceReadyPayload["playback"]>;
8
+ type IviSourcePlaybackTrtc = NonNullable<IviSourcePlayback["trtc"]>;
9
+ type IviStreamStatus = IviStream["status"];
4
10
 
5
11
  type IviRuntimeStatus = "idle" | "connecting" | "syncing" | "running" | "stopped";
6
12
  interface IviRuntimeState {
7
13
  status: IviRuntimeStatus;
8
- session: IviRealtimeSession | null;
9
- stage: IviStage | null;
14
+ session: IviRealtimeSessionConfig | null;
15
+ stage: IviStageComposition | null;
10
16
  tracks: Map<string, IviTrack>;
11
17
  sources: Map<string, IviRuntimeSource>;
12
18
  streams: Map<string, IviRuntimeStream>;
@@ -32,14 +38,14 @@ interface IviRuntimeSourcePreloadState {
32
38
  autoclearAfterPlay: boolean;
33
39
  }
34
40
  interface IviRuntimeSource {
35
- source: IviSource;
41
+ source: IviSourceAsset;
36
42
  status: "created" | "ready" | "failed";
37
43
  playback?: IviSourcePlayback;
38
44
  width?: number;
39
45
  height?: number;
40
46
  durationMs?: number;
41
47
  hasAudio?: boolean;
42
- error?: IviSessionSourceFailedPayload["error"];
48
+ error?: ReceiveSessionSourceFailedPayload["error"];
43
49
  /**
44
50
  * 预加载状态:
45
51
  * - 存在:渲染层应对该 source 进行预加载;
@@ -80,7 +86,7 @@ interface IviRuntimeCoordinatorConfig {
80
86
  */
81
87
  onSessionEnded?: (event: ReceiveSessionEndedEvent) => void;
82
88
  /**
83
- * Runtime 内部链路日志回调;未传入时仍仅输出原有 console 日志。
89
+ * Runtime 内部链路日志回调;未传入时不输出日志。
84
90
  */
85
91
  onLog?: IviRuntimeLogCallback;
86
92
  }
@@ -105,6 +111,13 @@ interface IviRuntimeUserTextToResponseOptions {
105
111
  * 透传给 response.create 的响应参数(不含 input)。
106
112
  */
107
113
  response?: Omit<IviRealtimeResponseCreateParams, "input">;
114
+ /**
115
+ * 触发 response.create 时如何处理 input。
116
+ *
117
+ * - `"context"`(默认):不显式传 `response.input`,由 IVI 服务端使用内部维护的会话上下文。
118
+ * - `"item_reference"`:显式传入刚创建的用户 item 引用;服务端会以该 input 为准,不使用默认上下文。
119
+ */
120
+ responseInput?: "context" | "item_reference";
108
121
  /**
109
122
  * 关键节点回调。
110
123
  */
@@ -213,6 +226,105 @@ declare class TrtcSourceManager {
213
226
  private log;
214
227
  }
215
228
 
229
+ /**
230
+ * LiveKit 拉流所需的会话凭证。连接字段复用 `@vivix-ai/ivi-sdk-ts` LiveKit transport 的上游类型。
231
+ */
232
+ type IviSourcePlaybackLivekit = {
233
+ ws_url: LiveKitBrowserTransportConfig["url"];
234
+ token: LiveKitBrowserTransportConfig["token"];
235
+ room?: string;
236
+ identity?: string;
237
+ };
238
+ /**
239
+ * LiveKit 形态的 playback 实体(运行态用)。
240
+ */
241
+ type IviSourcePlaybackLivekitDescriptor = IviSourcePlayback & {
242
+ type: "livekit";
243
+ livekit: IviSourcePlaybackLivekit;
244
+ };
245
+ /**
246
+ * 判定一个 playback 是否携带合法的 LiveKit 配置。
247
+ * 兼容上游类型尚未感知 `livekit` 分支的情况,因此使用结构化检查。
248
+ */
249
+ declare function isLivekitSourcePlayback(playback: IviSourcePlayback | undefined | null): playback is IviSourcePlaybackLivekitDescriptor;
250
+ /**
251
+ * Runtime 层守卫:source 已 ready 且 playback 是 livekit。
252
+ */
253
+ declare function isReadyLivekitRuntimeSource(source: IviRuntimeSource | undefined | null): source is IviRuntimeSource & {
254
+ playback: IviSourcePlaybackLivekitDescriptor;
255
+ };
256
+ /**
257
+ * 浅比较两份 livekit 配置;用于 SourceManager 决定是否需要重建 Room 连接。
258
+ */
259
+ declare function isSameLivekitConfig(a: IviSourcePlaybackLivekit, b: IviSourcePlaybackLivekit): boolean;
260
+
261
+ type LivekitSourceConnectionStatus = "idle" | "connecting" | "connected" | "error";
262
+ interface LivekitSourceSnapshot {
263
+ status: LivekitSourceConnectionStatus;
264
+ error?: string;
265
+ }
266
+ type LivekitSourceListener = (snapshot: LivekitSourceSnapshot) => void;
267
+ /**
268
+ * LiveKit 拉流会话池:
269
+ * - 每个 `sourceId` 对应一个 LiveKit `Room` 实例,懒连接、单飞建连;
270
+ * - 远端 track 订阅后按 view 分发到各自容器;
271
+ * - 接口形状刻意贴近 `TrtcSourceManager`,便于 runtime 协调器与 React 组件镜像复用。
272
+ */
273
+ declare class LivekitSourceManager {
274
+ private readonly onLog?;
275
+ private readonly sessions;
276
+ private readonly listeners;
277
+ constructor(onLog?: IviRuntimeLogCallback | undefined);
278
+ /**
279
+ * 与 runtime 当前 sources 对齐:
280
+ * - 对 ready + livekit 的 source 进行 upsert(必要时建立连接);
281
+ * - 清理已不在 runtime 中的会话(释放资源)。
282
+ */
283
+ syncRuntimeSources(sources: Map<string, IviRuntimeSource>): void;
284
+ /**
285
+ * 按 sourceId 注册/更新 LiveKit 配置。
286
+ * 若 ws_url / token / room / identity 任一发生变化,会先销毁旧会话再按新参数重建连接。
287
+ */
288
+ upsertSource(sourceId: string, livekit: IviSourcePlaybackLivekit): void;
289
+ /**
290
+ * 删除指定 source 的 LiveKit 会话并释放连接资源。
291
+ */
292
+ removeSource(sourceId: string): void;
293
+ reset(): void;
294
+ subscribe(sourceId: string, listener: LivekitSourceListener): () => void;
295
+ getSnapshot(sourceId: string): LivekitSourceSnapshot;
296
+ hasRemoteVideoAvailable(sourceId: string): boolean;
297
+ /**
298
+ * 等待指定 source 的 LiveKit 会话首次拿到远端视频 track。
299
+ * - 若已收到过,立即返回 true;
300
+ * - 若会话被销毁或超时,返回 false。
301
+ */
302
+ waitForRemoteVideoAvailable(sourceId: string, timeoutMs?: number): Promise<boolean>;
303
+ /**
304
+ * 把一个渲染容器绑定到 source 会话:
305
+ * - 确保已连接;
306
+ * - 把已订阅的远端 video/audio 回放到该容器;
307
+ * - 应用初始 muted 策略。
308
+ */
309
+ attachView(sourceId: string, viewId: string, container: HTMLElement, muted: boolean): Promise<void>;
310
+ detachView(sourceId: string, viewId: string): void;
311
+ updateViewMuted(sourceId: string, viewId: string, muted: boolean): void;
312
+ private createSession;
313
+ /**
314
+ * 懒连接:单飞模式下复用同一个 connectPromise;建连后注册远端事件并把已订阅 track 推给 view。
315
+ */
316
+ private ensureConnected;
317
+ private attachKnownTracksToView;
318
+ private attachTrackToView;
319
+ private detachTrackFromBinding;
320
+ private detachAllElementsFromView;
321
+ private applyMutedToBinding;
322
+ private applyMutedToElement;
323
+ private disposeSession;
324
+ private emitSnapshot;
325
+ private log;
326
+ }
327
+
216
328
  /**
217
329
  * 协调者负责 runtime 生命周期、状态机和跨域补偿,不参与事件类型分发。
218
330
  *
@@ -258,6 +370,7 @@ declare class IviRuntimeCoordinator {
258
370
  private readonly sourceManager;
259
371
  private readonly streamManager;
260
372
  private readonly trtcSourceManager;
373
+ private readonly livekitSourceManager;
261
374
  private readonly conversationManager;
262
375
  private readonly sessionHandler;
263
376
  private readonly stageHandler;
@@ -289,13 +402,14 @@ declare class IviRuntimeCoordinator {
289
402
  getState(): IviRuntimeState;
290
403
  onStateChange(listener: (state: IviRuntimeState) => void): () => void;
291
404
  onEvent(listener: IviRuntimeEventListener): () => void;
405
+ emitLog(entry: IviRuntimeLogEntry): void;
292
406
  /**
293
407
  * 编排一次"用户文本输入 -> 触发模型回复"链路。
294
408
  *
295
409
  * 流程:
296
410
  * 1) 发送 conversation.item.create(可指定 itemId);
297
411
  * 2) 等待 conversation.item.added + conversation.item.done;
298
- * 3) 发送 response.create(携带 item_reference,可选绑定 stream);
412
+ * 3) 发送 response.create(默认不携带 input,使用 IVI 内部上下文;可选显式绑定 item_reference);
299
413
  * 4) 等待 response.created 并结束。
300
414
  */
301
415
  sendUserTextAndTriggerResponse(options: IviRuntimeUserTextToResponseOptions): Promise<IviRuntimeUserTextToResponseResult>;
@@ -308,6 +422,7 @@ declare class IviRuntimeCoordinator {
308
422
  */
309
423
  sendSessionSourcePlaybackCompleted(sourceId: string, trackId?: string): void;
310
424
  getTrtcSourceManager(): TrtcSourceManager;
425
+ getLivekitSourceManager(): LivekitSourceManager;
311
426
  private onConnectionChange;
312
427
  private validateStageTracks;
313
428
  private validateTracksListRefreshed;
@@ -318,6 +433,7 @@ declare class IviRuntimeCoordinator {
318
433
  private onTracksChanged;
319
434
  private applyLocalTrackTake;
320
435
  private deferredTrtcTakeCompleteAndTake;
436
+ private deferredLivekitTakeCompleteAndTake;
321
437
  private sendSessionTrackTake;
322
438
  private onSourcesChanged;
323
439
  private onStreamsChanged;
@@ -361,9 +477,10 @@ declare class IviRuntimeDispatcher {
361
477
  private dispatchEvent;
362
478
  }
363
479
 
480
+ type IviFrontendClientConfig = IviClientConfig;
364
481
  declare class IviFrontendSdk {
365
- createClient(config: IviClientConfig): IviClient;
366
- createRuntimeCoordinator(clientConfig: IviClientConfig, runtimeConfig?: IviRuntimeCoordinatorConfig): IviRuntimeCoordinator;
482
+ createClient(config: IviFrontendClientConfig): IviClient;
483
+ createRuntimeCoordinator(clientConfig: IviFrontendClientConfig, runtimeConfig?: IviRuntimeCoordinatorConfig): IviRuntimeCoordinator;
367
484
  }
368
485
 
369
486
  interface IviStageSlotBinding {
@@ -411,6 +528,27 @@ interface IVITrtcPlayerProps {
411
528
  errorFallback?: ReactNode;
412
529
  muted?: boolean;
413
530
  }
531
+ /**
532
+ * 默认 TRTC 播放器:挂载即加入房间并拉流,连接由 TrtcSourceManager 统一复用。
533
+ * muted 变化仅更新音频策略,不触发重连。
534
+ */
535
+ declare function IVITrtcPlayer(props: IVITrtcPlayerProps): ReactNode;
536
+
537
+ interface IVILivekitPlayerProps {
538
+ livekit: IviSourcePlaybackLivekit;
539
+ sourceId?: string;
540
+ runtime?: IviRuntimeCoordinator | null;
541
+ className?: string;
542
+ style?: CSSProperties;
543
+ loadingFallback?: ReactNode;
544
+ errorFallback?: ReactNode;
545
+ muted?: boolean;
546
+ }
547
+ /**
548
+ * 默认 LiveKit 播放器:挂载即加入房间并拉流,连接由 LivekitSourceManager 统一复用。
549
+ * muted 变化仅更新音频静音策略,不触发重连。
550
+ */
551
+ declare function IVILivekitPlayer(props: IVILivekitPlayerProps): ReactNode;
414
552
 
415
553
  interface IVIVolumeControlColors {
416
554
  /** 容器背景色,默认 rgba(0, 0, 0, 0.55) */
@@ -437,6 +575,33 @@ interface IVIVolumeControlProps {
437
575
  style?: CSSProperties;
438
576
  }
439
577
 
578
+ type IviSubtitleRole = IviRuntimeConversationItem["role"];
579
+ interface IviSubtitleItem {
580
+ id: string;
581
+ role: IviSubtitleRole;
582
+ lifecycle: IviRuntimeConversationItem["lifecycle"];
583
+ status: IviRuntimeConversationItem["status"];
584
+ text: string;
585
+ transcript: string;
586
+ displayText: string;
587
+ content: IviRuntimeConversationItem["content"];
588
+ item: IviRuntimeConversationItem["item"];
589
+ /** 首次进入字幕队列的时间戳。 */
590
+ timestamp: number;
591
+ /** 最近一次字幕内容或状态更新的时间戳。 */
592
+ updatedAt: number;
593
+ }
594
+ interface IviUseSubtitlesOptions {
595
+ /** 要收集的发言人角色,默认 ["user"]。传单个字符串或数组均可。 */
596
+ roles?: IviSubtitleRole | IviSubtitleRole[];
597
+ /** 最多保留的字幕条数,超过后自动清理最旧条目,默认 2。 */
598
+ maxItems?: number;
599
+ }
600
+ /**
601
+ * 监听 runtime 中的 conversation/response 事件,并维护当前应展示的字幕队列。
602
+ */
603
+ declare function useIviSubtitles(runtime: IviRuntimeCoordinator | null, options?: IviUseSubtitlesOptions): IviSubtitleItem[];
604
+
440
605
  interface IVISubtitleOverlayStyle {
441
606
  /** 字体,默认 system-ui */
442
607
  fontFamily?: string;
@@ -448,14 +613,14 @@ interface IVISubtitleOverlayStyle {
448
613
  background?: string;
449
614
  }
450
615
  interface IVISubtitleOverlayProps {
451
- /** 会话条目列表(由 runtime state 提供) */
452
- conversations: IviRuntimeConversationItem[];
616
+ /** 字幕来源 runtime */
617
+ runtime: IviRuntimeCoordinator | null;
453
618
  /** 要显示的发言人角色,默认 ["user"]。传单个字符串或数组均可。 */
454
- roles?: IviConversationItemRole | IviConversationItemRole[];
455
- /** 同时可见的最大条目数,默认 2 */
619
+ roles?: IviUseSubtitlesOptions["roles"];
620
+ /** 最多保留的字幕条数,默认 2 */
621
+ maxItems?: number;
622
+ /** @deprecated Use `maxItems` instead. */
456
623
  maxVisible?: number;
457
- /** lifecycle 变为 done 后自动消失的毫秒数,默认 5000 */
458
- dismissAfterMs?: number;
459
624
  /** 样式配置 */
460
625
  subtitleStyle?: IVISubtitleOverlayStyle;
461
626
  /** 自定义类名 */
@@ -463,6 +628,11 @@ interface IVISubtitleOverlayProps {
463
628
  /** 自定义样式 */
464
629
  style?: CSSProperties;
465
630
  }
631
+ /**
632
+ * 字幕浮层:基于 useIviSubtitles 的预制 UI,胶囊形半透明黑底白字。
633
+ * added 阶段背景呼吸闪动;字幕保留与裁剪由 hook 的 maxItems 控制。
634
+ */
635
+ declare function IVISubtitleOverlay(props: IVISubtitleOverlayProps): ReactNode;
466
636
 
467
637
  interface IviTrackSlotRenderContext {
468
638
  slot: string;
@@ -471,19 +641,6 @@ interface IviTrackSlotRenderContext {
471
641
  /** 当前正在 standby 槽位预加载(不可见、已静音) */
472
642
  isPreloading?: boolean;
473
643
  }
474
- /**
475
- * 媒体空白区域(letterbox / pillarbox)背景模式。
476
- * - `"black"` / `"white"` / `"transparent"`:纯色填充
477
- * - `{ color: string }`:用户自定义 CSS 颜色
478
- * - `"blur"`:实时高斯模糊(等同 `{ blur: "live" }`)
479
- * - `{ blur: "live" }`:实时模糊,背景跟随媒体画面持续更新
480
- * - `{ blur: "static" }`:静态模糊,仅取首帧进行模糊,性能开销极低
481
- */
482
- type IviTrackSlotBackground = "black" | "white" | "transparent" | {
483
- color: string;
484
- } | "blur" | {
485
- blur: "live" | "static";
486
- };
487
644
  interface IVITrackSlotProps {
488
645
  slot?: string;
489
646
  trackId?: string;
@@ -491,22 +648,24 @@ interface IVITrackSlotProps {
491
648
  style?: CSSProperties;
492
649
  emptyFallback?: ReactNode;
493
650
  renderTrtc?: (context: IviTrackSlotRenderContext) => ReactNode;
651
+ renderLivekit?: (context: IviTrackSlotRenderContext) => ReactNode;
494
652
  renderMedia?: (context: IviTrackSlotRenderContext) => ReactNode;
495
653
  videoProps?: Omit<VideoHTMLAttributes<HTMLVideoElement>, "src">;
496
654
  imageProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, "src">;
497
655
  adaptToSourceSize?: boolean;
498
656
  fitStrategy?: "contain" | "cover" | "auto";
499
657
  trtcPlayerProps?: Omit<IVITrtcPlayerProps, "trtc" | "sourceId" | "runtime">;
658
+ livekitPlayerProps?: Omit<IVILivekitPlayerProps, "livekit" | "sourceId" | "runtime">;
500
659
  /** 是否显示音量控制浮层(仅在播放音视频媒体时生效,图片无音量) */
501
660
  showVolumeControl?: boolean;
502
661
  /** 音量控制组件的自定义配置(图标、颜色、样式等) */
503
662
  volumeControlProps?: Omit<IVIVolumeControlProps, "volume" | "onVolumeChange">;
504
663
  /** 是否显示字幕浮层(仅在支持字幕的播放源上生效) */
505
664
  showSubtitle?: boolean;
506
- /** 字幕组件的自定义配置(字体、颜色、消失延时等) */
507
- subtitleProps?: Omit<IVISubtitleOverlayProps, "conversations">;
508
- /** 媒体空白区域(letterbox/pillarbox)的背景模式,默认 "black" */
509
- background?: IviTrackSlotBackground;
665
+ /** 字幕组件的自定义配置(角色、最大条数、字体、颜色等) */
666
+ subtitleProps?: Omit<IVISubtitleOverlayProps, "runtime">;
667
+ /** TrackSlot 内部媒体链路日志回调;未传入时不输出日志。 */
668
+ onLog?: IviRuntimeLogCallback;
510
669
  }
511
670
  /**
512
671
  * Track 窗口组件:基于多重预加载策略渲染所有 ready 的 Source。
@@ -530,15 +689,15 @@ interface IviManagedRuntimeLogEntry {
530
689
  }
531
690
  type IviManagedRuntimeLogCallback = (entry: IviManagedRuntimeLogEntry) => void;
532
691
  interface IviManagedRuntimeConfig {
533
- clientConfig: IviClientConfig;
692
+ clientConfig: Partial<IviFrontendClientConfig>;
534
693
  autoStart?: boolean;
535
694
  runtimeConfig?: IviRuntimeCoordinatorConfig;
536
695
  onRuntimeInitError?: (error: unknown) => void;
537
696
  /**
538
697
  * 统一收集 SDK 内部带 IVI 标记的日志。
539
698
  *
540
- * - IviClient 的 onLog 会被转换为 `[IVI-SEND]`、`[IVI-WS]`、`[IVI-RECONNECT]`
541
- * - runtime / TRTC 等日志会通过 runtime onLog 回调上报,不会通过 patch console 收集
699
+ * - IviClient 的 onLog 会被转换为 `[IVI-SEND]`、`[IVI-TRANSPORT]`、`[IVI-RECONNECT]`
700
+ * - runtime / TRTC / LiveKit 等日志会通过 runtime onLog 回调上报,不会通过 patch console 收集
542
701
  */
543
702
  onLog?: IviManagedRuntimeLogCallback;
544
703
  }
@@ -546,4 +705,4 @@ declare function useManagedIviRuntime(config: IviManagedRuntimeConfig): IviRunti
546
705
 
547
706
  declare function useIviStageView(): IviStageViewContextValue;
548
707
 
549
- export { EMPTY_RUNTIME_STATE, IVIStageView, type IVIStageViewProps, IVITrackSlot, type IVITrackSlotProps, IviFrontendSdk, type IviManagedRuntimeConfig, type IviManagedRuntimeLogCallback, type IviManagedRuntimeLogEntry, type IviManagedRuntimeLogLevel, type IviManagedRuntimeLogSource, type IviRuntimeConversationItem, type IviRuntimeConversationLifecycle, type IviRuntimeConversationStatus, IviRuntimeCoordinator, type IviRuntimeCoordinatorConfig, IviRuntimeDispatcher, type IviRuntimeDispatcherConfig, type IviRuntimeEventListener, type IviRuntimeLogCallback, type IviRuntimeLogEntry, type IviRuntimeLogLevel, type IviRuntimeSource, type IviRuntimeSourcePreloadState, type IviRuntimeState, type IviRuntimeStatus, type IviRuntimeStream, type IviRuntimeUserTextToResponseCallbacks, type IviRuntimeUserTextToResponseOptions, type IviRuntimeUserTextToResponseResult, type IviStageSlotBinding, type IviStageViewContextValue, type IviTrackSlotBackground, useIviStageView, useManagedIviRuntime, useRuntimeState };
708
+ export { EMPTY_RUNTIME_STATE, IVILivekitPlayer, type IVILivekitPlayerProps, IVIStageView, type IVIStageViewProps, IVISubtitleOverlay, type IVISubtitleOverlayProps, type IVISubtitleOverlayStyle, IVITrackSlot, type IVITrackSlotProps, IVITrtcPlayer, type IVITrtcPlayerProps, type IviFrontendClientConfig, IviFrontendSdk, type IviManagedRuntimeConfig, type IviManagedRuntimeLogCallback, type IviManagedRuntimeLogEntry, type IviManagedRuntimeLogLevel, type IviManagedRuntimeLogSource, type IviRuntimeConversationItem, type IviRuntimeConversationLifecycle, type IviRuntimeConversationStatus, IviRuntimeCoordinator, type IviRuntimeCoordinatorConfig, IviRuntimeDispatcher, type IviRuntimeDispatcherConfig, type IviRuntimeEventListener, type IviRuntimeLogCallback, type IviRuntimeLogEntry, type IviRuntimeLogLevel, type IviRuntimeSource, type IviRuntimeSourcePreloadState, type IviRuntimeState, type IviRuntimeStatus, type IviRuntimeStream, type IviRuntimeUserTextToResponseCallbacks, type IviRuntimeUserTextToResponseOptions, type IviRuntimeUserTextToResponseResult, type IviSourcePlaybackLivekit, type IviSourcePlaybackLivekitDescriptor, type IviStageSlotBinding, type IviStageViewContextValue, type IviSubtitleItem, type IviSubtitleRole, type IviUseSubtitlesOptions, LivekitSourceManager, TrtcSourceManager, isLivekitSourcePlayback, isReadyLivekitRuntimeSource, isSameLivekitConfig, useIviStageView, useIviSubtitles, useManagedIviRuntime, useRuntimeState };