diff --git a/CHANGELOG.md b/CHANGELOG.md index f484e0a..4133093 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,19 +6,7 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -### Fixed -- `make deps` now builds libghostty-vt with `-Doptimize=ReleaseFast` - instead of zig's silent `Debug` default, and resolves `zig` - through `mise` when a project `.mise.toml` pins it. The - default-Debug build shipped an unoptimised CSI/SGR parser that - ate 16-29 ms per 30-70 KiB full-screen frame in benchmarks, - capping the entire PTY-to-host pipeline at 34-63 fps. After the - rebuild the same pipeline runs at **930-2030 fps**: 27-32× the - prior throughput, and 7-16× margin over 120 fps for full-screen - truecolor ASCII video. Static library size drops from 33 MiB to - 13 MiB. Override with `make deps GHOSTTY_VT_OPTIMIZE=Debug` only - when debugging the upstream library itself. Apply on existing - checkouts with `mise install && make clean-deps && make deps`. +## [0.0.2] - 2026-05-15 ### Added - `.mise.toml` pinning `zig = "0.15.2"` (the minimum version the @@ -36,33 +24,6 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Pipeline_ASCIIVideo_* set includes libghostty-vt's em.Write CGO and an io.Discard stdout write so the FPS claim reflects the whole pipeline, not just the renderer. - -### Fixed -- Long claude session resume (and codex steady-state rendering) is - noticeably faster. Two costs that scaled per-PTY-chunk are now - deferred or short-circuited: (1) `drawSidebar()` used to run - synchronously for every chunk that scrolled — on a session - resume where every chunk scrolls, this rebuilt the full sidebar - string hundreds of times for a frame that was almost always - cache-equal. The sidebar now signals dirty and the chrome ticker - (60 Hz) handles the repaint. (2) `pumpChild` polled the - emulator's OSC title after every PTY chunk via CGO, even for - chunks (the common case under codex/ratatui) that carry no OSC - bytes at all. The poll is now gated on a containsOSC scan over - the chunk. -- Click-and-drag text selection from alt-screen TUIs (codex in - particular) now works. Patterm used to keep host SGR mouse - reporting armed continuously, which forced the host terminal to - forward every click as an escape sequence and prevented native - selection. The host's mouse mode now follows the focused child's - screen side: primary-screen children keep mouse armed (so wheel - scrollback works), alt-screen children get host mouse disabled by - default. Alt-screen TUIs that need mouse events (vim, less, etc.) - re-enable mouse-mode themselves; the viewport renderer forwards - those toggles to the host while the child is on alt. Leaving alt - re-arms host mouse reporting so wheel scrollback resumes. - -### Added - MCP `initialize.instructions`, the `spawn_agent` tool description (visible to LLMs via `tools/list`), and the `help('spawning')` topic now spell out — in the three places vendor TUIs actually @@ -220,6 +181,41 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). renders the canonical `--flag` form. ### Fixed +- `make deps` now builds libghostty-vt with `-Doptimize=ReleaseFast` + instead of zig's silent `Debug` default, and resolves `zig` + through `mise` when a project `.mise.toml` pins it. The + default-Debug build shipped an unoptimised CSI/SGR parser that + ate 16-29 ms per 30-70 KiB full-screen frame in benchmarks, + capping the entire PTY-to-host pipeline at 34-63 fps. After the + rebuild the same pipeline runs at **930-2030 fps**: 27-32× the + prior throughput, and 7-16× margin over 120 fps for full-screen + truecolor ASCII video. Static library size drops from 33 MiB to + 13 MiB. Override with `make deps GHOSTTY_VT_OPTIMIZE=Debug` only + when debugging the upstream library itself. Apply on existing + checkouts with `mise install && make clean-deps && make deps`. +- Long claude session resume (and codex steady-state rendering) is + noticeably faster. Two costs that scaled per-PTY-chunk are now + deferred or short-circuited: (1) `drawSidebar()` used to run + synchronously for every chunk that scrolled — on a session + resume where every chunk scrolls, this rebuilt the full sidebar + string hundreds of times for a frame that was almost always + cache-equal. The sidebar now signals dirty and the chrome ticker + (60 Hz) handles the repaint. (2) `pumpChild` polled the + emulator's OSC title after every PTY chunk via CGO, even for + chunks (the common case under codex/ratatui) that carry no OSC + bytes at all. The poll is now gated on a containsOSC scan over + the chunk. +- Click-and-drag text selection from alt-screen TUIs (codex in + particular) now works. Patterm used to keep host SGR mouse + reporting armed continuously, which forced the host terminal to + forward every click as an escape sequence and prevented native + selection. The host's mouse mode now follows the focused child's + screen side: primary-screen children keep mouse armed (so wheel + scrollback works), alt-screen children get host mouse disabled by + default. Alt-screen TUIs that need mouse events (vim, less, etc.) + re-enable mouse-mode themselves; the viewport renderer forwards + those toggles to the host while the child is on alt. Leaving alt + re-arms host mouse reporting so wheel scrollback resumes. - Exited terminal panes (kind `terminal`, including those launched via the new "New Terminal" palette entry or MCP `spawn_process` with `kind=terminal`) are now removed from the session and the Processes