/**
 * Human overrides for the cost-tier -> model mapping.
 *
 * The auto-ranking (lib/model-tiers.ts) is a best guess; for subscription harnesses
 * with no price signal (Kimi, Cursor) it can be wrong. A user pins the right model
 * per tier with `agents models tier set <agent[@version]> <tier> <model>`, which
 * writes here — the user never hand-edits the file.
 *
 * Stored under agents.yaml, same selector shape as run.defaults:
 *
 *   model:
 *     tiers:
 *       "kimi:*":                 # applies to every installed kimi
 *         best: kimi-code/k3
 *         default: kimi-code/kimi-for-coding
 *       "kimi:0.19.2":            # a specific version wins over the wildcard
 *         best: kimi-code/k3-256k
 *
 * Resolution (most-specific-first): `<agent>:<version>` beats `<agent>:*` beats the
 * auto-ranking. resolveTierMap (model-tiers.ts) applies the result and falls back to
 * auto for any tier whose overridden id isn't in that version's catalog.
 */
import type { AgentId } from './types.js';
import { type ModelTier } from './model-tiers.js';
export type TierOverrideMap = Partial<Record<ModelTier, string>>;
export interface TierOverrideEntry {
    selector: string;
    tiers: TierOverrideMap;
}
/** Validate a tier token, throwing a friendly error otherwise. */
export declare function parseTier(input: string): ModelTier;
/**
 * The effective tier overrides for an (agent, version): the `<agent>:*` wildcard
 * merged under the exact `<agent>:<version>` selector (exact wins per-tier).
 */
export declare function resolveTierOverrideFrom(all: Record<string, unknown>, agent: AgentId, version?: string | null): TierOverrideMap;
export declare function resolveTierOverride(agent: AgentId, version?: string | null): TierOverrideMap;
/** Every configured override entry, sorted by selector (for `agents models tier list`). */
export declare function listTierOverrides(): TierOverrideEntry[];
/** Pin `tier -> model` for a selector. Writes agents.yaml. */
export declare function setTierOverride(selectorInput: string, tierInput: string | ModelTier, model: string): TierOverrideEntry;
/** Clear one tier (or all tiers when `tierInput` is omitted) for a selector. Returns true if anything changed. */
export declare function clearTierOverride(selectorInput: string, tierInput?: string): boolean;
