UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

76 lines (75 loc) 2.53 kB
/** * 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;