export type EmailProvider = {
    /** Domain for generating test emails (e.g. "emailsink.dev") */
    domain: string;
    /**
     * Function to extract content from an email.
     * Called with the email address and a prompt describing what to extract.
     * Should return the extracted string value.
     */
    extractContent: (params: {
        email: string;
        prompt: string;
    }) => Promise<string>;
};
export type AIGateway = "vercel" | "openrouter" | "cloudflare" | "none";
/**
 * Execution mode for browser automation.
 * - "snapshot" (default): ARIA accessibility snapshot + aria-ref locators (works with any gateway).
 * - "cua": OpenAI Responses API with the built-in `computer` tool — visual, coordinate-based
 *   actions. Requires OPENAI_API_KEY and gateway: "none".
 */
export type AIMode = "snapshot" | "cua";
export type ModelConfig = {
    /** Model for executing individual steps. Default: google/gemini-3-flash */
    stepExecution?: string;
    /** Model for running user flows (low effort). Default: google/gemini-3-flash-preview */
    userFlowLow?: string;
    /** Model for running user flows (high effort). Default: google/gemini-3.1-pro-preview */
    userFlowHigh?: string;
    /** Model for assertions (primary). Default: anthropic/claude-haiku-4.5 */
    assertionPrimary?: string;
    /** Model for assertions (secondary). Default: google/gemini-3-flash */
    assertionSecondary?: string;
    /** Model for assertion arbiter. Default: google/gemini-3.1-pro-preview */
    assertionArbiter?: string;
    /** Model for data extraction, wait conditions, and lightweight tasks. Default: google/gemini-2.5-flash */
    utility?: string;
    /**
     * Model for CUA mode (OpenAI Responses API + built-in `computer` tool).
     * Locked to "gpt-5.5" — passing this field to `configure()` currently throws.
     * Override may be re-enabled in a future release.
     */
    cua?: string;
};
export declare const DEFAULT_MODELS: Required<ModelConfig>;
/**
 * Per-call / per-step override of the global `ai` config. Same shape as
 * `Config["ai"]`, all fields optional. Used by `runSteps`, individual `Step`s,
 * and `runUserFlow` to switch mode/gateway/models for part of a run without
 * touching `configure()`.
 */
export type AIOverride = {
    gateway?: AIGateway;
    mode?: AIMode;
    models?: ModelConfig;
};
export type RedisConfig = {
    /**
     * Redis connection URL used for step caching, {{global.*}} placeholders,
     * and project data. Falls back to `process.env.REDIS_URL` when omitted.
     * If neither is set, those features are disabled.
     */
    url?: string;
};
export type TelemetryConfig = {
    /**
     * Axiom API token for OpenTelemetry tracing of AI calls.
     * Falls back to `process.env.AXIOM_TOKEN` when omitted.
     */
    axiomToken?: string;
    /**
     * Axiom dataset for trace storage.
     * Falls back to `process.env.AXIOM_DATASET` when omitted.
     */
    axiomDataset?: string;
};
type Config = {
    email?: EmailProvider;
    ai?: AIOverride;
    /** Base path for file uploads. Default: "./uploads" */
    uploadBasePath?: string;
    /** Redis connection. When omitted, falls back to `REDIS_URL` env var. */
    redis?: RedisConfig;
    /** Telemetry (Axiom) connection. When omitted, falls back to `AXIOM_TOKEN`/`AXIOM_DATASET` env vars. */
    telemetry?: TelemetryConfig;
    /**
     * Directory used to temporarily store video recordings for video-flagged
     * assertions. Defaults to `/tmp/passmark-recordings`. Files are deleted
     * after the assertions consume them.
     */
    videoDir?: string;
};
/**
 * Sets global configuration for Passmark. Call once before using any functions.
 * Subsequent calls merge with existing config (does not reset unset fields).
 *
 * @param config - Configuration options for AI gateway, models, email, and uploads
 *
 * @example
 * ```typescript
 * configure({
 *   ai: { gateway: "none", models: { stepExecution: "google/gemini-3-flash" } },
 *   email: { domain: "test.com", extractContent: async ({ email, prompt }) => "..." },
 * });
 * ```
 */
export declare function configure(config: Config): void;
/**
 * Returns the current global configuration.
 */
export declare function getConfig(): Config;
/**
 * Returns the configured model ID for a given use case, falling back to the default.
 *
 * @param key - The model use case key (e.g. "stepExecution", "utility")
 * @returns The model identifier string (e.g. "google/gemini-3-flash")
 */
export declare function getModelId(key: keyof ModelConfig): string;
/**
 * Returns the configured execution mode ("snapshot" | "cua").
 * Defaults to "snapshot" so existing users see no behavior change.
 */
export declare function getMode(): AIMode;
/**
 * Effective AI config for a single step / call after merging overrides with
 * the global config. `getModelId` looks up a model with the same precedence
 * as the layer search.
 */
export type ResolvedAI = {
    mode: AIMode;
    gateway: AIGateway;
    getModelId: (key: keyof ModelConfig) => string;
};
/**
 * Merge AI overrides into the global config. Later args win.
 *
 * Precedence (right-to-left): the last override wins, then earlier overrides,
 * then the global `configure()` value, then `DEFAULT_MODELS`.
 *
 * Example: `resolveAI(callLevelAi, stepAi)` → step beats call beats global.
 *
 * Throws if any override sets `models.cua` (CUA model is locked, same rule
 * `configure()` enforces).
 */
export declare function resolveAI(...overrides: (AIOverride | undefined)[]): ResolvedAI;
/** @internal Reset config to empty state. Used for testing only. */
export declare function resetConfig(): void;
export {};
