dsh-search-hub
Configurable web search hub for the built-in web_search tool: switch the active entry between DeepSeek official native search and Zhipu GLM web_search, with entry and credential management on a Settings page tab.
Install
dsh plugin --profile web add dsh-search-hub
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
<h1 align="center">dsh-search-hub</h1>
<p align="center"><b>Multi-entry web search hub for DeepSeek Harness · DeepSeek Harness 联网搜索多入口管理中枢</b></p>
<p align="center"><a href="#english">English</a> · <a href="#中文">简体中文</a></p>
<a id="english"></a>
English
DeepSeek Harness's built-in web search is a single fixed channel (deepseek-official, an Anthropic-compatible Messages call with the server-side web_search tool). dsh-search-hub turns that channel into a configurable hub:
- Multiple search entries, exactly one active. Each entry = label + protocol vendor + baseURL + model + API-key env-var name. Switching is one click in the Settings page — no restart, the provider snapshots config per search.
- Two protocol adapters:
anthropic— Anthropic Messages + nativeweb_search_20250305tool (covers DeepSeek official; ready for Kimi Coding endpoints once verified);zai— Zhipu's standalone Web Search API (POST {base}/web_search): deterministic retrieval with no model turn, no tool-call discretion — every call IS a search. Works with GLM Coding Plan keys.- A top-level「搜索」tab in the dsh Settings dialog: card list per entry, radio-style activation, add/edit/delete with templates (DeepSeek / GLM / Kimi placeholder). Built-in entries cannot be deleted.
- Clean fallback. The bundle patch points the
webcapability at the hub; remove the bundle and the composition falls back to your previous provider by itself.
Tested against
DeepSeek Harness · 0.1.1-rc.2 (web profile)
GLM Coding Plan (zai adapter) · real searches verified against https://api.z.ai/api/paas/v4 (and the /api/coding/paas/v4 variant), structured sources returned
DeepSeek official (anthropic adapter) · same wire format as the stock provider
Kimi Coding (anthropic template) · template only — endpoint support for web_search_20250305 not yet probed
Install (dsh web profile)
The repo ships prebuilt artifacts under lib/, so no build toolchain is needed on the installing machine.
1. Add the dependency and bundle row in <harness-home>/profiles/web/package.json:
"dependencies": {
"dsh-search-hub": "git+https://github.com/Lzh3070/dsh-search-hub.git"
// or a local checkout:
// "dsh-search-hub": "link:D:/path/to/dsh-search-hub"
},
"dsh": { "profile": { "bundles": [
// ... existing rows ...
"dsh-search-hub"
] } }
2. Install:
npx -y @deepseek-ai/dsh plugin --profile web install
3. Restart Harness, open 设置 → 搜索, pick the active search model.
How it works
chat session ── web_search tool ──▶ ctx.web seam ──▶ search-hub provider
│ active entry
┌───────────────┴────────────────┐
vendor: anthropic vendor: zai
POST {base}/messages POST {base}/web_search
tools:[web_search_20250305] { search_query, search_engine }
→ web_search_tool_result blocks → search_result[] items
Settings persist under the search-hub: namespace of <harness-home>/settings.yaml. Only env-var NAMES are stored (e.g. ZAI_API_KEY); actual keys stay in the credentials store (managed on the Settings → Models page). Each search snapshots the section, so edits apply to the next call without re-registering anything.
Security notes
- Searches are plain HTTPS calls from the Harness host process to whatever
baseURLyou configure — treat entry config with the same care as the stock provider's base-URL override. - The
anthropicadapter bills as a full model turn on the respective plan (server-side search runs inside a Messages call). Thezaiadapter is a deterministic per-call search API — no model turn — but still bills against your Zhipu/GLM quota per request. - Zhipu search results may arrive without URLs; entries with
allowLinkless: truemap them tozhipu-websearch://placeholder URLs so titles and snippets still reach the model.
Development
npm install # tsdown + typescript + pinned @deepseek-ai type deps npm run typecheck npm run build # lib/index.js (Node ESM) + lib/client.js (browser CJS) DSH_HOME=<home> node scripts/test-zai-adapter.mjs "query" # live zai adapter test
Requires Node.js ≥ 22.
License
[MIT](./LICENSE)
<a id="中文"></a>
中文
DeepSeek Harness 自带的联网搜索是单一固定通道(deepseek-official,Anthropic 兼容 Messages 请求挂服务端 web_search 工具)。dsh-search-hub 把这条通道变成可配置的搜索中枢:
- 多条目、唯一生效:每条 = 名称 + 协议(vendor)+ baseURL + 模型名 + key 环境变量名;设置页一键切换,配置按次快照,即时生效不重启;
- 两种协议适配器:
anthropic—— Anthropic Messages + 原生web_search_20250305(覆盖 DeepSeek 官方;Kimi Coding 端点验证通过后直接可用);zai—— 智谱独立 Web Search API(POST {base}/web_search):确定性检索,不消耗模型轮次、模型无权跳过——每次调用必是一次搜索。GLM Coding Plan 的 key 可直接用;- 设置对话框顶层「搜索」标签页:条目卡片列表、单选激活、新增(内置 DeepSeek/GLM/Kimi 模板)/编辑/删除,内置条目锁删;
- 卸载即回落:bundle patch 把
ctx.web的searchProvider接管到本插件,移除 bundle 后自动回落原通道,无需手工改配置。
已验证环境
DeepSeek Harness · 0.1.1-rc.2(web profile)
GLM Coding Plan(zai 适配器) · 已对 https://api.z.ai/api/paas/v4(及 /api/coding/paas/v4 变体)实测真实搜索,返回结构化来源
DeepSeek 官方(anthropic 适配器) · 与官方 provider 同 wire 格式
Kimi Coding(anthropic 模板) · 仅模板占位——端点对 web_search_20250305 的支持尚未探针验证
安装(dsh web profile)
仓库内含预构建产物 lib/,安装机器无需任何构建工具链。
1. 在 <harness-home>/profiles/web/package.json 加入依赖与 bundle 行:
"dependencies": {
"dsh-search-hub": "git+https://github.com/Lzh3070/dsh-search-hub.git"
// 本地开发调试可用:
// "dsh-search-hub": "link:D:/path/to/dsh-search-hub"
},
"dsh": { "profile": { "bundles": [
// ...原有行...
"dsh-search-hub"
] } }
2. 安装:
npx -y @deepseek-ai …(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::2,最后更新 2026-08-31