Mohamed Boudra 27b0a2da63 Fix Codex MCP duplicate user/assistant message emissions
Root cause: Codex MCP sends BOTH direct events (agent_message,
agent_reasoning_delta) AND item events (item.started/updated/completed)
for the same message content.

- User messages were emitted once by us in stream() and again 3 times
  from Codex MCP's item.started/updated/completed events (4x total)
- Agent messages were emitted from both the agent_message direct event
  AND the item.completed event (2x total)

Fix:
- Skip user_message items in threadItemToTimeline (we emit in stream())
- Only emit agent_message/reasoning on item.completed (skip started/updated)
- Skip direct agent_message/agent_reasoning events (use item.completed path)

Added test to verify exactly 1 user_message and 1 assistant_message per turn.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:59:43 +07:00
2025-12-25 11:31:56 +07:00
Description
Languages
TypeScript 98.1%
JavaScript 1.3%
Shell 0.1%
Swift 0.1%