/** * Blob Consolidation — migrates legacy attachments (tasks.db + filesystem) * into the unified blob store (manifest.db + .cleo/blobs/blobs/). * * Consolidation strategy: * 1. Read every attachment from tasks.db (with its refs for owner mapping). * 2. Find the legacy blob file on disk at .cleo/attachments/sha256//.. * 3. Read bytes and re-attach via CleoBlobStore — this naturally deduplicates * (SHA-256 is content-addressed) and writes to both the new filesystem path * and the manifest.db row. * 4. Track statistics: total, migrated, already-present, missing-files, errors. * * Idempotent: re-running skips blobs already registered in the new blob store. * * @task T11183 (Epic T10519 / Saga T10516) */ export interface ConsolidationStats { total: number; migrated: number; alreadyPresent: number; missingFiles: number; errors: number; errorDetails: Array<{ attachmentId: string; sha256: string; message: string; }>; } export interface ConsolidationOptions { projectRoot?: string; dryRun?: boolean; limit?: number; } export declare function consolidateBlobs(options?: ConsolidationOptions): Promise; export declare function verifyConsolidation(options?: { projectRoot?: string; }): Promise<{ consistent: boolean; total: number; matched: number; missing: Array<{ attachmentId: string; sha256: string; slug: string | null; }>; }>; //# sourceMappingURL=blob-consolidation.d.ts.map