import type { ClientSession } from "#client/session.js";
import type { CancelSessionResult, ClientSessionState, SendTurnInput, SendTurnOptions } from "#client/types.js";
import type { MessageStreamEvent, RuntimeTraceContext, TurnFailureStreamEvent } from "#protocol/message.js";
import type { InputRequest, InputResponse } from "#shared/input.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 & MessageStreamEvent) | undefined;
    readonly turn: EveEvalTurn;
    constructor(turn: EveEvalTurn);
}
export interface EvalSessionDriver extends EveEvalAssertions, EveEvalOutputAssertions {
}
export interface EvalSessionStartedEvent {
    readonly primary: boolean;
    readonly sessionId: string;
    readonly startedAt: string;
    readonly traceContext: RuntimeTraceContext;
}
export declare class EvalSessionDriver implements EveEvalSession {
    #private;
    constructor(input: {
        readonly collector: AssertionCollector;
        readonly onSessionStart?: (event: EvalSessionStartedEvent) => void;
        readonly primary: boolean;
        readonly session: ClientSession;
        readonly onTurn: (session: EvalSessionDriver) => void;
        readonly signal?: AbortSignal;
    });
    get events(): readonly MessageStreamEvent[];
    get transcript(): string;
    get lastInput(): string;
    get lastTurn(): EveEvalTurn | undefined;
    get pendingInputRequests(): readonly InputRequest[];
    get sessionId(): string;
    get state(): ClientSessionState;
    cancel(): Promise<CancelSessionResult>;
    /** @internal */
    cleanup(signal: AbortSignal): Promise<void>;
    requireInputRequest(filter?: EveEvalInputRequestMatchOptions): InputRequest;
    respond(responses: readonly InputResponse[], options?: SendTurnOptions): Promise<EveEvalTurn>;
    startRespond(responses: readonly InputResponse[], options?: SendTurnOptions): Promise<EveEvalLiveTurn>;
    respondAll(optionId: string): Promise<EveEvalTurn>;
    send(message: SendTurnInput["message"], options?: SendTurnOptions): Promise<EveEvalTurn>;
    start(message: string, options?: SendTurnOptions): Promise<EveEvalLiveTurn>;
    /** @internal */
    consume(events: AsyncIterable<MessageStreamEvent>, message?: SendTurnInput["message"]): EveEvalLiveTurn;
    sendFile(text: string, filePath: string, mediaType?: string): Promise<EveEvalTurn>;
    readTurn(options?: {
        readonly startIndex?: number;
    }): Promise<EveEvalTurn>;
    watchTurn(options?: {
        readonly startIndex?: number;
    }): EveEvalLiveTurn;
    snapshot(): EveEvalSessionResult;
}
