[Task][T04] 实现心跳与设备在线空闲状态 #6

Closed
opened 2026-08-14 14:24:38 +08:00 by ila · 3 comments
Owner

基本信息

要解决的问题

实现心跳和在线/离线/空闲/忙碌判定,为人工指定设备与空闲领取提供可信状态。

范围

实现心跳和在线/离线/空闲/忙碌判定,为人工指定设备与空闲领取提供可信状态。

明确不做

  • 不接入顺云宝、Shopee 或采购。
  • 不实现批量任务、规则发布流程、全局停机或实时屏幕。
  • 不保存原始控件树和截图,不使用 OCR/VLM。

验收标准

断网按阈值离线;currentTaskId 与任务状态一致;状态不依赖实时屏幕或 WebRTC。

验证方式

单元测试、接口/数据库约束测试;涉及 Android 行为时增加华为和一加真机验证。

参考文档

  • docs/03-business-rules-and-glossary.md
  • docs/07-mvp-requirements.md
  • docs/08-agent-api-contract.md

风险和回退

保持写接口幂等、任务输入快照不可变和设备串行;数据变化须提供兼容迁移或明确回退。

## 基本信息 - 上级 Epic: #1 - 所属 MVP: #2 - 任务编号: T04 - 前置依赖: #4、#5 - 原始需求确认: 2026-08-14 ## 要解决的问题 实现心跳和在线/离线/空闲/忙碌判定,为人工指定设备与空闲领取提供可信状态。 ## 范围 实现心跳和在线/离线/空闲/忙碌判定,为人工指定设备与空闲领取提供可信状态。 ## 明确不做 - 不接入顺云宝、Shopee 或采购。 - 不实现批量任务、规则发布流程、全局停机或实时屏幕。 - 不保存原始控件树和截图,不使用 OCR/VLM。 ## 验收标准 断网按阈值离线;currentTaskId 与任务状态一致;状态不依赖实时屏幕或 WebRTC。 ## 验证方式 单元测试、接口/数据库约束测试;涉及 Android 行为时增加华为和一加真机验证。 ## 参考文档 - docs/03-business-rules-and-glossary.md - docs/07-mvp-requirements.md - docs/08-agent-api-contract.md ## 风险和回退 保持写接口幂等、任务输入快照不可变和设备串行;数据变化须提供兼容迁移或明确回退。
ila changed title from [Task][T04] 实现心跳、在线状态与 WSS 通知通道 to [Task][T04] 实现心跳与设备在线空闲状态 2026-08-14 15:09:26 +08:00
Author
Owner

开始实施 T04。依赖 T02/T03 已完成并验证。

本工单只实现:Bearer Token 心跳认证、requestId 幂等、currentTaskId 与运行任务一致性、在线/离线阈值、空闲/忙碌派生,以及设备超时离线时将其 running 任务置为 DEVICE_OFFLINE 失败。不会接入屏幕、WebRTC 或任务领取。

开始实施 T04。依赖 T02/T03 已完成并验证。 本工单只实现:Bearer Token 心跳认证、requestId 幂等、currentTaskId 与运行任务一致性、在线/离线阈值、空闲/忙碌派生,以及设备超时离线时将其 running 任务置为 DEVICE_OFFLINE 失败。不会接入屏幕、WebRTC 或任务领取。
Author
Owner

T04 实现完成,保持开启等待用户验收。

实现:

  • POST /api/agent/v1/heartbeat 使用设备 Bearer Token 认证和 UUID requestId。
  • currentTaskId 必须与服务端该设备唯一 running 任务一致;否则返回 DEVICE_TASK_MISMATCH 且不推进心跳。
  • 响应返回服务端确认的 online/busy/currentTaskId、服务端时间和 15 秒间隔。
  • 相同 requestId 重放不重复推进心跳时间。
  • 默认 45 秒离线阈值、15 秒扫描;服务启动后针对每个数据库启动可取消的离线监控。
  • 超时设备标记 offline;其 running 任务原子转为 failed,清除租约和活动 guard,记录 DEVICE_OFFLINE,不自动重试或换机。
  • 增加心跳幂等字段兼容迁移并同步文档。

验证:

  • 正确/错误 Token、心跳重放、空闲/忙碌、currentTaskId 不一致、停用设备拒绝、超时离线和任务失败测试通过。
  • go test -race ./app/goauto/device:通过。
  • go test ./...:通过。
  • go build ./...:通过。

未实现任务领取、Android 保活或页面功能。

T04 实现完成,保持开启等待用户验收。 实现: - `POST /api/agent/v1/heartbeat` 使用设备 Bearer Token 认证和 UUID requestId。 - currentTaskId 必须与服务端该设备唯一 running 任务一致;否则返回 DEVICE_TASK_MISMATCH 且不推进心跳。 - 响应返回服务端确认的 online/busy/currentTaskId、服务端时间和 15 秒间隔。 - 相同 requestId 重放不重复推进心跳时间。 - 默认 45 秒离线阈值、15 秒扫描;服务启动后针对每个数据库启动可取消的离线监控。 - 超时设备标记 offline;其 running 任务原子转为 failed,清除租约和活动 guard,记录 DEVICE_OFFLINE,不自动重试或换机。 - 增加心跳幂等字段兼容迁移并同步文档。 验证: - 正确/错误 Token、心跳重放、空闲/忙碌、currentTaskId 不一致、停用设备拒绝、超时离线和任务失败测试通过。 - `go test -race ./app/goauto/device`:通过。 - `go test ./...`:通过。 - `go build ./...`:通过。 未实现任务领取、Android 保活或页面功能。
Author
Owner

用户已于 2026-08-15 明确验收通过,现关闭工单。

用户已于 2026-08-15 明确验收通过,现关闭工单。
ila closed this issue 2026-08-15 08:58:27 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#6