dsh-deepseek-style-theme
为 dsh web GUI 复刻 DeepSeek 官网风格的主题皮肤:流体粒子背景、玻璃拟态侧边栏与输入框、运行中子代理面板与 DSTT 高峰时段配色。
安装
dsh plugin --profile web add dsh-deepseek-style-theme
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
DeepSeek Style Theme
为 DeepSeek Harness 复刻 DeepSeek 官网视觉的主题皮肤插件 —— 桌面应用与 dsh web 通用(两端加载的是同一份 lib/client.js,差别只在宿主应用与 profile 的管理方式,见「安装」一节)。
鸣谢
本插件的两块核心视觉——流体背景与玻璃质感——都不是从零写出来的,它们分别来自下面两个上游项目。没有它们,这个主题不会有现在这个样子:
上游 · 作者 · 本插件用到了什么
dsh-theme-mineradio · @dhicoc · 流体背景的三段 GLSL 着色器(顶点 / 流场 / 显示)是上游的副本(唯一改动见 2.0.74:mediump→highp,为了让 Intel 核显不再把噪声画成方块);四分之一分辨率流场 + 双 framebuffer 乒乓的求解器结构、玻璃色散折射滤镜、光标视差、对话框悬停倾斜同样移植自上游
deepseek-harness-background · @HaoyueQin · 液态玻璃配方的技法来源(半透明填充 + 竖向光泽 + 背板滤镜链的设计思路),本插件按自己的选择器与 --dshome-glass-* 变量重新表达,未复制源码
两个项目均为 MIT 许可;完整许可原文见 [THIRD-PARTY-NOTICES.md](./THIRD-PARTY-NOTICES.md),随包发布,再分发时必须保留。详细的移植范围与改写点见下文「[第三方代码与署名](#第三方代码与署名)」。
特性
- 流体流动背景(1.42.0+):全屏 WebGL2 双通道流体模拟——四分之一分辨率的流场(衰减 + 带速度的指针笔刷,两个 framebuffer 乒乓)被全分辨率的域扭曲噪声渲染器采样,带旋流迭代与三色柔性混合;按钮悬停会轻推流场、点击则荡开涟漪。配色跟随 DSTT 三色令牌(峰谷红 / 谷时蓝 / 常态绿)实时重新着色,无需重挂。无 WebGL2 时自动回落到原来的粒子背景(粒子实现完整保留)。流场自 2.0.81 起优先存储在
RGBA16F里(探测EXT_color_buffer_float+ 4×4 探针确认 FBO complete,否则诚实退回RGBA8)——8 位存储会把每帧衰减舍入到 1/255,弱值卡住、场里长出平台,域扭曲把平台画成"飘动的方块"(实测:同样 240 步,RGBA8 的场均值 0.0172 挤在 13 个台阶上,RGBA16F 正常衰减到 0.00002);页面可直接读window.__dshomeFluidFormat确认这台机器拿到的是哪种场 - 液态玻璃(1.42.0+,1.43.0 起分两套配方):一套「湿玻璃」配方——半透明填充 + 顶部最亮、约 38% 处消失的竖向光泽渐变 + 统一的
blur() saturate() brightness() contrast()背板链 + 内嵌顶部高光与发丝描边,悬停只提亮填充;所有旋钮都是--dshome-glass-*变量。1.43.0 新增液态 / 白磨砂二选一(见下文 DSTT 设置):液态更通透、折射更强、边框带自走高光;白磨砂就是上面这套。折射(SVGfeDisplacementMap)只加在四个区域上(侧边栏 / 对话框 / 标题栏悬停态 / 用户气泡):它仅 Chromium 支持,且每个元素一次滤镜采样 - 鼠标跟随的对话窗光斑(1.42.0+):光标在对话窗(消息区与输入框)上移动时,窗口上有一团跟随鼠标的柔光;它用
background-attachment: fixed锚在视口上,所以滚动不会把光斑一起拖走,也不需要覆盖层元素。悬停玻璃面时另有一层随光标偏移的高光(--dshome-spec-x/y) - 玻璃拟态:侧边栏、会话卡片、输入框半透明填充 + 毛玻璃
- 明暗双主题:深色通过
body[data-ds-dark-theme]切换 - 品牌细节:胶囊按钮、渐变主按钮、圆角卡片
- 标题栏:默认透明,悬停变毛玻璃;栏内按钮统一为真圆角(覆盖产品全局 corner-shape:superellipse 造成的方角观感),会话标题小胶囊化
- 悬停动画:中/E、「打开方式」、「对话 / 轨迹」标签悬停时上浮 + 品牌色辉光;中/E 短标签「中/E」平滑展开为「中文/EN」(max-width 过渡,非 display 硬切);「打开方式」展开菜单时箭头翻转,切换标签时选中项弹出
- DeepSeek 品牌链接:点击侧边栏 DeepSeek 标识跳转
https://www.deepseek.com/ - 轨迹视图:「对话 / 轨迹」标签在标题栏悬停(
.dshome-swap)或轨迹视图存在时显示,不是常驻——会话视图下实测[class*="wSkVaW_tabs"]默认display:none(2.0.84 按实机报告 B4 勘误) - 运行中子代理面板:有子代理启动时,右下角浮出玻璃面板,实时列出正在运行的子代理——名称、已运行时长、token 用量与流动进度条;点击条目直接跳转到该子代理会话,可折叠收起
- 跨平台:交付文件菜单里的「打开所在文件夹 / 在文件管理器中显示」由官方通路执行(
session.openWorkspacePath),各平台调用系统文件管理器;本插件不再自己开文件管理器 - 模型目录同步:已交还官方(2.1.90 起)。官方自带模型目录(
ui-model-selection+modelCatalog),"选择器里有哪些模型"以官方为准;本插件不再介入,也不再写llm-deepseek.models。 - 交付文件菜单(1.41.0+,1.41.2 起覆盖两处):回复末尾的「本轮文件改动」条目左键点击即弹出玻璃拟态操作菜单,交付文件卡片右键弹出同一菜单——用默认应用打开 / 打开所在文件夹 / 复制路径 / 打开预览(卡片上显示为「在侧边栏预览」);产品自己的下拉菜单里也补上它唯一缺的「复制路径」。产品原本的左键动作被保留成菜单项,不会被丢掉
- 时段提示(DSTT):主题模式四选一——峰谷红蓝(高峰鲜红、谷时段蓝)/ 峰谷红绿(高峰鲜红、谷时段绿)/ 常态绿 / 常态蓝;高峰窗口北京时间 9:00–12:00、14:00–18:00(周六周日全天非高峰),高峰色为鲜红
#F5222D
DSTT(DeepSeekStyleTheme)设置
设置页新增 DSTT 选项卡,提供一行四选「主题模式」(deepseek-style-theme 段的 mode 字段,持久化到 settings.yaml):
- 峰谷红蓝(默认):高峰 = 鲜红(提示),谷时段 = 蓝色;
- 峰谷红绿:高峰 = 鲜红(提示),谷时段 = 绿色;
- 常态绿:始终绿色,无高峰区分;
- 常态蓝:始终蓝色,无高峰区分。
语义锚点版(2.1.0+,面向 dsh 0.2.x 官方桌面版)
产品每次构建都会重排 CSS Module 哈希(0.1.7 的 .wSkVaW_ → 0.2.0 的 .Dc7zOa_),
任何写死类名的补丁都会在更新后静默失效。2.1.0 起主线只依赖产品语义钩子,不再写死哈希:
保留(语义) · 依据
输入卡玻璃化 · [data-composer-stats] / [data-composer-card]
浮层菜单液态玻璃 · [data-menu-material]
交付文件卡片 / 文件改动行 · [data-presented-file] / [data-presented-files-row]
文件弹窗(打开文件/复制路径/打开文件夹) · button[data-ref-chip] / [data-presented-*]
用户气泡 · [data-chat-flow-kind="user"]
首屏标题 / 预览角标 · [class="_headline"] / [class="_previewBadge"]
同时把 installGuarded 从「挂载时查一次」升级为 MutationObserver:懒挂载的面板与
晚出现的行也能等到样式,不再有「刷新一下才生效」这一类问题。
这一版的取舍(明确不做)
下列面在 0.2.0 里没有语义钩子,只有每次构建都会变的类哈希,因此不再覆盖:
- 侧栏外壳的玻璃与折射、应用外框、标题栏悬停胶囊与中/EN 切换定位、光标高光跟随、
会话行/项目行样式、settings 与子代理面板的内部样式。
代价是视觉上少两块(侧栏、外框),换来的是一条规则:产品更新不需要改主题。
2.0.90 那套写死哈希的实现留在 git 历史里,需要时用
git show 193d691:lib/client.js > lib/client.js 取回——不要把哈希版当回退方案:
它的锚点(.wSkVaW_、.hHd-Xa_、.YDXeBa_*…)在当前 0.2.0 产品里全部 0 命中,
拿回来同样是没有样式的(实测)。
另有几行开关与选项:
- 背景方式(
backgroundMode,默认classic;2.0.73+):一行四选,切换即时生效、不用刷新页面。 - ① 主色+纯白+近白(
classic,默认;2.0.90 起):1.43.11 那套(软主色 + 纯白 + 近白),按钮与背景同一色系、没有第二种色相。2.0.83 曾把默认改成bold,2.0.90 按用户要求改回——默认就是这套「主色 + 纯白 + 近白」; - ② 主色+纯白(
white):同一软主色 + 纯白。着色器三个 uniform 里第三个复用白色(深色复用该族的近黑),所以只有两个颜色参与; - ③ 自选背景(
custom;2.0.76 起的分工见「[插件商城适配](#插件商城适配与壁纸--侧栏插件共存)」):我们这层完全不画——流体/粒子画布整体卸载,主题自己的 per-colour 底色也按选择器让位(带:not([data-dshome-bg=custom]),不是拿!important对打),深色蒙版只用在你自己填的图片上。背景到底是谁的:装了dsh-plugin-wallpaper-engine且它正在渲染时连纯白都不画,背景交给它;没有它时是纯白(浅色)/ 纯黑(深色)。颜色(蓝/绿/红)只驱动按钮与品牌 token,不参与背景。想放自己的图就填图片 URL / 任意 CSS 背景值,或点「桌面壁纸」(写入desktop,由宿主端读本机壁纸,见隐私一节);不合法的值不会白屏; - 浓三色(
bold):1.43.12 的三浓色,保留可选(用户要求先留着)。 - 动态背景(流体)(
ambientBackground,默认开;2.0.75+):关掉后不挂载 WebGL2 流体,也不回落到粒子——不是把它藏起来(藏起来的画布照样在算),而是根本不创建,GPU 占用归零,背景只剩静态配色。集成显卡把流体画成方块、或风扇被它拉满时,关这个。 - 流体跟随笔刷(
fluidBrush,默认关):开启后光标才把速度写进流场、拖出尾迹;改完刷新页面生效。 - 玻璃风格(
glassStyle,默认液态): - 液态(1.43.0+):Apple Liquid Glass 方向——填充降到
rgb(255 255 255 / .14)、顶部光泽降到.07,背板链改为靠saturate(1.75)让身后颜色发亮,共用的feDisplacementMap走更大的 scale(104,白磨砂仍是 60),边框上再跑一圈自走的conic-gradient高光(@property注册的<angle>,与鼠标无关)。上玻璃的有四处面板:侧边栏外壳 / 对话框 / 标题栏(悬停)/ 用户消息气泡;另有第五处浮层见下一条; - 浮层菜单也上玻璃(2.0.90+):产品把下拉菜单 portal 到所有玻璃面板之外,菜单自带的材质又铺了一层不透明的
rgba(248,249,250,.58),所以液态会话里菜单是唯一一片不透光的白(代理预设 / 模型 / 权限 / 会话行菜单都算)。这些菜单由MENU_GLASS_CSS单独接管,锚在产品自己的材质钩子[data-menu-material]上——只加玻璃身份,不重画材质:外圈是主题的 `
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:23,最后更新 2026-11-04