Commit Graph
1862 Commits
Author SHA1 Message Date
Ogulcan Celik 406456e7dc fix: stop server crash when a cursor move carries a link onto a full page
refs #5296
2026-10-15 17:48:51 +03: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
JJ Liebig 848075ff8c fix: retain workspace navigation during machine switches (#5061)
refs #5019
2026-10-07 23:06:20 +02:00
akbash 376bafc8ab fix: honor the kitty graphics opt-out (#4979) 2026-10-07 23:18:49 +03:00
Can Celik 1b23719b3e fix: tell fish that herdr reflows its prompt on resize (#4977)
* fix: tell fish that herdr reflows its prompt on resize

refs #3672

* fix: match fish_handle_reflow casing exactly on windows

refs #3672

* test: keep temp path out of fish env spawn test command

refs #3672
2026-10-07 22:37:33 +03:00
JJ Liebig d46cb1bad7 fix: preserve windows sessions during shutdown (#5057)
refs #5013
2026-10-07 21:29:35 +02:00
JJ Liebig 4e624cd50e fix: preserve windows accent-key shortcuts (#5021) 2026-10-07 16:48:40 +02:00
Can Celik a124eed73c refactor: route all pane key encoding through libghostty (#5017)
* test: add input transparency conformance harness

* test: cover split host replies in input conformance harness

* fix: let libghostty encode every key sent to panes

* refactor: read live keyboard modes only from libghostty

* fix: wait for split input sequences instead of typing their fragments

* refactor: drop unused keyboard protocol argument from pane key encoding

* test: fix windows-only keyboard mode tests after libghostty mode refactor

* test: measure windows key record transparency against the keyboard layout

* fix: forward windows punctuation and altgr chords that produce no character

* test: expect libghostty kitty encoding in the windows conpty probe and cover release, alternate, text and modifyOtherKeys passthrough

* ci: lint windows-only test code in the cross-platform windows check

* refactor: delete herdr's own key encoder

* test: expect xterm modifyOtherKeys 2 encoding for shifted letters in the windows gauntlet

* refactor: read windows input through one native console reader

* refactor: parse sgr mouse reports once and map pixel reports without rewriting them

* refactor: decode framed input once instead of re-framing it in the client

* fix: keep macos alt, non-us kitty keys, text releases and reply-tail recovery correct after the libghostty switch

* fix: stop waiting for host replies the terminal never sends

* fix: deliver shifted punctuation releases after shift is let go

* fix: never type super, hyper or meta chords into panes that cannot read them

refs #4356

* test: replay reporter captures for fixed split-read and key-release issues

refs #4856
refs #4025
refs #4184

* fix: forward f1, f2 and f4 from kitty keyboard hosts

refs #4403

* fix: send pixel mouse reports to unfocused panes and only when the host supports them

refs #4750

* fix: treat 0x08 as backspace when the terminal's erase key is ctrl+h

refs #3244

* test: fix macos lint and keep the pixel mouse server test unix-only

* fix: deliver legacy alt+escape on macos instead of dropping it

* fix: address review findings on super+enter, held key releases and the pixel mouse probe

* test: expect super+enter to stay out of plain windows panes

* test: wait for the host pixel mouse mode instead of reading the channel once

* fix: send ctrl+shift+letter to plain shells as its control byte

* fix: encode each key under one keyboard mode snapshot

* fix: keep ime text intact and stop inventing key releases for committed text

* fix: release held key reports on focus loss and never drop held-key leases

* fix: send ctrl chords on non-latin layouts as their physical key

* fix: match non-latin ctrl chord releases after ctrl is let go

* fix: drop super chords before the windows conpty fallback in plain panes
2026-10-07 04:53:29 +03:00
Can Celik 3d9d2b18da fix: keep the server alive when thread spawns fail (#4958)
* fix: keep the server alive when thread spawns fail

refs #3324

* fix: keep thread spawn fallbacks from dropping work

refs #3324

* fix: validate agent prompts before starting the waiter

refs #3324

* fix: retry failed startup git refresh without clients

refs #3324

* fix: time plugin commands from their exit

refs #3324

* fix: make plugin finish time test independent of load

refs #3324
2026-10-06 00:46:23 +03:00
dependabot[bot] ff83689f15 chore(deps): bump Swatinem/rust-cache (#4956)
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](https://github.com/swatinem/rust-cache/compare/e18b497796c12c097a38f9edb9d0641fb99eee32...f0d9c3887740aee45f6153b24b3a6b815192ec16)

---
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>
2026-10-05 22:40:09 +03:00
dependabot[bot] c509de4158 chore(deps): bump the cargo-dependencies group across 1 directory with 3 updates (#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](https://github.com/rust-lang/regex/compare/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](https://github.com/serde-rs/serde/compare/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](https://github.com/rust-lang/futures-rs/compare/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>
2026-10-05 22:39:55 +03:00
Can Celik 950d012cf0 fix: keep agent sessions while the agent is suspended or backgrounded (#4964)
* fix: keep agent sessions while the agent is suspended or backgrounded

refs #1647
refs #1033

* fix: drop a suspended agent's session when a new one of its kind takes over

refs #1647
2026-10-05 22:33:44 +03:00