Introduction

The extension capabilities of DeepSeek Harness (DSH) are typically provided as plugin bundles. Installing, uninstalling, updating, or enabling/disabling plugins often requires restarting the instance, which can make debugging and switching configurations slow.

kyorakuyk/dsh-hotreload-plugin-manager is a tree-external DSH plugin that enables hot installation, hot uninstallation, updating, and enabling/disabling of profile plugin bundles on a running instance. It also provides a Web settings page tab. The following introduces its positioning, installation method, and main boundaries.

What is this

This is an MIT-licensed plugin maintained by kyorakuyk.

Its features include:

  • Zero kernel changes: Pure tree-external bundle.
  • Dual package: A single npm package serves as both the host gateway and a browser settings tab.
  • Provides a Web settings page tab: Settings → Plugins → Plugin Management.
  • Provides a /plugin-manager/* HTTP API for listing, installing, uninstalling, updating, and enabling/disabling.

It solves the problem of performing lifecycle management on profile plugin bundles within a running DSH instance, rather than restarting the instance every time configuration changes are made externally.

Core Capabilities

The following introduces the confirmed main capabilities.

Hot install bundle

Supports installing plugin bundles based on a spec. Acceptable source formats include:

  • npm package name
  • git URL
  • github:owner/repo
  • file: / link: paths

Hot uninstall bundle

Uninstalling removes fibers and cleans up dependencies, and removes stale bundle layer entries.

Disable / Enable bundle

Installed bundles can be disabled or enabled. The state is persisted and takes effect immediately.

Hot update bundle

Hot updating replaces the bundle’s patch lines and replays the configuration in real-time.

Note: The hot update here targets composition and configuration, not module code. Changes to module code or exports map still require a restart.

Web settings page

After installation and enabling, you can access it in the Web UI:

Settings → Plugins → Plugin Management

In this tab, you can install other plugins by spec, and perform update, disable/enable, or uninstall operations on installed items.

HTTP API

The plugin provides the /plugin-manager/* HTTP API. Common operations include:

Operation Method & Path Body Fields
List GET /plugin-manager/list None
Install POST /plugin-manager/install { spec }
Uninstall POST /plugin-manager/uninstall { packageName }
Update POST /plugin-manager/update { packageName }
Enable / Disable POST /plugin-manager/setEnabled { entryId, enabled }

Installation and Enabling

Prerequisites:

  • Node ≥ 22
  • pnpm ≥ 10
  • DSH installed
  • Target profile initialized

The following uses the web profile as an example.

1. Install this plugin

You can install it directly from GitHub:

dsh plugin --profile web add "github:kyorakuyk/dsh-hotreload-plugin-manager"

You can also use the full git URL:

dsh plugin --profile web add "https://github.com/kyorakuyk/dsh-hotreload-plugin-manager.git"

If you prefer to clone it locally first, you can clone the repository:

git clone https://github.com/kyorakuyk/dsh-hotreload-plugin-manager.git

Then install using the local path:

dsh plugin --profile web add "file:$(pwd)/dsh-hotreload-plugin-manager"

If published as an npm package, you can also use the npm package name spec. The package name appearing in the example is:

dsh plugin --profile web add "@kyorakuyk/dsh-plugin-manager"

This npm package name does not match the repository name, so you need to confirm the actual publish target before using it.

2. Restart dsh web instance

After installing this plugin, you must restart the dsh web instance:

dsh --profile web

3. Hard refresh the browser once

The browser needs to be hard refreshed once:

Ctrl+Shift+R

4. Open the plugin management page

After entering the Web UI, open:

Settings → Plugins → Plugin Management

After completing the steps above, you can manage other plugin bundles on this page.

Typical Usage

Install other bundles

In the plugin management page, fill in the installation object according to the spec. Acceptable source formats include:

  • npm package name
  • git URL
  • github:owner/repo
  • file: / link: paths

For example, the local path format can be:

file:$(pwd)/some-dsh-bundle

This just illustrates the spec format; the specific bundle to install depends on the plugin you wish to introduce.

Manage installed bundles

After installation, you can perform the following on the installed items:

  • Update
  • Disable
  • Enable
  • Uninstall

Disabling/enabling changes the entry status, and the state is persisted.

Operate via HTTP API

If not operating in the Web UI, you can also call the /plugin-manager/* interfaces.

For example, to query the list:

GET /plugin-manager/list

To install a bundle:

POST /plugin-manager/install
{ "spec": "<bundle-spec>" }

To uninstall a bundle:

POST /plugin-manager/uninstall
{ "packageName": "<package-name>" }

To update a bundle:

POST /plugin-manager/update
{ "packageName": "<package-name>" }

To enable or disable an entry:

POST /plugin-manager/setEnabled
{ "entryId": "<entry-id>", "enabled": true }

Limitations and Notes

Hot updating does not replace module code

Hot updating replaces composition and configuration, not module code.

If the bundle’s module code or exports map changes, they only take effect after a restart.

Do not mix with dsh plugin CLI

Do not mix with the dsh plugin CLI for the same bundle. Each bundle should use only one installation and cleanup mechanism to avoid being combined multiple times.

Conflicts with row IDs will be rejected

If the patch row ID conflicts with the user layer or another bundle, the bundle will be rejected for installation.

Git specs that cannot resolve a package name will fail

When using a git spec, installation will fail if the package name cannot be resolved.

Ordinary libraries will be rejected

Ordinary libraries without dsh.bundle.patch will be rejected and automatically rolled back via pnpm remove.

Old installation formats are not supported

Old .dsh-plugin / config.yaml installation formats are not supported.

Non-closure peers are the responsibility of the bundle author

If a peer imported by a bundle is neither in the profile nor in the DSH installation closure, its availability is the responsibility of the bundle author.

Remote trust needs attention

The /plugin-manager/* route is open to anyone who can reach the server.

If the instance is exposed to a local area network (LAN), you cannot rely on the protection of the /api trust fence. You must confirm network boundaries and access control before exposing it.

pnpm minimumReleaseAge

For pnpm ≥ 11, minimumReleaseAge defaults to rejecting newly released packages.

When the manager executes pnpm, it appends:

--config.minimumReleaseAge=0

Check source code and license before installation

This plugin manages profile plugin bundles within the current DSH instance and runs with the privileges of the current DSH process.

Before installing other plugins, you should first check the target bundle’s source code, license, and dependency sources.

Links

  • Community Directory: https://www.skillhub.cn/plugins/kyorakuyk/dsh-hotreload-plugin-manager
  • GitHub: https://github.com/kyorakuyk/dsh-hotreload-plugin-manager

This directory page is a community directory, not an official app store; it lists plugins as an independent site and has no official affiliation with DeepSeek / Hypoface.