/**
 * Platform catalog adapter — reads the local-llm-platform catalog.json
 * and provides a unified model surface for OwlCoda.
 *
 * Model truth priority:
 *   1. Platform catalog.json — defines product semantics, defaults, intents
 *   2. Live router /v1/models — defines today's actual availability
 *   3. OwlCoda config — port/host/router overrides and test fallback only
 */
export interface CatalogModel {
    id: string;
    channel: 'stable' | 'preview' | 'candidate' | 'experimental' | 'lab';
    backend: string;
    priority_role: string;
    tool_calling_support?: string;
    product_surfaces?: string[];
    supports_search_tool?: boolean;
    not_recommended_for?: string[];
}
export interface CatalogAlias {
    target: string;
    surfaces?: string[];
}
export interface PlatformCatalog {
    version: number;
    default_model: string;
    intent_defaults: Record<string, string>;
    models: CatalogModel[];
    aliases: Record<string, CatalogAlias>;
    work_types?: Record<string, {
        primary_model?: string;
    }>;
}
export type ModelAvailability = 'available' | 'unavailable' | 'unknown';
export interface PlatformModel {
    /** Platform real model ID (e.g. "qwen2.5-coder:32b") */
    id: string;
    /** Short display label for UI (e.g. "Qwen2.5 Coder 32B") */
    label: string;
    /** Channel: stable / preview / lab / candidate / experimental */
    channel: string;
    /** Backend engine (omlx, vllm, llama, kimi) */
    backend: string;
    /** Product role (e.g. "default_chat_and_coding_primary") */
    role: string;
    /** Whether the router reports this model as live today */
    availability: ModelAvailability;
    /** Is this the platform default? */
    isDefault: boolean;
    /** All aliases that resolve to this model (from catalog + compat) */
    aliases: string[];
    /** Tool calling support level */
    toolCalling: string;
}
export interface ModelSurface {
    /** All platform models with availability overlay */
    models: PlatformModel[];
    /** Platform default model ID */
    defaultModel: string;
    /** Intent → model ID mappings */
    intentDefaults: Record<string, string>;
    /** All aliases → model ID (for resolution) */
    aliasMap: Record<string, string>;
    /** Catalog version */
    catalogVersion: number;
    /** Whether catalog was loaded from platform truth */
    catalogLoaded: boolean;
    /** Router models that were live at probe time */
    routerModels: string[];
}
export declare function loadCatalog(fromDir?: string): PlatformCatalog | null;
/**
 * Build the unified model surface from platform catalog + router availability.
 * This is the single source of truth for all model display/selection in OwlCoda.
 */
export declare function buildModelSurface(routerUrl: string, fromDir?: string): Promise<ModelSurface>;
/**
 * Resolve a user-input model name to a platform model ID.
 * Priority: exact ID → alias → partial match → default.
 */
export declare function resolveModelName(surface: ModelSurface, input: string): string;
/**
 * Get the backend model name that the router expects.
 * For most models this is the same as the platform ID.
 * For some, the router uses a short alias (e.g. distilled-27b).
 */
export declare function getRouterModelName(surface: ModelSurface, platformId: string): string;
/**
 * Synchronous model surface builder for test / config-only mode.
 * Uses only catalog (no router probe).
 */
export declare function buildModelSurfaceSync(fromDir?: string): ModelSurface;
