The /file route now renders Monaco instead of my hand-rolled FileLines component. That was a lot of hand-rolling to delete — syntax highlighting, folding and search all arrive for free, and the file viewer stops being the weakest part of the web UI.

The diff view got the same treatment in spirit. It’s now a per-session panel with a proper file tree down the side (DiffFileTree, with per-file line counts), a redesigned toolbar carrying file search, a change-type menu and a counts summary, and collapse state remembered per worktree through useCollapsedFiles — plus expand/collapse-all for when I just want the shape of a change. The chosen view type persists globally, so it stops resetting every time I open a different session. The top bar carries a diff link too, falling back to the branch diff via gitBranchInfo when a session has no commits of its own yet.

Around all that I redid the session card layout: cards are flat with a left accent rather than outlined boxes, laid out on a grid with a dedicated status gutter, and the sidebar is a fixed 400px instead of fighting the content for space.

Smaller pieces: the usage tooltip colours each limit row by how close it is to its threshold, using nextRateLimitStep to say when it resets; the PR preview chain split cleanly into Review and Post steps (chainAfterRaise); session titling defers when the prompt is only a tracker URL, since there’s nothing to summarise yet; and the shell command splitter finally handles heredocs and input redirects as separate cases instead of conflating them.