Define repository and feature-scoped documentation rules for PRDs, User Stories, logic, UI, technical design, and progress evidence. Move feature-owned documents under docs/features, add one entry point per feature, remove the redundant docs index, and update all affected cross-references. Expand the local tool environment design with explicit product, story, logic, UI, technical, and progress documents.
3.3 KiB
3.3 KiB
Job 与 Subjob PRD
文档信息
| 项目 | 内容 |
|---|---|
| 状态 | 设计中,未来能力 |
| 版本 | 0.1 |
| 日期 | 2026-08-19 |
| 依赖 | Task 与 Job 统一领域模型 |
1. 目标
在不创建额外顶层 Task 或 Conversation 的前提下,让一个 Task 能够分解、串行、并行和委派 多个执行单元,并将进展和结果有序汇入 Task 的同一 Conversation。
2. Job 类型
首期只使用有限类型:
step:Task 内一个明确步骤。scheduled_occurrence:Scheduled Task 的一次到期执行。delegated:交给 Subagent 或远程执行器。parallel_branch:并行方案或分工。aggregation:汇总多个前置 Job。
类型描述执行方式,不创造新的产品对象层级。
3. 并行模型
关联 Conversation
└─ Coordinating Job
├─ Parallel Job A
├─ Parallel Job B
├─ Parallel Job C
└─ Aggregation Job
- 并行 Job 使用同一个
taskId和conversationId。 - 每个 Job 有独立输入快照、状态、Run、预算和输出缓冲。
- 并行 Job 不直接同时追加助手消息。
- Aggregation Job 或 Task 协调器按确定顺序生成一条进展或结果消息。
- 用户可以按 Task 查看有界活动和聚合状态,但不选择或展开单个 Job;主 Conversation 保持可读。
4. Subjob
Job 可以创建有界 Subjob:
- 默认最大深度 2。
- 默认最大并发 3。
- 默认最大子项数、模型调用、Token、耗时和输出大小由父 Job 预算限制。
- 子级只能使用父级已授权能力的子集。
- 父级取消、失败或超时后,活动子级必须取消。
5. Subagent
Subagent 是 Job 的执行者:
- 专家选择和路由记录在 Job 上。
- Subagent 的原始流式输出进入有界 Job 缓冲和活动记录。
- 完成、失败和部分输出都返回父 Job。
- Subagent 不获得独立 Task Center 条目或 Conversation。
6. 状态与恢复
Job 状态至少包括:
queued → running → waiting_approval → completed
↘ failed | cancelled | interrupted | budget_exceeded
- 重试创建新 Run,不覆盖失败 Run。
- 应用退出将活动 Job 标记为
interrupted。 - 有外部副作用且结果未知的 Job 不自动重试。
- 聚合 Job 必须明确处理部分成功、全部失败和取消。
7. 界面
当前产品 UI 的对象层级止于 Task,不提供 Job/Subjob 树、独立页面或导航入口。
关联 Conversation 和 Task Center 只显示:
- 当前总体进展。
- 并行执行数量和聚合状态。
- 需要审批或用户输入的 Task 状态。
- 完成后的统一结果。
活动与 Runtime 可以按 Task 显示执行者、工具、耗时、预算、错误、审批和成果事件,但不把 Job、Subjob 或 Run 暴露为可选择、可展开或可操作的产品对象。内部标识只用于关联与审计。
8. 验收标准
- 并行 Job 通过所属 Task 写入同一关联 Conversation。
- Job 不创建顶层 Task。
- 并行输出不会无序污染消息时间线。
- Subjob 深度、并发、预算和输出有界。
- Subagent 失败能够返回部分输出和明确状态。
- 父级取消传播到所有活动子级。
- 当前 UI 只展示到 Task,不显示 Job/Subjob/Run 层级。