interface SchedulerSnapshot { initializedAt: number; phase: "idle" | "running" | "paused"; queueDepth: number; currentTaskId: string | null; lastSseEventAt: number | null; lastHeartbeatAt: number | null; lastPullAt: number | null; lastAccountsSyncAt: number | null; lastTaskStartedAt: number | null; lastTaskFinishedAt: number | null; nextHeartbeatAt: number | null; nextPullAt: number | null; lastError: string | null; } const schedulerState: SchedulerSnapshot = { initializedAt: 0, phase: "idle", queueDepth: 0, currentTaskId: null, lastSseEventAt: null, lastHeartbeatAt: null, lastPullAt: null, lastAccountsSyncAt: null, lastTaskStartedAt: null, lastTaskFinishedAt: null, nextHeartbeatAt: null, nextPullAt: null, lastError: null, }; export function initScheduler(): void { schedulerState.initializedAt = schedulerState.initializedAt || Date.now(); } export function setSchedulerPhase(phase: SchedulerSnapshot["phase"]): void { schedulerState.phase = phase; } export function setSchedulerQueueDepth(queueDepth: number): void { schedulerState.queueDepth = Math.max(0, queueDepth); } export function setSchedulerCurrentTask(taskId: string | null): void { schedulerState.currentTaskId = taskId; if (taskId) { schedulerState.lastTaskStartedAt = Date.now(); } } export function noteSchedulerTaskFinished(): void { schedulerState.lastTaskFinishedAt = Date.now(); } export function noteSchedulerSseEvent(): void { schedulerState.lastSseEventAt = Date.now(); } export function noteSchedulerHeartbeat(): void { schedulerState.lastHeartbeatAt = Date.now(); } export function noteSchedulerPull(): void { schedulerState.lastPullAt = Date.now(); } export function noteSchedulerAccountsSync(): void { schedulerState.lastAccountsSyncAt = Date.now(); } export function setSchedulerNextHeartbeat(timestamp: number | null): void { schedulerState.nextHeartbeatAt = timestamp; } export function setSchedulerNextPull(timestamp: number | null): void { schedulerState.nextPullAt = timestamp; } export function setSchedulerError(message: string | null): void { schedulerState.lastError = message; } export function getSchedulerState(): SchedulerSnapshot { return { ...schedulerState }; }