import { type WorktreeScope } from "./worktree-scope.js"; export type ScopeLeaseErrorCode = "scope-conflict" | "not-held" | "corrupt-state" | "invalid-request" | "lock-timeout" | "lock-lost"; export declare class ScopeLeaseError extends Error { readonly code: ScopeLeaseErrorCode; constructor(code: ScopeLeaseErrorCode, message: string); } export type ScopeLeaseAcquireRequest = { readonly scope: WorktreeScope; readonly ownerId?: string; readonly ttlMs?: number; }; export type ScopeLeaseRegistryOptions = { readonly ttlMs?: number; readonly mutexRetries?: number; readonly mutexRetryMs?: number; readonly mutexStaleMs?: number; }; export interface ScopeLease { readonly id: string; readonly ownerId: string; readonly scope: WorktreeScope; heartbeat(): Promise; assertHeld(): Promise; isReleased(): Promise; release(): Promise; abandon(): Promise; close(): void; } export declare class ScopeLeaseRegistry { private readonly stateRoot; private readonly statePath; private readonly lockPath; private readonly options; constructor(stateRoot: string, options?: ScopeLeaseRegistryOptions); static open(stateRoot: string, options?: ScopeLeaseRegistryOptions): ScopeLeaseRegistry; hasConflictingLease(scope: WorktreeScope): Promise; acquire(request: ScopeLeaseAcquireRequest): Promise; private validateRequest; private makeLease; private load; private cleanupTemps; private save; private sameMutexSnapshot; private sameDirectorySnapshot; private mutexSnapshot; private assertMutexHeld; private quarantineSnapshot; private sameQuarantineSnapshot; private sameMovedQuarantineSnapshot; private cleanupQuarantine; private hasQuarantine; private recoverStaleLock; private removeOwnedMutex; private withLock; }