Plugin directory / Developer / dsh-skin-manager
dsh-skin-manager
Verified · install-tested on dsh xiaoyangcheng84-svg
What it does
一个可以管理皮肤的dsh插件
Works — verified, early-stage project
一个可以管理皮肤的dsh插件 It installs cleanly and boots without issues in our testing. It's early-stage but functional.
“Verified” means our automated CI actually ran dsh plugin add in a clean profile and it booted — nothing more. Feature descriptions and version compatibility are the author’s claims. This is not a security audit and not an endorsement of third-party code.
README
dsh-skin-manager
A lightweight skin manager for the DeepSeek Harness web GUI. It discovers
every installed skin (any package carrying a skin.json plus a prebuilt
client bundle), lists them in a dedicated Settings → Skins page, and lets
you switch the active skin with one click — mutually exclusive, hot-reloaded
without restarting dsh web.

Features
- Dynamic discovery — scans the web profile's
node_modulesfor packages
withskin.json+ prebuiltlib/client.js, and also recognizes market
themes withoutskin.json(a client bundle plus acordis.patch.ymlthat
inserts a theme/skin loader row, e.g.dsh-skin/ Codex-style skin ordsh-kimino-theme). Newly installed skins appear automatically; no registry
regeneration, no code changes. - Dedicated settings page — a
settings.sectionentry (idskins,
order 20) in the settings sidebar, next to General / Models. - One-click apply — pick a skin and click Apply; the profile patch is
rewritten and DSH's config watcher hot-reloads it within seconds. Refresh
the page to activate. - Mutually exclusive — exactly one skin is active at a time (the active
one gets aninsertrow, every other skin adisabled: truerow). - Restore default — the Default option disables every skin and returns
to the stock DeepSeek Harness appearance.
Install
dsh plugin --profile web add github:xiaoyangcheng84-svg/dsh-skin-manager
Then restart dsh web (or rely on the market's hot install). Open
Settings → Skins after a page refresh.
Requires git for the
github:source install; alternatively install from a
local checkout withdsh plugin --profile web add link:<path>.
Usage
- Open Settings → Skins.
- See Default plus every installed skin (e.g. 深海女仆工坊 / maid-atelier).
- Click Apply on a skin → click Refresh when prompted → the skin
activates. - Click Apply on Default to restore the stock look.
Skin package protocol
Any package is recognized as a skin when:
- it lives under the profile's
node_modules(top-level or@scope/name), - it ships a
skin.json(id,name,package,accent,bodyAttr,tagline, optionalwiring.id— the same fields used by
dsh-deep-whale / dsh-web-ui skins), and - it ships a prebuilt client bundle (
exports["./client"]orlib/client.js).
A market theme without skin.json is also recognized when:
- it has
dsh.clientanddsh.bundle.patch, - its
cordis.patch.ymlcontains a simpleinsertrow, - the package name, row id, or (for immediately-loaded client bundles)
description/keywords mention theme/skin, and - it ships a prebuilt client bundle.
dsh-market coordination
When dsh-market is installed, applying a skin from this manager also:
- rewrites the same
cordis.patch.ymlmanaged section (boot persistence), - updates dsh-market's
.dsh-market/state.jsonso it cannot re-disable the
chosen skin at boot, - unmounts stale dsh-market hot mounts that would otherwise overlap the newly
applied skin, and - syncs dsh-market's in-memory disabled state before rewriting the patch, so
the market's self-healing guard cannot immediately re-disable the skin you
just applied — no manual "use" click in the market is needed.
How switching works
Switching rewrites the managed section of the profile's cordis.patch.yml
(between # --- dsh-skin-manager managed --- markers):
- active skin → an
- insert:row; - every other skin →
- id: <rowId>+disabled: true.
Non-skin user patch rows (e.g. dsh-market) are preserved untouched.
API
The host half mounts three routes under /api/skin-manager:
| Route | Method | Purpose |
|---|---|---|
/api/skin-manager/list |
GET | List installed skins + current active id |
/api/skin-manager/apply |
POST | { id } or { id: "official" } to switch |
/api/skin-manager/bundle |
GET | ?id=<skinId> serve a skin's client bundle |
Development
The client bundle is written directly in the __ModuleLoader__ bundle format
(the same shape tsdown emits for the shipped ui-* packages), so no build
step is required. lib/client.js may require only module-table entities
(platform seed words like react and registered client bundles).
License
MIT
Install
Install the catalog once, then DeepSeek Harness can find and install any plugin from this site automatically:
dsh plugin add dshbase-catalog Then say "install dsh-skin-manager for me" — your agent finds it in the directory and installs it. Docs: dshbase-catalog · verified packs.
This plugin is GitHub source (not published to npm) — install it straight from the repo:
Web profile:
dsh plugin --profile web add github:xiaoyangcheng84-svg/dsh-skin-manager Headless (CLI) profile:
dsh plugin --profile headless add github:xiaoyangcheng84-svg/dsh-skin-manager Test report
Verified: L1 install + L2 load + L3 runtime from GitHub source on dsh 0.1.0-rc.6.