fix(input): parse default mouse reports - #2312
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughDefault xterm mouse escape sequences are parsed into ChangesDefault xterm mouse input
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant InputStream
participant EscapeFramer
participant MouseDecoder
participant IdleFlusher
participant RawInputEvent
InputStream->>EscapeFramer: provide default xterm mouse bytes
EscapeFramer->>MouseDecoder: pass complete six-byte report
MouseDecoder->>RawInputEvent: create decoded mouse event
EscapeFramer->>RawInputEvent: preserve preceding Escape when present
IdleFlusher->>EscapeFramer: check incomplete mouse sequence
EscapeFramer-->>IdleFlusher: report pending SGR or default sequence
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Greptile SummaryThe PR adds fixed-width DEFAULT/X10 mouse-report parsing and extends incomplete-report reassembly to this encoding.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains; the previously reported partial DEFAULT-report timeout now receives the extended mouse reassembly window.
|
| Filename | Overview |
|---|---|
| src/raw_input.rs | Adds DEFAULT mouse framing, parsing, doubled-Escape handling, timeout classification, and focused regression coverage; the previously reported partial-report timeout is fixed. |
| src/client/input.rs | Generalizes the active mouse-capture timeout selection to include incomplete DEFAULT reports and tests the new classification. |
Reviews (3): Last reviewed commit: "Merge branch 'master' into akbash/2309-d..." | Re-trigger Greptile
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/raw_input.rs (1)
1394-1404: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAdd coverage for button and modifier decoding.
This test covers only
MouseEventKind::Movedwith emptyKeyModifiers. Add cases for button presses, release, wheel events, and theSHIFT,ALT, andCONTROLbits.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 8239483f-0d4a-4540-9ddb-429f2e70ae98
📒 Files selected for processing (1)
src/raw_input.rs
|
Regarding CodeRabbit review 4857764169: I’m not adding a button/modifier matrix. DEFAULT decoding delegates to the shared |
Integrates upstream range e7c9620..1f1e434 (16 commits) onto fork master. Key conflict resolutions: - src/ui/status.rs + config: adopt upstream herdrdev#2282 distinct status indicators (state_icon_symbol Dots/Symbols) wholesale. Marks stay static (no animated spinner or animation-tick reintroduced); fork's config-diagnostic-as-toast delta preserved (render_config_diagnostic dropped, unused). - src/app/input: adopt upstream input fixes (herdrdev#2303 modifyOtherKeys releases, herdrdev#2259 shift-tab in automation, herdrdev#2312 default mouse reports, herdrdev#2291 pending url clicks) while preserving the deliberate herdrdev#1876 non-US shifted keybinding revert. - src/config: keep fork StatusConfig (status_right/status_right_length/ status_interval) additively alongside upstream herdrdev#2295 retired agent panel scope and StatusIndicatorStyle. - justfile: preserve fork install-local recipe alongside upstream changes.
#53) * fix(windows): restore system notifications and sound playback (herdrdev#2019) * test(windows): remove flaky sound timing assertion refs herdrdev#1330 * fix: preserve windows path variables during install refs herdrdev#1947 * fix(windows): preserve parent agent ownership refs herdrdev#1514 * docs: update preview manifest * fix: scope agent skill installation refs herdrdev#2022 * ci: allow repository organization migration * chore: update repository links after organization transfer * Update rose pine surface_dim colour to "Overlay" (herdrdev#2002) Co-authored-by: Can Celik <ogulcancelik@gmail.com> * chore: finish repository organization migration * fix: preserve kitty associated text (herdrdev#2051) refs herdrdev#2020 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix: add opt-in child-group process detection (herdrdev#2052) * fix: add opt-in child-group process detection refs herdrdev#1982 * fix: preserve lifecycle probes without foreground groups refs herdrdev#1982 * fix: launch argument-free agents on windows (herdrdev#2075) refs herdrdev#2072 * ci: consolidate ai review trigger label * fix: resume agents after headless restore (herdrdev#2088) refs herdrdev#2064 * fix(omp): support Windows session paths (herdrdev#2092) * fix: preserve windows sessions after ssh logout (herdrdev#2098) * fix: preserve windows sessions after ssh logout refs herdrdev#2008 * chore: document windows wmi safety refs herdrdev#2008 * fix(client): restore terminal on sighup and sigterm Enable termination-signal handling so SIGHUP and SIGTERM follow the graceful quit path and restore terminal state. Log handler registration failures and add PTY coverage for direct SIGHUP and server EOF restoration Co-authored-by: Matt Coles <macols@amazon.com> * fix(sidebar): keep worktree groups packed * fix: read alternate-screen agent history * chore: update agentmd for protocol changes * feat: support bottom tab bar placement (herdrdev#2118) * feat: support bottom tab bar placement * fix: preserve mouse cleanup under bottom mode bar refs herdrdev#2117 * chore: remove experiments from settings tui * fix(input): preserve native key lifecycle across routing (herdrdev#2142) refs herdrdev#2077 Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com> * fix(windows): preserve semantic escape key taps * fix: report a clear cli error when no herdr server is running (herdrdev#1963) * fix: report a clear cli error when no herdr server is running socket cli commands surfaced a raw io::Error debug string (`Error: Os { code: 2, ... }`) when nothing was listening on the api socket, which read like a bad --cwd path. map dead-socket connect failures to a `server_not_running` json error carrying the resolved socket path, printed once at the edge that surfaces the error; recovering callers (plugin offline registry fallback, agent start polling) recognize the marker and keep their existing behavior. refs herdrdev#1941 * fix: map dead-socket errors on the unchecked cli request path refs herdrdev#1941 * fix: make server-not-running guidance session-aware refs herdrdev#1941 * fix: expand copy-mode word-end window past a final wide glyph (herdrdev#2145) point_is_final_atom compared an atom's terminating column against a word-motion target's starting column. The two are equal for narrow cells but never for wide ones, so the read window stopped expanding and copy-mode `e` halted at the soft-wrap boundary on CJK text. Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(ui): make pane scrollbars optional (herdrdev#2166) refs herdrdev#2167 * fix(ci): skip pr gate in forks * feat: add antigravity-cli integration (herdrdev#2087) * feat: add antigravity_cli integration harness Register the `antigravity_cli` target, resolve its configuration directory to `~/.gemini/antigravity-cli/`, wire target actions, and add lifecycle hook scripts for Unix and Windows. * feat: support session resume for antigravity-cli * fix: correct antigravity-cli hook config path, shape, and agent label Antigravity CLI reads global customizations from ~/.gemini/config, keys hooks.json by hook name, and only accepts the matcher/hooks wrapper for the tool events. The previous install wrote event arrays at the top level of ~/.gemini/antigravity-cli/hooks.json, which agy never reads and would reject anyway, so no Herdr hook ever ran. Session reports were dropped for a third reason: the hooks reported the agent as antigravity-cli, but the server normalizes that to the canonical label agy before matching, so is_official_agent_source never matched and agy --conversation resume was unreachable. - Resolve the config dir to ~/.gemini/config - Nest Herdr entries under a Herdr-owned "herdr" block that install rewrites and uninstall removes, leaving other named hooks untouched - Emit grouped entries for PreToolUse/PostToolUse and flat handler lists for PreInvocation/PostInvocation/Stop - Report the canonical agy label from both hook assets and match it in agent_resume - Compile-gate the hook asset constants and stop shadowing $args in the PowerShell hook - Document the real directory, that it must already exist, and the named-block behavior refs herdrdev#1011 refs herdrdev#1571 * fix: make antigravity-cli integration session-only antigravity cli cannot express lifecycle safely: there is no blocked event, postinvocation is skipped on interruption, and stop fires at the end of a turn rather than on process exit, which left stale state and released authority at the wrong time. report only the conversation on preinvocation and let screen detection own agent state. resume via `agy --conversation <id>` is unchanged. * fix: update antigravity session after conversation switch --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(input): decode 0x1f as Ctrl+_ not Ctrl+- per ASCII standard (herdrdev#2165) * fix(input): decode 0x1f as Ctrl+_ not Ctrl+- per ASCII standard refs herdrdev#2164 * fix(input): update control-byte matrix test for 0x1f -> Ctrl+_ * fix(socket_paths): remove dead if-branch in derive_client_socket_from_api_socket (herdrdev#2157) * fix(windows): detect agents across git bash exec boundaries (herdrdev#2170) refs herdrdev#2107 * fix: route vscode remote copies through osc52 (herdrdev#2173) refs herdrdev#2015 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(detect): recognize opencode2 as opencode refs herdrdev#2169 * fix: stop advertising worktree json flag (herdrdev#2174) refs herdrdev#2171 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix: preserve claude settings formatting (herdrdev#2089) refs herdrdev#2066 Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> * fix(client): query host cell size when the ioctl reports no pixels (herdrdev#2160) * fix(cli): report non-UTF-8 arguments instead of panicking (herdrdev#2207) * fix(cli): report non-UTF-8 arguments instead of panicking * fix(cli): avoid echoing malformed arguments --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> * fix: avoid blocking on foreground cwd checks (herdrdev#2213) refs herdrdev#2206 * fix(docs): publish only released documentation * fix(docs): support older git in snapshot checks * fix(input): preserve hover during extended-button drags * fix: propagate host color scheme to pane apps (herdrdev#2214) refs herdrdev#714 * fix(pi): restrict state reporting to tui sessions (herdrdev#2159) Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix: page keys scroll pane scrollback at zsh and REPL prompts (herdrdev#2191) * fix: page keys scroll pane scrollback at zsh and REPL prompts PageUp/PageDown were forwarded to the pane whenever DECCKM (application cursor) was on, assuming only primary-screen pagers enable it, but zsh's line editor also enables DECCKM, as do REPLs such as python3. The result was PageUp scrolling shell history instead of Herdr scrollback. Bracketed paste discriminates the two: it means the app accepts typed or pasted text at a prompt, so line editors enable it and pagers do not. * test: update page key state fixture --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(website): rebuild marketing pages on new brand chassis * docs: finalize 0.8.0 release documentation * release: v0.8.0 * docs: update website manifest for v0.8.0 * docs: refine cpu optimization blog post * fix(ui): keep collapsed workspace status visible (herdrdev#2239) refs herdrdev#2216 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * docs: publish preview documentation * feat(plugins): index marketplace manifests * fix(docs): allow corrections to published versions refs herdrdev#916 * fix(input): preserve shift-tab in pane automation (herdrdev#2259) refs herdrdev#1561 * fix(ui): preserve sidebar scroll across clients (herdrdev#2280) refs herdrdev#2255 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(website): copy heading links to clipboard * fix: detect claude confirmation prompts refs herdrdev#2268 * feat(ui): add distinct status indicators (herdrdev#2282) refs herdrdev#2260 * fix(input): keep pending url clicks across host focus loss (herdrdev#2291) Opening a URL raises the browser, which takes focus away from the host terminal before the mouse release arrives. release_input_source(_headless) cleared pending_url_click_sources on that focus loss, so the release was forwarded to the pane and the agent opened the same URL again. Clear the set in clear_input_source instead, whose only production caller is remove_client. refs herdrdev#2290 Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com> * fix(cli): resolve pane query --current from caller (herdrdev#2298) refs herdrdev#2297 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(input): parse default mouse reports (herdrdev#2312) * fix(input): parse default mouse reports refs herdrdev#2309 * fix(input): preserve split default mouse reports refs herdrdev#2309 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(ui): search single-tab names in navigator (herdrdev#2320) * fix(layout): return focus to the pane a split was opened from (herdrdev#2266) Closing a focused pane handed focus to the next pane in tree order. For a pane opened beside another one -- a plugin split, a file viewer, any transient tool pane -- that is rarely where the user was: it lands on some unrelated neighbour rather than the pane that opened it. Track the pane focus came from in TileLayout and prefer it when the focused pane closes, falling back to tree order when there is no history, when it points at the pane being closed, or when it points at a pane that has since gone away. The history lives in the layout, so it can only ever name a pane in the same tab. A one-slot history is only sound if internal focus excursions never write it, so the tree edits that used to bounce focus around now go through target-taking primitives instead. close_pane removes a background pane directly, so detach_pane and take_pane_for_move stop focus-close-refocusing. split_pane splits a target without moving focus: the runtime split path only focuses the new pane once the spawn succeeds, which makes a failed split a pure rollback, and the targeted and unfocused workspace split paths stop fabricating history. insert_pane_near now takes the focus intent, so an unfocused pane move leaves the target tab's history alone. The layout-level focused-split helpers become test-only; production splits all flow through the target-taking path. Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(terminal): render halfwidth katakana voiced marks (herdrdev#2257) Co-authored-by: oyoguhito <oyoguhito@kamatanoMacBook-Pro.local> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(ci): make issue gate structural * fix(input): preserve modifyOtherKeys key releases (herdrdev#2303) refs herdrdev#2302 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(config): accept retired agent panel scope (herdrdev#2295) refs herdrdev#2292 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(theme): add optional sidebar background * docs: refresh readme and sponsors * test(graphics): pin the shrinking-cell symptom against upstream's fix Upstream's cell-size fix prefers the ioctl whenever it reports any nonzero pixels, so a stale SSH ws_xpixel is still divided by a growing column count. HostCellSize::is_plausible is what keeps that off the card path. The sweep covers the widths the defect was measured at and states the bound it does not claim: a stale pty at a low column count is still believed. Also corrects the AGENTS.md cell-size principle, which named the retired HOST_CELL_SIZE_QUERY_SEQUENCE, and records the state-alphabet dispatch. * no-mistakes(review): clamp client cell size at ingress and address review findings * no-mistakes(review): floor sidebar ink separately from shared palette tokens * no-mistakes(review): cache the sidebar palette per frame * no-mistakes(review): resolve sidebar animation ink against the panel's own fill * no-mistakes(review): route every sidebar ground through one panel-fill helper * no-mistakes(document): document sidebar panel-fill palette floor, fix clippy clone-on-copy * no-mistakes: apply CI fixes --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> Co-authored-by: kangal-bot <285672167+kangal-bot@users.noreply.github.com> Co-authored-by: Bradley <67018167+brabli@users.noreply.github.com> Co-authored-by: akbash <akbash@herdr.dev> Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Wiedzmin <56316383+art-wiedzmin@users.noreply.github.com> Co-authored-by: Matt Coles <mattjcoles@outlook.com> Co-authored-by: Matt Coles <macols@amazon.com> Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com> Co-authored-by: Season Saw <season.saw@gmail.com> Co-authored-by: Akira TSURUDA <jas39.gripen@gmail.com> Co-authored-by: Ludovico Magnocavallo <ludo@qix.it> Co-authored-by: serhat dolmaci <srhtsrht17@gmail.com> Co-authored-by: WakaTaira <50697207+WakaTaira@users.noreply.github.com> Co-authored-by: Florian <13469873+VialFlorian@users.noreply.github.com> Co-authored-by: Rhys <105699450+rhjoh@users.noreply.github.com> Co-authored-by: Michael Hackner <mhackner@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Kataoka Katsuki <49934462+kataokatsuki@users.noreply.github.com> Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com> Co-authored-by: Jon Kinney <jonkinney@gmail.com> Co-authored-by: Kazunari Kamata <14287197+kazunari-kamata@users.noreply.github.com> Co-authored-by: oyoguhito <oyoguhito@kamatanoMacBook-Pro.local> Co-authored-by: Bchue <bchue@homeserver.tail25a02d.ts.net>
* fix: preserve claude settings formatting (herdrdev#2089) refs herdrdev#2066 Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> * fix(client): query host cell size when the ioctl reports no pixels (herdrdev#2160) * fix(cli): report non-UTF-8 arguments instead of panicking (herdrdev#2207) * fix(cli): report non-UTF-8 arguments instead of panicking * fix(cli): avoid echoing malformed arguments --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> * fix: avoid blocking on foreground cwd checks (herdrdev#2213) refs herdrdev#2206 * fix(docs): publish only released documentation * fix(docs): support older git in snapshot checks * fix(input): preserve hover during extended-button drags * fix: propagate host color scheme to pane apps (herdrdev#2214) refs herdrdev#714 * fix(pi): restrict state reporting to tui sessions (herdrdev#2159) Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix: page keys scroll pane scrollback at zsh and REPL prompts (herdrdev#2191) * fix: page keys scroll pane scrollback at zsh and REPL prompts PageUp/PageDown were forwarded to the pane whenever DECCKM (application cursor) was on, assuming only primary-screen pagers enable it, but zsh's line editor also enables DECCKM, as do REPLs such as python3. The result was PageUp scrolling shell history instead of Herdr scrollback. Bracketed paste discriminates the two: it means the app accepts typed or pasted text at a prompt, so line editors enable it and pagers do not. * test: update page key state fixture --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(website): rebuild marketing pages on new brand chassis * docs: finalize 0.8.0 release documentation * release: v0.8.0 * docs: update website manifest for v0.8.0 * docs: refine cpu optimization blog post * fix(ui): keep collapsed workspace status visible (herdrdev#2239) refs herdrdev#2216 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * docs: publish preview documentation * feat(plugins): index marketplace manifests * fix(docs): allow corrections to published versions refs herdrdev#916 * fix(input): preserve shift-tab in pane automation (herdrdev#2259) refs herdrdev#1561 * fix(ui): preserve sidebar scroll across clients (herdrdev#2280) refs herdrdev#2255 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(website): copy heading links to clipboard * fix: detect claude confirmation prompts refs herdrdev#2268 * feat(ui): add distinct status indicators (herdrdev#2282) refs herdrdev#2260 * fix(input): keep pending url clicks across host focus loss (herdrdev#2291) Opening a URL raises the browser, which takes focus away from the host terminal before the mouse release arrives. release_input_source(_headless) cleared pending_url_click_sources on that focus loss, so the release was forwarded to the pane and the agent opened the same URL again. Clear the set in clear_input_source instead, whose only production caller is remove_client. refs herdrdev#2290 Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com> * fix(cli): resolve pane query --current from caller (herdrdev#2298) refs herdrdev#2297 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(input): parse default mouse reports (herdrdev#2312) * fix(input): parse default mouse reports refs herdrdev#2309 * fix(input): preserve split default mouse reports refs herdrdev#2309 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(ui): search single-tab names in navigator (herdrdev#2320) * fix(layout): return focus to the pane a split was opened from (herdrdev#2266) Closing a focused pane handed focus to the next pane in tree order. For a pane opened beside another one -- a plugin split, a file viewer, any transient tool pane -- that is rarely where the user was: it lands on some unrelated neighbour rather than the pane that opened it. Track the pane focus came from in TileLayout and prefer it when the focused pane closes, falling back to tree order when there is no history, when it points at the pane being closed, or when it points at a pane that has since gone away. The history lives in the layout, so it can only ever name a pane in the same tab. A one-slot history is only sound if internal focus excursions never write it, so the tree edits that used to bounce focus around now go through target-taking primitives instead. close_pane removes a background pane directly, so detach_pane and take_pane_for_move stop focus-close-refocusing. split_pane splits a target without moving focus: the runtime split path only focuses the new pane once the spawn succeeds, which makes a failed split a pure rollback, and the targeted and unfocused workspace split paths stop fabricating history. insert_pane_near now takes the focus intent, so an unfocused pane move leaves the target tab's history alone. The layout-level focused-split helpers become test-only; production splits all flow through the target-taking path. Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(terminal): render halfwidth katakana voiced marks (herdrdev#2257) Co-authored-by: oyoguhito <oyoguhito@kamatanoMacBook-Pro.local> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(ci): make issue gate structural * fix(input): preserve modifyOtherKeys key releases (herdrdev#2303) refs herdrdev#2302 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(config): accept retired agent panel scope (herdrdev#2295) refs herdrdev#2292 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(theme): add optional sidebar background * docs: refresh readme and sponsors * chore: remove project-local worktree extension refs herdrdev#2325 * fix(website): update author X profile * chore: keep fork docs release metadata at 0.7.5 The upstream merge advanced docs/versions/manifest.json to the snapshot stable source with current 0.8.0 and coupled website/latest.json to the v0.8.0 release. Our fork has no v0.8.0 release tag, so the Website workflow's published-documentation validator failed resolving v0.8.0^{commit}, and manifest.current no longer matched latest.json. Revert both release-metadata files to the pre-merge 0.7.5 legacy state so the fork advertises only releases it actually publishes. This needs no v0.8.0 tag and fires no release workflow. All other upstream merge content, including the docs/versions/0.8.0 snapshot tree, is left intact. * chore: pin fork stable docs snapshot to 0.7.5 The pure legacy-metadata revert could not build: the upstream merge also deleted the committed legacy stable docs source tree (website/src/content/docs and website/src/data/config-reference.json), so docs-versions legacy mode has no source to render and the astro build fails resolving config-reference.json. Keep upstream's snapshot docs machinery but pin current to 0.7.5, the newest release the fork actually publishes. The 0.7.5 entry gains snapshot provenance from the existing v0.7.5 tag (commit ef4c23f) and its committed docs/versions/0.7.5 snapshot tree. This needs no v0.8.0 tag and fires no release workflow, and website/latest.json already advertises 0.7.5, so the manifest current and latest version stay consistent. Validated end to end: docs-versions check, docs-preview check, prepare-docs in published and draft modes, a full astro build (946 pages), and check-built-docs all pass locally. --------- Co-authored-by: akbash <akbash@herdr.dev> Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> Co-authored-by: WakaTaira <50697207+WakaTaira@users.noreply.github.com> Co-authored-by: Florian <13469873+VialFlorian@users.noreply.github.com> Co-authored-by: Rhys <105699450+rhjoh@users.noreply.github.com> Co-authored-by: Michael Hackner <mhackner@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: kangal-bot <285672167+kangal-bot@users.noreply.github.com> Co-authored-by: Kataoka Katsuki <49934462+kataokatsuki@users.noreply.github.com> Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com> Co-authored-by: Jon Kinney <jonkinney@gmail.com> Co-authored-by: Kazunari Kamata <14287197+kazunari-kamata@users.noreply.github.com> Co-authored-by: oyoguhito <oyoguhito@kamatanoMacBook-Pro.local>
* fix(windows): restore system notifications and sound playback (herdrdev#2019) * test(windows): remove flaky sound timing assertion refs herdrdev#1330 * fix: preserve windows path variables during install refs herdrdev#1947 * fix(windows): preserve parent agent ownership refs herdrdev#1514 * docs: update preview manifest * fix: scope agent skill installation refs herdrdev#2022 * ci: allow repository organization migration * chore: update repository links after organization transfer * Update rose pine surface_dim colour to "Overlay" (herdrdev#2002) Co-authored-by: Can Celik <ogulcancelik@gmail.com> * chore: finish repository organization migration * fix: preserve kitty associated text (herdrdev#2051) refs herdrdev#2020 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix: add opt-in child-group process detection (herdrdev#2052) * fix: add opt-in child-group process detection refs herdrdev#1982 * fix: preserve lifecycle probes without foreground groups refs herdrdev#1982 * fix: launch argument-free agents on windows (herdrdev#2075) refs herdrdev#2072 * ci: consolidate ai review trigger label * fix: resume agents after headless restore (herdrdev#2088) refs herdrdev#2064 * fix(omp): support Windows session paths (herdrdev#2092) * fix: preserve windows sessions after ssh logout (herdrdev#2098) * fix: preserve windows sessions after ssh logout refs herdrdev#2008 * chore: document windows wmi safety refs herdrdev#2008 * fix(client): restore terminal on sighup and sigterm Enable termination-signal handling so SIGHUP and SIGTERM follow the graceful quit path and restore terminal state. Log handler registration failures and add PTY coverage for direct SIGHUP and server EOF restoration Co-authored-by: Matt Coles <macols@amazon.com> * fix(sidebar): keep worktree groups packed * fix: read alternate-screen agent history * chore: update agentmd for protocol changes * feat: support bottom tab bar placement (herdrdev#2118) * feat: support bottom tab bar placement * fix: preserve mouse cleanup under bottom mode bar refs herdrdev#2117 * chore: remove experiments from settings tui * fix(input): preserve native key lifecycle across routing (herdrdev#2142) refs herdrdev#2077 Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com> * fix(windows): preserve semantic escape key taps * fix: report a clear cli error when no herdr server is running (herdrdev#1963) * fix: report a clear cli error when no herdr server is running socket cli commands surfaced a raw io::Error debug string (`Error: Os { code: 2, ... }`) when nothing was listening on the api socket, which read like a bad --cwd path. map dead-socket connect failures to a `server_not_running` json error carrying the resolved socket path, printed once at the edge that surfaces the error; recovering callers (plugin offline registry fallback, agent start polling) recognize the marker and keep their existing behavior. refs herdrdev#1941 * fix: map dead-socket errors on the unchecked cli request path refs herdrdev#1941 * fix: make server-not-running guidance session-aware refs herdrdev#1941 * fix: expand copy-mode word-end window past a final wide glyph (herdrdev#2145) point_is_final_atom compared an atom's terminating column against a word-motion target's starting column. The two are equal for narrow cells but never for wide ones, so the read window stopped expanding and copy-mode `e` halted at the soft-wrap boundary on CJK text. Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(ui): make pane scrollbars optional (herdrdev#2166) refs herdrdev#2167 * fix(ci): skip pr gate in forks * feat: add antigravity-cli integration (herdrdev#2087) * feat: add antigravity_cli integration harness Register the `antigravity_cli` target, resolve its configuration directory to `~/.gemini/antigravity-cli/`, wire target actions, and add lifecycle hook scripts for Unix and Windows. * feat: support session resume for antigravity-cli * fix: correct antigravity-cli hook config path, shape, and agent label Antigravity CLI reads global customizations from ~/.gemini/config, keys hooks.json by hook name, and only accepts the matcher/hooks wrapper for the tool events. The previous install wrote event arrays at the top level of ~/.gemini/antigravity-cli/hooks.json, which agy never reads and would reject anyway, so no Herdr hook ever ran. Session reports were dropped for a third reason: the hooks reported the agent as antigravity-cli, but the server normalizes that to the canonical label agy before matching, so is_official_agent_source never matched and agy --conversation resume was unreachable. - Resolve the config dir to ~/.gemini/config - Nest Herdr entries under a Herdr-owned "herdr" block that install rewrites and uninstall removes, leaving other named hooks untouched - Emit grouped entries for PreToolUse/PostToolUse and flat handler lists for PreInvocation/PostInvocation/Stop - Report the canonical agy label from both hook assets and match it in agent_resume - Compile-gate the hook asset constants and stop shadowing $args in the PowerShell hook - Document the real directory, that it must already exist, and the named-block behavior refs herdrdev#1011 refs herdrdev#1571 * fix: make antigravity-cli integration session-only antigravity cli cannot express lifecycle safely: there is no blocked event, postinvocation is skipped on interruption, and stop fires at the end of a turn rather than on process exit, which left stale state and released authority at the wrong time. report only the conversation on preinvocation and let screen detection own agent state. resume via `agy --conversation <id>` is unchanged. * fix: update antigravity session after conversation switch --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(input): decode 0x1f as Ctrl+_ not Ctrl+- per ASCII standard (herdrdev#2165) * fix(input): decode 0x1f as Ctrl+_ not Ctrl+- per ASCII standard refs herdrdev#2164 * fix(input): update control-byte matrix test for 0x1f -> Ctrl+_ * fix(socket_paths): remove dead if-branch in derive_client_socket_from_api_socket (herdrdev#2157) * fix(windows): detect agents across git bash exec boundaries (herdrdev#2170) refs herdrdev#2107 * fix: route vscode remote copies through osc52 (herdrdev#2173) refs herdrdev#2015 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(detect): recognize opencode2 as opencode refs herdrdev#2169 * fix: stop advertising worktree json flag (herdrdev#2174) refs herdrdev#2171 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix: preserve claude settings formatting (herdrdev#2089) refs herdrdev#2066 Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> * fix(client): query host cell size when the ioctl reports no pixels (herdrdev#2160) * fix(cli): report non-UTF-8 arguments instead of panicking (herdrdev#2207) * fix(cli): report non-UTF-8 arguments instead of panicking * fix(cli): avoid echoing malformed arguments --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> * fix: avoid blocking on foreground cwd checks (herdrdev#2213) refs herdrdev#2206 * fix(docs): publish only released documentation * fix(docs): support older git in snapshot checks * fix(input): preserve hover during extended-button drags * fix: propagate host color scheme to pane apps (herdrdev#2214) refs herdrdev#714 * fix(pi): restrict state reporting to tui sessions (herdrdev#2159) Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix: page keys scroll pane scrollback at zsh and REPL prompts (herdrdev#2191) * fix: page keys scroll pane scrollback at zsh and REPL prompts PageUp/PageDown were forwarded to the pane whenever DECCKM (application cursor) was on, assuming only primary-screen pagers enable it, but zsh's line editor also enables DECCKM, as do REPLs such as python3. The result was PageUp scrolling shell history instead of Herdr scrollback. Bracketed paste discriminates the two: it means the app accepts typed or pasted text at a prompt, so line editors enable it and pagers do not. * test: update page key state fixture --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(website): rebuild marketing pages on new brand chassis * docs: finalize 0.8.0 release documentation * release: v0.8.0 * docs: update website manifest for v0.8.0 * docs: refine cpu optimization blog post * fix(ui): keep collapsed workspace status visible (herdrdev#2239) refs herdrdev#2216 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * docs: publish preview documentation * feat(plugins): index marketplace manifests * fix(docs): allow corrections to published versions refs herdrdev#916 * fix(input): preserve shift-tab in pane automation (herdrdev#2259) refs herdrdev#1561 * fix(ui): preserve sidebar scroll across clients (herdrdev#2280) refs herdrdev#2255 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(website): copy heading links to clipboard * fix: detect claude confirmation prompts refs herdrdev#2268 * feat(ui): add distinct status indicators (herdrdev#2282) refs herdrdev#2260 * fix(input): keep pending url clicks across host focus loss (herdrdev#2291) Opening a URL raises the browser, which takes focus away from the host terminal before the mouse release arrives. release_input_source(_headless) cleared pending_url_click_sources on that focus loss, so the release was forwarded to the pane and the agent opened the same URL again. Clear the set in clear_input_source instead, whose only production caller is remove_client. refs herdrdev#2290 Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com> * fix(cli): resolve pane query --current from caller (herdrdev#2298) refs herdrdev#2297 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * fix(input): parse default mouse reports (herdrdev#2312) * fix(input): parse default mouse reports refs herdrdev#2309 * fix(input): preserve split default mouse reports refs herdrdev#2309 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(ui): search single-tab names in navigator (herdrdev#2320) * fix(layout): return focus to the pane a split was opened from (herdrdev#2266) Closing a focused pane handed focus to the next pane in tree order. For a pane opened beside another one -- a plugin split, a file viewer, any transient tool pane -- that is rarely where the user was: it lands on some unrelated neighbour rather than the pane that opened it. Track the pane focus came from in TileLayout and prefer it when the focused pane closes, falling back to tree order when there is no history, when it points at the pane being closed, or when it points at a pane that has since gone away. The history lives in the layout, so it can only ever name a pane in the same tab. A one-slot history is only sound if internal focus excursions never write it, so the tree edits that used to bounce focus around now go through target-taking primitives instead. close_pane removes a background pane directly, so detach_pane and take_pane_for_move stop focus-close-refocusing. split_pane splits a target without moving focus: the runtime split path only focuses the new pane once the spawn succeeds, which makes a failed split a pure rollback, and the targeted and unfocused workspace split paths stop fabricating history. insert_pane_near now takes the focus intent, so an unfocused pane move leaves the target tab's history alone. The layout-level focused-split helpers become test-only; production splits all flow through the target-taking path. Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(terminal): render halfwidth katakana voiced marks (herdrdev#2257) Co-authored-by: oyoguhito <oyoguhito@kamatanoMacBook-Pro.local> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(ci): make issue gate structural * fix(input): preserve modifyOtherKeys key releases (herdrdev#2303) refs herdrdev#2302 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(config): accept retired agent panel scope (herdrdev#2295) refs herdrdev#2292 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * feat(theme): add optional sidebar background * docs: refresh readme and sponsors * chore: remove project-local worktree extension refs herdrdev#2325 * fix(website): update author X profile * feat(windows): support remote attach to unix hosts (herdrdev#2329) * feat(windows): support remote attach to unix hosts * fix(remote): preserve unix bridge behavior * fix(sidebar): highlight active agent in collapsed sidebar (herdrdev#2382) The collapsed sidebar renders agent rows with an unconditional Style::default().fg(p.overlay0), so the active agent is indistinguishable from the others. The workspace list directly above it, and render_agent_detail in the expanded sidebar, both mark the active entry. Reuse the existing active treatment: resolve the active entry with the same is_active_pane call the expanded agent panel uses, then paint the row background with surface_dim and the position number with text, the same tokens the collapsed workspace rows already use. Assisted-By: devx/717e5259-915f-4a7b-af07-6abe46da5b90 * ci: restore approved contributor gate * chore: update canonical repository references * fix(ci): repair contributor gate handling * fix: avoid ctrl-tab escape sequences in legacy panes refs herdrdev#2296 * fix: render OSC 4 palette overrides instead of forwarding the index (herdrdev#2162) Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix: keep plugin marketplace counts current * fix(cli): accept --flag=value and reordered options in pane read/wait-output (herdrdev#2183) * fix(cli): accept --flag=value and reordered options in pane read/wait-output * test(cli): trim redundant pane parser coverage --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> * docs: document custom agent integrations * fix(detect): recognize versioned Python agent wrappers (herdrdev#2188) Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(terminal): restore keyboard reporting on detach (herdrdev#2395) refs herdrdev#2393 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> * feat(copy-mode): add big-word motions (herdrdev#2270) Co-authored-by: Ubuntu <ubuntu@ip-172-31-252-234.ca-west-1.compute.internal> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix: add positive idle detection for kiro-cli prompt (herdrdev#2301) * fix: add positive idle detection for kiro-cli prompt refs discussion herdrdev#982 * fix: remove manifest integration tests per reviewer request --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(detect): ignore Cursor Run Everything status (herdrdev#2220) * fix(detect): ignore Cursor Run Everything status refs herdrdev#1763 * fix(detect): constrain Cursor approval controls refs herdrdev#1763 * test(detect): remove cursor manifest behavior fixture --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com> * fix(theme): refresh host appearance on focus (herdrdev#2417) * fix(theme): refresh host appearance on focus refs herdrdev#2416 * fix(input): preserve split appearance replies refs herdrdev#2416 * fix(input): retain fragmented appearance reports refs herdrdev#2416 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com> * fix(client): restore terminal query and windows config behavior * fix(ui): restore configurable status indicators * test(multi-client): adapt flattened spaces scroll fixture * fix(client): align remote image paste config across targets * test(multi-client): preserve interactive tab scroll across renders Retarget the flattened-sidebar regression at the live tab_scroll field and drive it through the client tab-bar scroll control. Mutation proof: removing tab_scroll from the preserved_scroll save/restore tuple produced: test non_foreground_render_preserves_interactive_tab_scroll ... FAILED (0 passed; 1 failed). Restoring it produced: test non_foreground_render_preserves_interactive_tab_scroll ... ok (1 passed; 0 failed). --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com> Co-authored-by: kangal-bot <285672167+kangal-bot@users.noreply.github.com> Co-authored-by: Bradley <67018167+brabli@users.noreply.github.com> Co-authored-by: akbash <akbash@herdr.dev> Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Wiedzmin <56316383+art-wiedzmin@users.noreply.github.com> Co-authored-by: Matt Coles <mattjcoles@outlook.com> Co-authored-by: Matt Coles <macols@amazon.com> Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com> Co-authored-by: Season Saw <season.saw@gmail.com> Co-authored-by: Akira TSURUDA <jas39.gripen@gmail.com> Co-authored-by: Ludovico Magnocavallo <ludo@qix.it> Co-authored-by: serhat dolmaci <srhtsrht17@gmail.com> Co-authored-by: WakaTaira <50697207+WakaTaira@users.noreply.github.com> Co-authored-by: Florian <13469873+VialFlorian@users.noreply.github.com> Co-authored-by: Rhys <105699450+rhjoh@users.noreply.github.com> Co-authored-by: Michael Hackner <mhackner@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Kataoka Katsuki <49934462+kataokatsuki@users.noreply.github.com> Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com> Co-authored-by: Jon Kinney <jonkinney@gmail.com> Co-authored-by: Kazunari Kamata <14287197+kazunari-kamata@users.noreply.github.com> Co-authored-by: oyoguhito <oyoguhito@kamatanoMacBook-Pro.local> Co-authored-by: Ian Ker-Seymer <i.kerseymer@gmail.com> Co-authored-by: Mo <77584024+hamidi-dev@users.noreply.github.com> Co-authored-by: Kyle Corbeille <kcorbeille76@gmail.com> Co-authored-by: Phil Larson <hello@phillarson.xyz> Co-authored-by: JP Lew <462836+jplew@users.noreply.github.com> Co-authored-by: Ubuntu <ubuntu@ip-172-31-252-234.ca-west-1.compute.internal> Co-authored-by: Sam Biggins <sambiggins@gmail.com> Co-authored-by: Jesse Zhang <j3ssezhang102@gmail.com>
Summary
Checks
cargo test default_mouse -- --nocapturecargo test raw_input::tests -- --nocapturecargo fmt --checkcargo clippy --all-targets --locked -- -D warningsjust checkreached unrelated integration failures because the Kennel-provided externalCARGO_TARGET_DIRconflicts with the test harness path check intests/support/mod.rsrefs #2309