Skip to content

chore(upstream): merge herdr v0.9.5 - #17

Merged
jsonMartin merged 83 commits into
mainfrom
upstream-sync/v0.9.5
Oct 15, 2026
Merged

jsonMartin merged 83 commits into
mainfrom
upstream-sync/v0.9.5

Conversation

@jsonMartin

Copy link
Copy Markdown
Owner

Summary

Merges Herdr v0.9.5 (which includes v0.9.4) into Superherdr, ahead of the superherdr-v0.9.5.1 release. Built with scripts/sync_upstream.sh v0.9.5 --report, conflicts resolved by hand.

Conflict resolutions

  • Cargo.toml / Cargo.lock: kept superherdr package identity, took upstream's dependency changes (new windows dep), version bumped to Herdr base 0.9.5; cargo update -p superherdr --offline clean.
  • src/client/shell/sidebar.rs: upstream's #4772 worktree-group fix (strict parent/child: all non-linked members are parents, children are linked worktrees only) merged with Focus/Snooze visibility filtering; hidden repository parents still promote their visible linked children flat.
  • src/client/shell/context_menu.rs: upstream's close_group plumbing (conditional Close/Close group label, request_workspace_close, workspace_close_is_group) merged into Superherdr's unified snooze/focus menu arm.
  • src/client/shell_runtime.rs: Superherdr's inactive-endpoint shared-snooze queueing kept; upstream's pre-fence WorkspaceFocus allowance folded into the same filter.
  • src/client/input.rs, src/raw_input.rs: took upstream wholesale (fork never modified these files; conflicts were inherited-v0.9.3 content vs upstream's v0.9.5 input rework).
  • src/server/{mod,headless}.rs: kept both module lines (our snooze_store, upstream's new shutdown).
  • src/client/shell/mouse.rs: kept our focus/snooze hit handlers (upstream changed nothing in the hunk).

Excluded paths dropped per .upstream-sync/exclude; upstream edits to Superherdr-owned files reviewed — only CHANGELOG.md needed porting (inherited 0.9.4/0.9.5 sections); CI action bumps are covered by the open dependabot PRs; upstream's Windows-only justfile recipes and docs-versioning prose don't apply to the fork.

Release chores in this PR

  • Version: Herdr base 0.9.5 + SUPERHERDR_REVISION = 1 → superherdr 0.9.5.1.
  • CHANGELOG.md: new 0.9.5.1 section (fork-relevant curation) plus inherited 0.9.4 and 0.9.5 bodies ported from upstream's changelog.
  • src/client/shell/tests/startup_overlays.rs: the release-notes modal title pin updated v0.9.3.1 → v0.9.5.1 (title renders the compiled version; required on every base bump).

Verification

On hotrod (Linux x86_64), Zig 0.16.0 installed via mise (CONTRIBUTING prerequisite that was missing on this machine):

  • cargo fmt --check — clean
  • cargo clippy --all-targets --locked -- -D warnings — clean
  • cargo nextest run --locked (full suite) — 4183 run: 4182 passed + 1 version-pin test fixed in this PR, then green; 16 skipped
  • python3 -m unittest maintenance suites (agent-detection manifest, hermes asset, conpty packaging, sync-upstream, unix installer, vendored libghostty-vt, portable-pty, windows input) — 97 tests OK
  • python3 -m unittest scripts.test_ui_hot_path_architecture — OK
  • bun test src/integration/assets/... — 55 pass, 0 fail
  • bunx @fission-ai/openspec validate --all --strict — 6 passed, 0 failed
  • scripts/sync_upstream.sh --check — exclusions ok

Merge with Create a merge commit so upstream ancestry is preserved for the next sync.

JJLiebig and others added 30 commits September 29, 2026 14:05
refs #4725

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
refs #4749

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
* fix: keep escape-prefixed terminal key bindings intact

refs #4751

* test: cover escape-prefixed option+backspace binding

refs #4751
* fix: avoid per-cell allocations in terminal text reads

refs #4506

* fix: preserve tight allocations for owned grapheme reads

refs #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 #4419
* test: isolate integration subprocesses from pane env

refs #4928

* test: cover pane env isolation for spawned servers

refs #4928

---------

Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com>
refs #4910

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
ogulcancelik and others added 27 commits October 8, 2026 22:15
* fix: deliver quick esc taps on macos with kitty keyboard

refs #1266

* test: cover esc splitting edge cases under the macos input policy

refs #1266
* fix: stop waiting forever for an unfinished host color reply

refs #5052

* fix: keep input that follows an unfinished host color reply

refs #5052

* fix: drop an unfinished host color reply after an idle timeout

refs #5052
* fix: map non-latin layout ctrl chords to their base keys

refs #1079

* fix: keep us shifted symbols for non-latin punctuation chords

* fix: limit base-key chords to non-latin scripts and skip altgr-like ctrl+alt

* fix: recover shifted key alternates from vt bytes on windows input

* fix: cover cherokee, syllabics, mongolian and nearby scripts in base-key chords

* fix: cover lowercase cherokee supplement in base-key chords

* fix: only reparse windows vt keys that carry a shifted kitty alternate

* fix: match ghostty for layout ctrl chords and drop extra rewrites

* fix: keep shift-implied layout ctrl chords on the layout key

* fix: pair layout chord releases when modifiers change first

* fix: lease layout ctrl chords by their reported key
* fix: open goto search on shifted slash in report-all panes

refs #4963

* fix: use the typed character for overlay slash and text shortcuts

refs #4963

* fix: require typed evidence for a shifted slash in goto

refs #4963
* fix: reduce interactive pane echo latency

refs #4884

* fix: preserve accepted input priority and skip unchanged cursor writes

refs #4884
* fix: restore keyboard protocol flags after a terminal reconnect

refs #4985

* test: cover keyboard protocol refresh with an outer kitty mode

refs #4985
* fix: save sessions before agents die during macos restart

refs #4414

* fix: keep macos shutdown detection ordered across handoff

refs #4414

* fix: avoid aliasing the macos notify block

refs #4414

* test: make macos shutdown ordering tests deterministic

refs #4414
refs #4950

Co-authored-by: Can Celik <ogulcancelik@gmail.com>
* fix: keep sgr pixel mouse units consistent

refs #3675

* fix: keep starting when the host leaves pixel mouse mode set

refs #3675

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
refs #5255

(cherry picked from commit f53f92dd40d5c21b36b4cca209cffeb91b69cd0e)
refs #4507

(cherry picked from commit 287da8072ff8363f406f5d8c4e52fd3227eea58e)
refs #4573

(cherry picked from commit 9c38bbc64e3b7a23176afb2451a067a53fb8d2fd)
portable-pty's Windows search_path accepted any existing candidate, so a directory on PATH whose name matched the program shadowed the real executable and CreateProcessW failed with os error 5. Require a regular file for both the exact name and the PATHEXT candidates.

refs #5267

(cherry picked from commit 576dd3670dedbfe64463851a4da065bf66f4fa5d)
Every bundled Windows PowerShell hook read its hook JSON with
`[Console]::In.ReadToEnd()`, which decodes stdin using the process console
input code page instead of UTF-8. On Korean Windows (CP949) that corrupts
the payload, `ConvertFrom-Json` throws, and the hook silently exits without
reporting the session. Read the raw stdin stream as UTF-8 (BOM-aware) in
every PowerShell hook and bump the affected integration versions.

refs #5253

(cherry picked from commit 00584a279427fb6c1af418c8cb4588376d7df089)
PowerShell serializes progress records such as module auto-loading's
"Preparing modules for first use." to the stderr CLIXML stream when stderr is
redirected under `-EncodedCommand`, and Herdr forwards that stderr during
interactive remote setup. Set `$ProgressPreference = 'SilentlyContinue'` in the
shared Windows PowerShell preamble so `machine add` and `--remote` no longer
print raw CLIXML records.

refs #4639

(cherry picked from commit 8a20d0b7b5fbce8559c6fb916c506176014d3a82)
…-sync/v0.9.5

# Conflicts:
#	.github/workflows/ci.yml
#	.github/workflows/preview.yml
#	.github/workflows/release.yml
#	AGENTS.md
#	CHANGELOG.md
#	Cargo.lock
#	Cargo.toml
#	README.md
#	README.zh-CN.md
#	docs/next/CHANGELOG.md
#	docs/next/README.md
#	docs/next/README.zh-CN.md
#	docs/next/website/src/content/docs/add-herdr-support.mdx
#	docs/next/website/src/content/docs/agents.mdx
#	docs/next/website/src/content/docs/cli-reference.mdx
#	docs/next/website/src/content/docs/configuration.mdx
#	docs/next/website/src/content/docs/integrations.mdx
#	docs/next/website/src/content/docs/ja/add-herdr-support.mdx
#	docs/next/website/src/content/docs/ja/agent-automation.mdx
#	docs/next/website/src/content/docs/ja/agents.mdx
#	docs/next/website/src/content/docs/ja/cli-reference.mdx
#	docs/next/website/src/content/docs/ja/configuration.mdx
#	docs/next/website/src/content/docs/ja/connecting-machines.mdx
#	docs/next/website/src/content/docs/ja/install.mdx
#	docs/next/website/src/content/docs/ja/integrations.mdx
#	docs/next/website/src/content/docs/ja/keyboard.mdx
#	docs/next/website/src/content/docs/ja/persistence-remote.mdx
#	docs/next/website/src/content/docs/ja/plugins.mdx
#	docs/next/website/src/content/docs/ja/quick-start.mdx
#	docs/next/website/src/content/docs/ja/socket-api.mdx
#	docs/next/website/src/content/docs/ja/windows-beta.mdx
#	docs/next/website/src/content/docs/keyboard.mdx
#	docs/next/website/src/content/docs/persistence-remote.mdx
#	docs/next/website/src/content/docs/plugins.mdx
#	docs/next/website/src/content/docs/quick-start.mdx
#	docs/next/website/src/content/docs/socket-api.mdx
#	docs/next/website/src/content/docs/windows-beta.mdx
#	docs/next/website/src/content/docs/zh-cn/add-herdr-support.mdx
#	docs/next/website/src/content/docs/zh-cn/agent-automation.mdx
#	docs/next/website/src/content/docs/zh-cn/agents.mdx
#	docs/next/website/src/content/docs/zh-cn/cli-reference.mdx
#	docs/next/website/src/content/docs/zh-cn/configuration.mdx
#	docs/next/website/src/content/docs/zh-cn/connecting-machines.mdx
#	docs/next/website/src/content/docs/zh-cn/install.mdx
#	docs/next/website/src/content/docs/zh-cn/integrations.mdx
#	docs/next/website/src/content/docs/zh-cn/keyboard.mdx
#	docs/next/website/src/content/docs/zh-cn/persistence-remote.mdx
#	docs/next/website/src/content/docs/zh-cn/plugins.mdx
#	docs/next/website/src/content/docs/zh-cn/quick-start.mdx
#	docs/next/website/src/content/docs/zh-cn/socket-api.mdx
#	docs/next/website/src/content/docs/zh-cn/windows-beta.mdx
#	docs/next/website/src/data/config-reference.json
#	docs/preview/website/src/content/docs/add-herdr-support.mdx
#	docs/preview/website/src/content/docs/agents.mdx
#	docs/preview/website/src/content/docs/configuration.mdx
#	docs/preview/website/src/content/docs/install.mdx
#	docs/preview/website/src/content/docs/integrations.mdx
#	docs/preview/website/src/content/docs/ja/add-herdr-support.mdx
#	docs/preview/website/src/content/docs/ja/agent-automation.mdx
#	docs/preview/website/src/content/docs/ja/agents.mdx
#	docs/preview/website/src/content/docs/ja/cli-reference.mdx
#	docs/preview/website/src/content/docs/ja/configuration.mdx
#	docs/preview/website/src/content/docs/ja/connecting-machines.mdx
#	docs/preview/website/src/content/docs/ja/install.mdx
#	docs/preview/website/src/content/docs/ja/integrations.mdx
#	docs/preview/website/src/content/docs/ja/socket-api.mdx
#	docs/preview/website/src/content/docs/socket-api.mdx
#	docs/preview/website/src/content/docs/zh-cn/add-herdr-support.mdx
#	docs/preview/website/src/content/docs/zh-cn/agent-automation.mdx
#	docs/preview/website/src/content/docs/zh-cn/agents.mdx
#	docs/preview/website/src/content/docs/zh-cn/cli-reference.mdx
#	docs/preview/website/src/content/docs/zh-cn/configuration.mdx
#	docs/preview/website/src/content/docs/zh-cn/connecting-machines.mdx
#	docs/preview/website/src/content/docs/zh-cn/install.mdx
#	docs/preview/website/src/content/docs/zh-cn/integrations.mdx
#	docs/preview/website/src/content/docs/zh-cn/socket-api.mdx
#	docs/versions/README.md
#	docs/versions/manifest.json
#	scripts/windows_cross.py
#	src/client/input.rs
#	src/client/shell/context_menu.rs
#	src/client/shell/mouse.rs
#	src/client/shell/sidebar.rs
#	src/client/shell_runtime.rs
#	src/raw_input.rs
#	src/server/headless.rs
#	src/server/mod.rs
@coderabbitai

coderabbitai Bot commented Oct 15, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 225 files, which is 125 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2353d4c4-2e26-41de-91c6-fc25794e655c
📥 Commits

Reviewing files that changed from the base of the PR and between ebe0ca6 and eb31fbb.

⛔ Files ignored due to path filters: 1
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing: 225
  • .github/dependabot.yml
  • CHANGELOG.md
  • Cargo.toml
  • crates/ghostty-vt/src/lib.rs
  • crates/ghostty-vt/src/test_allocations.rs
  • distribution/agent-detection/antigravity.toml
  • distribution/agent-detection/claude.toml
  • distribution/agent-detection/codex.toml
  • distribution/agent-detection/grok.toml
  • distribution/agent-detection/pi.toml
  • distribution/latest.json
  • distribution/preview.json
  • scripts/agent_detection_manifest_check.py
  • scripts/package_windows_conpty.py
  • scripts/test_agent_detection_manifest_check.py
  • scripts/test_package_windows_conpty.py
  • scripts/windows_conpty_enhanced_input_probe.ps1
  • scripts/windows_input/report.py
  • skills/herdr/SKILL.md
  • src/api/server.rs
  • src/app/actions.rs
  • src/app/agent_suspend_tests.rs
  • src/app/agents.rs
  • src/app/api.rs
  • src/app/api/agents.rs
  • src/app/api/layouts.rs
  • src/app/api/panes.rs
  • src/app/api/plugins/manifest.rs
  • src/app/api/plugins/mod.rs
  • src/app/api/plugins/panes.rs
  • src/app/api/plugins/runtime.rs
  • src/app/api/session.rs
  • src/app/api/tabs.rs
  • src/app/api/workspaces.rs
  • src/app/api/worktrees.rs
  • src/app/api/worktrees/deferred.rs
  • src/app/api/worktrees/reads.rs
  • src/app/creation.rs
  • src/app/custom_commands.rs
  • src/app/git_refresh.rs
  • src/app/ids.rs
  • src/app/mod.rs
  • src/app/popup.rs
  • src/app/runtime.rs
  • src/app/state.rs
  • src/cli.rs
  • src/cli/plugin.rs
  • src/cli/server.rs
  • src/cli/spec.rs
  • src/client/attach.rs
  • src/client/catalog_reload.rs
  • src/client/clipboard_forwarding.rs
  • src/client/clipboard_images.rs
  • src/client/config_reload.rs
  • src/client/endpoint/activation.rs
  • src/client/endpoint/activation/protocol.rs
  • src/client/endpoint/activation_tests.rs
  • src/client/endpoint/supervisor.rs
  • src/client/events.rs
  • src/client/handshake.rs
  • src/client/input.rs
  • src/client/input/windows_vti.rs
  • src/client/loop_config.rs
  • src/client/mod.rs
  • src/client/notifications.rs
  • src/client/shell/actions.rs
  • src/client/shell/config.rs
  • src/client/shell/context_menu.rs
  • src/client/shell/endpoint_navigation.rs
  • src/client/shell/endpoints.rs
  • src/client/shell/input.rs
  • src/client/shell/link_hover.rs
  • src/client/shell/mouse.rs
  • src/client/shell/notification_policy.rs
  • src/client/shell/overlay_input.rs
  • src/client/shell/overlays.rs
  • src/client/shell/preferences.rs
  • src/client/shell/sidebar.rs
  • src/client/shell/state.rs
  • src/client/shell/tests/agents_worktrees_notifications.rs
  • src/client/shell/tests/chrome_context.rs
  • src/client/shell/tests/close_pane.rs
  • src/client/shell/tests/endpoints.rs
  • src/client/shell/tests/graphics.rs
  • src/client/shell/tests/input.rs
  • src/client/shell/tests/input_conformance.rs
  • src/client/shell/tests/keybindings_settings.rs
  • src/client/shell/tests/link_hover.rs
  • src/client/shell/tests/mod.rs
  • src/client/shell/tests/mouse_selection.rs
  • src/client/shell/tests/startup_overlays.rs
  • src/client/shell/tests/text_editing.rs
  • src/client/shell/tests/workspace_navigation.rs
  • src/client/shell_runtime.rs
  • src/client/state.rs
  • src/client/terminal_sessions.rs
  • src/client/terminal_setup.rs
  • src/client/tests/mod.rs
  • src/config.rs
  • src/config/keybinds.rs
  • src/config/model.rs
  • src/detect/manifest.rs
  • src/detect/manifest/tests.rs
  • src/detect/manifests/antigravity.toml
  • src/detect/manifests/claude.toml
  • src/detect/manifests/codex.toml
  • src/detect/manifests/grok.toml
  • src/detect/manifests/pi.toml
  • src/detect/mod.rs
  • src/events.rs
  • src/input/encode.rs
  • src/input/keybind_help.rs
  • src/input/lease.rs
  • src/input/mod.rs
  • src/input/model.rs
  • src/input/mouse.rs
  • src/input/parse.rs
  • src/integration/assets/antigravity_cli/herdr-agent-state.ps1
  • src/integration/assets/antigravity_cli/herdr-agent-state.sh
  • src/integration/assets/claude/herdr-agent-state.ps1
  • src/integration/assets/claude/herdr-agent-state.sh
  • src/integration/assets/codex/herdr-agent-state.ps1
  • src/integration/assets/codex/herdr-agent-state.sh
  • src/integration/assets/copilot/herdr-agent-state.ps1
  • src/integration/assets/copilot/herdr-agent-state.sh
  • src/integration/assets/cursor/herdr-agent-state.ps1
  • src/integration/assets/cursor/herdr-agent-state.sh
  • src/integration/assets/devin/herdr-agent-state.ps1
  • src/integration/assets/devin/herdr-agent-state.sh
  • src/integration/assets/droid/herdr-agent-state.ps1
  • src/integration/assets/droid/herdr-agent-state.sh
  • src/integration/assets/grok/herdr-agent-state.ps1
  • src/integration/assets/grok/herdr-agent-state.sh
  • src/integration/assets/kimi/herdr-agent-state.ps1
  • src/integration/assets/kimi/herdr-agent-state.sh
  • src/integration/assets/letta/herdr-agent-session.ps1
  • src/integration/assets/letta/herdr-agent-session.sh
  • src/integration/assets/mastracode/herdr-agent-state.ps1
  • src/integration/assets/mastracode/herdr-agent-state.sh
  • src/integration/assets/qodercli/herdr-agent-state.ps1
  • src/integration/assets/qodercli/herdr-agent-state.sh
  • src/integration/assets/qwen/herdr-agent-session.ps1
  • src/integration/assets/qwen/herdr-agent-session.sh
  • src/integration/config_edit.rs
  • src/integration/mod.rs
  • src/integration/targets.rs
  • src/integration/tests.rs
  • src/ipc.rs
  • src/layout.rs
  • src/main.rs
  • src/pane.rs
  • src/pane/agent_detection.rs
  • src/pane/background_agent.rs
  • src/pane/input.rs
  • src/pane/kitty_keyboard.rs
  • src/pane/terminal.rs
  • src/pane/terminal/windows_recent_fallback.rs
  • src/persist.rs
  • src/persist/io.rs
  • src/persist/plugin_registry.rs
  • src/persist/restore.rs
  • src/platform/fallback.rs
  • src/platform/linux.rs
  • src/platform/linux/shutdown.rs
  • src/platform/macos.rs
  • src/platform/macos/input.rs
  • src/platform/macos/input_tests.rs
  • src/platform/macos/shutdown.rs
  • src/platform/mod.rs
  • src/platform/ssh_agent.rs
  • src/platform/unix_common.rs
  • src/platform/windows.rs
  • src/platform/windows/notifications.rs
  • src/plugin_installations.rs
  • src/plugin_paths.rs
  • src/protocol/render_ansi.rs
  • src/protocol/wire.rs
  • src/pty/actor.rs
  • src/pty/actor/unix.rs
  • src/raw_input.rs
  • src/remote/args.rs
  • src/remote/attach.rs
  • src/remote/host.rs
  • src/render_signal.rs
  • src/selection.rs
  • src/server/autodetect.rs
  • src/server/client_accept.rs
  • src/server/client_shell.rs
  • src/server/client_transport.rs
  • src/server/handoff.rs
  • src/server/headless.rs
  • src/server/headless/bootstrap.rs
  • src/server/headless/lifecycle.rs
  • src/server/headless/notifications.rs
  • src/server/headless/render.rs
  • src/server/headless/tests/mod.rs
  • src/server/headless/tests/pane_graphics.rs
  • src/server/mod.rs
  • src/server/pane_input.rs
  • src/server/render_scale_benchmark.rs
  • src/server/shutdown.rs
  • src/session.rs
  • src/terminal/runtime.rs
  • src/thread_spawn.rs
  • src/ui.rs
  • src/ui/onboarding.rs
  • src/ui/panes.rs
  • tests/api_ping.rs
  • tests/auto_detect.rs
  • tests/cli/harness.rs
  • tests/cli/plugins.rs
  • tests/client_mode.rs
  • tests/cross_area.rs
  • tests/detach_reattach.rs
  • tests/fixtures/hermes-installer-process-info-4910.json
  • tests/host_shutdown.rs
  • tests/live_handoff.rs
  • tests/multi_client.rs
  • tests/server_headless.rs
  • tests/session_restore.rs
  • tests/support/mod.rs
  • tests/windows_server_security.rs
  • vendor/patches/portable-pty/0004-skip-directories-when-resolving-windows-programs.patch
  • vendor/portable-pty.patches.md
  • vendor/portable-pty/src/cmdbuilder.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@jsonMartin
jsonMartin merged commit 9378c4b into main Oct 15, 2026
6 checks passed
@jsonMartin
jsonMartin deleted the upstream-sync/v0.9.5 branch October 15, 2026 06:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants