/** * The Bootstrapper: the deterministic half is pure file operations * executing the BootstrapRules (copy the template, strip the example * app, remove paths); the model-performing half (identity rewrite, * dangling-reference fixes, the leftover sweep) phrases each situation * as a task and delegates to the step executor (claudeStep by default — * injectable so tests drive the algorithm without real sessions). * * Loud on stale rules: a rule naming a path the copied tree does not * have throws instead of silently skipping — the rules are validated * against the template in CI (validate-template), so a miss here means * the template moved and the rules did not. */ import type { Bootstrapper, Leftover } from "./bootstrapper.js"; import { type StepExecutor } from "./claude-step.js"; export declare function fileBootstrapper(step?: StepExecutor, /** The command a step runs to check its own work — see * removeFeatureRemainder, where hand-simulating it is the failure mode * that matters. */ typecheckCommand?: string): Bootstrapper; /** * The sweep's report is data, so its parse is strict: the final message * must contain one JSON array of {file, description} entries. Tolerates * surrounding chatter or a code fence by cutting to the outermost * brackets; anything less shaped than that is a step defect worth * throwing about, not guessing around. */ export declare function parseLeftovers(report: string): Leftover[];