dsh-dream-skin

68Star6Fork2Issue0Watching

为 DeepSeek Harness 提供 8 套原创皮肤、壁纸与主题包分享的标准双面换肤插件,跨重启不丢设置。

语言
JavaScript
License
MIT
分支
main
deepseek-harnessdshdsh-plugindsh-plugin-themeskinthemewallpaper

安装

$ dsh plugin --profile web add github:RevolutionLA/dsh-dream-skin

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

为 DeepSeek Harness 换上 8 套 iOS / Linear 风格的清透冷调皮肤、壁纸与强调色,并把「换肤」做成可分享、可导入、可回滚的标准主题包生态。

核心能力

  • 提供 8 套内置皮肤(沉静蓝、极光青、星云紫、余烬橙、午夜黑、iOS 扁平、液态玻璃、Material 粉),覆盖浅色与深色
  • 支持本地图、图片 URL、CSS 渐变三种壁纸来源,并可独立调节透明度、模糊、侧边栏透明度与自动弱化
  • 提供每用户强调色 Accent,可在当前皮肤上叠加任意品牌色,不破坏皮肤本身
  • 通过 *.dsh-theme.json 主题包实现导入、导出、分享链接与本地主题库,附带格式校验与回滚
  • 在「设置 → 外观 / Theme」下注册独立分节,包含皮肤、壁纸、高级壁纸、强调色、主题包五个功能行
  • 持久化跨 DSH 重启:localStorage + 宿主 ~/.dsh/dream-skin.json 双写,状态文件丢失也能从浏览器侧恢复

