Introduction¶
The design philosophy of DeepSeek Harness (DSH) is “everything is a plugin.” Managing unofficial (third-party) plugins in the DSH Web interface usually requires manually editing configuration files or restarting the process. dsh-plugin-toggle is a client plugin developed by huntersxy. It moves third-party plugin management into the Web settings page, allowing plugins to be enabled or disabled through the UI.
Features¶
This plugin primarily provides the following capabilities:
- List unofficial plugins: Lists unofficial bundles in each profile (bundle stacks that do not include the
@deepseek-ai/*prefix) and lines inserted by user patches. The list displays the version, description, and current status. - Hot reload: When enabling or disabling a plugin, the plugin directly modifies the
cordis.patch.ymlfile under the profile (adding or removing thedisabled: truemarker). DSH watches for changes to this file and automatically hot-reloads, without needing to restart the process. - Refresh page button: Provides a “Refresh Page” button at the bottom of the “Third-Party Plugins” tab, used to apply the modified UI state.
Installation¶
Installing this plugin requires DSH’s command-line tool. Run the following command in a terminal:
dsh plugin --profile web add dsh-plugin-toggle
Alternatively, if you already have a local archive of the plugin, you can install it directly:
dsh plugin --profile web add ./dsh-plugin-toggle-0.1.0.tgz
After installation, restart the dsh web process to load the plugin.
Usage¶
After installing and restarting, open the DSH Web settings page, navigate to “Settings” → “Plugins”, and switch to the “Third-Party Plugins” tab to view the unofficial plugins list. Here you can enable or disable them.
How It Works and Limitations¶
- Implementation method: The plugin reads and writes configuration by registering a custom route on the host side,
POST /plugin-toggle/api/<method>(supportinglistandset-enabled). Because DSH’sapi-proxyhas a hardcoded whitelist restriction on third-party settings namespaces, this plugin uses a custom route channel instead of the built-in settings RPC. - List source: The list is based on static parsing of the profile patch file. It only manages bundle lines in the bundle stack that are not
@deepseek-ai/*and lines inserted by user patches, and runtime prefixes are automatically normalized. - Install/uninstall limitation: The list only supports toggle operations. To install new plugins or uninstall existing plugins (modify the bundle stack), the process must be restarted for changes to take effect (the refresh button on the page only refreshes the client UI).
- Hot-disable warning: If a plugin’s bundle patch contains configuration lines or expression lines (not pure inserts), hot disabling may be incomplete. The plugin list displays a warning and reminds users that full effectiveness requires restarting the process after disabling.