export type TaskType = 'tool_call' | 'agent_loop' | 'classification' | 'translation' | 'reasoning' | 'code' | 'vision' | 'chat';
export type LatencyPriority = 'realtime' | 'interactive' | 'background';
export type CostPriority = 'budget' | 'standard' | 'premium';
export type AgentSurfaceLabel = 'web' | 'desktop' | 'mobile' | 'teams' | 'cli';
export declare function normalizeSurfaceLabel(input: string | undefined): AgentSurfaceLabel | undefined;
export interface RoutingRequest {
    taskType: TaskType;
    toolName?: string;
    subAgentType?: string;
    skillIntent?: string;
    contextTokens: number;
    hasImage: boolean;
    hasAudio: boolean;
    turnDepth: number;
    organizationId: string;
    userId: string;
    projectId?: string;
    surface: AgentSurfaceLabel;
    recentSuccessRate?: number;
    recentP50Latency?: number;
    monthlyBudgetRemaining?: number;
    latencyPriority: LatencyPriority;
    costPriority: CostPriority;
}
export interface ProviderModelTuple {
    readonly provider: string;
    readonly model: string;
}
export type MatchSource = 'rule' | 'llm_routed' | 'scope_override' | 'default';
export interface RoutingDecision {
    primary: ProviderModelTuple;
    fallbacks: ProviderModelTuple[];
    matchSource: MatchSource;
    matchedRuleId?: string;
    reasoning?: string;
    estimatedCostUsd?: number;
}
export interface RoutingRulePattern {
    taskType?: TaskType | TaskType[];
    toolName?: string | string[];
    subAgentType?: string;
    skillIntent?: string;
    surface?: AgentSurfaceLabel | AgentSurfaceLabel[];
    hasImage?: boolean;
    hasAudio?: boolean;
    latencyPriority?: LatencyPriority;
    costPriority?: CostPriority;
    contextTokens?: number | {
        '>'?: number;
        '<'?: number;
        '>='?: number;
        '<='?: number;
    };
    turnDepth?: number | {
        '>'?: number;
        '<'?: number;
        '>='?: number;
        '<='?: number;
    };
}
