eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
38 lines (37 loc) • 1.76 kB
TypeScript
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>;