dsh-web-search
Multi-provider web search for DeepSeek Harness. It registers Baidu, Doubao, Tavily, Exa, and Serper backends into ctx.web. The model-facing web_search / web_fetch tools stay the official @deepseek-ai/dsh-tool-web schema.
Compatible with DeepSeek Harness 0.2.1-rc.5 and Node.js 24+.
中文文档
Installing a plugin runs third-party code in the harness process with your permissions. Review the source before you install.
Install
From npm:
dsh plugin --profile web add @yugasun/dsh-web-search
From a clone of this monorepo (relative paths resolve against the profile directory, not your cwd — use $PWD. After a link: install the plugin resolves @deepseek-ai/* from the DSH profile / install, so repo node_modules is not required to boot):
dsh plugin --profile web add "$PWD/packages/dsh-web-search"
dsh plugin --profile desktop add "$PWD/packages/dsh-web-search"
Restart dsh web. Settings has a Web search page. Turn Custom search off to keep DSH built-in web_search (deepseek-official) and web_fetch (http); turn it on to use Baidu / Doubao / Tavily / Exa / Serper. Page content is independent: auto follows Tavily/Exa search, or pin Tavily, Exa, or DSH http.
Web search settings
From Git (subdirectory):
dsh plugin --profile web add github:yugasun/dsh-plugins#path:packages/dsh-web-search
Uninstall:
dsh plugin --profile web remove @yugasun/dsh-web-search
Providers
| Id | Backend | Key | Notes |
|---|
baidu | Qianfan web search POST /v2/ai_search/web_search (default) or intelligent search POST /v2/ai_search/chat/completions | BAIDU_API_KEY or QIANFAN_API_KEY | Default ordinary search returns titles, links, and snippets (faster, no model). Switch to AI search in Settings for a model summary; that path is slower, and knowledge-style queries often have no references — the plugin then recovers https?:// URLs from the summary when it can. |
doubao | Doubao Search Custom POST /search_api/web_search (default) or Global POST /search_api/global_search | DOUBAO_API_KEY or DOUBAO_SEARCH_API_KEY | Create the key at the Doubao Search console. Custom is better for Chinese results; Global covers international pages. An old Ark endpoint in settings is remapped automatically. |
tavily | Tavily Search POST /search and Extract POST /extract | TAVILY_API_KEY | LLM-oriented snippets plus an optional answer. Available as a web_fetch backend. |
exa | Exa Search POST /search and Contents POST /contents | EXA_API_KEY | Search returns links only (no answer). Default provider id is exa; change if the official is also installed. Available as a backend. |
Keys are read in this order: plugin configuration in the active profile, DSH credentials (TAVILY_API_KEY and friends), then the launch environment / ~/.dsh/.env. DeepSeek Harness imports legacy ~/.dsh/settings.yaml settings into the active profile once, then renames the file to .imported. Settings secrets are never echoed back to the client. Clear in Settings, or emptying the field, unsets that key from the active profile plugin configuration. A export TAVILY_API_KEY=… inside an agent bash tool does not reach the harness process.
Selection
Installing the plugin can retarget official web_search at this package's facade id dsh-web-search. Settings → Web search has a Custom search switch:
- Off:
web_search uses DSH built-in deepseek-official; web_fetch uses http
- On (default): pick the search backend below
- Auto (default): first configured backend in order Baidu → Doubao → Tavily → Exa → Serper. If that request fails with a recoverable error, the next configured backend is tried and the harness log records which one was skipped. An explicit backend does not fail over.
- Explicit: Baidu / Doubao / Tavily / Exa / Serper
- Page content (independent of search)
- Auto (default): Tavily or Exa when that search backend is active; otherwise DSH built-in
http
- Built-in HTTP / Tavily / Exa: pin
web_fetch regardless of which search backend is active
- Each backend card has Test connection, which runs a one-result
web_search against that vendor. Status "configured" still means a key is present; the probe tells you whether the key works.
Develop
pnpm --filter @yugasun/dsh-web-search test
pnpm --filter @yugasun/dsh-web-search build
License
MIT