🌐 US-Proxy
class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
Skip to content

feat: update search dialog with filter pills and default view - #25753

Merged
tracyjohnsonux merged 1 commit into
mainfrom
stevenmasley/agents-inline-search
May 29, 2026
Merged

feat: update search dialog with filter pills and default view#25753
tracyjohnsonux merged 1 commit into
mainfrom
stevenmasley/agents-inline-search

Conversation

@tracyjohnsonux

@tracyjohnsonux tracyjohnsonux commented May 27, 2026

Copy link
Copy Markdown
Contributor

Update the ChatSearchDialog with four interaction states:

  1. Default (empty): quick actions (New chat, Settings, Personal Skills, View usage) + recent chats list
  2. Focused: filter-by dropdown overlay with clickable chips (Unread, Archived, PR status, Diff URL)
  3. Active search: filter pills and/or freeform text with debounced live results showing "N results" count
  4. Parameterized filter: incomplete pill (dashed border) for filters needing a value (e.g. pr_status:); Space or Enter commits the value into a solid pill

Filter pills and freeform text are combinable. Backspace on empty text removes the last pill. The filter dropdown overlays content below and dismisses on blur or Escape.

Changes:

  • ChatSearchDialog.tsx: manages structured filter state with separate incompleteFilterKey tracking, renders filter dropdown, passes recent chats and quick action callbacks
  • ChatSearchInput.tsx: renders completed filter pills (solid border, x dismiss) and incomplete pills (dashed border) inline with the text input
  • ChatSearchResults.tsx: default view shows quick actions + recent chats instead of the old help text; "No matching chats" is centered in the modal
  • ChatsSidebar.tsx: passes recentChats, onNewChat, onOpenSettings to the dialog
Implementation notes
  • No backend changes; reuses existing chatSearch() API and normalizeChatSearchInput() normalizer
  • Filter state uses a clean model: filters array for committed filters + incompleteFilterKey string for the parameterized filter being typed; freeText serves dual purpose (filter value when incomplete key is set, otherwise freeform search)
  • The filter dropdown is absolutely positioned (top-full) below the search input, dismisses via container onBlur with contains(relatedTarget) check
  • Quick action links (Personal Skills, View usage) use Link components that close the dialog on click

Generated with Coder Agents

@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch 3 times, most recently from c70537a to d6eab9b Compare May 27, 2026 22:22
@tracyjohnsonux tracyjohnsonux changed the title feat(site/src/pages/AgentsPage): add inline search with filter pills to chat sidebar feat(site/src/pages/AgentsPage): update search dialog with filter pills and default view May 27, 2026
@tracyjohnsonux
tracyjohnsonux marked this pull request as ready for review May 27, 2026 22:23

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review

coder-agents-review Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

Chat: Review posted | View chat
Requested: 2026-05-28 09:29 UTC by @jaaydenh
Spend: $80.04 / $100.00

Review history
  • R1 (2026-05-27), 1 P1, 1 P2, 3 P3, COMMENT. Review
  • R2 (2026-05-27): 13 reviewers, 2 Nit, 1 P1, 6 P2, 12 P3, 1 P4, REQUEST_CHANGES. Review
  • R3 (2026-05-27), 2 Nit, 1 P1, 6 P2, 12 P3, 1 P4, COMMENT. Review
  • R4 (2026-05-28): 4 reviewers, 2 Nit, 1 P1, 9 P2, 17 P3, 1 P4, REQUEST_CHANGES. Review
  • R5 (2026-05-28): 3 reviewers, 2 Nit, 1 P1, 9 P2, 17 P3, 1 P4, APPROVE. Review
  • R6 (2026-05-28): 3 reviewers, 2 Nit, 1 P1, 9 P2, 17 P3, 1 P4, APPROVE. Review

deep-review v0.5.0 | Round 6 | 5991a2c..bc83184

Last posted: Round 6, 30 findings (1 P1, 9 P2, 17 P3, 1 P4, 2 Nit), APPROVE. Review

Finding inventory

Findings

