Introduction

DSH follows the “everything is a plugin” route, and the accumulation of system plugins and user-installed plugins grows over time. In the Web UI, the entry to view and manage these plugins is “Settings → Plugins.” You have to dig into the settings page every time to check what is installed and which are running.

dsh-plugin-sidebar-manager solves this operational path issue: it places the “Plugins” button directly into the Web UI’s left sidebar. Clicking it allows for categorized browsing, searching, and runtime enable/disable of user-added plugins. Below is an introduction to its features, installation method, and underlying mechanism.

What is it

One-sentence positioning: It adds a “Plugins” button to the DSH Web UI sidebar, categorizing system plugins and user-added plugins for display, while supporting search and runtime enable/disable.

  • Maintained by rain02333z-spec, source code hosted on GitHub, license MIT, current version 0.1.1.
  • It is an interface plugin running on the DSH Web client, where dsh.client.platform in package.json is web.

Core Features

Entry and Panel

  • When the sidebar is expanded, it displays “Plugins” and the total count; when collapsed, it shows an icon button consistent with “Settings → Plugins”.
  • Clicking the button opens a plugin panel above the sidebar.
  • The panel can be closed by pressing Escape, clicking outside the panel, or clicking the entry button again.

Browsing and Searching

  • Modules starting with @deepseek-ai/* and cordis:* are categorized as “System Plugins,” while others are categorized as “User-Added.” Both groups can be expanded or collapsed independently.
  • Search supports full module names, short names, or Loader entryId, and is case-insensitive.
  • The interface follows the DSH global language, fully supporting Simplified Chinese and English.

Enable/Disable and Status Handling

  • User-added plugins support runtime enable and disable, reading the Host’s real state after operation.
  • DSH and Cordis system plugins remain read-only, and the plugin manager itself cannot be modified.
  • There are corresponding states for loading, empty list, no search results, load failure, and single operation failure, with retry options for load failures.

Installation and Enablement

Requires DSH 0.0.0-rc.7 and pnpm. Execute the following four steps in order:

# 1. Clone the repository
git clone https://github.com/rain02333z-spec/dsh-plugin-sidebar-manager.git
cd dsh-plugin-sidebar-manager

# 2. Prepare local installation package
node scripts/prepare-checkout.mjs

# 3. Install to web profile
dsh plugin --profile web add ./packages/dsh-plugin-sidebar-manager

# 4. Restart DSH Web
dsh web

First clone the repository and prepare the local package, then install it into the web profile via dsh plugin, and finally restart DSH Web to load it. After restarting, if a “Plugins” entry appears at the bottom of the sidebar, installation is successful.

Uninstall is also done via dsh plugin:

dsh plugin --profile web remove dsh-plugin-sidebar-manager

Runtime Mechanism

The plugin is divided into two parts: Host and Client:

  • The Host side mounts the pluginManager.setEnabled Remote, modifying the current runtime state via Entry.update({ disabled }) from the Cordis Loader.
  • The Client side reuses the DSH built-in read-only pluginInventory.list() Remote and registers it to the sidebar.footer.action list slot.

These capabilities rely on pluginInventory Remote, sidebar.footer.action list slot, DSH Client Module Loader, and the Typert Remote generation and loading mechanism provided by DSH 0.0.0-rc.7.

One point needs to be clarified: enable/disable only modifies the runtime state of the current Loader and does not write back to cordis.patch.yml in the profile. After restarting DSH, the plugin state will be restored according to the original profile configuration.

Development and Verification

The source code uses the dual-end plugin build convention of the DSH monorepo. Sync this repository to packages/extensions/plugin-manager and ensure the root tsconfig.host.json and tsconfig.client.json reference the corresponding project, then run:

Set-Location <DSH monorepo root>
pnpm exec vitest run packages/extensions/plugin-manager/tests
pnpm exec tsc -b packages/extensions/plugin-manager/tsconfig.host.json packages/extensions/plugin-manager/tsconfig.client.json
pnpm --filter dsh-plugin-sidebar-manager bundle
pnpm --filter dsh-plugin-sidebar-manager pack

The panel is a visible Web behavior; before merging into the DSH repository, you should also run pnpm run test:gui and Web replay tests.

Applicable Scenarios and Notes

It suits two types of users: those who frequently need to view or retrieve installed plugins in the Web UI, and developers who need to temporarily disable a user-added plugin to observe behavior. The boundary of read-only system plugins without modifying built-in behavior is also suitable for those who wish to keep their environment stable.

Note the following points before installation:

  • Current source code and packages are targeted at DSH 0.0.0-rc.7; confirm your DSH version before installing.
  • The plugin runs with the permissions of the current DSH process; check the source code and license (this project is MIT) before installing.
  • Enable/disable operations are not persisted; the plugin state will be restored according to the original profile configuration after restarting DSH. Do not mistake this for a means of modifying configuration.

Summary

dsh-plugin-sidebar-manager moves plugin management from “Settings → Plugins” to the sidebar entry, completing categorization, searching, and runtime enable/disable in a single panel, while keeping system plugins read-only with clear behavioral boundaries. The repository and directory page are as follows: