# deepseek-harness-desktop

> 一个 npm 包内置 11 款 DSH Web 主题皮肤与皮肤中心卡片，支持一键试穿与切换，全程无需重启服务。

## Metadata

- Author: [@ningbainb](https://github.com/ningbainb)
- Repo: <https://github.com/ningbainb/deepseek-harness-desktop.git>
- GitHub: [ningbainb/deepseek-harness-desktop](https://github.com/ningbainb/deepseek-harness-desktop)
- Stars: 156
- Language: TypeScript
- License: [BSD-3-Clause](https://spdx.org/licenses/BSD-3-Clause.html)
- Homepage: <https://ningbainb.github.io/deepseek-harness-desktop/>
- Topics: `ai-agent`, `ai-coding-assistant`, `codex`, `deepseek`, `deepseek-harness`, `desktop-app`, `dsh`, `dsh-plugin`, `electron`, `electron-app`, `gui`, `open-source`, `plugin-system`, `plugins`, `remote-access`, `skills`, `ssh-client`, `windows`, `windows-desktop`
- Forks: 5
- Open Issues: 6
- Last push: 2026-08-20T05:29:52.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-skins
```

## Wiki

## 一句话定位
DSH Web 聊天客户端的皮肤全家桶聚合包：装上它就能在插件配置页里看到一张「皮肤中心」卡片，列出 11 款内置主题皮肤（QQ 怀旧、同花顺、Windows XP、龙的传人、Minecraft、初音未来、鲸吟、交易终端、夕港等），支持在线试穿和一键切换。

## 核心能力
- 在「插件配置 → Web UI 插件」里插入一张皮肤中心卡片，列出官方默认与所有已装皮肤
- 在线试穿任意一款皮肤（不持久化）：即时看效果、亮/暗主题切换、退出完整还原
- 一键应用皮肤：写 `~/.dsh/profiles/<profile>/cordis.patch.yml`，由宿主配置监听器在数秒内热加载，无需重启
- 皮肤之间互相排斥：同一时刻只激活一款（由 patch 的 managed 区段强制）
- 背景遮挡透明度滑块（仅对带背景图的皮肤生效）
- 一个 npm 包内置全部皮肤资产，无需为每款皮肤单独占用 npm 包名

## 技术实现
- **语言**: TypeScript + Node.js（聚合包为 ESM，构建脚本为 Node 脚本）
- **关键依赖**: `@deepseek-ai/dsh-host-webserver`（host 端路由服务）、`@deepseek-ai/dsh-client-runtime` 与 `@deepseek-ai/dsh-client-ui-theme`（client 端运行时与主题）、`schemastery`（背景配置 schema）、`react`（皮肤中心卡片 UI）
- **架构模式**: Cordis 插件（host + client 双半区）+ 进程内 `dsh-skin use` ESM 端口（src/skin-switch.ts，避免依赖外部 CLI），通过原生 HTTP 路由 `/api/skin-center/*` 与浏览器半区通信
- **入口文件**: 聚合入口 `packages/dsh-skins/build.mjs`；皮肤中心 host 入口 `packages/skins/skin-center/src/index.ts`；client 入口 `packages/skins/skin-center/src/client/index.ts`

## 适用场景
希望给 DSH Web 聊天界面换个风格、又不想折腾命令行的普通用户：装一个包就拿到 11 款主题，从 QQ 2008 怀旧、Windows XP Luna 到当下流行的初音未来、交易终端风格都有。
不喜欢皮肤中心附带的卡片、只想手动 `dsh-skin use` 切换的开发者和重度自定义用户也能用：聚合包把每款皮肤的 `skin.json` + `lib/client.js` 完整内置，`dsh-skin` CLI 能直接识别。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 0.1.0-rc.7+ | 由皮肤中心 devDependencies 中 `@deepseek-ai/*` 包均为 `^0.1.0-rc.7` 推断 |
| Node | >=22.19.0 | 来自仓库根 package.json 的 engines 字段（`^22.19.0 \|\| >=24.0.0`）|
| 平台 | Web | bundle 仅声明 `platform: "web"`，作用域限定 DSH Web GUI |
| 原生模块 | 无 | Windows 符号链接失败时回退到目录联结（junctions），不依赖原生模块 |

## 安装方式
```bash
dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-skins
```

## 配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| `backgroundOpacity` | 数字（0-100，步长 5） | 主界面背景遮挡透明度，数值越大背景图被遮得越深；仅对内置背景图的皮肤（如 blue-fantasy / whale-song）可见效果 | 0 |

## 常见问题

**Q: 切换皮肤后需要重启 `dsh web` 服务吗？**

A: 不需要。点击「应用」后皮肤中心会把变更写入 `~/.dsh/profiles/<profile>/cordis.patch.yml`，宿主配置监听器在几秒内热加载，浏览器刷新即可看到新皮肤。

**Q: 能不能同时启用两款皮肤？**

A: 不能。皮肤中心通过 patch 文件的 `dsh-skin managed` 区段强制只有一个激活，其它皮肤被写为 `disabled: true`。

**Q: 切换皮肤会不会影响模型请求或对话内容？**

A: 不会。皮肤只改浏览器 DOM（CSS、标题栏、状态栏、背景图），不拦截、不修改任何发送给模型的请求。

**Q: 装完之后皮肤列表是空的，或者少了几款怎么办？**

A: 检查当前 profile 下的皮肤目录：皮肤中心扫描 `packages/skins/<id>` 或 `node_modules/@linxin666/dsh-skins/skins/<id>`，每个皮肤目录里必须同时有 `skin.json` 和 `lib/client.js`，缺一会被构建脚本跳过。

**Q: Windows 上切换时报符号链接权限不足怎么办？**

A: 切换逻辑在 symlink 失败时会自动回退到目录联结（junction），不需要开发者模式；如果仍失败请以管理员身份运行 dsh，或把皮肤包手动放到 profile 的 node_modules 下。

**Q: 怎么加一款自己的皮肤？**

A: 在 `packages/skins/<your-id>/` 下放 `skin.json`（含 id、name、tagline、bodyAttr、wiring.id 等字段）和构建后的 `lib/client.js` / `lib/index.js`，跑 `pnpm --filter @linxin666/dsh-skins build`，重装聚合包即可在皮肤中心看到。

**Q: 怎么卸掉某款皮肤换回官方默认？**

A: 皮肤中心卡片里有「官方默认」入口，点击即可一键应用；想完全卸载插件则用 `dsh plugin --profile web remove @linxin666/dsh-skins`。

**Q: 背景遮挡滑块对所有皮肤都有效吗？**

A: 仅对带背景图的皮肤生效（目前是 blue-fantasy 和 whale-song），官方默认和其它纯色调皮肤的背景透明度滑块不会改变外观。

## 上手难度
入门 — 装上即可在 Web 端插件配置里直接看到皮肤中心卡片，无需任何额外配置；想新增或调整皮肤时才需要看 `build.mjs` 和 `skin.json` 字段。

## 已知问题与限制
- 浏览器 bundle 仅面向 DSH Web GUI，作用域限定在 web 端（`packages/dsh-skins/README.md:33` / `packages/skins/skin-center/package.json` 的 `dsh.client.platform`）
- 皮肤只改 DOM（CSS、标题、状态栏、背景图等），不触及任何模型请求（`packages/dsh-skins/README.md:33`）
- 旧版 Desktop 2.2/2.3 写在全局 `~/.dsh/cordis.patch.yml` 的 managed 区段会在首次切换时被自动迁移到当前 profile，并从全局文件中删除（一次性行为，`packages/skins/skin-center/src/skin-switch.ts:963-972`）

---

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