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:
renjianbo
2026-06-18 22:20:15 +08:00
parent e0bcfe582b
commit 86b98865e3

View File

@@ -929,6 +929,25 @@ class TeamOrchestrator:
else:
# ─── 顺序执行(流式:每 phase 实时推送 Agent 内部事件) ───
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()
task = asyncio.create_task(
self._run_phase_stream_and_collect(
@@ -947,19 +966,16 @@ class TeamOrchestrator:
r = task.result()
except Exception as exc:
r = {
"phase": phase.get("phase", i + 1),
"name": phase.get("name", ""),
"role": phase.get("role", ""),
"agent_name": None,
"phase": phase_num,
"name": phase_name,
"role": role,
"agent_name": agent.name,
"output": f"执行异常: {exc}",
"success": False, "error": str(exc),
"files": [],
}
output_text = r.get("output", "")
phase_num = r["phase"]
phase_name = r["name"]
role = r["role"]
if r.get("success"):
context_doc += f"\n## 阶段 {phase_num}: {phase_name}\n{output_text[:2000]}\n"