dsh-skin
August 13, 2026 · View on GitHub
一个遵循 deepseek-harness 插件规范的可发布皮肤插件:内置多种可切换皮肤(明暗成对的颜色 token 覆盖 + 自托管背景图 + 可选字体),设置页提供卡片式皮肤选择行,选择持久化到 settings 文档、刷新/重启自动恢复。
皮肤预览
| Coding | 星夜 |
|---|---|
![]() | ![]() |
| 像素 | 卡哇伊 |
|---|---|
![]() | ![]() |

特性
- 5 款皮肤:Coding / 海洋 / 星夜 / 像素 / 卡哇伊,每款都带明暗两套视觉,保留现有 light/dark/system 开关。
- 完整语义覆盖:皮肤展开器把每个主题映射到 dsh 全部语义 token——应用框架、设置模态、消息气泡、代码块/语法高亮、发送框、侧栏、菜单弹层、滚动条,无一遗漏。
- 自托管资产:背景图与字体文件经宿主半
/skin-assets路由服务(带路径穿越防护),包内即可、无需外部 CDN。 - 可选字体:星夜用马善政楷书、像素用缝合像素、卡哇伊用站酷庆科黄油体(均为 OFL 开源协议,自托管)。
- 持久化:选择经
/skin-state路由写入 settings 文档(dsh-skin.skin),刷新/重启恢复;宿主只存字符串、由浏览器校验 id,加新皮肤无需重启宿主。
皮肤列表
| 皮肤 | 风格 | 背景 | 字体 |
|---|---|---|---|
| Coding | 深色编辑器(白字) | coding.png 照片 | 系统 |
| 海洋 | 半透明海蓝 | SVG 海浪 | 系统 |
| 星夜 | 星空紫 | SVG 星空 | 马善政楷书 |
| 像素 | Game Boy 荧光绿、直角平面 | SVG 像素画 | 缝合像素 Fusion Pixel |
| 卡哇伊 | 粉色小清新 | kwy.png 照片 | 站酷庆科黄油体 |
安装与挂载
- 构建:
pnpm install && pnpm run build(tsc + tsdown,产出lib/client.js)。 - 装进 profile:
dsh plugin --profile web add <path-to-this-package>(或 npm 发布后dsh plugin --profile web add @goodpostidea-tech/dsh-skin)。 - 挂载行:用
--patch引用本仓库的dsh-skin.patch.yml,或把该行并入你自己的 patch:
- insert:
- id: skin
name: '@goodpostidea-tech/dsh-skin'
- 启动:
dsh --profile web --patch dsh-skin.patch.yml,打开 设置 → 通用 → 皮肤,选择任意皮肤。
皮肤机制
- 颜色:每个皮肤定义明暗成对的
--dsw-alias-*/--dsw-specific-*token 覆盖,经ctx.theme.overrideTokens应用(body 内联变量层,随现有明暗开关自动切换)。 - 背景图:包内 SVG/图片资产由宿主半
/skin-assets路由服务;皮肤把bg-base覆盖为透明、面板层保持不透明度,照片/插画透出且文字可读。 - 额外 CSS(可选字段):皮肤激活时注入
<style>(字体@font-face、--dsw-font-family全站覆盖、直角/去阴影等风格化)。 - 持久化:选择经宿主半
/skin-state路由读写(GET/PUT),落在 settings 文档的dsh-skin.skin字段;重启恢复。浏览器设置 RPC 对第三方命名空间不暴露(apiproxy allowlist 硬编码),故走自建路由。
开发
pnpm install # 官方 registry(项目 .npmrc 已固定)
pnpm run build # tsc + tsdown → lib/index.js + lib/client.js
pnpm run watch # tsdown --watch
新增一个皮肤:在 src/skins.ts 里加一条 SkinDefinition(填一个 SurfaceSet 调色板即可自动展开成完整 token 集),并把它加进 SKIN_IDS。字体/图片放进 assets/,由 /skin-assets 路由自动服务。
已知限制与后续
- 皮肤 id 集合在编译期固定(
src/skins.ts);暂无运行时加载外部皮肤定义。 - 宿主与浏览器错位时,旧宿主也能持久化任意 id(浏览器端校验),但视觉上只会应用浏览器认识的皮肤。
- 背景照片(
coding.png/kwy.png)体积较大,后续可考虑压缩或换用 WebP。
License
MIT



