mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-09 13:21:42 +00:00
The OpenTUI engine received the gateway's credits/usage notices but mis-rendered them as scrolling inline transcript cards with no lifecycle. Render them instead as a persistent, level-tinted chrome banner pinned directly above the status bar, matching the Ink engine — no gateway/agent changes (the wire + credits policy stay the source of truth). - backgroundActivity.ts: widen level to include `success` (was silently dropped to info) + add isChromeNotice() (kind sticky|ttl) discriminator. - store.ts: port the Ink turnController notice lifecycle — showNotice/ applyNotice/clearNotice/flushPendingNotice/clearNoticeState, a single TTL timer (latest-wins, id-guarded), mid-turn hold + turn-end reveal (the three end sites: message.complete, gateway.exited, error), flash-and-yield for credits.usage/grant_spent at message.start, and a notice reset on clearTranscript + commitSnapshot so it can't bleed across sessions. Route notification.show by kind: sticky|ttl -> chrome banner, everything else (process/background completion cards) -> existing inline path, unchanged. Distinct clones for notice vs lastNotification (createStore aliasing). - noticeBanner.tsx + App.tsx: a single sticky row above the status bar, text rendered verbatim (already glyphed by the policy), tinted by level, width-truncated so it can never wrap and push the composer. Tests: statusNotice.test.ts (lifecycle/routing/TTL/flash-and-yield), noticeBanner.test.tsx (render/color/truncation), backgroundActivity + render additions. npm run check OK (768 tests). |
||
|---|---|---|
| .. | ||
| 2026-06-09-003-fix-telegram-stream-overflow-continuations-plan.md | ||
| opentui-background-activity.md | ||
| opentui-composer-ux-9.md | ||
| opentui-usage-notice-chrome.md | ||