DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Web Search Brave — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
W

@deepseek-ai/dsh-web-search-brave

Web Search Brave

适用于 DeepSeek Harness (dsh) 的 Brave Search 提供商插件——修复 web_search 挂起、缺少请求超时设置和 HTTP 429 速率限制风暴的加固版分支

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:nedzen/dsh-web-search-brave#d12158dd91093b96517c31bea8b4f8e146c9c574
README兼容性版本

兼容性与来源证明

Web Search Brave 以 @deepseek-ai/dsh-web-search-brave 发布,当前版本为 0.1.3。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/4

版本

0.1.3stable
2026/10/4

相关插件

正在加载相关插件…

最新版
0.1.3
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/4
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 search-research 分类下经过校验的插件。

Ab Wechat Scrapedsh-ab-wechat-scrape--- description: "树外 wechat_scrape 工具:获取微信公众号文章,过滤推广区块,并将每篇文章保存为 Markdown 文件,供此机器的 dsh 配置文件维护者使用。" kind: "package-reference" ---Ab Market Researchdsh-ab-market-research一个树外 DeepSeek Harness 插件:将 trade_search 工具(多轮扩展方面的查询规划、出版商级别排序、来源多样性、JSON 快照)及其浏览器卡片集成在一个包中。Weknora@wxg-prc-cpg/dsh-weknora适用于 DeepSeek Harness (dsh) 的 WeKnora 知识检索工具:通过自有知识库进行语义搜索、文档阅读以及 RAG/代理回答。Free Searchdsh-free-searchDeepSeek Harness 的免费网页搜索:24 个引擎(Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel 无需密钥;通过 MCP 使用 Zhihu 全局/站内搜索,以及 Perplexity/SerpBase/DeepSeek/You.com/Baidu/Kimi/Aliyun/Doubao,需密钥;OpenAI/Gemini/Claude

README

dsh-web-search-brave

Brave Search provider plugin for DeepSeek Harness (dsh) — a hardened fork that stops web_search from hanging your session, and stops multi-query searches from drowning in HTTP 429 rate limits.

The upstream package @deepseek-ai/dsh-web-search-brave gives DeepSeek Harness a Brave Search backend for its ctx.web capability seam. This fork keeps that drop-in package name and API, and fixes two reliability problems that can hang or disable web_search inside a real agent session.

Not affiliated with or endorsed by DeepSeek or the upstream author. This is an independent fork published under the original MIT license. Upstream is cnChenKai/dsh-web-search-brave, published on npm as @deepseek-ai/dsh-web-search-brave. Do not publish this fork to npm under the @deepseek-ai scope — that scope belongs to the upstream project.

  • Keywords: DeepSeek Harness, dsh, dsh plugin, Brave Search API, web search provider, web_search tool, HTTP 429 rate limit, request timeout, agent tool call hang

The bug this fixes

If your dsh session ever froze when the web_search tool was called — spinner forever, nothing in the transcript, sometimes needing a full restart — this is why.

BraveSearchProvider.search() in 0.1.1 armed no timer of its own and handed fetch only the caller's AbortSignal. DeepSeek Harness enforces tool timeouts through @deepseek-ai/dsh-tool-call-timeout-policy, which is explicitly cooperative: it awaits the tool promise without racing it. So when a request never settles, no tool result is ever recorded, the turn waits indefinitely, and the UI looks frozen.

Observed live, with a 60 s tool budget configured and never applied:

CallResult
web_search, 1 queryreturned in 1.1 s
web_search, 4 queriesnever returned — 8 m 29.7 s, until the user interrupted it

The second problem compounds it. One multi-query web_search call fans out as N parallel requests (the fan-out lives in dsh-tool-web), while Brave rate-limits per second. On the free tier that spends the whole budget on 429s:

4 concurrent queries, unspacedOutcome
upstream 0.1.10 of 4 succeeded (WEB_PROVIDER_ERROR, HTTP 429), in 731 ms

What this fork changes

Three configurable knobs, all bounded by the same hard deadline so nothing can hang:

SettingDefaultWhat it does
searchTimeoutMs15000Hard provider-level deadline. Fuses your AbortSignal with AbortSignal.timeout(). This is the freeze fix. Created before queueing, so queue wait counts against the budget.
minRequestIntervalMs1500Serializes the fan-out through a per-process queue, one request at a time, spaced. 1100 measured 3/4 successes; 1500 measured 4/4.
maxRetries2Bounded retries on HTTP 429, honouring Retry-After (capped at 3 s). Bounded by searchTimeoutMs, so retrying cannot reintroduce a hang.

Deadline expiry is reported as a clear WEB_PROVIDER_ERROR timeout; caller cancellation is still reported as WEB_ABORTED. Nothing else about the provider contract changed.

After the fix, on the same live API:

beforeafter
stalled server, no caller signalnever settlesrejects in 4.0 s
4 concurrent queries0/44/4 in 5.5 s
1 query903 ms843 ms

Install

dsh plugin --profile web add github:nedzen/dsh-web-search-brave

Or from a local checkout, which is how this fork is developed:

dsh plugin --profile web add file:$HOME/Sites/dsh-web-search-brave

Then pin the seam to it in your profile's cordis.patch.yml. A patch replaces the whole config, so restate every key the web row owns — omitting fetchProvider silently drops it and breaks web_fetch:

- id: web
  config:
    searchProvider: brave-search
    fetchProvider: http          # do not omit

- id: web-search-brave
  name: "@deepseek-ai/dsh-web-search-brave"
  config:
    apiKeyEnv: BRAVE_SEARCH_API_KEY
    baseURL: https://api.search.brave.com/res/v1
    maxResults: 10
    searchType: web
    # searchTimeoutMs: 15000      # optional overrides
    # minRequestIntervalMs: 1500
    # maxRetries: 2

The API key resolves from the credentials service first, then the launching environment (.env files are layered in automatically). Store it as BRAVE_SEARCH_API_KEY, or point apiKeyEnv at whatever name you export.

Verify it works

test/freeze-regression.mjs reproduces the freeze with a server that accepts the TCP connection and then never responds. Cases A (stalled server, no caller signal) and C (fan-out spacing) go RED on 0.1.1 and GREEN here.

cd ~/.dsh/profiles/web
set -a; . ~/.dsh/.env; set +a
node ~/Sites/dsh-web-search-brave/test/freeze-regression.mjs \
  ./node_modules/@deepseek-ai/dsh-web-search-brave/lib/index.js "0.1.3"

Node rather than Bun is deliberate: dsh runs this provider under Node's fetch, and the abort/timeout semantics being asserted are undici's.

Self-check in a live session — the timing tells you which build is loaded:

4-query web_searchBuild
returns in under 1 s, usually HTTP 429old 0.1.1
takes 4.5 s or more, normally succeedsthis fork

Tuning

  • Many parallel queries time out. searchTimeoutMs also covers queue wait. If the model fires several web_search calls at once (e.g. maxParallelToolCalls above ~3 with 4 queries each), the tail can exceed 15 s and fail fast rather than hang. Raise searchTimeoutMs to 30000.
  • Paid Brave plan. Set minRequestIntervalMs: 0 and maxRetries: 0 to trade robustness for speed.
  • Still rate-limited. Raise minRequestIntervalMs, or run a multi-provider fallback chain instead of a single backend.

Troubleshooting

I edited the source and nothing changed. A file: dependency is copied into the profile by pnpm, and pnpm install reports "Already up to date" while keeping the stale copy. Remove it and reinstall:

rm -rf ~/.dsh/profiles/web/node_modules/@deepseek-ai/dsh-web-search-brave
dsh plugin --profile web install

I reinstalled but the running session is unchanged. Only config hot-reloads. Plugin JavaScript is ESM-cached and dsh-hmr ships with no watch roots (root: []), so restart dsh to load new provider code.

WEB_DUPLICATE_PROVIDER. Another provider already registered the brave-search id — check for two rows declaring this bundle.

Compatibility

This fork exists for the 0.1.x line. It targets @deepseek-ai/dsh-*@^0.1.1-rc.2 peers.

Upstream 0.2.4 (cnChenKai/dsh-web-search-brave) already added an equivalent searchTimeoutMs, so if you are on dsh 0.2.x, use upstream — it is the maintained package and there is nothing better about this fork on that line. This fork is for sessions pinned to 0.1.x that cannot move the whole harness yet.

Related

  • cnChenKai/dsh-web-search-brave — upstream package (0.2.4, maintained)
  • deepseek-ai/deepseek-harness — the harness itself
  • 0xsline/awesome-deepseek-harness — ecosystem index
  • GitHub topic dsh-plugin — more dsh plugins
  • Other web_search backends: multi-provider, Exa, SearXNG

License

MIT, inherited from upstream. Original work © 2026 KaiChan; fork modifications © 2026 nedzen. See LICENSE.