import type { ImageContent } from "@pk-nerdsaver-ai/pi-ai";
import { type BlobPutResult } from "../session/blob-store";
/** Matches `[Image #N]`/`[Image #N, WxH]` and `[Paste #N, +X lines]`/`[Paste #N, Y chars]` tokens.
 *  Group 1 is the kind (`Image`/`Paste`), group 2 the 1-based index. The optional metadata
 *  tail (`, …`) is captured loosely (no `]`/newline) so future label tweaks keep matching. */
export declare const PLACEHOLDER_REGEX: RegExp;
/** Renumber every `[Image #N]` marker in `text` by `offset` (added to the
 *  existing index), preserving the optional `, WxH` tail. Paste markers are
 *  left untouched. Used when restoring queued image-messages back into a draft
 *  that already holds pending images so the merged text's positional markers
 *  still line up with `pendingImages`. */
export declare function shiftImageMarkers(text: string, offset: number): string;
type ImageBlobWriter = (data: Buffer, options?: {
    extension?: string;
}) => Promise<BlobPutResult>;
type ImageBlobWriterSync = (data: Buffer, options?: {
    extension?: string;
}) => BlobPutResult;
export type PlaceholderKind = "image" | "paste";
export interface PlaceholderRenderers {
    renderText: (text: string) => string;
    renderReference: (label: string, kind: PlaceholderKind, index: number) => string;
}
export declare function renderPlaceholders(text: string, renderers: PlaceholderRenderers): string;
export declare function imageReferenceHyperlink(label: string, index: number, imageLinks: readonly (string | undefined)[] | undefined, renderLabel: (text: string) => string): string;
export declare function materializeImageReferenceLinks(images: readonly ImageContent[] | undefined, putBlob: ImageBlobWriter): Promise<(string | undefined)[] | undefined>;
export declare function materializeImageReferenceLinksSync(images: readonly ImageContent[] | undefined, putBlob: ImageBlobWriterSync): (string | undefined)[] | undefined;
export {};
