|
@@ -26,6 +26,16 @@ Recursive 任务协议把本地父子 Agent 协作约束为:
|
|
|
|
|
|
|
|
## 协议数据
|
|
## 协议数据
|
|
|
|
|
|
|
|
|
|
+### RootTaskAnchor:根任务锚点
|
|
|
|
|
+
|
|
|
|
|
+| 字段 | 类型 | 规则 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| `objective` | `string` | 必填,整棵任务树的根目标 |
|
|
|
|
|
+| `completion_criteria` | `string[]` | 必填且至少一项,也是根 Validator 的完成标准 |
|
|
|
|
|
+| `constraints` | `string[]` | 根级硬约束,自动进入每层 TaskBrief |
|
|
|
|
|
+
|
|
|
|
|
+新建 Recursive 根 Trace 必须通过 `RunConfig.root_task_anchor` 或 REST `root_task_anchor` 提供。框架固化规范化内容和哈希,后代只读取根 Trace 权威副本;规范化后最多 4,000 字符。
|
|
|
|
|
+
|
|
|
### TaskBrief:父级下发的任务说明
|
|
### TaskBrief:父级下发的任务说明
|
|
|
|
|
|
|
|
| 字段 | 类型 | 规则 |
|
|
| 字段 | 类型 | 规则 |
|
|
@@ -37,8 +47,9 @@ Recursive 任务协议把本地父子 Agent 协作约束为:
|
|
|
| `parent_findings` | `string[]` | 父级已确认的发现,默认为空 |
|
|
| `parent_findings` | `string[]` | 父级已确认的发现,默认为空 |
|
|
|
| `context` | `object` | 与本任务直接相关的显式上下文 |
|
|
| `context` | `object` | 与本任务直接相关的显式上下文 |
|
|
|
| `constraints` | `string[]` | 硬约束;自动继承父 TaskBrief 的约束,子级只能增加 |
|
|
| `constraints` | `string[]` | 硬约束;自动继承父 TaskBrief 的约束,子级只能增加 |
|
|
|
|
|
+| `context_refs` | `ContextRef[]` | 当前父 Trace 已授权且明确转授的 `ref_id/version` |
|
|
|
|
|
|
|
|
-TaskBrief 会去重、检查 JSON 可序列化性,规范化后最多 16,000 字符。Recursive 本地 `agent()` 使用 `task_brief`,不接受 `messages`。
|
|
|
|
|
|
|
+TaskBrief 会去重、检查 JSON 可序列化性,规范化后最多 16,000 字符,并保存当前版本与历史版本。Recursive 本地 `agent()` 使用 `task_brief`,不接受 `messages`。
|
|
|
|
|
|
|
|
### TaskReport:子级提交的执行报告
|
|
### TaskReport:子级提交的执行报告
|
|
|
|
|
|
|
@@ -98,8 +109,8 @@ pending → in_progress → waiting_children → pending_review
|
|
|
1. 父 Agent 调用 `agent(task_brief=...)` 后,原 Goal 进入 `waiting_children`。
|
|
1. 父 Agent 调用 `agent(task_brief=...)` 后,原 Goal 进入 `waiting_children`。
|
|
|
2. 子 Agent 必须先审核完自己的孩子、执行完已批准 action,再调用 `submit_task_report`。
|
|
2. 子 Agent 必须先审核完自己的孩子、执行完已批准 action,再调用 `submit_task_report`。
|
|
|
3. 子报告经 Validator 处理后,父 Goal 进入 `pending_review`。
|
|
3. 子报告经 Validator 处理后,父 Goal 进入 `pending_review`。
|
|
|
-4. `pending_review` 期间运行时只暴露 `review_task_result`,Goal 工具也拒绝新增、完成、放弃或切换。
|
|
|
|
|
-5. 审核产生 next action 后,运行时只暴露 `agent`,且实际 TaskBrief 必须与批准内容规范化后完全一致。
|
|
|
|
|
|
|
+4. `pending_review` 期间运行时只暴露 `review_task_result` 和可用时的 `read_context_ref`,Goal 工具也拒绝新增、完成、放弃或切换。
|
|
|
|
|
+5. 审核产生 next action 后,运行时只暴露 `agent` 和可用时的 `read_context_ref`,且实际 TaskBrief 必须与批准内容规范化后完全一致。
|
|
|
|
|
|
|
|
Recursive 禁止 GoalTree 自动切换下一个 pending sibling,也禁止所有孩子完成时级联完成父 Goal。父 Agent 必须在审核后自己决定。
|
|
Recursive 禁止 GoalTree 自动切换下一个 pending sibling,也禁止所有孩子完成时级联完成父 Goal。父 Agent 必须在审核后自己决定。
|
|
|
|
|
|
|
@@ -174,11 +185,13 @@ Validator Trace 的约束:
|
|
|
|
|
|
|
|
Validator 输入由框架从 TaskBrief、TaskReport、完成标准、预期产出、持久化主路径消息和真实 Tool Result 组装。固定协议字段优先保留,轨迹按最新消息优先裁剪,整体最多 50,000 字符;不包含侧分支和持久化的 `reasoning_content`。
|
|
Validator 输入由框架从 TaskBrief、TaskReport、完成标准、预期产出、持久化主路径消息和真实 Tool Result 组装。固定协议字段优先保留,轨迹按最新消息优先裁剪,整体最多 50,000 字符;不包含侧分支和持久化的 `reasoning_content`。
|
|
|
|
|
|
|
|
|
|
+RootTaskAnchor 也作为固定字段进入验收包。Validator 不会自动展开 ContextRef;只有业务 Agent 实际读取过的快照才会以 Tool Result 进入轨迹。
|
|
|
|
|
+
|
|
|
Validator 默认继承被验收 Agent 的模型,可用 `AGENT_VALIDATOR_MODEL` 覆盖。模型输出非法、返回错误 scope、尝试调用工具或调用异常时,直接生成 `outcome=error`,不再发起格式修正调用。
|
|
Validator 默认继承被验收 Agent 的模型,可用 `AGENT_VALIDATOR_MODEL` 覆盖。模型输出非法、返回错误 scope、尝试调用工具或调用异常时,直接生成 `outcome=error`,不再发起格式修正调用。
|
|
|
|
|
|
|
|
### 根任务完成门禁
|
|
### 根任务完成门禁
|
|
|
|
|
|
|
|
-新建 Recursive 根 Trace 必须显式提供 `root_completion_criteria`。根 Agent 生成无 Tool Call 的候选答案时,框架使用根标准、候选答案和持久化主路径运行 `scope=root` 的 Validator:
|
|
|
|
|
|
|
+新建 Recursive 根 Trace 必须显式提供 `root_task_anchor`。根 Agent 生成无 Tool Call 的候选答案时,框架使用 Anchor 中的根标准、候选答案和持久化主路径运行 `scope=root` 的 Validator:
|
|
|
|
|
|
|
|
- 通过:根 Trace 才可写为 `completed`。
|
|
- 通过:根 Trace 才可写为 `completed`。
|
|
|
- 第一次未通过或 Validator 错误:将框架生成的 ValidationResult 追加到根消息,允许修正一次。
|
|
- 第一次未通过或 Validator 错误:将框架生成的 ValidationResult 追加到根消息,允许修正一次。
|
|
@@ -205,6 +218,7 @@ Validator 默认继承被验收 Agent 的模型,可用 `AGENT_VALIDATOR_MODEL`
|
|
|
|
|
|
|
|
```text
|
|
```text
|
|
|
task_brief
|
|
task_brief
|
|
|
|
|
+task_brief_version / task_brief_history
|
|
|
task_report
|
|
task_report
|
|
|
task_report_submitted_at_sequence
|
|
task_report_submitted_at_sequence
|
|
|
task_report_validation
|
|
task_report_validation
|
|
@@ -219,6 +233,8 @@ root_validation_passed
|
|
|
protocol_correction_attempts
|
|
protocol_correction_attempts
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
|
+`Trace.context.context_access` 另存当前 Trace 被授权的不可变快照与字符用量;该目录不并入 `task_protocol`。引用的生成、转授、读取和限额见 [Context 管理](./context-management.md#contextref可逐层转授的完整协议引用)。
|
|
|
|
|
+
|
|
|
`pending_reviews` 的每一项同时保存 TaskReport、ValidationResult、原 Goal ID 和接收 sequence。GoalTree 不是这些协议事实的权威存储。
|
|
`pending_reviews` 的每一项同时保存 TaskReport、ValidationResult、原 Goal ID 和接收 sequence。GoalTree 不是这些协议事实的权威存储。
|
|
|
|
|
|
|
|
---
|
|
---
|
|
@@ -228,7 +244,8 @@ protocol_correction_attempts
|
|
|
| 内容 | 位置 |
|
|
| 内容 | 位置 |
|
|
|
|------|------|
|
|
|------|------|
|
|
|
| 数据模型和协议状态 | `cyber_agent/core/task_protocol.py` |
|
|
| 数据模型和协议状态 | `cyber_agent/core/task_protocol.py` |
|
|
|
-| TaskBrief 规范化与约束继承 | `cyber_agent/core/context_policy.py` |
|
|
|
|
|
|
|
+| RootTaskAnchor、TaskBrief 版本与 ContextRef | `cyber_agent/core/context_policy.py` |
|
|
|
|
|
+| `read_context_ref` | `cyber_agent/tools/builtin/context.py` |
|
|
|
| `submit_task_report` / `review_task_result` | `cyber_agent/tools/builtin/task_protocol.py` |
|
|
| `submit_task_report` / `review_task_result` | `cyber_agent/tools/builtin/task_protocol.py` |
|
|
|
| Validator、ValidationResult 和输入裁剪 | `cyber_agent/core/validation.py` |
|
|
| Validator、ValidationResult 和输入裁剪 | `cyber_agent/core/validation.py` |
|
|
|
| 运行时门禁、根 Validator、回溯恢复 | `cyber_agent/core/runner.py` |
|
|
| 运行时门禁、根 Validator、回溯恢复 | `cyber_agent/core/runner.py` |
|