# dsh-colorlab 设计说明 本文记录插件的实现取舍、踩过的坑和验收方法。面向二次开发者,**中文**。 使用说明见 [README](../README.md)。 > 包名已从 `dsh-mariana-theme` 改为 `dsh-colorlab`(它早已不只是 Mariana 配色, > 而是一套配色引擎)。但 profile 行 id 仍为 `mariana-theme` —— 它是设置项的 > 命名空间,改名会让所有已存的颜色覆盖和配色方案变成孤儿。 > **名字是装饰,id 是承重墙。** --- ## 为什么覆盖令牌而不是注册主题 `@deepseek-ai/dsh-client-ui-theme` 提供了 `register()` 注册新主题 id,但: 1. Appearance 设置行的三个方块(浅色 / 深色 / 跟随系统)是**硬编码**的, 新 id 没有 UI 入口; 2. `setTheme(id)` 只对内置的 `light`/`dark`/`system` 落盘,自定义 id 无法持久化。 所以本插件**不注册主题 id**,改用官方另一条扩展点 `ctx.theme.overrideTokens(source, tokens)`:它把令牌叠加层叠在活动主题之上, 按注册顺序组合、可完整回退,`ThemePresenter` 随后把结果写成 `body` 的内联变量。 ## 两条通道 | 通道 | 触发条件 | 说明 | |---|---|---| | `overrideTokens` | `ctx.theme.overrideTokens` 存在 | 首选。同 source 再次调用即整层替换,不会堆叠 | | `