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:
|
||||
# ─── 顺序执行(流式:每 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"
|
||||
|
||||
Reference in New Issue
Block a user