用 deepseek-harness-skin 给 DeepSeek Harness 换肤

前言

DeepSeek 在 2026 年 8 月开源了智能体运行时 DeepSeek Harness(dsh)。官方仓库的定位很明确:一切皆插件。模型适配、工具、会话、沙箱,连网页界面本身,都按插件来组装。当前仍是 developer preview,默认 Web UI 跑在 http://127.0.0.1:3080

跑起来之后,不少人会碰到同一件事:侧栏、输入框、会话列表都能用,界面却是固定的原生配色。想换成自己熟悉的风格,就得在社区里找主题类扩展。本文介绍的 deepseek-harness-skin,就是其中一套换肤系统:21 套内置皮肤,外加「传一张图生成整套配色」的自定义通道。

需要先说明来源。插件由 HeiGeAi 维护,仓库地址是 HeiGeAi/deepseek-harness-skin。社区目录页在 deepseek-harness-plugin.com,分类为「主题与外观」,2026-08-15 收录。该目录是独立运营的社区站点,与 DeepSeek / 幻方没有从属或背书关系,不能当成官方应用商店。截至 2026-08-17,GitHub 仓库星标为 42(目录页当时列出 32,以仓库页面为准)。

这是什么

deepseek-harness-skin 是一套装进 DeepSeek Harness 源码树的换肤系统,不是运行时往进程里注入 CSS 的那种插件。仓库 README 写得很直接:它覆盖 packages/client/ui-theme,再打一份 8 个文件的宿主补丁,然后重新 pnpm run build。侧栏、输入框、会话列表仍是 DSH 原生控件,功能没有改,改的是配色、边框风格和背景层。

代码使用 MIT 许可证,版权声明为 Copyright (c) 2026 HeiGeAi (Blake Xu)。主要语言是 TypeScript。基线宿主版本是 DeepSeek Harness 0.1.0-rc.5。仓库明确声明:本项目与 DeepSeek 官方无隶属关系。

它要解决的问题也很具体。DSH 原生色板有 73 级绝对色阶和 89 个语义别名,如果只是把几个 CSS 变量换掉,按钮、边框、禁用态的层次很容易塌。这套系统从四个色种推导完整色阶,并在构建期校验对比度,目标是换肤之后文字仍然读得清。

核心功能

仓库 README 与 CHANGELOG(v1.0.0,2026-08-14)对能力的描述一致,下面按已经核实的内容分点说明。

21 套内置皮肤

设置面板里可以直接点选。QQ 2007 和 QQ 2008·粉是纯配色皮肤,不带位图,整套界面由四个色种在构建期推导。其余 19 套各配一张背景图。边框风格分三种:flat(实色描边)、glass(毛玻璃)、neon(发光描边)。

# 皮肤 外观 边框
1 QQ 2007 浅色 flat
2 QQ 2008 · 粉 浅色 glass
3 初音未来 浅色 neon
4 原神 · 蒙德 浅色 glass
5 原神 · 璃月夜 深色 neon
6 恋与深空 · 星海 浅色 glass
7 恋与深空 · 星际 深色 neon
8 火影 · 鸣人 深色 glass
9 火影 · 佐助 深色 neon
10 鸣潮 · 黑青 深色 neon
11 鸣潮 · 深紫 深色 glass
12 龙珠 · 筋斗云 浅色 glass
13 龙珠 · 超赛 浅色 neon
14 大佬 · 烟灰 深色 glass
15 DeepSeek 娘 · 深海 深色 neon
16 DeepSeek 娘 · Q 版 浅色 glass
17 DeepSeek 青春版 浅色 glass
18 内测大佬 深色 neon
19 别影响 AGI 浅色 glass
20 峰哥骑鲸 浅色 flat
21 梁圣 · 静音 浅色 glass

皮肤名称里出现的角色、游戏和商标归各自权利人所有。仓库 NOTICE.md 写明:提及这些名称只用于描述现有预设,不表示获得许可。这一点在文末还会再强调一次。

一套皮肤就是一份 JSON

