feat: show turn number in progress updates

This commit is contained in:
banteg
2025-12-28 22:10:19 +04:00
parent ea73c3c0a9
commit 864b00d988
@@ -1,6 +1,7 @@
from __future__ import annotations from __future__ import annotations
import json import json
import re
from collections import deque from collections import deque
from dataclasses import dataclass, field from dataclasses import dataclass, field
from textwrap import indent from textwrap import indent
@@ -52,12 +53,16 @@ def _shorten(text: str, max_len: int = 140) -> str:
class ExecRenderState: class ExecRenderState:
items: dict[str, dict[str, Any]] = field(default_factory=dict) items: dict[str, dict[str, Any]] = field(default_factory=dict)
recent: deque[str] = field(default_factory=lambda: deque(maxlen=4)) recent: deque[str] = field(default_factory=lambda: deque(maxlen=4))
last_turn: Optional[int] = None
def _record_item(state: ExecRenderState, item: dict[str, Any]) -> None: def _record_item(state: ExecRenderState, item: dict[str, Any]) -> None:
item_id = item.get("id") item_id = item.get("id")
if isinstance(item_id, str) and item_id: if isinstance(item_id, str) and item_id:
state.items[item_id] = item state.items[item_id] = item
match = re.search(r"item_(\d+)", item_id)
if match:
state.last_turn = int(match.group(1))
def render_event_cli( def render_event_cli(
@@ -282,6 +287,11 @@ class ExecProgressRenderer:
return line return line
def render(self, header: str) -> str: def render(self, header: str) -> str:
if not self.state.recent: lines: list[str] = []
if self.state.last_turn is not None:
lines.append(f"Turn: {self.state.last_turn}")
if self.state.recent:
lines.extend(self.state.recent)
if not lines:
return header return header
return header + "\n\n" + "\n".join(f"- {line}" for line in self.state.recent) return header + "\n\n" + "\n".join(lines)