import * as ai from "ai";
import { EmbeddingModel, ImageModel, LanguageModel, SpeechModel, ToolSet, TranscriptionModel } from "ai";
import { AnthropicProvider, AnthropicProviderSettings, createAnthropic } from "@ai-sdk/anthropic";
import { AzureOpenAIProvider, AzureOpenAIProviderSettings } from "@ai-sdk/azure";
import { DeepSeekProviderSettings, createDeepSeek } from "@ai-sdk/deepseek";
import { GoogleGenerativeAIProvider, GoogleGenerativeAIProviderSettings, createGoogleGenerativeAI } from "@ai-sdk/google";
import { OpenAIProvider, OpenAIProviderSettings, createOpenAI } from "@ai-sdk/openai";
import * as _ai_sdk_openai_compatible0 from "@ai-sdk/openai-compatible";
import { OpenAICompatibleProviderSettings } from "@ai-sdk/openai-compatible";
import { XaiProvider, XaiProviderSettings, createXai } from "@ai-sdk/xai";
import { CherryInProvider, CherryInProviderSettings } from "@cherrystudio/ai-sdk-provider";
import { OpenRouterProviderSettings, createOpenRouter } from "@openrouter/ai-sdk-provider";
import * as _ai_sdk_provider0 from "@ai-sdk/provider";
import { ProviderV3 } from "@ai-sdk/provider";

//#region src/core/providers/core/utils.d.ts
/**
 * Provider 工具函数和错误类
 * 合并自 utils.ts 和 errors.ts
 */
/**
 * 格式化私钥，确保它包含正确的PEM头部和尾部
 */
declare function formatPrivateKey(privateKey: string): string;
/**
 * Provider 创建错误
 * 当创建 provider 实例失败时抛出
 */
declare class ProviderCreationError extends Error {
  providerId: string;
  cause: Error;
  constructor(message: string, providerId: string, cause: Error);
}
//#endregion
//#region src/core/providers/core/ProviderExtension.d.ts
type ProviderCreatorFunction<TSettings = any> = (settings?: TSettings) => ProviderV3 | Promise<ProviderV3>;
/**
 * Provider 模块类型
 * 动态导入的模块应该包含至少一个创建函数
 * 允许 default 导出和其他属性
 */
type ProviderModule<TSettings = any> = Record<string, any> & {
  [K: string]: ProviderCreatorFunction<TSettings> | any;
};
/**
 * Provider Extension 配置基础接口
 *
 * @typeParam TSettings - Provider 配置类型
 * @typeParam TProvider - 实际 provider 类型（用于 variants）
 * @typeParam TName - Provider 名称类型（用于字面量推导）
 */
interface ProviderExtensionConfigBase<TSettings = any, TProvider extends ProviderV3 = ProviderV3, TName extends string = string> {
  /** Provider 唯一标识 */
  name: TName;
  /** 别名列表（可选） */
  aliases?: readonly string[];
  /** 默认配置选项 */
  defaultOptions?: Partial<TSettings>;
  /** 是否支持图像生成 */
  supportsImageGeneration?: boolean;
  /**
   * Provider 变体配置
   * 用于注册同一 provider 的不同模式
   */
  variants?: readonly ProviderVariant<TSettings, TProvider, any>[];
  /**
   * Tool factory 映射
   * 声明该 provider 支持的工具能力（如 webSearch）
   * 工具工厂从 provider 实例的 .tools 属性提取
   */
  toolFactories?: ToolFactoryMap<TProvider>;
}
/**
 * Provider Extension 配置接口 - 使用 create 函数
 */
interface ProviderExtensionConfigWithCreate<TSettings = any, TProvider extends ProviderV3 = ProviderV3, TName extends string = string> extends ProviderExtensionConfigBase<TSettings, TProvider, TName> {
  create: ProviderCreatorFunction<TSettings>;
  import?: never;
  creatorFunctionName?: never;
}
/**
 * Provider Extension 配置接口 - 使用动态导入
 */
interface ProviderExtensionConfigWithImport<TSettings = any, TProvider extends ProviderV3 = ProviderV3, TName extends string = string> extends ProviderExtensionConfigBase<TSettings, TProvider, TName> {
  create?: never;
  import: () => Promise<ProviderModule<TSettings>>;
  creatorFunctionName: string;
}
/**
 * Provider Extension 配置接口
 * 使用联合类型确保 create 和 import 互斥
 *
 * @typeParam TSettings - Provider 配置类型
 * @typeParam TProvider - 实际 provider 类型（用于 variants）
 * @typeParam TName - Provider 名称类型（用于字面量推导）
 */
