import type { RuntimeEventBus } from '../runtime/events/index.js'; /** Where model resolution lands when `provider.model` is empty. */ export declare const UNCONFIGURED_MODEL_REGISTRY_KEY = "openrouter:openrouter/free"; /** The registry rows a bare (provider-less) configured model id resolves against. */ export interface ConfiguredModelCandidate { readonly id: string; readonly provider: string; readonly registryKey: string; } export interface ConfiguredModelFollowerDeps { /** Reads the raw `provider.model` value from the live config. */ readonly readConfiguredModel: () => unknown; /** The models a bare configured id may resolve against, read lazily, never captured. */ readonly listModelCandidates: () => readonly ConfiguredModelCandidate[]; /** Runtime bus for MODEL_CHANGED, or null when the host has none. */ readonly runtimeBus?: RuntimeEventBus | null | undefined; } export declare class ConfiguredModelFollower { private readonly deps; /** The raw config value the current registryKey was resolved from. */ private lastResolvedRaw; /** The raw value whose resolution failure has already been logged (so it is logged once). */ private lastWarnedRaw; constructor(deps: ConfiguredModelFollowerDeps); private readRaw; private resolveRegistryKey; /** The registryKey the configured model resolves to right now (construction-time read). */ initialRegistryKey(): string; /** * Adopt a `provider.model` write made after construction. Returns the * registryKey to use now, `currentRegistryKey` unchanged when config has * not moved, when the configured value resolves to the same key, or when a * config read or resolution fails (a bad config value must never break model * resolution; the previous working model stays in force and the failure is * reported once per distinct value). */ adopt(currentRegistryKey: string): string; } //# sourceMappingURL=registry-configured-model.d.ts.map