# Sev Status Location Summary Round Reviewer Posted
CRF-1 P1 Author fixed (7c6e9a5) ChatSearchDialog.stories.tsx Zero test coverage for 444 new lines of UI code across four interaction states R1 Netero Yes
CRF-2 P2 Author fixed (7c6e9a5) ChatsSidebar.tsx:156 Settings quick action button is a no-op; closes dialog without navigating R1 Netero Yes
CRF-3 P3 Author fixed (1889e45) ChatSearchDialog.tsx:52 SearchFilter type duplicated across ChatSearchDialog.tsx and ChatSearchInput.tsx R1 Netero Yes
CRF-4 P3 Author fixed (7c6e9a5) ChatSearchResults.tsx:161 Button/chip className string duplicated 5 times across two files R1 Netero Yes
CRF-5 P3 Author fixed (bc83184) ChatSearchDialog.tsx:188 Keyboard navigation non-functional for recent chats in default view; aria-controls disconnect R1 Netero Yes
CRF-6 P3 Author fixed (5644dad) ChatSearchResults.tsx:100 Deleted comment explaining non-obvious Radix ScrollArea !block override R2 Netero Yes
CRF-7 P2 Author fixed (5644dad) ChatSearchDialog.tsx:96 Dialog opens without focus inside it; ARIA modal violation and Cmd+K keyboard regression R2 Mafuuu P2, Pariston P2 Yes
CRF-8 P2 Author fixed (1889e45) ChatSearchDialog.tsx:256 Filter dropdown stays open during text input, covering search results R2 Nami P2, Hisoka P3, Pariston P3 Yes
CRF-9 P2 Author fixed (5644dad) ChatSearchDialog.stories.tsx:376 Filter stories verify pill DOM but never assert API query contract R2 Bisky P2, Chopper P3 Yes
CRF-10 P2 Author fixed (5644dad) ChatSearchDialog.tsx:125 buildQuery emits unquoted filter values; paste+Enter corrupts multi-word queries R2 Meruem Yes
CRF-11 P2 Author fixed (5644dad) ChatSearchDialog.tsx:167 useDebouncedValue(effectiveFilters) creates infinite 500ms re-render loop R2 Hisoka Yes
CRF-12 P3 Author fixed (5644dad) ChatSearchDialog.stories.tsx:350 DefaultViewWithQuickActions checks text presence but never clicks quick actions R2 Bisky Yes
CRF-13 P3 Author fixed (5644dad) ChatSearchDialog.stories.tsx:391 Enter key commit path for parameterized filters is untested R2 Bisky Yes
CRF-14 P3 Author fixed (5644dad) ChatSearchDialog.stories.tsx:342 No story exercises combined filters with freeform text R2 Bisky Yes
CRF-15 P3 Author accepted R4 (resolved thread; dual-purpose freeText is the chosen design) ChatSearchDialog.tsx:237 Entering parameterized filter mode silently destroys freeform search text R2 Meruem Yes
CRF-16 P3 Author fixed (5644dad) ChatSearchResults.tsx:157 onSelectChat used for non-chat quick action links; naming misleads R2 Gon P3, Mafuuu Nit Yes
CRF-17 P3 Author fixed (5644dad) ChatSearchDialog.tsx:405 FilterDropdown hand-rolls button elements instead of using Button component R2 Robin Yes
CRF-18 P3 Author fixed (5644dad) ChatSearchDialog.tsx:226 6 narration comments in addFilter/handleInputKeyDown restate what code says R2 Gon Yes
CRF-19 Nit Author fixed (5644dad) ChatSearchDialog.stories.tsx:402 5 story test-step comments restate the assertions below them R2 Gon Yes
CRF-20 P3 Author fixed (5644dad) ChatSearchResults.tsx:184 ScrollArea 4-prop config duplicated within same file R2 Robin P3, Gon P3 Yes
CRF-21 P4 Author accepted R4 (resolved thread; pill rendering works, Badge reuse is scope expansion) ChatSearchInput.tsx:52 Filter pills hand-roll Badge+dismiss pattern; Badge and TagInput exist R2 Robin Yes
CRF-22 Nit Author accepted R4 (resolved thread; branching logic is clear at call site) ChatSearchDialog.tsx:20 defaultValue name does double duty as value and filter-type signal R2 Leorio Yes
CRF-23 P2 Author fixed (9d31166) ChatSearchDialog.stories.tsx:367 FilterDropdownOnFocus story will fail; 6/7 filter stories unrunnable (click input, not toggle) R4 Netero, Bisky Yes
CRF-24 P3 Author fixed (9d31166) ChatSearchDialog.tsx:290 Typed filter auto-detection path has no story coverage R4 Netero Yes
CRF-25 P2 Author contested; panel closed R5 (2/3 accept: Pariston accepts as mild UX friction, Chopper accepts as defensible design choice) ChatSearchDialog.tsx:98 Auto-focus on dialog container drops keystrokes; Cmd+K typing broken R4 Pariston Yes
CRF-26 P2 Author fixed (9d31166) ChatSearchDialog.tsx:186 Stale debouncedFreeText leaks spurious title search for 500ms after filter commit R4 Mafuuu Yes
CRF-27 P3 Author fixed (9d31166) ChatSearchDialog.stories.tsx:350 DefaultViewWithQuickActions doesn't verify recent chat items render R4 Bisky Yes
CRF-28 P3 Author fixed (9d31166) ChatSearchDialog.tsx:305 Duplicate typed filter key silently falls through to freeform title search R4 Mafuuu Yes
CRF-29 P3 Author fixed (9d31166) ChatSearchDialog.tsx:134 buildQuery wraps values without stripping internal quotes; malformed queries R4 Knov Yes
CRF-30 P3 Author accepted R5 (comment documents relationship; no compile-time enforcement) ChatSearchDialog.tsx:36 FILTER_DEFINITIONS and passthroughChatSearchFilterKeys are independent sources of truth R4 Knov Yes

