Commit 7205d7a3 replaced runtime directory probing with buildKnownSessionDirectories
filtering, but left the hook, prop, state, and UI checks as a transitional artifact.
- Delete useDirectoryStatusProbe.ts
- Remove directoryStatus state/prop from SessionSidebar, SessionGroupSection, SessionNodeItem
- Remove isMissingDirectory checks, opacity-75 styling, and disabled states
- Simplify handleSessionSelect signature
- Update sidebar DOCUMENTATION.md
Co-authored-by: Leonid Skorobogatyy <bash@opencode.itc.local>
4.6 KiB
4.6 KiB
Session Sidebar Documentation
Refactor result
SessionSidebar.tsxnow acts mainly as orchestration; core logic moved to focused hooks/components.- Sidebar is now a single multi-project tree:
recenttop section, then projects, then worktrees/archived groups, then sessions. NavRailis no longer part of sidebar/navigation flow.- Project headers now own root sessions directly; there is no separate rendered
project rootsubgroup. - Active/hover row styling is text-first; selected sessions use primary text instead of background fills.
- Archived groups are collapsed by default and support bulk deletion at group/folder level.
- Session rows support compact inline dates in minimal mode and simplified metadata in default mode.
- New extractions in latest pass reduced local effect/callback bulk further:
- project session list builders
- folder cleanup sync
- sticky project header observer
VS Code grouping
- VS Code uses the same grouped project tree as web/desktop (project headers + folders + pinned-first ordering), not a separate flat list. Each open VS Code workspace folder is a project header.
- VS Code groups strictly by open workspace:
useSessionGroupingfunnels every non-archived session into the project's root group and emits no per-worktree subgroups (worktrees aren't registered in VS Code).getSessionsForProjectbuckets sessions to a workspace by exact directory match, so only sessions whose directory is an open workspace folder appear. - VS Code passes
hideDirectoryControls(clean workspace headers, no worktree/close chrome) and no longer passesshowOnlyMainWorkspace/sharedSessionsOnly. Folders and pinning therefore work natively, scoped to the workspace root.
File summaries
Components
SidebarHeader.tsx: Top header UI for add-project, session search, and display mode.SidebarActivitySections.tsx: Global top section renderer; currently used for therecentsection only.SidebarFooter.tsx: Static footer with icon-only settings, shortcuts, and about actions.SidebarProjectsList.tsx: Main scrollable tree renderer for projects, root sessions, worktrees/groups, and empty/search states.SessionGroupSection.tsx: Renders a single worktree/archived group, collapse/expand, folder subtree, and group-level controls.SessionNodeItem.tsx: Renders one session row/tree node with inline metadata, menu actions, minimal/default variants, and nested children.ConfirmDialogs.tsx: Shared confirm dialog wrappers for session delete and folder delete flows.sortableItems.tsx: DnD sortable wrappers for project and group ordering plus project-row action affordances.sessionFolderDnd.tsx: Folder/session DnD scope and wrappers for dropping/moving sessions into folders.
Hooks
hooks/useSessionActions.ts: Centralizes session row actions (select/open, rename, share/unshare, archive/delete, confirmations).hooks/useSessionSearchEffects.ts: Handles search open/close UX and input focus behavior.hooks/useSessionPrefetch.ts: Prefetches messages for nearby/active sessions to improve perceived load speed.hooks/useSessionGrouping.ts: Builds grouped session structures and search text/filter helpers.hooks/useSessionSidebarSections.ts: Composes final per-project sections and group search metadata for rendering.hooks/useProjectSessionSelection.ts: Resolves active/current project-session selection logic and session-directory context.hooks/useGroupOrdering.ts: Applies persisted/custom group order with stable fallback ordering; archived groups are reorderable.hooks/useArchivedAutoFolders.ts: Maintains archived auto-folder structure and assignment behavior.hooks/useSidebarPersistence.ts: Persists sidebar UI state (expanded/collapsed/pinned/group order/active session) to storage + desktop settings.hooks/useProjectRepoStatus.ts: Tracks per-project git-repo state and root branch metadata.hooks/useProjectSessionLists.ts: Builds live and archived session lists for a given project (including worktrees + dedupe).hooks/useSessionFolderCleanup.ts: Cleans stale folder session IDs by reconciling known sessions/archived scopes.hooks/useStickyProjectHeaders.ts: Tracks which project headers are sticky/stuck viaIntersectionObserver.
Types and utilities
types.ts: Shared sidebar types (SessionNode,SessionGroup, summary/search metadata).activitySections.ts: Persisted top-section storage/helpers for the currentrecentsession list.utils.tsx: Shared sidebar utilities (path normalization, sorting, dedupe, archived scope keys, project relation checks, text highlight, labels, compact/default date formatting).