用 deepseek-harness-skin 給 DeepSeek Harness 換膚

前言

DeepSeek 在 2026 年 8 月開源了智能體運行時 DeepSeek Harness(dsh)。官方倉庫的定位很明確:一切皆插件。模型適配、工具、會話、沙箱,連網頁界面本身,都按插件來組裝。當前仍是 developer preview,默認 Web UI 跑在 http://127.0.0.1:3080

跑起來之後,不少人會碰到同一件事:側欄、輸入框、會話列表都能用,界面卻是固定的原生配色。想換成自己熟悉的風格,就得在社區裏找主題類擴展。本文介紹的 deepseek-harness-skin,就是其中一套換膚系統:21 套內置皮膚,外加「傳一張圖生成整套配色」的自定義通道。

需要先說明來源。插件由 HeiGeAi 維護,倉庫地址是 HeiGeAi/deepseek-harness-skin。社區目錄頁在 deepseek-harness-plugin.com,分類爲「主題與外觀」,2026-08-15 收錄。該目錄是獨立運營的社區站點,與 DeepSeek / 幻方沒有從屬或背書關係,不能當成官方應用商店。截至 2026-08-17,GitHub 倉庫星標爲 42(目錄頁當時列出 32,以倉庫頁面爲準)。

這是什麼

deepseek-harness-skin 是一套裝進 DeepSeek Harness 源碼樹的換膚系統,不是運行時往進程裏注入 CSS 的那種插件。倉庫 README 寫得很直接:它覆蓋 packages/client/ui-theme,再打一份 8 個文件的宿主補丁,然後重新 pnpm run build。側欄、輸入框、會話列表仍是 DSH 原生控件,功能沒有改,改的是配色、邊框風格和背景層。

代碼使用 MIT 許可證,版權聲明爲 Copyright (c) 2026 HeiGeAi (Blake Xu)。主要語言是 TypeScript。基線宿主版本是 DeepSeek Harness 0.1.0-rc.5。倉庫明確聲明:本項目與 DeepSeek 官方無隸屬關係。

它要解決的問題也很具體。DSH 原生色板有 73 級絕對色階和 89 個語義別名,如果只是把幾個 CSS 變量換掉,按鈕、邊框、禁用態的層次很容易塌。這套系統從四個色種推導完整色階,並在構建期校驗對比度,目標是換膚之後文字仍然讀得清。

核心功能

倉庫 README 與 CHANGELOG(v1.0.0,2026-08-14)對能力的描述一致,下面按已經覈實的內容分點說明。

21 套內置皮膚

設置面板裏可以直接點選。QQ 2007 和 QQ 2008·粉是純配色皮膚,不帶位圖,整套界面由四個色種在構建期推導。其餘 19 套各配一張背景圖。邊框風格分三種:flat(實色描邊)、glass(毛玻璃)、neon(發光描邊)。

# 皮膚 外觀 邊框
1 QQ 2007 淺色 flat
2 QQ 2008 · 粉 淺色 glass
3 初音未來 淺色 neon
4 原神 · 蒙德 淺色 glass
5 原神 · 璃月夜 深色 neon
6 戀與深空 · 星海 淺色 glass
7 戀與深空 · 星際 深色 neon
8 火影 · 鳴人 深色 glass
9 火影 · 佐助 深色 neon
10 鳴潮 · 黑青 深色 neon
11 鳴潮 · 深紫 深色 glass
12 龍珠 · 筋斗雲 淺色 glass
13 龍珠 · 超賽 淺色 neon
14 大佬 · 菸灰 深色 glass
15 DeepSeek 娘 · 深海 深色 neon
16 DeepSeek 娘 · Q 版 淺色 glass
17 DeepSeek 青春版 淺色 glass
18 內測大佬 深色 neon
19 別影響 AGI 淺色 glass
20 峯哥騎鯨 淺色 flat
21 梁聖 · 靜音 淺色 glass

皮膚名稱裏出現的角色、遊戲和商標歸各自權利人所有。倉庫 NOTICE.md 寫明:提及這些名稱只用於描述現有預設,不表示獲得許可。這一點在文末還會再強調一次。

一套皮膚就是一份 JSON

