diff --git a/src/daemon/inbox.py b/src/daemon/inbox.py index 44070e8..249da12 100644 --- a/src/daemon/inbox.py +++ b/src/daemon/inbox.py @@ -251,29 +251,15 @@ async def default_inbox_callback( conn.close() elif event_type == "agent_status": - # Agent 状态变更 → 更新 tasks 表 + # Agent 状态变更 → 通过 Blackboard 状态机校验 new_status = event.get("status") if new_status and task_id: - conn = get_connection(db_path) - try: - conn.execute("BEGIN IMMEDIATE") - row = conn.execute( - "SELECT status FROM tasks WHERE id=?", (task_id,) - ).fetchone() - if row: - old = row["status"] - conn.execute( - "UPDATE tasks SET status=?, updated_at=datetime('now') WHERE id=?", - (new_status, task_id), - ) - conn.execute( - "INSERT INTO events (task_id, agent, event_type, detail) VALUES (?,?,?,?)", - (task_id, agent, f"task_{new_status}", - json.dumps({"from": old, "to": new_status})), - ) - conn.commit() - finally: - conn.close() + from src.blackboard.operations import Blackboard + bb = Blackboard(db_path) + ok = bb.update_task_status(task_id, new_status, agent=agent) + if not ok: + logger.warning("Inbox: invalid status transition to '%s' for task %s", + new_status, task_id) elif event_type == "agent_claim": # Agent 认领任务