import { type OrphanPolicy } from "./reconcile-orphans.js"; /** One opt-in generator's stake in the sweep. */ export interface OrphanJob { /** For diagnostics — which generator's namespace this is. */ readonly generatorName: string; /** Absolute directory this generator wrote to, i.e. the base its policy's * relative paths are measured from. */ readonly writeOutDir: string; readonly policy: OrphanPolicy; } export interface SweepOrphansArgs { readonly genStateDir: string; /** Absolute project root — the base gen-state keys are relative to. */ readonly projectRoot: string; /** Project-relative paths written on THIS run, by ANY generator. A path some * other generator now produces is not an orphan, so the whole run's output is * the right exclusion set, not just the opting-in generator's. */ readonly emittedRelPaths: readonly string[]; readonly jobs: readonly OrphanJob[]; /** Decide and report, touch nothing. */ readonly dryRun: boolean; } export interface SweepOrphansResult { /** Untouched orphans deleted (or, under dryRun, that would be). */ readonly removed: string[]; /** Hand-edited orphans left alone and reported. */ readonly refused: string[]; /** Which generator's namespace each refusal came from, so the caller can name it * instead of assuming one. `orphanPolicy` is a generic `Generator` field and an app * is encouraged to compose its own generator, so a message hardcoding one * generator's name would be wrong for exactly the users the seam exists for. */ readonly refusedBy: ReadonlyMap; /** Hand-edited orphans deleted because their policy set `force`. Separate from * `removed` so the caller can say the louder thing about them. */ readonly forced: string[]; } export declare function sweepOrphans(args: SweepOrphansArgs): SweepOrphansResult; //# sourceMappingURL=orphan-sweep.d.ts.map