You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
add shared sidebar-width helpers and persist the preferred desktop sidebar width in the UI store
add a desktop-only draggable resize handle between the session list and main content pane
clamp rendered width against the current layout while preserving the stored preferred width across passive layout changes and harden drag lifecycle edge cases
Test Plan
cd frontend && npm test -- src/lib/components/layout/sidebar-width.test.ts src/lib/stores/ui.test.ts src/lib/components/layout/ThreeColumnLayout.test.ts
cd frontend && npm run build
git diff --check
local roborev 3-agent matrix review (codex, claude-code, gemini) on upstream/main..HEAD with no medium+ findings
cd frontend && npm run check
Existing unrelated upstream failures remain in:
Summary Verdict: The PR implements a persistent, resizable sidebar for the desktop layout, but requires a fix to correctly handle active resizing when the sidebar closes.
Problem: An
active resize is only cancelled when the viewport leaves desktop mode or the component unmounts. If ui.sidebarOpen becomes false during a drag, the handle is removed from the DOM but isResizing, the global pointer listeners, and body.sidebar-resizing remain active until a
later pointer event arrives, so a closed sidebar can still keep mutating ui.sidebarWidth.
Fix: Call stopResizing() when the sidebar closes and add a regression test that closes the sidebar mid-drag.
Verdict: The PR successfully implements a resizable sidebar with persistence, but contains a Medium severity breakpoint mismatch that needs to be addressed.
Problem: The new resize/persistence logic uses a 960px "desktop" breakpoint, but the layout CSS still switches to the mobile overlay only at 767px. Between 768px and 959px, the app remains in the desktop two-column layout while the sidebar width style is removed and the stored preference is ignored, so the "persisted sidebar width" feature silently stops working across that viewport range.
**
Fix:** Make the JS breakpoint match the actual layout breakpoint, or update the layout CSS to switch to the non-resizable/mobile behavior at 960px as well so the rendering and resize logic stay in sync.
Verdict: All reviewers agree the code is clean and introduces no issues.
The changes successfully implement a persistent, resizable sidebar layout with local storage persistence, bounded width clamping, and comprehensive pointer event handling without introducing any security or structural vulnerabilities.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test Plan
cd frontend && npm test -- src/lib/components/layout/sidebar-width.test.ts src/lib/stores/ui.test.ts src/lib/components/layout/ThreeColumnLayout.test.tscd frontend && npm run buildgit diff --checkcodex,claude-code,gemini) onupstream/main..HEADwith no medium+ findingscd frontend && npm run checkExisting unrelated upstream failures remain in:
frontend/src/lib/components/sidebar/SessionItem.sveltefrontend/src/lib/utils/tool-params.tsfrontend/src/lib/components/content/ToolBlock.test.tsfrontend/src/lib/utils/model.test.tsfrontend/src/lib/virtual/VirtualizerTest.sveltefrontend/src/lib/virtual/CacheTestWrapper.svelteCloses #218.