Appearance
自适应主题始终显示深色模式(亮色终端背景无效)
问题
在 opencode 中设置 theme: adaptive 后,无论终端背景是浅色还是深色,TUI 始终以深色模式启动。即使是纯白背景的终端,opencode 也显示为深色主题。
手动通过 /theme 命令切换主题可以生效,但下次启动仍然回到深色,说明主题"检测"逻辑有问题,"切换"逻辑是正常的。
涉及版本:opencode v1.14.20+,OS 无关(Windows Terminal、kitty、Ghostty 等均复现)。
原因
terminal.ts 中的 mode() 函数通过 OSC 11 查询终端背景色。OSC 11 返回的 RGBA 颜色分量已经是 0..1 的归一化值,但代码里对这些值再次除以 255,导致实际计算的亮度值接近 0(例如白色终端背景的亮度变成 ~0.0039),永远低于 0.5 的阈值,始终判断为深色。
这是 commit 416325995("reinstate")重新引入的回归 bug——同一个 double-normalization 问题此前已在 #22615 中被修复,但后来被一次 reinstate 提交意外复原。
解决方案
临时手动切换
每次启动后通过 TUI 命令切换到正确的主题:
/theme选择 light 或 dark,下次启动前 opencode 会记住该选择(直到下次 adaptive 检测覆盖)。
或者固定主题(不用 adaptive)
在 opencode.json 中直接指定固定主题,绕开 adaptive 检测逻辑:
jsonc
// opencode.json
{
"theme": "opencode-light"
}可用主题名称可通过 /theme 列表查看。
等待官方 patch
该 bug 已在 GitHub #23810 追踪,修复方式是在 mode() 中移除多余的 / 255 操作。