65db3a4fcd
* 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
50 lines
1.3 KiB
Python
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
|