/**
 * AIChat.core.ts — AIChat 核心类（不含 ChatSession）
 *
 * 包含：
 * - AIChat 构造函数（域名推导）
 * - 请求头构造 / 消息过滤 / modId 生成
 * - `chat()` / `_chatRequest()` / `executeTool()` / `sendMessage()`
 * - 历史记录持久化（upsertChatHistory / updateChatHistory / getChatHistory）
 * - 静态工具（generateUUID）
 */
/** 聊天消息 */
export interface ChatMessage {
    role: 'user' | 'assistant' | 'system' | 'tool' | string;
    content: unknown;
    tool_calls?: LLMToolCall[];
    tool_call_id?: string;
    gptChatId?: string;
    _ts?: number;
    _contextOnly?: boolean;
    [key: string]: unknown;
}
/** LLM 工具调用（Function Calling） */
export interface LLMToolCall {
    id?: string;
    type?: string;
    function?: {
        name?: string;
        arguments?: string;
    };
    index?: number;
}
/** chat() / _chatRequest() 调用选项 */
export interface ChatOptions {
    messages?: ChatMessage[];
    model?: string;
    tools?: unknown[];
    enableTools?: string[] | null;
    stream?: boolean;
    maxIterations?: number;
    _iteration?: number;
    _session?: unknown;
    needMqttTools?: boolean;
    needPersonalTools?: boolean;
    knowledgeBaseCodes?: string[];
    apiCacheKey?: string | null;
    reasoning?: boolean | object;
    abortController?: AbortController;
    onMessage?: (text: string, fullResponse?: unknown) => void;
    onToolCall?: (toolCall: LLMToolCall) => void;
    onToolResult?: (result: {
        name?: string;
        toolCallId?: string;
        result: unknown;
    }) => void;
    onComplete?: (result: string, fullResponse?: unknown) => void;
    onError?: (error: Error) => void;
    imageConfig?: {
        maxImageBytes?: number;
        autoConvertBase64ToURL?: boolean;
        maxImageHistoryCount?: number;
    };
    runCode?: boolean;
    skipIfMessageTextEmpty?: boolean;
    workspace?: string | null;
    [key: string]: unknown;
}
/** upsertChatHistory / updateChatHistory 载荷 */
export interface ChatHistoryPayload {
    title?: string;
    chatId?: string;
    modId?: string;
    model?: string;
    messages?: ChatMessage[];
    id?: string;
    [key: string]: unknown;
}
/** getChatHistory 响应 */
export interface ChatHistoryResponse {
    rows?: Array<{
        id: string;
        chatId: string;
        modId?: string;
        model?: string;
        messages?: ChatMessage[];
    }>;
    [key: string]: unknown;
}
/** SDK 最小接口（避免循环引用） */
export interface AIChatSDKRef {
    token?: string | null;
    baseURL?: string;
    copilotTools?: {
        getToolDefinitions: (categories: string[]) => unknown[];
        canExecute: (name: string) => boolean;
        execute: (name: string, args: unknown, options: unknown) => Promise<unknown>;
    };
    aiGenerators?: {
        chat: (options: ChatOptions) => Promise<unknown>;
    };
    localAPIKeySettings?: {
        resolveModelSettings: (model: string) => {
            model?: string;
            apiKey?: string;
        };
    };
    [key: string]: unknown;
}
/**
 * AIChat — Keepwork AI 聊天核心类。
 *
 * 负责：
 * - API 路由与认证头构建
 * - `chat()` 调用循环（含 tool-call 递归）
 * - 工具执行（executeTool）
 * - 历史记录持久化
 * - ChatSession 工厂（`createSession()`，实现在 AIChat.session.ts）
 */
