首页/OpenHarness 源码课/OH08: 后台任务

OH08: 后台任务 OpenHarness · 对标 S08

S08 同主题:长耗时 Shell 或子 Agent 不应阻塞主会话 turn;需要登记任务、拉取输出、停止与列表——与课内 Task 工具叙事对齐。

上游:HKUDS/OpenHarness · 本仓库快照:reference/rererence_harness/OpenHarness/ · 路径亦见 专题映射表

与 S08 站内导图对齐course-s08)。

🎯 关键路径(读什么)

src/openharness/ 下优先打开:

  • tasks/manager.pyBackgroundTaskManagerget_task_manager
  • tasks/types.pyTaskRecord、状态枚举。
  • tools/task_*_tool.py:create / list / get / stop / output / update。

🔍 源码导读

与主 Loop 的并发

任务通常在 asyncio 或子进程后台跑;主 run_query 仍按 turn 推进,用户通过 tool 拉 task_output。读 manager 内锁与字典结构可理解「为何需要 task id」。

UI 侧

ui/backend_host.py import get_task_manager 做状态展示——说明任务系统不仅服务纯终端 TUI。

⚖️ 与课内叙事对照

维度课内 S08OpenHarness
生命周期课内 Task 状态机TaskStatus 与 stop 语义
发现性TaskListtask_list 工具与 registry
与 agent_tool子 Agent 任务可并存:一个偏后台进程表,一个偏委派。

🤔 思考题

  1. 任务完成后,manager 是否自动清理 record?不清理会导致什么?
  2. task_output 阻塞等待时会不会卡住整个模型 turn?
  3. 若要在权限层禁止 task_create,应改 checker 还是改 tool?

📎 延伸阅读

OH01–12 目录 · OH07 · OH09 · S08 · D08