* 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
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.
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
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.
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
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
* 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>
* 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: 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: 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: 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
* 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
* 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
* 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