import { l as ProviderId, t as AiSdkModel } from "./index-CCQe5Cuy.mjs";
import { ImageModel, LanguageModel, LanguageModelMiddleware, TextStreamPart, ToolSet, generateText, streamText } from "ai";
import { JSONObject, JSONValue } from "@ai-sdk/provider";

//#region src/core/plugins/types.d.ts
/**
 * 常用的 AI SDK 参数类型（完整版，用于插件泛型）
 */
type StreamTextParams = Parameters<typeof streamText>[0];
type StreamTextResult = ReturnType<typeof streamText>;
type GenerateTextParams = Parameters<typeof generateText>[0];
type GenerateTextResult = ReturnType<typeof generateText>;
/**
 * AI 请求元数据
 * 定义结构化的元数据字段，避免使用 Record<string, any>
 */
interface AiRequestMetadata {
  topicId?: string;
  callType?: string;
  enableReasoning?: boolean;
  enableWebSearch?: boolean;
  enableGenerateImage?: boolean;
  isPromptToolUse?: boolean;
  isSupportedToolUse?: boolean;
  custom?: JSONObject;
}
/**
 * 递归调用函数类型
 * 泛型化以保持类型推导
 */
type RecursiveCallFn<TParams = unknown, TResult = unknown> = (newParams: Partial<TParams>) => Promise<TResult>;
/**
 * AI 请求上下文
 * 使用泛型参数以支持不同类型的请求
 */
interface AiRequestContext<TParams = unknown, TResult = unknown> {
  providerId: ProviderId;
  model: AiSdkModel;
  originalParams: TParams;
  metadata: AiRequestMetadata;
  startTime: number;
  requestId: string;
  recursiveCall: RecursiveCallFn<TParams, TResult>;
  isRecursiveCall: boolean;
  recursiveDepth: number;
  maxRecursiveDepth: number;
  mcpTools?: ToolSet;
  extensions: Map<string, JSONValue>;
  middlewares?: LanguageModelMiddleware[];
  [key: string]: any;
}
/**
 * 钩子分类
 * 使用泛型参数以支持不同类型的请求和响应
 */
interface AiPlugin<TParams = unknown, TResult = unknown> {
  name: string;
  enforce?: 'pre' | 'post';
  resolveModel?: (modelId: string, context: AiRequestContext<TParams, TResult>) => Promise<AiSdkModel | null> | AiSdkModel | null;
  loadTemplate?: (templateName: string, context: AiRequestContext<TParams, TResult>) => JSONValue | null | Promise<JSONValue | null>;
  configureContext?: (context: AiRequestContext<TParams, TResult>) => void | Promise<void>;
  transformParams?: (params: TParams, context: AiRequestContext<TParams, TResult>) => Partial<TParams> | Promise<Partial<TParams>>;
  transformResult?: (result: TResult, context: AiRequestContext<TParams, TResult>) => TResult | Promise<TResult>;
  onRequestStart?: (context: AiRequestContext<TParams, TResult>) => void | Promise<void>;
  onRequestEnd?: (context: AiRequestContext<TParams, TResult>, result: TResult) => void | Promise<void>;
  onError?: (error: Error, context: AiRequestContext<TParams, TResult>) => void | Promise<void>;
  transformStream?: (params: TParams, context: AiRequestContext<TParams, TResult>) => <TOOLS extends ToolSet>(options?: {
    tools: TOOLS;
    stopStream: () => void;
  }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
}
//#endregion
//#region src/core/plugins/index.d.ts
declare function definePlugin<TParams, TResult>(plugin: AiPlugin<TParams, TResult>): AiPlugin<TParams, TResult>;
declare function definePlugin(plugin: AiPlugin): AiPlugin;
declare function definePlugin<T extends (...args: any[]) => AiPlugin>(pluginFactory: T): T;
//#endregion
export { GenerateTextResult as a, GenerateTextParams as i, AiPlugin as n, StreamTextParams as o, AiRequestContext as r, StreamTextResult as s, definePlugin as t };