DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

dsh-9router-web-search

9router Web Search

由 9router 支持的 DeepSeek Harness 网页搜索和抓取提供程序(ctx.web)。将原生 web_search/web_fetch 工具连接到 9router 的 /v1/search 和 /v1/web/fetch 端点。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:lordraiden/dsh-9router-web-search#58897536f0b8f4039423d40e83f8bef8908a1cc0
README兼容性版本

兼容性与来源证明

9router Web Search 以 dsh-9router-web-search 发布,当前版本为 0.2.3。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/29

版本

0.2.3stable
2026/9/29

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

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/ClaudeDejadsh-dejaDeepSeek Harness 的 deja-vu 记忆:其他 40 个编码代理的会话历史,可搜索,并在每个步骤前调用——本地索引,无需 LLM。Builtin Browserdsh-builtin-browser适用于 DeepSeek Harness 的共享真实浏览器插件:安装即用——可由人类接管的可见原生浏览器,并由代理通过 CDP 驱动。DOM 级交互(兼容 React/Vue)、按任务隔离会话、Cookie 持久化(dsh_browser_auth)、C

README

🌐 dsh-9router-web-search

Web search & fetch for DeepSeek Harness, powered by 9router. Wires the native web_search and web_fetch tools into 9router's /v1/search and /v1/web/fetch endpoints — no server-side search tool required.

🇺🇸 English · 🇨🇳 简体中文


✨ What it does

  • 🔎 Search provider — routes DSH's native web_search through 9router's /v1/search, returning deduplicated WebSource results (title, snippet, published date).
  • 📄 Fetch provider — routes DSH's native web_fetch through 9router's /v1/web/fetch, returning clean text/markdown bodies.
  • 🎛️ Settings card — a native DSH settings panel for the API key, base URL, models, timeouts, and limits.
  • 🧩 Zero-config wiring — the bundle patch pins the web seam's search and fetch to 9router; no manual provider configuration.
  • 🔐 Credentials-aware, key-optional — resolves the API key from DSH's credentials service (NINE_ROUTER_API_KEY) or a literal config value; keyless local 9router instances work out of the box; never committed to the repo.
  • 🧱 Zero build — pure ESM, plain JavaScript, no bundler required.

🧭 Why this plugin

DSH's default web_search uses the web-search-deepseek provider, which requires the upstream service to implement Anthropic's web_search_20250305 server-side search tool and return web_search_tool_result blocks.

9router is an OpenAI-compatible gateway: it passes that tool definition to the model as a regular function instead of executing searches server-side — so it cannot provide native search by itself.

web-search-deepseek (default)9router (this plugin)
RequiresAnthropic web_search_20250305 server-side toolAny 9router-compatible gateway
Works with 9router❌✅
Search endpointmodel-providedPOST /v1/search
Fetch endpointmodel-providedPOST /v1/web/fetch

This plugin calls 9router's own endpoints directly and maps their responses to the WebSource and WebFetchBody types expected by the DSH web seam.

⚙️ How it works

 web_search / web_fetch (native DSH tools)
            │
            ▼
        ctx.web seam
            │  provider = "9router"
            ▼
  dsh-9router-web-search
   ├── search  → POST {baseURL}/search      → WebSource[]
   └── fetch   → POST {baseURL}/web/fetch   → WebFetchBody
            │
            ▼
      9router gateway
            │
            ▼
   9router providers / model combos

Errors surface as machine-routable WebError codes (WEB_PROVIDER_ERROR, WEB_TIMEOUT, WEB_ABORTED, WEB_PROVIDER_CREDENTIAL_MISSING); transient network and 5xx failures are retried with backoff; non-2xx fetch responses come back as results — never silent throws.

🚀 Quick start

1. Install the plugin

npx @deepseek-ai/dsh plugin --profile web add github:lordraiden/dsh-9router-web-search

2. Wire it up

  • The plugin's bundle patch already pins web.searchProvider and web.fetchProvider to 9router — no manual wiring needed (a profile's own cordis.patch.yml can override the row).
  • Set a baseURL in the settings card (or a NINE_ROUTER_BASE_URL environment value) pointing at your 9router gateway — there is no implicit fallback endpoint; without a configured endpoint the provider reports itself unavailable.
  • If your 9router instance requires a key, store NINE_ROUTER_API_KEY in DSH's credentials — the settings card's API key field writes it there — or set a literal apiKey in the plugin settings. The secret is write-only in the UI and is never stored in this repo. Keyless instances work without any credential.

