autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
76 lines (75 loc) • 2.53 kB
TypeScript
/**
* 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;