下面這段來自倉庫 README,是 QQ 2008 的完整定義:

{
  "id": "qq-2008",
  "name": { "zh": "QQ 2008·粉", "en": "QQ 2008 Pink" },
  "order": 20,
  "appearance": "light",
  "chrome": "glass",
  "seeds": {
    "accent": "#c8447e",
    "secondary": "#d98bb0",
    "surface": "#f6e2ec",
    "text": "#2b1020"
  },
  "glyph": "🐧",
  "showBadge": true
}

四個色種是 accentsecondarysurfacetext。構建期據此生成 CSS,運行期只切換一個 data-dsh-skin 屬性。自己加皮膚時,往 src/styles/skins/themes/ 放一份 JSON,再跑:

pnpm --filter @deepseek-ai/dsh-client-ui-theme run build:skins

保對比度推導,構建期校驗可讀性

推導不是簡單換色。程序會保持每一級與原生色板相同的對比度關係,計算在 OKLab 空間進行,落到 sRGB 色域外的顏色用色度二分法拉回來。所有規則掛在 body[data-dsh-skin="…"]body[data-skin-chrome="<flat|glass|neon>"] 下面,不改全局 CSS 變量。切回「默認」時屬性摘掉,界面回到原生外觀。

可讀性檢查是確定性的:21 套皮膚 × 8 項對比度契約,構建期全部跑一遍,不達標直接失敗。自己改完 JSON 可以用這條命令復現:

pnpm --filter @deepseek-ai/dsh-client-ui-theme run check:skins

背景圖掛在獨立的固定層上,不跟着會話容器縮放。開會話、滾長對話、開合側欄,背景都待在原地。CHANGELOG 裏專門記過一筆:早期背景會在開啓對話時被強制放大,後來把背景層從內容容器裏挪了出來。

一張圖生成自定義皮膚

皮膚選擇器的第一項是「自定義(選圖)」,支持 PNG、JPG 或 WebP。倉庫描述的流程是:

  1. 瀏覽器本地解碼一次,按 96px 採樣取色,同時按 1920px 長邊重編碼成 WebP。
  2. 從圖裏提取主色、副色、底色、文字色,並判斷淺色還是深色。
  3. 按畫面明暗自動調蒙版濃度,保證文字可讀。
  4. 圖片按內容哈希存進 ~/.dsh/skins/,Host 提供只讀靜態路由給前端取用。同一張圖重複選只存一份。

README 強調:原圖不出本機。上傳走的是同一臺機器上的 DSH Host。上傳路由只認 WebP 魔數,超過 4MB 的請求會被直接掐斷。卸載腳本不會刪除 ~/.dsh/skins/ 裏的自定義圖,不用可以自己刪。

版本條和檢查更新

設置面板底部顯示「皮膚系統 v1.0.0 · DSH 0.1.0-rc.5」,旁邊有「檢查更新」。請求由 DSH Host 側代理發往 GitHub Releases,瀏覽器不直連第三方;3 秒超時、64KB 響應上限、60 秒內緩存。網絡不通時顯示「暫時無法檢查」,按鈕保持可點。

安裝與啓用

社區目錄頁給出的安裝命令是:

dsh plugin add github:HeiGeAi/deepseek-harness-skin

如需可復現安裝,目錄頁建議固定 commit 哈希:

dsh plugin add github:HeiGeAi/deepseek-harness-skin#<commit>

這條命令是目錄頁原文,按社區目錄的慣例,會從 GitHub 解析插件並裝到當前 dsh 配置。但本倉庫 README 寫明:這套皮膚要跟着前端一起構建,從 npm 直接跑的 npx @deepseek-ai/dsh 裝不了。 實際安裝路徑是源碼級改動,需要一份 DeepSeek Harness 源碼檢出。安裝前請先讀倉庫和許可證;插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。

前置條件(來自 README):

官方 Harness 從源碼啓動的方式是:

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

皮膚包的安裝腳本會檢查目標目錄的 package.json 是否含 "@deepseek-ai/dsh-root",以及是否存在 packages/client/ui-theme。對不上會直接報錯,而不是裝出一半。

