DeepSeek Harness plugin

dsh-dynplugin-manager

Manage DSH dynamic plugins (Dynamic Cordis Plugins): scan directories, browse, and load via /dynload slash command. Community gap — self-built.

Jump to install

Source facts

Repository
Thomas-key/dsh-dynplugin-manager
Latest update
Aug 15, 2026
Category
Plugin Markets & Managers
GitHub stars
2
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/Thomas-key/dsh-dynplugin-manager
Plugin: dsh-dynplugin-manager
Author: Thomas-key

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-dynplugin-manager

> Manage DSH dynamic plugins (Dynamic Cordis Plugins): built-in discovery, install dialog, loading. Community gap — self-built plugin.

DSH dynamic plugins have two load channels:

  • runner channel (cordis_define / cordis_run): session-scoped; code runs in a vm sandbox (no import/require) and is lost on process restart — self-contained plugins (web-access's function-body shape) go here
  • loader channel (insert row + official patch watcher): persistent; community npm plugins (real imports) go here — an insert row in cordis.patch.yml is applied live by the official watcher, no restart

Officially, dynamic plugins are only reachable through agent tools — no human-operable UI exists. This plugin fills the gap:

  • Settings page "动态插件" (Dynamic Plugins): built-in discovery (runner managed dir + profile node_modules non-bundle packages), live state badges (loaded / idle / failed+reason / needs-deps / unbuilt), loader cards with disable/uninstall buttons, install-dialog candidates carry install state (loaded / installed / not installed)
  • Install dialog: local dir / GitHub repo / npm package sources → scan → per-plugin install mode (link/copy) → instant result → one-click mount
  • Slash commands: /dynload <name> (auto-routing load), /dynunmount (disable), /dynuninstall (full removal)

Install

⚠️ Name collision warning

An npm package with the same name may exist. Always install from this repository explicitly:

# from GitHub
dsh plugin --profile web add -w Thomas-key/dsh-dynplugin-manager

# or from a local checkout
dsh plugin --profile web add -w ./dsh-dynplugin-manager

1. Install the runtime dependency (required!)

The plugin is installed by link, so Node resolves imports from the directory itself. @deepseek-ai/dsh-tools is not committed (in node_modules/, git-ignored) — install it in the checkout first, or dsh web fails to start:

cd dsh-dynplugin-manager
npm install
cd ..

> peerDependencies (@deepseek-ai/cordis, react) are provided by the DSH host — do not install locally.

2. Add the plugin

dsh plugin --profile web add -w ./dsh-dynplugin-manager

Restart dsh web → Settings → Dynamic Plugins.

Plugin discovery (built-in, no directory config)

SourceLocationNotes
runner managed dir~/.dsh/dynplugin-manager/plugins/self-contained plugins install here (dialog "install to managed dir"); listed after restart (loading stays session-scoped)
profile node_modules~/.dsh/profiles/<profile>/node_modules/non-bundle packages whose entry exports apply appear automatically (link or npm installed)

Install dialog

Install Plugin button → pick a source:

SourceScanInstall modes
Local dirthe dir itself or first-level subdirsloader: link (edits apply after restart) / copy (independent copy; reinstall to pick up source edits); runner: managed-dir copy
GitHub repozip download to ~/.dsh/dynplugin-manager/cache/ → extract → scan (monorepo supported)same as local dir (copy semantics)
npm packageregistry metadata → single-package cardcopy install

The dialog blocks other input while installing; results show per candidate (failures include the reason and a manual command); loader plugins can be mounted immediately (verify-before-persist: real import + apply must pass before the insert row is written — failures leave zero residue).

Loading & lifecycle

Settings buttons (loader plugins): disable (remove insert row, live, package kept) / uninstall (full removal). Runner plugins stay session-scoped — no buttons in the list; load with /dynload in a session and stop them in the official dynamic-plugin panel.

Slash commands:

CommandActionPersistence
/dynload <name>auto-route: self-contained → runner session-scoped; import-using → loader persistent mountrunner session / loader persistent
/dynunmount <name>loader: remove insert row (disable); runner: delete managed copyreversible
/dynuninstall <name>full removal: row + dsh plugin remove (pnpm reference counting keeps shared deps) + managed copy + recordsdependency graph clean; .pnpm physical residue can be reclaimed manually with dsh plugin --profile web prune (never auto-prune — it would delete user-installed packages)

Plugin shapes

  • Self-contained (runner): the file is a function body (no import/export, top-level return { apply }) — the vm sandbox executes it directly; session-scoped; errors never harm DSH
  • Import-using (loader): the entry uses the module system — must be installed (quality gate checks dependency resolvability); mounted only after an in-memory pre-execution passes; any verification failure writes nothing (fail-closed)
  • needs-deps: code imports bare packages the package.json does not declare → blocked with the exact import list; declare them and rescan
  • unbuilt: entry file missing (e.g. un-compiled TS) → disabled in the dialog; build first

Difference from the same-named package

There is already a dsh-plugin-manager on npm (author hrhgit) — that one manages bundle plugins (Loader-entry enable/disable, persisted to cordis.patch.yml). This plugin manages dynamic plugins (runner session loading + loader persistent mounting). Different targets, they can coexist.

Maintenance status

This plugin was authored by deepseek-v4-flash (an AI agent). If this notice has not been removed, the author does not actively maintain this plugin. Forks and PRs are welcome.

License

MIT