/**
 * CopilotTools.ts — AI 工具分类注册与调度中心（TypeScript 版）
 *
 * 管理所有可供 AI 会话使用的工具分类（category），提供：
 * - `registerToolCategory()`：注册自定义工具分类（含 definitions / executor / onConfig）
 * - `getToolDefinitions()`：按分类名获取 OpenAI 格式工具定义（支持按函数名过滤和排除）
 * - `execute()`：按函数名分发工具调用到对应分类的 executor
 * - `resolveEnabledCategories()`：将 toolsConfig 对象解析为分类名数组
 * - `setToolConfig()`：更新分类的运行时配置
 *
 * ## 内置工具分类
 * | 分类名       | 工具                        |
 * |-------------|----------------------------|
 * | mqtt         | mqtt_publish/get/subscribe  |
 * | read         | read_file, list_dir         |
 * | edit         | replace_string_in_file, create_file, multi_replace |
 * | search       | grep_search                 |
 * | fileOps      | read + edit + search 合集   |
 * | execute      | run_app_cmd                 |
 * | web          | fetch_webpage               |
 * | personalPage | personal_page_load/save     |
 * | agent        | runAsyncAgentTask 等        |
 * | app          | read_app, click_element 等  |
 * | summarize    | summarize_conversation 等   |
 */
import AppTools from '../tools/AppTools';
/** 工具函数定义（OpenAI Function Calling 格式） */
export interface ToolDefinition {
    type: 'function';
    function: {
        name: string;
        description: string;
        parameters: Record<string, unknown>;
    };
}
/** 工具分类注册表条目 */
export interface ToolCategoryEntry {
    definitions: ToolDefinition[];
    /** 工具执行器（fnName, fnArgs, config） => result */
    executor: (fnName: string, fnArgs: unknown, config?: unknown) => Promise<unknown>;
    /** 运行时配置更新回调 */
    onConfig?: (config: unknown) => void;
    /**
     * 为 true 时，此分类的工具不会被 SandboxToolEnv 的分类级代理自动路由；
     * 需通过 toolProxy.functions 明确指定才会走代理路径。
     */
    disableAutoProxy?: boolean;
}
/** SDK 最小接口 */
interface SDKRef {
    agentRouter?: {
        instanceId?: string;
        hasRemoteAgent?: (name: string) => boolean;
        submitTask?: (name: string, payload: unknown, callbacks?: unknown) => Promise<unknown>;
    };
    [key: string]: unknown;
}
declare class CopilotTools {
    /** 工具分类注册表 */
    _registry: Record<string, ToolCategoryEntry>;
    /** 函数名 → 主分类名 反向索引 */
    _fnNameToCategory: Record<string, string>;
    /** 各分类的运行时配置 */
    toolConfigs: Record<string, unknown>;
    /** AppTools 类引用（供外部访问） */
    static AppTools: typeof AppTools;
    AppTools: typeof AppTools;
    private mqttTool;
    private fileTools;
    private agentTool;
    private personalPageTool;
    private executeTool;
    private webTool;
    private summarizeTool;
    private appTools;
    constructor(sdk: SDKRef);
    /**
     * 注册一个工具分类。
     *
     * 同一函数名可属于多个分类；第一个注册该函数名的分类成为其主执行者。
     * 后续包含同名函数的分类（如 'fileOps' 包含 read/edit/search 中的所有函数）
     * 仍可通过 `getToolDefinitions` 暴露定义，但执行调度以先注册者为准。
     *
     * @param name  - 分类名（如 'mqtt' / 'fileOps'）
     * @param entry - 分类入口（definitions / executor / onConfig / disableAutoProxy）
     */
    registerToolCategory(name: string, entry: ToolCategoryEntry): void;
    /**
     * 获取指定分类列表对应的 OpenAI 格式工具定义（去重）。
     *
     * 支持格式：
     * - `"category"`：包含该分类所有函数
     * - `"category.fnName"`：仅包含指定函数
     * - `"-category.fnName"`：从完整分类包含中排除指定函数
     *
     * @param categoryNames - 分类名数组（空 / undefined 时返回 []）
     */
    getToolDefinitions(categoryNames?: string[]): ToolDefinition[];
    /**
     * 导出指定分类的工具定义（可序列化格式）。
     * 供 DigitalHumanFrame 将父级工具定义传入子 iframe。
     *
     * @param categoryNames - 要导出的分类（空 / undefined 时导出全部）
     */
    getExportableDefinitions(categoryNames?: string[]): Record<string, ToolDefinition[]>;
    /**
     * 检查指定函数名是否在任意注册分类中可执行。
     * @param fnName - 工具函数名
     */
    canExecute(fnName: string): boolean;
    /**
     * 按函数名执行工具，分发到对应分类的 executor。
     *
     * @param fnName - 工具函数名
     * @param fnArgs - 工具参数
     * @param config - 运行时配置
     */
    execute(fnName: string, fnArgs: unknown, config?: unknown): Promise<unknown>;
    /**
     * 将 toolsConfig 对象解析为分类名数组（供 AIChat / SandboxToolEnv 使用）。
     *
     * 支持的 key 格式：
     * - `"category": { enabled: true }` — 启用整个分类
     * - `"category.fnName": { enabled: true }` — 仅启用该分类中的指定函数
     * - `"category.fnName": { enabled: false }` — 从完整分类包含中排除指定函数（生成 `-category.fnName` 条目）
     *
     * @param toolsConfig - 工具配置对象
     * @returns 已启用分类名数组（含点分函数名和排除标记）
     */
    resolveEnabledCategories(toolsConfig: Record<string, {
        enabled?: boolean;
    }>): string[];
    /**
     * 设置指定分类的运行时配置。
     * 支持新名称（'mqtt' / 'personalPage'）和旧别名（'MqttTool' 等）。
     *
     * @param categoryName - 分类名或旧别名
     * @param config       - 运行时配置对象
     */
    setToolConfig(categoryName: string, config: unknown): void;
    /**
     * 注册所有内置工具分类（构造函数内自动调用）。
     * 原子分类（read / edit / search）先注册，fileOps 作为合集后注册；
     * 原子分类的执行优先级高于 fileOps。
     * @private
     */
    private _registerBuiltinTools;
}
export default CopilotTools;
//# sourceMappingURL=CopilotTools.d.ts.map