import { type SceneAssetIdentity, type MaterialSlotTarget, type SceneDocumentData } from "@skenora/contracts"; import type { ScenePatch, ScenePlanContext } from "../model/types.js"; /** No deletion or fetching. Duplicate identities are not proof of equivalent usage. */ export declare function analyzeSceneResources(document: Readonly): { unusedAssetIds: string[]; duplicateGroups: string[][]; complete: boolean; unknown: { owner: import("@skenora/contracts").SceneObjectTarget; path: (string | number)[]; reason: string; }[]; limitations: string[]; }; export interface AssetReplacementOptions { /** Attachment ID to a verified replacement model-part binding. */ nativeParts?: Readonly>>; /** Semantic record ID to a new, explicitly observed part binding. */ semanticParts?: Readonly>; documentRevision: number; documentHash: string; /** Source-node override entity ID to replacement model source-node ID. */ sourceNodes?: Readonly>; /** Every source-specific binding must explicitly select its replacement slot. */ bindingTargets?: Readonly>; /** Flow graph ID / node ID selects a replacement imported animation name. */ animations?: Readonly>>>; } /** Replacement asset must already be authorized and present in the document. */ export declare function planSceneAssetReplacement(document: Readonly, assetId: string, replacementAssetId: string, options: AssetReplacementOptions, context?: ScenePlanContext): { ok: false; repairs: { path: (string | number)[]; code: string; suggestion: string; }[]; preview: import("./details.js").SceneChangePreview; patch?: never; limitations?: never; diagnostics?: never; } | { ok: true; patch: ScenePatch; preview: import("./details.js").SceneChangePreview; repairs: never[]; limitations: string[]; diagnostics?: never; } | { ok: false; repairs: { path: never[]; code: string; suggestion: string; }[]; diagnostics: readonly import("..").ScenePlanDiagnostic[]; preview: import("./details.js").SceneChangePreview; patch?: never; limitations?: never; }; //# sourceMappingURL=resource-impact.d.ts.map