Introduction

The philosophy of DSH is that “everything is a plugin.” As plugins increase, common operations become scattered across the command line and configuration files: installing plugins, stopping a specific plugin, viewing the README, checking versions, and handling startup failures. dsh-plugin-butler centralizes these actions in the DSH Web UI under “Settings → Plugins,” providing a “Plugin Management” tab.

What is this?

imtanhui/dsh-plugin-butler is a DSH plugin positioned as a “Plugin Butler”: it manages DeepSeek Harness (DSH) plugins graphically via the Web UI. The license is MIT. The version of package.json referenced in this article is 0.6.0, it requires Node >=18, and react ^18.2.0 is an optional peerDependency. It emphasizes zero build and zero runtime dependencies.

Core Features

View & Chinese Catalog

  • Official and External grouping, both collapsible.
  • Built-in Chinese catalog for 130+ official modules, including Chinese names, descriptions, and categories.
  • The Chinese catalog / groups / descriptions are persisted to ~/.dsh/plugin-manager/{catalog.json,groups.json}.

Real-time Start/Stop & Health Status

  • Start/Stop operations precisely edit the profile’s cordis.patch.yml, adding or removing disabled: true blocks.
  • Changes are hot-applied by DSH’s HMR observer without requiring a restart.
  • Failed lines are highlighted in red, with support for a “Show Only Failures” filter.
  • When expanded, each line shows the injected services / provider dependencies.

Custom Groups

  • External plugins can be organized into groups, supporting create / rename / delete / move operations.
  • Groups are persisted to ~/.dsh/plugin-manager/groups.json.
  • Supports one-click filtering.

Update Detection & One-click Update

“Check Updates” compares against the registry latest. Rows with new versions will display Current → Latest.

“Update” executes an installation command similar to the following:

pnpm add <name>@latest

It automatically rolls back to the previous version on update failure. Dependencies from link / file / git sources are marked as non-updatable automatically.

Uninstall

Uninstall removes the item from dsh.profile.bundles and executes:

pnpm remove

It automatically rolls back on failure. The update / install / uninstall chain is serially exclusive.

Plugin Details

  • The plugin details modal displays the Markdown README.
  • The README rendering uses a built-in custom renderer with zero dependencies.

Plugin Market

  • Searches GitHub topic:dsh-plugin repositories, sorted by stars and paginated.
  • Each item displays author / stars / intro, with support for “Details” and “One-click Install”.
  • The market relies on the GitHub Search API; unauthenticated requests have a 60 requests/hour rate limit, mainly affecting frequent searches.
  • This market searches independent GitHub repositories and is not equivalent to the DeepSeek or Fantom official app stores.

Dependency Graph

  • Full-screen dependency graph using a left-to-right mind-map layout.
  • Nodes display the project name, and hover shows details; official nodes are blue dots, external nodes are black dots.
  • Supports dragging nodes and hovering to highlight upstream and downstream dependencies.
  • Dependency resolution is based on the runtime fiber._store and is best-effort; semantic-level conflicts are not within the scope of detection.

Installation & Enabling

First, install the plugin, then restart the profile to make the tab effective.

  1. Install from GitHub:
dsh plugin --profile <name> add github:imtanhui/dsh-plugin-butler

This command adds dsh-plugin-butler to the specified profile.

  1. Install from local source code (for development/debugging):
cd /path/to/dsh-plugin-butler
dsh plugin --profile <name> add .

Suitable for reading source code first or performing local debugging.

  1. Restart the profile:

After restarting, the “Plugin Management” tab will appear in the Web UI under “Settings → Plugins”.

Typical Usage

Check Updates

  1. Open “Settings → Plugins → Plugin Management”.
  2. Click “Check Updates”.
  3. The plugin compares each installed npm dependency against the registry latest. Rows with new versions will display Current → Latest.
  4. Click “Update” on the corresponding row.
  5. If the update fails, it will roll back to the previous version.

Local Development

pnpm run check
pnpm test

pnpm run check is used to check source file syntax, and pnpm test is used to run tests.

Use Cases & Notes

Suitable for developers who frequently install, update, and start/stop DSH plugins, especially for maintenance scenarios where viewing versions, READMEs, dependency relationships, and failure statuses is desired in a single interface.

Before use, it is recommended to check:

  • Plugins run with the permissions of the current DSH process; the source code, license, dependencies, and actual executed commands should be checked before installation.
  • Disabling items that are depended upon may cause the profile to fail to start. The official design is “fail-loud”; to recover, manually delete the disabled block from the profile’s cordis.patch.yml.
  • Core lines are protected and cannot be disabled via the UI; manual configuration file editing is required.
  • Lines controlled by !!js expressions are not handled by the UI and must be edited manually.
  • Dependencies from link / file / git sources cannot be updated automatically.
  • Market search is affected by the GitHub Search API’s unauthenticated rate limit.
  • The dependency graph is based on the runtime fiber._store for resolution, best-effort only; semantic-level conflicts are not detected.
  • GET requests include Same-Origin policy checks to prevent CSRF / DNS-rebinding.

Links

  • GitHub: https://github.com/imtanhui/dsh-plugin-butler
  • Catalog Page: Direct URL for the catalog page is not provided in this article; please refer to the actual DSH community directory site.