type ProviderExtensionConfig<TSettings = any, TProvider extends ProviderV3 = ProviderV3, TName extends string = string> = ProviderExtensionConfigWithCreate<TSettings, TProvider, TName> | ProviderExtensionConfigWithImport<TSettings, TProvider, TName>;
/**
 * Provider Extension 类
 *
 * @typeParam TSettings - Provider 配置类型
 * @typeParam TProvider - 实际 provider 类型（用于 variants）
 * @typeParam TConfig - 配置对象类型（幻影类型参数，用于自动推导 Provider IDs）
 */
declare class ProviderExtension<TSettings = any, TProvider extends ProviderV3 = ProviderV3, TConfig extends ProviderExtensionConfig<TSettings, TProvider, string> = ProviderExtensionConfig<TSettings, TProvider, string>> {
  readonly config: TConfig;
  /** Provider 实例缓存 - 按 settings hash 存储，LRU 自动清理 */
  private instances;
  /** In-flight promise map - 防止并发创建相同 settings 的 provider */
  private pendingCreations;
  constructor(config: TConfig);
  /**
   * 静态工厂方法 - 创建 Provider Extension
   */
  static create<const TConfig extends ProviderExtensionConfig<any, any, string>, TSettings = (TConfig extends ProviderExtensionConfig<infer S, any, any> ? S : any), TProvider extends ProviderV3 = (TConfig extends ProviderExtensionConfig<any, infer P, any> ? P : ProviderV3)>(config: TConfig | (() => TConfig)): ProviderExtension<TSettings, TProvider, TConfig>;
  /**
   * Options getter - 只读配置
   */
  get options(): Readonly<Partial<TSettings>>;
  /**
   * 计算 settings 的稳定 hash
   */
  private computeHash;
  /**
   * 创建 Provider 实例
   * 相同 settings 会复用实例，不同 settings 会创建新实例
   */
  createProvider(settings?: TSettings, variantSuffix?: string): Promise<TProvider>;
  /**
   * 获取基础 provider 实例（无变体转换）
   * 用于访问 provider 的 .tools 属性
   */
  getBaseProvider(settings?: TSettings): Promise<TProvider>;
  private _doCreateProvider;
  /**
   * 配置 provider（链式调用）
   * 返回一个新的 Extension 实例，不修改原实例
   */
  configure(settings: Partial<TSettings>): ProviderExtension<TSettings, TProvider>;
  /**
   * 获取所有 provider IDs（包含变体和别名）
   */
  getProviderIds(): string[];
  /**
   * 检查给定 ID 是否属于此 Extension
   */
  hasProviderId(id: string): boolean;
  /**
   * 获取变体配置
   */
  getVariant(suffix: string): ProviderVariant<TSettings, TProvider> | undefined;
  /**
   * 清除所有缓存的 Provider 实例
   */
  clearCache(): void;
  /**
   * 获取已缓存的 provider 实例（如果存在）
   */
  getCachedProvider(): TProvider | undefined;
  /**
   * 获取缓存统计信息
   */
  getCacheStats(): {
    cachedInstances: number;
  };
}
//#endregion
//#region src/core/providers/core/ExtensionRegistry.d.ts
/**
 * Provider Extension 注册表
 *
 * 职责:
 * - 注册和管理 Provider Extensions
 * - 根据 ID 查找对应的 Extension
 * - 创建并注册 provider 实例（包括变体）
 *
 * @example
 * ```typescript
 * import { extensionRegistry } from '@cherrystudio/ai-core/provider'
 * import { OpenAIExtension } from './extensions/openai'
 *
 * // 注册 extension
 * extensionRegistry.register(OpenAIExtension)
 *
 * // 批量注册
 * extensionRegistry.registerAll([
 *   OpenAIExtension,
 *   AzureExtension,
 *   AnthropicExtension
 * ])
 *
 * // 创建并注册 provider 实例
 * await extensionRegistry.createAndRegisterProvider('openai', {
 *   apiKey: 'sk-xxx'
 * })
 * ```
 */
