/** * Lease-safe project removal for `opensip uninstall --project`. * * Dry-run snapshots under a short project read lease. Real deletion confirms * first (never holding an exclusive lease across the prompt), then acquires a * FIFO project exclusive lease, recollects/revalidates targets, and deletes * only canonical identities while held. * * Does not inspect or delete global user configuration, plugins, or update * state (Task 4.7 owns user-mode removal). */ import { type RuntimeExclusiveLease, type RuntimeReadLease } from '@opensip-cli/core'; import type { UninstallDoneResult } from '@opensip-cli/contracts'; export interface ProjectRemovalOptions { readonly projectDir: string; readonly purge?: boolean; readonly dryRun?: boolean; readonly yes?: boolean; /** High-risk break-glass: discard fixed promotion journal after purge. */ readonly discardRecovery?: boolean; /** Host-owned human-presentation sink; omitted callers receive only the returned result. */ readonly write?: (s: string) => void; readonly prompt?: (question: string) => Promise; /** Test hook: inject lease acquisition. */ readonly acquireReadLease?: (projectDir: string) => Promise; readonly acquireExclusiveLease?: (projectDir: string, posture: 'normal' | 'destructive-discard') => Promise; } /** * Project-mode uninstall: cache + project runtime (+ authored with --purge) * under a project exclusive lease for the mutation phase. */ export declare function executeProjectRemoval(opts: ProjectRemovalOptions): Promise; //# sourceMappingURL=project-removal.d.ts.map