dsh-theme-palettes:DeepSeek Harness 的配色方案基础设施

前言

DeepSeek Harness(DSH)的生态走「一切皆插件」路线,但界面主题层是例外:harness 的 Appearance picker(light/dark/system)不对第三方开放,主题注册表也不接受插件写入。想给 web 界面换一套完整配色,第三方插件此前没有标准入口。

下面介绍的 dsh-theme-palettes 走的是另一条路:不碰主题注册表,而是通过一层 theme.overrideTokens 把调色板按 token 叠加到当前主题上,同时提供 themePalettes 注册 API,让任何插件都能贡献自己的调色板。

这是什么

dsh-theme-palettes(RainbowDashy/dsh-theme-palettes)是 DSH 的配色方案基础设施,解决两件事:

1、内置 VSCode Red、Solarized Dark、Solarized Light 三个调色板,开箱即用;
2、通过 themePalettes API 允许第三方插件注册自己的调色板,无需改动 harness 主题注册表。

许可证为 MIT。

核心功能

内置三个调色板

三个内置调色板分别使用 id vscode-redsolarized-darksolarized-light。每个调色板都是把一个参考主题的 colors 块移植到 DSH 的 --dsw-* 设计 token 上:

  • Solarized 两个调色板各含 89 个 token;
  • VSCode Red 含 87 个 token,success/warn 三级状态保留 stock 值。

完整的 token 映射在仓库的 src/palettes.js 中维护。

通过 overrideTokens 叠加,不碰主题注册表

  • 插件不注册进 harness 主题注册表,也从不调用 setTheme——harness 的 Appearance picker(light/dark/system)本身不可被第三方扩展。
  • 调色板通过单一 theme.overrideTokens 层叠加到当前主题上,按 token 覆盖;只要插件处于加载状态,覆盖就持续生效。
  • System 外观先通过 OS 解析为 light 或 dark,再映射到对应调色板;OS 配色方案切换时会重新触发映射。
  • 移除插件即恢复 stock(default)调色板;默认配置为 dark: defaultlight: default

面向第三方作者的注册 API

调色板是纯数据。第三方插件通过 themePalettes 服务的 registerPalette 注册自己的调色板:

{
  inject: ['themePalettes'],
  apply(ctx) {
    ctx.themePalettes.registerPalette({
      id: 'my-package/ocean',   // 建议以所属包名作为命名空间前缀
      label: 'Ocean',
      tokens: {
        '--dsw-alias-bg-base': '#0b1e2d',
        // ...
      },
    });
  },
}

注册后,调色板会出现在配置下拉与目录列表中,与其他内置调色板地位相同。registerPalette 的完整参数以仓库 README 为准。

安装与启用

dsh plugin 命令安装(profile 为 web):

dsh plugin --profile web add "github:RainbowDashy/dsh-theme-palettes"

安装后重启 web server,让新的 composition row 进入 boot graph:

dsh web

两种可选装法:

# 固定分支或标签
dsh plugin --profile web add "github:RainbowDashy/dsh-theme-palettes#main"

# 从本地 checkout 安装
dsh plugin --profile web add "link:/path/to/checkout"

link: 方式让你的编辑实时生效;file: 方式对目录做快照。

选择调色板

1、打开 Settings → Plugins → Plugin Configuration,展开 “Theme palettes” 卡片。
2、用 Light appearance uses / Dark appearance uses 两个下拉为对应外观选择调色板;下拉提供 Default 加上所有已注册的调色板。
3、卡片内还有一个目录列表,展示每个调色板的 base + accent 双色调预览、label、id 以及内置/第三方标记。

改动实时生效,并以 theme-palettes 命名空间持久化到用户设置文档 $DSH_HOME/settings.yaml,跨重启保留:

{
  "theme-palettes": {
    "dark": "solarized-dark",
    "light": "solarized-light"
  }
}

fail-soft 处理:配置引用了未注册的调色板 id 时按 default 处理,并在下拉中显示为 “(unavailable)”。宿主侧持久化表面不可用时,UI 会显示 “not persisted” 提示。

需要 rc7

配置读写依赖 rc7 的标准设置表面:

  • rc7 移除了设置命名空间白名单,标准 settings 表面才可以服务第三方命名空间,本插件据此把 theme-palettes 命名空间落到与第一方命名空间相同的用户设置文档;
  • rc6 及更早版本使用的私有 /api/theme-palettes 路由已不存在,旧版 DSH 上不可用。

适用场景与注意事项

适合两类人:

  • 想给 DSH web 界面整体换一套表面配色、又不想改 harness 源码的用户;
  • 想为自己的 DSH 插件附带一套配色的插件作者——调色板是纯数据,注册即可。

注意事项:

  • 插件只覆盖表面/chrome token。参考主题的 tokenColors(语法高亮)被有意排除,因为 DSH 主题层只暴露表面 token,代码颜色规则没有对应 token 可映射;
  • 覆盖随插件加载持续生效,移除插件即恢复 stock 调色板;
  • 插件以当前 dsh 进程权限运行,安装前请自行检查源码与许可证(本插件为 MIT)。

结尾

dsh-theme-palettes 用一层 theme.overrideTokens 加一个注册 API,把 DSH 界面配色做成了可插拔的基础设施:内置三套开箱即用的调色板,也给第三方作者留出了标准入口。

更多信息见仓库与社区目录(社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系):

  • GitHub:https://github.com/RainbowDashy/dsh-theme-palettes
  • 社区插件目录:https://www.skillhub.cn/plugins/RainbowDashy/dsh-theme-palettes
羽毛球分组比赛记分
小程序二维码

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

小夜