declare class ExtensionRegistry {
  /** Extension 存储: name -> Extension */
  private extensions;
  /** 别名映射: alias -> name */
  private aliasMap;
  /**
   * 注册单个 Extension
   * 支持链式调用
   */
  register(extension: ProviderExtension<any, any, any>): this;
  /**
   * 批量注册 Extensions
   * 支持 readonly 数组（用于 as const 数组）
   */
  registerAll(extensions: readonly ProviderExtension<any, any, any>[]): this;
  /**
   * 取消注册 Extension
   */
  unregister(name: string): boolean;
  /**
   * 获取 Extension（支持别名）
   */
  get(id: string): ProviderExtension<any, any, any> | undefined;
  /**
   * 获取 Extension
   *
   * @param id - Provider ID（必须是 RegisteredProviderId）
   * @returns Extension 或 undefined
   *
   * @example
   * ```typescript
   * const ext = extensionRegistry.getTyped('openai')
   * if (ext) {
   *   const provider = await ext.createProvider({
   *     apiKey: 'sk-...'
   *   })
   * }
   * ```
   */
  getTyped<T extends RegisteredProviderId>(id: T): ProviderExtension<any, any, any> | undefined;
  /**
   * 检查 Extension 是否已注册
   */
  has(id: string): boolean;
  /**
   * 获取所有已注册的 Extension
   */
  getAll(): ProviderExtension<any, any, any>[];
  /**
   * 获取所有已注册的 provider IDs（包含变体）
   * 返回类型安全的 RegisteredProviderId 数组，自动去重
   */
  getAllProviderIds(): RegisteredProviderId[];
  /**
   * 根据 base ID + mode 解析到完整的 provider ID
   *
   * 支持别名：如果 baseId 是别名，会先解析到规范 ID
   *
   * @param baseId - 基础 provider ID（可以是别名）
   * @param mode - 模式（如 'chat', 'responses'）
   * @returns 完整的 provider ID，如果无法解析则返回 null
   *
   * @example
   * ```typescript
   * resolveProviderIdWithMode('openai', 'chat')        // → 'openai-chat'
   * resolveProviderIdWithMode('azure', 'responses')    // → 'azure-responses'
   * resolveProviderIdWithMode('gemini', 'chat')        // → null (google 没有 chat 变体)
   * resolveProviderIdWithMode('openai')                // → 'openai' (没有 mode)
   * ```
   */
  resolveProviderIdWithMode(baseId: string, mode?: string): string | null;
  /**
   * 反向解析：从完整 ID 提取 base ID 和 mode
   *
   * 遍历所有 extensions 的变体，匹配 `${name}-${suffix}` 模式
   *
   * @param providerId - 完整的 provider ID
   * @returns 解析结果，如果无法解析返回 null
   *
   * @example
   * ```typescript
   * parseProviderId('openai-chat')        // → { baseId: 'openai', mode: 'chat', isVariant: true }
   * parseProviderId('azure-responses')    // → { baseId: 'azure', mode: 'responses', isVariant: true }
   * parseProviderId('openai')             // → { baseId: 'openai', isVariant: false }
   * parseProviderId('oai')                // → { baseId: 'openai', isVariant: false } (别名)
   * parseProviderId('unknown')            // → null
   * ```
   */
  parseProviderId(providerId: string): {
    baseId: RegisteredProviderId;
    mode?: string;
    isVariant: boolean;
  } | null;
  /**
   * 检查是否为变体 ID
   *
   * @param id - Provider ID
   * @returns 如果是变体 ID 返回 true
   *
   * @example
   * ```typescript
   * isVariant('openai-chat')      // → true
   * isVariant('azure-responses')  // → true
   * isVariant('openai')           // → false
   * isVariant('unknown')          // → false
   * ```
   */
  isVariant(id: string): boolean;
  /**
   * 获取基础 provider ID
   *
   * 对于变体ID，返回其基础provider ID；
   * 对于基础ID或别名，返回规范的provider ID；
   * 对于未知ID，返回null
   *
   * @param id - Provider ID（可以是基础ID、变体ID或别名）
   * @returns 基础 provider ID，如果无法解析则返回 null
   *
   * @example
   * ```typescript
   * getBaseProviderId('openai-chat')      // → 'openai' (变体)
   * getBaseProviderId('azure-responses')  // → 'azure' (变体)
   * getBaseProviderId('openai')           // → 'openai' (基础ID)
   * getBaseProviderId('oai')              // → 'openai' (别名)
   * getBaseProviderId('unknown')          // → null
   * ```
   */
  getBaseProviderId(id: string): RegisteredProviderId | null;
  /**
   * 获取变体的模式/后缀
   *
   * @param variantId - 变体 ID
   * @returns 模式/后缀，如果不是变体则返回 null
   *
   * @example
   * ```typescript
   * getVariantMode('openai-chat')      // → 'chat'
   * getVariantMode('azure-responses')  // → 'responses'
   * getVariantMode('openai')           // → null (不是变体)
   * getVariantMode('unknown')          // → null
   * ```
   */
  getVariantMode(variantId: string): string | null;
  /** 获取 variant 的 resolveModel 函数（类型安全在 extension 声明处保证） */
  getModelResolver(providerId: string): ((provider: ProviderV3, modelId: string) => any) | undefined;
  /**
   * 获取某个基础 provider 的所有变体 IDs
   *
   * @param baseId - 基础 provider ID（可以是别名）
   * @returns 变体 ID 数组，如果没有变体则返回空数组
   *
   * @example
   * ```typescript
   * getVariants('openai')   // → ['openai-chat']
   * getVariants('azure')    // → ['azure-responses']
   * getVariants('google')   // → ['google-chat']
   * getVariants('xai')      // → [] (没有变体)
   * getVariants('unknown')  // → [] (未注册)
   * ```
   */
  getVariants(baseId: string): string[];
  /** 获取指定 provider 的工具工厂（变体优先，回退到 base） */
  getToolFactory(providerId: string, capability: ToolCapability): ToolFactory | undefined;
  /**
   * 解析工具能力：返回 factory + provider 实例
   *
   * 1. Direct — provider 自己有 toolFactories
   * 2. Aggregator fallback — 从 model.provider 段解析（如 "aihubmix.google" → google extension）
   */
  resolveToolCapability(providerId: string, capability: ToolCapability, modelProvider?: string): Promise<{
    factory: ToolFactory;
    provider: ProviderV3;
  } | undefined>;
  /** Get provider for .tools extraction (cached or dummy instance) */
  private getToolProvider;
  /**
   * 清空所有注册
   */
  clear(): void;
  /**
   * 创建 provider 实例
   *
   * 支持两种调用方式:
   * 1. 类型安全版本 - 使用已注册的 provider ID，获得完整的类型推导
   * 2. 动态版本 - 使用任意字符串 ID，用于测试或动态注册的 provider
   *
   * @param id - Provider ID
   * @param settings - Provider 配置
   * @returns Provider 实例
   */
  createProvider<T extends RegisteredProviderId>(id: T, settings: CoreProviderSettingsMap[T]): Promise<ProviderV3>;
  createProvider(id: string, settings?: unknown): Promise<ProviderV3>;
}
/**
 * 全局 Extension Registry 实例
 * 单例模式，确保整个应用只有一个注册表
 */
