aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2026-09-17fix(windows): temporarily revert VT only mode on Windows (#4295)JJ Liebig
refs #4251
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): recover VT input without changing readers (#4269)JJ Liebig
refs #4251
2026-09-17fix(windows): restore terminal after setup errors (#4261)JJ Liebig
refs #4251
2026-09-17fix(windows): preserve VT input during mouse refresh (#4257)JJ Liebig
refs #4251
2026-09-16fix: cache saved machine connection metadata (#4256)Can Celik
refs #4252
2026-09-16fix: respect opencode tui.json registrations (#4250)akbash
refs #4240 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-16fix: offer forced removal for worktrees with submodules (#4238)Can Celik
refs #1797
2026-09-16fix: require exact session names before deletion (#4233)Eric Yue
* fix: require exact session names before deletion refs #3819 * test: isolate session deletion regression tests refs #3819 --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-16fix: let local agent clicks cancel remote handoffs (#4236)Can Celik
refs #3903
2026-09-16fix: keep local usable when remote machines stall (#4234)Can Celik
refs #3903
2026-09-16fix: keep remote surface updates incremental (#4209)Can Celik
refs #3769 refs #3745
2026-09-15fix: preserve macos services across logout (#4202)Can Celik
refs #4100
2026-09-15fix: preserve unloaded sessions before replacement (#4190)Can Celik
refs #4125
2026-09-15fix(windows): normalize pane launch cwd casing (#4199)JJ Liebig
2026-09-15fix(windows): preserve sgr mouse encoding after native capture (#4195)Can Celik
refs #4155
2026-09-15fix: preserve live selections during pane output (#4193)akbash
refs #3841 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-15fix: reconcile client locations after no-focus pane moves (#4171)Eric Yue
refs #4153 Root cause: A no-focus pane move can remove the source tab without changing the server's numeric workspace and tab coordinates. PaneMove is not classified as a topology change, so a client viewing that tab retains its deleted ID. Its target lookup falls back to the server default and can follow a later, unrelated focus change instead of staying in the source workspace. Fix: Include PaneMove in the existing client-location reconciliation path. Extend the existing focus-guard test with a client on the removed tab and verify that a later server-default change cannot move its view. Preserve the other client's view and existing error, no-op and zoom assertions. Validation: The minimized regression fails five times on PR #4159's unchanged head and passes five times with the one-line fix. All 19 pane-move tests, native lint, maintenance, architecture and integration-asset checks pass. Full native just ci on the publication branch, including the unchanged prerequisites from #4159 and #4168, passes 3585 Rust tests with six default skips plus lint, 106 maintenance, six architecture and 39 integration-asset tests. All seven docs contract tests pass. Local Windows cross-lint was not run because its SDK is unavailable. No geometry policy, protocol or periodic rendering behavior is changed.
2026-09-15fix: propagate focused pane moves to attached clients (#4159)akbash
refs #4153 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-15fix: reveal newly focused workspaces in the machines sidebarOgulcan Celik
2026-09-15fix: reveal the full last tab in overflowing tab strips (#4152)akbash
refs #4151 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-09-15fix(windows): prefer VT input for SSH clients (#4148)JJ Liebig
refs #3932
2026-09-14fix(windows): batch input trace diagnostics (#4146)JJ Liebig
refs #3932
2026-09-14test: deflake recent CI failures (#4139)JJ Liebig
2026-09-14fix: reject stale pane surfaces after reconnect (#4141)JJ Liebig
2026-09-14fix: map pixel mouse by integer cell pitch (#4140)JJ Liebig
refs #3295
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-14feat: add cursor-based editing to text inputs (#3698)Mark Jaquith
* feat: add cursor-based editing to text inputs refs #1803 * fix: preserve dialog actions with associated text refs #1803 * refactor: simplify text editor outcomes and tests refs #1803 --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-14fix: avoid resending terminal cells for metadata updates (#4137)Can Celik
2026-09-14fix: keep modified enter compatible with legacy panes (#4110)Eric Yue
* fix: keep modified enter compatible with legacy panes refs #4103 * fix: synchronize modified key negotiation state refs #4103 * test: cover windows legacy modified enter refs #4103 --------- Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
2026-09-14fix(windows): avoid lossy native Win32 input mode (#4133)JJ Liebig
refs #3932 refs #3702 refs #3910
2026-09-14fix: scope window titles to each client view (#4130)JJ Liebig
refs #4091
2026-09-14fix: restore saved machine screens after reconnect (#4126)Can Celik
refs #3842
2026-09-14fix: default pane splits to the calling pane (#4123)Can Celik
2026-09-14fix: detect pi working border (#4113)Can Celik
refs #3629
2026-09-14fix: detect codex activity with static titles and queued inputs (#4099)Eric Yue
* fix: detect codex activity with static titles and queued inputs refs #4092 Codex 0.154.0 can omit the activity bullet when tui.animations is false and replace the literal Working label with a task-specific label. Its terminal title can also remain static during an active turn, so the OSC spinner rule is not sufficient to identify work. The screen fallback required a bullet followed by Working in the last three non-empty lines. It therefore missed both the animation-disabled status line and dynamic labels. Queued follow-ups add a heading, input text, and an edit hint below the activity line, moving that line outside the three-line region. The lower-priority non-empty OSC title rule then reported idle while Codex still showed an active timer and interrupt control. Recognize the elapsed-time and esc-to-interrupt controls in the detection snapshot before the current composer. Allow an optional bullet, a dynamic activity label, and queued follow-ups below that line. Require that no later response, completion, or interruption marker supersedes the live activity. This excludes composer text and stale output without letting an earlier interruption suppress a subsequent active turn. Keep OSC state precedence and transcript-viewer skip behavior unchanged. Update the bundled and distributed manifests together to 2026.09.14.1. Add regression coverage for optional bullets, dynamic labels, queued inputs, resumed work after interruption, and stale or quoted controls. Avoid discarding Regex search caches on every detection poll. The loader previously cloned the entire compiled rule vector, and each Regex clone created a fresh search cache pool despite sharing compiled read-only state. Share the immutable rules through Arc instead. Reload publishes a new array while in-flight readers retain a valid old generation, without holding the global cache lock during matching. Add a cheap contains gate for the required interrupt text before running the multiline expression. Add a deterministic regression for compiled-rule sharing, reload replacement, retained old readers, and concurrent detection. Measure the baseline and optimized detector kernels in three alternating rounds on CPU 24 with NUMA node 0 and CPU 25 with NUMA node 1. Real queued detection falls from about 116 to 22 microseconds, and two evaluations per pane over 15 panes fall from about 3.45 to 0.65 milliseconds on both sockets, about 81 percent less time. No benchmark match results change. The cache improvement requires the updated binary, not just a manifest reload. Validate on the official Herdr 0.9.0 release with Codex 0.154.0 by toggling the old and new manifests during the same active queued task. Confirm working for active turns and idle after completion or interruption. Pass 86 captured-screen and semantic checks through the optimized source binary, 69 manifest/cache tests, CPU-pinned render scaling, and the full native CI suite: 3535 Rust tests passed, with six default skips. Run CI serially with inherited Herdr session context removed; no tests were excluded or expectations relaxed to make CI pass. * fix: detect codex pending follow-ups as working refs #4092 * fix: handle wrapped codex follow-up hints refs #4092 --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-09-14fix: preserve agent panel scroll when switching machines (#4101)Eric Yue
refs #3937 Root cause: Activating another endpoint applies a snapshot with a different endpoint-qualified graphics scope. This triggers reset_endpoint_projection, which clears agent_scroll together with endpoint-local state even though the agent list aggregates all machines. The selected agent receives focus, but the list jumps back to the top. Fix: Save the client-owned agent scroll offset and restore it only when activation changes endpoints. Keep same-endpoint reboot resets, workspace/tab scroll resets, input cleanup and existing list bounds clamping unchanged. This adds constant-time work on endpoint activation, with no protocol, persisted-state or pane-scaled rendering changes. Validation: The new regression fails on the original implementation with scroll 0 instead of 6. Tests cover repeated bidirectional agent clicks, stable visible rows, shrinking lists and same-machine reboots. All 242 client shell tests pass. Real SSH A/B testing against the same two disposable 0.9.0 servers reproduces the reset with both the stable and current-master clients. The patched client preserves the visible rows through six cross-machine switches and two same-machine control clicks. Native just ci passes: 3535 Rust tests, six default skips, plus lint, maintenance, architecture and integration-asset checks. All seven docs contract tests pass. Windows cross-lint was not run because its SDK is not installed; native macOS and Windows UI behavior was not tested.
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-14fix: hide only kitty image placements overlapping overlays (#4081)Can Celik
2026-09-14test(windows): deflake media player invalid media assertion (#4082)JJ Liebig
* test(windows): deflake media player invalid media assertion The Windows sound test required MediaPlayer's MediaFailed event for invalid media. Some runners never raise it, so the script exits through its playback timer and the test saw "sound playback timed out" instead, panicking on the MediaFailed assertion. Accept either terminal error and keep the timer short under test via HERDR_SOUND_TIMEOUT_SECONDS so a missed MediaFailed no longer waits out the production 15 second bound. * test(windows): keep media player timeout override test-only Generate the short-timer player script only in tests instead of reading a process environment override. This keeps the production script's fixed 15 second bound unchanged, and the script-content test now proves the test variant rewrites the timer.
2026-09-14fix(client): re-assert host mouse modes after a terminal reconnect (#4079)JJ Liebig
Co-authored-by: dengos <dengoswei@gmail.com>
2026-09-14fix(windows): restore mouse reporting when reattaching (#4080)JJ Liebig
2026-09-14fix: scope agent views to the selected machine (#3784)akbash
* fix: scope agent views to the selected machine refs #3732 * fix: preserve stable agent view ordering refs #3732 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-14fix: clarify agent integration settings descriptionOgulcan Celik
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-13feat: add ctrl-hover highlighting and fix wrapped links (#4074)Can Celik
refs #1282
2026-09-13feat: install windows remote host packages (#3687)JJ Liebig
* feat: install windows remote host packages refs #3651 * docs: clarify windows saved reconnect package behavior refs #3651 * fix: include windows installer in nix sources refs #3651 * fix: preserve paths in windows scp transfers refs #3651 * refactor: isolate windows remote package setup refs #3651
2026-09-13fix: clean up failed terminal observer setup (#4071)Can Celik
refs #3612
2026-09-13fix(input): accept parameterized CSI-tilde F1-F4 keys (#4067)JJ Liebig
Terminals such as foot send F1-F4 as parameterized CSI-tilde sequences (for example F3 as `\x1b[13;1:1~`). `parse_xterm_modified_special_sequence` mapped codes 15-24 but not 11-14, so these presses were dropped before keybindings saw them. Map 11-14 to F1-F4, matching the unmodified `\x1b[11~`..`\x1b[14~` aliases already accepted. refs #1809