diff --git a/modules/sub_agent/manager.py b/modules/sub_agent/manager.py index 865912c..082d8ed 100644 --- a/modules/sub_agent/manager.py +++ b/modules/sub_agent/manager.py @@ -264,11 +264,16 @@ class SubAgentManager(SubAgentStateMixin, SubAgentStatsMixin, SubAgentCreationMi return {"success": False, "status": task.get("status"), "message": "子智能体已结束。"} real_task_id = task["task_id"] - running_task = self._running_tasks.get(real_task_id) deadline = time.time() + (timeout_seconds or task.get("timeout_seconds") or SUB_AGENT_DEFAULT_TIMEOUT) while time.time() < deadline: self.reconcile_task_states() + # 关键:其他线程(如前端轮询 /api/sub_agents)可能调用 _load_state() + # 并替换 self.tasks 字典,导致旧 task 引用失效。每次循环重新获取引用。 + task = self.tasks.get(real_task_id) + if not task: + return {"success": False, "error": "未找到对应的子智能体任务"} + running_task = self._running_tasks.get(real_task_id) status = task.get("status") # 已到达终态:返回最终结果(持续 reconcile 直到 final_result 就绪) @@ -278,6 +283,7 @@ class SubAgentManager(SubAgentStateMixin, SubAgentStatsMixin, SubAgentCreationMi # 终态但 final_result 尚未写入,短暂等待后重试 time.sleep(SUB_AGENT_STATUS_POLL_INTERVAL) self.reconcile_task_states() + task = self.tasks.get(real_task_id) or task if task.get("final_result"): return task["final_result"] return {"success": False, "status": status, "message": "子智能体已结束,但未获取到结果。"} @@ -285,6 +291,7 @@ class SubAgentManager(SubAgentStateMixin, SubAgentStatsMixin, SubAgentCreationMi # asyncio Task 已结束但状态可能还没同步:等待 final_result 就绪 if running_task and running_task.done(): self.reconcile_task_states() + task = self.tasks.get(real_task_id) or task if task.get("final_result"): return task["final_result"] # 结果尚未落盘,继续轮询,避免把「已创建」误判为失败