dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Free web search for DeepSeek Harness (DSH) with no search API and no API key.
dsh-free-web registers a search provider that reads Bing's public result page over plain HTTPS, falls back to its RSS view, and only then falls back to a local Chrome/Edge headless render. It powers DSH's built-in web_search tool, adds a per-session Web off / Smart / Always toggle next to the composer's permission control, and adds a search panel to the left sidebar.
No browser extension is involved. DSH's UI is a web surface, so this package has two halves: a Host half (Node) and a Client half (React components loaded by DSH itself). Chrome is only an optional headless renderer invoked by the Host.
web_search is blocked by a Host guard; web_fetch stays available for links the user provides.web_fetch./api/dsh-free-web/ and the Client half uses relative URLs, so the same code works for dsh web and the Desktop shell's dsh-app:// page.The composer toggle — pick Off / Smart / Always for the current session:
The sidebar panel — engine status, manual search, and per-result links:
desktop profile, Windows 11).Clone the repository somewhere stable (the profile links to this directory, so do not delete it):
git clone https://github.com/skyhome000/dsh-free-web.gitThen install it as a local DSH bundle, either from the GUI (Plugins → Add plugin → from directory) or with the plugin-manager tool:
plugin_manager install_bundle target: /absolute/path/to/dsh-free-webRefresh the DSH window once (Ctrl+R) after installing or updating, so the browser half is loaded.
The bundle patch switches the built-in web service to this provider and keeps the existing HTTP fetcher selected:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: free-web
fetchProvider: httpUninstalling the bundle removes the patch and restores the shipped defaults.
The button sits to the right of the permission preset in the composer toolbar and shows the current mode (🌐 Smart web):
Mode · Behaviour Web off · web_search calls are rejected by a Host guard; web_fetch remains available so the model can open a URL the user supplied. Smart (default) · The model searches on its own when the answer needs current or externally verifiable facts, and may search several times while reasoning. Always · The Host automatically runs one search for the turn before the first model step (15 s cap) and injects the results as runtime context; the model uses them and can refine with more searches.
The mode is stored per session in %DSH_HOME%/free-web/session-modes.json (up to 500 sessions) and applies to the next step immediately — no new session needed.
Click 联网搜索 / Web Search in the left sidebar to open a manual search panel:
web_search), re-checkable;index.js registers a WebSearchProvider with id free-web into ctx.web. available() is always true; search() runs the chain below and returns { sources, truncated }.https://www.bing.com/search?q=… parsed from li.b_algo blocks (title, URL, snippet);&format=rss parsed as RSS;chrome --headless=new --dump-dom on the same URL, using a throwaway profile under the OS temp directory.agent/created (and for agents that already exist when the plugin mounts) it registers, on the agent's own context:ctx.tools.guard that rejects web_search while the session is *off*;systemPrompt.section whose text follows the current mode;systemPrompt.context that carries the automatic results in *always* mode;agent/pre-step listener that performs the automatic search on the first step of each turn.client.js registers the sidebar entry, the main panel (main, key free-web) and the composer toggle (conversation.input.left). It talks to the Host over api/dsh-free-web/status, /search and /mode with relative URLs.Setting · Value DSH_FREE_WEB_CHROME / CHROME_PATH · Explicit browser executable path. Auto-detected paths · Chrome and Edge under Program Files / Program Files (x86) / LocalAppData on Windows; /Applications/Google Chrome.app/…, /usr/bin/google-chrome, chromium, microsoft-edge elsewhere. Results · web_search asks for up to 8 sources; the panel requests 8. Timeouts · HTTP page 7 s, RSS 6 s, local browser 22 s, panel request 40 s, automatic search 15 s. Mode store · %DSH_HOME%/free-web/session-modes.json.
There is no plugin Config schema; the values above are code constants and environment variables.
Origin, null, the dsh-app: shell origin, or a loopback host (127.0.0.1, localhost, [::1]). Other origins get 403.POST must be application/json, which is the CSRF boundary: a cross-site JSON request needs a preflight that only local origins pass. Bodies are capped at 64 KiB; queries at 400 characters.web_search tool already labels them as untrusted; the panel does the same.npm test # node:test — 15 offline unit tests
npm run check # node --check for both halvesThe tests cover the HTML/RSS parsers (including Bing redirect unwrapping), the route/guard wiring, the per-session mode route, and the Client half's slot registrations and toggle rendering. They use a temporary DSH_HOME and never touch the network.
index.js Host half: provider, routes, mode store, agent policy
client.js Client half: sidebar panel and composer toggle
cordis.patch.yml Bundle patch: plugin row + web.searchProvider override
locale/{en,zh}.json Plugin title/description for the Plugin Manager
icon.svg Plugin icon
test/ Offline unit tests
.github/workflows/ CI (syntax check + tests on Ubuntu and Windows)