Emitir plan como bloque tool_use visible en el frontend
El plan del planner se emite como tool_use(name="plan") + tool_result con los steps formateados. El frontend lo renderiza como un bloque colapsable de herramienta con el plan de ejecución. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -201,6 +201,33 @@ class OrchestratorEngine:
|
|||||||
task.task_id,
|
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
|
# 3. Execute each step — failures are logged and skipped
|
||||||
results: list[dict[str, Any]] = []
|
results: list[dict[str, Any]] = []
|
||||||
failed_steps: list[int] = []
|
failed_steps: list[int] = []
|
||||||
|
|||||||
Reference in New Issue
Block a user