Commit Graph
1872 Commits
Author SHA1 Message Date
Can Celik be1e5506e6 fix: detect hermes started by the newer installer launcher
refs #5068
2026-10-23 18:22:56 +03:00
Can Celik 6b526626f6 fix: keep the saved layout when panes die during host shutdown (#5510)
* fix: keep the saved layout when panes die during host shutdown

refs #5349

* test: check hangup recording with the server signal monitor installed

refs #5349
2026-10-23 17:03:57 +03:00
Can Celik ff5881ef45 fix: keep a slow server's socket instead of treating a connect timeout as stale (#5511)
refs #5230
2026-10-23 17:03:42 +03:00
JJ Liebig 9168dd3323 fix: use newer stable releases on the preview channel
Preview update checks select a newer stable release while retaining the preview preference for future builds. Preserve implicit Windows preferences with a TOML-aware edit and cover release selection, config forms, and install behavior with regression tests.
2026-10-23 14:32:13 +02:00
JJ Liebig 5bd900d88c test: synchronize shell and server startup checks (#5476)
* test: wait for windows cwd commands to finish

* test: wait for server readiness before sigterm
2026-10-21 23:28:59 +02:00
JJ Liebig a2008661cd test: stabilize plugin worker lease test (#5467)
The lease test spawned PowerShell on Windows and allowed five seconds for
the worker's first ready marker. On a loaded Windows runner PowerShell
startup alone consumed that budget, so the test failed at the readiness
deadline even though the worker started normally.

Run the worker as the test binary itself instead. The child is a native
process with no shell startup, and it performs the same ready/release/result
file handshake from the checkout directory. Cover the child with an ignored
test spawned through `--exact ... --ignored`. The child returns immediately
when no handshake request exists, so a direct `cargo test -- --ignored` run
stays green.
2026-10-21 18:36:36 +02:00
JJ Liebig ccc7521ad0 fix: prevent windows ssh output from delaying typing (#5463)
refs #3701
2026-10-21 16:12:50 +02:00
JJ Liebig 143bf5fd47 fix: keep polling when a resize samples a zero-sized grid (#5310)
A window drag can momentarily make the terminal report a zero-sized grid.
`terminal_grid_size()` turns that into an error, and the resize watcher
treated any error as a dead terminal: it detached and exited the client,
which ends the session on a remote host.

Keep the last known geometry and the pending resize signal, then resample.
Real terminal failures still detach, and startup still rejects a
zero-sized grid.

This prevents a zero-sized-grid-induced detach. Whether it fully explains
the reported Git Bash over SSH session loss is unconfirmed: the pasted ssh
log shows a normal session teardown, and the report's leftover mouse
reporting is not reproduced here.

refs #4105
2026-10-16 01:05:23 +02:00
Can Celik b431a063e2 fix: keep the macos server running when its terminal quits (#5236)
* fix: keep the macos server running when its terminal quits

refs #4920

* test: cover the macos server leaving its launchd job

refs #4920

* test: wait for the launcher to exit before checking the detached server

refs #4920
2026-10-15 20:19:09 +03:00
Can Celik e97c344ae0 fix: stop server crash when a cursor move carries a link onto a full page (#5303)
* fix: stop server crash when a cursor move carries a link onto a full page

refs #5296

* fix: keep cursor link when a style page split moves the cursor

refs #5296
2026-10-15 20:18:01 +03:00
JJ Liebig 77a176eb21 fix: keep posix machine scripts intact through windows openssh (#5308)
OpenSSH for Windows hands the SSH command argument to the login shell
wrapped in double quotes, which expanded the `$`/`$(...)` in Herdr's POSIX
discovery and API bridge scripts before `/bin/sh` ran them. A saved machine
whose default shell is WSL bash is detected as POSIX, so `herdr --machine`
then failed with `remote binary discovery failed`.

Deliver the discovery script on stdin (`/bin/sh -s`) and base64-encode the
cached POSIX API bridge command so the whole script, including any executable
path, stays out of the command argument. The decoded bridge reads the API
payload from fd 3 so decoding the script cannot consume it.

refs #5132
2026-10-15 18:48:45 +02:00
JJ Liebig 916fcf8de0 fix: probe windows remote hosts before /bin/sh (#5275)
* fix: probe windows remote hosts before /bin/sh

Interactive remote setup forwards SSH stderr, so a Windows OpenSSH host with a
PowerShell default shell printed the raw `/bin/sh` CommandNotFoundException and
Windows was only identified by the fallback probe. Probe for Windows first for
interactive connections so those hosts never receive a `/bin/sh` command;
background bridges capture stderr and keep the POSIX-first probe.

refs #5187

* fix: distinguish wsl from native windows ssh shells

refs #5187
2026-10-14 19:18:21 +02:00
github-actions[bot] 2f3432c688 release: synchronize metadata for v0.9.5 2026-10-14 16:07:47 +00:00
kangal-bot ca790064d6 docs: publish preview documentation 2026-10-14 15:43:53 +00:00
JJ Liebig 3b0c3e9e26 test: deflake observer write timeout on loaded runners (#5280)
The macOS CI job intermittently fails
server::client_transport::tests::observer_write_timeout_resets_when_sending_makes_progress
with "assertion failed: write_framed_bytes(...)" followed by "observer
disconnected while making progress".

The test proves that every partial write resets the writer's deadline by
draining a 1 MiB frame through an observer that sleeps 5 ms per 16 KiB read
while the writer's send timeout is 100 ms. On a loaded runner, one scheduler
stall longer than 100 ms makes write_client_stream time out and shut the
socket down, so the write assertion fails and the observer then reads EOF.

Give the writer a 1 s timeout and slow the observer to 25 ms per read. The
transfer still takes about 1.6 s, longer than the timeout, so the deadline
reset is still required, while the stall budget grows 10x and the drain
cadence stays 40x below it.

Also bound both kernel socket buffers well below the frame size. The reset
path is only exercised while the writer is blocked, so the test should not
depend on the platform default buffers happening to be smaller than 1 MiB.
2026-10-14 17:43:01 +02:00
Can Celik 287da8072f fix: drop codex turn status hooks (#5278)
refs #4507
2026-10-14 18:20:21 +03:00
JJ Liebig 8a20d0b7b5 fix: silence powershell progress clixml on windows remotes (#5282)
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
2026-10-14 17:18:17 +02:00
Can Celik f53f92dd40 fix: run prefix bindings for plain text from kitty terminals (#5277)
refs #5255
2026-10-14 17:54:03 +03:00
JJ Liebig 9ee03e36f4 test: deflake federated remote restart on loaded CI (#5276)
The client_mode::federated_client_starts_without_local_and_survives_its_restart
integration test fails intermittently on the ubuntu (and macos) runners at two
polling budgets:

- "remote must be usable before Local exists"
- "remote reconnect N must restore visible input and preserve the shell"

Both budgets are shorter than the client's own connection and activation
deadlines. Saved-SSH discovery probes are bounded by a 15s SSH command timeout,
the remote handshake read timeout is 60s, and each endpoint activation phase has
a 5s deadline that can retry. Under a loaded runner the client can still be
legitimately connecting, or holding pane input closed through an activation
retry, when the test gives up.

Give the remote-readiness and remote-input waits budgets that exceed those
deadlines. The waits still return as soon as the observed condition holds, so
only the failure path gets slower. The intentionally tight waits that prove
Local does not wait for a stalled remote stay at 3s.
2026-10-14 16:43:54 +02:00
JJ Liebig 00584a2794 fix: decode windows agent hook stdin as utf-8 (#5270)
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
2026-10-14 16:11:44 +02:00
JJ Liebig 576dd3670d fix: skip directories when resolving Windows programs on PATH (#5269)
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
2026-10-14 15:34:20 +02:00
JJ Liebig 6521382dbe fix: recover blocked shared ssh connections (#5252)
* fix: recover blocked shared ssh connections

refs #4721

* test: support shared ssh checks in client fixtures

refs #4721

* test: separate ssh cancellation from timeout scheduling

refs #4721
2026-10-14 02:40:36 +02:00
JJ Liebig dec3156a6f fix: recover endpoint connections promptly after wake (#5249)
* fix: recover endpoint connections promptly after wake

refs #4721

* test: wait for asynchronous endpoint pipe closure

refs #4721
2026-10-14 00:54:10 +02:00
JJ Liebig 87e5c13c60 fix: cancel and clean up endpoint connection attempts (#5247)
* fix: cancel and clean up endpoint connection attempts

refs #4721

* fix: keep probe teardown scoped to its bridge

refs #4721

* fix: preserve nonblocking bridge output and simplify cleanup

refs #4721
2026-10-13 21:24:34 +02:00
JJ Liebig ee731a221e fix: allow busy servers time to become ready (#5241)
refs #4721
2026-10-13 18:00:54 +02:00
JJ Liebig 43f873e179 fix: enforce handshake response deadlines (#5242)
refs #4721
2026-10-13 17:54:00 +02:00
github-actions[bot] 1cbd794559 release: synchronize metadata for v0.9.4 2026-10-13 15:41:33 +00:00
Can Celik 9c38bbc64e fix: detect blocked questions in named claude sessions (#5192)
refs #4573
2026-10-13 18:04:49 +03:00
JJ LiebigandBart Louwers afd7aa94b0 fix: retry a reconnecting machine immediately when selected (#5232)
* fix: retry a reconnecting machine immediately when selected

Assisted-by: Claude <noreply@anthropic.com>

* fix: retry the active SSH machine when selected

refs #4721

---------

Co-authored-by: Bart Louwers <bart@emeel.net>
2026-10-13 16:39:00 +02:00
Can Celik 241b99cd39 refactor: share cli and api command contracts (#5212)
* refactor: share cli and api command contracts

* fix: address cli contract review findings
2026-10-13 04:25:38 +03:00
kangal-bot 212b710b92 docs: publish preview documentation 2026-10-12 13:48:37 +00:00
Can Celik 6d697e1e75 fix: detect codex startup update chooser (#5174)
refs #4811
preview-2026-10-12-6d697e1e75ff
2026-10-12 16:22:24 +03:00
Can Celik dc6b6e5f42 fix: confirm closing a workspace's last pane in the tui (#5173)
refs #5143
2026-10-12 01:50:48 +03:00
4d8a601a3c fix: keep sgr pixel mouse units consistent (#4971)
* 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>
2026-10-12 00:21:05 +03:00
Can Celik dc220d5205 fix: reject workspace numbers past the last workspace (#5171)
refs #5096
2026-10-11 23:58:29 +03:00
Eric YueandCan Celik be0e73f724 fix: reject oversized canonical input on macos (#4988)
refs #4950

Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-10-11 23:39:48 +03:00
Can Celik 642134ac74 fix: save sessions before agents die during macos restart (#5092)
* 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
2026-10-11 23:37:52 +03:00
Eric Yue a9711f65b3 fix: preserve hermes plugin list structure (#4984)
refs #4909
2026-10-11 23:26:18 +03:00
Can Celik e73d21ea29 fix: restore keyboard protocol flags after a terminal reconnect (#5088)
* fix: restore keyboard protocol flags after a terminal reconnect

refs #4985

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

refs #4985
2026-10-11 23:19:42 +03:00
JJ Liebig 75f46fe812 fix: reduce interactive pane echo latency (#5149)
* fix: reduce interactive pane echo latency

refs #4884

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

refs #4884
2026-10-11 14:49:54 +02:00
JJ Liebig 6b1f9f6c5b fix: flush session saves before replacing persisted files (#5152)
refs #5150
2026-10-11 14:41:59 +02:00
Can Celik 2563803dca fix: open goto search on shifted slash in report-all panes (#5090)
* 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
2026-10-08 23:12:44 +03:00
Can Celik abf0d07cf8 fix: map non-latin layout ctrl chords to their base keys (#4961)
* 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
2026-10-08 23:12:29 +03:00
JJ Liebig fe935882f0 perf: reuse unchanged windows shell detection text (#5091) 2026-10-08 21:55:17 +02:00
Can Celik f5e7f41d7a fix: drop an unfinished host color reply after an idle timeout (#5087)
* 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
2026-10-08 22:16:19 +03:00
Can Celik 3928966591 fix: deliver quick esc taps on macos with kitty keyboard (#5089)
* 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
2026-10-08 22:15:37 +03:00
cce57bc32c perf: reuse unchanged shell detection text (#5085)
* perf: reuse unchanged shell detection text

refs #5083

* perf: reuse unchanged shell detection text

refs #5083

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-10-08 20:26:14 +02:00
Eric Yue 4f8961180c fix: preserve literal plus keybindings (#4983)
refs #4960
2026-10-08 19:22:51 +03:00
JJ Liebig 4dc23bb15d fix: respect mouse capture when routing hyperlink clicks (#5064)
refs #4874
2026-10-08 01:30:46 +02:00
JJ Liebig 4f296c295b fix: preserve windows shell working directories (#5062)
refs #4472
2026-10-08 00:01:30 +02:00