Commit Graph
1770 Commits
Author SHA1 Message Date
Can Celik 9dc3a1df2b fix: summarize old servers and saved machines after herdr update (#4722)
* fix: summarize old servers and saved machines after herdr update

* fix: include reconnect and per-session restart commands in update summary
preview-2026-09-29-9dc3a1df2b56
2026-09-29 03:47:12 +03:00
JJ Liebig d5680d84fd fix: capture Windows host default colors at startup (#4710)
refs #1530
refs #4369
2026-09-28 17:16:27 +02:00
kangal-bot 267d47fb57 docs: publish preview documentation 2026-09-28 13:48:11 +00:00
Can Celik 80c0c07250 perf: send scrolling pane output as row shifts and skip blank cells (#4711)
* perf: send scrolling pane output as row shifts and skip blank cells

* fix: keep expanded scroll patches disjoint for the fast presentation path
preview-2026-09-28-80c0c07250d2
2026-09-28 16:19:42 +03:00
JJ Liebig 8c8cb49c23 fix(windows): read agent command lines without PROCESS_VM_READ (#4708)
* 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-28 13:16:10 +02:00
JJ Liebig 7f89b11a11 feat: support multiple prefix keys (#4653)
* 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-28 11:58:09 +02:00
JJ Liebig 0d5d6f1f31 test: fix pane shell idle foreground-command race (#4691)
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-27 22:38:56 +02:00
Michael Hackner 2527eed263 fix: make release test robust to diff.noPrefix git config (#4663)
`git apply` by default expects `-p1`, which is the default behavior of
`git diff`, but this can be overridden by config. Specify it explicitly
so it works regardless.
2026-09-27 22:31:20 +02:00
Eric Yue c210c953e4 fix: bound external event batches in the server loop (#4671) 2026-09-27 22:16:55 +02:00
Eric Yue 87c08c6b7a perf: skip frame clones for unchanged retained graphics (#4672) 2026-09-27 21:58:55 +02:00
Eric Yue 6502492fba perf: avoid rebuilding bsp subtrees when splitting panes (#4670) 2026-09-27 21:48:44 +02:00
Eric Yue 7945e91e30 perf: use keyed terminal lookup for named targets (#4669) 2026-09-27 21:34:03 +02:00
JJ Liebig 0b9c8ead00 feat: simplify ssh machine setup discovery (#4204) 2026-09-27 20:46:47 +02:00
Ogulcan Celik 21d71a0308 docs: add a guide for adding herdr support to your agent 2026-09-27 21:09:35 +03:00
Can Celik 25aaa0b7e3 fix: keep offscreen kitty images loaded instead of resending them on scroll (#4686) 2026-09-27 21:05:25 +03:00
Can Celik 2552d101af feat: let agents report their own resume command (#4687)
* feat: let agents report their own resume command

* fix: keep reported resume commands tied to accepted sessions and current owners
2026-09-27 20:57:00 +03:00
Can Celik 0d1a39dcee feat: accept mouse events on terminal session control (#4685) 2026-09-27 20:29:49 +03:00
316d176768 feat: default machine add label to the ssh host (#4678)
* 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-27 20:06:33 +03:00
Can Celik fff6c820aa refactor: extract libghostty-vt binding into ghostty-vt workspace crate (#4661)
* refactor: extract libghostty-vt binding into ghostty-vt workspace crate

* fix: build libghostty-vt into each build's out dir
2026-09-27 00:06:29 +03:00
Ogulcan Celik c33fd40eab ci: reuse compiler state on every os and save caches only from master 2026-09-26 21:49:25 +03:00
Can Celik bde45262be fix: keep api listener alive after transient accept errors (#4659)
* fix: keep api listener alive after transient accept errors

refs #4601

* fix: drop repeated api accept failure logs

refs #4601
2026-09-26 20:59:41 +03:00
Can Celik ccd51946fd refactor: encode kitty placements in a single pass (#4657) 2026-09-26 20:19:10 +03:00
David Heinemeier HanssonandOgulcan Celik bd69871d51 fix: refresh host palette on terminal redraw (#4349)
* fix: refresh host palette on terminal redraw

* fix: count overlapping host palette queries

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-26 20:17:55 +03:00
JJ Liebig c34dd6b2ac fix: create a symlink on non-elevated windows in docs test (#4654)
* fix: create a symlink on non-elevated windows in docs test

Windows terminals without Developer Mode or elevation cannot create file
symlinks, so the versions publishing integration test failed with EPERM
before it could reach the non-ordinary-file rejection. Fall back to a
directory junction, which is creatable without elevation and hits the
same rejection path.

* fix: detect docs snapshot reparse points with lstat

Classify entries with lstat instead of the readdir dirent so symlinks and
Windows junctions are rejected regardless of how a runtime classifies
them. This keeps the versions integration test's non-ordinary-file
assertion meaningful on non-elevated Windows, where the fixture can only
create a directory junction.
2026-09-26 17:15:50 +02:00
Can Celik 804a4aaf3e fix: crop kitty images around overlays instead of hiding them (#4652) 2026-09-26 17:33:00 +03:00
81ddfc65b4 fix: accept plugin install options before the repository (#4453)
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-26 02:13:20 +02:00
akbashandakbash-bot 7184be49fe fix: retain mouse input grace for split csi prefixes (#4636)
refs #4630

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-26 01:20:08 +02:00
Ainesh Chatterjeeandain3sh 21d0ce6026 fix: preserve shift on ctrl+shift+letter for legacy panes (#4597)
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-25 20:04:54 +03:00
Marco MayerandOgulcan Celik 8d95e9bd45 fix: keep copy mode active during projection updates (#4281)
* 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-24 23:12:04 +03:00
JJ Liebig a28bed2b29 docs: explain tmux auto-attach guard in herdr panes (#4592) 2026-09-24 21:33:45 +02:00
JJ Liebig 8d64c344db perf: avoid repeated scrollback page lookups (#4553)
refs #4506
2026-09-24 21:22:51 +02:00
JJ Liebig afd9e19893 perf: avoid redundant client ANSI encoding work (#4552)
refs #4546
2026-09-24 21:00:57 +02:00
Can CelikandJJ Liebig c411883ec6 feat!: replace the custom graphics api with optimized native kitty rendering (#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-24 20:59:48 +03:00
JJ Liebig 11a7ab4ae2 test: qualify Win32 and Kitty input paths by default (#4587) 2026-09-24 19:37:09 +02:00
JJ Liebig d11c0c34cf fix: report partial Windows input coverage and clear clipboard for tests (#4566)
* fix: report partial Windows input coverage and clear clipboard for tests

* fix: require evidence from each Windows input channel

* fix: reject clipboard format count errors
2026-09-24 14:29:07 +02:00
Eric Yue b7781a67e2 fix: match navigator search terms independently (#4535)
* fix: match navigator search terms independently

refs #4273

* docs: remove redundant navigator search note

refs #4273
2026-09-24 13:45:59 +02:00
JJ Liebig 9c96f7ddb3 fix: avoid inferring codex idle from terminal output (#4563)
refs #4507
2026-09-24 02:23:42 +02:00
JJ Liebig 21fd121a63 fix: prevent cursor flicker on status redraw (#4554)
* fix: prevent cursor flicker on status redraw

* fix: avoid stale cursor during resize
2026-09-23 20:39:01 +02:00
Eric Yue c958833fa8 test: wait for complete handoff pid markers (#4538)
* test: wait for complete handoff pid markers

* test: wait for complete handoff pid markers
2026-09-23 16:44:56 +02:00
JJ Liebig 9903007e5c test(windows): capture native console input records (#4520)
refs #4470
2026-09-23 14:26:17 +02:00
akbashandakbash-bot 23479dd162 fix: prevent Windows non-text keys from triggering the space prefix (#4510)
refs #4470

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-23 03:54:44 +02:00
JJ Liebig 440a8bdd1e fix: keep synchronized pane frames atomic (#4508)
refs #2968
2026-09-23 02:19:59 +02:00
JJ Liebig cd8306d7f3 fix: detect npm-installed omp on windows (#4502)
refs #4313
2026-09-22 22:37:25 +02:00
JJ Liebig 621e6b73c4 fix: recognize Windows daemons in non-killing jobs (#4489)
refs #4309
2026-09-22 18:55:34 +02:00
JJ Liebig dd33ddf28d fix: move worktree lookups async (#4492) 2026-09-22 19:43:12 +03:00
Can Celik 1c6397b1cd fix: reuse ssh authentication and add machine recovery commands (#4490)
* fix: reuse ssh authentication and add in-app mfa recovery

refs #3763

* refactor: move ssh recovery to machine cli

refs #3763
2026-09-22 19:12:29 +03:00
JJ Liebig 7237703dc5 fix: recognize codex mention completion popups (#4495)
refs #4220
2026-09-22 17:48:23 +02:00
Can Celik 90b0e40ab3 fix: preserve hook agent status across live handoff (#4493) 2026-09-22 18:31:37 +03:00
Can Celik f6390752a5 fix: track opencode subagent status per pane (#4357)
refs #1362
2026-09-22 16:25:17 +03:00
JJ Liebig 46a5091838 fix: stagger restored agent startups (#4487)
* fix: stagger restored agent startups

refs #4102

* fix: report startup delay changes requiring restart

refs #4102
2026-09-22 15:23:31 +02:00