2.1 KiB
Session Sidebar
Sidebar code is organized by the business object it owns. Shared contracts are
kept at this root in types.ts and utils.tsx.
shell/owns sidebar chrome, navigation, search, confirmations, and switcher effects.list/owns global-first session collection, directory bootstrap demand, layout-owned synchronization, authoritative cleanup, and nearby-session prefetch.projects/owns project zones, grouping, ordering, scroller behavior, project view state, repository state, and worktree presentation.sessions/owns session rows, row actions, expansion, ownership, and activity indicators.recent/owns Recent and managed Chats activity projections.folders/owns folder DnD, bulk actions, archived folders, and folder UI.
MainLayout and VSCodeLayout call useSessionListSync({ isVSCode })
unconditionally. The hook publishes complete directory bootstrap demand,
refreshes newly added topology, coalesces control events, and performs
authoritative cleanup. Root-level useGlobalSessionsPolling remains the only
initial and 45-second global poller. useSessionListSync must not create a
second global polling lifecycle.
The global sessions cache is the complete source for active and archived
coverage. Initialized directory stores only supply sessions missing from that
cache. Live busy and retry state comes from global-session-status, never from
the global cache or persisted history. A failed global or directory fetch keeps
existing data; it is never treated as an authoritative empty list.
Web and desktop show managed Chats before optional Recent activity. Chats use their shared managed root for folders and never expose worktree actions. Project display can be all projects or one selected project. VS Code excludes worktrees and managed Chats, while retaining its workspace-scoped grouped list and inline archived buckets.
Directory demand always includes known project roots and worktrees. Visibility only changes priority. Row mounts must not start bootstrap work. Selection and activity subscriptions stay session-scoped so a structural list update does not make every row observe unrelated streaming updates.