import type { ParsedCloseResidual } from '../core/close-residual.js'; export declare const IDLE_CLEANUP_HOUR_OPTIONS: readonly [24, 72, 168]; export type IdleCleanupHours = typeof IDLE_CLEANUP_HOUR_OPTIONS[number]; export interface IdleCleanupSessionRow { sessionId: string; status?: string; lastMessageAt?: unknown; pendingRepo?: unknown; tuiPromptActive?: unknown; agentAttention?: unknown; locked?: unknown; } export declare function parseIdleCleanupHours(value: unknown): IdleCleanupHours | null; export declare function idleCleanupCutoffMs(hours: IdleCleanupHours, now?: number): number; export declare function isIdleCleanupCandidate(row: IdleCleanupSessionRow, hours: IdleCleanupHours, now?: number): boolean; export declare function selectIdleCleanupCandidates(rows: T[], hours: IdleCleanupHours, now?: number): T[]; export interface IdleCleanupCloseResult { sessionId: string; ok: boolean; error?: string; /** Closed locally, but its remote session survived and needs manual cleanup. */ residual?: ParsedCloseResidual; } export interface IdleCleanupResult { ok: boolean; olderThanHours: IdleCleanupHours; cutoffMs: number; matched: number; closed: number; failed: number; /** Subset of `closed` whose remote session was NOT cancelled. */ residual: number; results: IdleCleanupCloseResult[]; } export declare function cleanupIdleSessions(rows: T[], hours: IdleCleanupHours, closeCandidate: (row: T) => Promise, now?: number): Promise; //# sourceMappingURL=session-cleanup.d.ts.map