feat(tui): turn elapsed in FaceTicker + done-in sys line on turn end (#8541)#13105
Conversation
…8541) StatusRule now renders `{sinceLastMsg}/{sinceSession}` (e.g. `12s/3m 45s`) when a user has submitted in the current session; falls back to the total alone otherwise. Wires `lastUserAt` through the state/session lifecycle: - useSubmission stamps `setLastUserAt(Date.now())` on send - useSessionLifecycle nulls it in reset/resetVisibleHistory - /branch slash nulls it on fork
…edge Status bar ticker was too hot in peripheral vision. The moment the elapsed value matters is when the prompt returns — so surface it there. Dim `fmtDuration` next to the GoodVibesHeart, idle-only (hidden while busy), so quick turns and active streaming stay quiet.
|
Moved the display: the
Latest commit: 9910681 |
Drops `lastUserAt` plumbing and the right-edge idle ticker. Matches the
claude-code / opencode convention: elapsed rides with the busy indicator
(spinner verb), nothing at idle.
- `turnStartedAt` driven by a useEffect on `ui.busy` — stamps on rising
edge, clears on falling edge. Covers agent turns and !shell alike.
- FaceTicker renders ` · {fmtDuration}` while busy; 1 s clock for the
counter, existing 2500 ms cycle for face/verb rotation.
- On busy → idle, if the block ran ≥ 1 s, emit a one-shot
`done in {fmtDuration}` sys line (≡ claude-code's `thought for Ns`).
|
Iteration: pivoted away from the persistent idle-edge counter. Neither ~/claude-code nor opencode expose one (both fold elapsed into the busy indicator and drop it at idle). This PR now matches that convention.
Implementation: Latest: 2de1aad |
The transcript line was noisy. Keep the one thing the issue really needs: live elapsed next to the busy verb.
…d-lastmsg-8541 feat(tui): turn elapsed in FaceTicker + done-in sys line on turn end (NousResearch#8541)
…d-lastmsg-8541 feat(tui): turn elapsed in FaceTicker + done-in sys line on turn end (NousResearch#8541)
…d-lastmsg-8541 feat(tui): turn elapsed in FaceTicker + done-in sys line on turn end (NousResearch#8541)
…d-lastmsg-8541 feat(tui): turn elapsed in FaceTicker + done-in sys line on turn end (NousResearch#8541)
…d-lastmsg-8541 feat(tui): turn elapsed in FaceTicker + done-in sys line on turn end (NousResearch#8541)
…d-lastmsg-8541 feat(tui): turn elapsed in FaceTicker + done-in sys line on turn end (NousResearch#8541)
Fixes #8541.
Summary
Adds a lightweight timer next to the existing session duration:
{sinceLastMsg}/{sinceSession}(e.g.12s/3m 45s). Renders in the status bar's existing│ 3m 45sslot, so no new chrome. When no user message has been submitted yet in this session, just the total renders (unchanged behavior).How it wires
useMainAppholdslastUserAt: null | number, threaded intoappStatus.useSubmission.sendstampssetLastUserAt(Date.now())alongsidesetLastUserMsg.useSessionLifecycle.resetSession/resetVisibleHistorynull it;/branchslash nulls it on fork (/tools enablegoes throughresetVisibleHistory→ free).SessionDurationcomponent extended to optionally render the leading segment.Test plan
npm run type-check— cleannpx vitest run— 15/15 files, 98/98 tests passhermes --tui, send a message, wait; status bar shows12s/42setc; second submit resets the left counter;/newresets both; narrow terminals truncate cleanly (existingwrap="truncate-end"on the left cluster).