From 81a9a66578b3c59c257153b89affddc0d083f9ec Mon Sep 17 00:00:00 2001 From: Mowenhao13 <3611893928@qq.com> Date: Wed, 18 Mar 2026 09:52:09 +0800 Subject: [PATCH] fix: fix wrong live terminal display for claude code --- codex_autoloop/live_updates.py | 45 +++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/codex_autoloop/live_updates.py b/codex_autoloop/live_updates.py index 3f36885..4140346 100644 --- a/codex_autoloop/live_updates.py +++ b/codex_autoloop/live_updates.py @@ -17,20 +17,41 @@ def extract_agent_message(stream: str, line: str) -> tuple[str, str] | None: return None if not isinstance(payload, dict): return None - if payload.get("type") != "item.completed": - return None - item = payload.get("item", {}) - if not isinstance(item, dict): - return None - if item.get("type") != "agent_message": - return None - text = item.get("text", "") - if not isinstance(text, str): + + # Codex format: item.completed with agent_message + if payload.get("type") == "item.completed": + item = payload.get("item", {}) + if not isinstance(item, dict): + return None + if item.get("type") != "agent_message": + return None + text = item.get("text", "") + if not isinstance(text, str): + return None + message = text.strip() + if message: + return actor, message return None - message = text.strip() - if not message: + + # Claude format: assistant message + if payload.get("type") == "assistant": + message_obj = payload.get("message", {}) + if not isinstance(message_obj, dict): + return None + content = message_obj.get("content", []) + if not isinstance(content, list): + return None + parts: list[str] = [] + for c in content: + if isinstance(c, dict) and c.get("type") == "text": + text = c.get("text", "") + if isinstance(text, str) and text.strip(): + parts.append(text.strip()) + if parts: + return actor, "\n".join(parts) return None - return actor, message + + return None @dataclass