/**
 * Core types for Studiograph workspace and repo management
 */
import { z } from 'zod';
/**
 * Base entity metadata (all entities have these fields)
 */
export declare const EntityBaseSchema: z.ZodObject<{
    entity_type: z.ZodString;
    entity_id: z.ZodString;
    created_at: z.ZodString;
    updated_at: z.ZodString;
    created_by: z.ZodString;
    updated_by: z.ZodString;
    tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$loose>;
export type EntityBase = z.infer<typeof EntityBaseSchema>;
/**
 * Repo configuration
 */
export declare const RepoConfigSchema: z.ZodObject<{
    name: z.ZodString;
    display_name: z.ZodOptional<z.ZodString>;
    type: z.ZodOptional<z.ZodString>;
    path: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    personal: z.ZodOptional<z.ZodBoolean>;
    owner_id: z.ZodOptional<z.ZodNumber>;
    system: z.ZodOptional<z.ZodBoolean>;
    workspace_wide: z.ZodOptional<z.ZodBoolean>;
    sync: z.ZodOptional<z.ZodArray<z.ZodObject<{
        source: z.ZodString;
        entity_type: z.ZodOptional<z.ZodString>;
        filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
    }, z.core.$strip>>>;
}, z.core.$strip>;
export type RepoConfig = z.infer<typeof RepoConfigSchema>;
export type RepoConfigInput = Omit<RepoConfig, 'path'> & {
    personal?: boolean;
    owner_id?: number;
};
/**
 * Workspace configuration
 */
/**
 * Field definition for schema extensions
 */
export declare const FieldDefinitionSchema: z.ZodObject<{
    name: z.ZodString;
    type: z.ZodEnum<{
        string: "string";
        number: "number";
        boolean: "boolean";
        enum: "enum";
        "string[]": "string[]";
    }>;
    required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    description: z.ZodOptional<z.ZodString>;
    enum_values: z.ZodOptional<z.ZodArray<z.ZodString>>;
    default: z.ZodOptional<z.ZodUnknown>;
}, z.core.$strip>;
export type FieldDefinition = z.infer<typeof FieldDefinitionSchema>;
/**
 * Schema extension for an existing or custom entity type
 */
export declare const SchemaExtensionSchema: z.ZodObject<{
    label: z.ZodOptional<z.ZodString>;
    description: z.ZodOptional<z.ZodString>;
    additional_fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
        name: z.ZodString;
        type: z.ZodEnum<{
            string: "string";
            number: "number";
            boolean: "boolean";
            enum: "enum";
            "string[]": "string[]";
        }>;
        required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
        description: z.ZodOptional<z.ZodString>;
        enum_values: z.ZodOptional<z.ZodArray<z.ZodString>>;
        default: z.ZodOptional<z.ZodUnknown>;
    }, z.core.$strip>>>;
    fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
        name: z.ZodString;
        type: z.ZodEnum<{
            string: "string";
            number: "number";
            boolean: "boolean";
            enum: "enum";
            "string[]": "string[]";
        }>;
        required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
        description: z.ZodOptional<z.ZodString>;
        enum_values: z.ZodOptional<z.ZodArray<z.ZodString>>;
        default: z.ZodOptional<z.ZodUnknown>;
    }, z.core.$strip>>>;
    body_template: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export type SchemaExtension = z.infer<typeof SchemaExtensionSchema>;
