Reorganize the web UI session list into a TUI-style tree#859
Merged
Conversation
The web UI session list was hard to scan: rows were two lines tall (harness label under the name), grouped members indented by only 2px, subagents by a fixed 40px regardless of parent depth, archived rows did not line up with the rows they summarize, and forks rendered as flat top-level rows with no lineage marker — unlike the TUI, which nests them under their parent (spec 0081). Structure (mirrors the TUI's list): - Forks nest as child rows under their fork parent, recursively and flat at one child level; the parent badges its live fork count (⑂N). A fork whose parent summary is gone falls back to top-level instead of disappearing. - A parent's archived forks (any generation) fold into the same "N archived" disclosure row as its archived subagents. - Group headers show the active member count. Presentation: - Single-line rows: fixed [disclosure][status] gutter, name, trailing markers (fork count, pin star, needs-attention dot), harness label right-aligned in muted small type — names on one left edge per depth. - Depth-classed indent ladder (18px per tree level) so a child's status glyph sits under its parent's name, like the TUI. - A fork's ⑂ marker occupies the gutter cell a disclosure would, so fork and subagent names align. - Archived rows indent to the depth of the rows they reveal. - Compact rows on desktop; taller touch targets restored on phones.
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.
Problem
The TUI session list is easy to scan — aligned names, right-aligned harness labels, a clear indent ladder for project/session/subagent/fork structure. The web UI, although structurally similar, was much harder to read:
Phone viewport (390px)
Structure —
orderedItems()now mirrors the TUI'slist_items⑂N). A fork whose parent summary is gone falls back to a top-level row instead of disappearing.▾ name (n).Presentation
[disclosure][status]gutter → name → trailing markers (fork count, pin ★, needs-attention ●) → harness label right-aligned in muted small type. Names at one depth share a left edge; a long name truncates before the harness label does.All row classes/datasets the delegated click handler, drag-reorder, and activity-spinner refresh rely on (
.item[data-id],.disclosure.can-toggle[data-parent-id],.archived-row[data-archived-section],.group-header[data-group-id],.state[data-session-id]) are unchanged.Testing
cargo test --workspace: 1,591 tests across 37 binaries, all green (includesweb_smokee2e).The two
pr-mediacommits exist only to host the screenshots above (added then removed; the pinned raw URLs stay alive via the PR ref).🤖 Generated with Claude Code