export type TaskKind = "simple" | "explanation" | "bugfix" | "feature" | "refactor" | "debugging" | "architecture" | "research"; export type ModelProfile = "fast" | "balanced" | "advanced"; export type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max"; export interface Classification { kind: TaskKind; score: number; reasons: string[]; } export interface RepositorySignals { projectRoot?: string; fileCount?: number; languageMix?: Readonly>; diffSize?: number; promptFileCount?: number; } export interface PromptSignals { mentionedFileCount: number; } export interface AvailableModel { id: string; name?: string; } export interface RouterConfig { enabled: boolean; models: Record; defaultThinking: ThinkingLevel; advancedThreshold: number; hysteresis: number; switchPolicy: "stable" | "always"; debug: boolean; } export interface RouteState { profile: ModelProfile; model?: string; thinking: ThinkingLevel; score: number; } export interface SessionState { current?: RouteState; taskBoundary?: boolean; } export interface RouteOverride { profile?: ModelProfile; model?: string; thinking?: ThinkingLevel; } export interface RouteInput { prompt: string; repository?: RepositorySignals; config?: RouterConfig; availableModels?: readonly AvailableModel[]; currentModel?: string; session?: SessionState; override?: RouteOverride; } export interface RouteDecision extends RouteState { kind: TaskKind; reasons: string[]; fallback: boolean; overridden: boolean; } export interface ConfigResult { config: RouterConfig; warnings: string[]; }