Commit Graph
99 Commits
Author SHA1 Message Date
JJ Liebig 101ccc20d3 fix(windows): prefer pwsh for the default pane shell (#4297)
* 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-17 17:45:07 +02:00
JJ Liebig 529eeca41d test: make windows config backup legacy fixture explicit (#4290)
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-17 14:24:48 +02:00
JJ Liebig 20c15dd7c8 fix(windows): preserve VT input during mouse refresh (#4257)
refs #4251
2026-09-17 00:07:58 +02:00
Can Celik 266b8e3802 fix: preserve macos services across logout (#4202)
refs #4100
2026-09-15 21:37:49 +03:00
JJ Liebig 9db1eed391 fix(windows): normalize pane launch cwd casing (#4199) 2026-09-15 17:17:47 +02:00
5e38e5fb5f fix: protect integration configs from failed writes (#3973)
* 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-14 22:13:52 +02:00
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 6075d25f47 fix: keep plugins working after client-only updates (#4077) 2026-09-13 23:37:26 +03:00
caner-akcaandJJ Liebig 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 8d213f8563 fix: clean up failed terminal observer setup (#4071)
refs #3612
2026-09-13 22:08:15 +03:00
Can Celik fc44f61a10 fix: disconnect stalled terminal observers (#4039) 2026-09-13 13:47:53 +03:00
Rhett CfZhuangandJJ Liebig 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 c7a7cc454a fix: lint all targets on windows (#3963)
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-11 18:12:49 +02:00
akbashandakbash-bot a52060315e fix(linux): identify Herdr desktop notifications (#3639)
refs #3638

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-10 13:46:15 +03:00
JJ LiebigandOgulcan Celik 8996fc54fe fix: support preinstalled windows remote hosts (#3661)
* 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-09 00:08:42 +03:00
Can Celik 62431dbd03 fix: reduce idle ssh cpu without dropping final output (#3728)
* fix: stop polling idle ssh uploads on unix

* fix: preserve ssh output during idle bridge cancellation

* test: exercise active ssh upload cancellation
2026-09-08 00:35:48 +03:00
Can CelikandJonathan Liebig e7d8220788 fix: preserve sessions after interrupted pane exits (#3418)
* 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-07 15:14:46 +02:00
Can Celik 9e9bc8a144 feat: manage multiple ssh machines from one client (#3670) 2026-09-06 02:27:06 +03:00
JJ Liebig 6f57f2f62c fix: resolve Windows plugin pane launch paths (#3666)
* 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-05 21:56:17 +02:00
JJ Liebig 50ce4ec2dd fix: run the full applicable test suite on windows (#3660)
* 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-05 21:39:32 +03:00
JJ Liebig ec745235a9 fix(windows): preserve LF paste order (#3582)
refs #3172
2026-09-03 19:03:47 +02:00
JJ Liebig 0496636dc7 fix(windows): preserve ctrl+slash key identity (#3578)
refs #2954
2026-09-03 17:20:57 +02:00
JJ Liebig 0f8ad128b6 fix: read Windows clipboard images in WSL (#3572)
refs #3376
2026-09-03 15:30:04 +02:00
Can Celik d08e44686d fix(client): detach when terminal geometry is unavailable (#3531)
refs #3519
2026-09-02 16:09:19 +03:00
JJ Liebig 99c23cd1ea fix(windows): preserve native pane key identity (#3503) 2026-09-01 21:46:16 +02:00
JJ Liebig da8c7b05f9 fix(windows): recognize durable wmi daemon jobs (#3507) 2026-09-01 21:20:26 +02:00
Can Celik 207be3c771 refactor: render the shell in the client (#3487)
* 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-09-01 15:48:22 +03:00
JJ Liebig 5158adab10 fix(windows): launch powershell agent shims with arguments (#3455) 2026-08-31 23:22:40 +02:00
6e8b138d0f fix: keep wayland clipboard copies responsive (#3015)
* 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-25 02:59:57 +03:00
7d35ebe7c4 fix: synchronize plugin pane pwd (#2985)
* 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-20 02:29:43 +03:00
akbashandakbash-bot e3c3d44358 fix(cli): exit quietly when output pipes close (#2996)
refs #2994

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-08-19 20:39:24 +03:00
akbashandakbash-bot 76211757ec fix: reap ctrl-click url openers (#2906)
* 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-18 00:11:20 +03:00
Can Celik 2b4b3849ca fix(theme): skip host palette queries under wsl (#2852)
refs #2440
2026-08-16 00:05:24 +03:00
Ogulcan Celik 3f752a72fd fix: synchronously terminate cancelled status commands 2026-08-12 03:52:41 +03:00
Can CelikandJonathan Liebig 06ca0baa12 fix(windows): reduce idle agent detection CPU (#2651)
* 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-11 18:08:51 +03:00
JJ Liebig 1ac44afcc0 fix(windows): strip elevated terminal title decoration (#2632) 2026-08-10 21:49:41 +03:00
Can CelikandDavid Heinemeier Hansson e48d83067a feat: add configurable tab bar status (#2586)
* 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-10 01:20:09 +03:00
JJ Liebig 7d77e927eb fix(windows): share Git Bash agent candidate scans (#2494)
refs #2459
2026-08-07 22:22:04 +03:00
Can Celik 2863b71513 feat(windows): support remote attach to unix hosts (#2329)
* feat(windows): support remote attach to unix hosts

* fix(remote): preserve unix bridge behavior
2026-08-05 19:34:24 +03:00
Can Celik df2cb2c3a5 fix(windows): detect agents across git bash exec boundaries (#2170)
refs #2107
2026-08-01 21:25:20 +03:00
Ogulcan Celik 26a7bc860e fix(windows): preserve semantic escape key taps 2026-08-01 05:08:17 +03:00
Can CelikandJonathan Liebig b76adc155d fix(input): preserve native key lifecycle across routing (#2142)
refs #2077

Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
2026-08-01 04:27:50 +03:00
Can Celik 0732039eaf fix: preserve windows sessions after ssh logout (#2098)
* fix: preserve windows sessions after ssh logout

refs #2008

* chore: document windows wmi safety

refs #2008
2026-07-30 23:39:03 +03:00
Can Celik 53199270f6 fix: launch argument-free agents on windows (#2075)
refs #2072
2026-07-30 15:38:56 +03:00
Can Celik 38b7b540e1 fix: add opt-in child-group process detection (#2052)
* fix: add opt-in child-group process detection

refs #1982

* fix: preserve lifecycle probes without foreground groups

refs #1982
2026-07-30 15:14:27 +03:00
Ogulcan Celik 44b3adb125 fix(windows): preserve parent agent ownership
refs #1514
2026-07-29 16:24:23 +03:00
Can Celik 5b0be42e04 fix(windows): restore system notifications and sound playback (#2019) 2026-07-29 15:02:32 +03:00
JJ Liebig 6d1bedee3e fix: make native windows checks reliable (#1925) 2026-07-27 14:15:23 +03:00
JJ Liebig 04205ac070 fix: preserve shift-enter in windows panes (#1909)
refs #1743
2026-07-27 02:16:57 +03:00
Ogulcan Celik 61f6400675 fix: repaint after transient terminal resizes 2026-07-26 15:05:28 +03:00