Tools & Capabilities
dsh-web-search-pro
anweat/dsh-web-search-pro · ★ 87
Persistent enhanced web search: multi-engine routing (DeepSeek/Exa/DDG/Bing/Jina + GitHub/Bilibili/YouTube/V2EX/Xiaohongshu/Twitter/Reddit/RSS), SQLite+LRU cache, userscript-style extraction, Playwright rendering.
Manifest details
安装
dsh plugin --profile web add dsh-web-search-pro从 npm 安装预构建包
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
Table of contents
English | 中文
An enhanced web search plugin for DeepSeek Harness (DSH): multi-engine search, platform search, a persistent cache and evidence packs, with only two tools resident in the model's context.
The detailed guides linked below are written in Chinese. This page covers install, first use and the everyday settings in English.
- Evidence-pack mode: give
search.runa one-sentence task and it returns scored excerpts plus the gaps that remain, instead of a result list. It uses far less context. - Multi-engine plus platform sources: web engines (ddg, bing, Exa, Jina ...) and platforms (GitHub, Bilibili, YouTube, Xiaohongshu, Zhihu, Reddit, X, RSS ...) share one probing, cooldown, fallback and history path. DeepSeek Search / Fetch is the "common" source (billed per request).
- You do the logging in: platforms that need a login go opencli-first (your everyday Chrome's session). The plugin has no login window and never reads cookies.
- Two resident tools:
web_index(catalog) thenweb_call(execute). 27 actions are disclosed on demand, about 800 characters resident. - Persistence: SQLite plus in-memory LRU cache, query history, re-importable per-site extraction rules.
- Visual settings: one settings card for search order, keys, custom CLIs and the scoring model. Changes an agent makes appear as an overlay you can adopt or revert with one click.
Compatibility
| Item | Range |
|---|---|
| dsh-web-search-pro | 0.2.3 |
| DSH host (peer) | >=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-rc.2 <0.2.2-0; verified on 0.2.0-rc.2, 0.2.1-rc.3, 0.2.1-rc.4 |
| cordis (peer) | ~4.0.4 |
Optional companion @anweat/dsh-browser |
^0.2.0 (on 0.2.1-line hosts it must be 0.2.2 or later) |
| DSH 0.1.x hosts or dsh-browser 0.1.x | Stay on dsh-web-search-pro@0.1.15; it is no longer updated |
The compatibility table of earlier versions is in the CHANGELOG; how the peer range is written is explained in Compatibility (Chinese).
Installation
DSH CLI (restart the profile afterwards):
# Search only:
dsh plugin --profile web add dsh-web-search-pro@0.2.3
# Plus rendered pages / browser platforms: install the optional browser plugin together (both must be direct dependencies of the profile)
dsh plugin --profile web add @anweat/dsh-browser@0.2.2 dsh-web-search-pro@0.2.3
dsh --profile web
DSH Desktop: Desktop manages its profile itself and the CLI cannot operate it. Open the Plugins page, click Add plugin, enter the package name (a version may be appended, for example dsh-web-search-pro@0.2.3, the same text as after add above), then Install. The dialog also lets you pick a Registry. Upgrading a non-official plugin means uninstalling and reinstalling it. Mirrors such as npmmirror can lag the official registry by minutes to hours; if a new version cannot be installed, switch the Registry to https://registry.npmjs.org.
Local directory / tarball (development): dsh plugin --profile web add ../dsh-browser ./dsh-web-search-pro.
More (first-install notes and troubleshooting) in Install and first use (Chinese); upgrading is covered in the CHANGELOG.
First use
- Settings card:
Settings -> Plugins -> Plugin config -> Web Search Pro. The status summary at the top shows the default engine chain in the order it is actually tried, how many sources have a key, whether DeepSeek is ready, and pending restarts. - Check the backends: have the model call
web_callwithsources.status; the readiness of every source and platform, and why a backend was skipped, are listed there. - Sources and keys: web search and the evidence pipeline work right after install (ddg / bing need no key). With a
DEEPSEEK_API_KEYthe default search leads with DeepSeek Search, which is billed per request; putdeepseekundersources.disabledto opt out. Exa, Jina, Bocha, GitHub and other keys are entered in the card's "Sources" group (stored in DSH Credentials and never read back). - Defaults out of the box: Jev is off by default (
evidence.jevMode: off; evidence scoring uses the local rules and no model is called, no model key is needed); Bocha is used only when you configure a key. Exception: DeepSeek Search (the common, 常用, source; billed per request) leads the default order as soon as a DeepSeek API key resolves (settings key field, DSH credentialDEEPSEEK_API_KEY, or the process environment); putdeepseekundersources.disabledor write your ownengineslist to opt out. - Optional dependencies: the browser plugin
@anweat/dsh-browser(read.snapshot,read.fetch mode=playwright, search-page platforms; an installed Chrome / Edge is used directly, no Chromium download);npm i -g @jackwener/opencliplus its Browser Bridge extension (Xiaohongshu / Zhihu / Reddit / X, using your everyday Chrome's login, see Platform login); CLIs such as bili, yt-dlp and gh are detected bysources.deps.
Quick examples
The model calls web_call({action, args}). An evidence pack (pass task or profile):
{"action":"search.run","args":{"query":"node:sqlite busy timeout","task":"how to set a busy timeout in node:sqlite","profile":"docs_code"}}
Search one platform (login platforms use the opencli-first backend chain):
{"action":"search.run","args":{"query":"机械键盘 轴体 推荐","task":"了解知乎上对机械键盘轴体的真实经验","profile":"experience","platform":"zhihu"}}
Read a page with read.fetch (pass offset to continue a long page); ask search.recommend when you do not know which source to use. More in Search and evidence (Chinese).
Tools and actions
Only two tools are resident: web_index({group?, action?, query?}), a progressive-disclosure catalog, and web_call({action, args}), which runs an action and returns a uniform envelope. Usage guidance ships in the skill dsh-web-search-pro.
| Group | Actions | Purpose |
|---|---|---|
search |
run recommend |
Multi-engine / platform search and evidence packs; recommend at most 3 sources for a task |
read |
fetch contents snapshot |
Readable fetch with continuation; Exa batch contents; browser snapshot |
history |
list replay expand export delete |
List, replay, expand evidence blocks, export and delete query history |
sources |
status deps install |
Backend probing and diagnostics; external dependency check and install |
rules |
list upsert remove import export |
Per-site extraction rules |
cache |
clear stats |
Cache cleanup and statistics |
config |
inspect set_order set_confidence upsert_cli remove_cli reset export |
Agent overlay: adjust search order, confidence and custom CLIs at runtime |
Full parameters, approval rules, output budgets and the old tool mapping are in Tools and actions (Chinese).
Common settings
Set them under web-search-pro: in $DSH_HOME/settings.yaml, or use the settings card. Almost all are hot-reloaded.
| Key | Default | Meaning |
|---|---|---|
engines |
[ddg, bing, exa, seam, jina] |
Fallback order of general search |
sources.priority / sources.disabled |
empty | Source ids to move first / never use (for example disabled: [deepseek]) |
searchMaxResults |
8 |
Default number of results of a plain search |
evidence.jevMode |
off |
Bocha Jev scoring: off | shadow | control | hybrid (paid, not called by default) |
evidence.sourcePolicy |
default |
anonymous-only = automatic planning never uses a source that needs a key, account or login |
deepseekFetch |
false |
true = read.fetch may use the DeepSeek Fetch API (billed per request) |
fetchDefaultChars |
20000 |
Default characters returned by read.fetch |
toolSurface |
indexed |
flat = one tool per action (for comparison and debugging only); restart required |
registerProvider |
false |
Route the host's built-in web_search / web_fetch through this plugin; restart required |
Only these need a plugin restart: toolSurface, registerProvider, providerId, timeoutMs, memoryCacheEntries, dbPath, verbose, playwright.snapshotDir. All keys and defaults are in the configuration reference (Chinese).
Documentation
The detailed guides (Chinese) are under docs/:
- Usage: Install and first use · Search and evidence · Tools and actions · History
- Configuration: Configuration reference · Settings panel · Sources and engines · Built-in web tool routing · Jev scoring
- Platforms and CLIs: Platform login · CLI adapters and custom CLIs · External dependencies · Custom platforms · Browser scripts and automation tiers
- Versions and development: Compatibility · CHANGELOG · Development · Design and research notes · Validation records
License
MIT. The routing control plane borrows the backend probing, ordered selection and failure-cooldown ideas of Agent-Reach; the core logic is this project's own TypeScript.