export type MeshPrecheck = { sizeBytes: number; materialCount: number | null; warnings: string[]; }; /** * Cheap GLB sniff: header magic/version plus the JSON chunk's material count. WARN-only by design — * the caps are the server's (env-overridable), so a wrong local verdict must never block. */ export declare function meshPrecheck(bytes: Buffer, label: string): MeshPrecheck; /** Slug an id out of a title / mesh basename the way the descriptor's id pattern demands. */ export declare function deriveItemId(raw: string): string; /** The item types the lane scaffolds. The type decides which flags apply — a weapon has no clip, an emote no category. */ export declare const ITEM_DEF_TYPES: readonly ["weapon", "emote"]; export type ItemDefType = (typeof ITEM_DEF_TYPES)[number]; export type ScaffoldInput = { /** 'weapon' (the default) or 'emote'. */ type?: string; /** WEAPON: the prop mesh + its archetype. */ mesh?: string; category?: string; sounds?: string; /** EMOTE: the animation clip + how it plays, and optionally one .ogg the performance carries. */ clip?: string; playback?: string; audio?: string; /** EMOTE: the optional enter/exit transition clips the body clip is chained between. */ introClip?: string; outroClip?: string; title?: string; out?: string; }; export type ScaffoldResult = { descriptorPath: string; descriptor: Record; /** Files copied into `/sounds/`, descriptor-relative. */ copiedSounds: string[]; warnings: string[]; nextSteps: string[]; }; export declare function scaffoldItemDef(input: ScaffoldInput): ScaffoldResult;