Repository navigation
merge: upstream herdrdev/herdr v0.9.3 (3d9d2b18) into patt/perf-graphics - #2
Closed
pattobrien wants to merge 517 commits into
Closed
pattobrien wants to merge 517 commits into
pattobrien wants to merge 517 commits into
Conversation
refs herdrdev#3922 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
) Codex's Windows input reader does not surface bracketed paste. It buffers the prompt as a paste burst and rewrites a following Enter into a newline until the burst idles out, so the previous size-based delay only reduced the chance of losing the submit. Append a non-character key after the paste so Codex flushes the burst synchronously, giving every prompt a deterministic submit boundary. refs herdrdev#3187
Native Windows lint and check only clippy-checked the herdr binary, while macOS and Linux run clippy across all targets. Enable --all-targets on Windows and gate the Unix-only test helpers that this exposed so Windows check matches the Unix one.
…drdev#3962) * fix(config): keep utf8 bom from breaking config reads and writes refs herdrdev#3678 * fix(config): only strip displaced boms when config is invalid refs herdrdev#3678 * fix(config): strip only boms the toml parser rejects refs herdrdev#3678
* fix(remote): show SSH authentication output refs herdrdev#3606 * test(remote): stabilize SSH authentication output regression refs herdrdev#3606 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
* ci: retain zig build caches across validation runs * ci: reduce debug information in validation builds * ci: build only the ghostty test target for scalar checks * ci: measure debug profiles and remove duplicate macos caching * ci: compare scalar build scopes on one runner * ci: keep the zig compiler path stable across runs * ci: run macos and windows lint alongside tests * ci: inspect remaining zig cache misses * ci: remove completed measurement probes * ci: compare windows linkers without changing release builds * ci: test linux incremental reuse and correct the linker probe * ci: measure windows incremental state reuse * test: verify incremental reuse after a source change * ci: finalize measured compiler cache optimizations
* fix: support opencode v2 lifecycle reporting * fix: repair Japanese docs * fix: ignore payload-less OpenCode events * fix: harden opencode v2 integration install and reporting Follow-ups on top of the V2 lifecycle support: - create `cli.json` when OpenCode has no V1 TUI preferences (`tui.json` or `kv.json`) to migrate, instead of only registering into an existing file - settle stalled socket attempts with a plain connect timer, and resend the latest lifecycle state after a failed delivery so the pane cannot get stuck - resolve the OpenCode state directory from `XDG_STATE_HOME` - remove the managed `herdr-opencode` directory on uninstall - document failed executions reporting `blocked`, keep the integration test environment independent of an inherited `XDG_STATE_HOME`, and simplify `reconcileBlockers` to reassign its map --------- Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
…erdrdev#3972) refs herdrdev#3948 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
refs herdrdev#3833 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
refs herdrdev#3314 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
* fix: honor space row gaps across machines refs herdrdev#3738 * test: cover scrolling with machine space gaps refs herdrdev#3738 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
* fix: avoid per-cell allocations in terminal text reads refs herdrdev#4506 * fix: preserve tight allocations for owned grapheme reads refs herdrdev#4506 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
* fix: stop hidden panes keeping a full-size screen copy from creation * fix: start new panes at their laid-out size refs herdrdev#4419
* test: isolate integration subprocesses from pane env refs herdrdev#4928 * test: cover pane env isolation for spawned servers refs herdrdev#4928 --------- Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com>
) refs herdrdev#4910 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
…4734) * fix: keep sidebar collapse clickable with agent scrollbars refs herdrdev#4692 * docs: document sidebar mouse handling and regression coverage refs herdrdev#4692
* fix: retain remote sidebar preferences across attaches refs herdrdev#4364 * test: cover remote preference identity handoff --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
) Bumps the github-actions group with 3 updates: [taiki-e/install-action](https://github.com/taiki-e/install-action), [cachix/install-nix-action](https://github.com/cachix/install-nix-action) and [softprops/action-gh-release](https://github.com/softprops/action-gh-release). Updates `taiki-e/install-action` from 2.81.9 to 2.87.22 - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](taiki-e/install-action@fd2f5e3...83ac0ad) Updates `cachix/install-nix-action` from 31.10.6 to 31.11.1 - [Release notes](https://github.com/cachix/install-nix-action/releases) - [Changelog](https://github.com/cachix/install-nix-action/blob/master/RELEASE.md) - [Commits](cachix/install-nix-action@8aa0397...13d8dd5) Updates `softprops/action-gh-release` from 3.0.0 to 3.0.3 - [Release notes](https://github.com/softprops/action-gh-release/releases) - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md) - [Commits](softprops/action-gh-release@b430933...efb3536) --- updated-dependencies: - dependency-name: taiki-e/install-action dependency-version: 2.87.22 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: cachix/install-nix-action dependency-version: 31.11.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: softprops/action-gh-release dependency-version: 3.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…dle for agy and grok (herdrdev#4959) refs herdrdev#3871 refs herdrdev#3530 refs herdrdev#4735 refs herdrdev#3419
…herdrdev#4964) * fix: keep agent sessions while the agent is suspended or backgrounded refs herdrdev#1647 refs herdrdev#1033 * fix: drop a suspended agent's session when a new one of its kind takes over refs herdrdev#1647
…h 3 updates (herdrdev#4955) Bumps the cargo-dependencies group with 3 updates in the / directory: [regex](https://github.com/rust-lang/regex), [serde](https://github.com/serde-rs/serde) and [futures-util](https://github.com/rust-lang/futures-rs). Updates `regex` from 1.12.3 to 1.13.1 - [Release notes](https://github.com/rust-lang/regex/releases) - [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md) - [Commits](rust-lang/regex@1.12.3...1.13.1) Updates `serde` from 1.0.228 to 1.0.229 - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](serde-rs/serde@v1.0.228...v1.0.229) Updates `futures-util` from 0.3.33 to 0.3.34 - [Release notes](https://github.com/rust-lang/futures-rs/releases) - [Changelog](https://github.com/rust-lang/futures-rs/blob/main/CHANGELOG.md) - [Commits](rust-lang/futures-rs@0.3.33...0.3.34) --- updated-dependencies: - dependency-name: futures-util dependency-version: 0.3.34 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo-dependencies - dependency-name: regex dependency-version: 1.13.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: cargo-dependencies - dependency-name: serde dependency-version: 1.0.229 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from e18b497796c12c097a38f9edb9d0641fb99eee32 to f0d9c3887740aee45f6153b24b3a6b815192ec16. - [Release notes](https://github.com/swatinem/rust-cache/releases) - [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md) - [Commits](Swatinem/rust-cache@e18b497...f0d9c38) --- updated-dependencies: - dependency-name: Swatinem/rust-cache dependency-version: f0d9c3887740aee45f6153b24b3a6b815192ec16 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix: keep the server alive when thread spawns fail refs herdrdev#3324 * fix: keep thread spawn fallbacks from dropping work refs herdrdev#3324 * fix: validate agent prompts before starting the waiter refs herdrdev#3324 * fix: retry failed startup git refresh without clients refs herdrdev#3324 * fix: time plugin commands from their exit refs herdrdev#3324 * fix: make plugin finish time test independent of load refs herdrdev#3324
…f-graphics Takes upstream for the SGR-pixels mouse fix (superseded by herdrdev#3295 in v0.9.1), the ui.sidebar.toggle api (the server no longer owns sidebar state since herdrdev#3487) and the client-side perf and pointer-shape hunks, which are re-expressed on the new client/graphics code in follow-up commits. Keeps the OSC 22 pane tracker, the bench harness and the pre-release version parsing. Claude-Session: https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx
Port of e3aa761 onto the upstream upload and transport split. - kitty_graphics: write_kitty_upload deflates raw RGB/RGBA inline uploads (o=z) when that shrinks them; PNG, small and incompressible payloads stay raw. The temp-file path keeps raw pixels for Ghostty. - client: server readers feed a dedicated two-slot channel consumed by the last arm of the biased Unix select (events::next_loop_event), so frame bursts block the reader and the server's render slot instead of queueing ahead of keystrokes. Windows keeps its existing channels. Claude-Session: https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx
… toggle cli fork-local: upstream keeps sidebar state in the client, so the server forwards the toggle to the foreground client as an endpoint control and the client runs the same path as the toggle_sidebar keybinding Claude-Session: https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx
Forward each pane's latest OSC 22 shape to client shells as an endpoint.pane-pointer-shape.v1 control, seed newly connected shells with the current shapes, and let the client resolve the hovered pane on every mouse move so the host cursor only changes when needed. The shape resets outside panes, outside terminal mode, when the endpoint is lost and on terminal restore. Claude-Session: https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx
Owner
Author
|
Superseded by #3: same tree, based on master so the diff is only the fork delta. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merges upstream
herdrdev/herdrmasterat3d9d2b18(tagsv0.8.2,v0.9.0,v0.9.1,v0.9.2,v0.9.3; 513 commits since the fork point346411fa=v0.8.0) intopatt/perf-graphics, then re-expresses the fork features that upstream's refactors broke.Upstream highlights in the range: the Herdr-specific
pane.graphics.*API is gone in favour of native Kitty rendering (herdrdev#4561); shell/sidebar rendering and hit-testing moved into the client (herdrdev#3487); multi-client tab views (herdrdev#3526); SGR-pixels mouse reporting fixed (herdrdev#3295, v0.9.1); preview release channel; libghostty-vt extracted intocrates/ghostty-vt(herdrdev#4661) and the vendored source now needs Zig 0.16.0.Audit of fork-only commits
e3aa7611perf: fix second-long input lag while kitty graphics panes streamo=zupload compression upstream (flate2only transitive); the one attempt, herdrdev#3934, was closed by the contributor gate. herdrdev#4561 added temp-file delivery but gates it toTERM_PROGRAM=ghostty; Kitty hosts still get inline base64. Unix client still shares one 256-slot channel for stdin and server frames (src/client/mod.rs:514); upstream fixed the same backpressure only on Windows. Related open issues herdrdev#3877, herdrdev#3783.cab7a8a1:write_kitty_uploadinsrc/kitty_graphics.rsused by the inline branch ofsrc/client/frame_output.rs; dedicated 2-slot server-frame channel consumed by the last arm of the biased select insrc/client/events.rs::next_loop_event.dd536e00bench: add input-latency harness and v0.8.0 vs fork resultsbench/upstream; harness drives standard kitty escapes through the PTY (path herdrdev#4561 kept);experimental.kitty_graphics,experimental.allow_nestedand therender.proflog line still exist.results-*.jsonand the README table are stale vs 0.9.3.e930c6a1fix: tolerate pre-release suffix when parsing versionsVersion::parseinsrc/update.rsis byte-identical upstream;Version::current()still panics onX.Y.Z-suffix. Upstream's supported path isHERDR_BUILD_CHANNEL/HERDR_BUILD_IDat build time (build_info::version(),.github/workflows/preview.yml:163).HERDR_BUILD_CHANNEL=graphics HERDR_BUILD_ID=Nwith a plainCargo.tomlversion.fa65372240a856ec0f0aa005134c42fbrelease: v0.8.0-graphics.1..4Cargo.tomlis0.9.3.0.9.3; the next fork release picks its own string.21511f34fix: report real pixel coordinates to SGR-pixels mouse panesPositionon the encoder), 3a822e8 herdrdev#3637 (MOUSE_FORMAT_SGR_PIXELS), 9631f8e herdrdev#4045, b0c05e6 herdrdev#4140.src/ghostty/mod.rsbecamecrates/ghostty-vt/src/lib.rs(fff6c82 herdrdev#4661). Upstream testghostty_mouse_sgr_pixels_preserves_exact_and_downgrades_cell_inputasserts the cell-input downgrade the fork had replaced.src/pane/input.rs, the mouse hunks ofsrc/pane/terminal.rs, andcrates/ghostty-vt/src/lib.rs(git had carriedcell_size_pxacross the rename).ae7575ebfeat: mirror pane OSC 22 pointer shapes on the host cursorgh searchempty; herdrdev#116/herdrdev#117 are DECSCUSR text-cursor). Host half broken by 207be3c herdrdev#3487 (hit-testing andModemoved to the client shell;src/app/input/mouse.rsdeleted) and the frozenServerMessagevariant order.cca140a3via anendpoint.pane-pointer-shape.v1EndpointControlmessage and a client-shell hover resolver (src/client/shell/pointer_shape.rs).PROTOCOL_VERSIONuntouched.aef49f7dfeat: add ui.sidebar.toggle api method and herdr sidebar toggle clisidebar_collapsedlives only insrc/client/shell/*since 207be3c herdrdev#3487, so the fork's server-side flip no longer compiles. Noui.*namespace upstream;command.invokeonly resolves custom commands. herdrdev#1623 closed NOT_PLANNED, discussion herdrdev#1624 open.docs/next/api/herdr-api.schema.jsonis generated (generated_protocol_schema_artifact_is_current).ebdf55fdon theclient.window_title.*intercept pattern: methodclient.sidebar.toggle, CLIherdr terminal sidebar toggle(whatscripts/herdr-worktree-menualready calls), pushed to the foreground client asendpoint.sidebar-toggle.v1.opentui_256_palette_query_burst_uses_host_snapshot(src/pane/terminal.rs)346411faandupstream/master. The only palette-adjacent upstream change, f83980d herdrdev#2162 (OSC 4 overrides), does not touch the query-burst path.Conflicts resolved
15 conflicted paths in
cf614e08:Cargo.toml,Cargo.lock: upstream (0.9.3, workspace withcrates/ghostty-vt).src/pane/input.rs,src/kitty_graphics.rs,src/client/mod.rs,src/server/headless.rs,src/protocol/wire.rs,src/api/schema.rs,src/api/schema/response.rs,src/api/server.rs,docs/next/api/herdr-api.schema.json: upstream; the fork hunks were either superseded or re-expressed in the three follow-up commits.src/app/input/mouse.rs: deleted (upstream removed it).src/events.rs,src/app/actions.rs: keptPanePointerShape, droppedPrefixInputSource(removed upstream).src/pane/terminal.rs: upstream for the mouse-encoder region and the renamed tests; keptprocess_pty_bytes_surfaces_pointer_shape_changes; removed the fork's two SGR-pixel tests.src/app/api.rs,src/cli.rs,src/app/state.rs,src/app/mod.rs,crates/ghostty-vt/src/lib.rs.cca140a3afterebdf55fdconflicted additively insrc/client/endpoint/control.rs,src/protocol/endpoint.rs,src/client/mod.rs(both added an endpoint-control kind, decoder arm and client handler); both sides kept.Evidence
patt/perf-graphicsat134c42fbbuilds against v0.8.0;git merge upstream/masterstops with 15 conflicted paths, and the fork's SGR-pixels andui.sidebar.togglehunks no longer compile against the client-rendered shell.After:
cca140a3on this branch:cargo fmt --check: clean.cargo clippy --all-targets --locked -- -D warningson the repo-pinned toolchain (1.96.1 viarust-toolchain.toml;RUSTUP_TOOLCHAINunset): clean.cargo-nextestis not installed and under plaincargo testupstream'splatform::unix_commontest resets SIGPIPE in-process, after whichserver::client_transport::...write_failurekills the whole binary; nextest's per-test processes hide this): 3,593/3,593 bin tests pass, 72/72 lib tests pass. Touched modules re-run on the final tree: client 668, server 309, protocol 156, kitty_graphics 46, api 314, cli 107, pane 381, terminal 286, update 78, app 480, events 3, terminal_effects 3; 0 failures.cargo test --test '*' -- --test-threads=1): 17 binaries, 140 tests, 0 failures (api_ping 13, client_mode 27, cross_area 10, detach_reattach 13, live_handoff 23, machine_setup 11, multi_client 9, remote_attach 1, server_headless 18, session_delete 6, session_restore 6, broken_pipe 3).cargo build --release --locked: ok.herdr --session merge-smoke(isolatedXDG_CONFIG_HOME/XDG_STATE_HOME,HERDR_*scrubbed, kitty-replying pty host) against the release binary:New tests added by the three feature commits:
kitty_graphics::tests::{large_raw_uploads_are_deflated_and_round_trip, png_and_small_uploads_stay_raw, incompressible_raw_uploads_stay_raw},client::events::tests::input_is_delivered_before_queued_server_frames,api::schema::tests::client_sidebar_toggle_request_round_trips,client::endpoint::control::tests::{sidebar_toggle_optional_control_round_trips, pane_pointer_shape_optional_control_round_trips},client::shell::tests::chrome_context::toggle_sidebar_flips_the_collapsed_state_and_requests_a_resize,server::headless::tests::{sidebar_toggle_api_reaches_the_foreground_client, sidebar_toggle_api_reports_no_foreground_client},client::shell::tests::pointer_shape::*.Note: the plugin pane did not show up in
herdr pane list(count stayed at 1) even thoughplugin pane openreturned a pane object withfocused: false; the stock 0.9.3 binary was not checked for the same listing behaviour. The--no-focusclaim rests on the response and the unchanged focused pane id.Note: the fork's OSC 22 host-cursor mirroring and the input-latency fix were verified by unit tests only; no interactive latency measurement was repeated on this branch.
Merge Danger
Door: two-way
Plain merge commit plus three feature commits on a fork branch;
git revert -m 1 cf614e08or resettingpatt/perf-graphicsto134c42fbrestores the previous release line. Upstreammasteron the fork was fast-forwarded separately (e7c96206..3d9d2b18).Blast Radius: fork-wide
pane.graphics.*API (feat!: replace the custom graphics api with optimized native kitty rendering herdrdev/herdr#4561) and the client-rendered shell (refactor: render the shell in the client herdrdev/herdr#3487).Cargo.tomlis now0.9.3; a fork binary built from this branch reports0.9.3and the stable updater will offer herdrdev's 0.9.4 when it ships. Decide between the suffixed version (keepe930c6a1) andHERDR_BUILD_CHANNEL=graphicsbefore the next fork release.vendor/libghostty-vt/build.zig.zon, upstream CI);mise install zig@0.16.0andZIG=~/.local/share/mise/installs/zig/0.16.0/bin/zig cargo build --release.patt/api-first-read-poll(7a8a5ad7) now conflicts withmasterinsrc/api/server.rs:git merge-treeshows upstream'sssh_agent_registration_lasts_only_for_the_api_connectiontest (3602c75 fix: refresh forwarded ssh agents after reconnect herdrdev/herdr#4443) landing where the cherry-pick addsinitial_request_line_arriving_after_accept_is_read_without_poll_delay; 18 upstream commits touched that file (fix: keep api listener alive after transient accept errors herdrdev/herdr#4659 accept-error handling, fix: keep the server alive when thread spawns fail herdrdev/herdr#4958/fix: keep the server running on hangup and log why it stops herdrdev/herdr#4965 server liveness), so that PR needs a rebase and a re-check that the read-loop change still applies.Follow-ups
e930c6a1once fork releases useHERDR_BUILD_CHANNEL/HERDR_BUILD_ID.bench/results-*.jsonagainst this branch; the fork numbers predate fix: keep offscreen kitty images loaded instead of resending them on scroll herdrdev/herdr#4686/perf: send scrolling pane output as row shifts and skip blank cells herdrdev/herdr#4711.client.sidebar.toggledocs were not written.https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx