Bundle
dsh-theme-win98
DeepSeek Harness web theme: Windows 98 classic look. Silver 3D chrome, navy titles, MS Sans Serif, beveled controls, retro scrollbars, plus an optional teal desktop mode.
- Source
- FourTow
- License
- MIT
- Updated
- Updated 2 days ago
Readme
# 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 挂载;重启后主题默认生效(桌面模式)。
### 官方插件安装
```bash
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)
```js
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"的代价。
## 项目结构
```text
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
Install
dsh plugin --profile web add github:FourTow/dsh-theme-win98#3d10ec0a2c86583fa96f3554fc3a14b87c59a1d7
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-theme-win98 from the hub