DeepSeek Harness 聊天界面的配色主题插件。默认预设内置 Sublime Text 的 Mariana…
30.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ruegg114514/dsh-colorlab该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的聊天界面配色主题插件。默认预设是 Mariana 配色,还带一个配色引擎:18 个可调色槽、9 个 Markdown 正文角色、预设保存、WCAG 对比度提示和明暗模式。
README
由 DeepSeek 最新模型翻译生成dsh-colorlab
EN · 中文
DeepSeek Harness 聊天界面的配色主题插件。默认预设内置 Sublime Text 的 Mariana 调色板,并在其上叠加一套配色引擎:18 个可调色槽、9 个 Markdown 正文角色、预设保存、实时 WCAG 对比度警告、明暗模式——全部在设置面板里完成,保存到你的配置档。
dsh-colorlab 下的聊天界面
进程行按颜色区分(工具调用为绿色,摘要为琥珀色),标题和行内代码带色调,界面底色用 Mariana 的冷蓝灰,而不是纯黑。
玻璃界面(可选开启)
打开 Glass interface 后,三栏变成半透明面板,浮在背景层之上——背景可以是你的 Windows 壁纸、生成的渐变,或程序化生成的地形等高线图。模糊只对背景本身做一次,所以每个表面看到的都是同一层磨砂世界;每一层只绘制自己与下一层之间的差异,卡片因此清晰地浮在栏之上,栏也保留主题色调,不会被冲淡。
玻璃界面:壁纸背景、半透明面板、等高线选项
截图:玻璃模式叠加壁纸;标题栏、侧边栏和对话区看起来是一整片带色调的玻璃;输入卡片被移出滚动流,流式文本在它的上边缘干净裁切,而不是滑到下面。
背景底:光晕 / 色带 / 混合
生成的渐变背景自带一个小型合成器。
展开完整文档(README 剩余 1 节)
dsh-colorlab
EN · 中文
DeepSeek Harness 聊天界面的配色主题插件。默认预设内置 Sublime Text 的 Mariana 调色板,并在其上叠加一套配色引擎:18 个可调色槽、9 个 Markdown 正文角色、预设保存、实时 WCAG 对比度警告、明暗模式——全部在设置面板里完成,保存到你的配置档。
dsh-colorlab 下的聊天界面
进程行按颜色区分(工具调用为绿色,摘要为琥珀色),标题和行内代码带色调,界面底色用 Mariana 的冷蓝灰,而不是纯黑。
玻璃界面(可选开启)
打开 Glass interface 后,三栏变成半透明面板,浮在背景层之上——背景可以是你的 Windows 壁纸、生成的渐变,或程序化生成的地形等高线图。模糊只对背景本身做一次,所以每个表面看到的都是同一层磨砂世界;每一层只绘制自己与下一层之间的差异,卡片因此清晰地浮在栏之上,栏也保留主题色调,不会被冲淡。
玻璃界面:壁纸背景、半透明面板、等高线选项
截图:玻璃模式叠加壁纸;标题栏、侧边栏和对话区看起来是一整片带色调的玻璃;输入卡片被移出滚动流,流式文本在它的上边缘干净裁切,而不是滑到下面。
背景底:光晕 / 色带 / 混合
生成的渐变背景自带一个小型合成器。选 glow(柔和彩色雾,无边缘)、bands(角度色带)或 blend(两者兼有),然后逐个元素上色:
- Glow —— 2–6 个光源,每个有自己的颜色、强度和 X/Y 位置,外加整体密度(0–100%)和扩散(40–140%)。
- Bands —— 2–6 条色带,每条有自己的颜色,外加 0° 到 360° 任意切割角度和边缘柔化滑块(0 = 硬切)。
带分层光晕的渐变背景
截图:glow 模式下的生成渐变背景——几盏柔和彩光合成在主题底色上,不涉及壁纸。
等高线背景
第三种背景来源是程序化生成的:在工作线程里渲染的地形等高线图。速度、墨迹密度、线宽、地形密度、高程步数、漂移幅度和可选的高程标注都可调;速度设为 still 时完全不耗性能(渲染一帧,之后不再重绘)。
程序化等高线背景
截图:等高线模式。地形线用强调色着色,面板在其上保持半透明。
它不修改 app.asar,也不 fork 宿主。它使用 DSH 官方主题扩展点(ctx.theme.overrideTokens),把自己的 token 叠加在当前生效的主题之上。
安装
sh
dsh plugin add ruegg114514/dsh-colorlab
这条命令从源码安装,所以首次运行时 DSH 会请你批准包的构建步骤(allowBuilds)。装完重启 DSH——加载器会在启动时接管插件。
卸载 sh
dsh plugin remove ruegg114514/dsh-colorlab
或者直接在插件设置面板里关掉 Enable:主题立刻回到宿主默认,不用重启,你保存的颜色也都还在。
版本
每个版本都打了标签,并在 releases 页面 有说明;各版本的细节记在 CHANGELOG.md 里。
上面的命令总是安装 main 的最新提交。要固定到某个版本: sh
dsh plugin add ruegg114514/dsh-colorlab#v1.1.0
版本号遵循 SemVer。插件在 2.0 之前,次版本号升级仍可能改变某个设置的外观——真改了的话,CHANGELOG 会在 Changed 下明确写出。
它改了什么
Mariana 是 Sublime Text 3.0(2017)和 Sublime Text 4 的默认配色方案。背景是冷调蓝灰(#343D46),不是纯黑;前景是柔和的灰(#D8DEE9),不是纯白——所以在亮屏上长时间使用依然清晰。
| 区域 | 效果 |
| 表面 / 卡片 / 侧边栏 / 菜单 | #343D46 / #2F3841 / #23292E |
| 正文 / 次级 / 三级文字 | #D8DEE9 / #A7ADBA / #8792A2 |
| 边框与分隔线 | #D8DEE9 的低透明度叠加 |
| 气泡 / 输入框 / 代码块 | #3B454F / #2E363F |
| 状态色 | 成功 #99C794,错误 #EC5F67,警告 #F9AE58 |
| 代码语法高亮 | 关键字 #C594C5,字符串 #99C794,函数 #5FB3B3,数字 #F9AE58,注释 #8792A2 |
| 侧边栏终端 | 背景和光标跟随主题 |
颜色引擎
设置面板
设置 → ColorLab:
| 选项 | 作用 |
| Enable | 关闭后立刻回到宿主调色板;你的设置保留 |
| Apply to | 仅深色外观(默认)/ 深色和浅色都应用 |
| Surface variant | 标准 #343D46 / 深 #252B32(早期 ST3 tmTheme)/ 暗 #2B3336 |
| Accent | 青 #5FB3B3 / 橙 #F9AE58 / 蓝 #6699CC——只影响业务状态高亮 |
| Custom accent | 任意 #RRGGBB,可用取色器、十六进制输入或随机;覆盖预设。浅色模式会自动加深以保证对比度 |
| Code palette | 覆盖围栏代码块内 Shiki 的 --shiki- token |
| Prose highlight | 给 Markdown 正文加颜色层级(标题、加粗、行内代码、列表标记、引用线) |
| Prose brightness | 原始 / 增强(默认)/ 更亮——向白色插值,不改变色相 |
| Prose preview | 在开关正下方并排显示两种状态 |
| 正文配色 | 9 个独立槽位:标题、加粗、斜体、行内代码、列表标记、引用文字、引用竖线、链接、删除线 |
| 进程行高亮 | 给进程行上色——工具行一种颜色,摘要行另一种 |
| 文件卡片配色 | 重新给「edited N files」卡片的标题带上色,也给「delivered files」卡片的整个卡身上色 |
| 自定义配色 | 18 个槽位(8 个表面 / 3 个文字 / 7 个语法),每个都可调 |
| 预设 | 保存当前调色板,之后可重新载入,最多 12 个 |
| 玻璃界面 | 半透明面板浮在背景层之上(默认关闭) |
| 背景来源 | Windows 壁纸 / 图片 URL / 生成的渐变 / 程序化等高线(移植自 dsh-theme-endfield,MIT) |
| 表面着色 | 栏不透明度 0–100(默认 65;越低壁纸透出越多) |
| 浮层着色 | 卡片/菜单/输入框比栏更实多少(0–40) |
| 模糊半径 | 背景预模糊 0–80 px |
| 层级着色(折叠) | 三个独立的「比栏更实多少」旋钮:浮层 +0–40,代码块 +0–40,悬停 +0–20 |
| 区域层级(折叠) | 侧边栏 / 面板 / 预览 / 输入区的不透明度(0–100)和覆盖层模糊(0–80 px),各自独立或「跟随」 |
| 氛围调色板 | Aurora / Ocean / Sunset / Mono,或跟随表面颜色(仅渐变背景) |
| 背景亮度 | 0–100,50 = 中性。向左变暗,向右变亮;底色离开中性后逐渐淡出 |
| 底色(折叠) | 光晕 / 色带 / 混合模式。光晕:2–6 个光源,每个有自己的颜色、强度和 X/Y 位置;整体密度 0–100%。色带:2–6 条色条,每条自己的颜色,外加方向(165°/135°/90°/0°)和边缘柔和度 |
| 实心浮层 | 把历史消息和悬停预览弹窗固定为不透明(默认关闭) |
| 实心 diff | 把 diff 行背景固定为不透明——只改行颜色,卡片不动(默认关闭) |
| 背景适应 | 填充 / 适应 / 拉伸 / 平铺 / 居中 / 模糊填充——名称与 Windows 个性化设置一致 |
| 裁剪与文字保护(折叠) | 按比例裁剪壁纸(左/上/宽/高)+ 文字保护(光晕,不加背景色) |
| 自动色调 | 跟随壁纸平均亮度切换浅色/深色主题 |
| 高级(折叠) | 背景压暗(自动/固定/关闭)、饱和度 0–200%、雾化、自定义壁纸路径、图片 URL |
| 等高线速度 | 静态 / 1x / 2x / 4x;CSP 允许时在 Web Worker 中渲染,并显示后端说明 |
| 手绘形状 | 不均匀圆角、纸张阴影、悬停抬升和发光的侧边栏分隔线(默认关闭;机制借自 dsh-maid-whale-UI,不含美术资源) |
层级着色:三份可读性预算,而不是一份
玻璃有两种截然不同的职责。栏是装饰——想多透明就多透明。卡片、代码块和文件预览才是你 read,而且它们需要单独的预算:把表面色调拉低,看到你的壁纸,同时代码仍然清晰可读。
以前,这三个层级是硬编码常量(0.10 / 0.14 / 0.05)。现在它们是滑块,分层算法没有变:每一层只绘制自己所在层级与下一层之间的差值,因此屏幕上每个位置都会收敛到目标值,而不是叠加(1-(1-a)² 是朴素堆叠的结果——在 20% 时读作 36%)。
| 旋钮 | 范围 | 默认值 | 控制什么 |
| 浮动层色调 | 0–40 | 10 | 卡片、气泡、输入框、菜单 |
| 代码块色调 | 0–40 | 14 | 围栏代码——逐字符阅读,所以保持最实 |
| 悬停色调 | 0–20 | 5 | 悬停反馈;激活状态是它的 1.8 倍 |
区域层级:同样的思路,低一层
层级色调问的是一层高出列多少。区域层级问的是另一个问题:这块 UI 需要被阅读吗?
把表面色调拉低去欣赏壁纸,文件差异、统计浮层和输入框都会随之变淡。提高表面色调去阅读它们,整个界面就变实。两种需求冲突,所以这四个各有自己的值:
| 设置 | 范围 | 默认值 | 覆盖 |
| 面板不透明度 | 0-100 | 跟随* | 浮层、菜单、模态框、统计和成本面板 |
| 预览不透明度 | 0-100 | 跟随 | 文件差异、已编辑文件卡片、文档预览 |
| 遮罩模糊 | 0-80 px | 跟随 | 浮层、菜单、模态框背后 |
| 输入框不透明度 | 0-100 | 跟随 | 输入框、审批卡片、任务卡片 |
这四个的默认值都是「跟随」(-1),所以升级不会改变任何东西,直到你展开折叠并设置一个。以前遮罩模糊派生为 glassBlur + 10,无法调整。
输入框这里是透明度,不是模糊——有意与参考插件不同。我们做座位抬升(见 DESIGN.md):输入框被提升出滚动流,所以内容在它的上边缘物理裁剪。它背后没有实时内容,所以那里的 backdrop-filter 只会带来包含块副作用(固定定位的工具提示漂移),零视觉收益。那个滤镜在 2026-10-22 被有意移除,现在有测试锁定它。
环境调色板
glassAmbientAccent 选择渐变背景的色系——Aurora / Ocean / Sunset / Mono,或跟随表面颜色(默认)。它与强调色分开,后者驱动按钮、链接和状态高亮:你可以保持 Mariana 青色的界面配日落背景。仅在背景源是渐变时适用——照片或等高线图没有环境光可着色。
壁纸适应和裁剪
background-size: cover 曾是硬编码。现在有五个选项,匹配 Windows 自己的壁纸设置——填充、适应、拉伸、平铺、居中。平铺很重要:一张 512 px 的纹理壁纸,在 cover 模式下放到 4K 显示器上会被放大 8 倍。
裁剪用比例表示,不用像素({x, y, w, h},整张图 =
0,0,1,1),所以改分辨率或窗口大小都不用重算。
越界的框保留宽高,把左上角往回推,而不是压扁——框停在边缘,像桌面裁剪工具。
裁剪是 canvas 的真正重绘,不是 background-position 小把戏:百分比偏移只对 Fill 有效,Tile/Center 会露出整张原图。
文字保护:只加光晕,绝不加背景
UI 后面有照片时,容易想到的修法是「把表面做得更实」——但这会悄悄覆盖用户选好的透明度。有人可能故意用 5% 表面着色、模糊设 0,就为了看见壁纸。
所以文字保护不动背景一个像素。它做两件事:
1. 加一层 text-shadow 光晕,方向和主题一致(浅色主题白色,深色主题黑色)。这是可继承属性,放在 body 上就能覆盖侧边栏、标题栏、输入框和任何 portal 渲染的浮层。1 px 实 + 2 px 柔 + 3 px 更柔是描边,不是发光——再大文字就糊了,反而更糟。
2. 把次级文字 token 调暗一档(label-secondary / tertiary / caption)。这一步不能省:浅灰文字加光晕会让对比度更差(灰字配白光晕),所以文字本身必须动。只改明度——不改字号字重,不会引起重排。
内联 SVG 图标用 currentColor,会跟着变。
自动色调:跟随壁纸亮度
文字颜色跟随主题模式(深色主题 = 浅色文字),但壁纸亮度和模式无关。浅色主题下换成深色壁纸,深色文字就落在深色照片上——光晕和调暗的 token 都救不了方向错的问题。
所以插件在 32×32 采样上测量裁剪区域的平均相对亮度(0.2126R + 0.7152G + 0.0722B,sRGB 线性化):
| 平均亮度 | 动作 |
| < 0.42 | 切到深色 |
| > 0.58 | 切到浅色 |
| 0.42–0.58 | 不动(混合图像来回翻转很晃眼) |
它遵循三条规则:
- 调用官方 themeService.setTheme(),绝不写 data-ds-dark-theme——改属性不会动宿主内部的调色板和组件状态,下次主题切换还会把它覆盖掉。
- 只碰内置的 light / dark / system。如果你选了第三方主题 id,它不会切换(setTheme('dark') 会顶掉你的主题)。
- 切换前把原偏好记进 glassBaseTheme(持久化),移除图片或关掉开关时恢复。如果你期间自己改了模式,它只清掉基线,不覆盖你的选择。
LaTeX 有了专用高亮器。 Sublime 自带的 LaTeX.sublime-syntax 和 TeX.sublime-syntax 被整体移植,跑在一个小型 TextMate 引擎上,再用 Mariana.sublime-color-scheme 里的规则上色——所以 LaTeX 的效果和 Sublime 逐字符一致,而不是近似:反斜杠单独是青色,每个花括号都是青色(包括 \zh{ 这类用户宏之后的花括号),数学内置命令是紫色,自定义宏是蓝色,数字橙色,= + - 橙红色,标识符白色斜体。为什么靠猜 Shiki 的 token 永远做不到这一点,见 docs/DESIGN.md。
其余部分沿用 Shiki 的 token。Python 内置函数(print、len、open)用 Mariana 的 var(blue)(#6699CC)——也就是 Sublime 给 support.function 的颜色。Shiki 把这个 scope 和 entity.name.function 合并成单个 token,所以函数调用和 Sublime 一致,但函数定义名在这里也是蓝色。
Markdown 补上 Sublime 的 markup. 细节:列表标记用 var(green),引用块文字用 var(orange),行内代码带底色。
18 个自定义颜色槽位
| 分组 | 槽位 |
| 表面(8) | base、panel 1/2/3、overlay menu、sidebar、code block、bubble/input |
| 文字(3) | body、secondary、tertiary |
| 语法(7) | strings、functions/punctuation、links/calls、keywords、errors/constants、numbers/cursor、find highlight |
改槽位有三种方式:点色块打开系统取色器,在色块下方输入十六进制值,或者直接粘贴一个。
重置为默认会清掉该项覆盖——只有真正和默认值不同的槽位才会写进你的配置档,所以随便点几下不会把 18 个槽位全钉死。
实时对比度警告:正文文字和背景的对比度低于 4.5:1 时,设置面板会报出实测比值,并建议 ≥ 7:1。这个数字按真实 WCAG 对比度计算,不是估算。
预设
起个名字按 Save,就能存下当前的表面变体、强调色和全部自定义槽位。每个预设显示五个色块(surface / body / accent / keyword / string),一眼就能区分。
- 用已有名字保存会覆盖它
- 最多 12 个预设——它们存在你配置档的 YAML 里
- 每个预设带时间戳(「刚刚 / N 分钟前 / MM-DD HH:mm」)
- 和当前配色一致的预设会标为使用中*
- 重置为默认不会删除你的预设——那是你自己的成果;重置只动当前配色
三个独立的高亮开关
| 开关 | 作用范围 | 机制 |
| 代码配色 | 仅围栏代码块 | 覆盖 --shiki-,由 Shiki 的内联 样式消费 |
| 正文高亮 | 仅 Markdown 正文 | 注入样式表,作用于宿主的 markdown 容器 |
| 进程行高亮 | 仅进程条目(write / edit / run command) | 注入样式表,作用于 data-variant 行 |
关掉一个不影响其他两个。
正文亮度
| 角色 | 原始 | 增强(默认) | 更亮 |
| 标题 | #5FB3C3 4.51:1 | #7CC1C1 5.39:1 | #92CBCB 6.11:1 |
| 粗体 | #F9AE58 5.90:1 | #FABD76 6.63:1 | #FBC88D 7.23:1 |
| 斜体 / 引用 | #A7ADBA 4.91:1 | #B7BCC6 5.80:1 | #C3C7D0 6.52:1 |
| 行内代码 | #99C794 5.76:1 | #ABD1A7 6.52:1 | #BAD9B6 7.20:1 |
| 链接 | #80AAD5 4.54:1 | #97B9DD 5.42:1 | #A9C5E2 6.19:1 |
| 删除线 | #EC5F67 3.36:1 | #EF7C82 4.14:1 | #F29298 4.91:1 |
(对比度以 #343D46 为基准测量;更深的表面变体得分更高。)
只提亮深色值——在浅色外观下,向白色插值反而会降低对比度。代码块和界面表面不受影响。
过程行高亮
两种颜色,三个目标。摘要和展开内容保持不变。
| 目标 | 示例 | 默认 |
| 工具行 | write / edit / run command | 浅绿 #7EE787 |
| 摘要行 | ran a command, wrote files, analysing your request | 浅琥珀 #FAC863 |
| 回合摘要 | "Done, took 1m 20s" | 浅琥珀 #FAC863 |
可选 10 个类别(分为摘要行和工具行两组),默认启用 5 个。两种颜色均可独立调整。
诊断行:出问题前一直隐藏
设置面板过去带一排状态标签(通道 / token 数 / 正文 / 外观 / 配置)。一切正常时这些只是噪音,所以去掉了:一切正常时面板什么都不显示,出问题时只显示一行大白话警告——回退到样式通道、配置不可写(「更改仅本次会话有效」)、玻璃层挂载失败。启动时的瞬态问题不会闪黄。
低频控件现在收在 折叠里(正文预览 + 9 个槽位、玻璃「高级」、完整的 18 槽位调色板),每个折叠在标题里概括自己的状态,例如「已自定义 18 个中的 3 个」。
设置面板本身目前只有中文。 主题、你输入的预设名称以及其他一切都不依赖语言。
已知限制
- 终端 ANSI 16 色不随主题变化。 宿主没有把 xterm ANSI 调色板暴露为设计 token,插件也够不到 xterm 实例,所以只有终端背景、前景、光标和选区跟随主题。
- 正文高亮依赖宿主的类名前缀。 它匹配 [class="_markdown_"];前缀来自宿主源文件名,跨构建稳定,但如果宿主重命名那个 CSS Module 文件,规则就不再匹配——正文回退为单一颜色,且不报错。
- 正文高亮不覆盖半解析的 Markdown。 流式输出时 DOM 结构不变,规则仍然生效,但未闭合的 * 在写了一半时不会着色。
- 圆角默认不动。 字体仍由 dsh-font-probe 负责。
可选的 手绘形状 开关确实会重设圆角与阴影 —— 默认故意关闭,而且只作用于具名表面(输入卡、对话框、菜单、代码块、识别出的卡片),从不做全树扫描。
- 浅色变体并非原版 Mariana。 Mariana 本身只有深色;浅色值是同色相提亮的派生色,放进来是为了让「同时应用到两者」模式不至于刺眼。
- 自定义颜色只覆盖深色外观。 浅色没有自定义槽位 —— 这是故意的,免得在深色背景上挑的颜色到了浅色背景上变得看不见。
- 预设以 YAML 字符串形式存在你的配置档里。 12 个预设的上限让这份数据保持有界。如果你手动编辑 cordis.patch.yml 弄坏了 presets 字段,插件会安全地当作「没有预设」处理 —— 不抛异常,也不丢东西,只是预设不再显示,直到你修好 YAML。
设计说明
实现细节 —— token 覆盖怎么生效、两个通道为什么存在、宿主 CSS 特异性如何逐条规则匹配、一处写入竞态条件如何被发现并修复 —— 都放在 docs/DESIGN.md(中文)。
测试 sh
npm test # 14 suites, offline
npm run check # syntax check
许可证
MIT。Mariana 配色源自 Sublime Text(Sublime HQ Pty Ltd,配色方案作者 Dmitri Voronianski)。本插件是把该配色作为 DSH 设计 token 的独立重实现;与 Sublime HQ 无隶属关系,也未获其背书。
可选的等高线背景移植自 dsh-theme-endfield
(MIT,(c) yunxiiQwQ)—— 只取核心管线(field → marching squares → stitch →
smooth → draw),保留其原有注释与实测常量;不包含该项目的任何美术资源。
DeepSeek Harness 对话界面的配色主题插件。内置 Sublime Text 的 Mariana 配色作为默认预设,并在其上提供一套配色引擎:18 个可调颜色槽位、9 个正文 Markdown 角色色、配色方案存取、实时 WCAG 对比度提示、深浅两种模式 ——全部在设置页里完成,配置持久化到 profile。
dsh-colorlab 下的对话界面
过程条目按类型上色(工具行亮绿、汇总行亮黄),标题与行内代码着色,界面底色是 Mariana 的冷调蓝灰而不是纯黑。
玻璃界面(可选)
打开「玻璃界面」后,三列变成盖在背景层上的半透明面板 —— 背景可以是 Windows 桌面壁纸、程序生成的渐变光斑、或等高线(移植自 dsh-theme-endfield 的地形线)。模糊只做一次、做在背景层自己身上,所以所有面板"看到"的是同一张糊好的底;每一层只涂自己档位与下层之间的差值,卡片永远比正文列实一档,列永远保住主题色而不是被冲淡。
玻璃界面:壁纸背景 + 半透明面板 + 等高线选项
截图:开玻璃 + 壁纸背景。侧栏、会话区、右栏读起来是一整张 tinted 玻璃;输入卡被硬裁在滚动内容之上,正文不会从卡片底下穿帮。
背景地面:光晕 / 分割 / 叠加
生成的渐变背景本身是一套小型合成器。可选 光晕(柔和彩色雾,无边界)、分割(按角度切开的色带)或 叠加(两者都有),然后自己给每个元素上色:
- 光晕 —— 2–6 个光源,每个独立调颜色、强度、X/Y 位置,另有整体浓度(0–100%)与扩散范围(40–140%)。
- 分割 —— 2–6 条色带,每条独立选色,切割角度 0–360° 任意调,边缘柔和滑块控制硬边还是渐隐。
渐变背景:多层光晕
截图:生成式渐变背景的光晕模式 —— 几团柔和彩色光叠在主题底色上,不涉及任何壁纸。
等高线背景
第三种背景来源是程序生成的:一张等高线地形图,在独立线程里渲染。速度、线条浓度、粗细、地形密度、等高线层数、漂移幅度、可选的高程标注都可以调;速度设成 静止 时只画一帧,之后完全不重绘,零开销。
程序生成的等高线背景
截图:等高线模式。地形线由强调色派生,上面的面板保持半透明。
它不改 app.asar,不补包,不 fork 宿主 —— 它走 DSH 官方的主题扩展点(ctx.theme.overrideTokens),把令牌叠加在当前主题之上。
安装 sh
dsh plugin add ruegg114514/dsh-colorlab
从源码安装,首次运行 DSH 会要求你授权该包的构建步骤(allowBuilds)。
装完重启 DSH —— loader 在启动时装载插件。
卸载 sh
dsh plugin remove ruegg114514/dsh-colorlab
或者直接在设置页把「启用」关掉:立即回退到宿主默认配色,无需重启,已保存的颜色不会丢。
版本
每个版本都在 releases 页面打标签并写更新说明;逐版本细节见 CHANGELOG.md。
上面那条命令永远装 main 的最新提交。想固定到某个版本: sh
dsh plugin add ruegg114514/dsh-colorlab#v1.1.0
版本号遵循 SemVer。2.0 之前,次要版本仍可能改变某个设置项的样子 —— 真改了的话,CHANGELOG 的 Changed 一节会写明。
它改了什么
Mariana 是 Sublime Text 3.0(2017)起及 Sublime Text 4 的默认配色,底色是冷调蓝灰 #343D46 而不是纯黑,前景是柔和的灰 #D8DEE9 而不是纯白 ——长时间用下来没那么刺眼。
| 位置 | 效果 |
| 界面底色 / 卡片 / 侧栏 / 菜单 | #343D46 / #2F3841 / #23292E |
| 正文 / 次级 / 三级文字 | #D8DEE9 / #A7ADBA / #8792A2 |
| 边框与分隔线 | #D8DEE9 的低透明叠加 |
| 气泡 / 输入 / 代码块 | #3B454F / #2E363F |
| 状态色 | 成功 #99C794、错误 #EC5F67、警告 #F9AE58 |
| 代码语法高亮 | 关键字 #C594C5、字符串 #99C794、函数 #5FB3B3、数字 #F9AE58、注释 #8792A2 |
| 侧栏终端 | 底色与光标跟随主题 |
设置页
设置 → ColorLab:
| 项 | 说明 |
| 启用 | 关掉立即回退宿主配色,设置保留 |
| 套用范围 | 「仅深色外观」(默认)/「深浅都套用」 |
| 背景变体 | 标准 #343D46 / 深 #252B32(ST3 早期 tmTheme 那档)/ 中间 #2B3336 |
| 强调色 | 青 #5FB3B3 / 橙 #F9AE58 / 蓝 #6699CC,只影响业务态高亮 |
| 代码高亮色板 | 覆盖代码块内 Shiki 的 --shiki- 色板 |
| 正文高亮 | 给 Markdown 正文加颜色层次(标题、加粗、行内代码、列表标记、引用竖线) |
| 正文高亮亮度 | 原值 / 提亮(默认)/ 更亮。在原色基础上朝白插值,色相不动 |
| 正文高亮预览 | 紧跟开关,直接展示开/关两种效果 |
| 正文颜色 | 9 个独立槽位:标题、加粗、斜体、行内代码、列表标记、引用文字、引用竖线、链接、删除线 |
| 过程行高亮 | 工具行一个颜色、汇总行另一个颜色 |
| 文件卡片颜色 | 「已编辑 N 个文件」卡片的头部横带,以及「交付文件」卡片的整张底色 |
| 自定义配色 | 18 个槽位(界面底色 8 / 文字 3 / 语法色 7),逐个调 |
| 配色方案 | 把当前配色存成方案,随时载入,最多 12 套 |
| 玻璃界面 | 三列变半透明面板,透出背景层(默认关) |
| 背景来源 | 桌面壁纸(跟随 Windows 当前壁纸)/ 图片链接 / 渐变(配色派生光斑)/ 等高线(程序生成的地形线,移植自 dsh-theme-endfield,MIT) |
| 表面浓度 | 三列透明度 0–100(默认 65;越低壁纸越明显,主题色越淡) |
| 浮层浓度 | 卡片/菜单/输入框比底板"实"多少(0–40) |
| 模糊半径 | 背景层预模糊 0–80px |
| 分层浓度(折叠) | 三档「比三列实多少」独立可调:浮层 +0–40、代码块 +0–40、悬停 +0–20 |
| 按区域独立档(折叠) | 侧栏 / 信息面板 / 文件预览 / 输入卡浓度(0–100)与浮层模糊(0–80px),各自可调或「跟随默认」 |
| 氛围光配色 | 极光 / 海洋 / 落日 / 单色,或跟随表面色(仅渐变背景) |
| 背景亮度 | 0–100,50 = 中性。往左压暗、往右提亮;离开中性时地面自动淡出 |
| 背景地面(折叠) | 光晕 / 分割 / 叠加 三种模式。光晕:2–6 个光源,每个自选颜色、强度、X/Y 位置;整体浓度 0–100%。分割:2–6 条色带,每条自选颜色,另有方向(165°/135°/90°/0°)与边缘柔和 |
| 浮层改实心 | 历史消息 / 悬停预览浮层钉成不透明(默认关) |
| diff 区域改实心 | diff 增删行底色钉成不透明 —— 只改行色,不动卡片(默认关) |
| 摆放方式 | 填充 / 适应 / 拉伸 / 平铺 / 居中 / 模糊填充 —— 与 Windows 个性化里的同名选项一致 |
| 壁纸裁剪与文字保护(折叠) | 按比例裁剪壁纸(左/上/宽/高)+ 文字保护(光晕,不加任何底色) |
| 跟随图片明暗 | 按壁纸平均亮度自动切浅色/深色主题 |
| 高级(折叠) | 背景压暗(自动/固定档/关)、饱和度 0–200%、白雾、自选壁纸路径、图片链接 |
| 等高线速度 | 静止 / 1x / 2x / 4x;能起 Web Worker 时在主线程外渲染,设置页副标题会显示实际后端 |
| 手绘造型 | 四角不等宽的圆角(手绘感)、纸片式双层投影、悬停微抬、侧栏右缘渐隐发光线。默认关,与玻璃界面互相独立(机制借鉴 dsh-maid-whale-UI,不含其美术) |
分层浓度:三个可读性预算,而不是一个
玻璃其实在做两件性质不同的事。三列是装饰,可以透到看不清;卡片、代码块、文件预览是要读字的地方,它们需要另一份预算 ——把表面浓度拉低去看壁纸,代码不该跟着糊掉。
这三档原来是写死的常量(0.10 / 0.14 / 0.05),现在是滑块。
分层算法没变:每层只涂自己档位与下层之间的差值,所以全窗任何位置的最终合成都收敛到目标,而不是连乘爆炸(朴素叠加会得到 1-(1-a)²,
a=20% 时实际是 36% —— 滑块就对不上了)。
| 旋钮 | 区间 | 默认 | 管什么 |
| 浮层增量 | 0–40 | 10 | 卡片、气泡、输入卡、菜单 |
| 代码块增量 | 0–40 | 14 | 围栏代码块 —— 要逐字读,所以始终最实 |
| 悬停增量 | 0–20 | 5 | 悬停反馈;按下态自动取它的 1.8 倍 |
按区域独立档:同一思路再下一层
「分层浓度」问的是离底板多远,这一组问的是另一个问题:这块 UI 要不要读字?
把表面浓度拉低去看壁纸时,文件 diff、统计弹层、输入卡会跟着一起糊;为了看清它们把表面浓度拉高,整个界面又一起变实。两个需求打架,所以这四项各有自己的值:
| 设置 | 区间 | 默认 | 管哪几处 |
| 信息面板浓度 | 0-100 | 跟随 | 弹层、菜单、Modal、统计/费用面板 |
| 文件预览浓度 | 0-100 | 跟随 | 文件 diff、已编辑文件卡、文档预览 |
| 浮层模糊 | 0-80 px | 跟随 | 弹层/菜单/Modal 背后那层 |
| 输入卡浓度 | 0-100 | 跟随 | 发送框、审批卡、任务卡 |
四项默认都是「跟随」(-1),所以不打开这个折叠块时,行为与升级前完全一致。
原来浮层模糊是从 glassBlur + 10 硬算出来的,没法单独调。
输入卡这一项在我们这里管的是浓度,不是模糊 —— 与参照插件有意不同。
我们做了 seat lift(见 DESIGN.md):输入卡被抬出滚动流,内容物理硬断在卡片上沿,背后没有活文字。所以在卡片上挂 backdrop-filter 只会买到「成为 fixed 后代包含块 → tooltip 坐标漂移」这个副作用,视觉收益为零。
那层 filter 在 2026-10-22 就已经删掉,现在有测试锁着它不许回来。
氛围光配色
glassAmbientAccent 决定背景光斑的色系 —— 极光 / 海洋 / 落日 / 单色,或者「跟随表面色」(默认)。它与强调色是两件事:强调色管按钮、链接、状态高亮,这一项只管背景。想让界面保持 Mariana 青、背景却是落日橙,用它。
只在背景来源 = 渐变时生效 —— 壁纸和等高线没有「氛围光」可上色。
改实心:两处「不是浓度问题,是层级问题」
玻璃下有两类东西天然读不了,它们调浓度也救不回来:
① 历史消息 / 悬停预览浮层 —— 它们是 position:fixed 的普通(宿主 ._float_ / ._preview_),没有 role 属性,所以压不到 [role="dialog"] 那组规则;而它们浮在正文之上、背后是活文字,半透明下只靠模糊挡不住,结果就是字压字。
② diff 区域 —— 宿主的增删行底色是变量,而且本身就带 alpha: --dsw-alias-code-diff-added: #99C7941F(仅 12%)。玻璃模式下卡片本身也半透明,12% 的淡绿/淡红压在透明底上几乎不可辨。
两个开关默认关(保持玻璃观感),打开后:
| 开关 | 做什么 | 刻意不做什么 |
| 浮层改实心 | [class="_float_"] / [class="_preview_"] 钉成不透明实色,并撤掉 backdrop-filter | 不碰卡片、不碰正文列 |
| diff 区域改实心 | 只把 --dsw-alias-code-diff-added/deleted 换成不透明实色(保留绿/红色相语义) | 不动卡片、不动代码块 —— 只改行底色 |
diff 那一项严格只改两个变量、不写任何容器选择器,因为用户明确说过「只动 diff 区域,不要动卡片本身」。glass.test 有断言锁这条,
变异测试验证过:往规则里塞一个 [class="_card_"] 会立刻变红。
背景地面:光晕 / 分割(2026-10-23 第五轮)
背景地面重做。原来只有三团写死的灰蓝光斑(alpha 0.9,几乎不透明),叠起来就是一片纯色。现在三种模式、每个颜色都能自选。
光晕(glassGroundMode = 'glow') —— 几团柔和的彩色雾,没有边界、没有方向:
| 参数 | 范围 | 说明 |
| 光源数量 | 2–6 | 每个光源一行 |
| 每个光源:颜色 | 任意 hex | 点色块开系统取色器 |
| 每个光源:强度 | 0–100% | 0 = 该光源不生成 |
| 每个光源:X / Y | 0–100 | 百分比坐标,0,0 = 左上角 |
| 整体浓度 | 0–70% | 所有光源的总 alpha |
| 扩散范围 | 40–140% | 光团半径缩放 |
分割('bands') —— 按角度切开的色带,有明确方向:
| 参数 | 范围 |
| 方向 | 165° / 135° / 90°(竖直)/ 0°(水平) |
| 色带数量 | 2–6,每条自选颜色 |
| 边缘柔和 | 0 = 硬边斜切,越大过渡带越宽 |
叠加('blend') —— 两者都有,分割在下、光晕在上。
关键实现约束:光晕模式只能生成 radial-gradient,分割模式只能生成 linear-gradient。测试有正反两条断言锁死 —— 混层会让「光晕」看起来还是切割(这正是预览第一版的 bug)。
背景亮度与地面光斑(2026-10-23)
参照 dsh-catppuccin-theme 的 ambient ground 机制补齐。
背景亮度(glassBrightness,0–100,50 = 中性) —— 双向调节地面底色:
| 值 | 效果 |
| 0 | 纯黑 |
| 20 | 压暗 |
| 50 | 原样(默认) |
| 80 | 提亮 |
| 100 | 纯白 |
为什么必须双向:我们原来只有 glassVeil,它只能压暗。
浅色主题下「想让背景更亮一点」是个真实需求,单向旋钮做不到。
联动淡出:亮度离开中性越远,三团光斑越淡 —— 拉到两端时完全消失,退化成纯色。这是一个滑块两个作用:调亮度顺带把渐变收掉,不会出现「提亮后渐变还是那么重」的观感冲突。
公式等价于参照插件的 --dsh-glass-ambience: calc(1 - |b−50|/50): js const ambience = Math.max(0, 1 - Math.abs(pct - 50) / 50)
// 光斑 alpha 全部乘以 ambience
地面光斑(glassGlow,默认开) —— 关掉后三团径向渐变消失,只剩纯色底 + 一层极轻的 165° 方向渐变(避免整屏死板)。
⚠️ 关掉光斑必须保留实色底 —— 只留渐变会让背景变透明,露出 Electron 窗口的黑底。glass.test 有断言锁这条。
壁纸图片链接(2026-10-23)
背景来源除了「桌面壁纸 / 渐变 / 等高线」,还可以直接填一个 http/https 图片地址。
为什么必须由 Host 代拉,而不是页面直接 :
1. CSP / 跨域 —— 页面跑在 dsh-app:// 协议下,外站图片既可能被 CSP 拦,也可能因为没有 CORS 头而无法被 canvas 读取(我们还要做裁剪和亮度采样);
2. 统一大小与超时 —— 外部图片可能几十 MB,或服务器根本不响应;
3. 失败语义一致 —— 和本地路径一样返回 404,页面自动退回渐变。
安全边界:
| 约束 | 值 | 为什么 |
| 协议 | 只允许 http: / https: | file:// 能读任意本地文件;data: 能绕过大小限制 |
| 大小 | 24 MiB(content-length 预检 + 实际字节兜底) | 有些服务器不给 content-length |
| 超时 | 8 秒(AbortController) | 服务器不响应时不能挂死 |
| 重定向 | follow,但最终 URL 仍须是 http(s) | 防跳到 file:// |
| 类型 | 魔数嗅探,非图片一律拒绝 | 防把 HTML 错误页当壁纸 |
优先级与回落:填了 URL 就优先于本地路径(它更明确是「我就要这张」);拉取失败不直接报错,继续走本地路径 → 系统壁纸 → 渐变。
Host 侧有 60 秒缓存,同一 URL 不会每次 applyNow 都出网。
任意强调色 / 模糊填充 / 侧栏独立浓度(2026-10-23 第四轮)
三项能力参照 dsh-dream-skin 补齐。
任意强调色(accentCustom) —— 预设三色之外想要别的颜色时,取色盘 / 输入 hex / 随机三选一。给了合法 #RRGGBB 就优先于预设,由 resolveAccent() 派生四档:
| 档位 | 派生规则 | 为什么 |
| dark | 原色 | 深色主题直接用 |
| darkSoft | 原色 + 33% alpha | 与预设的 55 后缀一致 |
| light | 各通道 × 0.78(压暗) | 浅色主题下与浅底拉开对比 |
| lightSoft | 压暗后 + 20% alpha | |
预设里深/浅两档是手调过的(浅色要压暗才够对比)。自定义色如果深浅共用同一个值,浅色主题下会比周围暗一档、看着脏 —— 所以必须派生。
模糊填充(glassFit = 'blur') —— 整图完整显示(contain), 留白处用同一张图放大模糊铺底,而不是一块死板的纯色。
照片/视频壁纸最常用的一档。
⚠️ 实现上必须是两层独立元素:filter 是元素级属性,CSS 的 background 简写没法「只糊第一层」。所以出血层做成独立 (position:fixed; inset:-40px; z-index:-1; filter:blur(48px)),插在壁纸层之前。不能把 blur 挂在壁纸层自己身上 —— 那会把上层清晰的 contain 图一起糊掉。glass.test 有断言锁这条。
侧栏独立浓度(glassSidebarOpacity) —— 侧栏和正文列是两种视觉权重:
- 有人要侧栏实(导航一眼看清)、正文列透(看壁纸)
- 也有人反过来(侧栏融进壁纸当装饰、正文列保住可读性)
一个滑块管两列时这两种需求都满足不了。默认 -1 = 跟随 glassTint,所以不设它时行为与升级前完全一致。
壁纸摆放与裁剪
原来 background-size 写死 cover,现在是五种,与 Windows 自己的壁纸设置同名:填充 / 适应 / 拉伸 / 平铺 / 居中。平铺这项有意义:一张 512px 的纹理壁纸在 cover 下会被放大 8 倍糊掉。
裁剪坐标是比例不是像素({x, y, w, h},整图 = 0,0,1,1),
换分辨率、换窗口大小都不用重算。越界的框会保持宽高、把左上角往回推,而不是把框压扁 —— 框被挡在边上停住,和桌面裁剪工具的手感一致。
裁剪是 canvas 真的重画一张新位图,不是 background-position 位移模拟:百分比位移只对「填充」成立,平铺/居中会露出整张原图。
文字保护:只加光晕,绝不加底色
壁纸铺满整窗后,最自然的修法是「把表面调实一点」—— 但那等于悄悄改掉用户调好的透明度。有人就是要把表面压到 5%、模糊调到 0 来看壁纸。
所以文字保护背景一个像素都不动,只做两件事:
1. text-shadow 光晕,方向与明暗一致(浅色白晕、深色黑晕)。它是可继承属性,挂在 body 上就能覆盖侧栏、顶栏、输入框,以及 portal 到 body 的浮层。
1px 实边 + 2px 柔边 + 3px 更柔,是「描边」不是「发光」—— 再大就让字发虚,反而更不清楚。
2. 把次要文字 token 加深一档(label-secondary / tertiary / caption)。
这步不能省:光晕压在浅灰字上会让对比度更差(灰字 + 白晕),必须把字本身改深。只改明度,不动字号字重,所以不会引起重排。
内联 SVG 图标用 currentColor,会跟着一起变清楚。
跟随图片明暗:让文字方向和图片对上
文字颜色跟主题模式走(深色主题 = 浅字),但壁纸的明暗和模式无关。
在浅色主题下换一张暗壁纸,深色字就压在暗图上 —— 光晕和加深 token 都救不了「方向错了」。
所以插件测量裁剪后区域的平均相对亮度 (0.2126R + 0.7152G + 0.0722B,做 sRGB 线性化)在 32×32 采样上:
| 平均亮度 | 动作 |
| < 0.42 | 切到深色 |
| > 0.58 | 切到浅色 |
| 0.42–0.58 | 不切(明暗参半的图来回切会晃眼) |
三条纪律:
- 走官方 themeService.setTheme(),不改 data-ds-dark-theme 属性 ——改属性宿主内部的调色板与组件状态不会跟着变,而且下次主题变更就被覆盖;
- 只动内置的 light / dark / system。如果你选的是第三方主题 id,
它不会切(setTheme('dark') 会把你的主题顶掉);
- 切换前把你原来的偏好记进 glassBaseTheme(落盘),删图或关开关时还原。
如果你中途自己改过明暗,它只清基准、不覆盖你的选择。
LaTeX 走专门的高亮通道。 直接把 Sublime 的 LaTeX.sublime-syntax 与 TeX.sublime-syntax 整份移植过来,用一个小型 TextMate 引擎跑分词,再套 Mariana.sublime-color-scheme 的规则上色 —— 所以 LaTeX 是逐字符 对齐 Sublime,而不是"近似":反斜杠单独是青色、所有花括号都是青色
(\zh{ 这类自定义宏后面也是)、数学内置命令紫而自定义宏蓝、数字橙、
= + - 橙红、标识符白斜体。为什么"猜 Shiki 的令牌"永远到不了这一步,见 docs/DESIGN.md。
其余语言仍走 Shiki 的令牌。Python 内置函数(print len open)用 Mariana 的
var(blue)(#6699CC),与 Sublime 里 support.function 的颜色一致 ——
Shiki 把 support.function 和 entity.name.function 合并成同一个令牌,所以函数调用与 Sublime 一致,函数定义名则也是蓝色。
Markdown 会补上 Sublime 的 markup. 细节:列表符号 var(green) 绿、引用正文 var(orange) 橙、行内代码加淡色底。
18 个自定义槽位
| 分组 | 槽位 |
| 界面底色(8) | 主背景、面板一/二/三层、浮层菜单、侧栏、代码块、气泡输入框 |
| 文字(3) | 正文、次级文字、三级文字 |
| 语法色(7) | 字符串、函数/标点、链接/调用、关键字、错误/常量、数字/光标、查找高亮 |
三种改法:点色块开系统取色面板、在下面直接输 hex、或粘贴色值。
改回默认会自动清除该覆盖 —— 存进 profile 的只有「偏离默认」的那几项,不会因为点过一圈就把 18 项全写进去。
实时对比度提示:正文与背景的对比度掉到 4.5:1 以下时,设置页会提示「正文与背景对比度只有 x.xx:1(建议 ≥ 7:1),可能看不清」。这个数字是当场算的 WCAG 对比度,不是估算。
配色方案
输入名字点「保存」,就把当前背景变体 + 强调色 + 全部自定义槽位存成一套。
列表里每套显示 5 个色点(背景/正文/强调/关键字/字符串)方便辨认。
- 同名保存 = 覆盖
- 上限 12 套(存在 profile 的 YAML 里)
- 每套带保存时间:「刚刚 / N 分钟前 / MM-DD HH:mm」
- 与当前配色一致的方案显示「使用中」
- 「恢复默认配色」不会删掉已保存的方案 —— 那是你的资产
三个高亮开关互不影响
| 开关 | 范围 | 机制 |
| 代码高亮色板 | 只有围栏代码块 | 覆盖 --shiki- |
| 正文高亮 | 只有 Markdown 正文 | 注入样式表,命中宿主 markdown 容器 |
| 过程行高亮 | 只有过程条目 | 注入样式表,命中 data-variant 行 |
正文高亮亮度
| 角色 | 原值 | 提亮(默认) | 更亮 |
| 标题 | #5FB3C3 4.51:1 | #7CC1C1 5.39:1 | #92CBCB 6.11:1 |
| 加粗 | #F9AE58 5.90:1 | #FABD76 6.63:1 | #FBC88D 7.23:1 |
| 斜体 / 引用 | #A7ADBA 4.91:1 | #B7BCC6 5.80:1 | #C3C7D0 6.52:1 |
| 行内代码 | #99C794 5.76:1 | #ABD1A7 6.52:1 | #BAD9B6 7.20:1 |
| 链接 | #80AAD5 4.54:1 | #97B9DD 5.42:1 | #A9C5E2 6.19:1 |
| 删除线 | #EC5F67 3.36:1 | #EF7C82 4.14:1 | #F29298 4.91:1 |
(对比度在 #343D46 上算;背景越暗数字越高。)
只提亮深色值 —— 浅色外观是深字浅底,朝白插值会降低对比度。
代码块与界面底色完全不受影响。
过程行高亮
两种颜色、三类目标,摘要与展开内容不变。
| 目标 | 例子 | 默认色 |
| 工具行 | 写入 / 编辑 / 运行命令 | 亮绿 #7EE787 |
| 汇总行 | 执行了命令、已写入文件 / 正在分析请求 | 亮黄 #FAC863 |
| 本轮汇总 | 已完成,用时 1 分 20 秒 | 亮黄 #FAC863 |
10 个分类可勾选(分「汇总行」「工具行」两组),默认选中 5 项。
两个颜色各自独立可调。
一条只在出事时才出现的诊断行
设置页顶部原来有一排状态芯片(通道/令牌数/正文/外观/配置)——健康状态下那是纯噪音,已经退役。现在一切正常时什么都不显示;真出事才出现一行人话("回退到样式表通道"、"改动只在本次会话生效"、"背景层未建立"),启动瞬态不会闪黄字。
低频控件收进了 折叠块(正文预览+9 槽、玻璃「高级」、完整 18 槽调色板),折叠标题右侧带状态摘要,比如「已自定义 3 个」。
设置页文案目前只有中文。 主题本身、配色方案名称等与语言无关。
已知限制
- 终端 ANSI 16 色不变。 宿主没有把 xterm 的 ANSI 调色板暴露成设计令牌,插件也拿不到 xterm 实例,只能保证底色 / 前景 / 光标 / 选区跟随主题。
- 正文高亮的选择器依赖宿主类名前缀。 用 [class="_markdown_"] 匹配,前缀来自宿主源文件名,跨构建稳定;但宿主若重命名那个 CSS Module 文件,规则会失配 —— 表现是正文退回同色,不会报错。
- 正文高亮不覆盖流式渲染中的半截 Markdown。 DOM 结构相同所以规则照常命中,但未闭合的 ** 在半截状态下不会被着色。
- 默认不改圆角与字体。 字体是 dsh-font-probe 的职责;可选的「手绘造型」开关会改圆角与投影 —— 刻意默认关,且只点名已知表面(输入卡/对话框/菜单/ 代码块/检测到的卡片),不做全树扫描。
- 浅色变体不是 Mariana 原版。 Mariana 本身只有深色版,浅色值是同色相提亮的自制品,只为「深浅都套用」模式下不刺眼。
- 自定义配色只覆盖深色。 浅色没有对应槽位 —— 刻意的,避免把深色下挑的颜色搬到浅色底上变成看不见的字。
- 配色方案存在 profile 的 YAML 字符串里。 12 套上限是为了不让它无限膨胀。
如果手改 cordis.patch.yml 把 presets 写坏,插件会安全地当成「没有方案」,不抛错也不丢数据,只是界面上看不到 —— 修好 YAML 即可恢复。
实现说明
实现细节 —— 令牌覆盖的原理、两条通道的存在理由、宿主 CSS 特异性的逐条对齐、一个写盘竞态的发现与修复 —— 放在 docs/DESIGN.md。
校验
npm test # 14 个套件,离线可跑
npm run check # 语法检查
许可
MIT。Mariana 配色来自 Sublime Text(Sublime HQ Pty Ltd,配色方案作者 Dmitri Voronianski)。本插件是把该配色重新实现为 DSH 设计令牌的独立实现,与 Sublime HQ 无隶属或背书关系。
可选的「等高线」背景移植自 dsh-theme-endfield
(MIT,(c) yunxiiQwQ):只取核心管线(场 → marching squares → 缝合 → 平滑 →
描边),保留了它的注释与实测常数;不含该项目的任何美术素材。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ruegg114514/dsh-colorlab
DeepSeek Harness 聊天界面的配色主题插件。默认预设内置 Sublime Text 的 Mariana…
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。