DeepSHPlugins
dsh-skin-manager 项目预览
GITHUB / COMMUNITY PROJECT

dsh-skin-manager

UI 增强JavaScriptMIT

DSH Web GUI 皮肤管理器:自动发现已安装皮肤,在独立设置页一键互斥切换,热载入无需重启。

7 Starsxiaoyangcheng84-svg 更新时间 2026-08-19
访问 GitHub 仓库
dsh-skin-manager 项目预览

项目介绍

中文

DSH Web GUI 皮肤管理器:自动发现已安装皮肤,在独立设置页一键互斥切换,热载入无需重启。

English

Skin manager for the DSH web GUI: discovers installed skins and switches the active one from a dedicated Settings page, mutually exclusive, hot-reloaded without restart.

项目信息与收录信号

快照 2026-09-11
作者 / 组织
xiaoyangcheng84-svg
仓库
xiaoyangcheng84-svg/dsh-skin-manager
GitHub Stars
7
Forks
0
开发语言
JavaScript
许可证
MIT
最近推送
2026-08-19
Manifest
数据中检测到声明

公开仓库不自动等于可商用;许可证与当前兼容性以原项目文档为准。Manifest 和数据评分不构成安装安全认证。

数据评分

70/ 100
维护活跃
85
文档与实用信息
99
生态关注度
26
安装便捷信号
75
项目声明信号
100

近 23 天仍在更新;README 含完整安装与使用说明;关注度尚低(7)。

评分来自已有数据快照的五维模型,仅作浏览参考,不是实际使用评测或安全检测结论。

安装与使用

所有项目资料与许可均以对应 GitHub 仓库为准。

dsh plugin --profile web add dsh-skin-manager

复制命令不会自动执行。请先阅读仓库文档,确认环境要求与许可证。

项目截图

仓库 README

GitHub 原文

已保存的仓库文档快照;文档抓取时间未记录,可能与上方目录介绍处于不同版本。安装前请核对当前仓库说明。

dsh-skin-manager

English | 中文

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.

skins page

Features

  • Dynamic discovery — scans the web profile's node_modules for packages

with skin.json + prebuilt lib/client.js, and also recognizes market themes without skin.json (a client bundle plus a cordis.patch.yml that inserts a theme/skin loader row, e.g. dsh-skin / Codex-style skin or dsh-kimino-theme). Newly installed skins appear automatically; no registry regeneration, no code changes.

  • Dedicated settings page — a settings.section entry (id skins,

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 an insert row, every other skin a disabled: true row).

  • 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 with dsh plugin --profile web add link:<path>.

Usage

  1. Open Settings → Skins.
  2. See Default plus every installed skin (e.g. 深海女仆工坊 / maid-atelier).
  3. Click Apply on a skin → click Refresh when prompted → the skin

activates.

  1. 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, optional wiring.id — the same fields used by dsh-deep-whale / dsh-web-ui skins), and

  • it ships a prebuilt client bundle (exports["./client"] or lib/client.js).

A market theme without skin.json is also recognized when:

  • it has dsh.client and dsh.bundle.patch,
  • its cordis.patch.yml contains a simple insert row,
  • 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.yml managed section (boot persistence),
  • updates dsh-market's .dsh-market/state.json so 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:

RouteMethodPurpose
/api/skin-manager/listGETList installed skins + current active id
/api/skin-manager/applyPOST{ id } or { id: "official" } to switch
/api/skin-manager/bundleGET?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

使用前核对

安装步骤、兼容版本与授权范围以原项目当前文档为准。Stars 和评分是快照中的导航信号。

安装与排错 · 项目问题反馈

同类项目