🤖 feat: optional flat chat list for the sidebar with project badges - #3994
Open
ibetitsmike wants to merge 17 commits into
Open
🤖 feat: optional flat chat list for the sidebar with project badges#3994ibetitsmike wants to merge 17 commits into
ibetitsmike wants to merge 17 commits into
Conversation
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.
Summary
Adds an optional flat sidebar mode: a new "Flat chat list" setting replaces the project-folder grouping with one globally sorted list of chats, keeping pinned chats in a single unified block at the top and tagging each root chat card with a project-name badge tinted by the project's folder color. The General settings page is also reorganized from three monolithic headers into logical groups (Appearance, Sidebar, Transcript, Terminal, Archiving, Editor & debugging, Projects).
Background
Users working across many projects lose vertical space and orientation to per-project folders when they mostly care about "all my recent chats". The flat mode drops the folders while badges preserve project attribution; grouped mode stays the default and is unchanged.
Implementation
sidebarFlatModepersists viausePersistedState(key insrc/common/constants/storage.ts, default off) with a command palette toggle for parity with the sibling sidebar options.buildSortedWorkspacesFlat(workspaceFiltering.ts) reuses the existing comparators: pinned roots first in globalpinnedAtorder, then recency with deterministic tie-breakers, then the tree flatten that keeps sub-agents under their parents. Age grouping and hide-sub-agents both compose with flat mode.workspaceService.reorderPinnednow scopes its timestamp re-deal to the union of project buckets referenced by the input ids (grouped drags keep exact single-bucket behavior), fixing cross-project reorders reverting on reload.resolveSectionColorof the project's configured color); scratch chats get no badge, multi-project chats a neutral one, sub-agent rows none.Validation
reorderPinnedcross-bucket test fails without the service change.Risks
reorderPinnedis the only backend touch; scope generalization is covered by new unit tests plus the pre-existing single-bucket suite (defensive contract unchanged).Generated with
xum• Model:anthropic:claude-fable-5• Thinking:xhigh