import type { AgentId } from './types.js';
export type AgentModelNonAcpApplyScope = 'spawn_only' | 'next_prompt';
export type AgentModelOptionValueId = string;
export type AgentModelOption = Readonly<{
    id: string;
    name: string;
    description?: string;
    type: string;
    currentValue: AgentModelOptionValueId;
    options?: ReadonlyArray<Readonly<{
        value: AgentModelOptionValueId;
        name: string;
        description?: string;
    }>>;
}>;
export type AgentModelDescriptor = Readonly<{
    id: string;
    name: string;
    description?: string;
    modelOptions?: readonly AgentModelOption[];
}>;
export type AgentModelConfig = Readonly<{
    supportsSelection: boolean;
    /**
     * When true, the provider accepts arbitrary model IDs even if we cannot list them.
     *
     * This is intended for CLIs like Claude Code where the set of available models
     * can depend on account state and/or interactive flows.
     */
    supportsFreeform?: boolean;
    /**
     * How model changes should be described/applied for non-ACP sessions.
     *
     * ACP sessions may support live switching via `session/set_model`; callers should
     * treat those as `live` regardless of this value.
     */
    nonAcpApplyScope: AgentModelNonAcpApplyScope;
    /**
     * ACP-specific model switching behavior hint for UI “effective policy” copy.
     *
     * - set_model: runtime can switch models without restarting the session
     * - restart_session: changing the model requires starting a new underlying session
     */
    acpApplyBehavior?: 'set_model' | 'restart_session';
    /**
     * Optional ACP `session/set_config_option` id to use as a fallback when `session/set_model`
     * is unsupported by the agent.
     *
     * Many agents expose a `model` config option, but this is not guaranteed by ACP.
     */
    acpModelConfigOptionId?: string;
    /**
     * Controls whether Happy should attempt dynamic model probing for this provider.
     *
     * - `auto`: best-effort dynamic probing (CLI command and/or ACP session)
     * - `static-only`: skip dynamic probing and use catalog defaults only
     */
    dynamicProbe?: 'auto' | 'static-only';
    defaultMode: string;
    allowedModes: readonly string[];
    staticModels?: readonly AgentModelDescriptor[];
}>;
export declare const AGENT_MODEL_CONFIG: Readonly<Record<AgentId, AgentModelConfig>>;
export declare function getAgentModelConfig(agentId: AgentId): AgentModelConfig;
export declare function getAgentStaticModels(agentId: AgentId): readonly AgentModelDescriptor[];
//# sourceMappingURL=models.d.ts.map