1640 Commits

Author SHA1 Message Date
Can Celik c77af1892f fix: clean up idle ssh bridges and back off flapping connections (#4083)
* fix: clean up idle ssh bridges and back off flapping connections

* chore: keep ssh liveness smoke tooling local
2026-09-14 03:55:53 +03:00
Can Celik 21c1f8cf85 fix: hide only kitty image placements overlapping overlays (#4081) 2026-09-14 03:02:14 +03:00
JJ Liebig add3dd28f9 test(windows): deflake media player invalid media assertion (#4082)
* test(windows): deflake media player invalid media assertion

The Windows sound test required MediaPlayer's MediaFailed event for invalid
media. Some runners never raise it, so the script exits through its playback
timer and the test saw "sound playback timed out" instead, panicking on the
MediaFailed assertion.

Accept either terminal error and keep the timer short under test via
HERDR_SOUND_TIMEOUT_SECONDS so a missed MediaFailed no longer waits out the
production 15 second bound.

* test(windows): keep media player timeout override test-only

Generate the short-timer player script only in tests instead of reading a
process environment override. This keeps the production script's fixed 15
second bound unchanged, and the script-content test now proves the test
variant rewrites the timer.
2026-09-14 02:42:59 +03:00
JJ Liebig 247f6d1f82 fix(client): re-assert host mouse modes after a terminal reconnect (#4079)
Co-authored-by: dengos <dengoswei@gmail.com>
2026-09-14 02:42:21 +03:00
JJ Liebig aa961df943 fix(windows): restore mouse reporting when reattaching (#4080) 2026-09-14 02:06:01 +03:00
akbash 3b478e69dc fix: scope agent views to the selected machine (#3784)
* fix: scope agent views to the selected machine

refs #3732

* fix: preserve stable agent view ordering

refs #3732

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-14 02:11:07 +04:00
Ogulcan Celik 4e1096b101 fix: clarify agent integration settings description 2026-09-14 00:24:47 +03:00
JJ Liebig 2746ac7ebf ci: migrate remaining pinned actions to node24 (#4023)
* ci: migrate remaining pinned actions to node24

actions/cache@v4 and mlugg/setup-zig@v2.2.1 still target Node 20, which
GitHub removes from runners on 2026-09-23. Bump actions/cache to v6.1.0 and
replace mlugg/setup-zig with vercel-labs/setup-zig@v1.0.2.

vercel-labs/setup-zig takes only `version`, so the use-cache/cache-size-limit
tuning and Zig global-cache reuse are dropped. See the PR for alternatives.

* ci: restore zig caching for vercel setup-zig

vercel-labs/setup-zig has no cache controls, so redirect the Zig global cache
into the workspace .zig-cache and run the Zig build cache step on Linux too.

Drop this commit if we switch to a setup action that owns Zig caching, e.g.
step-security/setup-zig or xyzzylabs/setup-zig.
2026-09-13 23:39:48 +03:00
Can Celik 6075d25f47 fix: keep plugins working after client-only updates (#4077) 2026-09-13 23:37:26 +03:00
caner-akca b847e6cdb6 fix(linux): bound the foreground process-tree scan (#3674)
refs #3621

Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-14 00:22:15 +04:00
Can Celik f8e59221cb feat: add ctrl-hover highlighting and fix wrapped links (#4074)
refs #1282
2026-09-13 23:05:30 +03:00
JJ Liebig 5916765845 feat: install windows remote host packages (#3687)
* feat: install windows remote host packages

refs #3651

* docs: clarify windows saved reconnect package behavior

refs #3651

* fix: include windows installer in nix sources

refs #3651

* fix: preserve paths in windows scp transfers

refs #3651

* refactor: isolate windows remote package setup

refs #3651
2026-09-13 22:19:20 +03:00
Ogulcan Celik 8be8bff8a5 chore: add jjliebig as approved contributor and maintainer 2026-09-13 22:13:12 +03:00
Can Celik 8d213f8563 fix: clean up failed terminal observer setup (#4071)
refs #3612
2026-09-13 22:08:15 +03:00
JJ Liebig a7a1410abb fix(input): accept parameterized CSI-tilde F1-F4 keys (#4067)
Terminals such as foot send F1-F4 as parameterized CSI-tilde sequences (for
example F3 as `\x1b[13;1:1~`). `parse_xterm_modified_special_sequence` mapped
codes 15-24 but not 11-14, so these presses were dropped before keybindings
saw them. Map 11-14 to F1-F4, matching the unmodified `\x1b[11~`..`\x1b[14~`
aliases already accepted.

refs #1809
2026-09-13 20:14:24 +02:00
Kakumanu Ashok Reddy 0305fdb6f7 fix: recognize kitty CSI-u codepoints for F1 through F12 (#2378)
Codepoints 57364-57375 (F1-F12) were missing from the kitty-protocol codepoint table, so terminals that send function keys as full CSI-u sequences (e.g. Ghostty, which enables the kitty keyboard protocol by default) had those keys silently dropped. Confirmed live against a running herdr session: injecting the raw F3/F4 codepoint sequences did nothing before this fix and correctly triggered previous_tab/next_tab after.

refs #1809

Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 21:56:39 +04:00
JJ Liebig 1e3c625d86 test: deflake federated local input race (#4066)
refs #3670
2026-09-13 19:20:22 +02:00
JJ Liebig 3834fd3d0f fix: auto-expire worktree action error banners (#4063)
* fix: auto-expire worktree action error banners

refs #1827

* fix: restart endpoint error timeout on repeated errors

Route every transient client-side action error through a setter that installs a fresh deadline, so an identical repeated message cannot inherit an older, nearly-expired deadline.

refs #1827

* test: derive endpoint error expiry assertions from stored deadline

refs #1827
2026-09-13 19:14:00 +02:00
caner-akca f0cb0e0683 fix: keep an agent name through a process-exit observation (#3574)
A process-exit observation is not proof the agent is gone: the same
observation can be wrong while the agent keeps running, and the name is
the only handle its owner has on the pane. Detection uncertainty already
preserves the name, so releasing it on the observation alone contradicts
that contract and leaves a live agent unreachable by name with a rename
as the only recovery.

Free the name at the point the agent actually leaves the pane - a
recorded exit with no agent detected any more - so a wrong observation
costs nothing and a real exit still releases the name for reuse.

refs #3225

Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 19:00:57 +02:00
JJ Liebig ff32bd450e fix(windows): keep powershell cwd reporting in login mode (#4065)
Windows login-mode PowerShell panes are now launched directly, but the PowerShell prompt-based cwd integration was still gated to non-login mode, leaving those panes without repository-owned cwd reporting after Set-Location. Enable the existing integration for login-mode PowerShell and build the integration args on the shared direct-shell path.

Follow-up to #4060.
2026-09-13 18:41:15 +02:00
JJ Liebig 38bc172fe8 fix(windows): honor default_shell in login shell mode (#4060)
* fix(windows): honor default_shell in login shell mode

Login-mode panes used portable-pty's default-program builder, which resolves to %ComSpec% (cmd.exe) on Windows and ignores the SHELL env override, so [terminal].default_shell was silently ignored. Build the launch command from the configured shell instead and append the shell's own login flag for POSIX-style shells that support one.

refs #1445

* fix(windows): add csh and tcsh to login shell flags

refs #1445
2026-09-13 18:24:51 +02:00
JJ Liebig 5f26879bcd fix(ui): keep muted sidebar and tab labels readable (#4062)
refs #2692
2026-09-13 18:17:42 +02:00
JJ Liebig 981fe83ca2 fix: keep hermes enabled list valid yaml (#4056)
* fix: keep hermes enabled list valid yaml

refs #3839

* fix: preserve hermes inline list quoting and comments

refs #3839
2026-09-13 17:58:43 +02:00
JJ Liebig cb06df6331 fix(windows): disable host mouse reporting on terminal restore (#4055)
Windows skipped the xterm mouse-reporting reset because clear_host_mouse_reporting was a no-op there. Standalone Git Bash (mintty) keeps SGR mouse reporting enabled after detach, so mouse motion leaks escape sequences into the shell. Emit the reset sequence on Windows too and include the X10 mode.

refs #3748
2026-09-13 17:43:13 +02:00
Can Celik fc1cb77f05 feat: add Letta Code detection and restore (#3107)
refs #3106

Co-authored-by: Cameron <cameron@pfiffer.org>
2026-09-13 17:36:47 +02:00
JJ Liebig 3be3523149 fix(remote): resolve ssh host aliases from git bash on windows (#4054)
Windows OpenSSH resolves drive-letter Include paths, but Git for Windows' MSYS OpenSSH does not, so the managed remote SSH config silently ignored the user's ~/.ssh/config when herdr ran under Git Bash. Include the user config through ~/.ssh/config, which both implementations expand to the same file.

refs #3947
2026-09-13 16:51:04 +02:00
JJ Liebig 63ea2314b2 fix: detect kimi npm shim on windows (#4053)
refs #3317
2026-09-13 16:41:51 +02:00
JJ Liebig 5c0ecc6aa5 test: deflake windows metadata ttl expiry assertion (#4050)
The clear-only metadata test used a 1 ms ttl, so on loaded Windows runners set_agent_metadata could see the entry as expired, drop it, and recreate it with a None ttl before next_agent_metadata_expiry() ran. Expiry is forced explicitly later in the test, so use a long ttl to keep the no-extension assertion independent of wall-clock scheduling.
2026-09-13 16:03:42 +02:00
Kataoka Katsuki d66c39d5c5 fix(server): transfer handoff descriptors in batches (#3411)
Live handoff refused any session with more than 64 panes. The pane count
was checked twice against MAX_FDS_PER_HANDOFF, and the transfer itself put
every pane's pty master into one SCM_RIGHTS control message, so the guard
was the only thing keeping the send inside the kernel's per-message limit.
A session past the limit could only be updated by closing panes or by a
normal restart, which ends every pane process.

Send the descriptors in batches of 64 instead and drop both guards. The
receiving side accumulates across recvmsg calls until the expected count
arrives, bounds every SCM_RIGHTS payload it reads by the control bytes the
kernel returned, rejects a batch that carries more descriptors than it
asked for, and closes the descriptors it already holds on any failure. A
session of 64 panes or fewer still produces one batch, so the bytes on the
wire are unchanged and HANDOFF_VERSION stays at 1.

refs #3393

Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 15:52:29 +02:00
akbash 7505c08d47 fix: retain validated split mouse reports across idle gaps (#4048)
refs #3911

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 15:33:58 +02:00
JJ Liebig 540b20fdf0 test: relax windows docs snapshot timeout (#4049)
Windows CI runs these documentation contract fixtures under variable load. A degraded runner pushed the preview and versions snapshot integration tests past their 30s ceiling, while a healthy run finishes in seconds. Keep 30s elsewhere and give Windows a 120s ceiling.
2026-09-13 15:26:30 +02:00
akbash 858ad4e378 fix(input): preserve super-modified pane keys (#4044)
refs #3710

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 15:14:31 +02:00
akbash a5e1c94157 fix: restrict claude session hooks to native sources (#4046)
refs #4018

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 15:04:22 +02:00
akbash 9631f8ee21 fix: decouple pixel mouse from pane graphics (#4045)
refs #3295

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 14:57:31 +02:00
akbash f48cd6a768 fix: order ui accent before nested config tables (#2698)
* fix: order ui accent before nested config tables

refs #2697

* test: reject duplicate ui accent examples

refs #2697

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-13 14:50:29 +02:00
Can Celik fc44f61a10 fix: disconnect stalled terminal observers (#4039) 2026-09-13 13:47:53 +03:00
Rhett CfZhuang bafbc0949d fix(linux): avoid blocking proc reads for wsl agents (#2179)
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13 02:43:38 +02:00
JJ Liebig 3b9f58b70e fix: deflake windows endpoint flush drain test (#4021)
The polling peer drains at production's 2ms Windows read cadence, so a 1 MiB
frame took ~5.5s locally and exceeded the test's 10s flush deadline under CI
load. Use a 256 KiB frame, still well above the 64 KiB batch limit, and a 30s
deadline so the assertion no longer depends on CI scheduling.
2026-09-13 02:17:50 +02:00
akbash aa6b531a42 fix: update grok session after new (#2683)
* fix: update grok session after new

refs #2681

* fix: avoid powershell args shadowing

refs #2681

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-13 02:04:27 +02:00
Can Celik 98a8c6ce52 fix: restore alternate-screen pane width (#4016)
refs #3329
2026-09-13 02:40:13 +03:00
akbash 5eafc61267 fix: honor space row gaps across machines (#3740)
* fix: honor space row gaps across machines

refs #3738

* test: cover scrolling with machine space gaps

refs #3738

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-13 02:20:23 +03:00
Can Celik e3a46f4f89 fix: recognize codex composer sparkles (#4015)
refs #3988
2026-09-13 01:36:59 +03:00
akbash 96f2324467 fix: allow retrying partial worktree removal (#3315)
refs #3314

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-12 21:55:19 +02:00
akbash d184b41fa3 fix: batch queued endpoint input frames (#4004)
refs #3833

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-12 18:19:33 +02:00
JJ Liebig c17dc3fda7 fix: keep windows endpoint writes progressing (#3721)
refs #3651
2026-09-12 18:00:01 +02:00
JJ Liebig 6cf4bbb031 fix: finish windows ssh setup after bridge exit (#3719)
refs #3651
2026-09-12 17:24:34 +02:00
JJ Liebig a5d5f6f654 fix: ignore nested OMP session reports (#3994)
refs #2593
2026-09-12 13:52:18 +02:00
Can Celik cc36a2943e fix: preserve complete alternate-screen history reads (#3979) 2026-09-12 13:53:33 +03:00
akbash 9ad65d9031 fix: suppress Windows dead-key fallback characters in remote panes (#3972)
refs #3948

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-12 01:38:57 +04:00
Mark Jaquith fb5525fc22 fix: opencode v2 lifecycle reporting (#3757)
* 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>
2026-09-11 22:36:18 +02:00