diff --git a/src/daemon/spawner.py b/src/daemon/spawner.py index 6765740..62fa7d6 100644 --- a/src/daemon/spawner.py +++ b/src/daemon/spawner.py @@ -573,7 +573,8 @@ curl -X POST http://{self.api_host}:{self.api_port}/api/projects/{project_id}/ta stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) - self._register_session(session_id, agent_id, task_id, proc.pid) + self._register_session(session_id, agent_id, task_id, proc.pid, + broadcast_task_ids=broadcast_task_ids) logger.info("Spawned agent %s (session=%s, pid=%d)", agent_id, session_id, proc.pid) @@ -759,7 +760,14 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_ agent_id, session_id, outcome, exit_code, task_status) # 广播反馈追踪(Phase 1 bug fix) - if task_id and task_id != "broadcast" and hasattr(self, '_ticker') and self._ticker: + if task_id == "broadcast" and hasattr(self, '_ticker') and self._ticker: + # 广播任务:从 session 信息取真实 task_id 列表,逐一回调 tracker + sess_info = self._sessions.get(session_id or "main", {}) + bt_ids = sess_info.get("broadcast_task_ids") or [] + outcome_str = "claimed" if cls.get("status") == "ok" else "no_reply" + for real_task_id in bt_ids: + self._ticker.record_broadcast_response(real_task_id, agent_id, outcome_str) + elif task_id and hasattr(self, '_ticker') and self._ticker: outcome_str = "claimed" if cls.get("status") == "ok" else "no_reply" self._ticker.record_broadcast_response(task_id, agent_id, outcome_str)