dsh-plugin-finder
Find DeepSeek Harness plugins from the dsh.so registry — like find-skill, but for dsh plugins.
This plugin registers one agent tool, find_plugin: describe a need in natural language, and it searches the dsh.so plugin index for the best-matching plugins, returning name, GitHub stars, topics, description, verification level (L1–L5), security status & risk, an install command, and a detail link.
Powered by dsh.so
the DeepSeek Harness plugin registry — discover, compare and install plugins · 发现、对比并安装 DSH 插件
中文版: README.zh.md
Table of Contents
- Install
- Peer Dependency Warnings (Important)
- Usage
- Output Format
- Search Tips
- Configuration
- Data Source & Matching
- FAQ
- Development
1. Install
Install from the dsh.so marketplace (recommended):
dsh plugin --profile web add dsh-plugins-finder
Other profiles work the same — just change the name:
dsh plugin --profile tui add dsh-plugins-finder
dsh plugin --profile headless add dsh-plugins-finder
Install from a local checkout (development):
dsh plugin --profile web add E:\AgentsWs\PluginBuilder\dsh-plugin-finder
⚠️ Version note: if you have 0.1.0, upgrade first — 0.1.0 installed @deepseek-ai/dsh-tools as a regular dependency, which conflicts with the host's copy and crashes the agent loop with Cannot read properties of undefined (reading 'prepare'). Fixed in 0.1.1; reinstall with:
dsh plugin --profile web add dsh-plugins-finder@^0.1.1
Restart the web profile for the new bundle to load:
dsh web
After the restart, the find_plugin tool appears in the session — just tell the agent what you need (see Usage).
Upgrade / 升级
dsh plugin --profile web add dsh-plugins-finder@latest
dsh web # restart to load the new bundle
Uninstall / 卸载
dsh plugin --profile web remove dsh-plugins-finder
dsh web # restart to unload the bundle
⚠️ Always remove by package name — never pass a local path to remove/del, or it deletes the source directory's files / 卸载务必用包名,绝不把本地路径传给 remove/del,否则会删掉源码目录的文件。
2. Peer Dependency Warnings (Important)
You will very likely see this pnpm output during install:
WARN Issues with peer dependencies found
└─┬ dsh-plugins-finder 0.1.1
├── ✕ missing peer @deepseek-ai/cordis@^4.0.1
├── ✕ missing peer @deepseek-ai/dsh-tools@0.1.0-rc.6
└── ✕ missing peer @deepseek-ai/schemastery@^3.18.1
This is a benign false positive — no action needed; the plugin works normally.
Why it appears
dsh plugin add works by running pnpm add in the profile directory; pnpm checks peer dependencies only against the web profile's own declared dependencies (currently just dsh-plugins-finder).
- The three
@deepseek-ai/* packages are managed by the DSH host and actually live one level up, in ~/.dsh/profiles/node_modules.
- At runtime, Node's module resolution walks up the directory tree, so the plugin resolves the host-provided packages just fine.
How to verify it is fine
Just confirm the host-side versions satisfy the plugin's requirements. Verified on the current environment:
| Plugin requires |
Host has |
Result |
@deepseek-ai/cordis@^4.0.1 |
4.0.1 |
✅ |
@deepseek-ai/dsh-tools@0.1.0-rc.6 |
0.1.0-rc.6 |
✅ |
@deepseek-ai/schemastery@^3.18.1 |
3.18.1 |
✅ |
Compatibility with dsh / dsh 适配版本
- Target dependency line / 目标依赖线:
@deepseek-ai/dsh-tools@0.1.0-rc.6 · @deepseek-ai/cordis@^4.0.1 · @deepseek-ai/schemastery@^3.18.1 — the dsh rc.6 release line / 即 dsh rc.6 系列。
- Tested on / 实测环境: dsh 10.28.1 (web profile).
- Status / 状态: author-declared (Declared), not independently verified — follows dsh.so's compatibility-matrix semantics / 作者声明(Declared),未经独立验证——遵循 dsh.so 兼容性矩阵语义。
- After upgrading dsh / 升级 dsh 后自查: restart the profile and confirm
find_plugin appears; if a major dsh upgrade crosses the dependency line, run dsh plugin --profile web update dsh-plugins-finder before retrying / 重启 profile 并确认 find_plugin 存在;若大版本升级跨了依赖线,先执行 dsh plugin --profile web update dsh-plugins-finder 再试。
In fact, any third-party DSH plugin that correctly declares peer dependencies triggers the same warning when installed into a profile (the harness's own @deepseek-ai/dsh-tool-cordis declares @deepseek-ai/cordis the same way). It is pnpm being "under-informed", not an error.
Fixes to avoid
- Do not move the plugin's
peerDependencies into dependencies — every plugin would then ship its own copy of the host's core packages, shadowing the host's singletons and re-triggering the ctx.tools crash (the 0.1.0 bug above).
- Avoid explicitly installing the 3 peers into the profile — versions get pinned there; when the host upgrades its core packages, the plugin keeps loading the old ones, causing silent API mismatch.
If you only want a clean CI log, you can install the peers explicitly (in exchange for a one-time declares no dsh.bundle notice):
dsh plugin --profile web add @deepseek-ai/cordis@4.0.1 @deepseek-ai/dsh-tools@0.1.0-rc.6 @deepseek-ai/schemastery@3.18.1
For daily use: just ignore the warning.
3. Usage
find_plugin is an agent tool — no manual command; just tell the agent what you need and it calls the tool automatically. A few example prompts (Chinese works too):
- "Find me a plugin for OCR / screenshots"
- "I need a terminal TUI plugin"
- "What dsh plugins exist for memory / RAG?"
- "Find me a plugin for price tracking"
- "帮我找支持 OCR / 截图转文字的 dsh 插件"
- "有没有能识别图片内容的插件?"
Example conversations
English — OCR / screenshots
- You: Find me a plugin for OCR / screenshots
- Agent: automatically calls
find_plugin with {"query": "vision OCR screenshots", "limit": 3} and returns a ranked list — see Output Format
- You: How do I install the top one?
- Agent: Run
dsh plugin --profile web add dsh-vision-router, then restart dsh web.
中文 — 终端 TUI
- 你: 有没有终端 TUI 插件?
- 助手: 自动调用
find_plugin,query 为 "terminal TUI" → 返回 dsh-tianshu-tui、dsh-whale-tui、dsh-tui 等结果
- 你: 帮我装第一个
- 助手: 执行
dsh plugin --profile web add dsh-tianshu-tui,然后重启 dsh web。
Tool parameters
| Parameter |
Required |
Type |
Description |
query |
✅ |
string |
The need, e.g. "vision OCR screenshots", "memory rag". Chinese and English both work; English matches better |
limit |
❌ |
number |
Max results; defaults to the maxResults config (5), clamped to 1–10 |
4. Output Format
Each result includes: rank, plugin name, stars, topics, verification level (L1–L5) and security status/risk badges, description, install command, detail link. Real examples below were captured from the live registry — ranks and star counts drift over time.
find_plugin("vision OCR screenshots", limit=3)
1. dsh-vision-router — 46★ [developer, vision] · ✔ 基础验证通过 · ⚠️ 安全提示:中风险
Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots)……
Install: dsh plugin --profile web add dsh-vision-router
https://www.dsh.so/plugins/dsh-vision-router/
2. agent-vision-toolkit — 819★ [developer, vision, automation, ai, ui] · ✔ 基础验证通过 · ⚠️ 安全提示:中风险
为纯文本模型"看图"设计更好的视觉工具箱和技能,支持多图理解,图片问答,
前端UI还原、GUI 自动化等……
Install: dsh plugin --profile web add agent-vision-toolkit
https://www.dsh.so/plugins/agent-vision-toolkit/
3. dsh-vision-toolkit — 317★ [vision, browser, automation, ui] · ✔ 基础验证通过 · ⚠️ 安全提示:中风险
让纯文本模型更好地做视觉任务的DeepSeek Harness插件:带意图的图片问答、长截图 OCR、UI 还原等……
Install: dsh plugin --profile web add dsh-vision-toolkit
https://www.dsh.so/plugins/dsh-vision-toolkit/
find_plugin("terminal TUI", limit=3)
1. dsh-tianshu-tui — 132★ [terminal, ui] · ✔ 基础验证通过 · 🔒 安全通过:低风险
dsh-tianshu-tui — DeepSeek Harness terminal UI
Install: dsh plugin --profile web add dsh-tianshu-tui
https://www.dsh.so/plugins/dsh-tianshu-tui/
2. dsh-whale-tui — 0★ [developer, terminal, ui] · ✔ 基础验证通过 · ⚠️ 安全提示:中风险
grok-build style terminal UI for DeepSeek Harness: a Rust/ratatui TUI shipped as a dsh plugin bundle
Install: dsh plugin --profile web add dsh-whale-tui
https://www.dsh.so/plugins/dsh-whale-tui/
3. dsh-tui — 4★ [developer, terminal, ai, ui] · ✔ 已收录(未功能测试) · 🔒 安全通过:低风险
Claude Code-style terminal UI for DeepSeek Harness agents, as an out-of-tree dsh plugin bundle
Install: dsh plugin --profile web add dsh-tui
https://www.dsh.so/plugins/dsh-tui-4/
find_plugin("memory rag", limit=3)
1. dsh-memory — 2★ [terminal, knowledge, storage] · ✔ 基础验证通过 · ⚠️ 安全提示:中风险
Cited memory over DSH's lossless session log — distilled, human-auditable facts with citations……; memory_read/memory_expand tools, recall index, and a dsh-memory CLI.
Install: dsh plugin --profile web add dsh-memory-2
https://www.dsh.so/plugins/dsh-memory-2/
2. dsh-memory — 1★ [knowledge, storage] · ✔ 基础验证通过 · ⚠️ 安全提示:中风险
Durable cross-session SQLite memory for DeepSeek Harness
Install: dsh plugin --profile web add dsh-memory
https://www.dsh.so/plugins/dsh-memory/
3. mindspace-dsh-session-memory — 1★ [knowledge, storage] · ✔ 基础验证通过 · 🔒 安全通过:低风险
Editable, session-isolated personalization memory for DeepSeek Harness
Install: dsh plugin --profile web add mindspace-dsh-session-memory
https://www.dsh.so/plugins/mindspace-dsh-session-memory/
💡 Query intent matters: "price tracking" matches cost/balance-tracking plugins (dsh-balance, deepseek-harness-wallet), not price-comparison scrapers — matching reflects what the registry actually describes.
No-match response:
No plugins in the dsh.so registry matched that query. Suggest broader terms (e.g. "image", "terminal", "memory").
Every result (matches or no-match) ends with a Powered by dsh.so footer plus a copyright/license line (dsh-plugin-finder v0.1.8 · © 2026 zhoushimin · Apache-2.0). Disable with attribution: false.
5. Search Tips
- Use English keywords: matching tokenizes the query, so single English words (
ocr, rag, tui) hit far better than long phrases.
- Be specific:
"terminal TUI" beats vague descriptions.
- Use topic tags: e.g.
vision, browser, automation, ui — topic hits weigh more.
- An empty query returns the top entries by stars (the model rarely does this, but the behavior exists).
- Matching is keyword scoring, not AI semantics: name hit +3, topic hit +2, description hit +1, ties broken by stars. If wording differs a lot, try rephrasing.
6. Configuration
Configure in the host composition or an agent preset's cordis.yml (defaults are fine, usually no change needed):
- insert:
- id: dsh-plugin-finder
name: dsh-plugins-finder
config:
indexUrl: https://www.dsh.so/plugins-index.json # override for self-host / testing
maxResults: 5 # default result count
cacheTtlMs: 600000 # cache the index for 10 min
timeoutMs: 15000 # fetch timeout (ms)
| Config |
Default |
Description |
indexUrl |
https://www.dsh.so/plugins-index.json |
Machine-readable dsh.so plugin index URL |
maxResults |
5 |
Default result count when limit is not passed |
cacheTtlMs |
600000 (10 min) |
How long to reuse the fetched index before refetching |
timeoutMs |
15000 |
Fetch timeout in milliseconds |
attribution |
true |
Append a "Powered by dsh.so" promotion and copyright footer to every result |
7. Data Source & Matching
- Data source:
https://www.dsh.so/plugins-index.json — a machine-readable index of every plugin listed on dsh.so (id, name, description, stars, topics, install, url, verification level, security status & risk).
- Matching: the query is tokenized and each token is scored — name contains +3, topic contains +2, description contains +1; results sort by score, ties by stars, then take the top
limit.
- Cache: the index is reused within
cacheTtlMs; no repeated requests.
8. FAQ
Q: Installed, but no find_plugin tool in the session?
A: Check two things: ① dsh plugin --profile web list confirms it is installed; ② you must restart dsh web for a new bundle to load.
Q: Should I act on the missing peer warnings?
A: No — they are a false positive; see Section 2.
Q: No results for my query?
A: Use broader English terms such as "image", "terminal", "memory", or drop overly specific qualifiers.
Q: How do I update the plugin?
A: dsh plugin --profile web add dsh-plugins-finder@latest, then restart.
Q: How do I uninstall?
A: dsh plugin --profile web remove dsh-plugins-finder, then restart.
Q: PowerShell error "The splatting operator '@' cannot be used..."?
A: That only happens with scoped packages (@scope/name) — PowerShell treats a leading @ as the splat operator, so quote the name: dsh plugin --profile web add '@scope/name'. This plugin is unscoped, so no quotes are needed.
Q: Boot fails with ERR_MODULE_NOT_FOUND: Cannot find package 'dsh-plugins-finder'?
A: A stale install entry (or the bundle patch name) still references the old unscoped name. Remove by package name and reinstall: dsh plugin --profile web remove dsh-plugins-finder, then add again.
Q: The npmjs.com page shows an older version than the registry?
A: The website caches; the registry is authoritative. Verify in a terminal: npm view dsh-plugins-finder version --prefer-online; hard-refresh the page (Ctrl+F5) or wait a few minutes.
Q: How do I check which version is installed?
A: dsh plugin --profile web list shows the profile's dependency; npm view dsh-plugins-finder version shows the latest on npm.
9. Development
pnpm install # or npm install (peers come from the dsh host; devDependencies are for local build/test)
pnpm build # tsc -> lib/
pnpm test # node --test (match logic unit tests)
- The bundle patch is declared in
cordis.patch.yml, referenced by dsh.bundle.patch in package.json.
- When publishing to npm, include
lib/, cordis.patch.yml, README.md, and README.zh.md (see the files field in package.json).
Release verification / 发布后自检
After each npm publish, run the automated install check to confirm both supported install sources still work against the released artifact:
npm run verify:install # offline: npm registry + GitHub, functional smoke
npm run verify:install -- --live # also queries the real dsh.so index
The script installs dsh-plugins-finder@<version> from npm and from github:ihuajiu/dsh-plugins-finder into throwaway dirs (mirroring a dsh profile's settings), asserts the installed bundle matches the expected name/version and ships lib/index.js + lib/match.js, then runs a functional smoke of the matching logic. It exits non-zero if either source breaks. npm run verify (test + verify:install) is the full gate.
License
Apache-2.0 · Copyright (c) 2026 zhoushimin