export type AssetCategory = 'sprite' | 'audio' | 'tileset' | 'template' | 'font' | 'shader' | 'model3d' | 'particle' | 'animation';
export type AssetLicense = 'free' | 'cc0' | 'cc-by' | 'premium' | 'subscription';
export interface StoreAsset {
    id: string;
    name: string;
    description: string;
    category: AssetCategory;
    tags: string[];
    author: string;
    license: AssetLicense;
    price: number;
    currency: string;
    thumbnailUrl: string;
    downloadUrl: string;
    fileSize: number;
    downloads: number;
    rating: number;
    ratingCount: number;
    createdAt: string;
    updatedAt: string;
    version: string;
    compatibility: string[];
    preview?: string[];
}
export interface StoreSearchParams {
    query?: string;
    category?: AssetCategory;
    license?: AssetLicense;
    minRating?: number;
    maxPrice?: number;
    sortBy?: 'popular' | 'newest' | 'rating' | 'name' | 'price';
    page?: number;
    pageSize?: number;
    tags?: string[];
}
export interface StoreSearchResult {
    assets: StoreAsset[];
    total: number;
    page: number;
    pageSize: number;
    totalPages: number;
}
export interface InstalledAsset {
    asset: StoreAsset;
    installedAt: string;
    localPath: string;
    version: string;
}
export declare const BUILTIN_FREE_ASSETS: StoreAsset[];
export declare class AssetStore {
    private installed;
    private allAssets;
    /** Search available assets. */
    search(params?: StoreSearchParams): StoreSearchResult;
    /** Get featured assets. */
    getFeatured(): StoreAsset[];
    /** Get assets by category. */
    getByCategory(category: AssetCategory): StoreAsset[];
    /** Install an asset (downloads and registers locally). */
    install(assetId: string, localPath: string): InstalledAsset | null;
    /** Uninstall an asset. */
    uninstall(assetId: string): boolean;
    /** Get installed assets. */
    getInstalled(): InstalledAsset[];
    /** Check if an asset is installed. */
    isInstalled(assetId: string): boolean;
    /** Register external assets (from remote catalog). */
    registerAssets(assets: StoreAsset[]): void;
}
export type DiffType = 'added' | 'removed' | 'modified' | 'unchanged';
export interface DiffEntry {
    path: string;
    type: DiffType;
    oldValue?: unknown;
    newValue?: unknown;
    children?: DiffEntry[];
}
export interface ProjectDiff {
    timestamp: string;
    versionA: string;
    versionB: string;
    entities: DiffEntry[];
    scenes: DiffEntry[];
    assets: DiffEntry[];
    settings: DiffEntry[];
    summary: {
        added: number;
        removed: number;
        modified: number;
        unchanged: number;
    };
}
/**
 * Compare two serialized game projects and produce a diff.
 */
export declare function compareProjects(projectA: Record<string, unknown>, projectB: Record<string, unknown>, versionA?: string, versionB?: string): ProjectDiff;
/** Format diff as human-readable text. */
export declare function formatDiff(diff: ProjectDiff): string;
export interface MarketplaceConfig {
    /** Remote catalog endpoint URL */
    catalogUrl?: string;
    /** Max concurrent downloads */
    maxConcurrent: number;
    /** Auto-update installed plugins */
    autoUpdate: boolean;
    /** Allowed categories */
    categories: string[];
}
export declare const DEFAULT_MARKETPLACE_CONFIG: MarketplaceConfig;
export interface PluginInstallResult {
    pluginId: string;
    success: boolean;
    version: string;
    message: string;
}
/**
 * Plugin Marketplace UI controller.
 * Extends the PluginSDK's PluginMarketplace with one-click install flow.
 */
export declare class PluginMarketplaceUI {
    private config;
    private installing;
    private installHistory;
    constructor(config?: Partial<MarketplaceConfig>);
    /** Check if a plugin is currently being installed. */
    isInstalling(pluginId: string): boolean;
    /** One-click install: validate, download, activate. */
    installPlugin(pluginId: string, version?: string): Promise<PluginInstallResult>;
    /** Uninstall a plugin. */
    uninstallPlugin(pluginId: string): PluginInstallResult;
    /** Get install history. */
    getHistory(): PluginInstallResult[];
}
