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, projectB: Record, 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); /** Check if a plugin is currently being installed. */ isInstalling(pluginId: string): boolean; /** One-click install: validate, download, activate. */ installPlugin(pluginId: string, version?: string): Promise; /** Uninstall a plugin. */ uninstallPlugin(pluginId: string): PluginInstallResult; /** Get install history. */ getHistory(): PluginInstallResult[]; }