Preface

Under DSH’s plugin-based extension model, switching the appearance of the Web GUI is not just about swapping a CSS file. It involves how multiple skin packages are discovered, where the settings page entry point is, how different skins are mutually exclusive, how the configuration persists after switching, and whether it works correctly after a page refresh.

dsh-skin-manager is a lightweight skin manager for the DeepSeek Harness web GUI. It centralizes all installed skins in the settings page, offering one-click application, default appearance restoration, and integration handling with dsh-market.

What This Is

dsh-skin-manager is maintained by xiaoyangcheng84-svg and licensed under MIT. It is not a standalone theming tool but a plugin mounted onto the DSH web profile: it discovers installed skins, provides a Settings → Skins page, switches the active skin, and synchronizes relevant state when dsh-market is installed.

The problems it solves can be summarized in three points:

  • No need to manually maintain the enabled/disabled state of each skin package one by one.
  • No need to repeatedly restart dsh web to confirm whether a skin has taken effect.
  • When multiple skin packages coexist, there must be clarity on which are active and which are disabled.

Core Features

Dynamic Discovery of Installed Skins

It discovers installed skins, including skin packages with skin.json and marketplace themes without skin.json.

Based on verified documentation, the recognition prerequisites are: the skin package must meet the skin.json condition or the marketplace theme condition described in the documentation, and provide a pre-built client bundle. Newly installed skins do not require additional registration or modifications to plugin code.

Dedicated Settings Page

The plugin adds a Settings → Skins page to the settings sidebar. This page displays Default along with all installed skins.

One-Click Apply and Hot Update

When you click Apply on a skin in the settings page, the plugin rewrites the managed configuration section in the profile. DSH’s configuration listener hot-loads the changes within seconds; then, click Refresh as prompted, and the skin takes effect.

Mutually Exclusive Activation

Only one skin is active at a time. Selecting a skin deactivates all others.

Restore Default Appearance

The page provides a Default option. Clicking Apply on Default restores the default DeepSeek Harness appearance.

Integration with dsh-market

When dsh-market is installed in the environment, applying a skin from dsh-skin-manager also performs the following operations:

  • Updates .dsh-market/state.json to prevent the newly selected skin from being disabled again at startup;
  • Unmounts outdated dsh-market hot mounts that may overlap with the new skin;
  • Synchronizes the in-memory disabled state of dsh-market before rewriting the patch.

API Routes

The plugin provides the following routes:

/api/skin-manager/list
/api/skin-manager/apply
/api/skin-manager/bundle

These routes are used to fetch the skin list, apply a specified skin, and serve the skin’s client bundle, respectively.

Installation and Activation

When installing from the github: source, git must be available on the machine:

dsh plugin --profile web add github:xiaoyangcheng84-svg/dsh-skin-manager

If using a local checkout directory, you can install it via the link: method:

dsh plugin --profile web add link:<path>

After installation, you can restart dsh web, or rely on dsh-market’s hot install mechanism. Then refresh the page and open Settings → Skins.

Typical Usage

  1. Open Settings → Skins.

  2. You will see Default and the list of installed skins on the page.

  3. Click Apply on the target skin.

  4. Click Refresh when prompted, and the skin takes effect.

  5. If you want to restore the default appearance, click Apply on Default.

Applicable Scenarios and Notes

This plugin is suitable for scenarios where multiple skin packages are installed in the DSH web GUI, where you need to centrally switch appearances from the settings page, or where you want to maintain state consistency with dsh-market.

Notes before use:

  • The plugin runs with the current dsh process permissions; review the source code and license before installation.
  • The license is MIT.
  • Regarding dependencies, peerDependencies include react ^18.2.0 and several @deepseek-ai packages.
  • Skin package recognition relies on the skin.json condition or marketplace theme condition described in the documentation, and requires a pre-built client bundle.
  • The switching operation rewrites the plugin-managed section of the profile’s cordis.patch.yml; non-skin user patch lines remain unchanged.

Conclusion

The value of dsh-skin-manager lies in consolidating skin discovery, activation, mutual exclusion, and default restoration for the DSH web GUI into a single settings page, while handling state synchronization when dsh-market is present.

Related Links:

  • GitHub: https://github.com/xiaoyangcheng84-svg/dsh-skin-manager
  • Plugin Directory Information: https://www.skillhub.cn/plugins/xiaoyangcheng84-svg/dsh-skin-manager