🎨 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。
设计文档见 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.yaml 的 skin-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:…"装的是硬链接副本,改源码不生效 —— 请把 profilenode_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 —— 皮肤自由,人人有责 ✌️