Repository navigation
feat: accept mouse events on terminal session control - #4685
Conversation
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (9)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughThe control parser now accepts Suggested reviewers: Priority: ⬇️ Low Merge Risk: ⚪ Minimal · up to The new mouse command has no established issue requiring a fix before merge. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to A controller gains a mouse command for applications that request mouse input. The command uses the existing writable-session path, and the reviewed server checks still limit where events can go. No PR-introduced security finding was established, though interruption behavior and broader deployment context remain uncertain. Retained concerns Security review detailsSecurity Blast Radius
Security Findings and Attack Paths
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
Merges 46 upstream commits spanning stable releases v0.9.2 and v0.9.3: multiple prefix keys (herdrdev#4653), self-reported agent resume commands (herdrdev#4687), Go To workspace-grouped navigator rows (herdrdev#4384), clear_pane keybinding (herdrdev#4383), non-interactive machine status/reconnect with SSH MFA (herdrdev#3763), interactive machine add session picker (herdrdev#4204, herdrdev#4678), mouse events on terminal session control (herdrdev#4685), staggered agent restarts (herdrdev#4102), SSH compression (herdrdev#4340), row-shift scrolling (herdrdev#4711), TERM_PROGRAM identity (herdrdev#4104), PowerShell 7 default on Windows (herdrdev#4297), tab-close confirmation (herdrdev#4379, herdrdev#4409), full event subscription bursts (herdrdev#4178, herdrdev#4225), SIGWINCH color refresh (herdrdev#4349), saved-layout shutdown survival (herdrdev#4320), stray-Escape click fix (herdrdev#3480), first-task-done detection (herdrdev#3338, herdrdev#3990, herdrdev#3916), CPU/perf work across navigator/splits/named-targets/event-batching (herdrdev#4506, herdrdev#4546, herdrdev#4426, herdrdev#4669, herdrdev#4670, herdrdev#4671, herdrdev#4672), synchronized-frame tearing and cursor flicker fixes (herdrdev#2968, herdrdev#4303), API socket transient-error resilience (herdrdev#4601), async worktree git lookups (herdrdev#4492), worktree-open workspace-takeover fix (herdrdev#4293), SSH agent forwarding after reconnect (herdrdev#1931, herdrdev#4252), OpenCode V1 subagent status (herdrdev#1362, herdrdev#4240), Codex idle/mention/interrupt-key detection (herdrdev#4507, herdrdev#4196), Kiro/Grok detection fixes (herdrdev#4203, herdrdev#4372, herdrdev#4333), Droid scrollback clears (herdrdev#4432), copy-mode-stays-active fix (herdrdev#3812, herdrdev#4281), Ctrl+Shift+letter fix (herdrdev#4581, herdrdev#4597), split mouse-report fix (herdrdev#4630), several Windows paste/mouse-capture/clipboard/detection fixes (herdrdev#4251, herdrdev#4284, herdrdev#4470, herdrdev#4314, herdrdev#4313, herdrdev#4579, herdrdev#4309), navigator search/highlight fixes (herdrdev#4300, herdrdev#4408, herdrdev#4273, herdrdev#4535, herdrdev#4355), session-attach-without-terminal error (herdrdev#4393), socket error request-ID preservation (herdrdev#4344), plugin install option ordering (herdrdev#4446), Windows host color detection (herdrdev#1530, herdrdev#4369), post-update saved-machine summary (herdrdev#4722), a hotfix for Escape-prefixed terminal key bindings (herdrdev#4759) and pinned Windows ConPTY bundling (herdrdev#4760), Windows same-user cross-elevation attach (herdrdev#4777), and the libghostty-vt binding extraction into a ghostty-vt workspace crate (herdrdev#4661). Also fixes two merge seam breaks: overlays.rs combines the fork's rounded_borders threading with upstream's per-client prefix-label onboarding overlay, and the fork's command_palette test file is updated for the new Vec<KeyCombo> prefix representation and the BindingConfig::one constructor introduced by the multi-prefix-key feature. refs upstream herdrdev/herdr@331775c3
Summary
herdr terminal session controlhas no way to send mouse input, so bridge clients can't click buttons in TUIs that enabled mouse reporting (for example an agent's "scroll to bottom" button).This adds a
terminal.mousecommand to the control stream:{"type":"terminal.mouse","action":"down","button":"left","column":12,"row":5}actionisdown,up,drag, ormove;buttonisleft(default),right, ormiddle;modifiersis optional (Shift = 1, Ctrl = 2, Alt = 4). Cells are zero-based in the controller's viewport, liketerminal.scroll. A click isdownthenup.ClientMessage::AttachMousethatherdr agent attachalready uses, so there is no new wire message and no server change. The server encodes the event for the pane's mouse mode and drops it when the application hasn't enabled mouse reporting, so a plain shell never receives stray escape bytes.Why not let clients write mouse bytes through
terminal.input: control frames are re-rendered output, so a client can't see whether the application enabled mouse reporting or which encoding it wants. Guessing would type[<0;12;5Minto apps that didn't ask for mouse input.Docs: CLI reference and persistence/remote pages (en, ja, zh-cn).
Testing
1000h/1006hencodes\x1b[<0;11;6M.printf '\e[?1000h\e[?1006h'; cat -vreceived^[[<0;13;6M ^[[<0;13;6mfrom a control-session click; a plaincat -vpane received nothing.just checkon macOS and Linux, including Windows lint.