auto-sync: 2026-06-03 09:00:09
This commit is contained in:
@@ -123,41 +123,82 @@ Agent 完成任务 → review
|
||||
|
||||
| 文件 | 改动 | 说明 |
|
||||
|------|------|------|
|
||||
| `ticker.py` `_handle_review_conclusion` | 修改 | verdict 非 approved 时 @mention 被审 agent |
|
||||
| `dispatcher.py` `_task_on_complete` | 修改 | review completed → 读 verdict → approved 标 done / 非 approved @mention assignee |
|
||||
| `ticker.py` `_process_mentions` | 修改 | rebuttal mention spawn 时带 `_review_on_complete` 回调 |
|
||||
| `prompt_templates/executor.md` | 修改 | 加入“需求不清晰时 @pangtong-fujunshi 提问” |
|
||||
| `prompt_templates/reviewer.md` | 修改 | 加入 rebuttal 流程指引 |
|
||||
| `prompt_templates/executor.md` | 修改 | 加入"需求不清晰时 @pangtong-fujunshi 提问" |
|
||||
| `prompt_templates/review_pangtong.md` | 修改 | 加入仲裁指引 + 目标一致性检查 |
|
||||
| `prompt_templates/review_simayi.md` | 修改 | 加入 rebuttal 处理指引 |
|
||||
|
||||
#### _handle_review_conclusion 改动细节
|
||||
#### _task_on_complete 改动细节(dispatcher.py)
|
||||
|
||||
当前逻辑:
|
||||
当前逻辑(L244-250):review completed → 直接标 done。
|
||||
|
||||
改为:
|
||||
```python
|
||||
if is_achieved:
|
||||
# GOAL_ACHIEVED → done
|
||||
if _is_review:
|
||||
if outcome in ("completed", "session_revived"):
|
||||
# 读 verdict
|
||||
review = conn.execute(
|
||||
"SELECT verdict FROM reviews WHERE task_id=? ORDER BY created_at DESC LIMIT 1",
|
||||
(_task_id,)
|
||||
).fetchone()
|
||||
if review and review["verdict"] == "approved":
|
||||
_dispatcher._mark_task_status(_task_db, _task_id, "done")
|
||||
else:
|
||||
# 非 approved → @mention 被审 agent(用 assignee,非 current_agent)
|
||||
task = conn.execute("SELECT assignee FROM tasks WHERE id=?", (_task_id,)).fetchone()
|
||||
if task and task["assignee"]:
|
||||
bb.add_comment(_task_id, "daemon",
|
||||
f"@{task['assignee']} 审查结论: {review['verdict'] if review else '未知'},请查看详情并决定接受或反驳",
|
||||
comment_type="review")
|
||||
# 不标 done,保持 review
|
||||
else:
|
||||
# crash/error → 保持 review 等 ticker 处理
|
||||
pass
|
||||
```
|
||||
|
||||
#### _process_mentions 改动细节(ticker.py)
|
||||
|
||||
当前 mention spawn 不带 on_complete。rebuttal 场景需要带,否则新 verdict 无人处理。
|
||||
|
||||
触发条件:task status=review + mention 的 comment_type 包含 rebuttal
|
||||
|
||||
```python
|
||||
# 在 mention spawn 时检查:如果是 rebuttal 场景
|
||||
has_rebuttal = any(
|
||||
item.get("comment_type") == "rebuttal"
|
||||
for item in items
|
||||
)
|
||||
task_status = bb.get_task(items[0]["task_id"]).status if items else None
|
||||
|
||||
if has_rebuttal and task_status == "review":
|
||||
# rebuttal 重审:带 on_complete 回调处理新 verdict
|
||||
result = await self.spawner.spawn_full_agent(
|
||||
agent_id=agent_id,
|
||||
message=prompt,
|
||||
task_id=tid,
|
||||
use_main_session=True,
|
||||
on_complete=_review_on_complete, # 处理新 verdict
|
||||
)
|
||||
else:
|
||||
# continue → working
|
||||
# 普通 mention:不带回调
|
||||
result = await self.spawner.spawn_full_agent(
|
||||
agent_id=agent_id,
|
||||
message=prompt,
|
||||
task_id=tid,
|
||||
use_main_session=True,
|
||||
)
|
||||
```
|
||||
|
||||
这是庞统 round review 的处理。需要区分两个场景:
|
||||
1. **庞统 round review**(现有)— 检查全局目标
|
||||
2. **司马懿 code review**(新增)— verdict 非 approved 时通知 agent
|
||||
|
||||
对于场景 2,不在 `_handle_review_conclusion` 里处理(那是庞统 round review 的回调),而是在 dispatcher 的 review task dispatch 流程中:
|
||||
|
||||
```
|
||||
review task → spawn 司马懿 → 司马懿完成 → classify outcome
|
||||
→ verdict 写入 reviews 表
|
||||
→ 如果 verdict != approved → 写 comment @被审agent 通知
|
||||
→ 被审 agent 自主决定接受或反驳
|
||||
```
|
||||
|
||||
**实现位置**:dispatcher 中 review task 的 on_complete 回调。
|
||||
其中 `_review_on_complete` 复用 dispatcher 中 review verdict 的处理逻辑(读 verdict → approved 标 done / 非 approved @mention)。
|
||||
|
||||
#### 防止无限循环
|
||||
|
||||
- RebuttalManager.MAX_ROUNDS = 2(已有)
|
||||
- RebuttalManager.MAX_ROUNDS = 2(已有,rebuttal round 1 司马懿重审 + round 2 庞统仲裁)
|
||||
- 超过 2 轮 → 庞统最终裁决
|
||||
- 每个 review 记录在 reviews 表中,rebuttal_count 可追溯
|
||||
- `_dispatch_reviews` 已有 `if reviews: continue` 保护,有 review 结论的任务不会被重复 dispatch
|
||||
|
||||
### 2.2 目标一致性 Gate
|
||||
|
||||
|
||||
Reference in New Issue
Block a user