/**
 * Asset-embed extraction + diffing.
 *
 * Entry bodies reference binary assets two ways:
 *   - Obsidian-style transclusion embeds:  ![[Foo.png]]  /  ![[Foo.png|alt]]
 *   - Standard markdown images:            ![alt](/api/assets/asset/<id>/<file>)
 *
 * Asset *binaries* live outside git (the workspace `.studiograph/assets/`
 * tree for the local backend, or Cloudflare R2), so git history can only ever
 * recover the *reference* — the embed text in the body, not the bytes. These
 * helpers let the write path detect when a whole-body rewrite would drop a
 * reference the prior body had, and let the history tools report which embeds
 * exist at a given revision.
 *
 * Callers pass the markdown body (post-frontmatter). Embed syntax is a body
 * construct; frontmatter is not scanned.
 */
/**
 * Extract every embedded asset reference from a markdown body,
 * de-duplicated, transclusions first then markdown images. Returns the raw
 * target (transclusion target or image URL) so callers can compare
 * references across revisions and surface them to users/agents.
 */
export declare function extractAssetEmbeds(body: string): string[];
/**
 * The canonical, render-safe markdown embed for an asset: `![filename](url)`.
 * This is exactly what the editor inserts on drop/paste
 * (web FormattingPalette), so any agent-placed embed that uses this form is
 * guaranteed to render. Agents must NOT invent `![[filename]]` transclusion
 * placeholders — those don't resolve to a stored asset and render as dead text.
 */
export declare function assetEmbed(filename: string, url: string): string;
/**
 * References present in `before` but absent from `after` — i.e. embeds a
 * body rewrite would drop. Set semantics on the raw reference string.
 */
export declare function droppedAssetEmbeds(before: string, after: string): string[];
/**
 * Strip a leading YAML frontmatter block (`---\n…\n---`) so embed extraction
 * runs against the body only. Returns the input unchanged when there is no
 * frontmatter. Mirrors the lightweight frontmatter sniff the history tools
 * already use, avoiding a full markdown parse for a read-only report.
 */
export declare function stripFrontmatter(fileContent: string): string;
export interface LegacyAssetRef {
    /** Full matched URL, e.g. /api/assets/note/critique/172-shot.png */
    url: string;
    /** Storage key {type}/{id}/{filename} the blob lives at today. */
    oldKey: string;
    type: string;
    id: string;
    filename: string;
}
/** Every legacy `/api/assets/{type}/{id}/{filename}` reference in a file,
 *  de-duplicated by URL. Pass the RAW file (frontmatter + body). */
export declare function extractLegacyAssetUrls(fileContent: string): LegacyAssetRef[];
