05. Task 框架与后台任务
CC Learn Docs
05. Task 框架与后台任务
范围
src/Task.tssrc/tasks.tssrc/tasks/types.tssrc/tasks/LocalShellTask/LocalShellTask.tsxsrc/tasks/LocalAgentTask/LocalAgentTask.tsxsrc/tasks/RemoteAgentTask/RemoteAgentTask.tsxsrc/tasks/DreamTask/DreamTask.ts
1) Task 模型
Task.ts 定义统一任务域:
TaskType: local_bash / local_agent / remote_agent / in_process_teammate / local_workflow / monitor_mcp / dreamTaskStatus: pending/running/completed/failed/killedTaskStateBase: 统一字段(id、outputFile、offset、notified、start/endTime)
任务 ID 有前缀分型(b/a/r/t/w/m/d),便于日志与 UI 快速识别。
2) 调度与注册
tasks.ts 通过 getAllTasks() 按 feature gate 组装任务实现,和 tools.ts 思路一致。
任务状态存放在 AppState.tasks,由 registerTask/updateTaskState 等框架函数集中管理。
3) 任务生命周期图
stateDiagram-v2
[*] --> pending
pending --> running: spawn/register
running --> completed: 正常结束
running --> failed: 执行错误
running --> killed: 用户或系统中止
completed --> [*]
failed --> [*]
killed --> [*]
4) LocalShellTask
核心特点:
- ShellCommand + TaskOutput 结合,后台执行与输出落盘。
- 启动 stall watchdog:检测“输出停滞 + 疑似交互提示”并向主队列发通知。
- 完成后统一发 task-notification(带 task_id/status/output_file)。
5) LocalAgentTask
核心特点:
- 代表本地子代理任务(Agent tool 派生)。
- 维护 progress tracker(toolUseCount/tokenCount/recentActivities)。
- 支持 foreground/background 切换、retain 机制、盘上 transcript 补载。
6) RemoteAgentTask
核心特点:
- 远程 session 轮询(
pollRemoteSessionEvents)并解析状态。 - sidecar metadata 持久化,支持 resume 后恢复远程任务追踪。
- 特化场景(ultraplan/ultrareview/autofix-pr)有独立通知与完成判定路径。
7) DreamTask
这是“UI可见化的自动记忆整理子任务”:
- 状态轻量,但会记录 phase/filesTouched/turns。
- 主要用于让后台 memory consolidation 对用户可见。
8) 值得学习的点
- TaskOutput 文件路径统一,让长任务输出消费与恢复更稳定。
- 通知机制通过队列回灌,避免任务线程直接操作主会话消息。
- 远程任务恢复(metadata sidecar)是典型“最终一致性”工程写法。
9) 风险点
- LocalAgent/RemoteAgent 任务状态字段繁多,状态转换必须严格约束。
- 任务通知 XML-like tag 协议依赖较强,需保持兼容。
10) 证据文件
src/Task.tssrc/tasks.tssrc/tasks/LocalShellTask/LocalShellTask.tsxsrc/tasks/LocalAgentTask/LocalAgentTask.tsxsrc/tasks/RemoteAgentTask/RemoteAgentTask.tsxsrc/tasks/DreamTask/DreamTask.ts