declare const extensionRegistry: ExtensionRegistry;
//#endregion
//#region src/core/plugins/built-in/webSearchPlugin/index.d.ts
type OpenRouterSearchConfig = {
  plugins?: Array<{
    id: 'web';
    /**
     * Maximum number of search results to include (default: 5)
     */
    max_results?: number;
    /**
     * Custom search prompt to guide the search query
     */
    search_prompt?: string;
  }>;
  /**
   * Built-in web search options for models that support native web search
   */
  web_search_options?: {
    /**
     * Maximum number of search results to include
     */
    max_results?: number;
    /**
     * Custom search prompt to guide the search query
     */
    search_prompt?: string;
  };
};
/**
 * 插件初始化时接收的完整配置对象
 *
 * key = provider ID，value = 该 provider 的搜索配置
 *
 * - 大部分类型从 coreExtensions 的 toolFactories 声明中自动提取（WebSearchToolConfigMap）
 * - OpenRouter 使用自定义配置（非 SDK .tools 模式），从 openrouter.ts 导入
 */
type WebSearchPluginConfig = WebSearchToolConfigMap & {
  openrouter?: OpenRouterSearchConfig;
};
//#endregion
//#region src/core/providers/core/initialization.d.ts
/**
 * 核心 provider extensions 列表
 */
