Skip to content

Releases: AaronKate/dsh-codex-appearance

v0.3.6 — 深色模式修复

Choose a tag to compare

@AaronKate AaronKate released this 22 Oct 12:07

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.tgz

v0.3.5 — 改动文件卡片跟随主题

Choose a tag to compare

@AaronKate AaronKate released this 22 Oct 10:56

v0.3.5 — 改动文件卡片跟随主题

修复

  • 「已编辑 N 个文件」卡片是一块冷白:卡头(kuvljq_header)不读卡片底色,
    而是读 --changes-fill / --changes-hover 两个局部变量,DSH 把它们写死成
    neutral-50 / neutral-100(近白 / 深灰)。在暖色或豆沙绿纸面上,
    卡头因此是一块冷色块 —— 实测豆沙绿:卡片 #F5F5F5 vs 纸面 #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.tgz

v0.3.4 — 输入框交互与控件配色

Choose a tag to compare

@AaronKate AaronKate released this 22 Oct 09:48

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%(base vs content),
    分别贴纹理会在交界处露出接缝;已统一为 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.tgz

v0.3.3 — 纸张质感

Choose a tag to compare

@AaronKate AaronKate released this 22 Oct 08:51

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.tgz

v0.3.2 — 字体可选本机全部字族

Choose a tag to compare

@AaronKate AaronKate released this 22 Oct 02:29

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.tgz

v0.3.1 — 文件链接改用加深的链接色

Choose a tag to compare

@AaronKate AaronKate released this 22 Oct 01:42

修复:文件链接颜色偏淡

工具行里的文件引用(</> 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.tgz

v0.3.0 — 插件改名 dsh-eye-comfort

Choose a tag to compare

@AaronKate AaronKate released this 21 Oct 05:10

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 — 五套护眼主题

Choose a tag to compare

@AaronKate AaronKate released this 21 Oct 05:00

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 — 对比度修复 / 移除主题预设

Choose a tag to compare

@AaronKate AaronKate released this 21 Oct 03:38

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 — 内容宽度可调

Choose a tag to compare

@AaronKate AaronKate released this 21 Oct 03:16

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 的布局保护,与原生拖拽的上限一致。