Files
openchamber/packages/ui/src/components/session/sidebar/DOCUMENTATION.md
T
bashrusakhandLeonid Skorobogatyy d909c43979 refactor(sidebar): remove dead directoryStatus probe artifact (#1660)
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>
2026-06-15 14:45:50 +03:00

4.6 KiB

Session Sidebar Documentation

Refactor result

  • SessionSidebar.tsx now acts mainly as orchestration; core logic moved to focused hooks/components.
  • Sidebar is now a single multi-project tree: recent top section, then projects, then worktrees/archived groups, then sessions.
  • NavRail is no longer part of sidebar/navigation flow.
  • Project headers now own root sessions directly; there is no separate rendered project root subgroup.
  • 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: useSessionGrouping funnels every non-archived session into the project's root group and emits no per-worktree subgroups (worktrees aren't registered in VS Code). getSessionsForProject buckets 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 passes showOnlyMainWorkspace/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 the recent section 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 via IntersectionObserver.

Types and utilities

  • types.ts: Shared sidebar types (SessionNode, SessionGroup, summary/search metadata).
  • activitySections.ts: Persisted top-section storage/helpers for the current recent session list.
  • utils.tsx: Shared sidebar utilities (path normalization, sorting, dedupe, archived scope keys, project relation checks, text highlight, labels, compact/default date formatting).