declare const coreExtensions: readonly [ProviderExtension<OpenAIProviderSettings, OpenAIProvider, {
  readonly name: "openai";
  readonly aliases: readonly ["openai-response"];
  readonly supportsImageGeneration: true;
  readonly create: typeof createOpenAI;
  readonly toolFactories: {
    readonly webSearch: (provider: OpenAIProvider) => (config: NonNullable<Parameters<OpenAIProvider["tools"]["webSearch"]>[0]>) => {
      tools: {
        webSearch: ai.Tool<{}, {
          action?: {
            type: "search";
            query?: string;
          } | {
            type: "openPage";
            url?: string | null;
          } | {
            type: "findInPage";
            url?: string | null;
            pattern?: string | null;
          };
          sources?: Array<{
            type: "url";
            url: string;
          } | {
            type: "api";
            name: string;
          }>;
        }>;
      };
    };
  };
  readonly variants: readonly [{
    readonly suffix: "chat";
    readonly name: "OpenAI Chat";
    readonly resolveModel: (provider: OpenAIProvider, modelId: string) => _ai_sdk_provider0.LanguageModelV3;
    readonly toolFactories: {
      readonly webSearch: (provider: OpenAIProvider) => (config: NonNullable<Parameters<OpenAIProvider["tools"]["webSearchPreview"]>[0]>) => {
        tools: {
          webSearch: ai.Tool<{}, {
            action?: {
              type: "search";
              query?: string;
            } | {
              type: "openPage";
              url?: string | null;
            } | {
              type: "findInPage";
              url?: string | null;
              pattern?: string | null;
            };
          }>;
        };
      };
    };
  }];
}>, ProviderExtension<AnthropicProviderSettings, AnthropicProvider, {
  readonly name: "anthropic";
  readonly aliases: readonly ["claude"];
  readonly supportsImageGeneration: false;
  readonly create: typeof createAnthropic;
  readonly toolFactories: {
    readonly webSearch: (provider: AnthropicProvider) => (config: NonNullable<Parameters<AnthropicProvider["tools"]["webSearch_20260209"]>[0]>) => {
      tools: {
        webSearch: ai.Tool<{
          query: string;
        }, {
          type: "web_search_result";
          url: string;
          title: string | null;
          pageAge: string | null;
          encryptedContent: string;
        }[]>;
      };
    };
    readonly urlContext: (provider: AnthropicProvider) => (config: NonNullable<Parameters<AnthropicProvider["tools"]["webFetch_20260209"]>[0]>) => {
      tools: {
        urlContext: ai.Tool<{
          url: string;
        }, {
          type: "web_fetch_result";
          url: string;
          content: {
            type: "document";
            title: string | null;
            citations?: {
              enabled: boolean;
            };
            source: {
              type: "base64";
              mediaType: "application/pdf";
              data: string;
            } | {
              type: "text";
              mediaType: "text/plain";
              data: string;
            };
          };
          retrievedAt: string | null;
        }>;
      };
    };
  };
}>, ProviderExtension<AzureOpenAIProviderSettings, AzureOpenAIProvider, {
  readonly name: "azure";
  readonly aliases: readonly ["azure-openai"];
  readonly supportsImageGeneration: true;
  readonly create: (settings: AzureOpenAIProviderSettings | undefined) => ProviderV3 & {
    languageModel(modelId: string): _ai_sdk_provider0.LanguageModelV3;
    embeddingModel(modelId: string): _ai_sdk_provider0.EmbeddingModelV3;
    imageModel(modelId: string): _ai_sdk_provider0.ImageModelV3;
    transcriptionModel(modelId: string): _ai_sdk_provider0.TranscriptionModelV3;
    rerankingModel(modelId: string): _ai_sdk_provider0.RerankingModelV3;
    speechModel(modelId: string): _ai_sdk_provider0.SpeechModelV3;
    videoModel(modelId: string): _ai_sdk_provider0.Experimental_VideoModelV3;
  };
  readonly toolFactories: {
    readonly webSearch: (provider: AzureOpenAIProvider) => (config: NonNullable<Parameters<AzureOpenAIProvider["tools"]["webSearchPreview"]>[0]>) => {
      tools: {
        webSearch: ai.Tool<{}, {
          action?: {
            type: "search";
            query?: string;
          } | {
            type: "openPage";
            url?: string | null;
          } | {
            type: "findInPage";
            url?: string | null;
            pattern?: string | null;
          };
        }>;
      };
    };
  };
  readonly variants: readonly [{
    readonly suffix: "responses";
    readonly name: "Azure OpenAI Responses";
    readonly transform: (_provider: AzureOpenAIProvider, settings: AzureOpenAIProviderSettings | undefined) => AzureOpenAIProvider;
    readonly toolFactories: {
      readonly webSearch: (provider: AzureOpenAIProvider) => (config: NonNullable<Parameters<AzureOpenAIProvider["tools"]["webSearchPreview"]>[0]>) => {
        tools: {
          webSearch: ai.Tool<{}, {
            action?: {
              type: "search";
              query?: string;
            } | {
              type: "openPage";
              url?: string | null;
            } | {
              type: "findInPage";
              url?: string | null;
              pattern?: string | null;
            };
          }>;
        };
      };
    };
  }, {
    suffix: string;
    name: string;
    transform: (_provider: AzureOpenAIProvider, settings: AzureOpenAIProviderSettings | undefined) => AnthropicProvider;
    toolFactories: {
      webSearch: (provider: AnthropicProvider) => (config: NonNullable<Parameters<AnthropicProvider["tools"]["webSearch_20260209"]>[0]>) => {
        tools: {
          webSearch: ai.Tool<{
            query: string;
          }, {
            type: "web_search_result";
            url: string;
            title: string | null;
            pageAge: string | null;
            encryptedContent: string;
          }[]>;
        };
      };
      urlContext: (provider: AnthropicProvider) => (config: NonNullable<Parameters<AnthropicProvider["tools"]["webFetch_20260209"]>[0]>) => {
        tools: {
          urlContext: ai.Tool<{
            url: string;
          }, {
            type: "web_fetch_result";
            url: string;
            content: {
              type: "document";
              title: string | null;
              citations?: {
                enabled: boolean;
              };
              source: {
                type: "base64";
                mediaType: "application/pdf";
                data: string;
              } | {
                type: "text";
                mediaType: "text/plain";
                data: string;
              };
            };
            retrievedAt: string | null;
          }>;
        };
      };
    };
  }];
}>, ProviderExtension<GoogleGenerativeAIProviderSettings, GoogleGenerativeAIProvider, {
  readonly name: "google";
  readonly aliases: readonly ["google-ai", "gemini", "google-gemini"];
  readonly supportsImageGeneration: true;
  readonly create: typeof createGoogleGenerativeAI;
  readonly toolFactories: {
    readonly webSearch: (provider: GoogleGenerativeAIProvider) => (config: NonNullable<Parameters<GoogleGenerativeAIProvider["tools"]["googleSearch"]>[0]>) => {
      tools: {
        webSearch: ai.Tool<{}, unknown>;
      };
    };
    readonly urlContext: (provider: GoogleGenerativeAIProvider) => (config: any) => {
      tools: {
        urlContext: ai.Tool<{}, any>;
      };
    };
  };
}>, ProviderExtension<XaiProviderSettings, ProviderV3, {
  readonly name: "xai";
  readonly aliases: readonly ["grok"];
  readonly supportsImageGeneration: true;
  readonly create: typeof createXai;
  readonly variants: readonly [{
    readonly suffix: "responses";
    readonly name: "xAI Responses";
    readonly resolveModel: (provider: XaiProvider, modelId: string) => _ai_sdk_provider0.LanguageModelV3;
    readonly toolFactories: {
      readonly webSearch: (provider: XaiProvider) => (config: {
        webSearch?: Parameters<XaiProvider["tools"]["webSearch"]>[0];
        xSearch?: Parameters<XaiProvider["tools"]["xSearch"]>[0];
      }) => {
        tools: {
          webSearch: ai.Tool<{}, {
            query: string;
            sources: Array<{
              title: string;
              url: string;
              snippet: string;
            }>;
          }>;
          xSearch: ai.Tool<{}, {
            query: string;
            posts: Array<{
              author: string;
              text: string;
              url: string;
              likes: number;
            }>;
          }>;
        };
      };
    };
  }];
}>, ProviderExtension<DeepSeekProviderSettings, ProviderV3, {
  readonly name: "deepseek";
  readonly supportsImageGeneration: false;
  readonly create: typeof createDeepSeek;
}>, ProviderExtension<OpenRouterProviderSettings, ProviderV3, {
  readonly name: "openrouter";
  readonly aliases: readonly ["tokenflux"];
  readonly supportsImageGeneration: true;
  readonly create: typeof createOpenRouter;
  readonly toolFactories: {
    readonly webSearch: () => (config: OpenRouterSearchConfig) => {
      providerOptions: {
        openrouter: OpenRouterSearchConfig;
      };
    };
  };
}>, ProviderExtension<OpenAICompatibleProviderSettings, ProviderV3, {
  readonly name: "openai-compatible";
  readonly supportsImageGeneration: true;
  readonly create: (settings: OpenAICompatibleProviderSettings | undefined) => _ai_sdk_openai_compatible0.OpenAICompatibleProvider<string, string, string, string>;
}>, ProviderExtension<CherryInProviderSettings, CherryInProvider, {
  readonly name: "cherryin";
  readonly supportsImageGeneration: true;
  readonly create: (options?: CherryInProviderSettings) => CherryInProvider;
  readonly variants: readonly [{
    readonly suffix: "chat";
    readonly name: "CherryIN Chat";
    readonly transform: (provider: CherryInProvider) => ProviderV3 & {
      languageModel(modelId: string): _ai_sdk_provider0.LanguageModelV3;
      embeddingModel(modelId: string): _ai_sdk_provider0.EmbeddingModelV3;
      imageModel(modelId: string): _ai_sdk_provider0.ImageModelV3;
      transcriptionModel(modelId: string): _ai_sdk_provider0.TranscriptionModelV3;
      rerankingModel(modelId: string): _ai_sdk_provider0.RerankingModelV3;
      speechModel(modelId: string): _ai_sdk_provider0.SpeechModelV3;
      videoModel(modelId: string): _ai_sdk_provider0.Experimental_VideoModelV3;
    };
  }];
}>];
/**
 * 检查是否有对应的 Provider Extension
 */
