diff --git a/src/daemon/ticker.py b/src/daemon/ticker.py index fe57259..6a75264 100644 --- a/src/daemon/ticker.py +++ b/src/daemon/ticker.py @@ -1134,19 +1134,6 @@ Parent Task ID: {parent_task.id} except Exception: logger.exception("Broadcast spawn failed for %s", agent_id) - # 检查是否可以结束轮次:所有 Agent 都已通知且全部反馈 - all_agent_ids = set(self._get_all_agent_ids()) - for t in broadcastable: - tracker = self._broadcast_tracker[t.id] - unnotified = all_agent_ids - tracker.notified_agents - if not unnotified and tracker.responded_agents == tracker.notified_agents: - # 一轮结束 - tracker.round_number += 1 - tracker.notified_agents.clear() - tracker.responded_agents.clear() - logger.info("Broadcast round %d completed for task %s (no taker)", - tracker.round_number, t.id) - return spawned def _build_claim_prompt(self, agent_id: str, tasks: list, @@ -1230,6 +1217,14 @@ Parent Task ID: {parent_task.id} self._broadcast_tracker.pop(task_id, None) else: tracker.responded_agents.add(agent_id) + # 异步轮次结束检测:所有已通知的 Agent 都已反馈 + if tracker.notified_agents and tracker.responded_agents >= tracker.notified_agents: + # 一轮结束 + tracker.round_number += 1 + tracker.notified_agents.clear() + tracker.responded_agents.clear() + logger.info("Broadcast round %d completed for task %s (async callback, no taker)", + tracker.round_number, task_id) def _get_all_agent_ids(self) -> List[str]: """获取所有配置的 Agent ID"""