git clone https://github.com/HeiGeAi/deepseek-harness-skin.git
cd deepseek-harness-skin
bash scripts/install.sh /path/to/deepseek-harness

install.sh 會先把要覆蓋的文件整份備份到 ~/.dsh-skin-backups/<時間戳>/,再寫入皮膚包、打宿主集成補丁。然後按提示重建:

cd /path/to/deepseek-harness && pnpm install && pnpm run build && pnpm dsh web

瀏覽器打開 http://127.0.0.1:3080,左下角 設置 → 通用設置 → 皮膚,點一下就換。

想退回原樣:

bash scripts/uninstall.sh /path/to/deepseek-harness

卸載腳本從最近一次針對該目標的備份還原 ui-theme 包和補丁涉及的 8 個文件,然後再執行一次 pnpm install && pnpm run build。如果指定的備份裏已經含皮膚(例如重複安裝後備份的是「裝過之後」的狀態),腳本會拒絕還原,避免退不乾淨。

典型用法

裝完並重建之後,操作都在設置面板裏完成。

  1. 打開 Web UI:http://127.0.0.1:3080
  2. 左下角進入 設置 → 通用設置 → 皮膚
  3. 點色卡切換內置皮膚;第一項永遠是「自定義(選圖)」
  4. 需要自己的配色時,選一張 PNG / JPG / WebP,其餘步驟由本地流程完成
  5. 切回「默認」,data-dsh-skin 屬性摘掉,界面回到原生外觀

想在 21 套之外再加一套預設,按倉庫說明放 JSON 並跑 build:skins 即可。四個色種寫清楚,appearancelightdarkchromeflatglassneon 之一。改完務必跑 check:skins,構建期對比度檢查不過是過不去的。

倉庫 README 還寫了一組安裝後的測試數字:811 個測試文件、13548 個用例通過,語句 / 分支 / 函數 / 行覆蓋率均爲 100%,並且帶逐文件閾值。這是維護者在 README 中的自述,本文沒有獨立復跑。

適用場景與注意事項

適合這幾類人:已經在用 DSH Web UI、願意從源碼構建、並且希望界面換成自己喜歡的配色或背景。不適合只想用 npx @deepseek-ai/dsh web 立刻換膚、又不想動源碼樹的人。社區裏還有其他主題類項目走運行時插件路線,安裝方式不同,不要和這一套混用後還指望互不影響。

使用前建議把下面幾條當成硬約束。

這是源碼級改動。 安裝腳本覆蓋 packages/client/ui-theme 並打 8 文件宿主補丁,需要重新 pnpm run build。不是運行時注入,也不劫持進程。基線是 0.1.0-rc.5。DSH 仍在 developer preview,上游改界面結構時補丁可能打不上;腳本會明確報錯,而不是裝出一半。

插件以當前 dsh 進程權限運行。 目錄頁也寫了同一句話:安裝時可能執行代碼。安裝前應檢查源代碼倉庫和許可證;需要可復現安裝時,固定 commit 哈希。

MIT 只覆蓋軟件代碼。 不授權角色、商標或第三方視覺素材。逐文件來源見 ASSET_PROVENANCE.md,發佈邊界見 NOTICE.md,上游代碼許可見 THIRD_PARTY_NOTICES.md。NOTICE 寫明:免責聲明與非商業用途聲明不能替代轉載、再分發或商標使用許可;來源或授權無法覈實的素材在 provenance 表中標爲未驗證。公開打包和再分發前應自行評估權利。

自定義圖只在本機。 壓縮後的 WebP 落在 ~/.dsh/skins/,卸載不動它。

小結

deepseek-harness-skin 把換膚收成兩件事:21 套可點選的預設,以及一張圖推導整套配色。技術上走的是數據源驅動的色階推導和構建期對比度校驗,作用域收口在 body 屬性上,切回原生界面沒有殘留。代價也很清楚:必須對着 0.1.0-rc.5 的源碼檢出安裝並重建,不能指望 npx 一條命令完成。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/deepseek-harness-skin/

GitHub:https://github.com/HeiGeAi/deepseek-harness-skin

DeepSeek Harness 官方倉庫:https://github.com/deepseek-ai/deepseek-harness

羽毛球分组比赛记分
小程序二维码

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

小夜