Contested and acknowledged

CRF-3 (P3, ChatSearchDialog.tsx:52) - SearchFilter type duplicated

  • Finding: Identical SearchFilter type defined in ChatSearchDialog.tsx and ChatSearchInput.tsx.
  • Author accepted: Thread resolved without code change in R2. Subsequently fixed in R3.

CRF-15 (P3, ChatSearchDialog.tsx:237) - freeText destroyed on parameterized filter entry

  • Finding: Adding a parameterized filter clears freeText via setFreeText(""), destroying any in-progress freeform search.
  • Author accepted: Thread resolved without code change. The dual-purpose design is the chosen approach.

CRF-21 (P4, ChatSearchInput.tsx:52) - Filter pills hand-roll Badge+dismiss

  • Finding: Filter pills use raw <span> + <button> instead of Badge component.
  • Author accepted: Thread resolved without code change. Scope expansion.

CRF-22 (Nit, ChatSearchDialog.tsx:20) - defaultValue naming

  • Finding: defaultValue: string | null name could mislead.
  • Author accepted: Thread resolved without code change. Branching logic is clear.

CRF-25 (P2, ChatSearchDialog.tsx:98) - Auto-focus drops keystrokes

  • Finding: Dialog opens without input focus. Cmd+K typing requires Tab/click. DefaultView renders based on query state not focus state, so auto-focusing input wouldn't hide quick actions.
  • Author defense: Intentional design choice to show default view before typing. Persisted through CRF-7 (R2) and CRF-25 (R4). Content focus removed per feedback but input auto-focus not restored.
  • Panel closure (R5, 2/3): Pariston (original raiser) accepted the consequence as "mild UX friction, not functional failure." Chopper accepted as "defensible design choice" for a dialog that doubles as command palette.

CRF-30 (P3, ChatSearchDialog.tsx:36) - Independent sources of truth

  • Finding: FILTER_DEFINITIONS keys and passthroughChatSearchFilterKeys in searchQuery.ts are independent with no compile-time link.
  • Author accepted: Comment added documenting the relationship. No structural enforcement.

Round log

Round 1

Netero-only. 1 P1, 1 P2, 3 P3. Reviewed against 5991a2c..d6eab9b.

Round 2

