export interface StaleBranchInfo {
    /** Short ref name, e.g. 'tmp-foo' or 'feat/spec-100-bar'. */
    name: string;
    /** Full 40-char tip SHA. */
    sha: string;
    /** Why this branch is considered stale. */
    reason: 'merged' | 'cherry-picked' | 'spec-done';
}
export interface SkippedBranchInfo {
    name: string;
    /** Why this branch was skipped (not deleted). */
    skipReason: 'current_branch' | 'not_merged' | 'recent_reflog' | 'protected';
}
export interface StaleWorktreeInfo {
    /** Absolute path to the worktree. */
    path: string;
    /** Associated branch name (may be null for detached HEAD). */
    branch: string | null;
    /** Why this worktree is stale. */
    reason: 'merged_branch' | 'no_uncommitted_changes';
}
export interface StaleStashInfo {
    /** Stash ref, e.g. 'stash@{0}'. */
    ref: string;
    /** Stash creation Unix timestamp. */
    createdAt: number;
    /** Original stash message. */
    message: string;
    /** Age in days. */
    ageDays: number;
    /**
     * SPEC-782: why this stash is deletable.
     * 'age' = ≥30 days old;
     * 'orphan-branch' = base branch no longer exists locally;
     * 'orphan-merged' = base commit is reachable from develop HEAD (already merged).
     */
    reason: 'age' | 'orphan-branch' | 'orphan-merged';
}
export interface HousekeepingReport {
    /** ISO timestamp of when the sweep ran. */
    sweepAt: string;
    /** Project path that was analysed. */
    projectPath: string;
    /** Items that would be / were deleted. */
    wouldDelete: {
        branches: StaleBranchInfo[];
        worktrees: StaleWorktreeInfo[];
        stashes: StaleStashInfo[];
    };
    /** Items kept with reasons. */
    kept: {
        branches: SkippedBranchInfo[];
    };
    /** Whether this was a dry-run (no changes made). */
    executed: boolean;
    /** Number of items successfully deleted (only meaningful when executed === true). */
    deleted: {
        branches: number;
        worktrees: number;
        stashes: number;
        /** SPEC-771: stale .bak.* files removed from planu/specs/. */
        backups: number;
    };
}
export type OrphanMarkdownAction = 'deleted_matched' | 'imported_then_deleted' | 'skipped';
export interface OrphanMarkdownEntry {
    /** Filename (not full path) of the orphan markdown. */
    file: string;
    /** Action taken (or would be taken in dry-run mode). */
    action: OrphanMarkdownAction;
    /** ID of the matched or newly created Planu spec, if any. */
    matchedSpecId?: string;
}
export interface OrphanBrainstormingCleanResult {
    /** Total markdown files found in docs/superpowers/specs/. */
    scanned: number;
    /** Per-file details. */
    entries: OrphanMarkdownEntry[];
}
export interface OrphanBrainstormingCleanInput {
    projectPath: string;
    projectId: string;
    dryRun: boolean;
    listSpecs: (projectId: string) => Promise<{
        id: string;
        title: string;
    }[]>;
    createSpec?: (opts: {
        projectId: string;
        title: string;
        description: string;
    }) => Promise<{
        id: string;
    }>;
}
export interface EphemeralArtifactsResult {
    /** Total ephemeral files found across all spec directories. */
    found: number;
    /** Files deleted (0 in dry-run mode). */
    deleted: number;
    /** Paths that would be deleted (populated in dry-run; cleared after real run). */
    wouldDelete: string[];
    /** Non-fatal errors encountered during scan. */
    errors: string[];
}
export interface CleanEphemeralArtifactsInput {
    /** Absolute path to the project root (planu/specs/ is resolved from here). */
    projectPath: string;
    /** When true, report but do not delete anything. */
    dryRun: boolean;
}
export interface FindStaleBranchesInput {
    projectPath: string;
    mainBranch?: string;
    /** Glob-style patterns, e.g. ['tmp-*', 'feat/spec-*', 'worktree-agent-*']. */
    patterns?: string[];
}
export interface FindStaleWorktreesInput {
    projectPath: string;
}
export interface FindStaleStashesInput {
    projectPath: string;
    maxAgeDays?: number;
}
export interface RunHousekeepingSweepInput {
    projectPath: string;
    dryRun?: boolean;
    aggressive?: boolean;
    includeStashes?: boolean;
}
export interface HousekeepingHistoryEntry {
    id: string;
    deletedAt: string;
    projectPath: string;
    kind: 'branch' | 'worktree' | 'stash';
    ref: string;
    sha: string;
    prevSha: string;
    sha256: string;
}
//# sourceMappingURL=housekeeping.d.ts.map