declare function hasProviderConfig(providerId: string): boolean;
//#endregion
//#region src/core/providers/types/toolFactory.d.ts
/**
 * 跨 provider 的工具能力标识
 *
 * 各 SDK 的工具键名不同（OpenAI: webSearch, Anthropic: webSearch_20250305, Google: googleSearch），
 * 但表达的是同一种能力。Plugin 通过 ToolCapability 进行跨 provider 统一查找。
 */
type ToolCapability = 'webSearch' | 'fileSearch' | 'codeExecution' | 'urlContext';
/** 工具工厂返回的 patch，描述要合并到 params 的修改 */
interface ToolFactoryPatch {
  tools?: ToolSet;
  providerOptions?: Record<string, any>;
}
/**
 * 工具工厂函数 — 形状约束
 *
 * 使用 `...args: any[]` 而非 `config: Record<string, any>`，
 * 这样 `as const satisfies` 不会擦除声明时的具体 config 类型。
 * `ExtractToolConfig` 可从声明中提取具体 config 类型。
 */
type ToolFactory<TProvider extends ProviderV3 = ProviderV3> = (provider: TProvider) => (...args: any[]) => ToolFactoryPatch;
/** Map of ToolCapability keys to their factory functions. */
type ToolFactoryMap<TProvider extends ProviderV3 = ProviderV3> = { [K in ToolCapability]?: ToolFactory<TProvider> };
//#endregion
//#region src/core/providers/types/index.d.ts
/**
 * 提取对象类型中的字符串键
 * @example StringKeys<{ foo: 1, 0: 2 }> = 'foo'
 */
