/**
 * Client-side half of `upload_project_media`: turn a tool call into the BFF's
 * `{ mime, dataBase64 }` payload.
 *
 * The BFF is the real gate (magic bytes, metadata stripping, dimension and
 * quota limits). What only the client can decide is WHICH local file may be
 * read at all. The stdio server runs with the developer's filesystem, so a
 * `filePath` is confined to the workspace (the server's working directory):
 * a prompt-injected "upload ~/Pictures/passport.jpg" must not be able to
 * publish an arbitrary personal image to a public bucket. Files elsewhere go
 * through the CLI (`extenshi media upload`), where the path is on the command
 * line in front of the developer.
 */
export type ProjectMediaMime = 'image/png' | 'image/jpeg' | 'image/webp';
export declare const PROJECT_MEDIA_MAX_BYTES: number;
export declare const PROJECT_MEDIA_MIME_TYPES: readonly ["image/png", "image/jpeg", "image/webp"];
export declare class ProjectMediaInputError extends Error {
}
/** Same signatures the BFF accepts. Anything else (SVG, HTML, GIF) → null. */
export declare function sniffMediaMime(bytes: Uint8Array): ProjectMediaMime | null;
/** Read a workspace-local image for upload. `root` is the workspace (default: cwd). */
export declare function readWorkspaceImage(filePath: string, root?: string): Promise<{
    mime: ProjectMediaMime;
    dataBase64: string;
    bytes: number;
}>;
/** Validate an inline payload the same way before it is sent. */
export declare function checkInlineImage(dataBase64: string, declared: ProjectMediaMime): void;
//# sourceMappingURL=project-media.d.ts.map