import { type PendingLoopSchedule } from './pending-loop-schedule.js'; export interface LoopScheduleTurnResult { handled: boolean; reply?: string; /** Web Portal should open the bottom dock instead of relying on y/n. */ dock?: boolean; } export declare function resolveScheduleTime(raw: string): { cron: string; label: string; } | null; /** Open / refresh a draft for `/cronloop` or the Portal dock. */ export declare function openScheduledLoopDraft(opts: { platform: string; channelId: string; threadId: string; text?: string; surface?: 'dock' | 'card'; }): LoopScheduleTurnResult; /** * Detect a scheduled-Loop ask. Web (`surface: 'dock'`) always stashes a * draft so the bottom sheet can fill missing fields. IM keeps the y/n card * when complete, otherwise a hint (still handled so reminders do not steal). */ export declare function tryDetectScheduledLoopIntent(opts: { platform: string; channelId: string; threadId: string; userId: string; text: string; now?: Date; surface?: 'dock' | 'card'; }): Promise; export declare function formatCreatedLoopScheduleReply(input: { id: number; pending: Pick; nextIso?: string; }): string; export declare function commitPendingLoopSchedule(input: { pending: PendingLoopSchedule; userId: string; }): { ok: true; id: number; nextIso: string; } | { ok: false; error: string; }; /** Consume y/n or run detection. Used by IM + Web inbound. */ export declare function tryHandleScheduledLoopTurn(opts: { platform: string; channelId: string; threadId: string; userId: string; text: string; now?: Date; surface?: 'dock' | 'card'; }): Promise; //# sourceMappingURL=loop-schedule-intent.d.ts.map