dsh-theme-ti:給 DeepSeek Harness Web UI 換一套 TI6 皮膚

前言

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
羽毛球分组比赛记分
小程序二维码

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

小夜