fix(ui): ten fixes in the agent rail and the schedules empty state (#2820)
This PR: - Fixes an issue with the agent details left sidebar app extension items not always being rendered. - Fixes content layout shift issues on the chat page so that loading feels smoother. - The rest are minor cosmetic fixes --- 🤖 Written by claude from here: Ten fixes in the agent rail and the schedules list. Each is independent, and none changes behaviour for a build with no extension installed. | # | Was | Now | |---|---|---| | 1 | `agentLinks.details` was built and never read, so "Agent Details" always led to the pair-keyed page | `agentHref` follows the declared link | | 2 | `newChatHref` would have followed it | Still the agent's own address — `/agents/:id/new` serves nothing | | 3 | Contributions got only a conversation id, so an entry vanished on the pair-only pages | `ExtensionAgentRailItemProps` also carries `pair` | | 4 | A collapsed rail cancelled a hardcoded `space(6)` gap | Measures the row's own `column-gap` | | 5 | `ConversationStateDot` drew a state that no longer varies | Removed, with the optimistic chain that fed it | | 6 | Agent Details, the card's second line and select-all arrived with the record, moving the rail | Drawn in place, inert, before it lands | | 7 | The rail's sticky offset assumed this app's own header | Reads `--agent-rail-sticky-top`, same default | | 8 | Schedules said "No schedules yet" and always reserved an 800px scroll floor | Says what it means; the floor needs rows | | 9 | New chat stood 2px shorter as a button than as the link it replaces | It keeps the row's own border, so the rail does not change height | | 10 | The example extension declared no `agentLinks` | It does, which is what gives these points browser coverage | ## Two worth a sentence **4** — `AgentChatPage` uses `gap: theme.space(2)`; the other three rail surfaces use `space(6)`. The rail cancelled 24px of an 8px gap, dragging the gutter past the left edge of the page and under the sidebar. **7** — a shell that replaces the header starts its content below its own chrome, so the default offset landed twice. The rail's wrapper is tall enough that it does not take a sticky offset while the short gutter does, so the two drifted apart rather than moving together. ## Testing ``` yarn typecheck clean yarn lint 0 errors yarn test 467 passed yarn test:pw 121 passed (chromium + chromium-with-extension) ``` Each new assertion fails with its own fix reverted. Firefox was not exercised; it is not installed on the machine this was written on. --- *🤖 written by Claude* --------- Signed-off-by: Nicholas Bucher <behappy54321@gmail.com>
N
Nicholas Bucher committed
e40e4fa46f999853b79981f82d7d2d5f19cd757e
Parent: 800015d
Committed by GitHub <noreply@github.com>
on 9/14/2026, 7:40:55 PM