import type { Client } from "#client/client.js";
import type { ClientSession } from "#client/session.js";
import type { CancelSessionResult, SendTurnInput, SessionState } from "#client/types.js";
import type { HandleMessageStreamEvent, TurnFailureStreamEvent } from "#protocol/message.js";
import type { InputRequest, InputResponse } from "#runtime/input/types.js";
import { AssertionCollector } from "#evals/assertions/collector.js";
import type { EveEvalAssertions, EveEvalLiveTurn, EveEvalOutputAssertions, EveEvalSession, EveEvalSessionResult, EveEvalTurn } from "#evals/types.js";
import type { EveEvalInputRequestMatchOptions } from "#evals/match.js";
/**
 * Error thrown by {@link EveEvalTurn.expectOk} when a turn failed.
 */
export declare class EveEvalTurnFailedError extends Error {
    readonly event: TurnFailureStreamEvent | undefined;
    readonly turn: EveEvalTurn;
    constructor(turn: EveEvalTurn);
}
export interface EvalSessionDriver extends EveEvalAssertions, EveEvalOutputAssertions {
}
export declare class EvalSessionDriver implements EveEvalSession {
    #private;
    constructor(input: {
        readonly collector: AssertionCollector;
        readonly session: ClientSession;
        readonly signal?: AbortSignal;
    });
    get events(): readonly HandleMessageStreamEvent[];
    get lastTurn(): EveEvalTurn | undefined;
    get pendingInputRequests(): readonly InputRequest[];
    get sessionId(): string | undefined;
    get state(): SessionState;
    cancel(): Promise<CancelSessionResult>;
    requireInputRequest(filter?: EveEvalInputRequestMatchOptions): InputRequest;
    respond(...responses: InputResponse[]): Promise<EveEvalTurn>;
    respondAll(optionId: string): Promise<EveEvalTurn>;
    send(input: SendTurnInput): Promise<EveEvalTurn>;
    start(input: SendTurnInput): Promise<EveEvalLiveTurn>;
    sendFile(text: string, filePath: string, mediaType?: string): Promise<EveEvalTurn>;
    readTurn(options?: {
        readonly startIndex?: number;
    }): Promise<EveEvalTurn>;
    watchTurn(options?: {
        readonly startIndex?: number;
    }, sessionId?: string): EveEvalLiveTurn;
    snapshot(primary: boolean): EveEvalSessionResult;
}
export declare class EvalSessionManager {
    #private;
    constructor(input: {
        readonly client: Client;
        readonly collector?: AssertionCollector;
        readonly signal?: AbortSignal;
    });
    get primary(): EvalSessionDriver;
    newSession(): EvalSessionDriver;
    attachSession(sessionId: string, options?: {
        readonly startIndex?: number;
    }): Promise<EvalSessionDriver>;
    watchTurn(sessionId: string, options?: {
        readonly startIndex?: number;
    }): EveEvalLiveTurn;
    snapshots(): readonly EveEvalSessionResult[];
    lastTurnSession(): EvalSessionDriver | undefined;
    hasActivity(): boolean;
}
