Files
BlueArchiveToolkit/infrastructure
nyaKazuhaandClaude Fable 5 01ea5d8fa5 feat(daemon): 任务执行器 + 异步 resource.sync/verify(阶段 1b)
在 daemon 里加入任务模型,让 resource.sync/verify 经 RPC 触发即返回 task_id、
可轮询进度与最终结果:

- 专用任务 worker 线程 + FIFO 队列(mpsc);TaskRegistry 句柄包住内存态注册表
  (HashMap,有界保留 64 条已结束任务,运行中/排队中不裁剪),方法访问便于将来
  换 Redis 等持久化后端。
- 进程内 sync 锁:watch 循环与 worker 在跑同步前都获取它,互相等待而非撞
  .official-sync.lock 文件锁失败;只在实际跑同步的那段持锁,空闲睡眠不持锁。
- resource.sync/resource.verify 入队返回 { task_id, kind }(envelope status=accepted);
  worker 复用 run_with_progress_and_cancellation(sync 用 daemon config + force;
  verify 用 dry-run+plan+audit),进度写入任务记录,should_cancel 接 daemon 停止标志
  (停机中止在途任务)。task.status/task.list 从注册表读真实数据。

验证:新增任务分发/入队/注册表单测(62 bin 测试全过);真机端到端确认经裸 socket
触发 resource.sync 返回 task_id、轮询 task.status 走到最终态(fake curl 失败→
failed 且记录 error)、task.list 可见、resource.verify 亦入队。满足 issue #1 验收
「至少一个同步任务可经 RPC 触发并经 task.status 查询进度和最终结果」。

任务仅存内存(随 daemon 生死);task.cancel/logs、错误码细分映射留待后续。

对应 issue #1(任务模型 + 最小方法集打通)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 05:23:24 -07:00
..
2026-07-12 23:04:13 +08:00