import { type FrameDelta, type UpdateError } from './frameDeltaAdapter';
type UIState = 'idle' | 'loading' | 'diff' | 'error';
interface FieldChange {
    field: string;
    oldValue: string;
    newValue: string;
}
interface DiffGroup {
    componentName: string;
    explanation?: string;
    changes: FieldChange[];
}
interface SceneBuilderContext {
    readonly uiState: UIState;
    readonly updateErrors: UpdateError[];
    readonly explanation: string;
    readonly errorMessage: string;
    readonly diffGroups: DiffGroup[];
    submit(prompt: string): Promise<void>;
    confirm(): void;
    cancel(): void;
    resetError(): void;
}
export interface ComponentFrameInfo {
    name: string;
    frame: {
        parent: string | undefined;
        translation: {
            x?: number;
            y?: number;
            z?: number;
        } | undefined;
        orientation: {
            roll: number;
            pitch: number;
            yaw: number;
        };
    };
}
export type InferCallback = (prompt: string, components: ComponentFrameInfo[]) => Promise<{
    updates: FrameDelta[];
    explanation: string;
}>;
export declare const provideSceneBuilder: (onInfer: InferCallback) => void;
export declare const useSceneBuilder: () => SceneBuilderContext;
export {};
