aboutsummaryrefslogtreecommitdiff
path: root/src/platform
AgeCommit message (Collapse)Author
2026-09-28fix(windows): read agent command lines without PROCESS_VM_READ (#4708)JJ Liebig
* fix(windows): read agent command lines without PROCESS_VM_READ Windows process command lines were read by opening each process with PROCESS_VM_READ and walking its PEB. Hardened runtimes (Electron/Node) and security products deny that access, so those processes resolved to a bare `node.exe`/`bun.exe` name with no argv, argv0, or cmdline. A runtime-wrapped agent launched from such a process was then indistinguishable from an unrelated runtime process, and the pane stayed on the shell with `agent_status: unknown`. Prefer `NtQueryInformationProcess` with `ProcessCommandLineInformation` (Windows 8.1+), which needs only `PROCESS_QUERY_LIMITED_INFORMATION`, and keep the existing PEB read as a fallback for processes that do not expose a stored command line. The fallback still requires `PROCESS_VM_READ`, so this only widens coverage. refs #4579 * fix(windows): handle growing command lines before failure test The retry added for a command line that grows between the size probe and the read was unreachable. NTSTATUS is signed, so STATUS_BUFFER_OVERFLOW, STATUS_BUFFER_TOO_SMALL, and STATUS_INFO_LENGTH_MISMATCH are all negative and were treated as failures by the earlier `status < 0` check. Check the growth statuses first and retry once with the reported size. Also read the returned UNICODE_STRING header unaligned, since a Vec<u8> buffer only guarantees byte alignment. * test(windows): keep command-line marker test process alive Passing the marker as a second argument to `ping` let `ping` exit as soon as it saw one target, so the command-line query could race the process exit. Move the marker into a `rem` after `&` so it stays in cmd.exe's own command line and `ping -n 11` keeps the process alive for the read.
2026-09-27refactor: extract libghostty-vt binding into ghostty-vt workspace crate (#4661)Can Celik
* refactor: extract libghostty-vt binding into ghostty-vt workspace crate * fix: build libghostty-vt into each build's out dir
2026-09-24feat!: replace the custom graphics api with optimized native kitty rendering ↵Can Celik
(#4561) * feat!: replace the custom graphics api with optimized native kitty rendering * fix: enable safe kitty optimizations automatically --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-22fix: recognize Windows daemons in non-killing jobs (#4489)JJ Liebig
refs #4309
2026-09-22fix: reuse ssh authentication and add machine recovery commands (#4490)Can Celik
* fix: reuse ssh authentication and add in-app mfa recovery refs #3763 * refactor: move ssh recovery to machine cli refs #3763
2026-09-21fix: refresh forwarded ssh agents after reconnect (#4443)Can Celik
refs #1931
2026-09-21fix: preserve session layouts across shutdown and restore failures (#4400)Can Celik
* fix: preserve session layouts across shutdown and restore failures refs #4320 * test: update subscription fixture for pane restore errors --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-20fix: preserve delayed mouse reports with confirmed keyboard input (#4247)akbash
* fix: preserve delayed mouse reports with confirmed keyboard input refs #3480 * fix: capture geometry before replaying buffered mouse input refs #3480 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-17fix(windows): prefer pwsh for the default pane shell (#4297)JJ Liebig
* fix(windows): prefer pwsh for the default pane shell Windows panes launched Windows PowerShell 5.1 (powershell.exe) whenever [terminal] default_shell was unset, ignoring PowerShell 7 even when pwsh.exe resolved on PATH. Resolve the unset default against PATH and prefer pwsh.exe, falling back to the inbox powershell.exe. An explicit default_shell still wins. * fix(windows): validate pwsh before using it as the default shell portable-pty resolves the configured shell with Path::exists and passes that path to CreateProcessW, which does not fall through to later PATH entries. Selecting an invalid pwsh.exe would therefore break new panes instead of falling back. Only prefer a pwsh.exe that starts with the PE MZ magic, and return its path so the validated binary is the one launched. * fix(windows): validate the full PE header before preferring pwsh Checking only the DOS MZ signature still accepted truncated images, DLLs, and foreign-architecture binaries. Because portable-pty passes the resolved path straight to CreateProcessW without trying later PATH entries, validate the PE signature, the COFF header (machine, executable-image bit, not a DLL, section count), and the optional header before preferring pwsh.exe. * fix(windows): accept native ARM64 pwsh and validate the section table Herdr ships an x64 Windows build that also runs on Windows ARM64 under x64 emulation, so cfg!(target_arch) cannot tell whether a native ARM64 pwsh.exe is launchable. Accept every executable machine type Windows supports instead of rejecting ARM64 on the x86_64 build. Also bound-check the section table (40 bytes per declared section) after the optional header so a truncated table falls back instead of being selected. * fix(windows): detect the native host machine for pwsh compatibility Machine compatibility was derived from cfg!(target_arch), which reports the emulated x64 process on Windows ARM64, and then briefly accepted ARM64 on every host. Read the native machine with IsWow64Process2 in the platform layer instead: ARM64 Windows accepts ARM64/x64/x86 images, x64 accepts x64/x86, and x86 accepts only x86.
2026-09-17test: make windows config backup legacy fixture explicit (#4290)JJ Liebig
backup_preserves_legacy relied on a freshly created temp file already having a legacy DACL (D:(...)). Directories that grant inheritable ACEs produce D:AI(...) instead, so the fixture failed before exercising the backup path. Install the legacy DACL explicitly, preserving the existing ACEs while clearing the auto-inherit and protected control bits.
2026-09-17fix(windows): preserve VT input during mouse refresh (#4257)JJ Liebig
refs #4251
2026-09-15fix: preserve macos services across logout (#4202)Can Celik
refs #4100
2026-09-15fix(windows): normalize pane launch cwd casing (#4199)JJ Liebig
2026-09-14fix: protect integration configs from failed writes (#3973)akbash
* fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 * fix: atomically write integration configs refs #3970 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-14fix: clean up idle ssh bridges and back off flapping connections (#4083)Can Celik
* fix: clean up idle ssh bridges and back off flapping connections * chore: keep ssh liveness smoke tooling local
2026-09-13fix: keep plugins working after client-only updates (#4077)Can Celik
2026-09-14fix(linux): bound the foreground process-tree scan (#3674)caner-akca
refs #3621 Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-13fix: clean up failed terminal observer setup (#4071)Can Celik
refs #3612
2026-09-13fix: disconnect stalled terminal observers (#4039)Can Celik
2026-09-13fix(linux): avoid blocking proc reads for wsl agents (#2179)Rhett CfZhuang
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-11fix: lint all targets on windows (#3963)JJ Liebig
Native Windows lint and check only clippy-checked the herdr binary, while macOS and Linux run clippy across all targets. Enable --all-targets on Windows and gate the Unix-only test helpers that this exposed so Windows check matches the Unix one.
2026-09-10fix(linux): identify Herdr desktop notifications (#3639)akbash
refs #3638 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-09fix: support preinstalled windows remote hosts (#3661)JJ Liebig
* fix: support windows hosts in saved ssh machines refs #3651 * fix: keep windows ssh bridge writes blocking refs #3651 * fix: close saved windows ssh bootstrap input refs #3651 * refactor: simplify remote bridge helpers refs #3651 * refactor: isolate remote bridge platform behavior refs #3651 * fix: close captured ssh input under windows consoles refs #3651 * test: remove redundant remote command assertions refs #3651 refs #3701 * test: handle framed ssh commands in machine setup refs #3651 --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-08fix: reduce idle ssh cpu without dropping final output (#3728)Can Celik
* fix: stop polling idle ssh uploads on unix * fix: preserve ssh output during idle bridge cancellation * test: exercise active ssh upload cancellation
2026-09-07fix: preserve sessions after interrupted pane exits (#3418)Can Celik
* fix: preserve sessions when pane shells are signaled refs #3415 * fix: preserve shutdown checkpoints across platforms refs #3415 --------- Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
2026-09-06feat: manage multiple ssh machines from one client (#3670)Can Celik
2026-09-05fix: resolve Windows plugin pane launch paths (#3666)JJ Liebig
* fix: resolve Windows plugin pane launch paths refs #3024 * test: compare resolved Windows plugin probe paths refs #3024 * test: compare resolved Windows plugin working directories refs #3024 * test: wait for Windows plugin fixture completion refs #3024
2026-09-05fix: run the full applicable test suite on windows (#3660)JJ Liebig
* fix: run the full applicable test suite on windows * test: remove redundant test shell assignment * test: make endpoint and metadata fixtures deterministic * test: tolerate exited servers during windows probe cleanup
2026-09-03fix(windows): preserve LF paste order (#3582)JJ Liebig
refs #3172
2026-09-03fix(windows): preserve ctrl+slash key identity (#3578)JJ Liebig
refs #2954
2026-09-03fix: read Windows clipboard images in WSL (#3572)JJ Liebig
refs #3376
2026-09-02fix(client): detach when terminal geometry is unavailable (#3531)Can Celik
refs #3519
2026-09-01fix(windows): preserve native pane key identity (#3503)JJ Liebig
2026-09-01fix(windows): recognize durable wmi daemon jobs (#3507)JJ Liebig
2026-09-01refactor: render the shell in the client (#3487)Can Celik
* feat: add opt-in client-rendered shell * feat: add client-owned shell mouse controls * feat: complete client-owned shell chrome * feat: add client-owned shell settings and notifications * feat: run client shell custom commands * feat: render popup terminals in client shell * feat: add client-owned scrollback and copy mode * fix: preserve client worktree trust defaults * feat: render startup diagnostics in client shell * feat: render onboarding in client shell * feat: render product announcements in client shell * feat: render release notes in client shell * feat: render mobile switcher in client shell * feat: render kitty graphics in client shell * fix: preserve client shell lifecycle coherence * refactor: route client shell commands through endpoint connections * refactor: make the client-rendered shell the default * refactor: remove monolithic launch mode * refactor: complete client-rendered shell cutover * perf: retain client pane surface updates * perf: scale retained pane surface updates * perf: remove remote pane input latency * test: make client shell checks platform-independent * fix: prevent client timer starvation * test: fix client shell platform gates * test: accept retained surfaces in cross-area checks * test: make client mode assertions platform-neutral * fix: badge only outdated integrations
2026-08-31fix(windows): launch powershell agent shims with arguments (#3455)JJ Liebig
2026-08-25fix: keep wayland clipboard copies responsive (#3015)akbash
* fix: keep wayland clipboard copies responsive refs #3014 * fix: preserve clipboard fallback after wl-copy failure refs #3014 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-08-20fix: synchronize plugin pane pwd (#2985)akbash
* fix: synchronize plugin pane pwd refs #2984 * refactor: isolate plugin pwd platform policy refs #2984 * docs: fix changelog conflict resolution --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-08-19fix(cli): exit quietly when output pipes close (#2996)akbash
refs #2994 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-08-18fix: reap ctrl-click url openers (#2906)akbash
* fix: reap ctrl-click url openers refs #2903 * fix: scope linux opener test import refs #2903 * test: isolate url opener regression refs #2903 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-08-16fix(theme): skip host palette queries under wsl (#2852)Can Celik
refs #2440
2026-08-12fix: synchronously terminate cancelled status commandsOgulcan Celik
2026-08-11fix(windows): reduce idle agent detection CPU (#2651)Can Celik
* fix(windows): reduce idle agent detection CPU refs #2642 * fix(windows): gate agent process discovery refs #2642 --------- Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
2026-08-10fix(windows): strip elevated terminal title decoration (#2632)JJ Liebig
2026-08-10feat: add configurable tab bar status (#2586)Can Celik
* feat: show a zoom indicator in the desktop tab bar Reserve the right edge of the tab row for a ZOOM pill while the focused pane is zoomed, matching the accent style of the mode bars. The per-tab Z suffix stays; the pill makes the zoomed state visible at a glance like tmux's status-right flag. * feat: optionally show the hostname in the desktop tab bar Add ui.tab_bar_hostname to display the machine's hostname at the right edge of the tab row, like tmux's #h in status-right. The value resolves where the server renders, so remote sessions show the remote host. Off by default. * fix: strip control characters from the tab bar hostname * fix: hide the hostname when it would squeeze out the tab strip * feat: add configurable tab bar status * fix: harden tab bar status updates * fix: terminate tab bar status process trees * fix: disable status commands on unsupported platforms * fix: skip unchanged status command renders * fix: keep tab bar status opt-in by default --------- Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-08-07fix(windows): share Git Bash agent candidate scans (#2494)JJ Liebig
refs #2459
2026-08-05feat(windows): support remote attach to unix hosts (#2329)Can Celik
* feat(windows): support remote attach to unix hosts * fix(remote): preserve unix bridge behavior
2026-08-01fix(windows): detect agents across git bash exec boundaries (#2170)Can Celik
refs #2107
2026-08-01fix(windows): preserve semantic escape key tapsOgulcan Celik
2026-08-01fix(input): preserve native key lifecycle across routing (#2142)Can Celik
refs #2077 Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>