export type CollabOperation = {
    type: 'insert';
    path: string;
    index: number;
    value: unknown;
} | {
    type: 'delete';
    path: string;
    index: number;
    count: number;
} | {
    type: 'set';
    path: string;
    value: unknown;
} | {
    type: 'move';
    path: string;
    fromIndex: number;
    toIndex: number;
};
export interface CollabCursor {
    userId: string;
    displayName: string;
    color: string;
    position: {
        x: number;
        y: number;
    };
    selectedEntityIds: string[];
    viewportCenter: {
        x: number;
        y: number;
    };
    viewportZoom: number;
    lastUpdate: number;
}
export interface CollabPresence {
    userId: string;
    displayName: string;
    avatarUrl: string;
    color: string;
    status: 'active' | 'idle' | 'away';
    currentScene: string;
    cursor: CollabCursor;
    joinedAt: number;
}
export interface CollabSession {
    id: string;
    projectId: string;
    hostUserId: string;
    participants: CollabPresence[];
    createdAt: number;
    permissions: CollabPermissions;
    chat: CollabMessage[];
}
export interface CollabPermissions {
    canEdit: string[];
    canView: string[];
    canManage: string[];
    publicAccess: 'none' | 'view' | 'edit';
}
export interface CollabMessage {
    id: string;
    userId: string;
    text: string;
    timestamp: number;
    type: 'chat' | 'system' | 'action';
}
/** CRDT-style version vector for conflict resolution. */
export interface VersionVector {
    [userId: string]: number;
}
export declare function mergeVersionVectors(a: VersionVector, b: VersionVector): VersionVector;
export declare function happensBefore(a: VersionVector, b: VersionVector): boolean;
export interface GitIntegrationConfig {
    enabled: boolean;
    autoCommit: boolean;
    autoCommitInterval: number;
    commitPrefix: string;
    branch: string;
    remote: string;
    lfs: boolean;
    lfsPatterns: string[];
    ignorePatterns: string[];
}
export declare const DEFAULT_GIT_CONFIG: GitIntegrationConfig;
export interface GitStatus {
    branch: string;
    ahead: number;
    behind: number;
    staged: GitFileChange[];
    unstaged: GitFileChange[];
    untracked: string[];
    conflicts: string[];
}
export interface GitFileChange {
    path: string;
    status: 'added' | 'modified' | 'deleted' | 'renamed' | 'copied';
    oldPath?: string;
}
export interface GitCommitInfo {
    hash: string;
    shortHash: string;
    message: string;
    author: string;
    authorEmail: string;
    date: number;
    filesChanged: number;
}
export interface PluginManifest {
    id: string;
    name: string;
    version: string;
    description: string;
    author: string;
    license: string;
    engineVersion: string;
    main: string;
    dependencies: Record<string, string>;
    permissions: PluginPermission[];
    contributes: PluginContributions;
}
export type PluginPermission = 'filesystem' | 'network' | 'clipboard' | 'notifications' | 'camera' | 'microphone' | 'system-info' | 'full-api';
export interface PluginContributions {
    commands?: PluginCommand[];
    menus?: PluginMenuItem[];
    panels?: PluginPanel[];
    nodeTypes?: PluginNodeType[];
    themes?: PluginTheme[];
    languages?: PluginLanguage[];
    exporters?: PluginExporter[];
    inspectors?: PluginInspector[];
}
export interface PluginCommand {
    id: string;
    title: string;
    icon?: string;
    keybinding?: string;
    category?: string;
}
export interface PluginMenuItem {
    commandId: string;
    group: string;
    order: number;
}
export interface PluginPanel {
    id: string;
    title: string;
    icon: string;
    location: 'left' | 'right' | 'bottom' | 'floating';
    defaultWidth?: number;
    defaultHeight?: number;
}
export interface PluginNodeType {
    type: string;
    category: string;
    color: string;
    inputs: {
        name: string;
        type: string;
    }[];
    outputs: {
        name: string;
        type: string;
    }[];
}
export interface PluginTheme {
    id: string;
    name: string;
    type: 'dark' | 'light';
}
export interface PluginLanguage {
    id: string;
    name: string;
    locale: string;
}
export interface PluginExporter {
    id: string;
    name: string;
    platform: string;
    fileExtension: string;
}
export interface PluginInspector {
    id: string;
    componentType: string;
    priority: number;
}
export type PluginState = 'installed' | 'active' | 'disabled' | 'error' | 'uninstalled';
export interface PluginInstance {
    manifest: PluginManifest;
    state: PluginState;
    error?: string;
    activatedAt?: number;
    api: Record<string, unknown>;
}
export declare class PluginRegistry {
    private plugins;
    register(manifest: PluginManifest): void;
    activate(pluginId: string): boolean;
    deactivate(pluginId: string): boolean;
    getPlugin(pluginId: string): PluginInstance | undefined;
    getActivePlugins(): PluginInstance[];
    getContributions<K extends keyof PluginContributions>(key: K): NonNullable<PluginContributions[K]> extends Array<infer T> ? T[] : never;
    getAllPlugins(): PluginInstance[];
}
export type NodePinType = 'exec' | 'boolean' | 'number' | 'string' | 'vec2' | 'vec3' | 'entity' | 'any' | 'array' | 'object';
export interface CustomNodeDefinition {
    id: string;
    name: string;
    category: string;
    description: string;
    color: string;
    icon?: string;
    inputs: NodePinDef[];
    outputs: NodePinDef[];
    properties: NodePropertyDef[];
    isSubgraph: boolean;
    subgraphId?: string;
}
export interface NodePinDef {
    name: string;
    type: NodePinType;
    defaultValue?: unknown;
    tooltip?: string;
    required?: boolean;
}
export interface NodePropertyDef {
    name: string;
    type: 'string' | 'number' | 'boolean' | 'enum' | 'color' | 'asset' | 'entity';
    defaultValue: unknown;
    options?: string[];
    min?: number;
    max?: number;
    step?: number;
}
export declare function createCustomNode(name: string, category: string): CustomNodeDefinition;
export interface Keybinding {
    id: string;
    commandId: string;
    key: string;
    when?: string;
    description: string;
}
export declare const DEFAULT_KEYBINDINGS: Keybinding[];
export interface EditorLayout {
    id: string;
    name: string;
    panels: EditorPanelLayout[];
    toolbars: EditorToolbarLayout[];
    activeScene: string;
}
export interface EditorPanelLayout {
    panelId: string;
    visible: boolean;
    docked: boolean;
    position: 'left' | 'right' | 'bottom' | 'floating';
    width: number;
    height: number;
    order: number;
}
export interface EditorToolbarLayout {
    id: string;
    visible: boolean;
    position: 'top' | 'left' | 'bottom';
    items: string[];
}
export declare const DEFAULT_EDITOR_LAYOUT: EditorLayout;
