DeepSHPlugins
dsh-skin 專案預覽
GITHUB / COMMUNITY PROJECT

dsh-skin

換皮膚色JavaScriptMIT

Codex 精神續作款皮膚切換器:7 套精選配色 + 自定義桌布,設定裡多兩行就完事

19 StarsKinGao294 更新時間 2026-08-18
訪問 GitHub 倉庫
dsh-skin 專案預覽

專案介紹

設定裡多兩行就完事,皮膚黨的極簡浪漫
中文

Codex 精神續作款皮膚切換器:7 套精選配色 + 自定義桌布,設定裡多兩行就完事

English

The spiritual-successor-to-Codex skin switcher: 7 curated palettes + custom wallpaper. Two lines in settings, done

專案資訊與收錄訊號

快照 2026-09-11
作者 / 組織
KinGao294
倉庫
KinGao294/dsh-skin
GitHub Stars
19
Forks
6
開發語言
JavaScript
許可證
MIT
最近推送
2026-08-18
Manifest
資料中檢測到宣告

公開倉庫不自動等於可商用;許可證與當前相容性以原專案文件為準。Manifest 和資料評分不構成安裝安全認證。

資料評分

81/ 100
維護活躍
84
文件與實用資訊
85
生態關注度
56
安裝便捷訊號
100
專案宣告訊號
100

README 含完整安裝與使用說明;標準命令一鍵安裝。

評分來自已有資料快照的五維模型,僅作瀏覽參考,不是實際使用評測或安全檢測結論。

安裝與使用

所有專案資料與許可均以對應 GitHub 倉庫為準。

dsh plugin add github:KinGao294/dsh-skin

複製命令不會自動執行。請先閱讀倉庫文件,確認環境要求與許可證。

專案截圖

倉庫 README

GitHub 原文

已儲存的倉庫文件快照;文件抓取時間未記錄,可能與上方目錄介紹處於不同版本。安裝前請核對當前倉庫說明。

儲存庫檔案保留原文,指令與授權文字不作自動改寫。

dsh-skin

Skin switcher + custom wallpaper + 奶龙桌宠(desktop pet with sticker pack) for DeepSeek Harness — a "change the skin" feature in the spirit of Codex themes. It registers a curated catalog of palettes into DSH's built-in theme runtime and adds three rows to Settings → General (below the built-in Appearance row):

  • 皮肤 / Skins — pick one of 7 curated palettes (or 默认 / Default to

follow the built-in appearance).

  • 背景图片 / Wallpaper — local image, or paste an image/video URL; opacity,

blur, and fit (cover / contain / stretch / tile).

  • 奶龙桌宠 / Pet — a floating, draggable yellow-dragon desktop pet with an

8-mood sticker pack (表情包). It follows the agent's running state (idle → thinking → working → done → sleeping), blinks while idle, falls asleep when idle too long, can be dragged anywhere (position remembered), and shows a 🎨 sticker panel where you can pick any mood manually. Toggle it, resize it, or reset its position from the settings row.

Both choices persist across reloads (localStorage). A saved third-party skin is re-applied once on boot (DSH only persists system/light/dark itself).

How it works

DSH's theme system is token-based: the web shell ships --dsw-* design tokens, and ThemeRuntime lets third-party plugins register themes that override the alias layer (--dsw-alias-*) per color scheme. This package is a regular dual-face plugin:

  • Host half (lib/index.js) — a dsh.bundle patch layer that inserts one

loader entry (skin); a no-op apply, exactly like the shipped ui-* packages.

  • Browser half (lib/client.js) — a dsh.client bundle (served at

/plugins/dsh-skin/client.js) that:

  1. registers 7 curated skins via ctx.theme.register(...);
  2. restores the saved skin id and applies it with ctx.theme.setTheme(...);
  3. renders the wallpaper as a fixed backdrop layer (z-index: -1) and stacks

a token override (ctx.theme.overrideTokens) that makes the main canvas (--dsw-alias-bg-base) and sidebar (--dsw-specific-sidebar-fill) translucent, so the image shows through while inner surfaces (cards, inputs, bubbles) stay opaque and readable;

  1. keeps the slot stores in sync with theme/change (and re-shades the

wallpaper when the active skin or light/dark scheme changes);

  1. mounts both rows into settings.general.item;
  2. mounts the desktop pet (a fixed, draggable element with inline-SVG

stickers) and watches the agent's running state through ctx.get("sessions").list() to switch moods.

Each skin sets its colorScheme (light/dark), which drives body[data-ds-dark-theme], plus alias-token overrides applied as inline custom properties on <body> by ui-layout's ThemePresenter.

Skins

idschemevibe
skin-oceandarkDeepSeek-blue deep sea
skin-graphitedarkneutral monochrome
skin-forestdarkgreen calm
skin-sunsetdarkwarm purple
skin-midnightdarkpure black OLED
skin-paperlightwarm paper
skin-sakuralightpink accents