下面这段来自仓库 README,是 QQ 2008 的完整定义:

{
  "id": "qq-2008",
  "name": { "zh": "QQ 2008·粉", "en": "QQ 2008 Pink" },
  "order": 20,
  "appearance": "light",
  "chrome": "glass",
  "seeds": {
    "accent": "#c8447e",
    "secondary": "#d98bb0",
    "surface": "#f6e2ec",
    "text": "#2b1020"
  },
  "glyph": "🐧",
  "showBadge": true
}

四个色种是 accentsecondarysurfacetext。构建期据此生成 CSS,运行期只切换一个 data-dsh-skin 属性。自己加皮肤时,往 src/styles/skins/themes/ 放一份 JSON,再跑:

pnpm --filter @deepseek-ai/dsh-client-ui-theme run build:skins

保对比度推导,构建期校验可读性

推导不是简单换色。程序会保持每一级与原生色板相同的对比度关系,计算在 OKLab 空间进行,落到 sRGB 色域外的颜色用色度二分法拉回来。所有规则挂在 body[data-dsh-skin="…"]body[data-skin-chrome="<flat|glass|neon>"] 下面,不改全局 CSS 变量。切回「默认」时属性摘掉,界面回到原生外观。

可读性检查是确定性的:21 套皮肤 × 8 项对比度契约,构建期全部跑一遍,不达标直接失败。自己改完 JSON 可以用这条命令复现:

pnpm --filter @deepseek-ai/dsh-client-ui-theme run check:skins

背景图挂在独立的固定层上,不跟着会话容器缩放。开会话、滚长对话、开合侧栏,背景都待在原地。CHANGELOG 里专门记过一笔:早期背景会在开启对话时被强制放大,后来把背景层从内容容器里挪了出来。

一张图生成自定义皮肤

皮肤选择器的第一项是「自定义(选图)」,支持 PNG、JPG 或 WebP。仓库描述的流程是:

  1. 浏览器本地解码一次,按 96px 采样取色,同时按 1920px 长边重编码成 WebP。
  2. 从图里提取主色、副色、底色、文字色,并判断浅色还是深色。
  3. 按画面明暗自动调蒙版浓度,保证文字可读。
  4. 图片按内容哈希存进 ~/.dsh/skins/,Host 提供只读静态路由给前端取用。同一张图重复选只存一份。

README 强调:原图不出本机。上传走的是同一台机器上的 DSH Host。上传路由只认 WebP 魔数,超过 4MB 的请求会被直接掐断。卸载脚本不会删除 ~/.dsh/skins/ 里的自定义图,不用可以自己删。

版本条和检查更新

设置面板底部显示「皮肤系统 v1.0.0 · DSH 0.1.0-rc.5」,旁边有「检查更新」。请求由 DSH Host 侧代理发往 GitHub Releases,浏览器不直连第三方;3 秒超时、64KB 响应上限、60 秒内缓存。网络不通时显示「暂时无法检查」,按钮保持可点。

安装与启用

社区目录页给出的安装命令是:

dsh plugin add github:HeiGeAi/deepseek-harness-skin

如需可复现安装,目录页建议固定 commit 哈希:

dsh plugin add github:HeiGeAi/deepseek-harness-skin#<commit>

这条命令是目录页原文,按社区目录的惯例,会从 GitHub 解析插件并装到当前 dsh 配置。但本仓库 README 写明:这套皮肤要跟着前端一起构建,从 npm 直接跑的 npx @deepseek-ai/dsh 装不了。 实际安装路径是源码级改动,需要一份 DeepSeek Harness 源码检出。安装前请先读仓库和许可证;插件以当前 dsh 进程的权限运行,安装时可能执行代码。

前置条件(来自 README):

官方 Harness 从源码启动的方式是:

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

皮肤包的安装脚本会检查目标目录的 package.json 是否含 "@deepseek-ai/dsh-root",以及是否存在 packages/client/ui-theme。对不上会直接报错,而不是装出一半。

