import type { Room } from '@livekit/rtc-node';
import type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';
import type { AvatarMetrics } from '../../metrics/base.js';
import type { AgentSession } from '../agent_session.js';
export type AvatarSessionCallbacks = {
    metrics_collected: (metrics: AvatarMetrics) => void;
};
declare const AvatarSession_base: new () => TypedEmitter<AvatarSessionCallbacks>;
/**
 * Base class for avatar plugin sessions.
 *
 * Plugin implementations should extend this class and call `super.start(agentSession, room)`
 * first in their own `start()` method. The base:
 * - Registers {@link AvatarSession.aclose} as a job shutdown callback, so avatar resources
 *   are released when the job shuts down.
 * - Warns when the avatar session is started after {@link AgentSession.start} — in that
 *   case the existing audio output will be replaced by the avatar's.
 */
export declare class AvatarSession extends AvatarSession_base {
    #private;
    get avatarIdentity(): string;
    get provider(): string;
    /**
     * Start the avatar session.
     *
     * Subclasses should override this method and call `super.start(agentSession, room)` at the
     * top of their implementation. Subclasses may widen the return type (e.g. returning a
     * session id), matching the `# type: ignore[override]` escape hatch used in Python.
     */
    start(agentSession: AgentSession, room: Room): Promise<unknown>;
    /**
     * Wait until the avatar participant has joined the room and published its video track.
     *
     * @param timeout - Timeout in milliseconds. Pass `null` to wait indefinitely.
     */
    waitForJoin({ timeout }?: {
        timeout?: number | null;
    }): Promise<void>;
    /**
     * Release any resources owned by this avatar session. Default implementation is a no-op;
     * subclasses can override to perform cleanup.
     */
    aclose(): Promise<void>;
}
export {};
//# sourceMappingURL=avatar_session.d.ts.map