v2.18.0
What's changed
- Undo/redo snapshot repositories no longer keep a second full copy of your workspace. New snapshot repos borrow objects from the workspace repository instead of duplicating them, and every snapshot is anchored by a ref so background repacking can never drop a live undo point. Existing repos are not retroactively deduplicated; because snapshots borrow from the workspace repo, rewriting its history or running
git gc --prune=nowcan make a restore fail instead of silently corrupting it, andSNAPSHOT_SEED_OBJECTS=falserestores self-contained repos. - Snapshot repos are now pruned in the background: snapshots that no message references are reclaimed, and a per-session size cap (
SNAPSHOT_MAX_BYTES, default 256 MiB) drops the oldest snapshots once a repo outgrows it. Undone turns keep their snapshots so redo continues to work; /undo to a snapshot already reclaimed by the cap returns the existing 409. openagentd cleanup --apply --vacuumrebuilds the SQLite database so pages freed by the deleted rows are returned to disk in a single step. A lock held by a running server is reported instead of failing the pass, and dry runs never touch the file.- Desktop windows keep their own theme preference across reloads. Previously a reload dropped the per-window scope, so reloaded windows shared one theme key and a theme change in one window propagated to the others; the same fix restores the per-window last-route scope.
- Proposed plans in the transcript now render with the same font size, leading, and paragraph rhythm as normal assistant responses.
- The transcript scroll-to-bottom / attach-to-stream control is a consistent 28px at every breakpoint, with press feedback on touch.
Full changelog: v2.17.0...v2.18.0