git clone https://github.com/HeiGeAi/deepseek-harness-skin.git
cd deepseek-harness-skin
bash scripts/install.sh /path/to/deepseek-harness

install.sh 会先把要覆盖的文件整份备份到 ~/.dsh-skin-backups/<时间戳>/,再写入皮肤包、打宿主集成补丁。然后按提示重建:

cd /path/to/deepseek-harness && pnpm install && pnpm run build && pnpm dsh web

浏览器打开 http://127.0.0.1:3080,左下角 设置 → 通用设置 → 皮肤,点一下就换。

想退回原样:

bash scripts/uninstall.sh /path/to/deepseek-harness

卸载脚本从最近一次针对该目标的备份还原 ui-theme 包和补丁涉及的 8 个文件,然后再执行一次 pnpm install && pnpm run build。如果指定的备份里已经含皮肤(例如重复安装后备份的是「装过之后」的状态),脚本会拒绝还原,避免退不干净。

典型用法

装完并重建之后,操作都在设置面板里完成。

  1. 打开 Web UI:http://127.0.0.1:3080
  2. 左下角进入 设置 → 通用设置 → 皮肤
  3. 点色卡切换内置皮肤;第一项永远是「自定义(选图)」
  4. 需要自己的配色时,选一张 PNG / JPG / WebP,其余步骤由本地流程完成
  5. 切回「默认」,data-dsh-skin 属性摘掉,界面回到原生外观

想在 21 套之外再加一套预设,按仓库说明放 JSON 并跑 build:skins 即可。四个色种写清楚,appearancelightdarkchromeflatglassneon 之一。改完务必跑 check:skins,构建期对比度检查不过是过不去的。

仓库 README 还写了一组安装后的测试数字:811 个测试文件、13548 个用例通过,语句 / 分支 / 函数 / 行覆盖率均为 100%,并且带逐文件阈值。这是维护者在 README 中的自述,本文没有独立复跑。

适用场景与注意事项

适合这几类人:已经在用 DSH Web UI、愿意从源码构建、并且希望界面换成自己喜欢的配色或背景。不适合只想用 npx @deepseek-ai/dsh web 立刻换肤、又不想动源码树的人。社区里还有其他主题类项目走运行时插件路线,安装方式不同,不要和这一套混用后还指望互不影响。

使用前建议把下面几条当成硬约束。

这是源码级改动。 安装脚本覆盖 packages/client/ui-theme 并打 8 文件宿主补丁,需要重新 pnpm run build。不是运行时注入,也不劫持进程。基线是 0.1.0-rc.5。DSH 仍在 developer preview,上游改界面结构时补丁可能打不上;脚本会明确报错,而不是装出一半。

插件以当前 dsh 进程权限运行。 目录页也写了同一句话:安装时可能执行代码。安装前应检查源代码仓库和许可证;需要可复现安装时,固定 commit 哈希。

MIT 只覆盖软件代码。 不授权角色、商标或第三方视觉素材。逐文件来源见 ASSET_PROVENANCE.md,发布边界见 NOTICE.md,上游代码许可见 THIRD_PARTY_NOTICES.md。NOTICE 写明:免责声明与非商业用途声明不能替代转载、再分发或商标使用许可;来源或授权无法核实的素材在 provenance 表中标为未验证。公开打包和再分发前应自行评估权利。

自定义图只在本机。 压缩后的 WebP 落在 ~/.dsh/skins/,卸载不动它。

小结

deepseek-harness-skin 把换肤收成两件事:21 套可点选的预设,以及一张图推导整套配色。技术上走的是数据源驱动的色阶推导和构建期对比度校验,作用域收口在 body 属性上,切回原生界面没有残留。代价也很清楚:必须对着 0.1.0-rc.5 的源码检出安装并重建,不能指望 npx 一条命令完成。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/deepseek-harness-skin/

GitHub:https://github.com/HeiGeAi/deepseek-harness-skin

DeepSeek Harness 官方仓库:https://github.com/deepseek-ai/deepseek-harness

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