fix: set status from agent message presence

This commit is contained in:
banteg
2025-12-28 22:58:48 +04:00
parent 035d333de0
commit 66be21cb84
@@ -149,7 +149,7 @@ class CodexExecRunner:
prompt: str, prompt: str,
session_id: Optional[str], session_id: Optional[str],
on_event: Optional[Callable[[Dict[str, Any]], None]] = None, on_event: Optional[Callable[[Dict[str, Any]], None]] = None,
) -> Tuple[str, str]: ) -> Tuple[str, str, bool]:
""" """
Returns (session_id, final_agent_message_text) Returns (session_id, final_agent_message_text)
""" """
@@ -192,6 +192,7 @@ class CodexExecRunner:
found_session: Optional[str] = session_id found_session: Optional[str] = session_id
last_agent_text: Optional[str] = None last_agent_text: Optional[str] = None
saw_agent_message = False
cli_state = ExecRenderState() cli_state = ExecRenderState()
@@ -219,6 +220,7 @@ class CodexExecRunner:
item = evt.get("item") or {} item = evt.get("item") or {}
if item.get("type") == "agent_message" and isinstance(item.get("text"), str): if item.get("type") == "agent_message" and isinstance(item.get("text"), str):
last_agent_text = item["text"] last_agent_text = item["text"]
saw_agent_message = True
rc = proc.wait() rc = proc.wait()
t.join(timeout=2.0) t.join(timeout=2.0)
@@ -231,14 +233,14 @@ class CodexExecRunner:
raise RuntimeError("codex exec finished but no session_id/thread_id was captured") raise RuntimeError("codex exec finished but no session_id/thread_id was captured")
log(f"[codex] done run session_id={found_session!r}") log(f"[codex] done run session_id={found_session!r}")
return found_session, (last_agent_text or "(No agent_message captured from JSON stream.)") return found_session, (last_agent_text or "(No agent_message captured from JSON stream.)"), saw_agent_message
def run_serialized( def run_serialized(
self, self,
prompt: str, prompt: str,
session_id: Optional[str], session_id: Optional[str],
on_event: Optional[Callable[[Dict[str, Any]], None]] = None, on_event: Optional[Callable[[Dict[str, Any]], None]] = None,
) -> Tuple[str, str]: ) -> Tuple[str, str, bool]:
""" """
If resuming, serialize per-session. If resuming, serialize per-session.
""" """
@@ -412,7 +414,11 @@ def run(
progress.stop() progress.stop()
try: try:
session_id, answer = runner.run_serialized(text, resume_session, on_event=on_event) session_id, answer, saw_agent_message = runner.run_serialized(
text,
resume_session,
on_event=on_event,
)
except Exception as e: except Exception as e:
_stop_background() _stop_background()
err = _clamp_tg_text(f"Error:\n{e}") err = _clamp_tg_text(f"Error:\n{e}")
@@ -447,7 +453,7 @@ def run(
answer = answer or "(No agent_message captured from JSON stream.)" answer = answer or "(No agent_message captured from JSON stream.)"
elapsed = time.monotonic() - started_at elapsed = time.monotonic() - started_at
status = "error" if answer == "(No agent_message captured from JSON stream.)" else "done" status = "done" if saw_agent_message else "error"
final_md = progress_renderer.render_final(elapsed, answer, status=status) final_md = progress_renderer.render_final(elapsed, answer, status=status)
final_text, final_entities = render_markdown(final_md) final_text, final_entities = render_markdown(final_md)
can_edit_final = progress_id is not None and len(final_text) <= TELEGRAM_TEXT_LIMIT can_edit_final = progress_id is not None and len(final_text) <= TELEGRAM_TEXT_LIMIT