import type { ThinkingLevel } from '@earendil-works/pi-agent-core'; export type RouterTier = 'high' | 'medium' | 'low'; export type RouterPin = RouterTier | 'auto'; export type RouterPhase = 'planning' | 'implementation' | 'lightweight'; export type RouterPinByProfile = Partial>; export type RouterThinkingByTier = Partial>; export type RouterThinkingByProfile = Record; export interface RoutingRule { matches: string | string[]; tier: RouterTier; reason?: string; } export interface ModelDefinition { model: string; contextWindow?: number; maxTokens?: number; reasoning?: boolean; thinkingLevels?: ThinkingLevel[]; } export interface ClassifierConfig { model: string; thinking?: ThinkingLevel; } export interface RoutedTierConfig { model: string; thinking?: ThinkingLevel; fallbacks?: string[]; contextWindow?: number; maxTokens?: number; reasoning?: boolean; thinkingLevels?: ThinkingLevel[]; resolvedContextWindow?: number; resolvedMaxTokens?: number; resolvedThinkingLevels?: ThinkingLevel[]; } export interface RouterProfile { high?: RoutedTierConfig; medium?: RoutedTierConfig; low?: RoutedTierConfig; } export interface RouterConfig { debug?: boolean; classifierModel?: ClassifierConfig; phaseBias?: number; maxSessionBudget?: number; rules?: RoutingRule[]; profiles: Record; models?: Record; } export interface RoutingDecision { profile: string; tier: RouterTier; phase: RouterPhase; targetProvider: string; targetModelId: string; targetLabel: string; reasoning: string; thinking: ThinkingLevel; timestamp: number; isClassifier?: boolean; isFallback?: boolean; isBudgetForced?: boolean; isRuleMatched?: boolean; } export interface RouterPersistedState { enabled: boolean; selectedProfile: string; pinTier?: RouterTier; pinByProfile?: RouterPinByProfile; thinkingByProfile?: RouterThinkingByProfile; debugEnabled?: boolean; widgetEnabled?: boolean; debugHistory?: RoutingDecision[]; lastPhase?: RouterPhase; lastDecision?: RoutingDecision; lastNonRouterModel?: string; accumulatedCost?: number; timestamp: number; } export interface ConfigLoadResult { config: RouterConfig; warnings: string[]; } export interface ParsedConfigFile { config: Partial; warnings: string[]; } export interface CustomSessionEntry { type: string; customType?: string; data?: unknown; }