import type { CommunityInstallResolution } from "../community/community-consent-client.js";
export interface InstalledCommunityPetResource {
    kind: "pet";
    status: "installed";
    resourceId: string;
    version: string;
    checksum: string;
    installDir: string;
    name: string;
    sanitized: boolean;
    /** Number of declared asset files materialized to disk. */
    assetCount: number;
}
export interface InstallCommunityPetOptions {
    fetchFn?: typeof fetch;
    /** Replace an existing install in place (update flow) instead of erroring. */
    allowReplace?: boolean;
}
/**
 * Materialize a community pet end to end (WS-AD4): download the asset package,
 * verify the whole-package sha256 (+ per-file sha256 when declared), unpack to a
 * quarantine dir, then land it atomically at the install dir. Previously this only
 * wrote manifest.json — the actual webp/animation bytes never reached disk.
 */
export declare function installCommunityPetResource(install: CommunityInstallResolution, options?: InstallCommunityPetOptions): Promise<InstalledCommunityPetResource>;
export declare function assertPetInstall(install: CommunityInstallResolution): void;
