diff --git a/src/orchestrator/engine.py b/src/orchestrator/engine.py index 9018808..c9e97aa 100644 --- a/src/orchestrator/engine.py +++ b/src/orchestrator/engine.py @@ -201,6 +201,33 @@ class OrchestratorEngine: task.task_id, ) + # Emit plan to frontend as a visible block + plan_tool_id = f"plan_{task.task_id}" + plan_steps_list = [ + {"step": i + 1, "agent": s.agent_role, "description": s.description} + for i, s in enumerate(plan_result) + ] + await self.sse.emit( + EventType.TOOL_STARTED, + {"tool": "plan", "step": 0, "tool_call_id": plan_tool_id}, + session_id=session.session_id, + ) + plan_text = "\n".join( + f" {s['step']}. [{s['agent']}] {s['description']}" + for s in plan_steps_list + ) + await self.sse.emit( + EventType.TOOL_COMPLETED, + { + "tool": "plan", + "status": "completed", + "summary": f"Plan: {len(plan_result)} steps", + "raw_output": f"Plan de ejecución ({len(plan_result)} pasos):\n{plan_text}", + "tool_call_id": plan_tool_id, + }, + session_id=session.session_id, + ) + # 3. Execute each step — failures are logged and skipped results: list[dict[str, Any]] = [] failed_steps: list[int] = []