dsh-first-paint:用首帧 HTML 注入消除 DSH 启动白闪

前言

DeepSeek Harness(DSH)桌面端启动时,Electron 会先建窗口再加载页面,首帧往往是应用自带的空白或白色加载态。若再配合 dsh-startup-screen 一类启动动画插件,常见链路是用 webServer.tapIndex 往 HTML 里塞启动页;但在桌面端,这条链路往往只渲染 index-inject 注入行,tapIndex 不生效,于是会出现黑窗 → 白闪约 1–2 秒 → 启动动画才出来的体验。

dsh-first-paint(首帧启动页)由社区维护者 1jincheng 发布,分类为客户端插件。它不改主程序、不碰 app.asar,通过订阅 webserver/index-inject 把启动页作为一条 script 注入行交给 webServer 的 index 渲染器,随 boot payload 一起下发,让窗口出现的第一帧就是可配置的黑底品牌页。下面介绍它的定位、安装与配置方式。

这是什么

一句话:dsh-first-paint 是 DSH 的独立插件,专门做首帧兜底——在 index 注入阶段内联启动页脚本,消除桌面端启动白闪。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。安装前建议自行查看源码与许可证——插件以当前 DSH 进程权限运行。

核心机制与能力

解决什么问题

  1. 桌面端首帧是空白/白色加载态,视觉上像「闪一下白屏」。
  2. 依赖 tapIndex 的启动动画在桌面端 index-inject 路径下不生效,动画晚于白屏出现。
  3. 本插件把启动页写进首帧 HTML 注入行,桌面端第一帧即为黑底品牌页(默认 #0A0A0B 等可配)。

与 dsh-startup-screen 的分工

两个插件互相独立、各自一条 bundle 行:

  • dsh-startup-screen:完整启动动画(授权序列、语音等)。
  • dsh-first-paint:首帧兜底;检测到 #dsh-startup-root 或 window.__DSH_STARTUP_RUNNING__ 后按 handoffDelayMs 淡出,把画面交给启动动画。
  • 不装 dsh-startup-screen 也能用:到 maxMs 自动淡出,不会一直锁在启动页。
  • 升级 dsh-startup-screen 不会影响本插件。

技术边界(README 限制)

  • 只影响首屏渲染,不能改 Electron 主进程创建窗口、show() 的时机。
  • 宿主若调整 index 注入行的渲染位置,插件可能需要跟着改。
  • 注入内容全部内联,不依赖外部资源,离线可用。

安装与启用

在 README 中给出的安装命令如下(桌面端与网页端 profile 二选一或按需都装):

dsh plugin --profile desktop add dsh-first-paint
# 或 web profile
dsh plugin --profile web add dsh-first-paint

装完后完全退出 DSH 再打开,否则可能看不到注入效果。

发布侧说明:npm 包名为 dsh-first-paint;向 Design and Make Marketplace / DSH 插件市场提交时需声明 dsh.bundle.patch,以便 dsh plugin add 识别(与 package.json 中 "dsh.bundle.patch": "./cordis.patch.yml" 一致)。运行环境要求 Node >=20(package.json engines)。

配置

可选,默认开箱即用。配置文件路径:

~/.dsh/dsh-first-paint.json

若设置了 DSH_HOME,则配置目录以该环境变量为准(覆盖 ~/.dsh)。

示例(README 中的字段与默认值说明;表中「默认」列以 README 表格为准,示例 JSON 里的 cn/en 为展示用文案):

{
  "enabled": true,
  "cn": "天枢",
  "en": "TIANSHU",
  "maxMs": 6000,
  "handoffDelayMs": 500,
  "background": "#0A0A0B",
  "accent": "#FF7500"
}
字段 默认 说明
enabled true 设为 false 时完全不注入
cn HARNESS 大字(中文或任意文本)
en LOADING 副标题(英文或小字)
maxMs 6000 未检测到启动动画接管时的最长遮挡时间(毫秒)
handoffDelayMs 500 检测到启动动画后,延迟多久淡出
background #0A0A0B 底色
accent #FF7500 强调色(副标题与进度条)

将 enabled 设为 false 可关闭注入,便于对比有无白闪差异。

典型用法

  1. 按上文命令为 desktop 或 web profile 安装插件,完全重启 DSH。
  2. 若只需默认 HARNESS / LOADING 文案与配色,无需建配置文件。
  3. 需要品牌文案或配色时,编辑 ~/.dsh/dsh-first-paint.json,保存后再次完全重启 DSH。
  4. 若已安装 dsh-startup-screen:首帧由本插件铺底,启动动画接管后自动淡出;若未安装启动动画插件,页面会在 maxMs 后自动淡出进入正常界面。

适用场景与注意

适合谁

  • 使用 DSH 桌面端、对启动瞬间白闪敏感,希望窗口一出现就是统一品牌底色的开发者或日常用户。
  • 已用或计划用 dsh-startup-screen,需要补齐桌面端 index-inject 路径下首帧空白的问题。
  • 希望不改主程序、仅通过插件市场安装即可调整启动首屏的场景。

注意

结尾

dsh-first-paint 把启动页写进 DSH 首帧 index 注入,在独立插件前提下消除桌面端常见的启动白闪,并与 dsh-startup-screen 解耦协作。需要安装命令、配置字段与限制说明时,以 GitHub README 为准;在 SkillHub 或插件市场搜索 dsh-first-paint 即可找到目录入口。

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

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

小夜