Sequence Diagram

agent.Run 单轮时序

调用者 → Loop → 压缩 → Provider 流式 → 工具执行(权限门+沙箱)→ 完成判定,循环至 maxTurns

序列图 (Sequence Diagram) — 行为性图形·交互图。按时间顺序展示 agent 循环内各对象之间传递的消息。

调用者 TUI / exec agent.Run turn loop Compactor +partition Provider LLM 流式 Tool+Sandbox Registry 回调/UI OnText… loop [turn < maxTurns] Run(prompt, provider, opts) SeedMessages(sys+prompt+img) partitionTools(权限,loaded) exposed[] + 主动压缩历史 streamWithReconnect(request) OnText/OnToolCallStart/Delta Collected{text,toolCalls,usage} append assistant(text+calls+reasoning) alt [有工具调用] for call → OnToolCall OnPermissionRequest(Ask 时) Sandbox.Evaluate → tool.Run ToolResult{output,changedFiles} OnToolResult / OnUsage 批后:SelfCorrect + ModelSwitcher else [纯文本 → 完成判定] 完成判定:自报/续接/验收(headless) Result{FinalAnswer,Turns,Usage} START PREP STREAM EXEC DONE? RETURN 超限→压缩重试 · 停顿→重连 LEGEND 内部/工具调用 回调 → UI 关键路径 返回 激活期

PREP

每轮请求前

  • • SeedMessages:系统提示 + prompt + images
  • • partitionTools:按权限模式 + loaded 定工具集
  • • 超阈值 MCP 工具折叠到 tool_search
  • • Compactor 主动压缩最旧中段(接近上下文窗口时)

STREAM

Provider 流式

  • • streamWithReconnect:连接前重连 + 停顿重试
  • • 转发 OnText/OnReasoning/OnToolCallStart/Delta/OnUsage
  • • 上下文超限 → 一次压缩后 reactive 重试
  • • 图片拒绝 / ctx 取消 → 直接返回

EXEC

工具执行(每个调用)

  • • 过滤 / spec 门 / 预拒绝 → OnToolCall
  • • 权限门 + Sandbox.Evaluate(Ask 模式经 UI 决定)
  • • tool.Run → 追加 tool_result → OnToolResult
  • • 重复失败守卫 · stopReason 提前结束 · 批后 SelfCorrect

DONE

完成判定与返回

  • • 交互式:纯文本即最终答案,立即返回
  • • Headless:自报未完成 / 续接催继续 / 一次验收检查
  • • 未完成则进入下一轮,直到 maxTurns
  • • 返回 Result{FinalAnswer, Turns, Messages, Usage}