/**
 * ExecuteTool.ts — 在当前浏览器上下文中安全执行任意 JavaScript 的工具
 *
 * 以 `AsyncFunction` 动态编译并运行代码，捕获 `console` 输出，
 * 并通过 `copilot` 代理对象暴露 CopilotTools 的全部工具给代码内部调用。
 *
 * LLM 工具定义：`run_app_cmd`
 */
/** 工具函数定义（OpenAI Function Calling 格式） */
export interface ToolDefinition {
    type: 'function';
    function: {
        name: string;
        description: string;
        parameters: Record<string, unknown>;
    };
}
/** 捕获的 console 日志条目 */
interface ConsoleLog {
    level: string;
    message: string;
}
/** execute() 调用配置 */
export interface ExecuteConfig {
    /** 关联的 ChatSession（用于访问 sandbox.copilot） */
    _session?: {
        sandbox?: {
            copilot?: Record<string, (...args: unknown[]) => Promise<unknown>>;
        };
    };
    [key: string]: unknown;
}
/** SDK 最小接口（避免循环引用） */
interface SDKRef {
    copilotTools?: {
        execute: (toolName: string, params: unknown, config: unknown) => Promise<unknown>;
    };
}
declare class ExecuteTool {
    /** LLM 可见的工具定义列表 */
    static readonly definitions: ToolDefinition[];
    private sdk;
    private config;
    constructor(sdk: SDKRef);
    /** 更新工具运行时配置（由 CopilotTools.setToolConfig 调用）。 */
    setConfig(config: ExecuteConfig): void;
    /**
     * 执行指定工具函数。
     *
     * @param name   - 工具名（目前仅支持 'run_app_cmd'）
     * @param args   - 工具参数
     * @param config - 运行时配置（含 _session 等）
     */
    execute(name: string, args: {
        command?: string;
        timeout?: number;
    } | string[] | unknown, config?: ExecuteConfig): Promise<string>;
    /**
     * 在安全沙箱中执行 JavaScript 代码。
     *
     * 执行环境：
     * - `sdk`：KeepworkSDK 实例
     * - `config`：调用方配置
     * - `window` / `document`：当前浏览器环境
     * - `console`：已捕获输出的代理 console
     * - `copilot`：CopilotTools 的 Proxy，可调用任意已注册工具
     *
     * 单行表达式自动加 `return`；多行代码以语句形式执行。
     *
     * @param code   - 要执行的 JavaScript 代码字符串
     * @param config - 运行时配置
     * @returns 格式化的执行输出（含 console 日志 + 返回值）
     */
    runAppCmd(code: string, config?: ExecuteConfig): Promise<string>;
    /**
     * 创建 copilot 工具代理对象。
     * 优先使用 session.sandbox.copilot（已配置完整代理）；
     * 否则创建一个直接调用 sdk.copilotTools.execute 的 Proxy。
     *
     * @param config - 运行时配置
     */
    createCopilotProxy(config: ExecuteConfig): Record<string, unknown>;
    /** 将任意值序列化为字符串（循环引用安全）。 */
    stringifyValue(value: unknown): string;
    /** 格式化捕获的 console 日志数组为字符串。 */
    formatConsoleOutput(logs: ConsoleLog[]): string;
    /** 组合 console 输出和执行结果为最终字符串。 */
    formatExecutionOutput(result: unknown, logs: ConsoleLog[]): string;
    /**
     * 判断给定代码是否为单行 JS 表达式（可安全加 `return`）。
     * 任何包含换行、分号或语句关键字的代码视为语句块。
     */
    isSingleExpression(code: string): boolean;
}
export default ExecuteTool;
//# sourceMappingURL=ExecuteTool.d.ts.map