消息队列解决同一个 Session 在 Agent 尚未完成时再次发送消息的问题。
stateDiagram-v2 state "当前 run" as Running state "等待队列" as Queued state "取消当前 run" as Cancelling state "已取消" as Cancelled [*] --> Running Running --> Queued: queue Queued --> Running: 当前 run 完成 Running --> Cancelling: interrupt Cancelling --> Running: 启动新 run Running --> Cancelled: Abort Cancelled --> [*]
Queue 模式
queue 是默认行为。新消息进入当前 Session 的等待队列,当前 run 完成后按顺序继续处理。它适合补充后续任务,不会打断正在执行的工具调用。
队列状态持久化为 queued 和 in_flight。每条 delivery 拥有稳定 ID,后端先 claim 并落盘,再用同一 ID 幂等追加 Session 用户消息,持久化成功后才 acknowledge。应用在 claim 后异常退出时会重放 in_flight;如果崩溃发生在 JSONL append 和 acknowledge 之间,重放会识别同一 message ID,不重复追加也不静默丢失。后续模型执行是否完成不改变用户消息已经持久化的事实。
Interrupt 模式
interrupt 会先取消当前 run,再处理新消息。它适合立即纠正方向,但当前回合尚未完成的结果不会继续执行。
设置入口位于 Settings 的通用区域。修改后对后续发送生效。
Abort
Abort 直接取消当前 run,优先于 Approval 等待和长命令等待。取消后必须产生明确终态。等待队列不会把已经取消的工具调用恢复到后台继续执行。
使用边界
队列只保证同一 Session 内的消息顺序。不同 Session、Subagent、Workflow Agent 和 Team member 由各自的运行状态和 MRM 资源限制协调。