可选customPrompts: Partial<AgentPrompts>可选llmService: LLMService受保护config受保护llm受保护log可选last受保护get获取当前 LLM 配置
受保护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 标识
Planner 需要 customPrompts 额外配置
更新 Agent 配置 同时更新 AgentConfig 和 LLMService
可选extraParams: Record<string, unknown>
子类可 override 处理的额外参数
静态parse
最近一次 callLLM / callLLMWithAgentLoop 调用的 token 用量