import type { SkenoraDiagnostic, SkenoraDiagnosticSeverity } from "@skenora/contracts"; import type { JsonValue } from "../model/json.js"; export type ScenePlanDiagnosticSeverity = SkenoraDiagnosticSeverity; export type ScenePlanDiagnosticStage = "parse" | "normalize" | "validate" | "compile" | "patch"; export type ScenePlanDiagnosticCode = "invalid-input" | "invalid-json" | "invalid-schema" | "unsupported-version" | "unknown-field" | "missing-field" | "invalid-value" | "invalid-id" | "duplicate-id" | "missing-reference" | "hierarchy-cycle" | "unsupported-entity-kind" | "invalid-transform" | "invalid-quaternion" | "missing-resource-binding" | "resource-kind-mismatch" | "resource-integrity-mismatch" | "invalid-capability" | "missing-capability" | "unsupported-capability" | "invalid-extension" | "unsupported-extension" | "flow-invalid" | "flow-target-missing" | "native-document-invalid" | "patch-invalid" | "patch-target-conflict" | "patch-unsupported-target" | "reserved-field" | "limit-exceeded" | (string & {}); export interface ScenePlanDiagnostic extends SkenoraDiagnostic { readonly version: 1; readonly code: ScenePlanDiagnosticCode; readonly severity: ScenePlanDiagnosticSeverity; readonly stage: ScenePlanDiagnosticStage; readonly path: readonly (string | number)[]; readonly message: string; readonly recoverable: boolean; readonly entityId?: string; readonly assetId?: string; readonly materialId?: string; readonly operationIndex?: number; readonly details?: JsonValue; } export interface ScenePlanResult { readonly ok: boolean; readonly value?: T; readonly diagnostics: readonly ScenePlanDiagnostic[]; } export interface ScenePlanParseResult extends ScenePlanResult { readonly inputKind: "object" | "json-string"; } export interface ScenePlanSourceMapping { readonly planPath: readonly (string | number)[]; readonly documentPath: readonly (string | number)[]; readonly kind: "resource" | "entity" | "material" | "binding" | "animationTrack" | "animationClip" | "flow"; readonly id: string; } export interface ScenePlanValidationResult { readonly valid: boolean; readonly normalized?: import("../model/types.js").SceneBlueprint; readonly diagnostics: readonly ScenePlanDiagnostic[]; } export interface ScenePatchValidationResult { readonly valid: boolean; readonly normalized?: import("../model/types.js").ScenePatch; readonly diagnostics: readonly ScenePlanDiagnostic[]; } export interface SceneBlueprintCompilationResult { readonly ok: boolean; readonly document?: import("@skenora/contracts").SceneDocumentData; readonly planHash?: string; readonly sourceMappings: readonly ScenePlanSourceMapping[]; readonly diagnostics: readonly ScenePlanDiagnostic[]; } export interface ScenePatchCompilationResult { readonly ok: boolean; readonly patch?: import("../model/types.js").ScenePatch; readonly candidate?: import("../model/types.js").ScenePatchCandidate; readonly planHash?: string; readonly diagnostics: readonly ScenePlanDiagnostic[]; } export interface ScenePlanDiagnosticInput { readonly code: ScenePlanDiagnosticCode; readonly severity?: ScenePlanDiagnosticSeverity; readonly stage: ScenePlanDiagnosticStage; readonly path?: readonly (string | number)[]; readonly message: string; readonly recoverable?: boolean; readonly entityId?: string; readonly assetId?: string; readonly materialId?: string; readonly operationIndex?: number; readonly details?: JsonValue; } export declare class ScenePlanValidationError extends Error { readonly diagnostics: readonly ScenePlanDiagnostic[]; constructor(diagnostics: readonly ScenePlanDiagnostic[]); } export declare function createDiagnostic(input: ScenePlanDiagnosticInput): ScenePlanDiagnostic; /** Dedupe and sort diagnostics so callers can safely compare results. */ export declare function finalizeDiagnostics(diagnostics: readonly ScenePlanDiagnostic[]): readonly ScenePlanDiagnostic[]; export declare function hasErrors(diagnostics: readonly ScenePlanDiagnostic[]): boolean; //# sourceMappingURL=diagnostics.d.ts.map