aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2026-10-05tmuxrdr: tmux's status line as the tab row (ui.tab_style = "tmux")Igor Soarez
herdr draws each tab as a centred, padded block, and a named tab shows its name without its number. With ui.tab_style = "tmux" the row is tmux 3.7c's default status line: "[session] " cut to status-left-length 10, then each window as "#I:#W#{?window_flags,#{window_flags}, }" -- current "*", last "-", zoomed "Z" -- one space apart, plain text in the status line's colours. Unnamed tabs are called after their active pane's directory, like automatic-rename-format '#{b:pane_current_path}'. The logic is in src/client/shell/tabs_tmux.rs; render_tab_bar keeps its layout, scrolling, mouse hits and + button, with three one-line hooks for width, text and style, and the session at the left. Each tab's active pane and each workspace's previous tab are remembered by the client, so nothing changes in the protocol and the client works against a stock herdr server. The default, herdr, draws as before.
2026-10-05tmuxrdr: own directories, to run beside stock herdrIgor Soarez
app_dir_name() names the directory every herdr path is built from -- config, sessions, sockets, logs, plugin registry, state. A release build of tmuxrdr now uses "tmuxrdr", so ~/.config/tmuxrdr and ~/.local/state/tmuxrdr, and shares nothing with a stock herdr on the same machine. Debug builds keep "herdr-dev", which herdr's own tests expect.
2026-09-29fix: keep escape-prefixed terminal key bindings intact (#4759)Can Celik
* fix: keep escape-prefixed terminal key bindings intact refs #4751 * test: cover escape-prefixed option+backspace binding refs #4751 (cherry picked from commit 898f733f92dbbe53c428845534b03adb573f92be)
2026-09-29fix: summarize old servers and saved machines after herdr update (#4722)Can Celik
* fix: summarize old servers and saved machines after herdr update * fix: include reconnect and per-session restart commands in update summary
2026-09-28fix: capture Windows host default colors at startup (#4710)JJ Liebig
refs #1530 refs #4369
2026-09-28perf: send scrolling pane output as row shifts and skip blank cells (#4711)Can Celik
* perf: send scrolling pane output as row shifts and skip blank cells * fix: keep expanded scroll patches disjoint for the fast presentation path
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-28feat: support multiple prefix keys (#4653)JJ Liebig
* feat: support multiple prefix keys keys.prefix accepts an array in addition to a single string so one config can define several prefix keys. Every configured prefix enters the same prefix mode, and the help panel lists them all. Published keybinding profiles keep the primary prefix as a scalar and carry the rest in an optional extra_prefixes field so older clients keep working with the primary prefix. * fix: reject an empty prefix list on reload An explicitly empty keys.prefix array now stays empty through config parsing so validation rejects it and a reload keeps the current keybindings instead of silently falling back to ctrl+b.
2026-09-27test: fix pane shell idle foreground-command race (#4691)JJ Liebig
The interactive-shell idle test sent SIGINT as soon as it observed the shell was busy. That condition can be true before the shell finishes moving the command into its own foreground process group, so the interrupt could arrive before the command reset its signal dispositions. The command then survived in a stale foreground group while the shell showed a prompt, and the pane was never observed idle again. Run cat and end it with EOF instead. cat blocks on stdin, so the busy state is stable, and EOF avoids the interrupt/job-control race.
2026-09-27fix: bound external event batches in the server loop (#4671)Eric Yue
2026-09-27perf: skip frame clones for unchanged retained graphics (#4672)Eric Yue
2026-09-27perf: avoid rebuilding bsp subtrees when splitting panes (#4670)Eric Yue
2026-09-27perf: use keyed terminal lookup for named targets (#4669)Eric Yue
2026-09-27feat: simplify ssh machine setup discovery (#4204)JJ Liebig
2026-09-27fix: keep offscreen kitty images loaded instead of resending them on scroll ↵Can Celik
(#4686)
2026-09-27feat: let agents report their own resume command (#4687)Can Celik
* feat: let agents report their own resume command * fix: keep reported resume commands tied to accepted sessions and current owners
2026-09-27feat: accept mouse events on terminal session control (#4685)Can Celik
2026-09-27feat: default machine add label to the ssh host (#4678)David Heinemeier Hansson
* feat: default machine add label to the ssh host `herdr machine add <ssh-target>` no longer requires `--label`. Without one, the machine is named after the SSH host with any `user@` prefix removed, so `herdr machine add dev@workbox` shows up as `workbox`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Apply suggestion from @greptile-apps[bot] Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * fix: make default machine labels unique per session and handle ssh urls --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
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-26fix: keep api listener alive after transient accept errors (#4659)Can Celik
* fix: keep api listener alive after transient accept errors refs #4601 * fix: drop repeated api accept failure logs refs #4601
2026-09-26refactor: encode kitty placements in a single pass (#4657)Can Celik
2026-09-26fix: refresh host palette on terminal redraw (#4349)David Heinemeier Hansson
* fix: refresh host palette on terminal redraw * fix: count overlapping host palette queries --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-26fix: crop kitty images around overlays instead of hiding them (#4652)Can Celik
2026-09-26fix: accept plugin install options before the repository (#4453)akbash
refs #4446 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-26fix: retain mouse input grace for split csi prefixes (#4636)akbash
refs #4630 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-25fix: preserve shift on ctrl+shift+letter for legacy panes (#4597)Ainesh Chatterjee
Panes whose app has not enabled the kitty keyboard protocol received ctrl+shift+letter as the same C0 byte as ctrl+letter. Encode the chord as CSI-u instead, matching Ghostty's legacy encoder. refs #4581 Co-authored-by: ain3sh <ainesh.chatterjee@gmail.com>
2026-09-24fix: keep copy mode active during projection updates (#4281)Marco Mayer
* fix: keep copy mode active during projection updates refs #3812 * fix: preserve linewise selections during projection gaps refs #3812 --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-24perf: avoid repeated scrollback page lookups (#4553)JJ Liebig
refs #4506
2026-09-24perf: avoid redundant client ANSI encoding work (#4552)JJ Liebig
refs #4546
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-24fix: match navigator search terms independently (#4535)Eric Yue
* fix: match navigator search terms independently refs #4273 * docs: remove redundant navigator search note refs #4273
2026-09-24fix: avoid inferring codex idle from terminal output (#4563)JJ Liebig
refs #4507
2026-09-23fix: prevent cursor flicker on status redraw (#4554)JJ Liebig
* fix: prevent cursor flicker on status redraw * fix: avoid stale cursor during resize
2026-09-23fix: prevent Windows non-text keys from triggering the space prefix (#4510)akbash
refs #4470 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-23fix: keep synchronized pane frames atomic (#4508)JJ Liebig
refs #2968
2026-09-22fix: detect npm-installed omp on windows (#4502)JJ Liebig
refs #4313
2026-09-22fix: recognize Windows daemons in non-killing jobs (#4489)JJ Liebig
refs #4309
2026-09-22fix: move worktree lookups async (#4492)JJ Liebig
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-22fix: recognize codex mention completion popups (#4495)JJ Liebig
refs #4220
2026-09-22fix: preserve hook agent status across live handoff (#4493)Can Celik
2026-09-22fix: track opencode subagent status per pane (#4357)Can Celik
refs #1362
2026-09-22fix: stagger restored agent startups (#4487)JJ Liebig
* fix: stagger restored agent startups refs #4102 * fix: report startup delay changes requiring restart refs #4102
2026-09-22fix: clear inherited terminal and agent session identity (#4461)Can Celik
refs #4104
2026-09-21fix: distinguish agent completion from startup and session changes (#4457)Can Celik
refs #3338 refs #3990 refs #3916
2026-09-21fix: honor droid scrollback clear requests in panes (#4432)Ainesh Chatterjee
Remove the droid-specific filter that discarded ED3 before PTY output reached the terminal parser. Keeping stale scrollback beneath replayed primary-screen frames duplicated the welcome header and old transcript. Pass the original bytes to the parser and trackers. Add process-aware regression coverage across PTY chunk boundaries and preserve ED2/ED3 screen-history separation and alternate-screen isolation. Co-authored-by: ain3sh <ainesh.chatterjee@gmail.com> Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-21fix: refresh forwarded ssh agents after reconnect (#4443)Can Celik
refs #1931
2026-09-21perf: index navigator tabs and panes per endpoint (#4426)Eric Yue
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: confirm closing the last tab in the tui (#4409)Eric Yue
* fix: confirm closing the last tab in the tui refs #4379 * docs: clarify last-tab worktree confirmation in translations refs #4379 --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>