dsh-splash-gojo:DeepSeek Harness 全屏开机动画(host 注入)

前言

DeepSeek Harness(DSH)启动时,默认会先出现官方的 HARNESS / Loading plugins… 启动页。若想在应用 UI 挂载之前就展示自定义全屏画面,浏览器半边插件往往来不及:它们要等插件条目全部激活后才运行,那时官方启动页已经画出来了;官方实践文档也禁止插件向 document.body 追加节点或替换 app 根节点。

oumaekumiko0821/dsh-splash-gojo(包名 dsh-boot-splash)走另一条路:只做 host 半边,在宿主渲染启动 HTML 时注入样式、遮罩结构和交接脚本,把一张 JPEG 内联为 data URI,零运行时 npm 依赖。下面介绍它做什么、怎么装、怎么调参。

这是什么

维护者 oumaekumiko0821 在 GitHub 开源的 DSH 开机动画插件,社区目录 SkillHub 分类为「趣味换装」。当前仓库版本 1.0.0(见 package.json),代码 MIT 许可;默认启动图素材另有出处说明,不在 MIT 范围内(见仓库 NOTICE)。

一句话:把一张图变成全屏启动序列——第一帧就位,启动期间缓慢缩放、横向光带扫过、中心辉光与 HUD 进度,应用挂载完成时闪一下并淡出。

核心功能

视觉与交互

  • 全屏主视觉:图片 cover 铺满,从约 1.14 倍缓落到 1.005 倍。
  • 横向光带:带辉光的扫描光带从左到右。
  • 中心辉光:中央紫色光晕由暗到亮,随呼吸停在中段。
  • HUD:左下字标(默认 DEEPSEEK HARNESS,字距收拢 + 去模糊浮现)、副标题、进度条(先自行推进到 88%,就绪时补满)、阶段文案(初始化内核 → 装载插件 → 恢复会话 → 就绪)、右上角百分比。
  • 跳过:点击屏幕任意处,或按 Esc / 空格 / Enter;约 1.5 秒后右下出现「点击跳过」提示。
  • 语言:跟随宿主 <html lang>,中文环境显示中文,其它显示英文。
  • 无障碍:prefers-reduced-motion: reduce 时关闭位移动画,只保留淡入淡出。

为什么是 host 插件

开机动画必须早于应用 UI。本插件监听 webserver/index-inject,每渲染一次启动 HTML 就推三行:

行 位置 内容
style <head> 全部动画 CSS + 兜底动画
html <body> 之后 遮罩结构 + 内联为 data URI 的图片
script 同一 body 组 就绪 / 上限 / 跳过交接逻辑

没有 client 半边,不 import 其它模块;遮罩在 <div id="root"> 之前,React hydrateRoot 不会碰到它。

就绪判断:前端加载卡 [data-dsh-boot] 被 React 接管替换时视为挂载完成;#root 出现非加载卡子节点为兜底。

三层退出(避免界面被卡住):

  1. 就绪信号 → 淡出(约 620ms + 闪光)。
  2. 硬上限 maxShowMs(默认 9s)→ 脚本自行淡出。
  3. 纯 CSS 兜底:dshs-failsafe 在 maxShowMs + 1.5s 时将 visibility 设为 hidden,即使脚本全部失败界面也会露出。

安装与启用

插件以当前 dsh 进程权限运行;安装前请自行阅读仓库源码与许可证(含启动图 NOTICE)。

dsh plugin --profile <profile> add <本目录绝对路径>

Windows 下必须使用绝对路径(裸目录名会被当成 npm 包名)。因声明了 dsh.bundle,管理器会同时写入 dsh.profile.bundles。

  • 新增插件需重启宿主:动画写在启动 HTML 里,重启后首次加载页面才能看到。
  • 桌面端(Electron)的 desktop profile 由应用独占,全局 dsh CLI 会拒绝;须通过应用自带载体 CLI 或应用内插件管理页安装。

卸载与暂停

卸载:

dsh plugin --profile <profile> remove dsh-boot-splash

暂停(不卸载):在 profile 的 cordis.patch.yml 增加一行,重启后生效:

- id: dsh-boot-splash
  disabled: true

调参

在同一 patch 条目的 config: 块中修改;保存后下一次页面加载生效,不必重启宿主:

- id: dsh-boot-splash
  name: dsh-boot-splash
  disabled: false
  config:
    minShowMs: 2000      # 开场动画时长,同时驱动进度条自行推进
    maxShowMs: 6000      # 硬上限,超时自行收掉
    wordmark: 'DEEPSEEK HARNESS'
    allowSkip: true
    enabled: true        # false = 不注入任何行

取值会被夹到安全范围(minShowMs 200–30000,maxShowMs 500–120000),wordmark 会做 HTML 转义。

更换启动图

替换 assets/boot-splash.jpg(任意尺寸 JPEG)后执行构建,图片会重新内联进 lib/index.js:

npm install
npm run build

仓库自带测试(需 jsdom):

npm test

tests/verify.mjs 会走宿主真实路径:收集注入行 → jsdom 渲染并执行脚本 → 断言遮罩、退出时机与清理。若要验证宿主是否把行写进 HTML,可用隔离 profile 冷启动探针(README 中有 dsh --profile splash-probe --no-open --port 0 等步骤)。

适用场景与注意

适合:希望在 DSH 首屏前展示品牌化或趣味开机动画、且接受每次页面加载(含刷新)都会播放一次的语义。

边界(来自 README):

  • 不需要时在 patch 里 disabled: true 或 config.enabled: false。
  • 启动期遮罩拦截指针事件(便于「点击跳过」);就绪后节点移除,不残留。
  • 不做亮度/主题自适应;默认暗色遮罩,浅色主题下偏「片头」观感。
  • 图片内联进 HTML,每次加载约 400KB 本机传输。
  • 遮罩 z-index: 100000,仅存在于启动期。

DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

链接

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

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

小夜