Repository navigation
Releases: AaronKate/dsh-codex-appearance
Release list
v0.3.6 — 深色模式修复
v0.3.6 — 深色模式修复
修复
深色模式下纸纹与控件底色全部失效,由三个叠加的 bug 造成:
- 样式整体停止更新:纸纹规则调用了不存在的
paperBase(),applyExtras
一执行就抛ReferenceError中断,整套样式停在上一次成功的浅色状态 ——
切到深色后 CSS 根本没有更新,这是「纸纹和代码都看不清」的直接原因。 ui调色板没有按模式取色:调色板基色无条件取theme.content(浅色),
深色模式下设置面板、卡片、工具行的底色全是浅色补丁贴在深色 UI 上。
现在浅色取theme.content、深色取#1B2028,同一套对比度系数在暗部同样成立。- 选择器误命中:深色 glass 规则里
[class*="centerCol"]会同时命中
BynINW_centerCol,把对话区刷成浅色theme.base(实测被设成#F9FAFB)。
已加:not([class*="BynINW_centerCol"])排除。
验证
- 像素扫描:深色下全部纹理底色均为
#1B2028系(centerCol/root、输入卡片、
改动卡片),无浅色残留;浅色模式各表面色值与修复前完全一致。 - Edge 真实渲染:深色下正文清晰可读、卡片层次分明、纸纹隐约可见。
安装
dsh plugin --profile desktop add ./dsh-eye-comfort-0.3.6.tgzv0.3.5 — 改动文件卡片跟随主题
v0.3.5 — 改动文件卡片跟随主题
修复
- 「已编辑 N 个文件」卡片是一块冷白:卡头(
kuvljq_header)不读卡片底色,
而是读--changes-fill/--changes-hover两个局部变量,DSH 把它们写死成
neutral-50/neutral-100(近白 / 深灰)。在暖色或豆沙绿纸面上,
卡头因此是一块冷色块 —— 实测豆沙绿:卡片#F5F5F5vs 纸面#E9EFE4,
差(12,6,17)且偏冷。 - 卡头盖住纸张纹理:60px 高的实色卡头会把纹理整块遮掉(实测该卡片 sd=0,
旁边纸面 sd=6.68)。把--changes-fill设为transparent,让卡头露出卡片自己的
底色与纸纹;hover 时才叠一档同族实色,这正是"移入反馈"该有的样子。 - 深色模式 hover 会闪亮斑:
toward()基于浅色纸面计算,深色下会得出#EFEEEC
这种浅色。改为按模式分别取值(深色#464B53)。 - 图标方块是冷白小窗:
kuvljq_tile原本用neutral-00混 50% 透明,
改为前景色 6% 淡铺;边框改走--dsw-alias-border-l2主题 token,
深色模式下不再留一道浅色描边。 - 以上规则从浅色分支移到通用区,两种模式都生效。
实测依据
用 Edge 无头渲染对比三态(改前冷白 / 改后同色带颗粒 / hover 加深),
并用像素统计确认卡片区域的颗粒度与色温,而不是只看代码。
安装
dsh plugin --profile desktop add ./dsh-eye-comfort-0.3.5.tgzv0.3.4 — 输入框交互与控件配色
v0.3.4 — 输入框交互与控件配色
新增
- 输入框悬浮:鼠标移入时整块卡片上浮 2px 并加深阴影;焦点进入(正在打字)后落回原位,
光标不会跟着一个还在动的平面。用:focus-within实现,不靠 JS 跟踪状态,
不会和输入法组词打架;禁用态不浮起;开启「减少动态效果」时自动禁用。
修复
- 输入框内「+」按钮发白:静止态用的是
--dsw-specific-selector(默认neutral-bluish-60,
接近纯白),在暖色纸面上是一块刺眼的白斑。已按主题色温改为比输入卡片深一档的实色。 - 「+」按钮 hover 闪白:hover 切到另一个 token
--dsw-alias-interactive-bg-hover-solid
(默认neutral-bluish-75),此前未覆盖。该 token 被 8 处小控件共用
(工具行 inspect 按钮、折叠行、压缩行等),一并修复。 - 输入框两侧空白无纸纹:
composerSeat的「透明 → 底色」淡出层是不透明渐变,
会盖住背后的纹理。改为 45% alpha 让纹理透出;关闭纸张质感时自动回到 100%
(这层同时负责遮挡滚到输入区底下的消息,半透明会漏内容)。 - 输入框卡片无纸纹:卡片浮在内容区之上、只比纸面亮 3-4 个色阶,不贴纹理像塑料片。
- 对话区交界色块:
centerCol与root底色原本差 5%(basevscontent),
分别贴纹理会在交界处露出接缝;已统一为content。 - 设置页导航选中态几乎看不见:选中色是半透明叠加在只深 2% 的面板上,
实测仅 1.03:1 / ΔL 2.2%。改为实色mix(sidebarSelected, foreground, .12),
五套主题 ΔL≈20%。
实测依据
所有配色改动都用 Edge 无头渲染 + 像素统计验证,而不是只看代码:
选中态 ΔL、纹理 P5–P95 色阶差、按钮与卡片对比度均逐项测量。
安装
dsh plugin --profile desktop add ./dsh-eye-comfort-0.3.4.tgzv0.3.3 — 纸张质感
v0.3.3 — 纸张质感
新增
- 纸张质感:设置里新增开关与「颗粒强度」滑块,在内容区、侧栏、卡片上叠一层极淡的
纸纤维颗粒。纹理由feTurbulence分形噪声生成,自带主题底色并与底色相乘,
所以五套主题的色温完全不变;也不触碰--dsw-specific-sidebar-fill,原生标题栏不受影响。
修复(开发过程中实测出来的三个坑)
- 「像砂纸」:
feFunc的输出会被硬性 clamp 到[0,1]。按目标标准差 ÷ 噪声标准差
换算得到 slope≈23,噪声几乎全部撞上 0/1 边界,输出的是大块黑白砂砾而非细颗粒。
改为把振幅留在安全区间,再用feComposite与底色相乘。 - 输入框上方灰带:
Dc7zOa_composerSeat是「透明 → 底色」的淡出渐变,
盖上不透明纹理后会变成一块灰板。已把它从纹理目标中排除,靠父级纹理透出。 - 嵌套重复叠加:内容区
centerCol与root是父子关系,两层都贴纹理会让颗粒翻倍。
现在只贴一层。
强度标定(Edge 真实渲染 + 像素统计)
| 强度 | P5–P95 色阶差 / 255 | 观感 |
|---|---|---|
| 40 | ≈15 | 能看出质感 |
| 60(默认) | ≈22 | 明显纸纤维 |
| 80 | ≈28 | 较强 |
| 100 | ≈33 | 明显但不脏 |
关键约束:平均亮度全程不变(豆沙绿 237.3 → 237.2,暖白 240.0 → 239.7),主题色没有被推灰。
深色系数为浅色的 3 倍 —— 暗部对绝对抖动不敏感。
安装
dsh plugin --profile desktop add ./dsh-eye-comfort-0.3.3.tgzv0.3.2 — 字体可选本机全部字族
v0.3.2 — 字体可选本机全部字族
新增
- 字体下拉列出本机全部字体:插件新增主进程路由
/api/dsh-eye-comfort/fonts,
由系统接口读取真实字体清单(Windows 用 GDI+,macOS 用system_profiler,
Linux 用fc-list),前端启动时拉取并合并进下拉。
本机实测 305 个字族,此前只能从 56 个内置候选中探测出少数几个。 - 下拉按「内置四类 / 本机字体」分组;手输任意字体名也会保留,不再被重置回系统字体。
修复
- 字体设置完全不生效:DSH 各组件用
font-family: var(--dsw-font-family)消费样式,
写在body上的font-family会被子元素覆盖。改为设置 ui-theme 预留的覆盖入口
--dsh-font-family-text/--dsh-font-family-code。 - CSS 生成写的是查表结果:选中自定义字体时输出
font-family: undefined,
浏览器直接丢弃该声明。 - 代码字体样式(常规/紧凑/舒适)不生效:代码块用
font:简写消费
--dsw-font-markdown-code-block,简写会重置line-height。改为设置
--dsh-code-font-size/--dsh-code-font-delta,行高 19 / 17 / 22 px。 - 中文字体名丢失:
powershell.exe默认按系统 ANSI 码页输出,Node 按 UTF-8 解码,
导致微软雅黑、宋体、黑体、华文楷体等 29 个纯中文字体名整条丢失;已强制 UTF-8 输出。
安全
- 字体路由经
connection.admit()鉴权(Host/Origin 校验 + 浏览器会话 cookie),
鉴权异常时 fail-closed 返回 403,避免任意网页读取本机字体清单。
其他
- 移除未被引用的
lib/fonts.json与tools/(早期静态清单方案的残留)。
安装
dsh plugin --profile desktop add ./dsh-eye-comfort-0.3.2.tgzv0.3.1 — 文件链接改用加深的链接色
修复:文件链接颜色偏淡
工具行里的文件引用(</> Foo.js:5344)是一个 color: inherit 的按钮,之前被排除在强调色规则之外,落回原生链接色,对比度只有 5.3–6.1:1,读起来像被淡化处理过的正文。
- 文件链接改用主题链接色,并显式覆盖子元素继承
- 五套主题的
link全部加深到 ≥7:1(WCAG AAA 正文级)
| 主题 | 改前 | 改后 |
|---|---|---|
| 暖白 | #2858A4 (6.14) |
#244F94 (7.08) |
| 米纸 | #7A5A18 (5.36) |
#624813 (7.20) |
| 豆沙绿 | #2E6B38 (5.52) |
#26582E (7.19) |
| 雾蓝 | #235F9E (5.69) |
#1D5085 (7.18) |
| 石墨 | #3C5A78 (6.08) |
#354F6A (7.18) |
未使用强调色(accent)作为文件链接色:其对比度为 2.5–4.7:1,用作文件名比原值更差。
其他:
- 移除对
fileMention的匹配(该 class 在 Harness 中不存在) - 仓库新增
screenshots.json与assets/截图,供插件市场详情页展示
安装:
dsh plugin --profile desktop add ./dsh-eye-comfort-0.3.1.tgzv0.3.0 — 插件改名 dsh-eye-comfort
v0.3.0 — 插件改名为 dsh-eye-comfort
包名、显示名称与文档同步改为「护眼外观 / Eye Comfort」。
变更
| 项 | 旧 | 新 |
|---|---|---|
| 包名 / 插件 id | dsh-codex-appearance |
dsh-eye-comfort |
| 插件列表显示名 | Appearance / 外观 | Eye Comfort / 护眼外观 |
| README 标题 | DeepSeek Harness 外观插件 | DeepSeek Harness 护眼外观插件 |
版本号按包名变更升至 0.3.0。
升级步骤
包名已变更,不能直接覆盖安装。请先移除旧包:
dsh plugin --profile desktop remove dsh-codex-appearance再安装新包:
dsh plugin --profile desktop add ./dsh-eye-comfort-0.3.0.tgz外观设置不会丢失。 设置保存在浏览器本地存储中,键名与包名无关。
功能无变化
配色、五套护眼主题、字体、内容宽度、对比度等与 0.2.27 完全一致。本版本仅改名。
说明
- GitHub 仓库地址保持不变,历史版本仍可下载。
- 内部 CSS 类名前缀
dca-未改动:用户不可见,且与包名解耦,改动无收益。
v0.2.27 — 五套护眼主题
v0.2.27
新增五套护眼主题,并修复多个界面区域不跟随主题的配色问题。
新增护眼主题
设置 → 外观 → 顶部「护眼主题」,共五套,切换即时生效:
| 主题 | 底色 | 正文对比 | 蓝光占比 |
|---|---|---|---|
| 暖白(默认) | #F1F1EE | 11.9:1 | 33.1% |
| 米纸 | #F2EBDC | 10.6:1 | 31.6% |
| 豆沙绿 | #EAF0E5 | 11.0:1 | 32.6% |
| 雾蓝 | #ECEFF4 | 11.4:1 | 33.9% |
| 石墨 | #EDECEA | 11.5:1 | 33.1% |
每套主题自带匹配的强调色与链接色,避免暖底色配蓝色强调产生的冷暖冲突。选中主题会重置浅色的强调色与前景色;手动改色的结果会保留,重新选主题时才会被覆盖。
深色模式未作改动。
修复:气泡与轮次导航不跟主题
用户消息气泡、轮次导航短横线此前固定显示为冷蓝色。原因是它们使用 DSH 的 specific token,默认指向硬编码的静态色板,本插件只覆盖了其中 sidebar-fill 一个。
现在补齐 specific-bubble、bubble-highlight、sidebar-nav-item-active、sidebar-nav-item-hover,并为每套主题定义专属气泡色(与底色亮度差 4.7%~5.6%)。border-l3 / border-l4 也从硬编码冷蓝改为主题派生。
修复:轮次预览正文过淡
预览正文使用 --dsw-alias-label-caption,默认是静态色 #ADB2B8。除偏冷外,它在气泡底色上的对比度仅 1.9:1,远低于可读下限。
已改为由前景色派生,对比度提升至 4.3~4.6:1(达 AA)。同时补齐 label-dimmed 与 label-primary-dimmed。
修复:输入框为纯白
输入框卡片的 --dsw-specific-input-major 默认是静态纯白。在暖色主题下它与背景亮度差达 16.5%,是画面上最亮的一块,且暖度为 0(完全没跟随主题)。
改为跟随主题后亮度差降到 3.4%~4.8%,色温一致。该 token 被 8 处共用,因此审批卡、提问卡、账户通知、图片查看器也一并修正。
其他
- 插件描述更新,说明五套护眼主题。
- 设置页的开关、滑杆、选中边框改为跟随当前主题强调色。
v0.2.26 — 对比度修复 / 移除主题预设
v0.2.26
移除主题预设,修好对比度滑块,并更新插件描述。
对比度现在真正生效
此前「对比度」滑块在浅色模式下完全没有效果,在深色模式下也仅有 1%~3% 的亮度变化(远低于可感知阈值)。两处原因都已修复:
- 浅色分支的计算读的是固定常量,滑杆从未参与;
- 设置面板、轨迹面板等主要视觉表面由带 !important 的硬编码规则绘制,即使 token 变了,实际像素也不变。
现在浅色与深色的所有表面(卡片、控件、边框、代码块、行内代码、设置面板、轨迹面板)都随滑杆变化。浅色控件层亮度差 8.0% 到 27.7%;深色 1.9% 到 4.3%。
可读性全程达标:浅色最坏情况正文对比 8.4:1,深色 5.9:1。
移除主题选项
设置页不再提供 Codex 蓝灰 / 自定义 的主题选择,浅色与深色各自维护自己的配色。相关的 preset 字段与分支已一并清理。
注意:直接移除会让配色逻辑回落到顶层字段,而该字段存的是深色值,会导致浅色模式变成深色。本版本改为始终使用分离的浅/深调色板,切换浅色不会出现该问题。
插件描述
插件列表中的描述改为准确反映现有功能,不再提及已不存在的蓝灰主题预设。同时接入 dsh.meta 多语言字段,提供中文与英文两版标题和描述。
其他
- 清理了因此失去引用的颜色常量,配色定义与引用完全配对。
- README 同步更新。
v0.2.25 — 内容宽度可调
v0.2.25
新增「内容宽度」设置项,用于调整输入框与正文展示区的宽度。
新增
设置 → 外观 → 高级 → 内容宽度:范围 680–1400px(步进 20),默认 920px。
该设置同时作用于输入框与正文区,两者共用 DSH 的同一个宽度变量,因此不会出现只有一半变宽的情况。
实现说明
DSH 的宽度由 ConversationWidthControls 独占:它持有 dsh.conversation.contentWidth,并在每次尺寸变化时用该偏好重算内联变量 --dsh-chat-user-width。纯 CSS 覆盖会被其 ResizeObserver 覆盖,因此本设置直接写入该偏好键并同步内联变量,与 DSH 原生拖拽手柄共用同一套机制——先拖拽调过宽度,再拖动本滑杆即可重新接管。
嵌入视图(embeddedBody)内部硬编码了 920px 上限,不认上述变量,已单独覆盖。
限制
DSH 会把实际宽度钳制在 [640, 列宽 − 176]。窗口较窄时,设置值会被自动收窄——这是 DSH 的布局保护,与原生拖拽的上限一致。