import { type EffectiveSessionControl, type SessionEvent, type SessionStatus } from "@opengeni/sdk"; import { type SessionRealtimeControllerSnapshot, type RealtimeVoiceSettings, type SessionRealtimeModel } from "@opengeni/sdk/realtime"; import { type ReactNode, type RefObject } from "react"; import { type RealtimeControllerClient, type RealtimeModelOption, type SessionRealtimeControllerFactory, useRealtimeModelSelection, useSessionRealtime } from "./session-realtime.js"; export { codexRealtimeAdmissionAllowed, codexRealtimeAdmissionBlocker, CODEX_LIVE_MODEL, prestartSessionRealtime, realtimeAppLanguage, realtimeConversationLanguage, sessionRealtimeLifecycleIsActive, useRealtimeLanguagePreference, useRealtimeModelSelection, useSessionRealtime, } from "./session-realtime.js"; export type { RealtimeModelOption, SessionRealtimeControllerFactory } from "./session-realtime.js"; declare const REALTIME_MODEL_PROVIDERS: readonly ["OpenGeni", "Connected Codex", "Connected SuperGrok", "Your Gateway", "Your ElevenLabs"]; type RealtimeModelProvider = (typeof REALTIME_MODEL_PROVIDERS)[number]; export declare function SessionRealtimeControl(props: { client?: RealtimeControllerClient | undefined; workspaceId?: string | undefined; sessionId: string; sessionStatus: SessionStatus; effectiveControl: EffectiveSessionControl; events: SessionEvent[]; eventsReady: boolean; codexConnected: boolean; /** Model-visible application context captured with each durable realtime message. */ getModelContext?: (() => string | undefined) | undefined; realtimeAutostartModel?: SessionRealtimeModel | undefined; onRealtimeAutostartConsumed?: (() => void) | undefined; /** Host hides dictate (and can choreograph layout) while realtime voice is live. */ onVoiceActiveChange?: ((active: boolean) => void) | undefined; /** * `split` attaches the model chevron at every breakpoint (public default). * `split-desktop` hides it below `sm` when the host owns mobile selection. * Inside a container-responsive Composer.Root, `sm` follows that composer. * `none` never attaches a model menu to the bar button. */ modelMenu?: "split" | "split-desktop" | "none" | undefined; /** Explicitly expose low-level controller diagnostics; disabled by default. */ showDiagnostics?: boolean | undefined; /** * Voice settings for this session's voice (voice, language, turn eagerness), * over the workspace's saved settings for the selected model. A language the * person picks in the voice menu takes precedence. Settings the selected * model does not offer are ignored. */ voiceSettings?: RealtimeVoiceSettings | undefined; /** Deterministic browser-test/demo seam. Production hosts should use the SDK default. */ controllerFactory?: SessionRealtimeControllerFactory | undefined; }): import("react").JSX.Element; type NewSessionRealtimeControlProps = { client?: RealtimeControllerClient | undefined; workspaceId?: string | undefined; codexConnected: boolean; disabled?: boolean | undefined; disabledReason?: string | null | undefined; onStart: (model: SessionRealtimeModel) => Promise; /** Parent-owned selection (e.g. shared with the mobile “+” voice-model panel). */ models?: readonly RealtimeModelOption[] | undefined; selectedModel?: RealtimeModelOption | undefined; onSelectModel?: ((modelId: string) => void) | undefined; /** * `split` attaches the model chevron at every breakpoint (public default). * `split-desktop` hides it below `sm` when the host owns mobile selection (e.g. “+”). * Inside a container-responsive Composer.Root, `sm` follows that composer. * `none` never attaches a model menu to the bar button. */ modelMenu?: "split" | "split-desktop" | "none" | undefined; }; export declare function NewSessionRealtimeControl(props: NewSessionRealtimeControlProps): import("react").JSX.Element; export declare function RealtimeVoiceControl(props: { snapshot: SessionRealtimeControllerSnapshot; canStart: boolean; admissionBlocker?: string | null | undefined; modelAvailable: boolean; selectionDisabled?: boolean | undefined; /** Prefer `bottom` on home/new-session; `top` for the docked session composer. */ menuSide?: "top" | "bottom" | undefined; /** * `split` = start + model chevron at every breakpoint (public SDK default). * `split-desktop` = chevron from `sm` up; below that the host owns selection. * Inside a container-responsive Composer.Root, `sm` follows that composer. * `none` = start button only. */ modelMenu?: "split" | "split-desktop" | "none" | undefined; showDiagnostics?: boolean | undefined; /** Extra classes on the in-bar mute cluster (e.g. `max-sm:hidden` when mutes live in “+”). */ muteControlsClassName?: string | undefined; audioRef: RefObject; selectedModel?: RealtimeModelOption | undefined; models?: readonly RealtimeModelOption[] | undefined; onSelectModel?: ((modelId: string) => void) | undefined; onStart: () => Promise; onStop: () => Promise; onRetry: () => Promise; onRetryAudibleOutput: () => Promise; onSetInputMuted: (muted: boolean) => void; onSetOutputMuted: (muted: boolean) => void; }): import("react").JSX.Element; /** Drill-in body for the mobile composer “+” menu — same catalog as the desktop chevron. */ export declare function RealtimeVoiceModelPanel(props: { models: readonly RealtimeModelOption[]; selectedModel: RealtimeModelOption; disabled?: boolean | undefined; leading?: ReactNode | undefined; onSelect: (modelId: SessionRealtimeModel) => void; }): import("react").JSX.Element; export declare function RealtimeModelPickerMenu(props: { models: readonly RealtimeModelOption[]; selectedModel: RealtimeModelOption; provider: RealtimeModelProvider | null; direction: 1 | -1; disabled: boolean; onProviderChange: (provider: RealtimeModelProvider | null, direction: 1 | -1) => void; onSelect: (modelId: SessionRealtimeModel) => void; }): import("react").JSX.Element; /** @deprecated Use the provider-neutral realtime names. */ export declare const useSessionCodexRealtime: typeof useSessionRealtime; /** @deprecated Use the provider-neutral realtime names. */ export declare const useWorkspaceRealtimeModelSelection: typeof useRealtimeModelSelection; /** @deprecated Use the provider-neutral realtime names. */ export declare const SessionCodexRealtimeControl: typeof SessionRealtimeControl; /** @deprecated Use the provider-neutral realtime names. */ export declare const CodexRealtimeControl: typeof RealtimeVoiceControl;