declare class AIChat {
    sdk: AIChatSDKRef;
    baseURL: string;
    constructor(sdk: AIChatSDKRef);
    /**
     * 提取主域名（去掉子域名前缀）。
     * localhost / 127.x / 192.168.x 回退到 keepwork.com。
     */
    extractMainDomain(hostname: string): string;
    /**
     * 从 LocalAPIKeySettings 解析本地模型配置（model / apiKey）。
     * 若 SDK 无此服务则直接返回原始 model。
     */
    _resolveLocalModelSettings(model: string): {
        model?: string;
        apiKey?: string;
    };
    /** 生成 UUID v4（浏览器原生优先）。 */
    static generateUUID(): string;
    /**
     * 从当前 URL 路径提取站点信息（username / project / pagePath）。
     * 用于 _generateModId。
     */
    _getSiteInfo(): {
        username?: string;
        project?: string;
        pagePath?: string;
    };
    /**
     * 根据 persistedId 构建完整的 modId 路径。
     * 若 persistedId 已含 `/` 则直接返回；否则拼接当前 URL 的站点路径。
     */
    _generateModId(persistedId?: string): string | null;
    /**
     * 构建 Keepwork AI API 的请求头（含认证 token）。
     * 先查 sdk.token，再回退 localStorage。
     */
    _getHeaders(): Record<string, string>;
    /**
     * 过滤消息数组中非远程的 image_url（只保留 http/https 开头的远程链接）。
     * 用于持久化历史时去掉 base64 大图。
     */
    _filterMessages(messages: ChatMessage[] | null | undefined): ChatMessage[] | null | undefined;
    /** 判断 model 是否应禁用 reasoning（包含 'flash' 的模型）。 */
    _shouldDisableReasoning(model: string): boolean;
    /**
     * 插入或更新 AI 聊天历史记录。
     * 自动过滤非远程 image_url，避免 base64 写入历史表。
     */
    upsertChatHistory(payload: ChatHistoryPayload): Promise<unknown>;
    /**
     * 更新指定历史记录。
     * 自动过滤非远程 image_url。
     */
    updateChatHistory(id: string, payload: ChatHistoryPayload): Promise<unknown>;
    /**
     * 查询指定 modId 下的历史记录列表。
     */
    getChatHistory(modId: string): Promise<ChatHistoryResponse>;
    /**
     * 发起一次 AI 对话，支持 tool-call 递归循环。
     *
     * 流程：
     * 1. 调用 `_chatRequest()` 获取响应
     * 2. 若响应包含 tool_calls，执行所有工具并追加结果到 messages
     * 3. 递归调用 `chat()` 继续对话（受 maxIterations 限制）
     *
     * @param options - 包含 messages / model / tools / enableTools / 流式回调等
     * @returns 最终的 assistant 文本响应
     */
    chat(options?: ChatOptions): Promise<unknown>;
    /**
     * 构建工具列表并委托给 `sdk.aiGenerators.chat()` 执行实际请求。
     * 统一了 Keepwork proxy 和直连两种传输方式。
     * @private
     */
    _chatRequest(options?: ChatOptions): Promise<unknown>;
    /**
     * 简便发送：将单条文本消息包装为 messages 数组发送。
     */
    sendMessage(text: string, options?: ChatOptions): Promise<unknown>;
    /**
     * 执行单次工具调用。
     *
     * 路由顺序：
     * 1. session.sandbox（自定义 API → 代理 → 内置）
     * 2. sdk.copilotTools
     * 3. options.onToolCall 回退
     *
     * @param toolCall - 工具调用对象（含 function.name 和 function.arguments）
     * @param options  - 调用上下文（含 _session）
     */
    executeTool(toolCall: LLMToolCall, options?: ChatOptions): Promise<unknown>;
    /**
     * 创建新的 ChatSession 实例（实现在 AIChat.session.ts 中，由 AIChat.ts 注入）。
     * 此声明仅供类型推断，运行时会被 AIChat.ts 覆盖。
     */
    createSession(_options?: Record<string, unknown>): unknown;
}
export default AIChat;
//# sourceMappingURL=AIChat.core.d.ts.map