/**
 * Models.json configuration types and schema
 *
 * Supports custom providers and models (Ollama, vLLM, LM Studio, proxies)
 *
 * File location: ~/.xopc/models.json (or XOPC_MODELS_JSON env var)
 */
import { z } from 'zod';
export { resolveModelsJsonPath as getModelsJsonPath } from './paths.js';
export declare const OpenRouterRoutingSchema: z.ZodObject<{
    only: z.ZodOptional<z.ZodArray<z.ZodString>>;
    order: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strip>;
export declare const VercelGatewayRoutingSchema: z.ZodObject<{
    only: z.ZodOptional<z.ZodArray<z.ZodString>>;
    order: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strip>;
export declare const OpenAICompletionsCompatSchema: z.ZodObject<{
    supportsStore: z.ZodOptional<z.ZodBoolean>;
    supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
    supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
    supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
    maxTokensField: z.ZodOptional<z.ZodEnum<{
        max_completion_tokens: "max_completion_tokens";
        max_tokens: "max_tokens";
    }>>;
    requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
    requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
    requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
    requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
    thinkingFormat: z.ZodOptional<z.ZodEnum<{
        openai: "openai";
        zai: "zai";
        dashscope: "dashscope";
    }>>;
    openRouterRouting: z.ZodOptional<z.ZodObject<{
        only: z.ZodOptional<z.ZodArray<z.ZodString>>;
        order: z.ZodOptional<z.ZodArray<z.ZodString>>;
    }, z.core.$strip>>;
    vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
        only: z.ZodOptional<z.ZodArray<z.ZodString>>;
        order: z.ZodOptional<z.ZodArray<z.ZodString>>;
    }, z.core.$strip>>;
    supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
export declare const OpenAIResponsesCompatSchema: z.ZodObject<{}, z.core.$strip>;
export declare const OpenAICompatSchema: z.ZodUnion<readonly [z.ZodObject<{
    supportsStore: z.ZodOptional<z.ZodBoolean>;
    supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
    supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
    supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
    maxTokensField: z.ZodOptional<z.ZodEnum<{
        max_completion_tokens: "max_completion_tokens";
        max_tokens: "max_tokens";
    }>>;
    requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
    requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
    requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
    requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
    thinkingFormat: z.ZodOptional<z.ZodEnum<{
        openai: "openai";
        zai: "zai";
        dashscope: "dashscope";
    }>>;
    openRouterRouting: z.ZodOptional<z.ZodObject<{
        only: z.ZodOptional<z.ZodArray<z.ZodString>>;
        order: z.ZodOptional<z.ZodArray<z.ZodString>>;
    }, z.core.$strip>>;
    vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
        only: z.ZodOptional<z.ZodArray<z.ZodString>>;
        order: z.ZodOptional<z.ZodArray<z.ZodString>>;
    }, z.core.$strip>>;
    supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>;
export declare const CustomModelSchema: z.ZodObject<{
    id: z.ZodString;
    name: z.ZodOptional<z.ZodString>;
    api: z.ZodOptional<z.ZodEnum<{
        "openai-completions": "openai-completions";
        "openai-responses": "openai-responses";
        "anthropic-messages": "anthropic-messages";
        "google-generative-ai": "google-generative-ai";
        "azure-openai-responses": "azure-openai-responses";
        "bedrock-converse-stream": "bedrock-converse-stream";
        "openai-codex-responses": "openai-codex-responses";
        "google-gemini-cli": "google-gemini-cli";
        "google-vertex": "google-vertex";
    }>>;
    reasoning: z.ZodOptional<z.ZodBoolean>;
    input: z.ZodOptional<z.ZodArray<z.ZodEnum<{
        image: "image";
        text: "text";
    }>>>;
    contextWindow: z.ZodOptional<z.ZodNumber>;
    maxTokens: z.ZodOptional<z.ZodNumber>;
    cost: z.ZodOptional<z.ZodObject<{
        input: z.ZodNumber;
        output: z.ZodNumber;
        cacheRead: z.ZodNumber;
        cacheWrite: z.ZodNumber;
    }, z.core.$strip>>;
    headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    compat: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
        supportsStore: z.ZodOptional<z.ZodBoolean>;
        supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
        supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
        supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
        maxTokensField: z.ZodOptional<z.ZodEnum<{
            max_completion_tokens: "max_completion_tokens";
            max_tokens: "max_tokens";
        }>>;
        requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
        requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
        requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
        requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
        thinkingFormat: z.ZodOptional<z.ZodEnum<{
            openai: "openai";
            zai: "zai";
            dashscope: "dashscope";
        }>>;
        openRouterRouting: z.ZodOptional<z.ZodObject<{
            only: z.ZodOptional<z.ZodArray<z.ZodString>>;
            order: z.ZodOptional<z.ZodArray<z.ZodString>>;
        }, z.core.$strip>>;
        vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
            only: z.ZodOptional<z.ZodArray<z.ZodString>>;
            order: z.ZodOptional<z.ZodArray<z.ZodString>>;
        }, z.core.$strip>>;
        supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>>;
}, z.core.$strip>;
export declare const ModelOverrideSchema: z.ZodObject<{
    name: z.ZodOptional<z.ZodString>;
    reasoning: z.ZodOptional<z.ZodBoolean>;
    input: z.ZodOptional<z.ZodArray<z.ZodEnum<{
        image: "image";
        text: "text";
    }>>>;
    contextWindow: z.ZodOptional<z.ZodNumber>;
    maxTokens: z.ZodOptional<z.ZodNumber>;
    cost: z.ZodOptional<z.ZodObject<{
        input: z.ZodOptional<z.ZodNumber>;
        output: z.ZodOptional<z.ZodNumber>;
        cacheRead: z.ZodOptional<z.ZodNumber>;
        cacheWrite: z.ZodOptional<z.ZodNumber>;
    }, z.core.$strip>>;
    headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    compat: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
        supportsStore: z.ZodOptional<z.ZodBoolean>;
        supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
        supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
        supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
        maxTokensField: z.ZodOptional<z.ZodEnum<{
            max_completion_tokens: "max_completion_tokens";
            max_tokens: "max_tokens";
        }>>;
        requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
        requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
        requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
        requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
        thinkingFormat: z.ZodOptional<z.ZodEnum<{
            openai: "openai";
            zai: "zai";
            dashscope: "dashscope";
        }>>;
        openRouterRouting: z.ZodOptional<z.ZodObject<{
            only: z.ZodOptional<z.ZodArray<z.ZodString>>;
            order: z.ZodOptional<z.ZodArray<z.ZodString>>;
        }, z.core.$strip>>;
        vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
            only: z.ZodOptional<z.ZodArray<z.ZodString>>;
            order: z.ZodOptional<z.ZodArray<z.ZodString>>;
        }, z.core.$strip>>;
        supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>>;
}, z.core.$strip>;
export declare const ProviderConfigSchema: z.ZodObject<{
    baseUrl: z.ZodOptional<z.ZodString>;
    apiKey: z.ZodOptional<z.ZodString>;
    api: z.ZodOptional<z.ZodEnum<{
        "openai-completions": "openai-completions";
        "openai-responses": "openai-responses";
        "anthropic-messages": "anthropic-messages";
        "google-generative-ai": "google-generative-ai";
        "azure-openai-responses": "azure-openai-responses";
        "bedrock-converse-stream": "bedrock-converse-stream";
        "openai-codex-responses": "openai-codex-responses";
        "google-gemini-cli": "google-gemini-cli";
        "google-vertex": "google-vertex";
    }>>;
    headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    authHeader: z.ZodOptional<z.ZodBoolean>;
    models: z.ZodOptional<z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        name: z.ZodOptional<z.ZodString>;
        api: z.ZodOptional<z.ZodEnum<{
            "openai-completions": "openai-completions";
            "openai-responses": "openai-responses";
            "anthropic-messages": "anthropic-messages";
            "google-generative-ai": "google-generative-ai";
            "azure-openai-responses": "azure-openai-responses";
            "bedrock-converse-stream": "bedrock-converse-stream";
            "openai-codex-responses": "openai-codex-responses";
            "google-gemini-cli": "google-gemini-cli";
            "google-vertex": "google-vertex";
        }>>;
        reasoning: z.ZodOptional<z.ZodBoolean>;
        input: z.ZodOptional<z.ZodArray<z.ZodEnum<{
            image: "image";
            text: "text";
        }>>>;
        contextWindow: z.ZodOptional<z.ZodNumber>;
        maxTokens: z.ZodOptional<z.ZodNumber>;
        cost: z.ZodOptional<z.ZodObject<{
            input: z.ZodNumber;
            output: z.ZodNumber;
            cacheRead: z.ZodNumber;
            cacheWrite: z.ZodNumber;
        }, z.core.$strip>>;
        headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
        compat: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
            supportsStore: z.ZodOptional<z.ZodBoolean>;
            supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
            supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
            supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
            maxTokensField: z.ZodOptional<z.ZodEnum<{
                max_completion_tokens: "max_completion_tokens";
                max_tokens: "max_tokens";
            }>>;
            requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
            requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
            requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
            requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
            thinkingFormat: z.ZodOptional<z.ZodEnum<{
                openai: "openai";
                zai: "zai";
                dashscope: "dashscope";
            }>>;
            openRouterRouting: z.ZodOptional<z.ZodObject<{
                only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                order: z.ZodOptional<z.ZodArray<z.ZodString>>;
            }, z.core.$strip>>;
            vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
                only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                order: z.ZodOptional<z.ZodArray<z.ZodString>>;
            }, z.core.$strip>>;
            supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
        }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>>;
    }, z.core.$strip>>>;
    modelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
        name: z.ZodOptional<z.ZodString>;
        reasoning: z.ZodOptional<z.ZodBoolean>;
        input: z.ZodOptional<z.ZodArray<z.ZodEnum<{
            image: "image";
            text: "text";
        }>>>;
        contextWindow: z.ZodOptional<z.ZodNumber>;
        maxTokens: z.ZodOptional<z.ZodNumber>;
        cost: z.ZodOptional<z.ZodObject<{
            input: z.ZodOptional<z.ZodNumber>;
            output: z.ZodOptional<z.ZodNumber>;
            cacheRead: z.ZodOptional<z.ZodNumber>;
            cacheWrite: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>>;
        headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
        compat: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
            supportsStore: z.ZodOptional<z.ZodBoolean>;
            supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
            supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
            supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
            maxTokensField: z.ZodOptional<z.ZodEnum<{
                max_completion_tokens: "max_completion_tokens";
                max_tokens: "max_tokens";
            }>>;
            requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
            requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
            requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
            requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
            thinkingFormat: z.ZodOptional<z.ZodEnum<{
                openai: "openai";
                zai: "zai";
                dashscope: "dashscope";
            }>>;
            openRouterRouting: z.ZodOptional<z.ZodObject<{
                only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                order: z.ZodOptional<z.ZodArray<z.ZodString>>;
            }, z.core.$strip>>;
            vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
                only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                order: z.ZodOptional<z.ZodArray<z.ZodString>>;
            }, z.core.$strip>>;
            supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
        }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>>;
    }, z.core.$strip>>>;
}, z.core.$strip>;
export declare const ModelsJsonSchema: z.ZodObject<{
    providers: z.ZodRecord<z.ZodString, z.ZodObject<{
        baseUrl: z.ZodOptional<z.ZodString>;
        apiKey: z.ZodOptional<z.ZodString>;
        api: z.ZodOptional<z.ZodEnum<{
            "openai-completions": "openai-completions";
            "openai-responses": "openai-responses";
            "anthropic-messages": "anthropic-messages";
            "google-generative-ai": "google-generative-ai";
            "azure-openai-responses": "azure-openai-responses";
            "bedrock-converse-stream": "bedrock-converse-stream";
            "openai-codex-responses": "openai-codex-responses";
            "google-gemini-cli": "google-gemini-cli";
            "google-vertex": "google-vertex";
        }>>;
        headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
        authHeader: z.ZodOptional<z.ZodBoolean>;
        models: z.ZodOptional<z.ZodArray<z.ZodObject<{
            id: z.ZodString;
            name: z.ZodOptional<z.ZodString>;
            api: z.ZodOptional<z.ZodEnum<{
                "openai-completions": "openai-completions";
                "openai-responses": "openai-responses";
                "anthropic-messages": "anthropic-messages";
                "google-generative-ai": "google-generative-ai";
                "azure-openai-responses": "azure-openai-responses";
                "bedrock-converse-stream": "bedrock-converse-stream";
                "openai-codex-responses": "openai-codex-responses";
                "google-gemini-cli": "google-gemini-cli";
                "google-vertex": "google-vertex";
            }>>;
            reasoning: z.ZodOptional<z.ZodBoolean>;
            input: z.ZodOptional<z.ZodArray<z.ZodEnum<{
                image: "image";
                text: "text";
            }>>>;
            contextWindow: z.ZodOptional<z.ZodNumber>;
            maxTokens: z.ZodOptional<z.ZodNumber>;
            cost: z.ZodOptional<z.ZodObject<{
                input: z.ZodNumber;
                output: z.ZodNumber;
                cacheRead: z.ZodNumber;
                cacheWrite: z.ZodNumber;
            }, z.core.$strip>>;
            headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
            compat: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
                supportsStore: z.ZodOptional<z.ZodBoolean>;
                supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
                supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
                supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
                maxTokensField: z.ZodOptional<z.ZodEnum<{
                    max_completion_tokens: "max_completion_tokens";
                    max_tokens: "max_tokens";
                }>>;
                requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
                requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
                requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
                requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
                thinkingFormat: z.ZodOptional<z.ZodEnum<{
                    openai: "openai";
                    zai: "zai";
                    dashscope: "dashscope";
                }>>;
                openRouterRouting: z.ZodOptional<z.ZodObject<{
                    only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                    order: z.ZodOptional<z.ZodArray<z.ZodString>>;
                }, z.core.$strip>>;
                vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
                    only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                    order: z.ZodOptional<z.ZodArray<z.ZodString>>;
                }, z.core.$strip>>;
                supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
            }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>>;
        }, z.core.$strip>>>;
        modelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
            name: z.ZodOptional<z.ZodString>;
            reasoning: z.ZodOptional<z.ZodBoolean>;
            input: z.ZodOptional<z.ZodArray<z.ZodEnum<{
                image: "image";
                text: "text";
            }>>>;
            contextWindow: z.ZodOptional<z.ZodNumber>;
            maxTokens: z.ZodOptional<z.ZodNumber>;
            cost: z.ZodOptional<z.ZodObject<{
                input: z.ZodOptional<z.ZodNumber>;
                output: z.ZodOptional<z.ZodNumber>;
                cacheRead: z.ZodOptional<z.ZodNumber>;
                cacheWrite: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>>;
            headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
            compat: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
                supportsStore: z.ZodOptional<z.ZodBoolean>;
                supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
                supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
                supportsUsageInStreaming: z.ZodOptional<z.ZodBoolean>;
                maxTokensField: z.ZodOptional<z.ZodEnum<{
                    max_completion_tokens: "max_completion_tokens";
                    max_tokens: "max_tokens";
                }>>;
                requiresToolResultName: z.ZodOptional<z.ZodBoolean>;
                requiresAssistantAfterToolResult: z.ZodOptional<z.ZodBoolean>;
                requiresThinkingAsText: z.ZodOptional<z.ZodBoolean>;
                requiresMistralToolIds: z.ZodOptional<z.ZodBoolean>;
                thinkingFormat: z.ZodOptional<z.ZodEnum<{
                    openai: "openai";
                    zai: "zai";
                    dashscope: "dashscope";
                }>>;
                openRouterRouting: z.ZodOptional<z.ZodObject<{
                    only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                    order: z.ZodOptional<z.ZodArray<z.ZodString>>;
                }, z.core.$strip>>;
                vercelGatewayRouting: z.ZodOptional<z.ZodObject<{
                    only: z.ZodOptional<z.ZodArray<z.ZodString>>;
                    order: z.ZodOptional<z.ZodArray<z.ZodString>>;
                }, z.core.$strip>>;
                supportsStrictMode: z.ZodOptional<z.ZodBoolean>;
            }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>>;
        }, z.core.$strip>>>;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type OpenRouterRouting = z.infer<typeof OpenRouterRoutingSchema>;
