mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-18 04:41:56 +00:00
feat(cli): show ▶ N indicator in status bar when /background tasks are running (#27175)
Surface live background-task count in the prompt_toolkit status bar so users can see at a glance that a /background task exists and is running — no need to ask the agent about it (the agent has no visibility into bg sessions by design). - _get_status_bar_snapshot now reports active_background_tasks from len() of the live _background_tasks dict (entries are removed in the task thread's finally block, so this reflects truly-running tasks) - Indicator shown only on medium (<76) and wide (>=76) tiers; narrow (<52) stays minimal since it's already cramped - No invalidate plumbing needed: status bar fragments are pulled via lambda on every redraw, and the bg thread already calls _app.invalidate() on exit Refs #8568
This commit is contained in:
parent
6f817e1447
commit
226cee43d9
2 changed files with 129 additions and 0 deletions
25
cli.py
25
cli.py
|
|
@ -3113,8 +3113,19 @@ class HermesCLI:
|
|||
"session_total_tokens": 0,
|
||||
"session_api_calls": 0,
|
||||
"compressions": 0,
|
||||
"active_background_tasks": 0,
|
||||
}
|
||||
|
||||
# Count live /background tasks. The dict entry is removed in the
|
||||
# task thread's finally block, so len() reflects truly-running tasks.
|
||||
# len() on a CPython dict is atomic; safe to read without a lock.
|
||||
try:
|
||||
bg_tasks = getattr(self, "_background_tasks", None)
|
||||
if bg_tasks:
|
||||
snapshot["active_background_tasks"] = len(bg_tasks)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if not agent:
|
||||
return snapshot
|
||||
|
||||
|
|
@ -3350,6 +3361,9 @@ class HermesCLI:
|
|||
compressions = snapshot.get("compressions", 0)
|
||||
if compressions:
|
||||
parts.append(f"🗜️ {compressions}")
|
||||
bg_count = snapshot.get("active_background_tasks", 0)
|
||||
if bg_count:
|
||||
parts.append(f"▶ {bg_count}")
|
||||
parts.append(duration_label)
|
||||
if yolo_active:
|
||||
parts.append("⚠ YOLO")
|
||||
|
|
@ -3366,6 +3380,9 @@ class HermesCLI:
|
|||
parts = [f"⚕ {snapshot['model_short']}", context_label, percent_label]
|
||||
if compressions:
|
||||
parts.append(f"🗜️ {compressions}")
|
||||
bg_count = snapshot.get("active_background_tasks", 0)
|
||||
if bg_count:
|
||||
parts.append(f"▶ {bg_count}")
|
||||
parts.append(duration_label)
|
||||
prompt_elapsed = snapshot.get("prompt_elapsed")
|
||||
if prompt_elapsed:
|
||||
|
|
@ -3406,6 +3423,7 @@ class HermesCLI:
|
|||
percent_label = f"{percent}%" if percent is not None else "--"
|
||||
if width < 76:
|
||||
compressions = snapshot.get("compressions", 0)
|
||||
bg_count = snapshot.get("active_background_tasks", 0)
|
||||
frags = [
|
||||
("class:status-bar", " ⚕ "),
|
||||
("class:status-bar-strong", snapshot["model_short"]),
|
||||
|
|
@ -3415,6 +3433,9 @@ class HermesCLI:
|
|||
if compressions:
|
||||
frags.append(("class:status-bar-dim", " · "))
|
||||
frags.append((self._compression_count_style(compressions), f"🗜️ {compressions}"))
|
||||
if bg_count:
|
||||
frags.append(("class:status-bar-dim", " · "))
|
||||
frags.append(("class:status-bar-strong", f"▶ {bg_count}"))
|
||||
frags.extend([
|
||||
("class:status-bar-dim", " · "),
|
||||
("class:status-bar-dim", duration_label),
|
||||
|
|
@ -3433,6 +3454,7 @@ class HermesCLI:
|
|||
|
||||
bar_style = self._status_bar_context_style(percent)
|
||||
compressions = snapshot.get("compressions", 0)
|
||||
bg_count = snapshot.get("active_background_tasks", 0)
|
||||
frags = [
|
||||
("class:status-bar", " ⚕ "),
|
||||
("class:status-bar-strong", snapshot["model_short"]),
|
||||
|
|
@ -3446,6 +3468,9 @@ class HermesCLI:
|
|||
if compressions:
|
||||
frags.append(("class:status-bar-dim", " │ "))
|
||||
frags.append((self._compression_count_style(compressions), f"🗜️ {compressions}"))
|
||||
if bg_count:
|
||||
frags.append(("class:status-bar-dim", " │ "))
|
||||
frags.append(("class:status-bar-strong", f"▶ {bg_count}"))
|
||||
frags.extend([
|
||||
("class:status-bar-dim", " │ "),
|
||||
("class:status-bar-dim", duration_label),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue