Runtime Agent Loop

internal/runtime · 一个 turn 的双层循环:连线标注实际调用的函数

Runtime Agent Loop internal/runtime · 一个 turn 的双层循环:连线标注实际调用的函数 01 / STREAM TURN 02 / TOOL EXEC 03 / AFTER TURN 04 / OUTER LOOP StartRun() emit(AgentStartEvent) streamAssistantResponse() cfg.Stream() stream.Events() emit(MessageStart/Update/End) return AssistantMessage ExecuteToolCalls() emit(ToolStart/ToolEnd) emit(TurnEndEvent) afterTurn() GetSteeringMessages() + PrepareNextTurn() maybeAutoCompact() runCompaction() → RebuildContext() ShouldStopAfterTurn() GetFollowUpMessages() finish() → emit(AgentEndEvent) Caller · REPL / headless · Sequence participant Caller REPL / headless runLoop · 双层循环 producer · Sequence participant runLoop 双层循环 producer streamResp · 一轮流式回复 · Sequence participant streamResp 一轮流式回复 Provider · StreamFn · Sequence participant Provider StreamFn ExecuteTools · 批量工具 · Sequence participant ExecuteTools 批量工具 afterTurn · 逐轮 hooks · Sequence participant afterTurn 逐轮 hooks Compaction · 自动压缩 · Sequence participant Compaction 自动压缩 Legend request return security async trace

内层循环 · 一个 turn

  • • turn_start → streamAssistantResponse → 若有工具调用则 ExecuteToolCalls → 结果回填
  • • 重复直到某条 assistant 消息不再含工具调用(自然收尾)
  • • streamResponse 全程回填 partial,绝不为请求失败返回 error

逐轮 hook(afterTurn)

  • • 有工具执行时先 GetSteeringMessages 注入下一轮
  • • PrepareNextTurn 可换 context / model / thinkingLevel
  • • 超窗则 maybeAutoCompact 原地压缩并发 compaction_event

外层循环 · 终止

  • • 内层收敛后 GetFollowUpMessages 有返回则作为新输入再跑
  • • ShouldStopAfterTurn 为真 → agent_end 退出
  • • length 截断失败所有工具令模型重发;error / aborted 立即结束