# dsh-web-ui

> dsh skin compatibility tool: automatically imports skin center with 11 historical skin placeholder packages, preventing old profile junction errors during transition period. Will be deprecated in the next release cycle.

## Metadata

- Author: [@zhu1090093659](https://github.com/zhu1090093659)
- Repo: <https://github.com/zhu1090093659/dsh-web-ui.git>
- GitHub: [zhu1090093659/dsh-web-ui](https://github.com/zhu1090093659/dsh-web-ui)
- Stars: 5,125
- Language: TypeScript
- License: [Apache-2.0](https://spdx.org/licenses/Apache-2.0.html)
- Homepage: <https://gallery.dsh-market.com>
- Topics: `deepseek-harness`, `dsh`, `dsh-plugin`, `web-ui`
- Forks: 310
- Open Issues: 49
- Last push: 2026-08-20T14:37:38.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:zhu1090093659/dsh-web-ui/packages/dsh-skins
```

## Wiki

## 一句话定位
`@linxin666/dsh-skins` 是一个已退役的兼容载具（保留一个发布周期）。它通过依赖关系把 `@linxin666/dsh-client-ui-skin-center`（皮肤中心）带给升级用户，并随包发布 11 个空壳的 v1 单皮肤叶包，让旧版 profile 里残留的皮肤 junction 在过渡期内仍可解析。

## 核心能力
- 自动带入皮肤中心：把 `@linxin666/dsh-client-ui-skin-center`（`workspace:*`）声明为唯一 dependency，升级/安装即获得完整的内置皮肤集合（xp / blue-fantasy / dragon-heir / minecraft / miku / trading / whale-song / harbor / whale-mom / matrix / maid-atelier / mint），皮肤以纯资产目录形态随皮肤中心包分发
- 发布 11 个 v1 空叶包：`build.mjs` 为已退役的 v1 包名（blue-fantasy、dragon-heir、harbor、maid-atelier、matrix、miku、minecraft、trading、whale-mom、whale-song、xp）生成不携带任何资源的占位包；`lib/index.js` 是空 `apply()`，`lib/client.js` 是浏览器半区 stub
- 保留旧 junction 可解析：旧 profile 里的 v1 单皮肤入口在升级后仍可被 DSH loader 找到，不再因包缺失而报错
- 继承 skin-center 的 patch：`cordis.patch.yml` 唯一 insert 行是 `web-ui-skin-center`，由 `aggregate.yml` 的 `patchFrom: ../skins/skin-center` 自动生成
- 不带 UI / 配置 / host 业务逻辑：本包没有 `src/` 目录，没有 host 半区入口，没有设置项，没有皮肤资产；唯一的"代码"是 `build.mjs` 与 `build.test.mjs`

## 技术实现
- **语言**: Node.js (ESM JavaScript；`build.mjs` 与 `build.test.mjs`，无 TS 源码)
- **关键依赖**: `@linxin666/dsh-client-ui-skin-center`（`workspace:*`，唯一的运行时依赖）；构建期使用 `node:fs` / `node:path` / `node:url` / `node:os` / `node:test`
- **架构模式**: 兼容载具（compatibility carrier）。无 cordis 业务逻辑；通过 `dsh.bundle.patch` 指向 `cordis.patch.yml`，由 `aggregate.yml` 声明 `patchFrom: ../skins/skin-center` 与 `deps: ../skins/skin-center`；叶包 `package.json` 声明 `dsh.client.platform: web`，是纯占位
- **入口文件**: `build.mjs`（构建期脚本，导出 `LEGACY_SKIN_IDS` 与 `buildCompatibilityShims`）；`cordis.patch.yml`（bundle patch 声明）；`package.json`（`dsh.bundle.patch` 指向 `cordis.patch.yml`）

## 适用场景
还在用早期 dsh web profile、里面残留了 v1 单皮肤包 junction 的用户，升级到当前 dsh-web-ui 时如果不安装这个载具，DSH loader 会因找不到包而报错；安装本包能让旧 junction 在过渡期内继续被解析，直到旧版 bridge 完成一次性迁移。新用户应直接安装皮肤中心包或全家桶聚合包，不必再走本包。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未声明 | 本包 `package.json` 未声明 `dsh.engines`；通过 `@linxin666/dsh-client-ui-skin-center` 的 `@deepseek-ai/*` SDK peer 间接约束 |
| Node | ^22.19 \|\| >=24 | 据 `packages/AGENTS.md:9`；本包 `package.json` 未声明 `engines` |
| 平台 | 跨平台 | 仅做纯资产与 YAML 文本分发，无原生模块、无系统调用 |
| 原生模块 | 无 | 仅使用 Node 内置模块（`node:fs`、`node:path`、`node:url`、`node:os`、`node:test`） |

## 安装方式

```bash
dsh plugin --profile web add github:zhu1090093659/dsh-web-ui/packages/dsh-skins
```

## 配置项
本包无需额外配置。叶包本身没有 settings / options / Schema，所有皮肤中心的能力（背景遮罩、模糊滑杆、Wallpaper Engine 桥接、用户皮肤目录等）由 `@linxin666/dsh-client-ui-skin-center` 在皮肤中心设置卡内提供。

## 常见问题

**Q: 这个包装上后会自动给我装哪些皮肤？**

A: 会自动带入皮肤中心包 `@linxin666/dsh-client-ui-skin-center`，里面随包分发 12 个内置皮肤（xp、blue-fantasy、dragon-heir、minecraft、miku、trading、whale-song、harbor、whale-mom、matrix、maid-atelier、mint），全部以纯资产目录形式分发（`packages/dsh-skins/README.md:9`）。

**Q: 我是新用户，应该装这个包还是皮肤中心包？**

A: 直接装皮肤中心包 `@linxin666/dsh-client-ui-skin-center`，或全家桶聚合包 `@linxin666/dsh-web-ui-all`。本包只保留一个发布周期作为过渡载体，计划在下个发布周期整体移除，新用户无需走它（`packages/dsh-skins/AGENTS.md:7-8`）。

**Q: profile 里写了旧的 `@linxin666/dsh-client-ui-skin-blue-fantasy` 这类 v1 入口，装这个包后还会报"找不到包"吗？**

A: 不会。`build.mjs` 会为 11 个已退役的 v1 包名生成同名空叶包并随 npm 发布；叶包的 `apply()` 是空函数、`lib/client.js` 是 stub，旧 profile 里的 junction 仍可被解析，不再触发包找不到的错误（`packages/dsh-skins/build.mjs:11-50`）。

**Q: 这个包自身带皮肤资源（图片、CSS）吗？**

A: 不带。AGENTS.md 明确本包不再携带皮肤资产；所有皮肤资产都在 `packages/skins/skin-center/skins/<id>/` 下由皮肤中心包统一加载（`packages/dsh-skins/AGENTS.md:2-4`）。

**Q: Maid Atelier 皮肤商用有限制吗？**

A: 有。Maid Atelier 单独采用 CC BY-NC-SA 4.0，仅限非商业使用；完整许可与署名链随皮肤中心包的 `skins/maid-atelier/` 目录分发（`packages/dsh-skins/THIRD_PARTY_NOTICES.md:5-7`）。

**Q: profile overlay 本身是非法 YAML 时会怎么样？**

A: DSH 会在本兼容包加载之前就报错，不会被本包修复；需要先修复 profile 的 overlay 再启动 DSH（`packages/dsh-skins/README.md:36`）。

**Q: 安装后还需要手动启用才能让皮肤生效吗？**

A: 本包本身没有启用开关，安装即生效。真正的皮肤切换在 GUI 一级菜单「皮肤中心」完成，或用 `dsh-skin use <id>` 命令；同一时刻只激活一个皮肤（`packages/dsh-skins/README.zh.md:30`）。

**Q: 这个包会主动改写我的 profile 文件吗？**

A: 不会。本包只做兼容占位，不触碰用户 profile；旧 v1 selection 数据的迁移由皮肤中心内的 `legacy-bridge` 在首次启动时一次性完成（`packages/skins/skin-center/README.md:15`）。

## 上手难度
入门 — 没有设置项、没有 UI、不需要任何额外操作；安装即生效，卸载即停止生效。

## 已知问题与限制
- 本包计划在下个发布周期整体移除（`packages/dsh-skins/AGENTS.md:7-8` / `packages/dsh-skins/README.md:11`）；新用户不应再依赖此包
- 11 个 v1 叶包均为空包：`apply()` 是空函数、客户端注入仅注册一个 no-op factory，激活后不会真正应用皮肤效果，仅做"可解析"占位（`packages/dsh-skins/build.mjs:48-49`）
- 若用户的 profile overlay 本身是无效的 YAML，DSH 会在本兼容包加载之前就报错（`packages/dsh-skins/README.md:36`）
- Maid Atelier 皮肤单独采用 CC BY-NC-SA 4.0，禁止商业用途（`packages/dsh-skins/THIRD_PARTY_NOTICES.md:5-7`）
- 本包仅随 npm 发布 11 个 v1 叶包名，叶包没有自己的 README / LICENSE / NOTICE，使用方需要从皮肤中心包获取这些信息

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-web-ui](https://deepseek-plugin.org/plugins/zhu1090093659/dsh-web-ui/packages/dsh-skins)
Wiki generated by AI (model: `MiniMax-M3`)
