DeepSeek Harness Hub
← 返回列表

ManuSpurs/dsh-skin20260814

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

DeepSeek Harness 的皮肤切换器 + 自定义壁纸——一个秉承 Codex…

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/14 · 已提供中文文档

dsh-skin 增强版:为 DeepSeek Harness 提供皮肤切换与自定义背景壁纸。在原版基础上修复了两处问题——① 大图/特殊格式上传无响应(改用 createImageBitmap 直接解码、增加处理中与错误提示);② 主题切换时 overrideTokens 触发 theme/change 导致无限递归栈溢出(加皮肤/明暗守卫断开循环)。壁纸存储从 localStorage 压缩方案改为 IndexedDB 原文件直存,全画质显示、零压缩,并自动迁移旧数据。

综合分
28
GitHub 分
28
用户评分
★ Stars
2
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add ManuSpurs/dsh-skin20260814
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-theme@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-slots
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-skin

DeepSeek Harness 的皮肤切换器 + 自定义壁纸——一个秉承 Codex 主题精神的“换肤”功能。它把一组精选的调色板注册到 DSH 内置的主题运行时中,并在设置 → 通用中新增两行(位于内置的“外观”行下方):

- 皮肤 / Skins——从 7 款精选调色板中选择一款(或选择默认 / Default 以跟随内置外观)。
- 背景图片 / Wallpaper——设置你自己的背景图片,并可控制透明度和模糊。

两项选择在重新加载后都会保留(localStorage)。

工作原理

DSH 的主题系统基于 token:Web 外壳提供 --dsw- 设计 token,而 ThemeRuntime 允许第三方插件注册主题,按配色方案覆盖别名层(--dsw-alias-)。本包是一个常规的双面插件:

- 宿主端(lib/index.js)——一个 dsh.bundle 补丁层,插入一个加载器条目(skin);一个空操作的 apply,与随附的 ui-* 包完全一致。
- 浏览器端(lib/client.js)——一个 dsh.client 包(通过 /plugins/dsh-skin/client.js 提供),它会:
1. 通过 ctx.theme.register(...) 注册 7 款精选皮肤;
2. 恢复已保存的皮肤 id,并通过 ctx.theme.setTheme(...) 应用它;
3. 将壁纸渲染为固定的背景层(z-index: -1),并叠加一个 token 覆盖(ctx.theme.overrideTokens),使主画布(--dsw-alias-bg-base)和侧边栏(--dsw-specific-sidebar-fill)变为半透明,从而让图片透出,同时内部表面(卡片、输入框、气泡)保持不透明且可读;
4. 使插槽存储与 theme/change 保持同步(并在当前皮肤或浅色/深色方案变化时重新调整壁纸色调);
5. 将两行挂载到 settings.general.item 中。

每款皮肤都会设置其 colorScheme(light/dark),它驱动 body[data-ds-dark-theme],此外还有由 ui-layout 的 ThemePresenter 作为内联自定义属性应用到  上的别名 token 覆盖。

皮肤

| id        | 方案   | 风格                              |
|-----------|--------|-----------------------------------|
| ocean   | 深色   | DeepSeek 蓝深海                   |
| graphite| 深色   | 中性单色                          |
| forest  | 深色   | 绿色宁静                          |
| sunset  | 深色   | 暖紫色                            |
| midnight| 深色   | 纯黑 OLED                         |
| paper   | 浅色   | 暖色纸张                          |
| sakura  | 浅色   | 粉色点缀                          |

选择默认 / Default 会恢复为内置外观(跟随系统)并清除已保存的皮肤。

壁纸

在设置 → 通用 → 背景图片 / Wallpaper中:

- 选择图片 / Choose image——选择一张本地图片;原始文件按原样存储(IndexedDB,不重新压缩)并以完整质量显示,仅保存在此浏览器中。
- 透明度 / Opacity 和 模糊 / Blur 滑块用于调整图片在 UI 背后的呈现方式。
- 移除图片 / Remove 会清除它。
壁纸位于 z-index: -1 的固定层上,因此只能透过半透明的主画布和侧边栏看到;消息界面保持其不透明背景以确保可读性。它还会跟随你当前皮肤色调(切换皮肤会重新调整半透明表面的色调)。

持久化

壁纸图片以原始质量存储在 IndexedDB 中(原始 Blob——浏览器的 localStorage 配额无法容纳全尺寸图片);滑块值和皮肤选择保存在 localStorage 中
(dsh-skin:skin、dsh-skin:wallpaper-opacity、dsh-skin:wallpaper-blur)。
DSH 的 Host 设置接线仅向浏览器客户端暴露一组白名单命名空间(dsh-host-apiproxy 中的 WEB_SETTINGS_NAMESPACES),因此第三方命名空间会返回 settings-not-exposed;产品本身将远程浏览器偏好保持为进程本地,而 localStorage 与这一边界一致,适用于视觉偏好,同时在同一源上重新加载后仍然保留。

安装

从任意位置将包添加到 web 配置文件:

dsh plugin --profile web add -w /path/to/dsh-skin

-w 标志是必需的:每个配置文件都附带一个 pnpm-workspace.yaml,因此
pnpm 9 会将配置文件目录视为工作区根目录,并拒绝裸 add,报错
ERR_PNPM_ADDING_TO_ROOT。

这会在 ~/.dsh/profiles/web 中运行 pnpm,安装该包,并将其追加到
dsh.profile.bundles(其补丁层会插入 skin 加载器条目)。
必须重启正在运行的 Web 服务器以加载新的 bundle 层:

停止正在运行的实例,然后:
dsh web

打开 Settings → General 以使用这两项功能。

发布(npm)

DSH(rc.6)没有单独的插件市场——插件分发渠道就是 npm 注册表。一个声明了 dsh.bundle(宿主补丁层)和 dsh.client(浏览器 bundle)的包,正是 dsh plugin
--profile  add  所安装的内容,因此将此包发布到 npm 就是当今“上架”的含义:

1. 选择一个唯一的名称(带作用域的名称更安全,例如 @yourscope/dsh-skin),并
填写 author、repository、keywords 和 CHANGELOG。
2. 确保 files 包含 lib/index.js、lib/client.js、lib/types、
cordis.patch.yml(已配置)。
3. 发布到官方 npm 注册表(本机的默认注册表是
镜像——发布到镜像不会到达 npmjs):
npm publish --registry https://registry.npmjs.org

4. 用户使用以下命令安装:
dsh plugin --profile web add -w @yourscope/dsh-skin

然后重启 dsh web。

需要向用户说明的已知平台边界:浏览器端偏好存储在 localStorage 中(第三方设置命名空间尚未通过网络暴露),并且客户端 bundle 只能 require 模块表实体(平台种子 + 已注册的客户端 bundle)。

开发

客户端 bundle 直接以 __ModuleLoader__ bundle 格式编写
(与 tsdown 为已发布的 ui-* 包生成的形态相同),因此无需构建步骤。lib/client.js 只能 require 模块表中的实体:平台种子词(react、react/jsx-runtime、……)以及已注册的客户端 bundle(@deepseek-ai/dsh-client-runtime/client、@deepseek-ai/dsh-client-ui-theme/client、……)。编辑后,重启 Web 服务器(bundle 内容会重新哈希,并以新的 rev 提供;loader 条目会在启动时重新扫描)。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群