技术实现

  • 语言: JavaScript(Node 端 ESM + 浏览器端 CJS via __ModuleLoader__
  • 关键依赖: @deepseek-ai/cordis(插件宿主框架)、@deepseek-ai/dsh-client-runtime / dsh-client-locale / dsh-client-ui-theme(DSH 官方客户端包)、react ^18.2
  • 架构模式: 标准 DSH 双面插件——Host 端通过 cordis.patch.yml 插入 dream-skin 加载器条目,挂载 /dream-skin/api 受信任 JSON 持久化接口;Browser 端通过 dsh.client 声明被 dsh-client-modules 拉起,注册主题、slots、locale 字典
  • 入口文件: lib/index.js(Host apply)、lib/client.js(Browser apply,含 8 套皮肤 token 与 8 语言字典)

适用场景

希望把 DeepSeek Harness 调成符合自己审美的清透冷调视觉风格、又不想装桌面端注入型换肤工具的普通用户。适合每天长时间盯 DSH Web 写作 / 编码,需要更柔和的对比、更克制的强调色、更耐看的浅深组合,并能随时切换或分享给同事一套自配色方案。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness (DSH)^0.1.0-rc.6peerDependencies 锁定,宿主扩展点 ctx.theme / ctx.slots / ctx.locale 必需
Node.js>=18engines.node 声明,仅用于本地开发与测试运行时
浏览器现代 Chromium / WebKit设置面板依赖原生 CSS 变量、backdrop-filtermatchMedia(README 声明)
操作系统macOS / Windows / Linux跨平台;Host 文件路径使用 process.env.DSH_HOME 或回退到 ~/.dsh/,无平台限制字段

安装方式

dsh plugin --profile web add github:RevolutionLA/dsh-dream-skin

配置项

本插件无需额外配置。所有可调项都在 设置 → 外观(Theme) 面板下,以图形化方式呈现,常用项包括:

配置类型说明默认值
皮肤(Skin)单选在 8 套内置皮肤与已导入主题包之间切换跟随系统外观
壁纸(Wallpaper)单选 / 文件 / 滑块选择本地图(自动压缩到 data URL)、粘贴图片 URL 或挑内置渐变
壁纸透明度0–100 滑块主内容区与侧边栏的半透明底的可视强度80%
壁纸模糊0–60 滑块给壁纸叠 backdrop-filter 模糊0 px
侧边栏透明度0–100 滑块侧边栏自己的半透明底;可独立于主画布与主画布联动
强调色(Accent)选色盘 / 随机在当前皮肤上叠加一个品牌色,不改皮肤本身跟随主题
自动弱化开关聚焦任务时让壁纸淡出、不抢注意力关闭
最近使用壁纸历史最多保留 5 张,点一下换回

持久化键全部带 dsh-dream-skin: 前缀,存在浏览器 localStorage;并在每次变更后防抖 200ms 推送到宿主文件 ~/.dsh/dream-skin.json,固定 origin 的官方 Web 与随机端口的 DSH Desktop 都能跨重启保留。

常见问题

Q: 安装完打开 DSH 看不到「外观 / Theme」分节怎么办?

A: 一定要重启 DSH Web(运行 dsh web),新插件才会被插件管理器发现并加载。重启后进 设置 → 外观(Theme) 即可看到皮肤、壁纸、强调色、主题包五个功能行。

Q: 换好的皮肤 / 壁纸,重启 DSH 后为什么看起来回到默认了?

A: 0.4.0 起插件默认走三层持久化:内存缓存 → localStorage → 宿主文件 ~/.dsh/dream-skin.json。重启时浏览器侧会从宿主文件把保存的皮肤 / 壁纸 / 强调色 / 主题包重新拉回并应用。如果仍丢,请确认 DSH_HOME 是否指向预期目录、或 Web 进程确实被重启过。

Q: 这个插件跟 Codex-Dream-Skin 一样吗?

A: 致敬但实现路径不同。Codex-Dream-Skin 通过 CDP 注入桌面客户端 CSS,本插件走 DSH 官方的 ctx.theme.register / ctx.slots.inject 扩展点,不注入、不改二进制,因此不因 DSH 更新而失效。

Q: 怎么把自配色方案分享给同事?

A: 在设置里点「主题包 → 导入」加载一个 *.dsh-theme.json,或者自己写一个(参考 docs/examples/sample-theme-pack.json),再点「复制分享链接」即可把整包编码进 URL hash 发出去;也可导出文件后用任意渠道分发。导入时会校验格式与必要字段,失败时安全回退,不破坏现有设置。

Q: 卸载后会不会留下残留?

A: 卸载只是停止加载。localStoragedsh-dream-skin:* 的键与 ~/.dsh/dream-skin.json 都还在;重新安装会自动接管,或手动删除即可彻底清理。

Q: 为什么切换皮肤后背景没跟着换?

A: 默认逻辑是「皮肤没自带背景时自动套用该皮肤的 iOS 弥散光渐变」。一旦你手动选过图片 / URL / 渐变,插件会标记为「自定义壁纸」,以后切皮肤就不再覆盖它了——切回「跟随皮肤」需要清掉自定义壁纸。

Q: 能不能完全删掉壁纸回到官方外观?

A: 在「高级壁纸」或主壁纸行点「清除壁纸 / 移除图片」即可,主画布与侧边栏会恢复为该皮肤的不透明色。

上手难度

入门 — 装好之后只在设置面板里点几下,没有命令、没有配置文件、没有需要重启的额外步骤;想自己写主题包再深入看 docs/themes-spec.md

已知问题与限制

  • 首帧可能闪烁(FOUC):插件首次挂载前的瞬间,主题尚未应用,仍是默认外观;现状是「以同源 localStorage 为兜底先渲染再覆盖」,完全消除 FOUC 仍是 Roadmap 项目(README.md:321)。
  • 请求体上限 32 MB/dream-skin/api 单次 set 超过 32 MB 时返回 413。壁纸以 base64 data URL 存 localStorage,已自动压缩到 ≤2 MB,因此基本不会触达,但单次批量导入大量主题包时需注意。
  • Host 通道在随机端口的部署下才有意义:官方 Web 的 origin 固定,理论上 localStorage 够用;$DSH_HOME/dream-skin.json 主要为「每次启动端口都变」的 DSH Desktop 服务,两端行为略有差异。
  • 不暴露用户级配置 schema:所有设置都在 UI 上,没有 ctx.config.* 形式的可注入配置项;想换 token 需新增内置皮肤或写主题包。