import type { CustomProviderDef } from "../../llm/custom-providers.js"; import type { ExaSearchType, SearchProviderId } from "../../tools/web/types.js"; import type { Mode, ProviderId, ReasoningPreference } from "../../types.js"; import Conf from "conf"; export interface ProviderEndpoints { urls: string[]; activeIndex: number; disabledUrls?: string[] | undefined; } export declare const MAX_PROVIDER_ENDPOINTS = 10; export type LearnedVisionEntry = boolean | { vision: boolean; at: string; }; export interface LearnedRouteEntry { readonly at: string; readonly controlDialect?: string | undefined; readonly vision?: boolean | undefined; readonly reasoning?: boolean | undefined; readonly reasoningMandatory?: boolean | undefined; readonly acceptedEfforts?: readonly string[] | undefined; readonly rejectedFields?: readonly string[] | undefined; readonly contextTokens?: number | undefined; readonly maxOutputTokens?: number | undefined; } export interface ClaiConfig { defaultProvider: ProviderId; defaultModel: string; defaultMode: Mode; providerModels: Partial>; allowAlwaysTools: string[]; pentestAuthorized: boolean; sandboxRoots: string[]; ollamaHost: string; /** * @deprecated Superseded by `providerEndpoints.modal`. Still read once so * configs written before multi-endpoint support keep working. */ modalBaseUrl: string; providerEndpoints: Partial>; telemetry: boolean; lastUpdateCheck: number; thinking: ReasoningPreference; freeOnly: boolean; providerFallback: boolean; offline: boolean; parserStrict: boolean; privateMode: boolean; historyRetentionLimit: number; sandboxReads: boolean; activeSearchProvider: SearchProviderId; exaSearchType: ExaSearchType; namingProvider?: ProviderId | undefined; namingModel?: string | undefined; /** When true, bypass the OS keychain and always use plaintext file storage. */ disableKeychain: boolean; permissions?: "default" | "allow-all"; learnedVisionCapabilities: Record; learnedRouteCapabilities?: Record; toolCalling?: "auto" | "native" | "text"; softEarlyCompact?: boolean; /** @deprecated Legacy soft trigger; migrated to autoCompactRequestTokens. */ softCompactTokenBudget?: number; autoCompactRequestTokens?: number; fsPassthroughCapChars?: number; adaptiveMaxTokens?: boolean; freeTierContextGuard?: boolean; freeTierFailThreshold?: number; toolResultDedup?: boolean; slimNativePrompt?: boolean; contextLimitTokens?: Record; customProviders?: CustomProviderDef[]; } export declare const store: Conf; export declare function getConfig(): ClaiConfig; export declare function findCustomProviderDefSync(id: string | ProviderId): CustomProviderDef | undefined; export declare function updateConfig(patch: Partial): ClaiConfig; export declare function getProviderEndpoints(provider: ProviderId): ProviderEndpoints; export declare function setProviderEndpoints(provider: ProviderId, urls: readonly string[], activeIndex?: number, disabledUrls?: readonly string[]): ProviderEndpoints; export declare function appendProviderEndpoint(provider: ProviderId, url: string): { endpoints: ProviderEndpoints; added: boolean; }; export declare function setActiveProviderEndpoint(provider: ProviderId, index: number): ProviderEndpoints; export declare function setProviderEndpointDisabled(provider: ProviderId, url: string, disabled: boolean): ProviderEndpoints; export declare function getActiveProviderEndpoint(provider: ProviderId): string;