给 DeepSeek Harness 换一层冬日玻璃:安洁莉娜明暗主题插件
我想移植的不是一张壁纸,而是一种可以长期停留的界面气候。
源码仓库:https://github.com/bilbillm/deepseek-harness-angelina-themes
插件名称:
dsh-angelina-themes,当前版本:0.1.0

前段时间我在 Codex 里做了一套安洁莉娜主题。真正换到 DeepSeek Harness 时,最省事的办法当然是复制几段颜色,再把背景图挂到 body 上。但这样得到的往往只是一张“有角色壁纸的默认主题”:输入框仍然浮在另一套视觉语言里,菜单像临时贴上去的白纸,打开对话后背景又突然换了位置。
所以我把它做成了一个独立的 DSH 插件。它包含完整的亮色与暗色主题、磨砂玻璃表面、对话页背景、视差层、设置入口和持久化逻辑。安装之后,它和 Light、Dark、System 一样出现在 Harness 的外观选择中,不需要修改宿主源码。
先看实际效果

亮色主题以偏暖的白、雾灰和低饱和红为主;暗色主题则把底色压到深蓝黑,保留冷灰文字和更克制的红色强调。两边不是简单反相:菜单密度、边框亮度、阴影深度和玻璃透明度都有各自的取值。
每套主题都提供 114 个 --dsw-* token。这样做有点笨重,却能让 Harness 的按钮、标签、边框、文字层级和状态色真正属于这套主题,而不是依赖几条优先级越来越高的覆盖规则。
我想移植的其实有三层
第一层是 token。它决定界面的基础语法:什么是主文字,什么是弱化文字,边框应该落在哪里,选中态用多强的颜色。没有这一层,背景再漂亮也只是一张贴纸。
第二层是 叶节点玻璃。Composer、菜单、listbox 和 dialog 会得到各自的半透明表面、边框、内高光与浅层阴影。这里我刻意没有给 AppFrame、侧栏或其它大容器增加 backdrop-filter。祖先节点一旦建立新的包含块,很容易破坏 position: fixed 的弹窗;大面积模糊还会让整页滚动变得昂贵。玻璃只停在真正需要与背景分离的叶节点上,视觉和布局边界才是一致的。
第三层是 背景构图。新建对话和活跃会话共用同一套图片位置,进入对话后不会突然“换一张壁纸”。活跃内容层只增加 3px 的浅模糊和很低的 tint,让文字可读,但不会把文字、按钮和 Composer 本身一起滤糊。
亮色与暗色不是同一套动法
亮色主题使用前景与背景两层视差:远景轻微向一个方向移动,前景以稍大的幅度反向移动。暗色主题的画面已经有明确的纵深,因此只保留一层极低幅度的位移。两者都只移动装饰图层,标题、选择器、输入框和正文始终停在原位。
这套视差也不是常驻特效。系统开启 prefers-reduced-motion、使用触摸输入、窗口宽度不超过 900px、页面失焦或标签页被隐藏时,插件都会停用或复位视差。主题首先要能读,其次才是会动。

窄屏截图里可以看到,主题会保留颜色、边框和玻璃层次,但主动放弃鼠标视差。降级以后不是另一套残缺界面,只是少了一层不适合当前设备的装饰。
为什么主题选择保存在浏览器里
插件在 General 设置页增加了一行“安洁莉娜主题”,并把选择写入浏览器本地键:
dsh-angelina-themes.selection
这样做不是为了绕开宿主,而是因为当前 Harness 的设置 API 对 namespace 有固定 allowlist,第三方 Host namespace 不会自动暴露给浏览器。选择内置的 Light、Dark 或 System 时,插件会把自己的键恢复为 system,不会覆盖 Harness 的原设置。
如果使用的 Harness fork 已经内置了同名主题,插件会先读取现有主题列表,只补注册缺失项;已经存在的主题与视差层会直接复用。这样既不会撞上重复 id,也不会在卸载插件时删掉 fork 自己拥有的内容。
安装
需要 DeepSeek Harness Web profile 和 Node.js 20+。仓库已经提交构建后的 lib/,通过 GitHub 安装时不需要在本机重新编译:
dsh plugin --profile web add github:bilbillm/deepseek-harness-angelina-themes
重启或重新加载 Web profile 后,在设置的 General 页面选择“安洁莉娜亮色”或“安洁莉娜暗色”。移除插件:
dsh plugin --profile web remove dsh-angelina-themes
如果要从源码验证完整流程:
pnpm install
pnpm generate-assets
pnpm typecheck
pnpm build
pnpm test
pnpm smoke
构建会从 src/assets/ 与 src/themes.json 生成可审计的客户端资源和主题定义,而不是把图片或 token 隐藏在手工改过的 bundle 里。
写在最后
做主题最容易上瘾的地方,是不断添加:再多一层模糊,再多一点视差,再让每个浮层都发光。真正花时间的反而是决定哪里应该停下来。
这次我给自己的边界是:宿主布局不动,内容不跟着背景漂移,触摸和窄屏不强行动画,固定弹窗不交给祖先滤镜,系统的减弱动效偏好始终优先。最后留下的东西并不喧闹,但它能让一张背景图、两套主题 token 和每天都会打开的工具界面住在同一个空间里。
代码与主题元数据以 MIT 许可证发布。安洁莉娜及相关原作、美术与商标权利归各自权利人所有;这是非官方同人定制,不代表 DeepSeek、OpenAI、鹰角网络、悠星或《明日方舟》。素材来源与归因见仓库中的 ASSET-PROVENANCE.md 和 THIRD-PARTY-NOTICES.md。
- 标题: 给 DeepSeek Harness 换一层冬日玻璃:安洁莉娜明暗主题插件
- 作者: 路灯下的陌生人
- 创建于: 2026-08-15 18:00:00
- 更新于: 2026-08-15 18:00:00
- 链接: https://blog.lumoren.cn/2026/08/15/dsh-angelina-themes/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。