feat: session-first sidebar, compact context ring, and warm light theme for the Control UI#99289
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 3, 2026, 2:57 AM ET / 06:57 UTC. Summary PR surface: Source +291, Tests -357, Docs +2. Total -64 across 64 files. Reproducibility: not applicable. this is a Control UI feature/UX PR rather than a broken-behavior report. The changed behavior is traceable in PR-head source and directly shown by before/after screenshots. Review metrics: 2 noteworthy metrics.
Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Let maintainers decide whether the session-first sidebar and warm light palette should become the default Control UI experience, then land only after the current CI failure is cleared. Do we have a high-confidence way to reproduce the issue? Not applicable; this is a Control UI feature/UX PR rather than a broken-behavior report. The changed behavior is traceable in PR-head source and directly shown by before/after screenshots. Is this the best way to solve the issue? Mostly yes; the branch uses existing Control UI session APIs and keeps hydration/session-row invariants near the session/controller boundary. Final acceptance is a maintainer product decision because the PR changes defaults and primary navigation. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against e878efe9508e. Label changesLabel justifications:
Evidence reviewedPR surface: Source +291, Tests -357, Docs +2. Total -64 across 64 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
d512327 to
32c6734
Compare
|
Merged via squash.
|
…me for the Control UI (openclaw#99289) * feat(ui): session-first sidebar, context ring, and warm light theme for Control UI * test(ui): drop unnecessary non-null assertion in sidebar recents test
Closes #99288
What Problem This Solves
Selecting and switching sessions — the most frequent operator action in the Control UI — was buried under a 14-tab page nav, a small dropdown select, and a 5-row recents list that stayed empty on a cold
/chatload (sessions only loaded on other tabs). Session context usage occupied a full-width pill above the composer, the default light theme used a severe alarm-red accent on cool gray, and the composer chrome was heavier than it needed to be.Why This Change Was Made
Rebuilds the sidebar around sessions (Codex/Claude-desktop style) and calms the rest of the chat surface: recents become the primary chat entry (10 rows, one-line, relative timestamps, active session always listed), the full session picker (search + pagination) moves behind a compact search button, sessions hydrate on cold chat boot, the context pill becomes a small ring dial in the composer toolbar, and the default light palette shifts to warm paper with an AA-audited terracotta accent (
#bd4531, 4.9:1 on bg; text 10.4:1; muted 5.2:1). The chat nav group is dropped from the expanded sidebar since the session list is chat (the collapsed rail keeps its icon). Dead paths this replaces are deleted (sidebar dropdown select,sessionSwitcherOnly/compactpicker variants, unused sidebar-search CSS): net −64 lines overall (−~500 non-generated source LOC; regenerated i18n bundles account for the rest).Non-goals: dark palette (unchanged), mobile drawer controls, the Sessions tab, theme families (Knot/Dash untouched).
User Impact
+ New session, RECENT list (10, one-line rows, live-run dot), session search button opening the full picker,All sessions →, tighter nav below. Recents populate immediately on a cold/chatload.base.css).OpenClaw › OpenClawwhen the agent is named OpenClaw; sidebar brand drops theCONTROLeyebrow.backgroundHydrateload: it does not take the shared loading flag (New Session stays enabled), does not reconcile chat-run state (a stale snapshot racing a send cannot clear the live stream), preserves the selected session's row across capped/filtered pages within its agent scope, and is not fooled by the single-row resultchat.startupseeds.Evidence
Before/after screenshots (light + dark) below, captured with the repo's mocked-gateway E2E harness and synthetic fixture data; assets published via the Crabbox artifact store.
Before / after (light)
Before / after (dark)
Artifact manifest: https://artifacts.openclaw.ai/pr/openclaw-99289/artifact-manifest.json
pnpm tsgo:test:uicleanpnpm ui:buildclean;pnpm ui:i18n:checkclean; touched filesoxfmt --checkcleangpt-5.5), 15 iterative passes: 14 accepted findings fixed along the way (agent filter, chat-entry navigation, pinned-row invariants, alias-scope gating, background-hydrate races, mobile-drawer collapsed state, quota surface); final pass clean — "no accepted/actionable findings, patch is correct".