前言¶
DeepSeek Harness(DSH)的 Web 殼層自帶 light / dark / system 三套外觀,但第三方調色板需要插件接入主題運行時才能持久生效。長時間盯着同一套界面配色,或想在對話窗口背後放一張自定義壁紙,單靠內置選項不夠。
dsh-skin 由 KinGao294 維護,在 DSH 內置主題系統之上註冊 7 套精選皮膚,並提供本地壁紙層與可拖拽桌寵。選擇會寫入瀏覽器 localStorage,刷新後仍保留——思路接近 Codex themes,但面向 DSH 的 --dsw-alias-* token 層。
這是什麼¶
dsh-skin 是一個雙端 DSH 插件(dsh.bundle Host 補丁 + dsh.client 瀏覽器 bundle),當前版本 0.4.0,MIT 許可證。它在 Settings → General 的內置 Appearance 行下方插入三行設置:
- 皮膚 / Skins — 7 套精選調色板,或 默認 / Default 跟隨內置外觀。
- 背景圖片 / Wallpaper — 本地圖片或粘貼圖片/視頻 URL,可調透明度、模糊與顯示方式。
- 奶龍桌寵 / Pet — 可拖拽的浮動桌寵,隨 Agent 運行狀態切換表情,附帶 8 種手動貼紙。
插件分類爲「趣味換裝」,GitHub 倉庫:KinGao294/dsh-skin;社區目錄頁:SkillHub。
工作原理¶
DSH 主題系統基於 design token:Web 殼層預置 --dsw-* token,ThemeRuntime 允許第三方插件通過 ctx.theme.register(...) 覆蓋 alias 層(--dsw-alias-*),並按 colorScheme(light / dark)驅動 body[data-ds-dark-theme]。
dsh-skin 的 Host 半(lib/index.js)是常規 patch 層,插入 skin loader 入口;瀏覽器半(lib/client.js,掛載於 /plugins/dsh-skin/client.js)負責:
- 註冊 7 套皮膚並恢復上次選擇;
- 在
z-index: -1固定層渲染壁紙,同時用ctx.theme.overrideTokens讓主畫布(--dsw-alias-bg-base)和側欄(--dsw-specific-sidebar-fill)半透明,內層卡片、輸入框、氣泡保持不透明; - 監聽
theme/change,在換膚或 light/dark 切換時同步壁紙色調; - 掛載設置行與桌寵,通過
ctx.get("sessions").list()觀察 Agent 運行狀態。
七套皮膚¶
皮膚 id 以 skin-* 命名,避免與官方 @deepseek-ai/dsh-client-ui-console 主題(如 sakura、graphite)衝突。舊版未加前綴的 id 會在讀取時自動遷移。
| id | scheme | 風格 |
|---|---|---|
skin-ocean |
dark | DeepSeek 藍深海 |
skin-graphite |
dark | 中性 monochrome |
skin-forest |
dark | 綠色沉靜 |
skin-sunset |
dark | 暖紫色調 |
skin-midnight |
dark | 純黑 OLED |
skin-paper |
light | 暖色紙張 |
skin-sakura |
light | 粉色點綴 |
選 默認 / Default 會清除存儲的皮膚 id,回到內置 system/light/dark 邏輯。DSH 自身只持久化 system/light/dark;第三方皮膚由本插件在啓動時重新應用。
自定義壁紙¶
在 Settings → General → 背景圖片 / Wallpaper 中配置:
- 選擇圖片 / Choose image — 本地圖片(≤ 2MB,存爲 data URL,僅保留在當前瀏覽器)。本地視頻文件不上傳,需粘貼 URL。
- 網址 / URL — 支持 http(s) / data 圖片或視頻(mp4 / webm / ogv / mov)。
blob:URL 會被拒絕(刷新後失效),無需額外媒體服務。 - 顯示方式 / Fit —
cover/contain/stretch/tile。 - 界面遮罩 / UI wash 與 模糊 / Blur 滑塊 — 遮罩越高界面越實,模糊越大背景越柔。
- 移除 / Remove — 清除壁紙。
壁紙只在半透明的主畫布與側欄區域透出;消息氣泡等閱讀區域保持實心背景。換膚時半透明表面會跟隨當前皮膚的色調重着色。
奶龍桌寵¶
Settings → General → 奶龍桌寵 / Pet 可開關桌寵、調整尺寸(64–180 px)、重置位置。
桌寵行爲:
- 狀態聯動 — 回合開始切
thinking,運行中working,結束done(帶閃光),隨後回到idle;長時間空閒進入sleeping(Zzz)。 - 表情包 — 懸停打開 🎨 面板,8 種情緒可選手動切換(idle / happy / thinking / working / done / sad / surprised / sleeping);點擊桌寵也會隨機切換貼紙數秒。
- 可拖拽 — 任意位置拖動,座標寫入
dsh-skin:pet-pos。 - 零外部資源 — 全部貼紙爲 inline SVG(原創手繪奶龍風格,非授權角色形象),bundle 無額外依賴,任意尺寸清晰。倉庫內
preview.html可預覽完整貼紙包。
持久化¶
以下鍵保存在瀏覽器 localStorage:
dsh-skin:skindsh-skin:wallpaper、dsh-skin:wallpaper-opacity、dsh-skin:wallpaper-blur、dsh-skin:wallpaper-fitdsh-skin:pet-enabled、dsh-skin:pet-size、dsh-skin:pet-pos
DSH Host 的 WEB_SETTINGS_NAMESPACES 白名單尚未向瀏覽器暴露第三方 namespace,因此視覺偏好走 localStorage 而非跨進程同步——與 DSH 當前「瀏覽器偏好進程本地」的邊界一致,同一 origin 下刷新可恢復。
安裝與啓用¶
DSH 的插件分發渠道是 npm registry;包需聲明 dsh.bundle 與 dsh.client。在任意目錄執行,將包加入 web profile:
dsh plugin --profile web add -w dsh-skin
-w 必填:每個 profile 自帶 pnpm-workspace.yaml,pnpm 9 將 profile 目錄視爲 workspace 根,裸 add 會報 ERR_PNPM_ADDING_TO_ROOT。
命令會在 ~/.dsh/profiles/web 執行 pnpm 安裝,並把包寫入 dsh.profile.bundles(patch 層插入 skin loader)。安裝後需重啓 Web 服務:
# 先停止當前實例,再啓動:
dsh web
打開 Settings → General 即可使用皮膚、壁紙與桌寵。
若從本地路徑開發安裝,將包名換爲路徑:
dsh plugin --profile web add -w /path/to/dsh-skin
典型用法¶
- 啓動
dsh web,進入 Settings → General。 - 在 皮膚 / Skins 下拉框選一套調色板(如
skin-ocean),界面立即切換;選 默認 恢復內置外觀。 - 在 背景圖片 / Wallpaper 上傳本地圖或粘貼圖片 URL,用 界面遮罩 和 模糊 調到可讀性與氛圍的平衡,顯示方式 選
cover或tile。 - 打開 奶龍桌寵 / Pet,拖動到不擋操作的位置;觀察 Agent 運行時表情變化,或懸停 🎨 手動選貼紙。
- 刷新頁面確認皮膚、壁紙、桌寵位置均已恢復。
適用場景與注意¶
適合:
- 長時間使用 DSH Web 界面、希望換配色或加背景的個人開發者;
- 需要在同一機器上區分不同工作氛圍(深色專注 / 淺色閱讀)的用戶;
- 想在不改 DSH 核心代碼的前提下體驗第三方主題能力的插件作者。
注意:
- 插件以當前
dsh進程權限運行,安裝前應閱讀源碼並確認 MIT 許可證與自身安全策略。 - 壁紙與皮膚偏好僅存當前瀏覽器
localStorage,換瀏覽器或清緩存會丟失;大圖片受 2MB 本地限制。 - 視頻壁紙依賴可訪問的 http(s) URL,不支持
blob:。 - 客戶端 bundle 只能
requiremodule-table 中的實體(平臺 seed + 已註冊 client bundle),開發擴展時需遵守 DSH rc.6 的模塊邊界。 - SkillHub 社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。