# 10:任务取消、超时与重试 ## 目标 让子 Agent 能够执行总控的最小控制协议:收到带截止时间的任务后进入生命周期;收到取消指令或达到截止时间后停止本地演示执行器并回报终态。 ## 已实现 1. `task_dispatch` 接收无进展截止时间 `deadline_at`,并传给本地任务执行器;进入“执行中”阶段会使用同一窗口重新开始本地无进展计时。 2. 新增 `task_cancel` 消息处理,携带任务 ID 与取消原因。 3. 本地执行器对每项任务维护开始、完成和截止时间计时器;取消或超时会停止其余计时器,防止稍后错误回报“已完成”。 4. 取消回报状态为 `cancelled`,连续无进展达到截止时间的回报状态为 `timed_out`。 5. 演示执行器保留约 1.5 秒可见执行窗口,便于实际验证取消与超时;它仍不执行模型、Shell、浏览器或本机工具。 ## 状态规则 `accepted → running → completed` 是正常路径;`accepted/running → cancelled` 和 `accepted/running → timed_out` 是终止路径。终态任务不会再次启动或完成。 ## 验收 1. 总控下发 1 秒超时测试任务,Agent 应回报 `timed_out`。 2. 总控在任务运行中发送取消,Agent 应回报 `cancelled`,且不再回报 `completed`。 3. 重试由总控创建新的任务 ID;Agent 应把它视为独立任务正常执行。 4. 自动化测试同时覆盖取消与过期截止时间。 ## 当前边界与下一步 待发送任务事件目前只驻留在进程内存:如果 Agent 在断线期间退出,尚未回传的事件不会在下次启动时自动补传。下一阶段将把事件外盒(outbox)、确认序号和重连回放落到本地数据库。