Ids are namespaced (skin-*) so they do not collide with official @deepseek-ai/dsh-client-ui-console themes (sakura, graphite). Saved unprefixed ids are migrated on read.

Picking 默认 / Default reverts to the built-in appearance (follow system) and clears the stored skin.

Wallpaper

In Settings → General → 背景图片 / Wallpaper:- 选择图片 / Choose image — pick a local image (≤ 2MB, stored as a data URL, kept in this browser only). Local video files are not uploaded; paste a URL instead.

  • 网址 / URL — paste http(s) / data image or video (mp4/webm/ogv/mov). blob is rejected (dies on reload). No extra media server.
  • 显示方式 / Fit — cover / contain / stretch / tile.
  • 界面遮罩 / UI wash and 模糊 / Blur sliders (rAF-coalesced; no crash). Higher wash = more solid UI.
  • 移除 / Remove clears it.

The wallpaper lives on a z-index: -1 fixed layer, so it is only visible through the translucent main canvas and sidebar; message surfaces keep their solid backgrounds for readability. It also follows your active skin's tint (switching skins re-shades the translucent surfaces).

奶龙桌宠 / Pet

In Settings → General → 奶龙桌宠 / Pet you can show/hide the pet, resize it (64–180 px) and reset its position. Behavior:

  • Status moods — the dragon follows the agent: thinking when a turn

starts, working while it runs, done (with sparkles) when it finishes, then back to idle. Left idle too long it falls asleep (sleeping, Zzz).

  • Sticker pack (表情包) — hover the pet and open 🎨: 8 moods to pick

(idle / happy / thinking / working / done / sad / surprised / sleeping). Clicking the pet also cycles to a random sticker for a few seconds.

  • Draggable — drag it anywhere; the position is remembered

(dsh-skin:pet-pos). Reset it from the settings row.

  • Zero assets — every sticker is inline SVG (original hand-drawn art in a

Nai-Long style, not the licensed character), so the bundle stays dependency- free and crisp at any size. preview.html in the repo shows the full pack.

Persistence

Choices are stored in localStorage (dsh-skin:skin, dsh-skin:wallpaper, dsh-skin:wallpaper-opacity, dsh-skin:wallpaper-blur, dsh-skin:wallpaper-fit, dsh-skin:pet-enabled, dsh-skin:pet-size, dsh-skin:pet-pos). DSH's Host settings wire only exposes an allowlisted set of namespaces to browser clients (WEB_SETTINGS_NAMESPACES in dsh-host-apiproxy), so a third-party namespace would answer settings-not-exposed; the product itself keeps remote browser preferences process-local, and localStorage matches that boundary for a visual preference while surviving reloads on the same origin.

Install

From anywhere, add the package to the web profile:

dsh plugin --profile web add -w /path/to/dsh-skin
The -w flag is required: every profile ships a pnpm-workspace.yaml, so
pnpm 9 treats the profile directory as a workspace root and refuses a bare
add with ERR_PNPM_ADDING_TO_ROOT.

This runs pnpm in ~/.dsh/profiles/web, installs the package, and appends it to dsh.profile.bundles (its patch layer inserts the skin loader entry). The running web server must be restarted to pick up the new bundle layer:

# stop the running instance, then:
dsh web

Open Settings → General to use the skins, wallpaper and pet.

Publishing (npm)

DSH (rc.6) has no separate plugin marketplace — the plugin distribution channel *is* the npm registry. A package that declares dsh.bundle (host patch layer) and dsh.client (browser bundle) is exactly what dsh plugin --profile <name> add <package> installs, so publishing this package to npm is what "上架" means today:

  1. Pick a unique name (scoped names are safer, e.g. @yourscope/dsh-skin) and

fill in author, repository, keywords, and a CHANGELOG.

  1. Make sure files ships lib/index.js, lib/client.js, lib/types,

cordis.patch.yml (already configured).

  1. Publish to the official npm registry (this machine's default registry is

a mirror — publishing to a mirror does not reach npmjs):

   npm publish --registry https://registry.npmjs.org
  1. Users install with:
   dsh plugin --profile web add -w @yourscope/dsh-skin

then restart dsh web.

Known platform boundaries to document for users: browser-side preferences are stored in localStorage (third-party settings namespaces are not exposed over the wire yet), and the client bundle may only require module-table entities (platform seeds + registered client bundles).

Development

The client bundle is written directly in the __ModuleLoader__ bundle format (the same shape tsdown emits for the shipped ui-* packages), so no build step is required. lib/client.js may require only module-table entities: platform seed words (react, react/jsx-runtime, …) and registered client bundles (@deepseek-ai/dsh-client-runtime/client, @deepseek-ai/dsh-client-ui-theme/client, …). After editing, restart the web server (bundle content is re-hashed and served with a new rev; loader entries are rescanned at boot).

使用前核對

安裝步驟、相容版本與授權範圍以原專案當前文件為準。Stars 和評分是快照中的導航訊號。

安裝與排錯 · 專案問題反饋

同類專案