From 65c384934038125576eba2adab2ea7abc50c0449 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Wed, 3 Jun 2026 09:04:14 +0800 Subject: [PATCH] auto-sync: 2026-06-03 09:04:14 --- src/daemon/dispatcher.py | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/daemon/dispatcher.py b/src/daemon/dispatcher.py index 6b29b4f..875aefe 100644 --- a/src/daemon/dispatcher.py +++ b/src/daemon/dispatcher.py @@ -242,10 +242,38 @@ class Dispatcher: _dispatcher._rollback_current_agent(_task_db, _task_id, aid) if _is_review: - # review: 正常完成标 done,crash/error 保持 review 等 ticker 处理 if _task_db and outcome in ("completed", "session_revived"): - _dispatcher._mark_task_status(_task_db, _task_id, "done") - logger.info("Task %s: review complete (%s), marking done", _task_id, outcome) + # #09: 读 verdict 决定后续动作 + conn = get_connection(_task_db) + try: + review = conn.execute( + "SELECT verdict FROM reviews WHERE task_id=? ORDER BY created_at DESC LIMIT 1", + (_task_id,) + ).fetchone() + finally: + conn.close() + + if review and review["verdict"] == "approved": + _dispatcher._mark_task_status(_task_db, _task_id, "done") + logger.info("Task %s: review approved, marking done", _task_id) + else: + # 非 approved → @mention 被审 agent(assignee,非 current_agent) + verdict_str = review["verdict"] if review else "未知" + conn2 = get_connection(_task_db) + try: + task_row = conn2.execute("SELECT assignee FROM tasks WHERE id=?", (_task_id,)).fetchone() + finally: + conn2.close() + + if task_row and task_row["assignee"]: + from src.blackboard.blackboard import Blackboard + bb = Blackboard(_task_db) + bb.add_comment(_task_id, "daemon", + f"@{task_row['assignee']} 审查结论: {verdict_str},请查看详情并决定接受或反驳", + comment_type="review") + logger.info("Task %s: review verdict=%s, notified assignee=%s", + _task_id, verdict_str, task_row["assignee"] if task_row else "?") + # 不标 done,保持 review 状态 else: logger.warning("Task %s: review agent %s (%s), NOT marking done", _task_id, aid, outcome) else: