## Public API Report File for "@grackle-ai/plugin-scheduling"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts

import type { GrackleEventType } from '@grackle-ai/core';
import type { GracklePlugin } from '@grackle-ai/plugin-sdk';
import type { Logger } from 'pino';
import type { ReconciliationPhase } from '@grackle-ai/plugin-sdk';
import type { ScheduleRow } from '@grackle-ai/database';

// @public
export function computeNextRunAt(expr: string, lastRunAt?: string): string;

// @public
export function createCronPhase(deps: CronPhaseDeps): ReconciliationPhase;

// @public
export function createSchedulingPlugin(): GracklePlugin;

// @public
export interface CronPhaseDeps {
    advanceSchedule: (id: string, lastRunAt: string, nextRunAt: string) => void;
    createTask: (id: string, workspaceId: string | undefined, title: string, description: string, dependsOn: string[], workspaceSlug: string, parentTaskId?: string, canDecompose?: boolean, defaultPersonaId?: string) => void;
    emit: (type: GrackleEventType, payload: Record<string, unknown>) => void;
    enqueueForDispatch: (entry: {
        id: string;
        taskId: string;
        environmentId?: string;
        personaId?: string;
    }) => void;
    getDueSchedules: () => ScheduleRow[];
    getPersona: (id: string) => {
        id: string;
        name: string;
        runtime: string;
    } | undefined;
    logger: Pick<Logger, "debug" | "info" | "warn" | "error">;
    setScheduleEnabled: (id: string, enabled: boolean, nextRunAt: string | null) => void;
    setTaskScheduleId: (taskId: string, scheduleId: string) => void;
}

// @public
export function isIntervalExpression(expr: string): boolean;

// @public
export function parseDuration(expr: string): number;

// @public
export function validateExpression(expr: string): void;

// (No @packageDocumentation comment for this package)

```
