/**
 * Pure chat-session lease policy.
 *
 * Keep lease freshness, ownership, acquisition, release, and conflict messages
 * here. This class should not perform storage I/O; callers persist the returned
 * session through the owning service or repository.
 */
import type { ChatSession, ChatSessionLease } from '../../../../../core/chat/types.js';
import type { ChatSessionLeaseConflictOptions, ChatSessionLeaseOwner } from './types.js';
export declare const SESSION_LEASE_REFRESH_INTERVAL_MS: number;
export declare const SESSION_LEASE_STALE_AFTER_MS: number;
export declare class ChatSessionLeases {
    static isFresh(lease: ChatSessionLease | undefined, options?: {
        now?: number;
        staleAfterMs?: number;
    }): boolean;
    static isOwnedByDeadLocalProcess(lease: ChatSessionLease | undefined, options?: {
        isProcessAlive?: (pid: number) => boolean;
    }): boolean;
    static acquire(session: ChatSession, owner: ChatSessionLeaseOwner, options?: {
        now?: number;
    }): ChatSession;
    static refresh(session: ChatSession, owner: Pick<ChatSessionLeaseOwner, 'ownerId'>, options?: {
        now?: number;
    }): ChatSession;
    static release(session: ChatSession, owner?: Pick<ChatSessionLeaseOwner, 'ownerId'>): ChatSession;
    static conflict(session: ChatSession, owner: ChatSessionLeaseOwner, options?: ChatSessionLeaseConflictOptions): string | undefined;
    private static defaultIsProcessAlive;
}
//# sourceMappingURL=leases.d.ts.map