Preface¶
In DSH’s plugin system, a web profile may simultaneously contain system plugins, UI plugins, tool plugins, custom extension packages added by the user, and dynamic plugins temporarily created during the current session. The native plugin list is more like a long roster, making it difficult to distinguish which ones are system plugins and which are user plugins, and it’s also inconvenient for viewing descriptions or handling uninstallation cleanup.
dsh-pluginmanager is a settings page plugin for DSH web profiles. It organizes plugins into three layers—native extensions, user extensions, and runtime (temporary)—and provides editable descriptions, supplementary registration, disable/enable, and uninstall management. Below, we introduce its features, installation method, and important notes.
What Is This¶
dsh-pluginmanager is maintained by zdjmrq, with the npm package name and GitHub repository name both being dsh-pluginmanager, licensed under MIT. The project is not affiliated with DeepSeek and is a community plugin.
It primarily solves three problems:
- Organizes DSH plugins by responsibility to reduce the need to search for package names one by one in a long list.
- Provides user extensions with disable, enable, full uninstall, supplementary registration, and unregistered dependency tags.
- Offers editable descriptions, search filtering, count badges, and bilingual display for plugins.
Core Features¶
Three-Layer Architecture View¶
Plugins are categorized into three types:
- Native Extensions: Read-only display organized by system layer, WebUI layer, and tool layer, with no uninstall buttons.
- User Extensions: Can be disabled/enabled, fully uninstalled, or supplementally registered, with unregistered dependency tags displayed.
- Runtime (Temporary): Displays dynamic Cordis plugins in the current session, read-only.
User Extension Management¶
Operations on user extensions distinguish between “temporarily unavailable” and “thorough cleanup”:
- Disable/Enable: Only removes or restores the active entry while preserving configuration for easy reversal.
- Full Uninstall: Cleans up the active entry, dependency declarations, and related content in
node_modules, with a second confirmation step. The uninstall process usesdsh plugin --profile web removeto finalize dependency/bundles cleanup, then removes patch entries and descriptions. - Supplementary Registration: For plugins manually placed in
node_modulesbut not declared independencies, this adds them to dependency management so the plugin marketplace can recognize them.
Descriptions, Search, and Display¶
The plugin manager includes Chinese names and one-line descriptions for 90+ core native plugins. All plugins support editable descriptions, saved to:
~/.dsh/profiles/web/plugin-manager/descriptions.json
The interface supports search filtering by name, display name, description, and source, as well as collapsing, count badges, side-by-side Chinese and package names, and bilingual display. For tool plugins whose enable/disable is controlled by the current agent presets, the page marks preset awareness information to avoid misinterpretation.
Hot Switching and Patch Writing¶
Enabling, disabling, and uninstalling first persist changes to cordis.patch.yml, then hot-swap the running Loader entry. Plugins declaring dsh.client.platform: web automatically refresh the page after successful switching.
Patch editing uses text block-level operations on cordis.patch.yml, preserving comments and !!js expressions, with automatic backup before writing. The Browser side registers in the settings.plugins.tab slot, using React and CSS variables.
Installation and Enablement¶
Installation Steps¶
- Enter the web profile directory:
cd ~/.dsh/profiles/web
- Install the plugin repository as a bundle:
pnpm add "git+https://github.com/zdjmrq/dsh-pluginmanager.git"
- Append the package name to the
dsh.profile.bundleslist inpackage.json. The package name to add is:
"dsh-pluginmanager"
- Restart the dsh web service, then go to:
Settings → Plugins → Plugin Manager
Avoiding Duplicate Activation¶
Choose only one installation method—do not mix the bundle method with manually inserting lines into cordis.patch.yml. The plugin includes its own cordis.patch.yml; if the same insertion line is also written into the profile’s cordis.patch.yml, startup will report:
duplicate loader entry id: pluginmanager
and refuse to start.
When troubleshooting, check these two locations—the same plugin should appear in only one of them:
dsh.profile.bundlesin~/.dsh/profiles/web/package.json~/.dsh/profiles/web/cordis.patch.yml
If upgrading from the old patch-line method, first delete the corresponding line from the patch, then install the bundle. If using a file: dependency pointing to the repository directory for local development and debugging, do not stack patch lines as well.
Typical Usage¶
Viewing Plugin Layers¶
After entering the plugin management page, first look at the top-level collapsible items and count badges, then expand the corresponding layer. For native extensions, focus on the division of system layer, WebUI layer, and tool layer; for user extensions, focus on whether there are unregistered dependency tags.
Editing Descriptions¶
Find the target plugin, click edit description, and write a note. After saving, it will be stored in ~/.dsh/profiles/web/plugin-manager/descriptions.json.
Handling Unregistered Plugins¶
If a plugin was manually copied into node_modules, it may not be written into dependencies. Use supplementary registration in user extensions to add it to dependency management. After that, the plugin marketplace can also recognize it.
Disabling or Uninstalling¶
If you only want to temporarily turn off a user extension, use disable/enable—configuration will be preserved. If you want to remove the plugin, use full uninstall and proceed through the second confirmation. Uninstallation involves modifications to cordis.patch.yml and package.json, with backups created before writing.
Applicable Scenarios and Notes¶
This plugin is suitable for people who maintain a DSH web profile, have installed many extensions, and need to distinguish between system and user plugins.
Before using it, it’s recommended to note:
- It runs in the current dsh process and can read/write configuration files under the profile.
- Uninstall and disable operations will modify
cordis.patch.ymlandpackage.json, with backups before each write; it is still recommended to review the source code before use. - Hot reload’s immediate effect is equivalent to restarting the target plugin in the current process; active session states, such as running terminals, will disconnect.
- If runtime switching fails, the operation has already been persisted and will take effect after restarting the service.
- Native extensions do not provide uninstall buttons.
- The project is licensed under MIT and is not affiliated with DeepSeek.
Links¶
GitHub repository: https://github.com/zdjmrq/dsh-pluginmanager