可选llmService: LLMService受保护config受保护llm受保护log可选last子类声明需要的额外配置 key 列表。 AgentService 会根据此列表传递对应的 extraParams, 避免使用 instanceof / 引用相等判断。
受保护get获取当前 LLM 配置
更新 Agent 配置 同时更新 AgentConfig 和 LLMService
可选_extraParams: Record<string, unknown>受保护isLLM 是否已启用
设置共享的 ToolRegistry 实例
订阅 Agent 事件总线(Phase D — 事件流与可观测性)。 UI / 遥测 / 日志层可通过此方法订阅 agent.* 事件,与 Agent 主流程解耦。
事件名(见 AGENT_EVENT 常量)
事件载荷监听器
unsubscribe 函数
一次性订阅:触发一次后自动注销
暴露事件总线实例,供 llm-service agentLoopStream 回调注入时直接 emit
注册一个钩子。钩子按注册顺序串行执行。
链式调用:agent.use(hook1).use(hook2)。
设置当前 Agent 上下文,供钩子读取 runId/testId/sessionId。 返回一个 restore 函数,调用后恢复原上下文(用于 try/finally)。
Phase D:同时触发 agent.start 事件,携带完整上下文。
暂停当前 Agent 执行,进入 interrupted 态等待人工 continue。
设计借鉴 anything-llm AIbitat 的 interrupt(route) + shouldAgentInterrupt。
与 AIbitat 不同的是,本实现把"等待"语义交给调用方:
interrupt 仅 emit agent.interrupt 事件并返回一个 Promise<decision>,
该 Promise 的 resolve 函数挂到 this.continueResolvers 上,
由 continue(decision) 唤醒。
典型用法(HealerAgent):
const decision = await this.interrupt('patch-awaiting-approval', {
round, patches, testFile,
});
if (decision.approved) { fs.writeFileSync(testFile, patched); }
中断原因标识(如 'patch-awaiting-approval')
可选payload: Record<string, unknown>
中断上下文(供 UI 渲染)
人工 continue 时传入的 decision 对象
人工恢复被 interrupt 暂停的 Agent。
用户/调用方提供的恢复决策
true 表示成功唤醒等待中的 interrupt;false 表示无等待中的 interrupt
当前是否有等待 continue 的 interrupt
向引用缓冲区追加一项(工具执行过程中调用)。 缓冲内容将在响应最终化时随 done 事件统一 flush,不逐条 emit。
向附件缓冲区追加一项(工具执行过程中调用)。 缓冲内容将在响应最终化时随 done 事件统一 flush,不逐条 emit。
获取当前引用缓冲区的快照(不消耗)
获取当前附件缓冲区的快照(不消耗)
清空缓冲区。 通常在响应最终化、缓冲内容已随 done 事件 flush 后调用。
清空前的快照(citations + attachments),供调用方一次性 flush
受保护trigger触发 onStart 钩子链。 任一钩子返回非 null 即短路(缓存命中)。
受保护trigger触发 onMessage 钩子链,同时 emit agent.message 事件
受保护trigger触发 onPersist 钩子链,同时 emit agent.persist 事件
受保护trigger触发 onError 钩子链,同时 emit agent.error 事件
设置共享的 LLMService 实例
受保护get获取 ToolRegistry 实例。 优先使用共享实例,若无则按需创建(兼容独立使用场景)。
受保护call基础 LLM 调用方法(单次调用模式) 子类可通过 options 参数覆盖默认的 maxTokens、temperature 等配置
钩子触发:
可选options: CallLLMOptions受保护get子类必须提供 Agent 名称,用于 logger 标识
可选options: {可选maxRounds?: number可选error?: string可选stackTrace?: string可选requireApproval?: booleanHITL:是否在写盘前等待人工审批补丁。
运行测试并在失败时尝试修复,包含事务性补丁应用和最终回滚逻辑
可选options: { maxRounds?: number }
最近一次 callLLM / callLLMWithAgentLoop 调用的 token 用量