/**
 * Compare two PieMetadata blobs (Python ↔ TS) and report divergences.
 * Mirror of pie/code/metadata_compare.py.
 *
 * Policies (per spec discussion):
 *   A. `required` may differ if base types match modulo nullability.
 *      Flag only true type/nullability mismatches.
 *   B. Framework-internal fields (`content`) are excluded server-side
 *      before serializing — comparison is symmetric.
 *   C. inputProps: Python ⇒ class extends InputCard; TS ⇒ `<PieCard stored={…}>`.
 *      Both must be present or both absent.
 *   D. IO-mixin fields must be declared on both sides (no special-case).
 */
export type PieMetadataLike = {
    name?: string;
    events?: string[];
    ajaxList?: string[];
    propsSchema?: Record<string, unknown> | null;
    inputPropsCode?: string | null;
    inputPropsSchema?: Record<string, unknown> | null;
};
export type Finding = {
    kind: string;
    message: string;
    [key: string]: unknown;
};
export declare const compareMetadata: (py: PieMetadataLike, ts: PieMetadataLike) => Finding[];
export declare const formatFindings: (componentName: string, findings: Finding[]) => string;
//# sourceMappingURL=compare.d.ts.map