interface LeaseSnapshot { activeLeaseId: string | null; activeTaskId: string | null; attemptId: string | null; startedAt: number | null; leaseExpiresAt: number | null; lastExtendedAt: number | null; lastReleasedAt: number | null; lastOutcome: "leased" | "extended" | "completed" | "failed" | "cleared" | null; } interface ActiveLeaseState { taskId: string; attemptId: string | null; leaseExpiresAt: number | null; } const leaseState: LeaseSnapshot = { activeLeaseId: null, activeTaskId: null, attemptId: null, startedAt: null, leaseExpiresAt: null, lastExtendedAt: null, lastReleasedAt: null, lastOutcome: null, }; function normalizeLeaseExpiresAt(value: number | string | null | undefined): number | null { if (typeof value === "number") { return Number.isFinite(value) ? value : null; } if (typeof value !== "string" || !value.trim()) { return null; } const timestamp = Date.parse(value); return Number.isNaN(timestamp) ? null : timestamp; } export function setActiveLease(input: { taskId: string; attemptId?: string | null; leaseExpiresAt?: number | string | null; } | null): void { if (!input) { leaseState.activeLeaseId = null; leaseState.activeTaskId = null; leaseState.attemptId = null; leaseState.startedAt = null; leaseState.leaseExpiresAt = null; leaseState.lastOutcome = "cleared"; leaseState.lastReleasedAt = Date.now(); return; } const normalized: ActiveLeaseState = { taskId: input.taskId, attemptId: input.attemptId ?? null, leaseExpiresAt: normalizeLeaseExpiresAt(input.leaseExpiresAt), }; leaseState.activeLeaseId = normalized.taskId; leaseState.activeTaskId = normalized.taskId; leaseState.attemptId = normalized.attemptId; leaseState.startedAt = Date.now(); leaseState.leaseExpiresAt = normalized.leaseExpiresAt; leaseState.lastOutcome = "leased"; } export function noteLeaseExtended(leaseExpiresAt?: number | string | null): void { leaseState.lastExtendedAt = Date.now(); leaseState.leaseExpiresAt = normalizeLeaseExpiresAt(leaseExpiresAt) ?? leaseState.leaseExpiresAt; leaseState.lastOutcome = "extended"; } export function noteLeaseReleased(reason: Exclude): void { leaseState.activeLeaseId = null; leaseState.activeTaskId = null; leaseState.attemptId = null; leaseState.startedAt = null; leaseState.leaseExpiresAt = null; leaseState.lastReleasedAt = Date.now(); leaseState.lastOutcome = reason; } export function getLeaseManagerSnapshot(): LeaseSnapshot { return { ...leaseState }; }