dsh-theme-win98
给 DeepSeek Harness Web(DSH Web)用的 Windows 98 经典主题插件。
English: a Windows 98 classic theme for the DeepSeek Harness web UI — teal desktop with a navy title bar and menu bar, classic status bar, white content column on dithered grey, 98-style scrollbars, yellow tooltips and a Win98-style settings dialog. Desktop mode is on by default. Full docs are in 中文 below.
默认即"桌面模式":青绿桌面 + 带 深蓝渐变标题栏 的窗口, 底部是经典状态栏;整体是银灰 Chrome、白色内容列浮在带经典抖动的灰色文档区上,藏青点缀、 MS Sans Serif 字体、全直角、98 式滚动条(带箭头),黄底黑字 tooltip,设置页也做成 Win98 对话框。
纯客户端实现:通过 theme 服务的 overrideTokens 覆盖全部 --dsw-alias-* 语义令牌,并注入一份全局样式表
(+ 一个桌面模式下的菜单栏小元素)。不改动任何应用代码。架构与 dsh-theme-endfield 完全一致。
特性一览
- 🖥️ 桌面模式(默认):青绿桌面 + 深蓝渐变标题栏
- 🎨 全局换肤:银灰 Chrome、白色内容列浮在经典抖动灰色文档区、藏青点缀、MS Sans Serif、全直角
- 🖱️ 98 式滚动条:下沉轨道 + 凸起滑块 + 箭头按钮(18px)
- 💬 Tooltip:黄底黑字 + 描边,修复原"黄底白字"不可读
- ⚙️ 设置页:Win98 对话框(深蓝标题栏、银灰凸起导航、藏青激活、白内容)
- 🔘 控件 3D:按钮凸起/按下凹陷、纯图标按钮"扁平→悬停凸起"、输入类下沉
- ♻️ 纯客户端,不改应用代码;
check.js+smoke.js校验
截图

📸 上面为桌面模式(默认外观):青绿桌面 + 深蓝渐变标题栏 + 菜单栏 + 经典状态栏。
安装
安装后需要重启(或重新加载)web profile 才会作为新 bundle 挂载;重启后主题默认生效(桌面模式)。
官方插件安装
dsh plugin --profile web add github:FourTow/dsh-theme-win98
也可安装指定 tag 版本:
dsh plugin --profile web add github:FourTow/dsh-theme-win98#v1.0.0
使用
安装重启后自动生效。默认即为桌面版(青绿桌面 + 窗口 + 标题栏 + 菜单栏)。
控制台开关(浏览器 DevTools → Console)
window.__dshThemeWin98.enabled() // true —— 当前是否启用
window.__dshThemeWin98.setEnabled(false) // 关闭,恢复内置主题
window.__dshThemeWin98.setDesktop(false) // 关闭桌面模式,回到纯换肤(无桌面/标题栏/菜单栏)
window.__dshThemeWin98.setDesktop(true) // 重新打开桌面版
localStorage
dsh-theme-win98.enabled:'0'关闭,其余(含缺省)为开启;dsh-theme-win98.desktop:'0'关闭桌面版,其余(含缺省)为开启。
多标签页通过 storage 事件自动同步。
开发 / 校验 / 热更新
- 结构自检:
node check.js(反引号/${}泄漏、CSS 括号配平、令牌对完整、导出与清单一致)。 - 进程冒烟:
node test/smoke.js(桩环境驱动 apply/开关/桌面/卸载全链路)。 - 一键:
npm test(check.js+smoke.js)。 - 首次安装新 bundle 需重启 profile;之后编辑已安装插件的
client.js(例如克隆/链接本仓库后直接改文件)会被宿主每 500ms 轮询到并推送rebuilt帧, 浏览器无刷新热替换(个别跨版本内容不保证重应用,此时按一次Ctrl+F5)。 - 全部颜色集中在
client.js顶部样式表的--w98-*变量里,改一处全局生效。
实现要点
| 层 | 机制 |
|---|---|
| 全局配色 | theme.overrideTokens('dsh-theme-win98', TOKENS),覆盖 84 个 --dsw-alias-* 令牌,亮/暗两档统一映射为经典银灰(值写成 var(--w98-*)) |
| 控件 3D | button 凸起/按下凹陷、纯图标按钮"扁平、悬停凸起"、输入类下沉、菜单银灰描边、导航选中藏青 |
| 字体/直角 | MS Sans Serif 栈 + border-radius: 0 + 经典 ::selection 与虚点 :focus-visible |
| 桌面模式 | body.w98-desktop:青绿桌面、#root 内缩成窗口、外框 3D 描边、深蓝标题栏、菜单栏(.w98-menubar,apply 注入/拆除)、底部状态栏 |
| 文档/设置 | 白色内容列浮在抖动灰色文档区上;设置页做成 Win98 对话框(深蓝标题栏、银灰凸起导航、藏青激活、白内容) |
| tooltip | [role="tooltip"] 强制黄底黑字 + 描边,避免原"黄底白字"不可读 |
| 滚动条 | 轨道下沉凹槽、银灰凸起滑块、带箭头按钮,18px |
| 生命周期 | 幂等挂载守卫 + ctx.effect 拆除(样式、令牌层、菜单栏元素、body 类、监听器随 run 释放) |
兼容性说明
- 窗口级精修使用当前 DSH 构建的 css-module 前缀类(
pI_x6G_frame、wSkVaW_root、Md3f7G_column、uV2eYG_*、VOzbGW_*、FJxK0a_root等)。 未来 DSH 构建若重新生成这些 hash,这些规则会静默失效(无副作用),而令牌层仍然生效。 - 主题是"恒经典银灰":无论外观偏好 light/dark 都渲染为 Windows 98 经典配色 (建议 设置 → 外观 用 Light 观感最佳)。
- 复古换肤是全局性的:所有
<button>统一为凸起按钮、所有圆角被拉直——这是"像 Win98"的代价。
项目结构
index.js Host 半部:空实现(no-op cordis 插件)
client.js Client 半部:bundle(令牌层 + 全局样式表 + 菜单栏注入 + 开关逻辑)
cordis.patch.yml Bundle 注入行(loader insert)
package.json dsh.bundle.patch / dsh.client 声明与导出
check.js 结构自检
test/smoke.js 进程冒烟测试
README.md 本文档
LICENSE MIT
许可
MIT
No comments yet. Be the first to write one.