import { type TunnelProvider } from "./tunnel.js";
import type { VisionClawConfig } from "../config/types.js";
import type { RealtimeBackend } from "../realtime/server.js";
export interface AgentStatusProvider {
    getBusy: () => boolean;
    getStopRequested: () => boolean;
    requestStop: () => void;
}
export type StatusReportProvider = (forceRefresh: boolean) => Promise<string>;
export interface ObsServerOptions {
    host?: string;
    port?: number;
    bufferSize?: number;
    tunnel?: TunnelProvider;
    tunnelName?: string;
    tunnelHostname?: string;
    /** Optional dev-profile isolation: path to per-profile cloudflared cert.pem. */
    tunnelOriginCert?: string;
    /** Optional dev-profile isolation: path to per-profile cloudflared config.yml. */
    tunnelConfigPath?: string;
    agentStatus?: AgentStatusProvider;
    statusReport?: StatusReportProvider;
    config?: VisionClawConfig;
    /**
     * Realtime voice backend (gpt-realtime Mini App). When supplied the OBS
     * server mounts it under `/realtime`, so it is reachable via the same
     * Cloudflare tunnel as `/obs` and `/rdp`.
     */
    realtimeBackend?: RealtimeBackend;
}
export declare function startObsServer(options?: ObsServerOptions): {
    port: number;
    close: () => Promise<void>;
    tunnelUrl: Promise<string | null>;
    restartTunnel: () => Promise<string | null>;
};
//# sourceMappingURL=server.d.ts.map