View as markdown

TypeScript types

Every type the NPM packages export. Most are re-exported from @livelayer/sdk through @livelayer/react, so importing from either works.

ts
import type {
  AgentState,
  ConnectionState,
  TranscriptEntry,
  AgentConfig,
  AgentCommand,
  AgentCapability,
  AvatarWidgetProps,
  AvatarWidgetHandle,
  ControlledSession,
  DisplayMode,
  WidgetPosition,
  TeamMember,
  BrandingConfig,
  RoutePattern,
  PageContext,
  SoundEffectsConfig,
  AgentEventDetail,
  SessionOptions,
  SessionCallbacks,
  TrackerConfig,
  VisitorInfo,
} from "@livelayer/react";

Session lifecycle

ConnectionState

ts
type ConnectionState = "idle" | "connecting" | "connected" | "disconnected" | "error";

The state of the LiveKit room connection.

AgentState

ts
type AgentState = "idle" | "listening" | "thinking" | "speaking";

What the agent is doing right now. Drives UI cues like the "thinking" pulse and mic-active indicator.

TranscriptEntry

ts
interface TranscriptEntry {
  id: string;
  role: "agent" | "user";
  text: string;
  final: boolean;
}

A single transcript line. Partial entries (final: false) are streamed in as the speaker talks; the final version replaces them once the speaker finishes.

AgentConfig

ts
interface AgentConfig {
  name: string;
  avatarImageUrl: string;
  idleLoopUrl?: string;
}

Server-published agent metadata. Surfaced once the session connects.

Display & layout

DisplayMode

ts
type DisplayMode = "hidden" | "minimized" | "expanded";

Used by <AvatarWidget>'s displayMode and defaultDisplayMode.

WidgetPosition

ts
type WidgetPosition =
  | "top-left"
  | "top-right"
  | "bottom-left"
  | "bottom-right"
  | "custom";

Where the floating bubble docks. "custom" means "I'll position it myself with className / style."

Agent commands & events

AgentCommand

ts
type AgentCommand = {
  type: string;
  [key: string]: unknown;
};

An open union — anything the agent emits over its data channel. Universal commands (navigate, scroll_page, scroll_to, click, fill_field, submit_form) are handled by the widget; everything else gets surfaced via onAgentCommand for your app to handle.

AgentCapability

ts
type AgentCapability =
  | "navigate"
  | "scroll"
  | "click"
  | "fill_forms"
  | "submit_forms"
  | "read_page";

Allowlist for what the agent is permitted to do on your page. See Capabilities in <AvatarWidget>.

AgentEventDetail

ts
interface AgentEventDetail {
  eventName: string;
  data?: unknown;
}

The wrapper for every observability event surfaced to onAgentEvent. Use for analytics, logging, or piping to your own event bus.

Component props

AvatarWidgetProps

The full prop type for <AvatarWidget>. See the reference page for every field.

AvatarWidgetHandle

ts
interface AvatarWidgetHandle {
  sendData(data: Record<string, unknown>): Promise<void>;
}

Imperative methods exposed via forwardRef. Right now only sendData (publish over the LiveKit data channel).

ControlledSession

ts
interface ControlledSession {
  agentId: string;
  baseUrl?: string;
  connectionState: ConnectionState;
  agentState: AgentState;
  transcript: TranscriptEntry[];
  agentConfig: AgentConfig | null;
  videoElement: HTMLVideoElement | null;
  audioElement: HTMLAudioElement | null;
  canResume: boolean;
  error: string | null;
  connect(): Promise<void>;
  disconnect(): void;
  sendData?(data: Record<string, unknown>): Promise<void>;
  subscribeToDataMessages?(handler: (msg: Record<string, unknown>) => void): () => void;
}

Pass to <AvatarWidget>'s controlledSession prop when you own the session lifecycle. See Controlled session.

BrandingConfig

ts
interface BrandingConfig {
  logoUrl?: string;
  productName?: string;
  primaryColor?: string;
  accentColor?: string;
  backgroundColor?: string;
  textColor?: string;
}

TeamMember

ts
interface TeamMember {
  id: string;
  name: string;
  role?: string;
  avatarImageUrl?: string;
  previewVideoUrl?: string;
  agentId?: string;
}

Used by <AvatarWidget>'s teamMembers prop.

SoundEffectsConfig

ts
interface SoundEffectsConfig {
  chime?: boolean;
  confirmation?: boolean;
  thinking?: boolean;
}

Toggle individual sound effects.

Routing

RoutePattern

ts
type RoutePattern = string | RegExp | ((pathname: string) => boolean);

Used by showOn and hideOn. Strings support glob-style * (single segment) and ** (any depth).

Page awareness

PageContext

ts
interface PageContext {
  headings: Array<{ level: number; text: string }>;
  links: Array<{ href: string; text: string }>;
  visibleText: string;
  formFields: Array<{ name: string; label: string; type: string; required?: boolean }>;
  regions: Array<{ name: string; description?: string; text: string }>;
  extras?: Record<string, unknown>;
}

The DOM snapshot sent to the agent on request_page_context. Override extraction via getPageContext on <AvatarWidget>.

Session options

SessionOptions

ts
interface SessionOptions {
  agentId: string;
  baseUrl?: string;
  apiKey?: string;
  sessionEndpoint?: string;
  sessionBody?: Record<string, unknown>;
}

Passed to useLiveKitSession() and new LiveKitSession().

SessionCallbacks

ts
interface SessionCallbacks {
  onConnectionStateChange?: (state: ConnectionState) => void;
  onAgentStateChange?: (state: AgentState) => void;
  onTranscript?: (entries: TranscriptEntry[]) => void;
  onAgentConfig?: (config: AgentConfig) => void;
  onAudioTrack?: (audio: HTMLAudioElement) => void;
  onVideoTrack?: (video: HTMLVideoElement) => void;
  onVideoTrackRemoved?: () => void;
  onError?: (message: string, code?: string) => void;
  onDataMessage?: (msg: Record<string, unknown>) => void;
  onResumabilityChange?: (canResume: boolean) => void;
}

The full callback set settable on a LiveKitSession instance. Used directly in vanilla SDK consumption; wrapped by useLiveKitSession for React.

Tracker

TrackerConfig

ts
interface TrackerConfig {
  agentId: string;
  apiBase?: string;
  autoTrack?: boolean;
  autoTrackClicks?: boolean;
}

VisitorInfo

ts
interface VisitorInfo {
  id: string;
  isReturning: boolean;
  sessionCount: number;
}

Returned by tracker.init().