/** "15m" | "2h" | "45s" | minutes as number | null → interval ms or null */ export declare function parseSchedule(s: string | number | null | undefined): number | null; /** Fires runFn(name, intervalMs) every intervalMs per org. Real timer loop — no ScheduleWakeup, no prompts. */ export declare class OrgScheduler { private runFn; private timers; private running; /** Orgs whose tick arrived mid-run. A dropped tick meant an org that overruns * its interval — a 200m cycle on a 2h schedule — idled until the *next* * boundary, so a run longer than the period produced a sawtooth of work then * dead time. Recorded here instead and fired the moment the run ends. * A Set, so N missed ticks coalesce into one catch-up run, never a backlog. */ private pending; constructor(runFn: (name: string, intervalMs: number) => Promise); /** @param runNow fire one iteration immediately instead of waiting a full * interval. Callers pass true only when the org is actually due (never run, * or last run older than the interval) — `serve` used to register a bare * setInterval, so a freshly-started daemon sat idle for the whole period * before its first tick, and an org on a 2h schedule looked broken for two * hours. Gating on due-ness keeps a daemon restart from re-running * everything at once. */ add(name: string, intervalMs: number, runNow?: boolean, sinceLastRunMs?: number): void; remove(name: string): void; stop(): void; } //# sourceMappingURL=scheduler.d.ts.map