dsh-skin:爲 DSH Web 界面換皮膚、設背景與桌寵

前言

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-*),並按 colorSchemelight / dark)驅動 body[data-ds-dark-theme]

dsh-skin 的 Host 半(lib/index.js)是常規 patch 層,插入 skin loader 入口;瀏覽器半(lib/client.js,掛載於 /plugins/dsh-skin/client.js)負責:

  1. 註冊 7 套皮膚並恢復上次選擇;
  2. z-index: -1 固定層渲染壁紙,同時用 ctx.theme.overrideTokens 讓主畫布(--dsw-alias-bg-base)和側欄(--dsw-specific-sidebar-fill)半透明,內層卡片、輸入框、氣泡保持不透明;
  3. 監聽 theme/change,在換膚或 light/dark 切換時同步壁紙色調;
  4. 掛載設置行與桌寵,通過 ctx.get("sessions").list() 觀察 Agent 運行狀態。

七套皮膚

皮膚 id 以 skin-* 命名,避免與官方 @deepseek-ai/dsh-client-ui-console 主題(如 sakuragraphite)衝突。舊版未加前綴的 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 會被拒絕(刷新後失效),無需額外媒體服務。
  • 顯示方式 / Fitcover / 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:skin
  • dsh-skin:wallpaperdsh-skin:wallpaper-opacitydsh-skin:wallpaper-blurdsh-skin:wallpaper-fit
  • dsh-skin:pet-enableddsh-skin:pet-sizedsh-skin:pet-pos

DSH Host 的 WEB_SETTINGS_NAMESPACES 白名單尚未向瀏覽器暴露第三方 namespace,因此視覺偏好走 localStorage 而非跨進程同步——與 DSH 當前「瀏覽器偏好進程本地」的邊界一致,同一 origin 下刷新可恢復。

安裝與啓用

DSH 的插件分發渠道是 npm registry;包需聲明 dsh.bundledsh.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

典型用法

  1. 啓動 dsh web,進入 Settings → General
  2. 皮膚 / Skins 下拉框選一套調色板(如 skin-ocean),界面立即切換;選 默認 恢復內置外觀。
  3. 背景圖片 / Wallpaper 上傳本地圖或粘貼圖片 URL,用 界面遮罩模糊 調到可讀性與氛圍的平衡,顯示方式covertile
  4. 打開 奶龍桌寵 / Pet,拖動到不擋操作的位置;觀察 Agent 運行時表情變化,或懸停 🎨 手動選貼紙。
  5. 刷新頁面確認皮膚、壁紙、桌寵位置均已恢復。

適用場景與注意

適合:

  • 長時間使用 DSH Web 界面、希望換配色或加背景的個人開發者;
  • 需要在同一機器上區分不同工作氛圍(深色專注 / 淺色閱讀)的用戶;
  • 想在不改 DSH 核心代碼的前提下體驗第三方主題能力的插件作者。

注意:

  • 插件以當前 dsh 進程權限運行,安裝前應閱讀源碼並確認 MIT 許可證與自身安全策略。
  • 壁紙與皮膚偏好僅存當前瀏覽器 localStorage,換瀏覽器或清緩存會丟失;大圖片受 2MB 本地限制。
  • 視頻壁紙依賴可訪問的 http(s) URL,不支持 blob:
  • 客戶端 bundle 只能 require module-table 中的實體(平臺 seed + 已註冊 client bundle),開發擴展時需遵守 DSH rc.6 的模塊邊界。
  • SkillHub 社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

鏈接

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

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

小夜