feat(web only): find in chat with mod+f - #9638
Closed
imabdulazeez wants to merge 3 commits into
Closed
imabdulazeez wants to merge 3 commits into
imabdulazeez wants to merge 3 commits into
Conversation
Long threads had no way to search the conversation: the timeline is virtualized, so the browser's native find only sees mounted rows, and the desktop shell binds no find-in-page at all. Add a `chat.find` keybinding command (default `mod+f` outside terminal focus) and a "Find in chat" command palette action that open a find bar over the active thread. Matches are counted from the timeline's message rows so off-screen messages are included, highlighted in mounted rows through the CSS Custom Highlight API, and stepped with Enter / Shift+Enter, scrolling each match into view. The pull requests page now resolves the same command for its list search instead of matching Mod+F by hand. Made with Claude Fable 5.1 in Claude Code.
Contributor
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds a substantial find-in-chat workflow across the timeline, command palette, keybinding system, highlighting layer, and pull-request search behavior. It also changes the product default keybindings by assigning Notes:
You can add or adjust custom eligibility rules. Learn more. |
Member
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Changed
Adds a find bar over the open thread.
chat.findkeybinding command, defaultmod+fwithwhen: "!terminalFocus", plus a "Find in chat" command palette action.Aaandabtoggles for match case and whole word. One shared pattern feeds both the counter and the highlighter, so counts and painted ranges always agree.chat.findcommand for its list search instead of matching Mod+F by hand.Composed from the shared UI primitives:
InputGroup,InputGroupAddon,InputGroupInput, andInputGroupTextfor the field,Button(ghost-muted,icon-xs) for the controls,Toggle(ghost,xs) for the options, and the shared keybinding registry viaresolveShortcutCommandfor the shortcut. No new surfaces or variants are introduced.Supersedes #5562 with a smaller footprint, and picks up where #4599 left off. Resolves the request in discussion #6709 (formerly #1486).
Why
Long threads have no way to search the conversation. The timeline is virtualized, so the browser's native find only sees mounted rows, and the desktop shell binds no find-in-page at all. Users asked for Codex-style Cmd+F in #1486 and have kept +1ing it since.
Searching the row model rather than the DOM is what makes off-screen matches work. Painting with the Highlight API avoids the code-block corruption that earlier attempts hit when they injected markup into markdown.
Relation to orchestration V2 (#2829)
Earlier find PRs (#3539, #4599, #3779) were closed ahead of the orchestration V2 rewrite. This PR is web-only: it touches no orchestration, adapter, or provider code, and its single server change is one assertion in
keybindings.test.ts. Replaying it on the current #2829 head applies cleanly apart from two adjacent-line conflicts inCommandPalette.tsxandkeybindings.test.ts, so it should survive that merge with a trivial rebase.UI Changes
Screen.Recording.2026-09-04.at.3.10.15.PM.mov
Checklist
Made with Claude Fable 5.1 in Claude Code.
Note
Add
chat.findcommand bound tomod+ffor web chat searchchat.findin the static keybinding registry and maps it tomod+f(excluding terminal focus) in keybindings.ts.ChatFindBarcomponent and search logic in ChatFindBar.logic.ts to find, count, and navigate literal, case-sensitive, and whole-word matches across message rows.chat.findshortcut rather than a hard-coded modifier check.mod+foutside terminal focus now opens the chat find bar instead of being unhandled in web chat; the pull requests page honors the configuredchat.findbinding.Macroscope summarized 7e2338a.