设置 → 插件里的插件管理页:已装插件中文名与白话描述、一键启停、界面内改备注,支持搜索与筛选。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:2768651338/dsh-plugin-manager
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
该插件的 README 只有英文版本。
dsh-plugin-manager
Every plugin finally speaks for itself — Chinese names, plain-language descriptions, one-click enable/disable, and in-UI notes editing for DeepSeek Harness.
Settings → Plugins → Plugin Manager · 165 plugins cataloged, one click to toggle, notes edited in place.
Overview · Compatibility · Install / Uninstall · Quick Start · Configuration · Permissions & Data · Features · Troubleshooting · Development
中文 · Español · 日本語 · Deutsch · Русский · Português · 한국어
🆕 2026-08-14 · v0.3.0 — In-UI notes editing is live: click Edit notes on any card to rename a plugin or rewrite its description in place. No more hand-editing
catalog.json.🏷️ v0.4.0 — Package renamed to the owner-controlled scope @2768651338/dsh-plugin-manager (previous @dsh-external/* scope was not authorized).
🔧 v0.2.x — Fixed endpoint 404 under tsx source launch (strict
./typertregistration) and the cordis inject access (ctx.getchannel).
Overview
Problem. The built-in "Plugin list" in DeepSeek Harness shows only English module names with no descriptions — once you install many plugins, nobody can tell what each row does. Enable/disable previously required hand-editing cordis.patch.yml, which is easy to break.
Who it's for. Every DeepSeek Harness user, especially people who install many plugins and want to know what each one does, toggle them safely, and annotate the ones the catalog doesn't cover.
| Pain | Before | With this plugin |
|---|---|---|
| Plugin list is meaningless | English module names only, no clue what each row does | Chinese name + one-line description + category for every plugin |
| Toggling is manual | Hand-edit cordis.patch.yml (easy to break) |
One-click switch, surgical line-level edits, hot-reloaded in ~1s |
| Unknown plugins stay mysterious | Fallback text only | Add your own notes directly in the UI |
| Nothing is safe from fat fingers | Any row can be disabled | System rows locked, !!js-controlled rows labeled |
Compatibility
| Item | Value |
|---|---|
| DSH version | 0.1.0-rc.5 (official installer, built-in source tree under resources/harness) |
| Verified on | 2026-08-14, web profile, Windows |
| Install mechanism | dsh plugin --profile web add (bundle patch + dual-face row) |
| Depends on | typert-loader / api-gateway / client-modules rows shipped in dsh-base + dsh-web-app |
The official launcher boots via tsx from source; this plugin's strict
./typertregistration is specifically designed to work under both plain-node and tsx source launch (covered bytests/claims.e2e.mjs). If you run a different DSH version, re-run the test suite before reporting issues.
Install / Uninstall
# Install (recommended, same bundle mechanism as dsh-navbar)
dsh plugin --profile web add github:2768651338/dsh-plugin-manager#main
# Alternative: install from a zip (download from the Release page), unzip to a path without spaces, then:
dsh plugin --profile web add file:/<unzipped-dir>/dsh-plugin-manager
# Alternative: build locally (clone this repository)
pnpm build # tsc + tsdown → lib/index.js (host half) and lib/client.js (browser half)
dsh plugin --profile web add file:./dsh-plugin-manager
After installing, restart DeepSeek Harness and press Ctrl+F5 once. Open Settings → Plugins → Plugin Manager. The
lib/artifacts are committed, so GitHub installs need no local build.
| Action | Command |
|---|---|
| Upgrade | dsh plugin --profile web update (or re-run the add command), then restart DSH |
| Disable (temporarily) | Click 停用/Disable on the plugin's own card in Plugin Manager — the row stays installed |
| Remove | dsh plugin --profile web remove @2768651338/dsh-plugin-manager, then remove its rows from cordis.patch.yml if any |
Quick Start
Minimal reproducible walkthrough (2 minutes):
# 1. Install
dsh plugin --profile web add github:2768651338/dsh-plugin-manager#main
# 2. Restart DeepSeek Harness, press Ctrl+F5 in the web page
- Open Settings → Plugins → Plugin Manager — you see the full catalog with Chinese names and descriptions.
- Toggle one plugin: search for
trajectory, click 停用 (Disable) on the 轨迹视图 card → the row turns 已停用 within ~1 second (host-side effect; browser-side plugins fully unload after a page refresh). - Annotate one plugin: click 编辑备注 (Edit notes) on the 联网搜索 card, rename it and add a note, click 保存 (Save) → the card updates immediately; 恢复默认 (Restore default) reverts it.
Configuration
| Item | Details |
|---|---|
| Plugin-level options | None — the plugin needs no configuration; install-and-use |
| Toggle file | ~/.dsh/cordis.patch.yml (global layer, hot-reloaded by DSH) |
| Notes override file | ~/.dsh/plugin-manager/catalog.json (auto-created on first save) |
| Environment variables | None of its own; follows DSH's DSH_HOME resolution for the files above |
| Defaults | Unlisted plugins fall back to built-in catalog → English short name → fallback text |
| Sensitive items | None — no keys, tokens, or credentials are read or stored |
Permissions & Data
| Scope | What it touches |
|---|---|
| Files (read) | cordis.patch.yml, plugin-manager/catalog.json, the in-process loader plugin list, and the profile package.json (backup) |
| Files (write) | ~/.dsh/cordis.patch.yml (toggle rows), ~/.dsh/plugin-manager/catalog.json (notes), and the profile package.json (restore) — inside the DSH home only |
| Network | None. The browser half talks only to your local DSH /api RPC endpoint |
| Credentials | Never read |
| User data | Never read (no access to sessions, messages, or prompts) |
Features
| Feature | Description |
|---|---|
| 📚 Chinese catalog | 130+ built-in entries (name / description / category), fallback + per-plugin customization |
| 🔘 One-click toggle | Writes ~/.dsh/cordis.patch.yml (global layer); DSH's HMR watcher re-applies within ~1 second; enabling writes an explicit disabled: false that overrides lower layers |
| ✏️ In-UI notes | "Edit notes" on each card edits the Chinese name/description (~/.dsh/plugin-manager/catalog.json), with one-click restore-to-default |
| 🛡️ Safety guards | Bootstrap/transport/settings-shell rows locked as "System"; !!js-expression rows labeled "Expression-controlled" |
| 🔍 Search & filter | Search by name/description/module, filter by category, enabled-count summary |
| 💾 Backup & restore | Export notes + plugin list (profile dependencies/bundles) + the enable/disable patch to one JSON file; import merges (never removes your existing entries) and prints the exact reinstall command |
How It Works
| Half | File | Role |
|---|---|---|
| Host | lib/index.js |
Registers the pluginManager cordis service (Typert remote): list / setEnabled / setOverride / removeOverride / exportBackup / importBackup. Toggles use surgical patch-file editing — comments and !!js expressions preserved, file re-read before write to merge concurrent edits. |
| Host | lib/typert.host.js |
Exports ./typert; the typert-loader registers it as strict invocation definitions. Crucial fix: under tsx source launch the gateway and an external plugin can hold two copies of typert-protocol — decorator markers are invisible across copies (symptom: every call 404s). Strict registration goes through the shared registry, sidestepping module-instance identity. |
| Browser | lib/client.js |
Mounts the pluginManager remote namespace via the inject-free ctx.get() channel (avoids a self-mount deadlock) and registers the Plugin Manager tab in the settings.plugins.tab slot. |
Runtime dependencies:
@deepseek-ai/cordisand@deepseek-ai/dsh-typert-protocolresolve through DSH'sprofiles/node_modulesfallback links — no extra pnpm downloads.
Custom Notes
Click Edit notes on any card. Saving with both fields empty removes that plugin's customization. Power users may still edit ~/.dsh/plugin-manager/catalog.json directly:
{
"@dsh-external/dsh-navbar": { "name": "对话导航条", "desc": "对话区右缘的消息节点导航" }
}
Precedence: override file > built-in catalog > English short name.
Troubleshooting
| Symptom | Fix |
|---|---|
| The tab doesn't appear | Restart DeepSeek Harness, then Ctrl+F5 the page (client bundles load at boot) |
| "暂时无法读取插件" with an error block | Read the gray error detail under the message: pluginManager.list failed: ... / transport failure ... and match it below |
Error mentions 404 or invocation-unavailable |
Your installed version is older than 0.2.0 (missing ./typert strict registration) — update and restart |
cannot get property "remote.pluginManager" without inject |
Version older than 0.2.2 — update and refresh |
| A toggle doesn't seem to work | Check ~/.dsh/cordis.patch.yml keeps row-block structure (a - dash at column 0); rows labeled "表达式控制" are !!js-controlled — edit the config file directly |
pnpm warns peer range @deepseek-ai/*@* does not match resolved 0.1.0-rc.6 |
Harmless — DSH ships these as prerelease 0.1.0-rc.6 and semver * doesn't match prereleases. v0.4.1+ declares >=0.1.0-rc.0; for other plugins add peerDependencyRules.allowAny: ['@deepseek-ai/*'] to pnpm-workspace.yaml |
| Where are the logs? | DSH host startup log (launcher console) for host errors; browser DevTools (F12) console for client errors |
| Rollback | Remove the plugin's rows from cordis.patch.yml, use 恢复默认 for notes, or uninstall with the remove command above |
Project Structure
src/
index.ts host half: PluginManagerGateway (list / setEnabled / setOverride / removeOverride)
patch-file.ts surgical patch-file editor (pure functions)
catalog.ts built-in catalog + system-protection set
types.ts shared plain data types
typert-host.ts strict endpoint registration artifact (./typert)
client/
index.ts browser half: mount remote namespace + register the tab
remote.ts client remote artifact (strict zod codecs)
PluginManagerTab.tsx tab UI (list / toggles / notes editing)
locales.ts zh/en dictionaries
cordis.patch.yml bundle patch (inserts the plugin-manager row)
lib/ built artifacts (committed; GitHub installs skip building)
tests/ smoke / end-to-end tests
Development
pnpm build # tsc + tsdown
node tests/patch-file.smoke.mjs # 9 smoke tests for the patch editor
node tests/host-gateway.e2e.mjs # host gateway end-to-end (incl. override-file contents)
node tests/claims.e2e.mjs # endpoint claims under plain-node and tsx source launch
Absolute paths inside the test scripts point at the local DSH installation and are development-only; they do not affect runtime behavior.
Contributing. Fork → change → pnpm build → run the tests above → open a PR against main. Small fixes (docs, catalog entries, translations) are welcome without prior discussion. Report issues with the DSH version and the exact error detail shown in the tab.
License & Security
License: MIT — see LICENSE. Built on DeepSeek Harness's public plugin mechanism, not affiliated with DeepSeek.
Security: this plugin reads no credentials and sends nothing over the network. To report a security issue privately, use GitHub's Report a vulnerability on the Security tab — do not open a public issue with exploit details.
Star History
MIT License © 2768651338
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-plugin-manager★ 8229
设置 → 插件 分区里的插件管理 Tab:从 npm/git 安装带进度、下次启动生效的启停开关、安装冲突对账可撤销、失败一键转交修复会话。
dsh-market/dsh-market★ 5159
在 DeepSeek Harness 设置页内浏览、搜索并安装社区插件,支持分类筛选、一键更新与停用,以及主题切换与配置备份。
kingOfSoySauce/dsh-skin-market★ 173
原生皮肤市场与生命周期管理器,发现社区皮肤、展示预览与兼容状态,并提供已验证的一键安装或手动安装入口。
bradeGithub/DSH-Plugins-Marketplace★ 170
面向 GitHub dsh-plugin 话题的插件与技能市场:设置页内逛自动收录的全量索引(CI 每 2 小时刷新),一键安装带类型识别、安装脚本与宿主依赖遮蔽安全检查、环境变量密钥管理,并附 STANDARD.md 识别层规范。
awesome-dsh-plugin/dsh-find-plugin★ 162
会话内直接找插件:按关键词/分类搜索本精选 registry,返回描述与可直接执行的安装命令。
Sanqi-normal/dsh-webui-market-plugin★ 105
dsh Web GUI 内的社区插件市场:浏览 awesome-dsh-plugin.com 目录,从 设置 → 插件 → 插件市场 安装/卸载插件到 profile。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。