Churn guard overridden (BLOCKED->PROCEED). Panel: 13 reviewers. 5 P2, 9 P3, 1 Nit, 1 P4 new. Reviewed against 5991a2c..7c6e9a5.

Round 3

BLOCKED. CRF-3 and CRF-8 fixed. 16 findings silent. Reviewed against 5991a2c..1889e45.

Round 4

Churn guard overridden (BLOCKED->PROCEED). Panel: 4 reviewers (Bisky, Mafuuu, Pariston, Knov). 3 P2, 5 P3 new. Reviewed against 5991a2c..5644dad.

Round 5

Churn guard overridden (BLOCKED->PROCEED): 7/9 findings fixed, 1 contested (CRF-25), 1 accepted (CRF-30), CRF-5 still open since R1. Panel: 3 reviewers (Bisky, Pariston, Chopper). CRF-25 closed by panel (2/3 accept). APPROVE. Reviewed against 5991a2c..9d31166.

Round 6

CRF-5 fixed. PR significantly restructured (+398/-147, 14 files). New focusInputOnOpen prop, repeatable filters, keyboard nav for default view. Reviewed against 5991a2c..bc83184.

About deep-review

CRF = Coder Review Finding (P0-P4, Nit, Note)

Reviewer Focus
Bisky tests
Chopper ops/errors
Churn-guard change verification
Ging language modernization
Gon naming
Hisoka edge cases
Killua perf
Kite change integrity
Knov contracts
Knuckle SQL
Kurapika security
Leorio docs
Luffy product
Mafu-san process
Mafuuu contracts
Melody dispatch/pairing
Meruem structural
Nami frontend
Netero mechanical checks
Pariston premise testing
Pen-botter product gaps
Razor verification
Robin duplication
Ryosuke Go arch
Takumi concurrency
Zoro shape

🤖 Managed by Coder Agents.

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First-pass review (Netero). These are mechanical findings from the first-pass scanner. The full review panel has not yet reviewed this PR; it will run after these are addressed.

1 P1, 1 P2, 3 P3.

444 new lines of interactive UI with zero new stories is the main blocker. The Settings button no-op and the keyboard navigation gap in the default view are worth fixing before the panel digs into design.

"The Settings button appears functional but does nothing the user can observe beyond dismissing the dialog." - Netero


site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchDialog.tsx:188

P3 [CRF-5] Keyboard navigation non-functional for recent chats in default view.

resultCount derives from searchQuery.data?.length ?? 0. When no query is active (default view), the query is disabled so resultCount = 0. The ArrowDown/ArrowUp handler returns early when resultCount === 0 (line 306). The DefaultView renders recent chats in a <div role="listbox"> and passes selectedChatIndex, but the index is never set by keyboard.

Additionally, aria-controls on the combobox input is undefined when hasResults is false (ChatSearchInput.tsx:87), creating a disconnect: a listbox exists in the DOM but the combobox doesn't reference it. (Netero)

🤖

🤖 This review was automatically generated with Coder Agents.

Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchDialog.tsx Outdated
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/ChatsSidebar.tsx Outdated
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchDialog.tsx Outdated
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchResults.tsx Outdated
@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch 2 times, most recently from e0d5540 to 7c6e9a5 Compare May 27, 2026 22:47

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch from 7c6e9a5 to 6418bc0 Compare May 27, 2026 23:00

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch from 6418bc0 to a4cff2b Compare May 27, 2026 23:14

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch from a4cff2b to 4542aa6 Compare May 27, 2026 23:19

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch from 4542aa6 to 1889e45 Compare May 27, 2026 23:22

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The structural fix for CRF-2 (Link-by-construction instead of button+callback) is the right approach, and the five new stories exercise real interaction flows. The filter state model is clean, and the buildQuery/queryFreeText split that prevents incomplete filter values from leaking into title search is well-designed.

5 P2, 9 P3, 1 Nit.

The P2s cluster around two themes: the filter dropdown lifecycle (opens on focus, never closes during typing, covers results) and test coverage gaps where stories verify DOM without checking the API contract. The useDebouncedValue(effectiveFilters) infinite re-render and the unquoted buildQuery values are independent bugs with straightforward fixes.

