feat(ui): checkpoint a chat turn, fork from a checkpoint, and duplicate a chat (#2775)
--- *๐ค written by Claude (start)* Checkpoint a turn in a chat, fork from a checkpoint, duplicate a chat, and the agent rail work that came out of using it. The Snapshots page and the `ListCheckpoints` change it needs are stacked on top, in #2798. ## Checkpoints and forks - The Checkpoint button beside Send saves the conversation's current turn boundary. It belongs on the composer rather than a message because `CreateCheckpoint` takes no cutoff โ what it saves is always "as it stands now" โ and it is disabled during a turn and once the latest boundary is saved. - A saved boundary is a line under the turn it was taken at, with `Fork` on it. The line is the promise: everything above it travels into a fork and nothing below it does. Matched by `headTaskId` against the turn each message carries, so the lines survive a reload. - `Duplicate chat` in each rail row's menu is a checkpoint of the conversation plus a fork of it, and the copy opens. - A fork refetches its own transcript rather than inheriting the page's, so it never shows its source's boundaries as its own. ## The agent rail Rows gained the room and the states they were missing: a menu on every row carrying Chat details and Share chat as well as rename, duplicate and delete; checkbox hover and press states; controls that line up whether or not the list scrolls. The three columns fold as the window narrows โ the agent panel at 1440, the application sidebar at antd's `xl`, the rail at 1040 โ and unfold again. The agent panel's drag handle is gone with `ResizableAside`: its wrapper clipped to a fixed width, so dragging widened an aside inside a box that never grew. The create buttons on the list pages are title-cased, which is unrelated to the rest and was asked for separately. ## Testing 1. `ENABLE_MOCK_UI=true yarn dev`, open a conversation, and press Checkpoint beside Send. A line appears under the last turn and is still there after a reload. 2. Press `Fork` on an early line. The fork opens holding what was above it and nothing below. 3. Open a rail row's menu and choose `Duplicate chat`. The copy opens with the whole transcript. 4. Narrow the window from wide: the agent panel folds, then the sidebar, then the rail. The reel in the comments shows this against a real cluster: two checkpoints three turns apart, a fork from each, and the earlier fork knowing only what was above its line. Reels about the Snapshots page moved with it to #2798 and are marked outdated here. --- *๐ค written by Claude (end)* --------- Signed-off-by: Nicholas Bucher <behappy54321@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
N
Nicholas Bucher committed
144ba331c997e70ebe2060bc7f3a6391c81ec0a9
Parent: 6a6b54f
Committed by GitHub <noreply@github.com>
on 9/11/2026, 1:14:22 PM