import { Phase } from '../managed-interceptor'; /** * 内置拦截器的管理元数据。 * * 每个条目包含: * - `id`:去重标识,用户可通过相同 id 替换内置拦截器 * - `phase`:执行阶段(SYSTEM / USER / SYSTEM_POST) * - `order`:同阶段内的排序权重 * - `dependencies`:(可选)依赖的其他拦截器 id 列表 * * ## 洋葱模型执行顺序 * * ``` * 请求方向 → ← 响应方向 * * SYSTEM 阶段(外层,先执行前置、后执行后置) * tracingOuter ───────────────────── tracingOuter * compression ──────────────────── compression * messageListener ─────────────────── messageListener * systemPrompt ────────────────── systemPrompt * agentsMd ───────────────── agentsMd * iterationLimit ──────────────── iterationLimit * errorLimit ─────────────── errorLimit * finishReason ────────────── finishReason * mcpClient ───────────── mcpClient * environmentInject ──────────── environmentInject [depends: system-reminder] * skill ─────────── skill [depends: system-reminder] * builtinToolContext ────────── builtinToolContext * * USER 阶段(中层,用户自定义拦截器) * 用户拦截器 A ──────── 用户拦截器 A * 用户拦截器 B ─────── 用户拦截器 B * * SYSTEM_POST 阶段(内层,最后执行前置、最先执行后置) * systemReminder ────── systemReminder * messageSanitize ───── messageSanitize * tracingInner ──── tracingInner * │ * └──► 实际 LLM 调用 / 工具执行 * ``` * * ## 新增拦截器 * * 在对应 phase 分区末尾追加,order 使用 `getOrder(N)` 递增。 * 例如:在 SYSTEM 阶段 builtinToolContext 之后新增 `newInterceptor`: * * ```typescript * newInterceptor: { * id: 'agforge:new-interceptor', * phase: Phase.SYSTEM, * order: getOrder(12), // builtinToolContext 是 11,新增用 12 * get dependencies() { // 可选:声明依赖(使用 getter 引用其他拦截器 id) * return [interceptorMeta.systemReminder.id]; * }, * }, * ``` * * ## 工厂函数使用方式 * * ```typescript * export const createErrorLimitInterceptor = (options): ManagedReActAgentInterceptor => ({ * ...interceptorMeta.errorLimit, * eachLoop: async function* (...) { ... }, * }); * ``` */ export declare const interceptorMeta: { /** * 外层追踪拦截器。 * 采集完整执行链路,在最外层记录 Agent 执行的开始和结束。 */ readonly tracingOuter: { readonly id: "agforge:tracing-outer"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * 上下文压缩拦截器。 * 在消息读取前检查是否需要压缩,压缩后替换 MessageStore。 */ readonly compression: { readonly id: "agforge:compression"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * 消息监听拦截器。 * 监听所有消息事件,包括用户拦截器产生的消息。 */ readonly messageListener: { readonly id: "agforge:message-listener"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * 系统提示词注入拦截器。 * 在 llmRequest 前将 systemPrompt 注入到消息列表。 */ readonly systemPrompt: { readonly id: "agforge:system-prompt"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * AGENTS.md 加载拦截器。 * 自动发现并加载项目的 AGENTS.md 文件,注入到系统提示词。 */ readonly agentsMd: { readonly id: "agforge:agents-md"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * 迭代次数限制拦截器。 * 框架级保护,限制 ReAct 循环的最大迭代次数,防止无限循环。 * 依赖 system-reminder 拦截器,确保 LLM 能正确理解 `` 标签。 */ readonly iterationLimit: { readonly id: "agforge:iteration-limit"; readonly phase: Phase.SYSTEM; readonly order: number; readonly dependencies: "agforge:system-reminder"[]; }; /** * 错误次数限制拦截器。 * 框架级保护,限制连续错误次数,支持重试和优雅终止。 */ readonly errorLimit: { readonly id: "agforge:error-limit"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * FinishReason 处理拦截器。 * 处理 LLM 的停止原因(length、content_filter、refusal 等),做出相应处理。 * 依赖 error-limit 拦截器,确保 FinishReasonRefusalError 能被正确处理为不可恢复错误。 */ readonly finishReason: { readonly id: "agforge:finish-reason"; readonly phase: Phase.SYSTEM; readonly order: number; readonly dependencies: "agforge:error-limit"[]; }; /** * MCP 客户端拦截器。 * 注册 MCP(Model Context Protocol)工具到可用工具列表。 */ readonly mcpClient: { readonly id: "agforge:mcp-client"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * 环境信息注入拦截器。 * 采集运行时环境信息(OS、时间、工作目录等)并注入到系统提示词。 * 依赖 system-reminder 拦截器注入动态环境信息。 */ readonly environmentInject: { readonly id: "agforge:environment-inject"; readonly phase: Phase.SYSTEM; readonly order: number; readonly dependencies: "agforge:system-reminder"[]; }; /** * Skill 注入拦截器。 * 加载和管理可复用的技能模块,注入到系统提示词和工具列表。 * 依赖 system-reminder 拦截器注入技能相关的动态提示。 */ readonly skill: { readonly id: "agforge:skill"; readonly phase: Phase.SYSTEM; readonly order: number; readonly dependencies: "agforge:system-reminder"[]; }; /** * 内置工具上下文拦截器。 * 为工具执行提供 ToolContext(权限管理、执行锁等)。 */ readonly builtinToolContext: { readonly id: "agforge:builtin-tool-context"; readonly phase: Phase.SYSTEM; readonly order: number; }; /** * System Reminder 注入拦截器。 * 收集所有拦截器注册的 reminder,渲染为 `` 标签注入到用户消息。 */ readonly systemReminder: { readonly id: "agforge:system-reminder"; readonly phase: Phase.SYSTEM_POST; readonly order: number; }; /** * 消息兜底拦截器。 * 在 LLM 请求前最后执行,检测并修复异常消息格式。 */ readonly messageSanitize: { readonly id: "agforge:message-sanitize"; readonly phase: Phase.SYSTEM_POST; readonly order: number; }; /** * 内层追踪拦截器。 * 在最内层捕获经过所有拦截器处理后的最终状态。 */ readonly tracingInner: { readonly id: "agforge:tracing-inner"; readonly phase: Phase.SYSTEM_POST; readonly order: number; }; };