| 23 | |
| 24 | |
| 25 | async def on_codex_stream(payload: CodexToolStreamEvent) -> None: |
| 26 | event = payload.event |
| 27 | |
| 28 | if isinstance(event, ThreadStartedEvent): |
| 29 | log(f"codex thread started: {event.thread_id}") |
| 30 | return |
| 31 | if isinstance(event, TurnStartedEvent): |
| 32 | log("codex turn started") |
| 33 | return |
| 34 | if isinstance(event, TurnCompletedEvent): |
| 35 | log(f"codex turn completed, usage: {event.usage}") |
| 36 | return |
| 37 | if isinstance(event, TurnFailedEvent): |
| 38 | log(f"codex turn failed: {event.error.message}") |
| 39 | return |
| 40 | if isinstance(event, ThreadErrorEvent): |
| 41 | log(f"codex stream error: {event.message}") |
| 42 | |
| 43 | |
| 44 | def _timestamp() -> str: |