3. Restart & refresh

Restart Harness, then hard-refresh the browser. The 9router options appear in the web settings card.

🔒 Reproducible installs — append a commit SHA to pin an exact version:

npx @deepseek-ai/dsh plugin --profile web add github:lordraiden/dsh-9router-web-search#44d1936

🛠️ Configuration

KeyTypeDefaultDescription
baseURLstring—Base URL of your 9router-compatible API (http/https only); resolved as explicit setting → NINE_ROUTER_BASE_URL env → absent (provider unavailable)
searchModelstringsearch-comboModel name for the search endpoint
fetchModelstringfetch-comboModel name for the fetch endpoint
searchTypestringwebsearch_type sent to the search endpoint
defaultMaxResultsnumber8Source cap used only when a search request does not specify maxResults (the DSH seam enforces the per-operation limit)
timeoutMsnumber30000Shared per-request timeout (per-capability defaults)
searchTimeoutMsnumber30000Search-only timeout; blank follows timeoutMs
fetchTimeoutMsnumber30000Fetch-only timeout; blank follows timeoutMs
fetchFormatstringmarkdownBody format requested from the fetch endpoint (markdown, text, html)
maxCharactersnumber50000Character cap for fetched bodies; sent to the gateway and enforced locally
apiKeysecret—Literal API key (optional; no key = no Authorization header)
apiKeyEnvcredential-refNINE_ROUTER_API_KEYCredentials-service key name

Self-hosted 9router picks its search and fetch backends from its own provider configuration and ignores searchModel/fetchModel; keep those fields set for cloud gateways that route by model.

Endpoint precedence — an explicit baseURL setting wins over the NINE_ROUTER_BASE_URL environment value; with neither set, no endpoint exists and the providers report themselves unavailable. There is no silent fallback to a repository-chosen remote. The schema rejects non-http(s) URLs, empty model/format strings, and non-positive numeric limits before any request is made.

Credentials — NINE_ROUTER_API_KEY is resolved through DSH's credentials service; a literal apiKey is optional and wins when set. apiKeyEnv is a reference name in the credentials service, not a key. The secret is write-only in the settings UI, is never stored in git, and never appears in logs, diagnostics, or error messages.

📌 DSH compatibility

Version
Minimum supported0.1.7-rc.1 (peer range >=0.1.7-rc.1 <1.0.0)
Latest testedthe newest published 0.2.x — CI installs it (currently 0.2.0-rc.2) and runs the full suite against it

CI runs the contract suite twice: once against the committed peer ranges, and once against the latest 0.2.x. Versions outside the declared range — including future 1.x releases — are not claimed compatible until they are exercised the same way.

🛡️ 9router security

The web_fetch capability delegates URL extraction and SSRF protection to the 9router server: the plugin sends the target URL to POST /v1/web/fetch and trusts the gateway's fetch boundary. It implements no local SSRF policy of its own.

Run a patched, current 9router release — the fetch endpoint has a published security advisory:

  • GHSA-qj3v-64wj-q825

🧪 Development

pnpm install                 # install dependencies
pnpm test                    # run the test suite (node:test)
node scripts/validate-pack.mjs  # validate the packaged artifact

Node >=20 (CI runs Node 22) and pnpm (CI uses pnpm 10).

Repository layout

dsh-9router-web-search/
├── src/                     # server-side plugin: index.js + nine-router-client.js
├── client.js                # settings card
├── cordis.patch.yml         # bundle patch registering the plugin
├── test/                    # node --test contract suite
├── scripts/                 # validate-pack.mjs, sync-storefront.mjs
├── .github/workflows/       # CI (tests + packaging, DSH 0.2.x compat) and release
└── package.json             # ESM plugin manifest

Releases — stable versions ship as v<version> GitHub Releases matching package.json; the release workflow re-runs the full suite and packaging validation against the tag before publishing.

Storefront sync — node scripts/sync-storefront.mjs syncs the plugin entry into the storefront repo (manual; requires push access to the configured storefront fork).

🌱 Ecosystem & releases

  • 📦 Distribution — the GitHub repository is the only distribution source; stable versions ship as v<version> GitHub Releases.
  • 🐛 Issues & requests — open an issue.

📄 License

MIT

🙏 Acknowledgments

This project began as a fork of rebron1900/dsh-web-search-9router — thank you for the original 9router-backed web search and fetch provider for DeepSeek Harness.