Skip to content

fix(tui): make all TUI list views scrollable (#1351)#1363

Merged
Aaronontheweb merged 8 commits into
netclaw-dev:devfrom
Aaronontheweb:claude-wt-mcp-permissions-scrollable
Jun 9, 2026
Merged

fix(tui): make all TUI list views scrollable (#1351)#1363
Aaronontheweb merged 8 commits into
netclaw-dev:devfrom
Aaronontheweb:claude-wt-mcp-permissions-scrollable

Conversation

@Aaronontheweb

Copy link
Copy Markdown
Collaborator

Summary

  • Fixes MCP permissions TUI is not scrollable when there are many tools #1351netclaw mcp permissions tool grid was not scrollable when a server had many tools; same gap existed on five other TUI screens
  • All SelectionList-based pages (ApprovalsManagerPage, ModelManagerPage, ProviderManagerPage, ProviderStepView) now call .WithFillHeight() — the native Termina 0.11 fill mode, removing the need for the custom FillSelectionListNode<T> workaround
  • McpToolPermissionsPage wraps its tool rows in a ScrollableContainerNode with a dedicated DynamicLayoutNode; cursor navigation invalidates only the tool rows node so the scroll offset survives between keystrokes; EnsureToolCursorVisible() keeps the cursor row in the viewport
  • SessionsPage replaces the raw TextNode for-loop with SelectionListNode.WithFillHeight() + .WithHighlightedIndex(), delegating scroll to Termina
  • ProviderStepView drops the 30-item model truncation and "... and N more" sentinel — no longer needed now that the list scrolls natively

Smoke coverage

Adds four VHS tapes for TUI surfaces that previously had no interactive smoke coverage:

  • mcp-permissions.tape — opens netclaw mcp permissions, anchors on header, exits cleanly
  • approvals.tape — opens netclaw approvals, anchors on panel title, exits cleanly
  • model-manager.tape — opens netclaw model, anchors on panel title, exits cleanly
  • sessions-tui.tape — opens netclaw sessions, anchors on panel title, exits cleanly

All four run without a live daemon (exercise empty/loading-state rendering). All four added to LIGHT_TAPES.

Test plan

  • dotnet build passes (0 errors)
  • dotnet slopwatch analyze passes (0 new violations)
  • ./scripts/smoke/run-smoke.sh mcp-permissions — new tape
  • ./scripts/smoke/run-smoke.sh approvals — new tape
  • ./scripts/smoke/run-smoke.sh model-manager — new tape
  • ./scripts/smoke/run-smoke.sh sessions-tui — new tape
  • ./scripts/smoke/run-smoke.sh light — full light suite

All SelectionList-based pages now call .WithFillHeight() so the list
expands to fill the terminal and scrolls natively via Termina 0.11.

McpToolPermissionsPage gets a ScrollableContainerNode wrapping a
dedicated DynamicLayoutNode for tool rows, with EnsureToolCursorVisible()
keeping the cursor row in the viewport. Cursor navigation invalidates
only the tool rows node (not the whole content node) so the scroll
container's offset survives between keystrokes.

SessionsPage replaces the raw TextNode for-loop with SelectionListNode
using .WithHighlightedIndex(), delegating scroll entirely to Termina.

ProviderStepView drops the 30-item model truncation and "... and N more"
sentinel — now that the list scrolls natively those workarounds are gone.

Adds four smoke tapes (mcp-permissions, approvals, model-manager,
sessions-tui) for the TUI surfaces that had no interactive coverage.
@Aaronontheweb Aaronontheweb enabled auto-merge (squash) June 9, 2026 01:39
@Aaronontheweb Aaronontheweb added the tui Terminal UI (Termina) issues label Jun 9, 2026
@Aaronontheweb Aaronontheweb disabled auto-merge June 9, 2026 01:39

@Aaronontheweb Aaronontheweb left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

private DynamicLayoutNode? _contentNode;
private DynamicLayoutNode? _footerNode;
private DynamicLayoutNode? _toolRowsNode;
private ScrollableContainerNode? _toolScrollNode;

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Aaronontheweb Aaronontheweb enabled auto-merge (squash) June 9, 2026 13:45
@Aaronontheweb Aaronontheweb merged commit 7ddd3df into netclaw-dev:dev Jun 9, 2026
15 checks passed
@Aaronontheweb Aaronontheweb deleted the claude-wt-mcp-permissions-scrollable branch June 9, 2026 23:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tui Terminal UI (Termina) issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MCP permissions TUI is not scrollable when there are many tools

1 participant