import type { ThinkingLevel } from "./config.js"; import type { DiscoveredModel, RoutingStage, TaskFeatures } from "./modelRouting.js"; export interface RoutingBudgets { maxEstimatedUsdPerStage: number; maxEstimatedUsdPerRun: number; maxObservedUsdPerRun: number; maxEstimatedUsdPerDay: number; maxObservedUsdPerDay: number; maxPaidFallbacksPerRun: number; allowUnknownCost: boolean; } export interface RoutingCircuitBreakers { maxSelectionFailures: number; repeatedRejectionFingerprintLimit: number; maxBuildPassesWithoutImprovement: number; requireIndependentChecker: boolean; } export interface RoutingBudgetSnapshot { estimatedRunUsd: number; observedRunUsd: number; estimatedDayUsd: number; observedDayUsd: number; paidFallbacks: number; attemptsByStage: Partial>; } export type RoutingCostEstimate = { status: "known"; estimatedUsd: number; } | { status: "unknown"; reason: string; }; export type ObservedRoutingCost = { status: "known"; observedUsd: number; } | { status: "unknown"; reason: string; }; export type RoutingBudgetDecision = { allowed: true; reason: string; } | { allowed: "ask"; reason: string; } | { allowed: false; reason: string; }; export declare const DEFAULT_ROUTING_BUDGETS: RoutingBudgets; export declare const DEFAULT_ROUTING_CIRCUIT_BREAKERS: RoutingCircuitBreakers; export declare function estimateRoutingStageCost(input: { task: TaskFeatures; model: Pick; thinking: ThinkingLevel; }): RoutingCostEstimate; export declare function enforceRoutingBudget(input: { stage: RoutingStage; estimate: RoutingCostEstimate; budgets: RoutingBudgets; snapshot: RoutingBudgetSnapshot; unattended: boolean; }): RoutingBudgetDecision; export declare function addEstimatedRoutingCost(snapshot: RoutingBudgetSnapshot, stage: RoutingStage, estimate: RoutingCostEstimate): RoutingBudgetSnapshot; export declare function reconcileObservedRoutingCost(snapshot: RoutingBudgetSnapshot, observed: ObservedRoutingCost): RoutingBudgetSnapshot;