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]
|
## [Unreleased]
|
||||||
|
|
||||||
### Fixed
|
## [0.0.2] - 2026-05-15
|
||||||
- `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`.
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- `.mise.toml` pinning `zig = "0.15.2"` (the minimum version the
|
- `.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
|
Pipeline_ASCIIVideo_* set includes libghostty-vt's em.Write CGO
|
||||||
and an io.Discard stdout write so the FPS claim reflects the
|
and an io.Discard stdout write so the FPS claim reflects the
|
||||||
whole pipeline, not just the renderer.
|
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
|
- MCP `initialize.instructions`, the `spawn_agent` tool description
|
||||||
(visible to LLMs via `tools/list`), and the `help('spawning')`
|
(visible to LLMs via `tools/list`), and the `help('spawning')`
|
||||||
topic now spell out — in the three places vendor TUIs actually
|
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.
|
renders the canonical `--flag` form.
|
||||||
|
|
||||||
### Fixed
|
### 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
|
- Exited terminal panes (kind `terminal`, including those launched via
|
||||||
the new "New Terminal" palette entry or MCP `spawn_process` with
|
the new "New Terminal" palette entry or MCP `spawn_process` with
|
||||||
`kind=terminal`) are now removed from the session and the Processes
|
`kind=terminal`) are now removed from the session and the Processes
|
||||||
|
|||||||
Reference in New Issue
Block a user