import { type MaterialOverride, type SceneDocumentData } from "@skenora/contracts"; import { type ScenePlanDiagnostic } from "../diagnostics/diagnostics.js"; import type { ScenePatch, ScenePatchTarget, ScenePatchTargetKind, ScenePatchContext } from "../model/types.js"; import { type SceneChangePreview } from "./details.js"; import { type SceneObjectTarget } from "./references.js"; export declare const SCENE_MUTATION_LIMITS: Readonly<{ bytes: number; depth: 64; operations: 5000; targets: 5000; }>; export interface SceneMutationContext extends ScenePatchContext { readonly document: Readonly; readonly documentRevision: number; readonly documentHash: string; } export interface SceneMutationScope { /** Exact writable records, including explicitly authorized new identities. */ readonly targets: readonly ScenePatchTarget[]; /** Optional top-level fields per kind. Creation/removal require '*' explicitly. */ readonly fields?: Partial>; } export type SceneMutationResult = { readonly ok: false; readonly diagnostics: readonly ScenePlanDiagnostic[]; readonly preview?: SceneChangePreview; } | { readonly ok: true; readonly patch: ScenePatch; readonly preview: SceneChangePreview; readonly diagnostics: readonly ScenePlanDiagnostic[]; }; /** Pure bounded diff: validate one complete candidate, then emit an ordinary revision-bound Patch. */ export declare function planSceneDocumentMutation(candidateInput: unknown, context: SceneMutationContext, scope: SceneMutationScope): SceneMutationResult; export interface SceneMaterialChangeOptions { readonly bindingId: string; readonly scope: "binding" | "shared"; /** A complete next material definition; identity is supplied by the planner. */ readonly material: Omit; /** Required for shared edits; every affected entity, binding, track and Flow must be included. */ readonly allowedImpacts?: readonly SceneObjectTarget[]; /** Required for a binding edit; always isolates from shared writers. */ readonly namespace?: string; readonly animations?: "copy" | "omit" | "reject"; } export declare function planSceneMaterialChange(context: SceneMutationContext, options: SceneMaterialChangeOptions): SceneMutationResult; export interface SceneSubtreeMutationOptions { readonly rootEntityIds: readonly string[]; readonly dependencyTargets?: readonly ScenePatchTarget[]; readonly fields: NonNullable; } /** Regenerate only declared subtrees and explicitly included dependencies. */ export declare function planSceneSubtreeMutation(candidate: Readonly, context: SceneMutationContext, options: SceneSubtreeMutationOptions): SceneMutationResult; /** Explicit removal closure; no resource cleanup is inferred from an entity selection. */ export declare function planSceneRemoval(context: SceneMutationContext, targets: readonly ScenePatchTarget[]): SceneMutationResult; //# sourceMappingURL=mutations.d.ts.map