UI Enhancements

dsh-ui-plugin-manager

xiyue718/dsh-ui-plugin-manager · ★ 0

xiyue718

Adds a Plugin Management tab to the DSH web client's Settings → Plugins page, for managing all installed non-system third-party plugins.

License
Unknown
Added
2026-08-17
Maintenance
active
Install kind
github
Manifest details
Manifest status
Declared
Manifest path
package.json#dsh
Manifest checked
2026-08-19
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

dsh plugin --profile web add github:xiyue718/dsh-ui-plugin-manager

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: en · Read Chinese README

Table of contents
  1. @dsh-external/ui-plugin-manager
  2. Introduction
  3. Installation
  4. dsh CLI (Official Project Way)
  5. Usage
  6. Features
  7. Host API
  8. How It Works

中文 | English

@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

  1. Open DSH Web settings.
  2. Go to the "Plugins" page.
  3. Switch to the "Plugin Manager" tab.
  4. View the third-party plugin list.
  5. Use the search box to filter by name, Entry ID, or author.
  6. Click "Enable/Disable" to toggle a plugin, or click "Uninstall" to remove a plugin.
  7. 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/*, and deepseek-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_plugin for 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.