UI Enhancements
dsh-ui-plugin-manager
xiyue718/dsh-ui-plugin-manager · ★ 0
Adds a Plugin Management tab to the DSH web client's Settings → Plugins page, for managing all installed non-system third-party plugins.
Manifest details
安装
dsh plugin --profile web add github:xiyue718/dsh-ui-plugin-managerGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
Table of contents
@dsh-external/ui-plugin-manager
Introduction
ui-plugin-manager is a "Plugin Manager" plugin for the DSH Web client. It adds a "Plugin Manager" tab to Settings → Plugins, allowing users to view and manage all installed third-party plugins that are not bundled with the system, including enabling, disabling, and uninstalling them.
Installation
dsh CLI (Official Project Way)
If you have the dsh CLI installed, follow the official project tutorial to install with dsh plugin:
# Install from a local plugin directory
dsh plugin --profile web add C:/Users/<user>/.dsh/plugins/ui-plugin-manager
# Or install from the GitHub repository
dsh plugin --profile web add github:xiyue718/dsh-ui-plugin-manager
Start after installation:
dsh --profile web
View the composed configuration:
dsh --profile web --dump-config
See the project documentation for details: docs/user/develop/basic/publish.md.
Build artifacts: host lib/index.js (self-contained), client lib/client.js, package dsh-external-ui-plugin-manager-0.1.0.tgz.
Build once before installing: DSH_CHECKOUT=<dsh checkout> bash scripts/build.sh. Once a profile installs this package, the host resolves the plugin's runtime imports from the package's own directory only, so the host half is bundled into a self-contained module (inlining schemastery, zod, and the @deepseek-ai/dsh-* helpers); an unbundled lib/index.js leaves the row disabled with failed to import.
Usage
- Open DSH Web settings.
- Go to the "Plugins" page.
- Switch to the "Plugin Manager" tab.
- View the third-party plugin list.
- Use the search box to filter by name, Entry ID, or author.
- Click "Enable/Disable" to toggle a plugin, or click "Uninstall" to remove a plugin.
- The list refreshes automatically and shows the operation result.
Features
- View the third-party plugin list:
- Plugin module name
- Loader Entry ID
- Version
- Author
- Enabled/disabled state
- Current fiber state
- Enable/disable plugins: updated dynamically through the Loader, effective immediately without restart.
- Uninstall plugins: remove them from the current Loader runtime.
- Search: filter by plugin name, Entry ID, or author.
- Operation feedback: the list refreshes automatically and shows success or failure messages.
- Relationship with system plugins: only third-party plugins are listed and managed; system entries such as
@deepseek-ai/*,cordis:*,deepseek-harness/packages/*, anddeepseek-harness/vendor/*are filtered out and cannot be operated on accidentally. - Safety: uninstall operations show a confirmation dialog. If a plugin was injected through the Super Module Injector, it may be restored automatically after restart; use
dev_uninject_pluginfor permanent uninstall. - This plugin does not provide a configuration form entry; plugins that need configuration can still use the original "Config" tab.
Host API
GET /@dsh-external/ui-plugin-manager/api/plugins
POST /@dsh-external/ui-plugin-manager/api/toggle
Content-Type: application/json
{ "entryId": "xxx", "enabled": false }
POST /@dsh-external/ui-plugin-manager/api/uninstall
Content-Type: application/json
{ "entryId": "xxx" }
How It Works
The plugin consists of a host half and a client half.
On the host side, it gets all plugin entries from loader.entries() and filters out system plugins by module name, keeping only third-party plugins. To show version and author, it resolves the plugin's package.json from the profile node_modules, DSH_HOME/plugins, or the Loader base URL. Enable/disable calls loader.update(entry.id, { disabled: !enabled }), and uninstall calls loader.remove(entry.id); both take effect immediately in the current runtime.
On the client side, it registers the "Plugin Manager" tab in Settings → Plugins, fetches the list through the Host API, renders it, and calls the corresponding API with built-in feedback when operating.