From 151596a52d139a6da4f14cb05665463a6111fb0d Mon Sep 17 00:00:00 2001 From: Jordan Diaz Date: Fri, 3 Apr 2026 20:53:00 +0000 Subject: [PATCH] Fix: no emitir deltas del planner/reviewer al frontend El planner genera JSON interno que no debe mostrarse al usuario. Solo coder y collector emiten AGENT_DELTA al stream. Para direct_response, el engine emite como agent=coder para que el ClaudeFormatEmitter lo procese correctamente. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/orchestrator/agents/base.py | 21 ++++++++++++--------- src/orchestrator/engine.py | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/orchestrator/agents/base.py b/src/orchestrator/agents/base.py index b8dd7f9..af7b08a 100644 --- a/src/orchestrator/agents/base.py +++ b/src/orchestrator/agents/base.py @@ -96,15 +96,18 @@ class BaseAgent: ): if chunk.delta: full_text += chunk.delta - await self.sse.emit( - EventType.AGENT_DELTA, - { - "agent": self.profile.role, - "delta": chunk.delta, - "step": step, - }, - session_id=session.session_id, - ) + # Only emit deltas for user-facing agents (coder, collector) + # Planner/reviewer output is internal + if self.profile.role not in ("planner", "reviewer"): + await self.sse.emit( + EventType.AGENT_DELTA, + { + "agent": self.profile.role, + "delta": chunk.delta, + "step": step, + }, + session_id=session.session_id, + ) if chunk.tool_name and chunk.tool_call_id: if chunk.tool_call_id not in active_tools: diff --git a/src/orchestrator/engine.py b/src/orchestrator/engine.py index 78cbb0f..31f8ed8 100644 --- a/src/orchestrator/engine.py +++ b/src/orchestrator/engine.py @@ -129,7 +129,7 @@ class OrchestratorEngine: # Emit as text streaming for the frontend await self.sse.emit( EventType.AGENT_DELTA, - {"agent": "planner", "delta": plan_result, "step": 0}, + {"agent": "coder", "delta": plan_result, "step": 0}, session_id=session.session_id, )