type StringKeys<T> = Extract<keyof T, string>;
/** 从 coreExtensions 自动提取的 Provider ID literal union */
type RegisteredProviderId = StringKeys<CoreProviderSettingsMap>;
/** 允许已注册 ID（有自动补全）和任意字符串（动态 provider） */
type ProviderId = RegisteredProviderId | (string & {});
declare class ProviderError extends Error {
  providerId: string;
  code?: string | undefined;
  cause?: Error | undefined;
  constructor(message: string, providerId: string, code?: string | undefined, cause?: Error | undefined);
}
type AiSdkModel = LanguageModel | ImageModel | EmbeddingModel | TranscriptionModel | SpeechModel;
/**
 * Provider 变体配置
 *
 * @typeParam TSettings - Provider 配置类型
 * @typeParam TProvider - 基础 provider 类型（transform 的输入）
 * @typeParam TOutput - 变体输出的 provider 类型（transform 的输出），默认与 TProvider 相同
 *                       当 transform 返回不同类型的 provider 时（如 azure-anthropic），
 *                       toolFactories 和 resolveModel 将基于 TOutput 类型
 */
interface ProviderVariant<TSettings = any, TProvider extends ProviderV3 = ProviderV3, TOutput extends ProviderV3 = TProvider> {
  suffix: string;
  name: string;
  /** 类型安全的模型解析：provider.responses(modelId) / provider.chat(modelId) */
  resolveModel?: (provider: TOutput, modelId: string) => LanguageModel;
  /** 替换整个 provider（如 azure-anthropic），简单方法切换用 resolveModel */
  transform?: (baseProvider: TProvider, settings?: TSettings) => TOutput;
  toolFactories?: ToolFactoryMap<TOutput>;
}
/**
 * Extract all Provider IDs from an extension config
 * 保留字面量类型，避免被推断为 string
 */
