/**
 * Host-level snapshot/restore/diff helpers for M17.
 *
 * Plugin manifest slots are owner-of-shape (each EntitySerializer decides what
 * `SnapshotData` looks like). These helpers route through the plugin host:
 *   - `snapshotEntity(host, type, ...)` — calls `serializer.snapshot(...)`;
 *     throws SnapshotNotImplementedError if the plugin has no snapshot slot
 *     (snapshot is *required* for M17 participation, unlike read-only views
 *     which fall back to raw JSON).
 *   - `restoreEntity(host, type, ...)` — calls `serializer.restore(...)`.
 *   - `diffEntity(host, type, a, b, slug)` — calls `serializer.diff(...)`
 *     when present, otherwise computes a default deep-diff.
 */
import type { PluginHost } from '../core/plugin-host/types.js';
import type { EntityDiff, RestoreContext, RestoreResult, SerializeContext, SnapshotData } from './types.js';
export declare function snapshotEntity(host: PluginHost, type: string, entity: unknown, ctx: SerializeContext): SnapshotData;
export declare function restoreEntity(host: PluginHost, type: string, data: SnapshotData, ctx: RestoreContext): RestoreResult;
export declare function diffEntity(host: PluginHost, type: string, a: SnapshotData, b: SnapshotData, slug: string): EntityDiff;
/** Compute deep-diff between two SnapshotData JSONs and wrap as EntityDiff. */
export declare function defaultDeepDiff(type: string, slug: string, a: SnapshotData, b: SnapshotData): EntityDiff;
/** Stable JSON canonicalization — sort object keys recursively. Arrays kept in order. */
export declare function canonicalize(value: unknown): unknown;
