import { fetchGatewayModelIds } from "../gateway-models.js";
import type { SetupState } from "../state.js";
import type { SetupBox } from "../step.js";
/**
 * What the gather decided to validate. `model: null` means nothing to
 * validate: interactive runs pick from the gateway-backed catalog already.
 */
export interface PreflightInput {
    /** Model id to validate against the AI Gateway catalog, or null to skip. */
    model: string | null;
}
/** Injected for tests; defaults to the real AI Gateway catalog read. */
export interface PreflightDeps {
    fetchGatewayModelIds: typeof fetchGatewayModelIds;
}
export interface PreflightOptions {
    /** Directory to run `vercel` from: the project's parent (it does not exist yet). */
    cwd: string;
    /**
     * Headless mode: only a headless `--model` needs catalog validation, so the
     * gather derives a model to check from state. Interactive runs pick from the
     * gateway-backed catalog and validate nothing. The box prompts for nothing,
     * so this dispatch comes from the composition site, not from a question.
     */
    headless?: boolean;
    deps?: PreflightDeps;
}
/**
 * THE PREFLIGHT BOX: fails fast on an unknown `--model` BEFORE any filesystem
 * scaffolding, so a bad flag never leaves a half-provisioned project on disk.
 * Only a headless `--model` needs the gateway round-trip, so the interactive
 * gather yields a no-op input. The scaffold bakes a gateway-format model id
 * on every wiring (the `byok` block routes through the Gateway too), so the
 * check applies regardless of how credentials are wired. Team validation
 * lives in the resolve-provisioning box.
 */
export declare function preflight(options: PreflightOptions): SetupBox<SetupState, PreflightInput, null>;
