feat: show turn number in progress updates
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user