import type { ModelChoice, PromptDescriptor, PromptLibrary } from "./prompts.js";
import type { PromptFn } from "./types.js";
export interface ApiKeyStore {
    read(options?: {
        readOnly?: boolean;
    }): Promise<string | null>;
    write(value: string): Promise<void>;
}
export interface EnsureOptionInput<TName extends string = string> {
    value?: string;
    fallback?: string;
    descriptor: PromptDescriptor<TName>;
}
export interface ResolveApiKeyInput {
    value?: string;
    envValue?: string;
    dryRun: boolean;
    assumeYes?: boolean;
    allowStored?: boolean;
}
export interface ResolveModelInput {
    value?: string;
    assumeDefault?: boolean;
    defaultValue: string;
    choices?: ReadonlyArray<ModelChoice>;
    label: string;
    onResolve?: (label: string, value: string) => void;
}
export interface ResolveReasoningInput {
    value?: string;
    assumeDefault?: boolean;
    defaultValue: string;
    label: string;
}
export interface OptionResolvers {
    ensure<TName extends string>(input: EnsureOptionInput<TName>): Promise<string>;
    resolveModel(input: ResolveModelInput): Promise<string>;
    resolveReasoning(input: ResolveReasoningInput): Promise<string>;
    resolveConfigName(value: string | undefined, defaultValue: string): Promise<string>;
    resolveApiKey(input: ResolveApiKeyInput): Promise<string>;
}
export interface OptionResolverInit {
    prompts: PromptFn;
    promptLibrary: PromptLibrary;
    apiKeyStore: ApiKeyStore;
    confirm: (message: string) => Promise<boolean>;
    checkAuth: (apiKey: string) => Promise<boolean>;
    loginViaOAuth?: () => Promise<string>;
}
export declare function createOptionResolvers(init: OptionResolverInit): OptionResolvers;
