import type { Part } from '@opencode-ai/sdk'; import type { CronScheduler, SchedulerJobState } from './scheduler.js'; import type { PlatformSender } from '../platform/types.js'; export interface RuntimeCronSchedule { kind: 'cron'; expr: string; } export interface RuntimeCronPayloadSystemEvent { kind: 'systemEvent'; text: string; sessionId?: string; directory?: string; agent?: string; delivery?: RuntimeCronDelivery; } export interface RuntimeCronDelivery { platform: 'feishu' | 'discord'; conversationId: string; creatorId?: string; fallbackConversationId?: string; } export type RuntimeCronPayload = RuntimeCronPayloadSystemEvent; export interface RuntimeCronJob { id: string; name: string; schedule: RuntimeCronSchedule; payload: RuntimeCronPayload; enabled: boolean; createdAtMs: number; updatedAtMs: number; } export interface RuntimeCronJobView extends RuntimeCronJob { schedulerJobId: string; state: SchedulerJobState | null; } export interface AddRuntimeCronJobInput { id?: string; name: string; schedule: RuntimeCronSchedule; payload: RuntimeCronPayload; enabled?: boolean; } export interface UpdateRuntimeCronJobInput { id: string; name?: string; schedule?: RuntimeCronSchedule; payload?: RuntimeCronPayload; enabled?: boolean; } export interface RuntimeCronManagerOptions { scheduler: CronScheduler; filePath?: string; timezone?: string; logger?: Pick; dispatchPayload?: (job: RuntimeCronJob) => Promise; } export interface RuntimeCronDispatcherDependencies { getSessionById: (sessionId: string, options?: { directory?: string; }) => Promise; sendMessage: (sessionId: string, text: string, options?: { agent?: string; directory?: string; providerId?: string; modelId?: string; variant?: string; }) => Promise<{ parts: Part[]; }>; sendMessageAsync: (sessionId: string, text: string, options?: { agent?: string; directory?: string; providerId?: string; modelId?: string; variant?: string; }) => Promise; getSender: (platform: 'feishu' | 'discord') => PlatformSender | null; logger?: Pick; } export interface RuntimeCronCleanupResult { removedJobIds: string[]; } export interface RuntimeCronOrphanScanDependencies { hasConversationBinding: (platform: 'feishu' | 'discord', conversationId: string, sessionId?: string) => boolean; getSessionStatus: (sessionId: string, directory?: string) => Promise<'exists' | 'missing' | 'unknown'>; } export interface RuntimeCronOrphanScanResult { removedJobIds: string[]; invalidJobIds: string[]; missingConversationJobIds: string[]; missingSessionJobIds: string[]; } export declare function setRuntimeCronManager(manager: RuntimeCronManager | null): void; export declare function getRuntimeCronManager(): RuntimeCronManager | null; export declare class RuntimeCronManager { private readonly scheduler; private readonly filePath; private readonly timezone?; private readonly logger; private readonly dispatchPayload; private jobs; constructor(options: RuntimeCronManagerOptions); listJobs(): RuntimeCronJobView[]; addJob(input: AddRuntimeCronJobInput): RuntimeCronJob; updateJob(input: UpdateRuntimeCronJobInput): RuntimeCronJob; removeJob(jobId: string): boolean; getJob(jobId: string): RuntimeCronJob | null; private syncToScheduler; private applyJobToScheduler; private executeJob; private loadJobsFromDisk; private persist; } export declare function toSchedulerJobId(runtimeCronJobId: string): string; export declare function createRuntimeCronDispatcher(dependencies: RuntimeCronDispatcherDependencies): { dispatch: (job: RuntimeCronJob) => Promise; }; export declare function cleanupRuntimeCronJobsByConversation(manager: RuntimeCronManager | null, platform: 'feishu' | 'discord', conversationId: string): RuntimeCronCleanupResult; export declare function cleanupRuntimeCronJobsBySessionId(manager: RuntimeCronManager | null, sessionId: string): RuntimeCronCleanupResult; export declare function scanAndCleanupOrphanRuntimeCronJobs(manager: RuntimeCronManager | null, dependencies: RuntimeCronOrphanScanDependencies): Promise; //# sourceMappingURL=runtime-cron.d.ts.map