import { type AutomaticAnalysisBudget } from "./automatic-analysis-config.js"; import { type E2BDesktopModule } from "./e2b-desktop-launch.js"; import { type LabBackend } from "./lab-engine.js"; import { type LabResolveFailure } from "./labs.js"; export declare const LAB_PREFLIGHT_SCHEMA = "humanish.lab-preflight-result.v1"; export type LabPreflightReachabilityMode = "metadata" | "public-preview" | "sandbox-loopback" | "prepared-host"; export interface LabPreflightCheck { name: string; ok: boolean; message: string; } export interface LabPreflightTarget { label: string; kind: "subject.appUrl" | "actors[0].lanes[].target" | "subject.serve.url" | "subject.product.publicSurface"; targetDigest: string; originDigest?: string; loopback: boolean; checked: boolean; reachable?: boolean; status: "not_checked" | "passed" | "failed" | "blocked"; statusCode?: number; errorCode?: "HUMANISH_PREFLIGHT_TARGET_BLOCKED" | "HUMANISH_PREFLIGHT_TARGET_UNREACHABLE"; message: string; } export interface LabPreflightSandbox { created: boolean; killed?: boolean; sandboxIdDigest?: string; template?: string; } export interface LabPreflightSpend { e2bDesktop: boolean; model: false; } export interface LabPreflightResult { /** The separate budget for a future live run, never spend by preflight itself. */ analysis?: AutomaticAnalysisBudget; schema: typeof LAB_PREFLIGHT_SCHEMA; ok: boolean; cwd: string; lab: string; labId?: string; origin?: string; path?: string; backend?: LabBackend; reachability: LabPreflightReachabilityMode; checks: LabPreflightCheck[]; targets: LabPreflightTarget[]; sandbox: LabPreflightSandbox; spend: LabPreflightSpend; warnings: string[]; error?: { code: LabResolveFailure["error"]["code"] | "HUMANISH_LAB_PREFLIGHT_INVALID_OPTION" | "HUMANISH_LAB_PREFLIGHT_UNSUPPORTED_ROUTE" | "HUMANISH_LAB_PREFLIGHT_TARGET_POLICY" | "HUMANISH_LAB_PREFLIGHT_ENV_MISSING" | "HUMANISH_LAB_PREFLIGHT_E2B_REQUIRED" | "HUMANISH_LAB_PREFLIGHT_TARGET_UNREACHABLE" | "HUMANISH_LAB_PREFLIGHT_PROVISION_FAILED" | "HUMANISH_LAB_PREFLIGHT_TEARDOWN_FAILED"; message: string; }; } export interface LabPreflightHooks { loadDesktopModule?: () => Promise; now?: () => number; sleep?: (ms: number) => Promise; } export interface RunLabPreflightOptions { cwd: string; lab: string; reachability?: LabPreflightReachabilityMode; timeoutMs?: number; env?: NodeJS.ProcessEnv; hooks?: LabPreflightHooks; } export declare function runLabPreflight(options: RunLabPreflightOptions): Promise;