Bundles the in-flight work into the second tagged release. See
CHANGELOG.md `[0.0.2] - 2026-05-15` for the full per-change list.
Highlights:
- libghostty-vt was building in zig's silent Debug default, capping
the full pipeline at 34-63 fps. Makefile now defaults to
ReleaseFast (.mise.toml pins zig 0.15.2 so the build is
reproducible). End-to-end pipeline now runs at 930-2030 fps —
27-32× faster, with 7-16× headroom over a 120 fps target.
- --debug[=DIR] and --profile[=DIR] flags capture full PTY logs,
pprof data, and per-hot-path metrics (chunks/sec, mean/max
latencies, cache hit rates) for offline analysis. Nothing
pollutes stdout/stderr.
- ASCII-video benchmark suite (8-colour / truecolor / Bad-Apple
patterns at 30/60/120 fps) plus a renderer microbenchmark set
for stable A/B comparisons across changes.
- Click-and-drag text selection from alt-screen TUIs (codex) now
works — host mouse mode follows the focused child's screen side
instead of being permanently armed.
- Long claude session resume + codex steady-state rendering pay
less per chunk: drawSidebar deferred to the chrome ticker,
emulator.Title CGO poll gated on a containsOSC scan.
- Vendor-TUI orientation: MCP initialize.instructions, the
spawn_agent tool description, and help('spawning') all spell
out the anti-patterns (shell-out, perl-into-socket) that
produced codex's stray top-level tabs.
This commit is contained in:
76
CHANGELOG.md
76
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
|
||||
|
||||
Reference in New Issue
Block a user