CRF-5 (keyboard navigation for default view, P3 from R1) and CRF-6 (deleted Radix ScrollArea comment, P3 from R2 Netero) remain open.

"If buildQuery silently dropped filters or produced malformed queries, every new story would still pass because they only assert on pill DOM presence." - Bisky

🤖 This review was automatically generated with Coder Agents.

Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchDialog.tsx Outdated
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchResults.tsx Outdated
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchResults.tsx Outdated

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRF-3 (SearchFilter type deduplication) and CRF-8 (filter dropdown covering results) are fixed in this push. The toggle button replacing onFocus is a clean approach.

16 findings from the panel review remain unaddressed with no author response. Further review is blocked until the author responds or pushes fixes.

Open P2s (4): CRF-7 (ARIA/focus on dialog open), CRF-9 (filter stories missing API assertions), CRF-10 (buildQuery unquoted values), CRF-11 (useDebouncedValue infinite re-render).

Open P3s (7): CRF-5 (keyboard nav default view), CRF-6 (deleted ScrollArea comment), CRF-12 (DefaultView story no clicks), CRF-13 (Enter commit untested), CRF-14 (no combined filter+text story), CRF-15 (freeText destruction), CRF-16 (onSelectChat naming).

Open P3s (3): CRF-17 (FilterDropdown raw buttons), CRF-18 (narration comments), CRF-20 (ScrollArea config duplication).

Open Nit/P4 (3): CRF-19 (story comments), CRF-21 (Badge/TagInput reuse), CRF-22 (defaultValue naming).

🤖 This review was automatically generated with Coder Agents.

@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch from 1889e45 to 5644dad Compare May 27, 2026 23:45

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The author addressed 13 of 17 open findings in one push. All five P2s from R2 are fixed (ARIA focus, dropdown lifecycle, API assertions, unquoted values, infinite re-render), along with 8 P3s including the onSelectChat rename, FilterDropdown Button migration, comment cleanup, ScrollArea deduplication, and three new stories (Enter commit, combined filter+text). The fixes are well-crafted.

3 P2, 5 P3 new.

The P2s center on a regression from the CRF-8 fix: removing onFocus from the input fixed the dropdown-covers-results problem but broke all filter stories that click the input to open the dropdown. Six of seven filter stories are unrunnable and the CRF-9/13/14 fixes have never executed. The auto-focus change (CRF-25) is related: focus on the dialog container drops keystrokes, breaking the Cmd+K typing workflow, and the stated rationale (quick action visibility) doesn't hold because DefaultView renders based on query state, not focus state.

CRF-5 (keyboard navigation for default view, P3 from R1) remains open.

"When a user opens the dialog via Cmd+K to search, keystrokes are silently dropped. Focus is on the dialog container div, which doesn't accept text input." - Pariston

🤖 This review was automatically generated with Coder Agents.

Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchDialog.tsx Outdated
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchDialog.tsx Outdated
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatSearchDialog.tsx Outdated
@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch from 5644dad to 9d31166 Compare May 28, 2026 00:18

Copy link
Copy Markdown
Contributor Author

/coder-agents-review

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All R4 fixes verified. The stories now use the toggle button, TypedFilterAutoDetection covers the auto-detection path, stale debouncedFreeText is guarded, duplicate filter keys are consumed, internal quotes are stripped, and recent chat items are asserted.

Across 5 rounds, 30 findings raised: 24 fixed, 5 accepted/closed, 1 open (CRF-5, P3).

CRF-25 (auto-focus design choice) is closed by panel consensus. Pariston (original raiser) accepted it as mild UX friction. The author's intent is documented and the design has survived two rounds of challenge.

CRF-5 (P3, keyboard navigation for default view) remains open since R1. The DefaultView renders a role="listbox" but ArrowDown/ArrowUp can't reach it because resultCount is 0 when no query is active. Low severity for this PR; a follow-up could wire recentChats.length as the navigable count when !hasQuery and set aria-controls={listboxId} when the default view is showing. This needs a human decision on priority.

