import type http from "node:http";
export declare const REALTIME_SIDECAR_SCHEMA_VERSION = 1;
export declare const REALTIME_SIDECAR_SOURCE = "realtime-miniapp";
export interface TranscriptEntry {
    role: "user" | "assistant";
    text: string;
    timestamp: string;
}
export interface RealtimeActiveSessionInfo {
    sessionId: string;
    startedAt: string;
    lastActivityAt: string;
    expiresAt: string;
    ownerName?: string;
}
export interface VoiceSessionFinishedEvent {
    sessionId: string;
    sidecarPath: string;
    summary: VoiceSessionSummary;
    summaryText: string;
    endedAt: string;
}
export interface RealtimeBackend {
    handleRequest: (req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>;
    getActiveSessionInfo: () => RealtimeActiveSessionInfo | null;
    /**
     * Register a listener that fires once a voice session's transcript has been
     * summarized and the sidecar has been finalized. The realtime agent bridge
     * uses this to enqueue an internal message through the existing idle-wake /
     * busy-interrupt path.
     */
    onVoiceSessionFinished: (listener: (event: VoiceSessionFinishedEvent) => void) => void;
    close: () => Promise<void>;
}
export interface VoiceServerHandle {
    server: http.Server;
    port: number;
    close: () => Promise<void>;
}
export interface VoiceSessionRow {
    session_id: string;
    user_id: string;
    user_name: string | null;
    timestamp_start: string;
    timestamp_end: string;
    duration: number | null;
    summary: string | null;
    transcript: string;
    message_count: number;
}
export type VoiceSummaryStatus = "pending" | "ready" | "failed";
export interface VoiceSessionSummary {
    headline: string;
    userRequests: {
        text: string;
        status: "open" | "done";
    }[];
    assistantCommitments: string[];
    durableFacts: string[];
    noActionable: boolean;
}
//# sourceMappingURL=types.d.ts.map