dsh-theme-ti: Apply TI6 Skin to DeepSeek Harness Web UI

前言

DSH 的理念是「一切皆插件」,但 Web 界面的外观一直跟着默认主题走:想换配色,通常只能去改前端源码,改完还得跟着上游升级维护一份 fork。dsh-theme-ti 给出了另一种做法——以客户端插件的形式压一层完整的 token 覆盖,不动任何原有文件。正值 Dota 2 The International 赛季,作者把它做成了一套 TI6 主题:深空蓝黑、TI6 红飘带、不朽盾金,主面板再画上矢量翅膀和星空背景。

下面介绍这个插件能做什么、怎么装、怎么按需调整。

这是什么

dsh-theme-ti(包名 @dsh-theme/ti,版本 1.0.0)是 longyu065 维护的一个 DeepSeek Harness Web UI 客户端皮肤插件,MIT 许可证。它做两件事:

1、通过 theme.overrideTokens() 叠加完整的 TI token 覆盖层,替换全部配色;
2、在聊天主面板绘制矢量翅膀 + 星空背景,并附带一个可开关的丝带动画层。

工作原理

dsh Web 的皮肤机制由 @deepseek-ai/dsh-client-ui-theme 提供:浏览器端有一个 ThemeRuntime(服务名 theme),内置 light / dark 两个主题,颜色全部走 --dsw-alias-* / --dsw-specific-* CSS 变量。

这个插件的浏览器半(client.js)在这套机制上做两层覆盖:

1、token 层:用 theme.overrideTokens() 压一层完整覆盖。light 对应「TI Light」浅色变体(冷蓝白 + 深海军蓝文字 + TI6 深红点缀),dark 对应「TI Dark」(深空蓝黑 + 猩红能量)。

2、背景层:注入 <style>,把 wings.svg(矢量翅膀)+ 星空 SVG 双层背景画在聊天滚动区([data-conversation-scroll])上,随 data-ds-dark-theme 切换深浅两套。侧栏、气泡、卡片、输入框保持各自的不透明表面,只有聊天滚动区绘制背景。

一个值得注意的设计细节:插件完全不写主题偏好,所以 ui-theme 服务的异步偏好回读(adopt())不会把皮肤重置掉。

安装与启用

一键安装:

dsh plugin --profile web add longyu065/dsh-theme-ti

也可以手动安装,以 Windows 的 web profile 为例($DSH_HOME 默认是 %USERPROFILE%\.dsh,Linux/macOS 是 ~/.dsh):

1、把包放进目标 profile 的依赖树:

$dest = "$env:DSH_HOME\profiles\node_modules\@dsh-theme\ti"
New-Item -ItemType Directory -Force $dest | Out-Null
Copy-Item "dsh-theme-ti\*" $dest -Recurse -Force   # 或 git clone 后拷贝

2、在 profile 的 cordis.patch.yml(如 $DSH_HOME\profiles\web\cordis.patch.yml)追加:

- insert:
    - id: theme-ti
      name: '@dsh-theme/ti'

3、重启 dsh web。新增 loader 行属于插件集合变化,需要重启进程;之后改 bundle 内容可以走 HMR 热更,刷新页面即可。

启用后无需任何设置:浅色模式就是 TI Light,深色模式就是 TI Dark,默认 system 偏好下即为 TI 皮肤。丝带动画层可在「设置 → TI6 Wings」中开关。

包结构上说明一点:index.js 是 no-op 的 host 半,作用是让 loader 行可激活,client-modules 扫描才会收录本包;真正的皮肤逻辑都在 client.js(构建产物,内联了 wings 的 base64)。浏览器半是自包含的——无 import、无 JSX、无 TS。

卸载

一键卸载:

dsh plugin --profile web remove longyu065/dsh-theme-ti

手动卸载则删除 profiles\node_modules\@dsh-theme\ti 目录和 patch 里的 theme-ti 行,重启 dsh web

换色与换图

想调整配色,改 client.js 里的 TI_TOKENS。token 名以 dsh-client-ui-theme/lib/styles/design-platform.css 为准,每个覆盖值必须是 { light, dark } 字符串对。包里附带的 tokens.md 是 TI 配色与 token 的对照表。

想换翅膀图,步骤如下:

1、把新图放到仓库根目录(wings.svg 优先,否则用 wings.png);
2、按需调整 build.mjs 顶部的 WINGS_OPACITY(淡度,默认 0.4);
3、运行构建和自检:

node build.mjs      # 重新内联 base64 到 client.js
node smoke-test.mjs # 自检

4、把 client.js 同步到 profile 的安装目录,刷新页面生效(HMR)。

适用场景与注意

这个插件适合在用 DSH Web 界面、又想快速换一套完整配色的开发者——尤其是 Dota 2 玩家,或者想参考「如何以插件形式覆盖 dsh Web 主题」的作者:它的 token 覆盖写法、背景注入方式和不写偏好的处理,都是可以直接参考的实现。

安装前有两点提醒:插件会以当前 dsh 进程的权限运行,装第三方插件前建议先过一遍源码;许可证为 MIT,包结构、token 覆盖和构建脚本都是透明的,方便自行审查。

如果你在找一个不改源码就能整体换肤的样板,或者只是想在 TI 赛季给手头的 DSH 界面换换气氛,可以直接试:

  • 目录页:https://www.skillhub.cn/plugins/longyu065/dsh-theme-ti
  • GitHub:https://github.com/longyu065/dsh-theme-ti
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye