🎨 dsh-skin-pack

August 19, 2026 · View on GitHub

你的 DeepSeek Harness,你说了算。

5 套主题 × 双模式 × 壁纸 × 分区背景 × 动效 —— 把 AI 编程工具调成你的审美,比 IDE 皮肤还自由。 极光 · 琥珀 · 墨玉 · QQ 2008 经典回忆杀 🐧 · 赛博朋克霓虹夜城 🌃 —— 谁的青春回来了?

千篇一律的浅色深色太无聊?让 DSH 好看得不像一个开发工具 ✨ 喜欢的话点个 ⭐ Star,让更多开发者看到 —— DeepSeek 也能这么潮!

DeepSeek Harness Web(dsh web)的皮肤插件:5 套主题家族 × 浅/深双模式 + 强调色自定义 + 壁纸背景层 + 对话列表/对话页面独立背景 + 动效,全部走官方 --dsw-* 设计 token 与 ctx.theme 机制,不 hack 框架 DOM。

dsh-skin-pack 预览

设计文档见 docs/DESIGN.md(原始设计);最终实施方案见 docs/PLAN.md;源码级审核结论见 docs/REVIEW.md;视觉验证见 docs/visual/(QQ2008 / Cyberpunk)。

功能

能力说明
🎨 主题家族极光 / 琥珀 / 墨玉 / QQ 2008(经典蓝白回忆杀)/ 赛博朋克(霓虹夜城),每套浅色、深色双模式,89 个语义 token 全覆盖(overrideTokens 三层覆盖:家族 / 强调色 / 壁纸)
🌗 配色模式浅色 / 深色 / 跟随系统,与内置「外观」面板一致;任一侧切换都双向同步(theme/change 分叉闭环),重启互不覆盖
🖌 强调色8 个预设(含家族默认)+ 自定义取色器,暗色自动提亮保可读;非法值(脏 hex)一律回落家族默认
🖼 壁纸图片链接 / 本地上传 / 无;铺满·适应·拉伸;透出强度 0~90%;雾色(自动/浅色/深色/无, 取当前家族底色); 或透出强度 0 时移除覆盖层与 DOM 层
🗂 区域背景对话列表背景(侧边栏)与对话页面背景(中心区)可单独设置:无 / 纯色(预设 + 自定义取色)/ 图片链接 / 本地上传;图片带遮罩强度滑杆(0~90%,保文字可读);区域背景优先于全局壁纸(设了区域背景的区域不再透出全局壁纸)
⚡ 动效动效总开关:壁纸缓动(Ken Burns)+ 主题/深浅切换平滑过渡;霓虹氛围(品红/青色光斑漂移 + 扫描线)仅赛博朋克家族生效
💾 持久化即点即存,重启自动恢复($DSH_HOME/settings.yamlskin-pack 分节);壁纸文件落 $DSH_HOME/skin-pack/wallpapers/
⚡ 无闪白重启后首帧即皮肤(Host tapIndex 注入 __DSH_SKIN_BOOT__,浏览器半同步应用)
🔁 失败可见保存失败 → 界面显示错误并真实回滚到服务端值(GET 取真值;路由不可用时回退本地快照);上传失败 → 提示「上传失败」且不改动当前壁纸
🛡 上传安全扩展名白名单 + 魔数校验(png/jpeg/webp/gif 头字节,不信任客户端 MIME)+ 10MB 上限 + 文件 id 白名单防路径穿越 + 响应 nosniff
🌐 本地化设置面板中文 / English 双语(ctx.locale.register('settings.skin')

安装

# 1. 构建(零依赖,Node 内置即可;或直接用已提交的 dist/client.js)
npm run build

# 2. 安装进 web profile(按实际包名/路径替换)
dsh plugin --profile web add "file:/绝对路径/dsh-skin-pack"

# 3. 重启
dsh web

打开 设置 → 通用 → 皮肤 使用。因为包声明了 dsh.bundle.patch,安装后自动加入 profile 组合层,无需手改任何配置文件

卸载:dsh plugin --profile web remove dsh-skin-pack(壁纸文件保留在 $DSH_HOME/skin-pack/,可手动清理)。

开发

npm run build          # 构建 dist/client.js
npm run watch          # 监听 src 自动重建
npm run verify         # 构建 + 冒烟 + 离线验证(tests/verify.mjs)

开发期提示:dsh plugin add "file:…" 装的是硬链接副本,改源码不生效 —— 请把 profile node_modules/dsh-skin-pack 换成目录联接(junction)直连本仓库,配合 npm run watch 热更。

离线验证的「Host 纯函数」段需要 @deepseek-ai/dsh-settings@deepseek-ai/schemastery(rc.7)可解析;在 profile 内运行或软链其 node_modules 后即为全量验证,否则该段自动跳过。

目录结构

src/
├── host.js               # Host 半:settings 注册 / /skin-pack/* 路由 / tapIndex 预置引导
├── client.js             # 浏览器半:三层覆盖应用 / 壁纸 DOM / 设置 UI / 失败回滚
├── themes/palettes.js    # 家族原语 → 角色派生 → 89 token 映射 → 三层构建器
└── shared/               # constants(双端契约)/ color / settings(Host schema+净化)/ contract(Host HTTP 契约)
scripts/build-client.mjs  # 零依赖迷你打包器(内联本地模块 → __ModuleLoader__ 工厂)
tests/verify.mjs          # 离线验证(调色板 / Host 纯函数 / 客户端 apply 垫片)
dist/client.js            # 构建产物(已提交,与 src 保持同步)
docs/                     # DESIGN(原始设计)/ PLAN(最终方案)/ REVIEW(审核结论)

License

MIT


🌟 喜欢这个插件?

  • 点个 Star ⭐ —— 你的支持就是作者熬夜改色值的动力 😤
  • 告诉朋友:「DeepSeek Harness 也能换皮肤,还能给对话区单独换背景!」
  • 有新点子(新主题家族?动态壁纸轮换?配色方案导出分享?)欢迎开 Issue / PR —— 皮肤自由,人人有责 ✌️