export declare const WorkspaceSyncTargetSchema: z.ZodObject<{
    repo: z.ZodString;
    filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
}, z.core.$strip>;
export declare const WorkspaceSyncRuleSchema: z.ZodObject<{
    source: z.ZodString;
    entity_type: z.ZodOptional<z.ZodString>;
    targets: z.ZodArray<z.ZodObject<{
        repo: z.ZodString;
        filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type WorkspaceSyncTarget = z.infer<typeof WorkspaceSyncTargetSchema>;
export type WorkspaceSyncRule = z.infer<typeof WorkspaceSyncRuleSchema>;
export declare const WorkspaceConfigSchema: z.ZodObject<{
    version: z.ZodString;
    team_name: z.ZodString;
    created_at: z.ZodString;
    repos: z.ZodArray<z.ZodObject<{
        name: z.ZodString;
        display_name: z.ZodOptional<z.ZodString>;
        type: z.ZodOptional<z.ZodString>;
        path: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        personal: z.ZodOptional<z.ZodBoolean>;
        owner_id: z.ZodOptional<z.ZodNumber>;
        system: z.ZodOptional<z.ZodBoolean>;
        workspace_wide: z.ZodOptional<z.ZodBoolean>;
        sync: z.ZodOptional<z.ZodArray<z.ZodObject<{
            source: z.ZodString;
            entity_type: z.ZodOptional<z.ZodString>;
            filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
        }, z.core.$strip>>>;
    }, z.core.$strip>>;
    model_provider: z.ZodOptional<z.ZodString>;
    model_id: z.ZodOptional<z.ZodString>;
    api_key: z.ZodOptional<z.ZodString>;
    r2_config: z.ZodOptional<z.ZodObject<{
        account_id: z.ZodOptional<z.ZodString>;
        bucket: z.ZodOptional<z.ZodString>;
        public_url: z.ZodOptional<z.ZodString>;
        access_key_id: z.ZodOptional<z.ZodString>;
        secret_access_key: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    schema_extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
        label: z.ZodOptional<z.ZodString>;
        description: z.ZodOptional<z.ZodString>;
        additional_fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
            name: z.ZodString;
            type: z.ZodEnum<{
                string: "string";
                number: "number";
                boolean: "boolean";
                enum: "enum";
                "string[]": "string[]";
            }>;
            required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
            description: z.ZodOptional<z.ZodString>;
            enum_values: z.ZodOptional<z.ZodArray<z.ZodString>>;
            default: z.ZodOptional<z.ZodUnknown>;
        }, z.core.$strip>>>;
        fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
            name: z.ZodString;
            type: z.ZodEnum<{
                string: "string";
                number: "number";
                boolean: "boolean";
                enum: "enum";
                "string[]": "string[]";
            }>;
            required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
            description: z.ZodOptional<z.ZodString>;
            enum_values: z.ZodOptional<z.ZodArray<z.ZodString>>;
            default: z.ZodOptional<z.ZodUnknown>;
        }, z.core.$strip>>>;
        body_template: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>>;
    sync: z.ZodOptional<z.ZodArray<z.ZodObject<{
        source: z.ZodString;
        entity_type: z.ZodOptional<z.ZodString>;
        targets: z.ZodArray<z.ZodObject<{
            repo: z.ZodString;
            filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
        }, z.core.$strip>>;
    }, z.core.$strip>>>;
    interview_started: z.ZodOptional<z.ZodBoolean>;
    search: z.ZodOptional<z.ZodObject<{
        provider: z.ZodOptional<z.ZodEnum<{
            google: "google";
            brave: "brave";
            tavily: "tavily";
        }>>;
        api_key: z.ZodOptional<z.ZodString>;
        google_cx: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    railway: z.ZodOptional<z.ZodObject<{
        project_id: z.ZodOptional<z.ZodString>;
        service_id: z.ZodOptional<z.ZodString>;
        environment_id: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    captioning: z.ZodOptional<z.ZodObject<{
        enabled: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;
/**
 * Entity with full data (frontmatter + content)
 */
export interface Entity extends EntityBase {
    content?: string;
    wikilinks?: string[];
    [key: string]: any;
}
/**
 * User context for operations
 */
export interface User {
    id: string;
    name: string;
    email: string;
}
/**
 * Git change tracking
 */
export interface GitChange {
    operation: 'create' | 'update' | 'delete';
    repo: string;
    filePath: string;
    entityType: string;
    entityId: string;
}
