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/repofile:/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/repofile:/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.