import type { ModelIdentifier } from '../ModelManager';
import { Tier } from './ProviderCapabilityCatalog';
export type InferenceMode = 'cli-only' | 'hybrid' | 'api-only' | 'local-only';
export type TaskKind = 'chat.fast' | 'chat.deep' | 'composer.summarize' | 'composer.rerank' | 'composer.expand' | 'composer.story-match' | 'embed';
export interface RouterDecision {
    task: TaskKind;
    tier: Tier;
    provider: string;
    model: string;
    mode: InferenceMode;
}
export interface RouterConfig {
    mode?: InferenceMode;
    preference?: string[];
    fastModel?: Record<string, string>;
    smartModel?: Record<string, string>;
}
export declare function readRouterConfig(): RouterConfig;
export declare function writeRouterConfig(cfg: RouterConfig): void;
export declare class ModelTierRouter {
    static pick(task: TaskKind): RouterDecision | null;
    static toModelIdentifier(d: RouterDecision): ModelIdentifier;
    /**
     * First-run autoconfig hook used by `openlife ask` / `bridge push chat`:
     * if no router.json exists, write a sensible default based on probing.
     * Returns true if it actually wrote a file (i.e. first run).
     */
    static ensureConfigured(): boolean;
}
