import { isEveProject, scaffoldBaseProject, type EvePackageContract } from "#setup/scaffold/index.js"; import type { Prompter } from "../prompter.js"; import { type SetupState } from "../state.js"; import type { SetupBox } from "../step.js"; /** Injected for tests; defaults to the real eve-scaffold helpers. */ export interface ScaffoldDeps { scaffoldBaseProject: typeof scaffoldBaseProject; isEveProject: typeof isEveProject; } export interface ScaffoldOptions { /** Reports scaffold progress and overwrite warnings. The box never prompts. */ prompter: Prompter; evePackage?: EvePackageContract; /** Parent directory the project folder is created inside. Defaults to cwd. */ targetDirectory?: string; /** Allow the in-place scaffold to replace eve scaffold files that already exist. */ overwriteExisting?: boolean; /** * Headless mode: a headless re-run over an existing eve project skips * scaffolding (idempotent re-entry); an interactive run always scaffolds and * lets `scaffoldBaseProject` own the in-place conflict rules. The box prompts * for nothing, so this dispatch comes from the composition site. */ headless?: boolean; deps?: ScaffoldDeps; } /** * Whether the run is headless. A headless re-run over an existing eve project * skips scaffolding (idempotent re-entry); an interactive run always scaffolds. */ export interface ScaffoldInput { headless: boolean; } /** * THE SCAFFOLD BOX: writes the base agent template into the path resolved by * the target box. It prompts for nothing; the gather only records which mode * ran, because a headless re-run on an already-scaffolded eve project skips the * write and continues setup instead of failing. */ export declare function scaffold(options: ScaffoldOptions): SetupBox;