/**
 * AgentRouter — Intent → Preset 解析器
 *
 * 在统一架构下，Router 的职责简化为:
 *   - 理解用户意图 (intent classification)
 *   - 映射到正确的 Preset (配置组合)
 *   - 创建 AgentRuntime 并执行
 *
 * 路由策略 (优先级递减):
 *   1. 手动指定 (API `preset` 参数)
 *   2. 渠道特征 (如飞书终端命令以 > 开头 → remote-exec)
 *   3. 关键词匹配 (零延迟正则)
 *   4. LLM 意图分类 (精确但需 AI 调用)
 *   5. 默认 → chat
 *
 * 关键区别 (vs 旧 AgentRouter):
 *   - 旧版路由到 AgentMode (chat/bootstrap/scan/lark_bridge) → 4 种 Agent 类型
 *   - 新版路由到 Preset (chat/insight/remote-exec) → 同一 Runtime 的不同配置
 *   - 不再存在 "LarkBridge" 模式 — 飞书和前端共享同一 Preset
 *
 * @module AgentRouter
 */
import { type AgentMessage } from './AgentMessage.js';
/** Subset of AiProvider needed by the router */
interface RouterAiProvider {
    chatWithTools(prompt: string, opts: Record<string, unknown>): Promise<{
        text: string | null;
        functionCalls: Array<{
            id?: string;
            name?: string;
            args?: Record<string, unknown>;
        }> | null;
    }>;
}
/** Agent executor function */
type AgentExecutor = (presetName: string, message: AgentMessage, opts: Record<string, unknown>) => Promise<unknown>;
/** Options for route() */
interface RouteOpts {
    preset?: string;
    strategyOpts?: Record<string, unknown>;
    [key: string]: unknown;
}
/** Preset 名称枚举 */
export declare const PresetName: Readonly<{
    CHAT: "chat";
    INSIGHT: "insight";
    LARK: "lark";
    REMOTE_EXEC: "remote-exec";
}>;
export declare class AgentRouter {
    #private;
    constructor();
    /** 设置 AI Provider (用于 LLM 路由) */
    setAiProvider(provider: RouterAiProvider): void;
    /** 设置执行器 — Factory 提供的 (presetName, message, opts) => AgentResult */
    setExecutor(executor: AgentExecutor): void;
    /**
     * 路由并执行
     *
     * @param message 统一消息
     * @param [opts.preset] 手动指定 Preset (跳过路由)
     * @param [opts.strategyOpts] 策略特定选项 (如 FanOut 的 items)
     * @returns >}
     */
    route(message: AgentMessage, opts?: RouteOpts): Promise<{
        preset: string;
        result: unknown;
    }>;
    /**
     * 仅分类意图，不执行
     * @returns preset name
     */
    classify(message: AgentMessage): Promise<string>;
}
export default AgentRouter;
