Skip to content

feat(tui): add vertical session tabs - #40072

Merged
kitlangton merged 4 commits into
v2from
tui-vertical-tabs
Aug 1, 2026
Merged

feat(tui): add vertical session tabs#40072
kitlangton merged 4 commits into
v2from
tui-vertical-tabs

Conversation

@kitlangton

Copy link
Copy Markdown
Contributor

What

Adds an optional vertical session-tab rail to the V2 full-screen TUI.

  • Enable it from /settingsTabsVertical.
  • Shows numbered, two-row tabs with the project name beneath the title.
  • Uses a responsive 20–30 column rail with scrolling and active-tab tracking.
  • Preserves the existing horizontal tab strip when vertical tabs are disabled.
  • Carries running, completion, warning, and error states through subtle two-row pulses and split-cell separator gradients.

How

  • packages/tui/src/app.tsx selects horizontal or vertical placement.
  • packages/tui/src/component/session-tabs.tsx renders the rail, metadata, scrolling, drag reordering, title truncation, and status colors.
  • packages/tui/src/component/tab-pulse.tsx supports independent inner/outer animation channels so adjacent tabs blend without coupling their transitions.
  • packages/tui/src/context/session-tabs-model.ts centralizes responsive rail sizing.
  • packages/tui/src/routes/session/index.tsx accounts for the occupied rail width in session layout calculations.
  • packages/tui/src/config/index.tsx and dialog-config.tsx expose tabs.vertical.
  • bun run dev:live connects a worktree TUI to the elected opencode2 service while reusing the next TUI state channel.

Scope

Testing

  • bun typecheck in packages/tui
  • Pre-push bun turbo typecheck --concurrency=3: 33 tasks successful
  • Earlier TUI suite during implementation: 584 passed, 5 skipped
  • Live-server smoke check with bun run dev:live against the elected V2 service

Demo

The capture below shows the source-built TUI connected to the live V2 service, with vertical tabs, project metadata, active/unread states, and title-edge fading.

Vertical session tabs

Flow

flowchart LR
Config[Tabs setting] -->|vertical off| Horizontal[Horizontal tab strip]
Config -->|vertical on| Rail[Vertical tab rail]
Sessions[Session tab state] --> Rail
Status[Run and unread status] --> Pulse[Independent pulse channels]
Pulse --> Rail
Rail --> Layout[Rail-aware session layout]
Loading

@kitlangton
kitlangton merged commit 0e3da4b into v2Aug 1, 2026
10 checks passed
@kitlangton
kitlangton deleted the tui-vertical-tabs branch August 1, 2026 17:10
github-actionsBot pushed a commit to ReStranger/opencode that referenced this pull request Aug 3, 2026
* upstream/v2:
test(core): stabilize shell integration timing (anomalyco#40084)
fix(core): route Bedrock packages natively (anomalyco#40165)
feat(ai): add native Bedrock Mantle support (anomalyco#40119)
fix(tui): reserve home and end for navigation (anomalyco#40123)
refactor(ai): align multimodal naming (anomalyco#40073)
refactor(tui): remove redundant code (anomalyco#40081)
fix(tui): discover plugins across config roots (anomalyco#39988)
fix(tui): make vertical tabs responsive (anomalyco#40080)
feat(tui): add vertical session tabs (anomalyco#40072)
fix: preserve provider error status (anomalyco#39976)
fix(tui): prevent sidebar scrollbar flash (anomalyco#40056)
feat(tui): prioritize favorite model search results (anomalyco#40049)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kitlangton