One-click search-engine switcher beside the DeepSeek Harness model picker; changes the dsh-free-search provider, handy on overseas university networks that block the DeepSeek Official search endpoint.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-search-switcher
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Hudson-Junior-Wang/dsh-search-switcher
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A compact web-search-engine switcher for the DeepSeek Harness composer. It renders immediately to the left of the model picker and changes the preferred engine without opening Settings or typing a slash command.
中文:在 DeepSeek Harness 输入栏的模型切换器左侧提供搜索引擎热切换下拉菜单,无需打开设置或输入命令。
Features
- Composer control next to the model picker via
conversation.input.right. - Scrollable engine list with the current engine marked.
- Reads and writes the
free-search.providersetting through the loopback bridge. - Supports the ten engines exposed by
dsh-free-search:- DuckDuckGo HTML
- DuckDuckGo Lite
- Bing
- AnySearch AI
- SearXNG
- Exa
- Tavily
- Keenable
- Perplexity
- DeepSeek Official
- Uses the Harness theme variables.
- Full keyboard support: Arrow keys open the menu from the trigger and move between engines, Home/End jump to the first/last entry, Enter/Space activate, Escape dismisses and returns focus to the trigger.
Requirements
- DeepSeek Harness Web profile with Node.js 20 or newer.
dsh-free-search>=0.4.7, which owns the settings bridge and the search provider.
The switcher only changes the preferred provider. It does not bypass provider authentication, API-key requirements, or network restrictions.
Compatibility with dsh-free-search 0.4.22
dsh-free-search 0.4.22 registers its settings namespace through the SettingsProvider.installSection() method, which only exists in @deepseek-ai/dsh-settings >= 0.1.2-alpha.2. On older harness runtimes (DSH Desktop 0.7.1 bundles 0.1.2-alpha.1; any dsh before alpha.2) that registration throws and is contained by Cordis, so the free-search namespace is never exposed: the settings bridge answers /describe with an empty namespaces list and /mutate with settings-not-exposed. The switcher then cannot read or write the provider — since v0.3.0 the menu shows that exact diagnosis instead of a generic "switch failed".
dsh-free-search |
Harness dsh-settings <= 0.1.2-alpha.1 |
Harness dsh-settings >= 0.1.2-alpha.2 |
|---|---|---|
<= 0.4.21 |
✅ works | ❌ fails to load (installSettingsSection removed) |
0.4.22 |
❌ settings-not-exposed | ✅ works |
Fix options:
- Upgrade DSH Desktop / the harness runtime to a build bundling
@deepseek-ai/dsh-settings >= 0.1.2-alpha.2(preferred —dsh-free-search0.4.22 works there as-is). - On the old runtime, patch the installed
dsh-free-search0.4.22 locally: replace itssctx.settings.installSection(...)block with the exportedinstallSettingsSection(ctx, ...)helper (identical semantics, present in the old runtime). The exact two-line diff is in the bug report on DDDMUC/dsh-free-search — please report it there so upstream ships a version compatible with both runtimes. - Or pin
dsh-free-searchat0.4.21or older while staying on the old runtime.
Blocked-network use case
Overseas university and campus networks often block api.deepseek.com, which makes the DeepSeek Official provider unavailable while the rest of the harness keeps working. This switcher exists so you can fall back to Bing, DuckDuckGo, SearXNG, or another reachable provider in one click — no Settings page, no provider editing by hand.
Screenshots
The trigger beside the model picker, and the open engine menu:


Install
Using the Harness plugin CLI:
dsh plugin --profile web add https://github.com/Hudson-Junior-Wang/dsh-search-switcher.git
If your CLI uses the profile as the current default, this is equivalent:
dsh plugin add https://github.com/Hudson-Junior-Wang/dsh-search-switcher.git
Install dsh-free-search as well if it is not already present:
dsh plugin --profile web add https://github.com/DDDMUC/dsh-free-search.git
Then restart the Harness host or reload the Web UI. The new control appears immediately left of the model selector in an active conversation.
Manual profile installation
Add the package to the profile dependencies and add dsh-search-switcher to dsh.profile.bundles. The package's cordis.patch.yml loads its entry automatically.
If the profile already contains a manually inserted dsh-search-switcher entry, remove that manual patch before using dsh plugin add; otherwise the same loader entry can be registered twice.
Development
npm test # bundle smoke test (manifest, patch, syntax)
npm run check # node --check on both lib files
The client bundle is intentionally a self-contained ModuleLoader bundle so it can be served by the Harness client-module system without a separate build step.
License
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8801
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8801
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4908
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
ccch1mneyyy/dsh-TUI★ 4640
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/DSH-better-sidebar★ 4198
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1463
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.