/** * Scheduler for wake-up tasks. * * Supports two types of scheduled tasks: * - Cron-based: fires at specific times (e.g. "0 9 * * *" = 9am daily) * - Delay-based: fires after N minutes of operator silence * * Schedule state is persisted to disk per-thread so tasks survive restarts. * The wait_for_instructions polling loop checks for due tasks on each timeout. */ import type { IScheduleRepository, ScheduledTask } from "../data/interfaces.js"; export declare class ScheduleRepository implements IScheduleRepository { loadSchedule(threadId: number): ScheduledTask[]; saveSchedule(threadId: number, tasks: ScheduledTask[]): void; deleteSchedule(threadId: number): void; listSchedules(threadId: number): ScheduledTask[]; } export declare const scheduleRepository: ScheduleRepository; export declare function addSchedule(task: ScheduledTask): void; export declare function removeSchedule(threadId: number, taskId: string): boolean; /** * Remove all scheduled tasks for a thread. * Called when a Telegram topic is deleted. */ export declare function purgeSchedules(threadId: number): void; export declare function listSchedules(threadId: number): ScheduledTask[]; /** * Generate a unique task ID. */ export declare function generateTaskId(): string; export declare function matchesCron(cronExpr: string, date: Date): boolean; /** * Check for due tasks and return the first one that should fire. * * @param threadId - Thread to check schedules for * @param lastOperatorMessageAt - Timestamp of last operator message (for idle detection) * @param hasNewMessages - Whether operator has sent messages since last check * @returns The due task's prompt, or null if nothing is due */ export declare function checkDueTasks(threadId: number, lastOperatorMessageAt: number, hasNewMessages: boolean): { prompt: string; task: ScheduledTask; } | null; //# sourceMappingURL=scheduler.d.ts.map