import type { FigmaManifestRecord } from "./types";
export declare function mediaDir(projectDir: string): string;
export declare function manifestPath(projectDir: string): string;
export declare function typeDirPath(projectDir: string, type: FigmaManifestRecord["type"]): string;
/**
 * Guards figma-OWNED rows only — media-use rows (bgm/sfx/icon, no
 * provenance.source) legitimately fail this and are filtered out of
 * figma's read-view. The shared file is the inventory; each writer
 * reads its own rows. `nextId` is the one cross-writer concern and
 * scans the full file.
 */
export declare function isFigmaManifestRecord(value: unknown): value is FigmaManifestRecord;
export declare function readManifest(projectDir: string): FigmaManifestRecord[];
export declare function appendRecord(projectDir: string, record: FigmaManifestRecord): void;
export declare function findByFigmaNode(projectDir: string, fileKey: string, nodeId: string): FigmaManifestRecord | null;
/** EVERY row for a node — reuse gates must check all (format, scale, version)
 * tuples, not just the oldest, or a second tuple defeats idempotency forever. */
export declare function findAllByFigmaNode(projectDir: string, fileKey: string, nodeId: string): FigmaManifestRecord[];
/** Rewrite one row in place by id, preserving every other line (other
 * writers' rows included) byte-for-byte. */
export declare function updateRecord(projectDir: string, record: FigmaManifestRecord): void;
export declare function nextId(projectDir: string, type: FigmaManifestRecord["type"]): string;
//# sourceMappingURL=manifest.d.ts.map