前言¶
DeepSeek Harness(DSH)在启动时存在一段空白期:从进程启动到主窗口出现,用户看不到任何反馈。这段空窗期容易让人误以为程序无响应,尤其对多插件环境来说,等待时间可能更久。
dsh-splash 在 DSH 启动时插入一个覆盖层,展示“亮白跑马灯 → 一笔写出「DeepSeek Harness」→ 下划线扫过 → 鱼形 logo 淡入 → 进度条与版本号”的动画,全程约 7 秒,播完自行淡出。它以 DSH 插件形态实现,不修改宿主文件,随 DSH 升级自动存活,卸载即干净。
插件定位¶
- 名称:dsh-splash
- 维护者:www02310
- 分类:趣味换装
- 版本:1.1.0
- 许可证:MIT
解决的问题是:让 DSH 启动过程更直观,减少“卡死”的感知,同时提供可配置的开关与跳过机制。
核心功能¶
- 启动画面动画:跑马灯点亮 → 英文单词 stroke by stroke → 下划线扫过 → logo 淡入 → 进度条与版本号,约 7 秒。
- 运行时注入:在 DSH 启动时注入覆盖层,不修改宿主任何文件。
- 配置项:通过
~/.dsh/splash/config.json控制。 - 图形面板:通过浏览器访问
http://127.0.0.1:<端口>/dsh-splash/panel查看与修改配置、预览动画。 - 路由接口:提供
/dsh-splash/status、/dsh-splash/config、/dsh-splash/panel、/dsh-splash/preview等 HTTP 接口。 - 智能让位:检测到原生补丁版时自动让位,避免两层叠加。
安装与启用¶
从 GitHub 直接安装(推荐):
dsh plugin --profile desktop add https://github.com/www02310/dsh-go
从本地目录安装(开发调试):
dsh plugin --profile desktop add link:D:\path\to\dsh-go
安装后重启 DSH,下次启动即显示开场动画。
桌面客户端的 desktop profile 由 Electron 应用独占管理,命令行 dsh plugin 会拒绝改它。这种情况可按“手动挂载”方式处理(见 README 中的折叠说明)。
配置¶
首次启动后自动生成配置文件:~/.dsh/splash/config.json
{
"enabled": true, // 总开关
"oncePerSession": true, // 每个窗口只播一次(热重载/刷新不重复)
"clickToSkip": true, // 点击画面立即淡出
"skipIfNative": true // 检测到「原生补丁版」时自动让位
}
图形面板访问地址:http://127.0.0.1:<端口>/dsh-splash/panel(端口在 DSH 日志/进程里,桌面端为随机端口)。
通过面板可以开关各项、预览动画、查看当前状态。
路由接口:
| 路由 | 方法 | 说明 |
|---|---|---|
/dsh-splash/status |
GET | 插件版本、宿主版本、配置、原生补丁检测结果 |
/dsh-splash/config |
POST | 改配置,body 为 {"enabled":false} 这样的补丁对象 |
/dsh-splash/panel |
GET | 图形面板 |
/dsh-splash/preview |
GET | 全屏预览动画(不装插件也能看效果) |
注入表在宿主启动时收集一次,改完配置要重启 DSH 才生效。接口只接受本机(回环)请求。
卸载¶
dsh plugin --profile desktop remove dsh-splash
手动挂载的,删除软链接与 package.json 里对应配置即可。插件不写宿主文件、不驻留进程,删完即彻底消失。如需一并清掉配置,删除 ~/.dsh/splash/ 目录。
插件版 vs 原生补丁版¶
| 插件版(本仓库根目录) | 原生补丁版(native/ 目录,v2.0 发布物) |
|
|---|---|---|
| 实现 | webServer 的 index-inject 注入覆盖层 |
改 Electron 主进程 app.asar,开独立启动窗 |
| 从点图标到出画面 | 5–10 秒:注入表要等宿主 boot 完成才下发,插件越多越晚(本机实测 5.5 / 9.9 秒) | 约 1 秒:主进程一起来就开窗,不等宿主 boot |
| 覆盖范围 | 主窗口内容区(窗口一显示就是动画) | 进程启动到主窗口就绪之间的完整空窗期 |
| DSH 升级 | 不受影响,自动存活 | 升级替换 app.asar 后失效,需重装 |
| 安装 | 一条 dsh plugin add |
关闭 DSH → 跑安装脚本 |
| 卸载 | 删插件即可 | 从备份还原 app.asar |
| 风险 | 零文件改动 | 改动宿主二进制(有逐字节自校验与备份) |
两者默认不会同时出画面:插件检测到 app.asar 里有原生补丁时会自动让位(skipIfNative)。
实现要点¶
- 注入三件事:一条
global行(__DSH_SPLASH_META__:版本与配置)+ 一条内联script行(覆盖层本体)。
用内联 script 而不是 script-src:内联行不会加载失败,也就不可能把__DSH_BOOT_READY__卡死。 - 覆盖层挂在 closed shadow DOM 里,宿主样式进不来、覆盖层样式也污染不到宿主。
- 动画在“窗口真正可见”时才起跑:优先等
focus事件,其次等 React 挂载出#root内容,最后 4 秒兜底;20 秒硬保险无论如何都收掉,绝不挡界面。 assets/splash-overlay.js是从assets/splash.html生成的:改画面只改 html,然后运行node tools/build-overlay.mjs。
兼容性¶
- 实测于 DSH 0.2.1-rc.2(Electron 44.7.0)。
- 依赖宿主提供
webserver/index-inject注入表(并支持global/script行)。
宿主不提供时插件只是静默不生效,不会影响 DSH 启动。 tools/harness.html是不依赖 DSH 的本地预览页:起个静态服务打开即可调试动画。
适用场景与注意¶
- 适合希望提升 DSH 启动体验、减少“卡死”感知的用户。
- 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
- 如需“点图标就有画面”,可考虑原生补丁版;若只接受“打开后一秒内看到动画”,插件版更省心。
总结¶
dsh-splash 为 DeepSeek Harness 提供了一个轻量、可配置的启动画面插件,通过运行时注入实现,不改动宿主文件,随升级自动存活。它既能改善用户体验,也保留了灵活的开关与让位机制,适合追求“插件化”体验的 DSH 用户。
了解更多与获取源码,可访问:
- GitHub:https://github.com/www02310/dsh-go
- SkillHub 目录页:https://www.skillhub.cn/plugins/www02310/dsh-go