feat(app): Codex-style sidebar navigation with live thread status, settle and pins - #48526
feat(app): Codex-style sidebar navigation with live thread status, settle and pins#48526malek262 wants to merge 14 commits into
Conversation
- projector writes explicit null for time_archived/time_compacting so updates can clear them; drizzle .set() skips undefined fields - session update payload accepts null for time.archived to unarchive - listGlobal returns only archived rows when archived=true instead of dropping the filter entirely
Settings > General gains a Navigation select (Tabs default, Sidebar) that hides the titlebar tab strip on desktop widths and mounts a navigation sidebar next to the session pane. The sidebar lists projects with their active sessions, working indicators, unread badges, and hover actions; sessions idle past a configurable window settle into an expandable Settled section where they can be restored. Working, open, and current sessions always stay visible.
Reuses existing translated keys where semantics match and reduces the new key set to eight placeholder-free strings, then adds them to all 61 app locales so the i18n parity tests stay green. Also drops the plural family in favour of numeric day labels and fixes the archived row onOpen arity.
The sidebar navigation memo in the titlebar referenced the mobile media query before its const declaration, so the app crashed on launch with a temporal dead zone ReferenceError.
|
The following comment was made by an LLM, it may be inaccurate: Related PRs FoundPR #46670 - This PR is potentially related as it also adds sidebar navigation features for sessions in the app. While PR #48526 focuses on Codex-style sidebar with thread status and settling, PR #46670 addresses session history in the sidebar, which may overlap in scope or UI implementation. Note: The search shows PR #48526 (the current PR) is the primary match for most queries about sidebar navigation, suggesting this is a comprehensive feature that may have superseded or built upon earlier related work. |
For transparency: I read #46670 before opening this. It ships a history tree for everyone — replacing the tab strip outright, no settings flag, rows marked running vs inactive, rename and archive as the only row actions. This PR takes a different, opt-in approach and covers a wider ground:
|
Issue for this PR
N/A — feature proposal, no existing issue.
Type of change
What does this PR do?
Adds an optional persistent navigation sidebar (Settings → General → Navigation) as an
alternative to the title-bar tab strip. The tab mode stays the default and is untouched,
so this is purely additive.
The sidebar lists open projects with their threads (sessions) and keeps you aware of what
is happening without leaving the current chat:
Working <elapsed>while the model runs,Needs inputwhen aquestion or permission is waiting on you,
Donewhen a run finishes until you open it.configurable idle period — default 3 days). Settled threads are grouped per project
under a collapsible "Settled" section and can be restored. Working, open and pinned
threads are never auto-settled.
Delete — same actions as the built-in session menu, reflected live in the sidebar.
mod+shift+nopens a new thread in the current thread's project.cmd/ctrl+click, and open-tab indicators.
Server-side this relies on the existing archive timestamp: one small fix makes
time.archivedclearable (null) over HTTP and makesarchived=truereturn only archivedsessions instead of everything, which the Settled section uses.
Design credit: the concept (active-first sidebar with working/done states and settling)
was inspired by the Codex desktop app and T3 Code. Only the idea is borrowed — all code
here is written against this codebase's existing stores, components and i18n APIs.
How did you verify your code works?
bun typecheckclean in packages/app, packages/ui, packages/opencode, packages/core.on the same commits.
delete, share, export, auto-settle window and the tabs/sidebar switch all exercised.
for all locales (keys added to every locale file).
Screenshots / recordings
Checklist