The panel noted a few P3 test coverage gaps worth considering: TypedFilterAutoDetection doesn't assert the API query contract (Bisky), no story exercises X-button pill removal or Escape-to-close-dropdown (Bisky), and only 1 of 4 quick action links is click-tested (Chopper). These are incremental improvements, not blockers.

"The problem is correctly understood, the solution is proportional, and the query building is at the right level." - Pariston

🤖 This review was automatically generated with Coder Agents.

@tracyjohnsonux
tracyjohnsonux requested a review from jaaydenh May 28, 2026 03:34
@jaaydenh jaaydenh changed the title feat(site/src/pages/AgentsPage): update search dialog with filter pills and default view feat: update search dialog with filter pills and default view May 28, 2026
@jaaydenh

Copy link
Copy Markdown
Contributor

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8ce54544e7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jaaydenh

Copy link
Copy Markdown
Contributor

@codex review

@jaaydenh

Copy link
Copy Markdown
Contributor

/coder-agents-review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bc83184ae2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRF-5 (keyboard navigation for default view, open since R1) is fixed. selectableChats falls through to recentChats when no query is active, ArrowDown/ArrowUp navigate, and aria-controls is connected. The RecentChatKeyboardNavigation story exercises the full path including Enter-to-navigate.

The focusInputOnOpen redesign (CRF-25) is clean: desktop auto-focuses the input (Radix default), mobile focuses the dialog container. The OpenedFromSearchButton story verifies the mobile path.

Across 6 rounds, 30 findings raised: 25 fixed, 5 accepted/closed. All resolved.

Three P3s from this round's panel (not blockers):

  1. REPEATABLE_FILTER_KEYS is half-wired: the typed-filter path (line 315) allows duplicate pr_status values, but the dropdown's addFilter guard (line 246) and FilterDropdown disabled state block it. The two interaction paths disagree on whether pr_status is repeatable. (Bisky, Mafuuu, Pariston, all P3)

  2. Boolean filter clicks are debounced 500ms before the search fires. Clicking "Unread" shows the pill immediately but results stay on the default view for half a second. The debounce is designed for text keystroke batching; a discrete filter click could bypass it. (Pariston P3)

  3. DefaultViewWithQuickActions story verifies navigation link text but never clicks Settings, Personal Skills, or View usage to verify routes or dismiss behavior. (Bisky P3)

"This is a clean solution to a genuinely tricky focus problem." - Pariston, on the focusInputOnOpen redesign

🤖 This review was automatically generated with Coder Agents.

@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch 2 times, most recently from 752311b to 0a347ed Compare May 28, 2026 22:26
@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch 6 times, most recently from aec2450 to bbdebc7 Compare May 29, 2026 00:34
…ls and default view

Update the ChatSearchDialog with four interaction states:

1. Default (empty): quick actions (New chat, Settings) + recent chats list
2. Focused: filter-by dropdown with clickable chips (Unread, Archived,
   PR status, Diff URL)
3. Active search: filter pills and/or freeform text with debounced live
   results showing "N results" count
4. Parameterized filter: incomplete pill (dashed border) for filters
   needing a value (e.g. pr_status:)

Filter pills and freeform text are combinable. The search input now renders
filter pills inline, and Backspace on empty text removes the last pill.

Changes:
- ChatSearchDialog: manages structured filter state, renders filter
  dropdown, passes recent chats and quick action callbacks
- ChatSearchInput: renders filter pills inline with the text input
- ChatSearchResults: default view shows quick actions + recent chats
  instead of the old help text
- ChatsSidebar: passes recentChats, onNewChat, onOpenSettings to dialog
@tracyjohnsonux
tracyjohnsonux force-pushed the stevenmasley/agents-inline-search branch from bbdebc7 to 48ca5c3 Compare May 29, 2026 01:03
@tracyjohnsonux
tracyjohnsonux merged commit 650069f into main May 29, 2026
28 of 29 checks passed
@tracyjohnsonux
tracyjohnsonux deleted the stevenmasley/agents-inline-search branch May 29, 2026 04:08
@github-actions github-actions Bot locked and limited conversation to collaborators May 29, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants