Skip to content

Comments

Add initial implementation of /extensions explore command#19029

Merged
chrstnb merged 6 commits intomainfrom
revert-18838-cb/genericlist
Feb 20, 2026
Merged

Add initial implementation of /extensions explore command#19029
chrstnb merged 6 commits intomainfrom
revert-18838-cb/genericlist

Conversation

@chrstnb
Copy link
Collaborator

@chrstnb chrstnb commented Feb 13, 2026

Reverts #18838 as it seems unwise to be merging this logic with the settings search for now. The two components look quite different

Add the initial implementation of listing extensions via /extensions explore

This is behind experimental.extensionRegistry

Details

Screen.Recording.2026-02-12.at.3.04.28.PM.mov

mocks here: https://www.figma.com/design/7blNwvCqD4RjuTtAGveNCc/Gemini-CLI?node-id=2528-4361&t=M37Fa4exf94gLTcP-0#1619052367

@chrstnb chrstnb requested a review from a team as a code owner February 13, 2026 20:44
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @chrstnb, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request performs a complete revert of a previous change that aimed to introduce a generic searchable list component. The revert removes all associated code, effectively eliminating the fuzzy search capabilities and the SearchableList component from the application, restoring the settings dialog to its prior state.

Highlights

  • Reverted Searchable List Feature: The pull request fully reverts the functionality that introduced a generic searchable list component and its integration into the settings and extensions dialogs.
  • Removed Fuzzy Search Logic: All code related to fuzzy search, including the AsyncFzf library integration, search state management, and filtering logic, has been removed from the settings dialog.
  • Deleted Associated Files: The SearchableList component, its dedicated test file, and the useFuzzyList custom hook have all been removed from the codebase.
Changelog
  • packages/cli/src/ui/components/SettingsDialog.tsx
    • Removed imports for AsyncFzf, useUIState, useTextBuffer, and FzfResult interface.
    • Removed search state management, fuzzy search logic, and related UI calculations.
    • Removed the useFuzzyList hook integration and adjusted props passed to BaseSettingsDialog.
  • packages/cli/src/ui/components/shared/BaseSettingsDialog.tsx
    • Refactored item selection and scroll offset logic to simplify conditional checks.
    • Simplified useKeypress options by removing the priority property.
  • packages/cli/src/ui/components/shared/SearchableList.test.tsx
    • Removed the test file for the SearchableList component.
  • packages/cli/src/ui/components/shared/SearchableList.tsx
    • Removed the SearchableList component entirely.
  • packages/cli/src/ui/hooks/useFuzzyList.ts
    • Removed the useFuzzyList custom hook entirely.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link

github-actions bot commented Feb 13, 2026

Size Change: +16.7 kB (+0.07%)

Total Size: 25.2 MB

Filename Size Change
./bundle/gemini.js 25.1 MB +16.7 kB (+0.07%)
ℹ️ View Unchanged
Filename Size
./bundle/sandbox-macos-permissive-open.sb 890 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB
./bundle/sandbox-macos-strict-open.sb 4.82 kB
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB

compressed-size-action

@gemini-cli gemini-cli bot added the status/need-issue Pull requests that need to have an associated issue. label Feb 13, 2026
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request reverts the generic searchable list abstraction and restores the search logic directly within the SettingsDialog component. While the revert aims to restore previous functionality, it introduces a few regressions in robustness and edge-case handling, particularly regarding error handling in asynchronous search operations and viewport width calculations on small terminals. The use of magic numbers in layout calculations should also be addressed for better maintainability.

@google-gemini google-gemini deleted a comment from gemini-code-assist bot Feb 13, 2026
@chrstnb chrstnb changed the title Revert "Add generic searchable list to back settings and extensions" Add initial implementation of /extensions explore command Feb 17, 2026
@google-gemini google-gemini deleted a comment from gemini-code-assist bot Feb 17, 2026
@jacob314
Copy link
Contributor

Summary (from /review-frontend)

This looks great! The generic SearchableList component is well-structured, and injecting the search state via the useSearch hook is a very clean and maintainable pattern. The debounced API calls for the extension registry also work nicely.

I have a couple of minor suggestions related to performance/efficiency, but no blockers.

Findings

Improvements

  • Duplicate API Call on Mount: In ExtensionRegistryView, the searchExtensions("") API call happens twice when the component mounts. One call originates from the useEffect inside useExtensionRegistry, and the second is triggered immediately by the useEffect inside useRegistrySearch calling onSearch(""). You can avoid this duplicate work by using a useRef to skip the first onSearch call in useRegistrySearch.
  • Unnecessary Re-renders in SettingsDialog: In SettingsDialog.tsx, getDialogSettingKeys() is called on every render to assign settingKeys. Since getDialogSettingKeys() returns a new array via Array.from(), its reference changes on every render. Because settingKeys is in the useMemo dependency array for items, the memoized list is needlessly re-evaluated on every render when the search query is empty. You can resolve this by caching getDialogSettingKeys() inside a useMemo or defining it outside the component. (Note from Jacob: this comment about optimizing SettingsDialog can be ignored).

Nitpicks

  • Code Duplication: The viewportWidth calculation and searchBuffer initialization (Math.max(20, mainAreaWidth - 8)) are duplicated identically between useFuzzyList.ts and useRegistrySearch.ts. Extracting this into a small shared utility hook might keep things DRY, though it's not strictly necessary.

@chrstnb chrstnb requested a review from jacob314 February 20, 2026 16:36
</Box>
<Box flexShrink={0}>
<Box flexShrink={0} marginLeft={2} width={8} flexDirection="row">
<Text color={theme.status.warning}>⭐</Text>
Copy link
Contributor

Choose a reason for hiding this comment

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

remove the {theme.status.warning} it isn't needed to make the star yellow and is semantically confusing for the stars be tagged as warning.

Copy link
Contributor

@jacob314 jacob314 left a comment

Choose a reason for hiding this comment

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

lgtm

@chrstnb chrstnb added this pull request to the merge queue Feb 20, 2026
Merged via the queue into main with commit 2bb7aae Feb 20, 2026
27 checks passed
@chrstnb chrstnb deleted the revert-18838-cb/genericlist branch February 20, 2026 17:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status/need-issue Pull requests that need to have an associated issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants