dsh-matrix-rain
awa-123-cw
DeepSeek Harness WebUI 动效美化插件:聊天背景黑客帝国代码雨,雨字内容 = 当前会话 AI 思考链(流式实时),设置页调色盘 + 全套 DIY
PROJECT TOPICS
PROJECT README
Skin switcher + custom wallpaper 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 two rows to Settings → General (below the built-in Appearance 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).
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:
lib/index.js) — a dsh.bundle patch layer that inserts one
loader entry (skin); a no-op apply, exactly like the shipped ui-* packages.lib/client.js) — a dsh.client bundle (served at
/plugins/dsh-skin/client.js) that:ctx.theme.register(...);ctx.theme.setTheme(...);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;theme/change (and re-shades the
wallpaper when the active skin or light/dark scheme changes);settings.general.item.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.
| id | scheme | vibe |
|---|---|---|
skin-ocean |
dark | DeepSeek-blue deep sea |
skin-graphite |
dark | neutral monochrome |
skin-forest |
dark | green calm |
skin-sunset |
dark | warm purple |
skin-midnight |
dark | pure black OLED |
skin-paper |
light | warm paper |
skin-sakura |
light | pink 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.
In Settings → General → 背景图片 / Wallpaper:
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).
Choices are stored in localStorage (dsh-skin:skin, dsh-skin:wallpaper,
dsh-skin:wallpaper-opacity, dsh-skin:wallpaper-blur, dsh-skin:wallpaper-fit).
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.
From anywhere, add the package to the web profile:
dsh plugin --profile web add -w /path/to/dsh-skin
The
-wflag is required: every profile ships apnpm-workspace.yaml, so pnpm 9 treats the profile directory as a workspace root and refuses a bareaddwithERR_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 both features.
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:
@yourscope/dsh-skin) and
fill in author, repository, keywords, and a CHANGELOG.files ships lib/index.js, lib/client.js, lib/types,
cordis.patch.yml (already configured).npm publish --registry https://registry.npmjs.org
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).
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).
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。