DeepSeek Harness plugin

dsh-web-search-router

Free multi-provider web search router for DeepSeek Harness (DSH).

Jump to install

Source facts

Repository
chenyuhao0628/dsh-web-search-router
Latest update
Aug 18, 2026
Category
Docs & Rendering
GitHub stars
0
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/chenyuhao0628/dsh-web-search-router
Plugin: dsh-web-search-router
Author: chenyuhao0628

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-web-search-router

A free multi-provider web search router for DeepSeek Harness (DSH).

The plugin keeps DSH's built-in web_search tool and registers a multi-search provider. It starts with the keyless Parallel endpoint, then falls back through configured search APIs only when more results are needed or a provider fails.

Features

  • Keyless Parallel search as the first route.
  • Optional Tavily, Exa, Brave Search, Serper, and SerpApi fallbacks.
  • Dynamic fallback order balancing estimated free capacity and observed latency.
  • Live Tavily and SerpApi quota refreshes, plus Brave response-header quotas.
  • Early exit as soon as enough unique results have been collected.
  • URL canonicalization, deduplication, and reciprocal rank fusion (RRF).
  • Provider cooldowns after rate-limit, quota, authentication, or transient errors.
  • Write-only API key controls in the DSH Settings page.
  • No dependency on the paid DeepSeek web search provider.

Routing

Each request follows this sequence:

1. Query Parallel without an API key. 2. Stop immediately if enough unique results were returned. 3. Rank configured keyed providers by remaining estimated free capacity and exponentially weighted observed latency. 4. Query one provider at a time and stop as soon as the requested result count is reached. 5. Deduplicate and merge all collected results with RRF.

The initial keyed-provider estimates currently favor Tavily, Exa, Brave Search, Serper, and SerpApi according to the capacity/latency score. Runtime measurements can change that order automatically.

Before entering the keyed fallback chain, the router refreshes Tavily and SerpApi account usage when their ten-minute cache has expired. Brave quota is learned from the normal search response headers without an extra request. Exa and Serper currently use process-local estimates because they do not expose a documented public balance endpoint. A provider with a known zero balance is skipped until its usage snapshot changes.

Cooldowns are 10 minutes for HTTP 429, 6 hours for quota or credit exhaustion, 1 hour for authentication failures, and 1 minute for other transient failures. These are process-local health hints, not live quota counters.

Installation

From the DSH web profile directory, install the GitHub repository:

cd ~/.dsh/profiles/web
pnpm add github:chenyuhao0628/dsh-web-search-router

Add dsh-web-search-router to dsh.profile.bundles in that profile's package.json, then restart DSH. Select multi-search as the web search provider if it is not already selected.

For local development, a link dependency also works:

{
  "dependencies": {
    "dsh-web-search-router": "link:/absolute/path/to/dsh-web-search-router"
  }
}

API Keys

Open DSH Settings and choose 网络搜索. Each field writes directly to DSH's credential service and never reads the stored secret back into the page. The same page shows live, response-header, estimated, and cooldown states. Use 刷新额度 to force a new Tavily and SerpApi account-usage check.

ProviderCredential referenceRequired
ParallelNoneNo
TavilyTAVILY_API_KEYNo
ExaEXA_API_KEYNo
Brave SearchBRAVE_SEARCH_API_KEYNo
SerperSERPER_API_KEYNo
SerpApiSERPAPI_API_KEYNo

API keys are not stored in Cordis configuration or this repository. Do not put credentials in package.json, commits, issue reports, or screenshots. The browser status endpoint receives only normalized quota metadata; third-party account payloads and resolved credential values never cross that boundary.

Development

Requires Node.js 20 or newer and pnpm.

pnpm install
pnpm check
pnpm test

The tests cover URL normalization, RRF merging, and provider ranking. The plugin targets the Cordis and DSH web APIs declared in peerDependencies.

License

MIT