export type VercelGatewayRouting = z.infer<typeof VercelGatewayRoutingSchema>;
export type OpenAICompletionsCompat = z.infer<typeof OpenAICompletionsCompatSchema>;
export type OpenAIResponsesCompat = z.infer<typeof OpenAIResponsesCompatSchema>;
export type OpenAICompat = z.infer<typeof OpenAICompatSchema>;
export type CustomModel = z.infer<typeof CustomModelSchema>;
export type ModelOverride = z.infer<typeof ModelOverrideSchema>;
export type ProviderConfig = z.infer<typeof ProviderConfigSchema>;
export type ModelsJsonConfig = z.infer<typeof ModelsJsonSchema>;
export interface ValidationError {
    path: string;
    message: string;
    severity: 'error' | 'warning';
}
export interface ValidationResult {
    valid: boolean;
    errors: ValidationError[];
}
export declare function validateModelsConfig(config: unknown): ValidationResult;
export declare function getDefaultModelValues(): Required<Pick<CustomModel, 'input' | 'contextWindow' | 'maxTokens' | 'cost'>>;
/**
 * Load models.json from disk
 */
export declare function loadModelsJson(path?: string): {
    config: ModelsJsonConfig;
    error?: string;
};
/**
 * Save models.json to disk
 */
export declare function saveModelsJson(path: string, config: ModelsJsonConfig): {
    success: boolean;
    error?: string;
};
/**
 * Check if models.json exists
 */
export declare function modelsJsonExists(path?: string): boolean;
