/**
 * Cron event source for the skill event router.
 *
 * One process-wide source. Subscriptions register their cron expressions
 * through `register(expr)`; when a matching minute (or second, in croner's
 * 6-field syntax) ticks, the source emits a `schedule.cron` event with
 * `payload.cron` set to the expression that fired. The router then routes
 * to subscriptions whose `filter.cron` matches.
 *
 * The cron job factory is injectable so tests can drive ticks manually
 * without waiting for real time to pass. Production code gets croner's
 * `Cron(expression, onTick)`; tests get a stub that exposes the captured
 * callback.
 *
 * See `agents/2026-05-20-skills-unification-plan.md` step 10.
 */
import type { EventRouter } from '../../events/event-router.js';
export interface CronJobLike {
    stop(): void;
}
export type CronFactory = (expression: string, onTick: () => void) => CronJobLike;
export declare class ScheduleEventSource {
    private readonly router;
    private readonly factory;
    private readonly jobs;
    constructor(router: EventRouter, factory?: CronFactory);
    /**
     * Register a cron expression. Subsequent calls with the same expression
     * are no-ops, so multiple subscriptions sharing a cron expression only
     * create one underlying job. The router fans the resulting event out to
     * all of them.
     */
    register(expression: string): void;
    unregister(expression: string): void;
    stop(): void;
    listRegistered(): string[];
}
//# sourceMappingURL=schedule.d.ts.map