type ExtractProviderIds<TConfig> = TConfig extends {
  name: infer TName;
} ? TName extends string ? TName | (TConfig extends {
  aliases: infer TAliases;
} ? TAliases extends readonly string[] ? TAliases[number] : never : never) | (TConfig extends {
  variants: infer TVariants;
} ? TVariants extends readonly any[] ? TVariants[number] extends {
  suffix: infer TSuffix;
} ? TSuffix extends string ? `${TName}-${TSuffix}` : never : never : never : never) : never : never;
/**
 * Map all Provider IDs from an Extension to its Settings type
 */
type ExtensionToSettingsMap<T> = T extends ProviderExtension<infer TSettings, any, infer TConfig> ? { [K in ExtractProviderIds<TConfig>]: TSettings } : never;
/**
 * Core Provider Settings Map
 */
type CoreProviderSettingsMap = UnionToIntersection<ExtensionToSettingsMap<(typeof coreExtensions)[number]>>;
type ExtractVariantIds<TConfig, TName extends string> = TConfig extends {
  variants: readonly {
    suffix: infer TSuffix extends string;
  }[];
} ? `${TName}-${TSuffix}` : never;
type ExtensionConfigToIdResolutionMap<TConfig> = TConfig extends {
  name: infer TName extends string;
} ? { readonly [K in TName | (TConfig extends {
  aliases: readonly (infer TAlias extends string)[];
} ? TAlias : never) | ExtractVariantIds<TConfig, TName>]: K extends ExtractVariantIds<TConfig, TName> ? K : TName } : never;
/**
 * Provider IDs Map Type with Literal Type Inference
 */
type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends ((x: infer I) => void) ? I : never;
/** Extract a capability's config type from an extension's toolFactories */
type ExtractToolConfig<TExt, K extends string> = TExt extends {
  config: {
    toolFactories?: { [P in K]?: (provider: any) => (config: infer C) => any };
  };
} ? C : never;
/** Extract config from variant-level toolFactories (e.g., openai-chat) */
type ExtractVariantToolConfig<TExt, K extends string> = TExt extends {
  config: {
    name: infer TName extends string;
    variants?: readonly (infer V)[];
  };
} ? V extends {
  suffix: infer TSuffix extends string;
  toolFactories?: { [P in K]?: (provider: any) => (config: infer C) => any };
} ? {
  id: `${TName}-${TSuffix}`;
  config: C;
} : never : never;
/** Extract { [providerId]: ConfigType } map from all extensions for a capability */
type ExtractToolConfigMap<TExtUnion, K extends string> = UnionToIntersection<(TExtUnion extends any ? ExtractToolConfig<TExtUnion, K> extends never ? never : TExtUnion extends {
  config: {
    name: infer TName extends string;
  };
} ? { [P in TName]?: ExtractToolConfig<TExtUnion, K> } : never : never) | (TExtUnion extends any ? ExtractVariantToolConfig<TExtUnion, K> extends never ? never : ExtractVariantToolConfig<TExtUnion, K> extends {
  id: infer TId extends string;
  config: infer C;
} ? { [P in TId]?: C } : never : never)>;
/** Auto-extracted from coreExtensions' toolFactories.webSearch declarations */
type WebSearchToolConfigMap = ExtractToolConfigMap<(typeof coreExtensions)[number], 'webSearch'>;
//#endregion
export { formatPrivateKey as A, ExtensionRegistry as C, ProviderExtensionConfig as D, ProviderExtension as E, ProviderModule as O, WebSearchPluginConfig as S, ProviderCreatorFunction as T, ToolFactoryMap as _, ExtractProviderIds as a, hasProviderConfig as b, ProviderError as c, RegisteredProviderId as d, StringKeys as f, ToolFactory as g, ToolCapability as h, ExtensionToSettingsMap as i, ProviderCreationError as k, ProviderId as l, WebSearchToolConfigMap as m, CoreProviderSettingsMap as n, ExtractToolConfig as o, UnionToIntersection as p, ExtensionConfigToIdResolutionMap as r, ExtractToolConfigMap as s, AiSdkModel as t, ProviderVariant as u, ToolFactoryPatch as v, extensionRegistry as w, OpenRouterSearchConfig as x, coreExtensions as y };