import type { Environment } from '../config/environments.js'; import type { ProjectContext } from '../project/context.js'; export interface VehicleVoxelizeOptions { context: ProjectContext; environment: Environment; token: string; /** Asset name — the name game code spawns by. */ name: string; glbUrl: string; minVoxelSize: number; maxVoxelSize: number; /** What the vehicle was asked for, used as the asset description when the GLB carries none. */ description: string; log: (message: string) => void; } export interface GenerateAndInstallVehicleOptions { context: ProjectContext; environment: Environment; token: string; prompt?: string; /** The creator's own request, verbatim — recorded server-side for analytics, never generated from. */ creatorPrompt?: string; presetName?: string; name?: string; /** Skip the paid design and voxelize this GLB instead — how a failed run is retried. */ glbUrl?: string; /** Required alongside `glbUrl`: the bake resolution is not recoverable from the other flags. */ minVoxelSize?: number; fetchImpl?: typeof globalThis.fetch; log: (message: string) => void; } export interface VehicleInstallResult { assetId: string; assetName: string; assetUrl?: string; /** * False when the engine registered the asset without physics fitment — it will not drive. Not an * error: the asset is real and placeable, so this is reported rather than thrown. */ drivable: boolean; /** Cosmetic repairs and dropped wrap layers from the build. */ notes: string[]; } /** * Steps 1-3. Everything the caller must resolve first (project, environment, token) is a parameter, * so this stays free of CLI output plumbing and of how the token was obtained. */ export declare function generateAndInstallVehicle(options: GenerateAndInstallVehicleOptions): Promise; /** * Steps 2 and 3. Split from the command so the browser work is callable directly on a retry that * already has a GLB, and so the command file stays about flags and output. */ export declare function voxelizeAndInstallVehicle(options: VehicleVoxelizeOptions): Promise;