任务运行时
连接断开不等于轮次或任务结束
用户可以在同一项 Task 中补充要求、回答问题并继续执行。每次输入启动一个运行轮次,轮次内可以包含多次模型调用和工具操作;客户端连接只负责观察正在发生的执行。连接可以在轮次运行期间中断,轮次结束后 Task 仍可接受新的输入。
下图以同一 Task 中的两次输入为例。第一次执行期间连接断开,轮次仍在后台推进;重新连接后恢复观察。本轮结果保存后,Task 继续存在,并在收到下一次输入时启动轮次 2。
| 对象 | 保存或管理什么 | 结束的含义 |
|---|---|---|
| Task | 目标、消息、工作空间、任务状态和交付记录 | 当前目标的处理结果已经记录,后续仍可继续 |
| 运行轮次 | 本次输入对应的模型步骤、工具执行和取消控制 | 本轮停止推进,进入收尾 |
| 客户端连接 | 文本与工具事件的实时传递 | 当前观察通道关闭,不直接代表后台执行结束 |
Chat 使用独立的会话记录与轮次入口,Team 还有成员及依赖状态。它们复用 Agent 核心能力,但不能将这些产品对象都理解为同一条 Task 数据记录。
Web 与 Desktop 共用任务轮次
共享任务轮次负责取得任务锁、读取已有状态、准备工作空间、装配模型上下文与工具、运行 Agent 循环,以及执行收尾。Web 与 Desktop 分别提供存储、锁、取消登记和传输实现。
这一边界使两端的任务语义可以共同维护。例如,取消时如何处理未结束的工具片段、何时保存助手消息、等待用户时如何保留任务状态,都由共享运行逻辑决定。
身份和配额等预检仍由宿主承担。任务运行前,宿主确认执行者与任务的绑定关系并保存用户输入。MCP 连接可以与 Agent 配置准备并行进行,在工具装配需要连接结果时再等待,从而减少启动路径中的串行等待。
同一任务的并发推进受锁约束
重复提交和队列重投都可能尝试启动同一任务。运行时只有在取得任务锁后才进入 Agent 循环;活动运行还登记取消控制器,以便停止请求找到当前执行。
Web 在配置相应基础设施时使用分布式协调,Desktop 使用进程内协调。锁控制并发推进,不能消除外部操作已经产生的副作用,也不等同于所有工具具有“恰好执行一次”的保证。
重连恢复观察,继续任务启动新轮次
客户端断开后,只要执行宿主仍然运行,后台任务可以继续推进。重新打开页面时,系统先确定任务是否仍在运行,再决定连接活动事件流,或读取已经保存的结果。
Web 的可恢复缓冲区区分活动流、已结束流和不存在的缓冲。新轮次开始前清理旧轮次缓冲,防止旧事件混入当前执行。缓冲用于恢复观察进度;任务记录用于恢复已保存的工作事实。
Desktop 的 Renderer 与应用主进程具有不同生命周期。Renderer 重载、导航或关闭面板后,只要主进程与本轮执行仍存活,内存 StreamBuffer 就可以重放已有事件并继续传递实时事件。主进程退出后,内存缓冲随之消失,恢复依据转为持久化消息、状态与文件。文档不承诺任意中断点的工具续跑,也不将事件重放描述为重新执行工具。
停止请求进入统一收尾路径
用户停止任务时,运行时向模型与工具传播取消信号,并处理尚未结束的消息片段。外部请求和脚本能否立即停止取决于各自实现;已经生效的文件修改或外部操作不会因取消自动撤销。
Web 的跨实例取消需要让停止请求到达持有任务的 worker。系统先记录取消状态,再通知执行实例;订阅建立后补查一次状态,以覆盖停止请求先于订阅到达的窗口。Desktop 使用本地取消控制,但进入相同的任务收尾逻辑。
停止原因也影响结果解释。用户取消、部署中断和执行失败需要保留区别,用户才能判断是继续任务、修复环境,还是调整目标。等待用户回答则可以结束当前轮次,同时保持任务处于等待输入的状态。
持久化结果先于轮次结束通知
任务收尾将运行中的消息转换为后续可以读取的记录。共享收尾流程依次承担以下职责:
- 对取消后仍处于等待执行状态的工具片段写入中断结果,避免界面持续显示运行。
- 保存助手消息、累加本轮用量并更新任务元数据与结束原因。
- 按配置保存后续压缩所需的用量锚点,以及逐步执行和子 Agent 记录。
- 满足条件时提交后台记忆提取。
- 返回收尾结果,由外层运行逻辑发出轮次结束通知并清理运行资源。
这里的关键顺序是任务结果先保存,再通知观察者本轮结束。用量锚点与后台记忆提取属于辅助路径,不能将它们的成功写成任务完成的必要前提。交付文件的持久化由交付服务负责,也不能理解为终态更新自动复制所有工作区文件。
恢复的边界在于已确认事实
继续任务时,运行时从已保存消息、状态和工作空间重新装配输入。未持久化的中间输出可能丢失,外部服务中的副作用也可能先于本地结果记录生效。
因此恢复需要区分两种情况:模型推理可以依据现有事实继续;文件写入、外部发送等动作则应先核查实际结果,再决定是否重试。任务锁、事件缓冲与持久化记录各自解决不同问题,共同提供恢复依据,但不会自动为所有外部工具提供事务回滚。
| 能力 | Web | Desktop |
|---|---|---|
| 并发协调 | 依赖部署配置的跨实例锁与运行登记 | 进程内锁与运行登记 |
| 活动流恢复 | 配置恢复缓冲后重连读取,可跨 API 实例 | 主进程存活期间由内存 StreamBuffer 重放并继续实时传递 |
| 进程退出后的依据 | 已保存任务消息、状态与文件 | 本地 SQLite、任务消息与文件 |
| 取消传播 | 跨实例通知与本地取消信号 | 本地取消信号 |
| 外部副作用恢复 | 按工具核查或使用幂等机制 | 按工具核查或使用幂等机制 |