FEAT: header navigation and animated Monitor detail activity - #42
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Successful “sent” acknowledgements can disappear entirely when activity is suppressed (paused/error/attention), losing confirmation feedback for the user.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds richer header navigation and an animated “activity” indicator for full Monitor detail, including terminal-native OSC 8 release hyperlinks, while tightening layout/scroll geometry consistency.
Changes:
- Make the header title/logo clickable to jump back to Quota → Bars; add an OSC 8 hyperlink on the version label (with hover underline styling).
- Introduce a “dot wave” activity indicator for successful “Text sent …” / “Decision sent …” states in full Monitor detail, plus shared layout logic for detail controls vs. scroll row counts.
- Expand tests and docs to cover header hit targets, hyperlink rendering, activity lifecycle, and scrolling behavior.
File summaries
| File | Description |
|---|---|
| README.md | Documents header navigation, OSC 8 hyperlink behavior, and Monitor detail activity semantics. |
| internal/ui/view.go | Post-processes rendered output to wrap the header version label with a terminal hyperlink. |
| internal/ui/model.go | Adds header mouse handling (home/version hover) and tracks monitorDetailSent + hover state. |
| internal/ui/header_actions.go | Implements header hit testing and version hyperlink URL generation/formatting. |
| internal/ui/header_actions_test.go | Adds coverage for click targets, hyperlink geometry, and release URL mapping rules. |
| internal/ui/monitor_detail_activity.go | Adds sent-state tracking, wave generation, and shared “detail control layout” logic. |
| internal/ui/monitor_detail_activity_test.go | Tests lifecycle/stop conditions, scroll reachability, and layout-vs-render row agreement. |
| internal/ui/monitor_prompt.go | Integrates sent-state recording and routes prompt notice display through activity rules. |
| internal/ui/monitor_context.go | Uses shared detail-control layout for rendering and scrolling calculations. |
| internal/ui/monitor_approval.go | Clears sent-state when starting an approval action. |
| internal/ui/localisation_test.go | Registers new localisation-related UI tests (header click surfaces, detail activity). |
| internal/ui/english_snapshot_test.go | Preserves snapshot stability by stripping only the new hyperlink metadata. |
Review details
- Files reviewed: 12/12 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🟢 Approval recommended
The changes are cohesive and well-covered by targeted UI and live-usage tests, with only minor optional test refactoring feedback outstanding.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
internal/ui/english_snapshot_test.go:27
TestEnglishPresentationSnapshotrecompiles a regexp inside the innermost loop and also shadows theviewloop variable with aview := ...string, making the test harder to read and doing unnecessary work. Precompile the hyperlink-stripping regexp once (the appVersion is constant in this test) and use a different variable name for the rendered string.
- Files reviewed: 16/16 changed files
- Comments generated: 0 new
- Review effort level: Lite
|
Addressed the optional snapshot-test feedback in 3004755: the hyperlink-stripping regexp is compiled once, and the rendered string no longer shadows the view loop variable. Also added the requested back-and-forth context navigation in ad0c3dd, with repeated keyboard/Esc cycles, mouse navigation and all-locale regression coverage. The final go test -race ./... run and go vet ./... passed. Local build: 0.14.0-8-gad0c3dd. The latest Copilot review generated no new review threads. |
There was a problem hiding this comment.
🔵 Needs a closer look
Switching away from Monitor clears the expanded/detail target but not the new per-row mode map, which can leave rows visually expanded while the target becomes empty and per-target controls stop working until re-cycled.
Review details
Suppressed comments (1)
internal/ui/model.go:1070
- When leaving the Monitor view,
pressViewTabclearsmonitorContextDetail/monitorContextExpandedbut leavesmonitorContextRowsintact. With the new per-row modes, that can leave rows rendered as split/wide (viarowContextModereadingmonitorContextRows) whilemonitorContextTarget()becomes empty, which in turn breakscontextDetailSession()and suppresses per-target controls (e.g., inline approval buttons) until the user re-cycles a row.
To keep state consistent, clear monitorContextRows alongside the other Monitor context state when switching away from Monitor (or alternatively restore a valid monitorContextExpanded target on return).
if view != viewMonitor {
m.monitorDetailSent = detailSentState{}
m.monitorPrompt = monitorPromptState{}
m.monitorContextDetail = ""
m.monitorContextExpanded = ""
m.monitorContextHover = ""
}
- Files reviewed: 19/19 changed files
- Comments generated: 0 new
- Review effort level: Lite
Why
Make the dashboard easier to navigate and give full Monitor detail a clearer sense of activity after sending a reply or approval, without expanding the compact session rows.
Changes
Esc/close from full detail returns to the same row and subsequent cycling continues downward. Globalh/Show/Hide resets every row to split or graph-only, clears row overrides and closes full detail. Only the global default persists across launches. Editor typing/Esc behavior is unchanged; info buttons and non-editing Enter follow the row cycle. Approval controls remain exclusive to the selected target even with multiple full-width rows.Validation
go test -race ./...go vet ./...go test ./internal/ui ./internal/i18n; release-URL, hover-geometry and title-without-hyperlink regressions. The English snapshot ignores only the new version-link metadata, retaining checks of text, colour and layout.