Add collapsible tab groups#5201
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (7)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (5)
📝 WalkthroughWalkthroughThis PR adds tab folder groups, a feature enabling users to visually and functionally group related tabs within split-pane layouts. The implementation introduces the 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (1)
src/renderer/src/store/slices/tabs.ts (1)
1262-1287: 💤 Low valueFeature interaction recorded even when no ungroup occurs.
If
findFolderGroupAndWorktreereturns null, thesetcallback returns{}(no-op), butrecordFeatureInteractionon line 1286 is still called unconditionally. Other actions in this file (e.g.,createTabFolderGroup,addTabsToFolderGroup) only record the interaction when the operation succeeds.Suggested fix
ungroupTabFolderGroup: (folderGroupId) => { + let ungrouped = false set((state) => { const found = findFolderGroupAndWorktree(state.tabFolderGroupsByWorktree, folderGroupId) if (!found) { return {} } + ungrouped = true const { folderGroup, worktreeId } = found // ... rest of implementation }) - get().recordFeatureInteraction?.('terminal-tabs') + if (ungrouped) { + get().recordFeatureInteraction?.('terminal-tabs') + } },
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 6224e5d6-c616-4cca-b476-8d135574d8f3
📒 Files selected for processing (30)
src/renderer/src/components/sidebar/folder-workspace-composer-submit.tssrc/renderer/src/components/tab-bar/BrowserTab.test.tsxsrc/renderer/src/components/tab-bar/BrowserTab.tsxsrc/renderer/src/components/tab-bar/EditorFileTab.test.tsxsrc/renderer/src/components/tab-bar/EditorFileTab.tsxsrc/renderer/src/components/tab-bar/EditorFileTabContextMenu.tsxsrc/renderer/src/components/tab-bar/SortableTab.rename-shortcut.test.tsxsrc/renderer/src/components/tab-bar/SortableTab.tsxsrc/renderer/src/components/tab-bar/SortableTabContextMenu.tsxsrc/renderer/src/components/tab-bar/TabBar.tsxsrc/renderer/src/components/tab-bar/TabFolderGroupChip.test.tsxsrc/renderer/src/components/tab-bar/TabFolderGroupChip.tsxsrc/renderer/src/components/tab-bar/TabFolderMenuItems.tsxsrc/renderer/src/components/tab-bar/tab-color-palette.tssrc/renderer/src/components/tab-bar/tab-folder-group-defaults.tssrc/renderer/src/components/tab-group/useTabDragSplit.tssrc/renderer/src/lib/workspace-session-browser-history.test.tssrc/renderer/src/lib/workspace-session-editor-drafts.test.tssrc/renderer/src/lib/workspace-session-liveness.test.tssrc/renderer/src/lib/workspace-session-patch.test.tssrc/renderer/src/lib/workspace-session-patch.tssrc/renderer/src/lib/workspace-session-relevant-fields.test.tssrc/renderer/src/lib/workspace-session-unified-tabs.tssrc/renderer/src/lib/workspace-session.tssrc/renderer/src/store/slices/tab-folder-group-state.tssrc/renderer/src/store/slices/tab-folder-groups.test.tssrc/renderer/src/store/slices/tabs-hydration.tssrc/renderer/src/store/slices/tabs.tssrc/shared/types.tssrc/shared/workspace-session-schema.ts
Summary
Adds named, colored, collapsible tab groups to the tab bar. Users can group tabs from tab context menus,
add/remove tabs from groups, rename/recolor groups, collapse/expand group chips, ungroup, and close all
tabs in a group. Group membership, name, color, order, and collapsed state persist across app restarts.
Screenshots
Recording_2026-06-11_11-39-09.1.mp4
Testing
pnpm lintmax-linesviolations inMobileHero.tsx,McpConfigSection.tsx,ThemeStep.tsx,HostedReviewActions.tsx,CodexUsagePane.tsx,OpenCodeUsagePane.tsx, andClaudeUsagePane.tsx.pnpm typecheckpnpm testsrc/main/ipc/pty.test.tsandWorktreeListlineage tests.
pnpm build/usr/local/bin/orca-devsymlink permission warning.
recolor, collapse/expand, add/remove, reorder, close grouped tabs, delete empty groups, persistence round-
trip, hydration cleanup, collapsed chip rendering, and tab/menu compatibility.
AI Review Report
AI review checked the tab data model, tab strip rendering, context menus, drag/drop path, session
persistence/hydration, and compatibility with existing per-tab colors.
Risks checked:
accelerators were added, so shortcut label/accelerator behavior is unchanged.
processes, local paths, credentials, or network locality.
consistently across terminal, editor, browser, and simulator tabs.
entries when groups are collapsed.
primitives, lucide icons, and the existing tab color palette.
The review flagged stale group cleanup and group color coverage across all tab types. The implementation
now sanitizes groups during close, move, reconcile, hydration, and persistence, and applies group color
before per-tab color for every tab type.
Security Audit
This PR is UI/state-only. It does not add command execution, IPC handlers, auth flows, credential access,
dependency changes, or filesystem writes beyond existing workspace session persistence.
Reviewed risks:
groups.
No security follow-up identified.
Notes
groups.