You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
2.1 KiB
39 lines
2.1 KiB
# 12:任务取消、超时与重试
|
|
|
|
## 目标
|
|
|
|
让总控对单 Agent 任务拥有最小、可审计的控制闭环:下发时设定超时;执行中可以取消;失败、取消或超时后可以创建一次新的尝试。原始任务记录始终保留。
|
|
|
|
## 已实现
|
|
|
|
1. `task_runs` 增加 `deadline_at`、`timeout_seconds`、`attempt` 与 `retry_of` 字段;旧数据库通过增量迁移保持可打开。
|
|
2. 下发的 `task_dispatch` 携带 ISO 8601 的“无进展截止时间”和尝试次数。Agent 回传 `accepted` 或 `running` 等有效进展后,总控会以该任务的超时窗口重新计算截止时间。
|
|
3. 总控在界面轮询快照/任务列表时检查连续无进展的任务:将状态置为 `timed_out`、保存事件,并向已连接的 Agent 发送 `task_cancel`。
|
|
4. 新任务默认使用 5 分钟无进展超时;任务页可选择 5、15、30 分钟或 1 小时。活动任务可取消。
|
|
5. 只有 `failed`、`cancelled`、`timed_out` 的任务显示“重试”。重试会生成新的任务 ID 和新的尝试次数,并以 `retry_of` 指回原始任务,绝不覆写旧记录。
|
|
|
|
## 协议约定
|
|
|
|
取消消息:
|
|
|
|
```json
|
|
{
|
|
"type": "task_cancel",
|
|
"schema_version": 1,
|
|
"task_id": "...",
|
|
"reason": "由总控取消"
|
|
}
|
|
```
|
|
|
|
Agent 必须以普通 `task_event` 回报最终状态 `cancelled` 或 `timed_out`;总控不把“取消指令已发出”误当作 Agent 已停止。
|
|
|
|
## 验收
|
|
|
|
1. 下发任务后确认 Agent 回传“已接收”或“执行中”,任务详情中的“下次无进展超时”应向后刷新。
|
|
2. 在演示任务的执行窗口内点击“取消”,任务应最终显示“已取消”。
|
|
3. 对已取消或已超时任务点击“重试”,列表应出现新的任务 ID 与“第 2 次”,旧记录仍存在。
|
|
4. 已完成任务不应提供重试操作。
|
|
|
|
## 当前边界与下一步
|
|
|
|
当前 Agent 在连接中断时只在内存中暂存待发送事件;进程重启后的事件补传、任务幂等恢复和断线重连回放尚未实现。这些属于下一阶段的可靠性工作,不能作为本步骤已完成的能力对外承诺。
|
|
|