import type { ComputerSession, InteractionPlacement } from "@opengeni/sdk/interaction"; import { type ReactNode } from "react"; import { type BrowserFrameWebSocketFactory } from "../hooks/use-browser-frame-stream.js"; import { type EmbeddedBrowserInteractionClientOverride } from "../session-context.js"; /** * Delay before retrying an automatic end of a lost attached-device browser, or null to stop. * A refusal (4xx, e.g. 409 when the server will not end it) is never retried: re-sending it on * every registry refresh looped about one request per second on prod. */ export declare function staleBrowserEndRetryDelayMs(cause: unknown, failedAttempts: number): number | null; export type BrowserViewerNotification = { kind: "error" | "info"; message: string; }; export type BrowserViewerProps = EmbeddedBrowserInteractionClientOverride & { /** The selected Opengeni agent/session. Peer BrowserSessions stay discoverable. */ sessionId: string; enabled?: boolean | undefined; /** Whether the Browser tab is selected. Keeps the mounted media stream warm * while pausing semantic reads behind other dock tabs. */ active?: boolean | undefined; className?: string | undefined; onNotify?: ((notification: BrowserViewerNotification) => void) | undefined; /** Tests/demos only. Production uses the browser's native WebSocket. */ webSocketFactory?: BrowserFrameWebSocketFactory | undefined; renderEmpty?: ((create: () => void, creating: boolean) => ReactNode) | undefined; /** Optional host capability for placing a human-created headed browser inside * an exact ComputerSession. Browser-only embedders still create a headed * browser; they simply omit the linked desktop resource. */ createLinkedComputer?: ((name: string, placement?: InteractionPlacement) => Promise>) | undefined; /** Navigate to the exact linked ComputerSession; never a lookalike desktop. */ onOpenComputer?: ((computerSessionId: string) => void) | undefined; /** Restore and report the BrowserSession selected in this task's dock. */ initialBrowserSessionId?: string | null | undefined; onBrowserSessionIdChange?: ((browserSessionId: string | null) => void) | undefined; /** Host-owned install/setup surface for attaching an existing Chrome profile. * The machine bridge remains discoverable even when this URL is omitted. */ browserExtensionSetupUrl?: string | undefined; }; /** * Complete browser-native session surface: workspace discovery, agent relevance, * browser/tab switching, live frames, semantic fallback, direct human input, * address navigation, diagnostics, and reconnect. Closing it never closes the browser. */ export declare function BrowserViewer({ sessionId, enabled, active, className, onNotify, webSocketFactory, renderEmpty, createLinkedComputer, onOpenComputer, initialBrowserSessionId, onBrowserSessionIdChange, browserExtensionSetupUrl, ...override }: BrowserViewerProps): import("react").JSX.Element | null;