import { type ReasoningEffort } from '@duckcodeailabs/dql-agent'; export type ProviderSettingsId = 'anthropic' | 'openai' | 'gemini' | 'ollama' | 'custom-openai' | 'claude-code' | 'codex'; /** * Reasoning-effort ceiling for a provider. `'auto'` (the default when unset) * lets the agent pick effort per task/route up to `high`; an explicit level caps * it there. See `@duckcodeailabs/dql-agent`'s reasoning-effort helpers. */ export type ReasoningEffortSetting = ReasoningEffort | 'auto'; /** * How a provider authenticates: * - `api_key`: paste an API key (or set the env var). * - `local`: a local daemon, no credential (Ollama). * - `subscription_cli`: authenticated by an installed coding CLI's own login * (Claude Code / Codex) — no API key; usability is "installed + logged in". */ export type ProviderAuthMode = 'api_key' | 'local' | 'subscription_cli'; export interface ProviderSettingsInput { id: ProviderSettingsId; enabled?: boolean; apiKey?: string; baseUrl?: string; model?: string; /** Reasoning-effort ceiling. `'auto'` clears it; omitted leaves it unchanged. */ reasoningEffort?: ReasoningEffortSetting; } export interface StoredProviderSettings extends ProviderSettingsInput { updatedAt: string; /** Persisted ceiling — `'auto'` is normalized to `undefined` on write. */ reasoningEffort?: ReasoningEffort; } export interface RedactedProviderSettings { id: ProviderSettingsId; label: string; enabled: boolean; active: boolean; hasApiKey: boolean; /** Required non-secret configuration is present. Reachability still requires an explicit test. */ configured: boolean; apiKeyPreview?: string; baseUrl?: string; model?: string; source: 'local' | 'env' | 'none'; envVars: string[]; /** How this provider authenticates (drives the settings UI). */ authMode: ProviderAuthMode; /** For subscription_cli providers: the CLI binary the user must install + log into. */ command?: string; /** Reasoning-effort ceiling (`'auto'` when unset). Only meaningful for reasoning-capable providers. */ reasoningEffort: ReasoningEffortSetting; /** Whether this provider has a reasoning surface at all (drives whether the UI shows the control). */ supportsReasoningEffort: boolean; } export interface EffectiveProviderConfig { apiKey?: string; baseUrl?: string; model?: string; enabled: boolean; /** Resolved ceiling (local → env), `undefined` means auto (no cap). */ reasoningEffort?: ReasoningEffort; } export declare function providerSettingsPath(projectRoot: string): string; export declare function listProviderSettings(projectRoot: string): RedactedProviderSettings[]; export declare function getEffectiveProviderConfig(projectRoot: string, id: ProviderSettingsId): EffectiveProviderConfig; export declare function getActiveProvider(projectRoot: string): ProviderSettingsId | undefined; export declare function saveProviderSettings(projectRoot: string, input: ProviderSettingsInput): RedactedProviderSettings[]; export declare function isProviderSettingsId(value: unknown): value is ProviderSettingsId; //# sourceMappingURL=provider-settings.d.ts.map