Introduction

In DeepSeek Harness (DSH), under Settings → Models, when loading the candidate list via Fetch Available Models, if the list is long, manually finding a specific model ID can be cumbersome. For this scenario, a lightweight tool is needed to improve the usability of the selector.

Plugin Overview

masknull/dsh-fetch-models-search is a browser-side DSH plugin. Its core purpose is to inject a search box at the top of the Fetch Available Models candidate dialog, supporting real-time filtering of the candidate list as you type.

Core Features

  • Injects a search box: Adds a search input field above the candidate list and supports real-time filtering.
  • Pure DOM enhancement: It does not modify component code and works based on a stable DOM structure (without CSS-hash class selectors).
  • Adapts to re-renders: Uses MutationObserver to monitor DOM changes, ensuring that the filtering state remains valid after React re-renders.
  • Logic isolation: Filtering only controls showing/hiding and does not affect checkbox selection, select all/deselect all, or similar semantics.
  • Fully reversible: When removed, it only removes the injected elements and styles, without affecting the original page state.
  • Localization support: Displays prompts according to the page language (such as Chinese or English).
  • Zero dependencies: Does not introduce @deepseek-ai-related modules.

Installation and Activation

Install it into the web configuration file via the command line:

dsh plugin --profile web add github:masknull/dsh-fetch-models-search

After installation, you need to restart the DSH service or refresh the page to load the plugin.

Typical Usage

  1. Open DSH’s Settings → Models.
  2. Expand a pi-ai provider card and click Fetch Available Models.
  3. A search box will appear above the candidate list in the dialog.
  4. Enter part of a model ID (such as chat), and the list will filter in real time.
  5. Clearing the search box restores the display of all candidates.
  6. Verify the selection behavior: selecting, select all/deselect all, adding selections, and similar operations are not affected by filtering.

Applicable Scenarios and Notes

  • Scope of application: It only affects the Fetch Available Models selector and does not involve manually edited model rows.
  • Matching rules: Case-insensitive substring matching (matches only candidate ID text).
  • Select all logic: The select all/deselect all buttons still target all candidates and are not affected by the current filtering.
  • Runtime environment: The plugin runs in the browser context. Before installation, it is recommended to review the source code and license (MIT).

Conclusion

This plugin uses browser-side DOM enhancement to solve the problem of finding models in long lists, with no intrusive modification to the original logic. For more details, see GitHub.