dsh-splash:DeepSeek Harness 启动画面插件

前言

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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