Files
EvoScientist-Multi/EvoScientist/cli/widgets/timed_status_widget.py
T
Xi Zhang 65db3a4fcd Add status bar and compact summary widgets with context window resolu… (#152)
* Add status bar and compact summary widgets with context window resolution

- Implemented a shared status bar for CLI and TUI frontends, including helpers for managing session metrics and context windows.
- Created a `CompactSummaryWidget` for displaying manual summaries in a collapsible format.
- Introduced a `CompactingWidget` to indicate ongoing compacting processes.
- Added a base class `TimedStatusWidget` for widgets that require a timer.
- Developed context window resolution helpers to retrieve context window sizes from various model attributes.
- Enhanced tests for context window resolution and status bar functionalities, ensuring accurate behavior across different scenarios.
- Updated existing tests to cover new features and maintain code quality.

* refactor(Channel): simplify lambda function in _send_with_retry method

* feat: enhance context editing logic and improve error handling in StreamState

* refactor(Channel): streamline lambda function in _send_with_retry method

* feat: rename auto-approve option to auto-mode for unattended execution; update checkpoint queries to filter by agent name; improve compatibility validation logic

* feat: rename auto-approve option to auto-mode; update related logic and tests for improved unattended execution

* fix: correct formatting of console message for MCP server configuration status

* feat: add check for None summary_message in _apply_summarization_event to prevent errors

* feat: enhance _load_checkpoint_messages to validate message format and apply summarization event
2026-04-12 17:47:37 +01:00

50 lines
1.3 KiB
Python

"""Shared timer-backed base class for transient TUI status widgets."""
from __future__ import annotations
from textual.widgets import Static
class TimedStatusWidget(Static):
"""Static widget with a simple elapsed-time timer.
Subclasses implement ``_refresh_display()`` and can override
``_should_tick()`` when the timer should pause after a state transition.
"""
TICK_SECONDS = 0.1
def __init__(self) -> None:
super().__init__("")
self._elapsed = 0.0
self._timer_handle = None
def on_mount(self) -> None:
self._timer_handle = self.set_interval(self.TICK_SECONDS, self._tick)
self._refresh_display()
def on_unmount(self) -> None:
self._stop_timer()
def _tick(self) -> None:
if self._should_tick():
self._elapsed += self.TICK_SECONDS
self._refresh_display()
def _should_tick(self) -> bool:
"""Return whether the timer should continue advancing."""
return True
def _stop_timer(self) -> None:
if self._timer_handle is not None:
self._timer_handle.stop()
self._timer_handle = None
@property
def elapsed_seconds(self) -> int:
return int(self._elapsed)
def _refresh_display(self) -> None:
"""Update the widget's rendered content."""
raise NotImplementedError