fix: emit phase_start in sequential streaming path
Without phase_start, the frontend had no panel created until the first agent_event arrived (30+ seconds after plan_done), making it look like nothing was happening. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -929,6 +929,25 @@ class TeamOrchestrator:
|
|||||||
else:
|
else:
|
||||||
# ─── 顺序执行(流式:每 phase 实时推送 Agent 内部事件) ───
|
# ─── 顺序执行(流式:每 phase 实时推送 Agent 内部事件) ───
|
||||||
for i, phase in enumerate(phases):
|
for i, phase in enumerate(phases):
|
||||||
|
phase_num = phase.get("phase", i + 1)
|
||||||
|
role = phase.get("role", "developer")
|
||||||
|
phase_name = phase.get("name", f"阶段 {phase_num}")
|
||||||
|
|
||||||
|
agent = self._get_agent_by_role(members, role)
|
||||||
|
if not agent:
|
||||||
|
yield {"type": "phase_done", "phase": phase_num, "name": phase_name,
|
||||||
|
"role": role, "success": False, "error": f"missing_role:{role}"}
|
||||||
|
all_outputs.append(f"[跳过] 阶段 {phase_num} ({phase_name}): 无 {role} 角色")
|
||||||
|
continue
|
||||||
|
|
||||||
|
yield {
|
||||||
|
"type": "phase_start",
|
||||||
|
"phase": phase_num,
|
||||||
|
"name": phase_name,
|
||||||
|
"role": role,
|
||||||
|
"agent": agent.name,
|
||||||
|
}
|
||||||
|
|
||||||
event_queue = asyncio.Queue()
|
event_queue = asyncio.Queue()
|
||||||
task = asyncio.create_task(
|
task = asyncio.create_task(
|
||||||
self._run_phase_stream_and_collect(
|
self._run_phase_stream_and_collect(
|
||||||
@@ -947,19 +966,16 @@ class TeamOrchestrator:
|
|||||||
r = task.result()
|
r = task.result()
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
r = {
|
r = {
|
||||||
"phase": phase.get("phase", i + 1),
|
"phase": phase_num,
|
||||||
"name": phase.get("name", ""),
|
"name": phase_name,
|
||||||
"role": phase.get("role", ""),
|
"role": role,
|
||||||
"agent_name": None,
|
"agent_name": agent.name,
|
||||||
"output": f"执行异常: {exc}",
|
"output": f"执行异常: {exc}",
|
||||||
"success": False, "error": str(exc),
|
"success": False, "error": str(exc),
|
||||||
"files": [],
|
"files": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
output_text = r.get("output", "")
|
output_text = r.get("output", "")
|
||||||
phase_num = r["phase"]
|
|
||||||
phase_name = r["name"]
|
|
||||||
role = r["role"]
|
|
||||||
|
|
||||||
if r.get("success"):
|
if r.get("success"):
|
||||||
context_doc += f"\n## 阶段 {phase_num}: {phase_name}\n{output_text[:2000]}\n"
|
context_doc += f"\n## 阶段 {phase_num}: {phase_name}\n{output_text[:2000]}\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user