Introduction¶
The core design philosophy of DSH (DeepSeek Harness) is “everything is a plugin.” The default web_search tool calls DeepSeek’s official pay-per-use backend. If you need more searches without paying, or want to run the search logic locally, the dsh-freeweb plugin provides a solution based on the Parallel free search backend.
Features¶
- True zero dependencies: pure global
fetch+ standard JS, with noimports. There is no risk of crashing after installation due to missing dependencies. - Full error handling: all exceptions return diagnostic information instead of failing silently.
- Bundle format: from version 0.2.0+,
dsh.bundleis declared, supporting installation, enable/disable, and uninstallation via the Web plugin page. - Manual mounting support: from version 0.1.5+, local file mounting is supported with extremely lightweight configuration.
- MCP protocol: based on JSON-RPC over HTTP, directly calling the Parallel Search free backend.
Installation and Enablement¶
This plugin is distributed via a GitHub repository and has not yet been published to npm. Before installing, ensure your DSH version is ≥ 0.1.5 (manual mounting) or ≥ 0.2.0 (bundle installation), and that Node.js ≥ 18 is installed.
Method A: Plugin Page Installation (Recommended, DSH 0.2.0+)¶
- Open the sidebar Plugins → Add Plugin.
- Enter the absolute path to this directory (e.g.,
D:\plugins\DSH-freeweb). - Host reads the
dsh.bundledeclaration inpackage.json, completes the installation, and enables it automatically. - A
dsh-freewebcard appears in the Installed group, where you can enable/disable the entire bundle or uninstall it.
Method B: Command-Line Installation¶
npx @deepseek-ai/dsh plugin --profile web add "<absolute path to this directory>"
This writes the plugin into dsh.profile.bundles in package.json.
Method C: Manual Mounting (Zero Packaging, Lightest)¶
- Place
freeweb-search.jsin the profile directory:
~/.dsh/profiles/web/freeweb-search.js(Windows:C:\Users\<username>\.dsh\profiles\web\) - Append the configuration to the profile’s
cordis.patch.yml(note:configis replaced as a whole and must includefetchProvider):
- id: web
config:
searchProvider: freeweb
fetchProvider: http
- insert:
- id: freeweb-search
name: ./freeweb-search.js
- Restart DSH.
Configuration and Verification¶
Configuration Requirements¶
The config for the web entry is replaced as a whole; both searchProvider: freeweb and fetchProvider: http must be configured. If fetchProvider is not specified, the default fetch backend from dsh-base will be lost.
Verification Methods¶
- Sidebar Plugins → Installed: confirm that the
dsh-freewebcard appears. - In Settings → Built-in Plugins, check the status of
include:freeweb-search. - Initiate a search request. The official DeepSeek search provider writes a
web/deepseek-search-llm-requestevent to the log every time; freeweb does not write this event. If this entry is absent from the logs, it indicates that freeweb is being used.
Notes and Limitations¶
- Mutual exclusivity: manual mounting and bundle installation are mutually exclusive and will cause a
WEB_DUPLICATE_PROVIDERerror. Choose one or the other. - Free-tier rate limits: Parallel’s anonymous tier has rate limits; if you encounter
HTTP 429, retry later. - Index preference: the main index is biased toward English; Chinese works, but the quality is not as good as English.
- Result shape differences: the returned structure is
url / title / publish_date / excerpts, not the officialcited_text. The original-text snippets available for the model to cite may be fewer than with the official backend. - Failure handling: on failure, the plugin returns diagnostic information in the form of “answer text” and does not throw
WebError. This is an intentional trade-off, aiming to maintain “never block, transparent failures.”
Fallback and Troubleshooting¶
Fallback to Official¶
- Plugin page/CLI: after uninstalling the bundle, search automatically returns to the official
deepseek-official. - Manual mounting: delete the configuration block in
cordis.patch.ymland restart. Note the order: delete the patch line first, then delete the file, otherwise DSH will fail to start.
Common Errors¶
WEB_DUPLICATE_PROVIDER: check whether both installation methods are being used at the same time.WEB_PROVIDER_AMBIGUOUS:searchProvideris not explicitly specified.not-a-bundle: the directory does not declaredsh.bundle(if copied from an older single-file version, it needs updating).pnpmnot found: required for Method A/B; not required for Method C.