import type { ModelProvider, ModelStrength, ScopeConfig } from '../../types.js'; /** Model-ladder resolution goes through `readMergedLaunchConfig` — the SAME * project-stack > profile > user > builtin precedence `resolveKindConfig` * already uses for `kinds` — so a project/profile override of `modelLadders` * is honored identically to a kind override, instead of this file reading * only user config. */ export declare function modelLadders(): ScopeConfig['modelLadders']; /** Env var naming the DEFAULT provider for an UNqualified bare strength only. * `CRTR_MODEL_PROVIDER=openai` (case-insensitive) makes a bare `strong` resolve * on the OpenAI ladder; anything else defaults to Anthropic. A configured * defaultProvider in config.json wins over this env. */ export declare const OPENAI_PROVIDER_ENV = "CRTR_MODEL_PROVIDER"; export declare function defaultProvider(ladders?: ScopeConfig['modelLadders']): ModelProvider; /** Strength synonyms accepted from personas/callers. */ export declare const STRENGTH_ALIASES: Record; export declare const MODEL_PROVIDER_KEYS: ModelProvider[]; export declare const MODEL_STRENGTHS: ModelStrength[]; /** The ladder providers a picker/cycle should OFFER: a provider column is kept * only when at least one of its ladder cells names a runtime provider the * caller reports as signed in (`isConfigured` — e.g. pool occupancy or * `registry.getProviderAuthStatus(id).configured`). A user who never logged * into Codex sees no openai column in settings and no openai rungs on Alt+M. * When NO column qualifies (a fresh install before any login), every provider * is returned: the model surfaces must stay reachable so the user can still * inspect config and go sign in. Resolution (`normalizeModel` etc.) is * deliberately NOT gated — an explicit `openai/strong` request still resolves * and then fails/falls back through the normal auth-aware launch policy. */ export declare function configuredLadderProviders(isConfigured: (runtimeProviderId: string) => boolean, ladders?: ScopeConfig['modelLadders']): ModelProvider[]; export declare const THINKING_SUFFIXES: Set; export declare function stripThinkingSuffix(spec: string): string; export interface PortableModelSelection { provider: ModelProvider; strength: ModelStrength; } /** Choose the provider×strength option an editor should highlight for an * existing model value. Portable tokens follow the exact provider rules used * by `normalizeModel`; concrete ladder refs map back to their configured cell, * ignoring a thinking suffix only after an exact match. An off-ladder concrete * ref retains a recognizable provider and starts at `ultra`; an unrecognized * value starts at `ultra` on the effective default provider. */ export declare function inferPortableModelSelection(model: string | undefined, ladders?: ScopeConfig['modelLadders']): PortableModelSelection;