feat(terminal): master/detail node console — shell (part of #215)#220
Merged
Conversation
Replace the flat menu+log screen with a real master/detail node console:
- status bar (dongle + node count + DaemonError banner) on top;
- a selectable node list (left) — id, name (from node-metadata), security
label (from the CC list);
- a detail pane (right) for the selected node — identity + device class +
CC list + last-known values with age (from the value cache #213), i.e.
the #45 node-info view;
- the activity log (bottom) and a scope-grouped key-hint bar.
New nodes.{hpp,cpp} holds the UI-thread model (GetNodes + GetNodeMetadata
names; GetNodeValues for the selected node). main.cpp's loop gains arrow-key
selection, a ~2s poll of the selected node's values, and [a]dd / [x]remove /
[r]efresh keys (1/2 kept as aliases). render.cpp lays out the panes (width-
fitted, clamps to terminal size). The per-CC Get/Control/Policy/Scenes/HVAC
actions stay in their runActionMenu submenus, unchanged.
Builds on both presets (utils on); 471/471 ctest unaffected; clang-format +
clang-tidy clean. Mirrors handlers.hpp's <algorithm>-before-sdbus include
guard for GCC 15's -Wtemplate-body.
Remaining #215: contextual actions on the selection (skip the node-id
prompt), auto-refresh on NodeListChanged/NodeValueChanged signals, and the
DSK confirm modal (#187).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The terminal shell you approved (#215) — a real working node console, replacing the flat menu+log screen. Ships with live values thanks to #213.
Layout
What
nodes.{hpp,cpp}— UI-thread node model:GetNodes+ per-nodeGetNodeMetadataname;GetNodeValuesfor the selected node. Selection preserved by node id across refreshes.render.cpp— pane layout (status / list / detail / log / hint bar), width-fitted and clamped to terminal size; selected row reverse-highlighted; value age rendered3s/5m/2h/4d. The detail pane is the Node info window #45 node-info view.main.cpp— arrow-key selection, a ~2s poll of the selected node's values,[a]/[x]add/remove (1/2 kept as aliases),[r]refresh. The per-CC Get/Control/Policy/Scenes/HVAC actions stay in theirrunActionMenusubmenus.Security label in the list/detail is derived from the CC list (
S2if 0x9F,S0if 0x98) — a cheap proxy untilNodeSecurityStatusis tracked.Notes
handlers.hpp's<algorithm>-before-sdbus include guard for GCC 15's-Wtemplate-body(Message.husesstd::copy_n).Remaining #215
[c]/[g]/[f]/[L]);NodeListChanged/NodeValueChangedsignals (today:[r]/ add-remove for the list, ~2s poll for values);DSKPendingConfirmation/ConfirmDSK, S2 phase 9: inclusion bootstrap wiring #187).Realises #45 (node info window) as the detail pane.
🤖 Generated with Claude Code