From 1d3c4576ff00fce561a61962e0fb0752f8381599 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Tue, 20 Oct 2026 21:08:00 -0700 Subject: [PATCH] Hide duplicate snapshot lines and the turn-end line before a snapshot --- docs/operations.md | 2 +- mac/Sources/Byre/Chat.swift | 28 ++++++++++++------------ mac/Sources/Byre/TranscriptBuilder.swift | 14 ++++++++++-- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/docs/operations.md b/docs/operations.md index 10dcd13..0e4d500 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -454,7 +454,7 @@ Merging or discarding a task stops new snapshots for it, waits for one in progre `GET /api/tasks/{taskId}/changes?snapshot=` reports a snapshot instead of the live worktree: its `tree` is the snapshot's tree, and `base` is the merge-base of the snapshot's commit and the default branch, or with `step=true` the previous snapshot's tree (for snapshot 1, the same merge-base: the snapshot commit's parent is the worktree's `HEAD`, which already holds whatever byre committed at the end of the turn). It reads the stored shas, so it works only while the task is active and its refs keep the objects; `since` with `snapshot` is a 400. `GET /api/tasks/{taskId}/diff` takes that `base` and `tree` as usual. -The transcript is the timeline. The UI learns a task's snapshots from the `snapshot.created` events in its transcript (`snapshots` in `mac/Sources/Byre/Store.swift`). A snapshot is a point between the agent's events, not part of one, so each gets its own row in the transcript, a divider reading `snapshot #n` (its trigger and time in the tooltip), placed where its `snapshot.created` event falls in the task's event order: just after the turn end it belongs to (after the triggering text for an old `message` snapshot). A snapshot row ends the current group of tool calls, so calls after it start a new group. The row's **changes** button pins the snapshot (`Store.pinned`, cleared when the selected task changes) and switches the right pane to the Changes tab; its **fork** button forks it (see "Forking") and points the right pane at the new task. Pinned, the Changes header reads `snapshot · ·