OH08: 后台任务 OpenHarness · 对标 S08
与 S08 同主题:长耗时 Shell 或子 Agent 不应阻塞主会话 turn;需要登记任务、拉取输出、停止与列表——与课内 Task 工具叙事对齐。
上游:HKUDS/OpenHarness · 本仓库快照:reference/rererence_harness/OpenHarness/ · 路径亦见 专题映射表。
course-s08)。🎯 关键路径(读什么)
在 src/openharness/ 下优先打开:
tasks/manager.py:BackgroundTaskManager、get_task_manager。tasks/types.py:TaskRecord、状态枚举。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。
⚖️ 与课内叙事对照
| 维度 | 课内 S08 | OpenHarness |
|---|---|---|
| 生命周期 | 课内 Task 状态机 | TaskStatus 与 stop 语义 |
| 发现性 | TaskList | task_list 工具与 registry |
| 与 agent_tool | 子 Agent 任务 | 可并存:一个偏后台进程表,一个偏委派。 |
🤔 思考题
- 任务完成后,manager 是否自动清理 record?不清理会导致什么?
task_output阻塞等待时会不会卡住整个模型 turn?- 若要在权限层禁止
task_create,应改 checker 还是改 tool?
📎 延伸阅读
OH01–12 目录 · OH07 · OH09 · S08 · D08