import { type ContentTypeManifest } from "../shared/content-types/registry.js";
type Deliverable = ContentTypeManifest["deliverableFile"];
export interface Checkpoint {
    /** Filename in `.snapshots/`, e.g. `2026-05-08T12-34-56Z__a1b2c3d4__carousel.yaml`. */
    file: string;
    /** Which deliverable this snapshot is for. */
    deliverable: Deliverable;
    /** ISO timestamp parsed back from the filename. */
    ts: string;
    /** First 8 chars of the content sha256. */
    sha: string;
    /** File size in bytes (cheap differential signal). */
    bytes: number;
    /** Optional user-supplied name (#90). Manual snapshots only; auto
     *  per-turn snapshots are unlabelled. */
    label?: string;
}
/**
 * Take a snapshot of every deliverable yaml that exists in the work dir.
 * Idempotent: if the latest snapshot already has the same sha, skip.
 * Returns the snapshots actually written.
 */
export declare function createCheckpoint(workId: string, label?: string): Promise<Checkpoint[]>;
/**
 * List checkpoints for a work, newest first. Filename is the source of
 * truth for ts/sha/deliverable — the directory is otherwise opaque.
 */
export declare function listCheckpoints(workId: string): Promise<Checkpoint[]>;
/**
 * Restore a checkpoint by filename. Overwrites the corresponding live
 * deliverable. Caller is responsible for nudging the frontend to reload.
 *
 * Returns `preRestoreSnapshot`: the snapshot we took of the CURRENT live state
 * just before overwriting it (null if current state was already captured), so
 * the caller can tell the user the restore is reversible.
 */
export declare function restoreCheckpoint(workId: string, file: string): Promise<{
    deliverable: Deliverable;
    preRestoreSnapshot: Checkpoint | null;
} | null>;
export {};
//# sourceMappingURL=checkpoints.d.ts.map