import type { ParsedSchedule } from '../../types.js';
import type { ProviderReconciler } from '../resume.js';
import type { SideEffectingExecutor } from './types.js';
export type ScheduleInput = {
    name: string;
    schedule: string;
    /** Pre-resolved schedule (parser output).  Required for relative
     *  schedules (`30m`, `2h`, `明天9:00`) to keep canonical input frozen
     *  against re-parse drift (codex round 4 finding 4). */
    parsed: ParsedSchedule;
    prompt: string;
    workingDir: string;
    chatId: string;
    rootMessageId?: string;
    scope?: 'thread' | 'chat';
    larkAppId?: string;
    /** `repeat.completed` is intentionally absent — it's a runtime counter
     *  and must not be part of canonical input.  See schedule-store
     *  canonicalScheduleInput. */
    repeat?: {
        times: number | null;
    };
    deliver?: 'origin' | 'local';
};
export type ScheduleOutput = {
    taskId: string;
};
export declare function parseScheduleInput(input: unknown): ScheduleInput;
/**
 * `botmux-schedule` hostExecutor.  Calls `schedule-store.createTask`
 * passing the runtime-derived `idempotencyKey` as the deterministic
 * task id; schedule-store applies create-or-return-identical semantics
 * (Step 5).
 *
 * Provider TTL is effectively infinite for schedule (the task entry
 * lives until removed), so dangling effectAttempted reconcile uses
 * readOnlyLookup (`getTask(idempotencyKey)`) — no TTL boundary.
 */
export declare const botmuxScheduleExecutor: SideEffectingExecutor<ScheduleInput, ScheduleOutput>;
export declare const botmuxScheduleReconciler: ProviderReconciler;
//# sourceMappingURL=botmux-schedule.d.ts.map