启动时播放全屏开机视频与字幕,再进主界面
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/ShawSheepSussiah/dsh-haavk-boot.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 21 处,展示前 18 条)
- 读取本地文件lib/index.js:35
const pkg = JSON.parse(readFileSync(join(self, '..', 'package.json'), 'utf8')); - 读取本地文件lib/index.js:169
if (!existsSync(this.file)) - 读取本地文件lib/index.js:171
const persisted = JSON.parse(readFileSync(this.file, 'utf8')); - 写入本地文件lib/index.js:180
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件lib/index.js:181
writeFileSync(this.file, `${JSON.stringify(this.value, null, 2)}\n`, 'utf8'); - 执行外部命令来自配置/变量lib/index.js:412
child = spawn(trimmed, { - 执行外部命令固定命令lib/index.js:490
const killer = spawn('taskkill', ['/pid', String(pid), '/T', '/F'], { windowsHide: true }); - 读取本地文件lib/index.js:564
return existsSync('/dev/snd') - 读取本地文件lib/index.js:567
|| Boolean(process.env.XDG_RUNTIME_DIR && existsSync(join(process.env.XDG_RUNTIME_DIR, 'pulse'))); - 读取本地文件lib/index.js:602
if (!existsSync(path)) { - 写入本地文件lib/index.js:858
mkdirSync(dirname(f), { recursive: true }); - 写入本地文件lib/index.js:859
appendFileSync(f, `${new Date().toISOString()} ${msg}\n`, 'utf8'); - 写入本地文件lib/index.js:869
mkdirSync(dirname(bootLog), { recursive: true }); - 写入本地文件lib/index.js:873
appendFileSync(bootLog, `${new Date().toISOString()} apply() v=${VERSION} webServer=${hasWebServer ? 'yes' : 'no'} inject=${JSON.stringify(inject)} - 发起网络请求lib/client.js:172
if (!AC) return fetch(url, init) - 发起网络请求lib/client.js:175
return fetch(url, Object.assign({}, init, { signal: ctl.signal })) - 发起网络请求lib/client.js:198
const r = await fetch(CONFIG_ENDPOINT, { - 发起网络请求lib/client.js:214
await fetch(PREVIEW_ENDPOINT, { method: 'POST' })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
dsh哈夫克relink启动动画
README
由 DeepSeek 最新模型翻译生成dsh-haavk-boot
Listed on dsh-plugin.org
哈夫克 Relink 节点启动固件 — DeepSeek Harness(DSH / Cordis)的开机动画插件。
信息与你无限,Relink 重塑未来。
一句话:让 DSH 启动时先播一段原生开机动画,再进主界面。
启动屏
特性
| 特性 | 说明 |
| 🎬 全屏开机视频 | H.264 1080p 原生渲染,object-fit: cover 满屏,不黑边 |
| 💬 逐句字幕 | 6 条字幕按视频真实播放时间点亮,与配音严格对齐 |
| ✨ 粒子层 | Canvas 星尘 + 光尘,mix-blend-mode: screen 叠在视频上 |
| 🎛 HUD 边框 | 四角光标、扫描线、右侧数据流,哈夫克风格 |
| 🪟 标题栏隐身 | Windows 上隐藏原生最小化/最大化/关闭按钮,不需要全屏 |
| ⚙️ 设置面板 | 挂在「设置 → 插件 → 哈夫克Relink」,可关动画、重播 |
| 🛡 绝不锁死 | 任何一步失败都放行页面,视频 15s 兜底放行 |
安装
前置条件
- DeepSeek Harness 桌面版(Windows / macOS)
- DSH 版本 ≥ 0.2.1-rc.2
- 能访问 npm registry
展开完整文档(README 剩余 1 节)
dsh-haavk-boot
Listed on dsh-plugin.org
哈夫克 Relink 节点启动固件 — DeepSeek Harness(DSH / Cordis)的开机动画插件。
信息与你无限,Relink 重塑未来。
一句话:让 DSH 启动时先播一段原生开机动画,再进主界面。
启动屏
特性
| 特性 | 说明 |
| 🎬 全屏开机视频 | H.264 1080p 原生渲染,object-fit: cover 满屏,不黑边 |
| 💬 逐句字幕 | 6 条字幕按视频真实播放时间点亮,与配音严格对齐 |
| ✨ 粒子层 | Canvas 星尘 + 光尘,mix-blend-mode: screen 叠在视频上 |
| 🎛 HUD 边框 | 四角光标、扫描线、右侧数据流,哈夫克风格 |
| 🪟 标题栏隐身 | Windows 上隐藏原生最小化/最大化/关闭按钮,不需要全屏 |
| ⚙️ 设置面板 | 挂在「设置 → 插件 → 哈夫克Relink」,可关动画、重播 |
| 🛡 绝不锁死 | 任何一步失败都放行页面,视频 15s 兜底放行 |
安装
前置条件
- DeepSeek Harness 桌面版(Windows / macOS)
- DSH 版本 ≥ 0.2.1-rc.2
- 能访问 npm registry
⚡ 安装(一条命令)
dsh plugin --profile web add @shawsheepsussiah/dsh-haavk-boot
桌面版把 web 换成 desktop:
dsh plugin --profile desktop add @shawsheepsussiah/dsh-haavk-boot
装上就生效。 不用改 package.json、不用配 allowBuilds、不用手动改 bundles —— DSH 会自动把它加进 dsh.profile.bundles。
装完后 完全退出 DSH(托盘也要退),重新打开,就能看到开机动画。
--profile 后面跟的是 profile 名。不确定有哪些,看 ~/.dsh/profiles/ 下面有哪些目录。
装完没效果?
看日志 ~/.dsh/@shawsheepsussiah/dsh-haavk-boot/boot.log(0.2.4 及更早写在 ~/.dsh/dsh-haavk-boot/boot.log),正常会有:
apply() v=0.2.6 webServer=yes inject=["webServer"]
route ok /plugins/dsh-haavk-boot/splash.css
...
tapIndex=function
注意:一定要「完全退出」DSH(托盘图标也要退),只关窗口不算——插件是启动时读配置的。
手动安装(不推荐)
只有在无法访问 npm registry 时才需要。
从 GitHub 源码装
cd ~/.dsh/profiles/desktop
mkdir -p plugins
git clone https://github.com/ShawSheepSussiah/dsh-haavk-boot.git plugins/dsh-haavk-boot
然后编辑 ~/.dsh/profiles/desktop/package.json:
{
"dependencies": {
"@shawsheepsussiah/dsh-haavk-boot": "link:./plugins/dsh-haavk-boot"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@shawsheepsussiah/dsh-haavk-boot"
]
}
}
}
⚠️ bundles 里插件必须放在最后。数组顺序就是加载顺序,@deepseek-ai/dsh-base / dsh-web-app 要先于插件。
最后 pnpm install,完全退出 DSH 再打开。
卸载
dsh plugin --profile desktop remove @shawsheepsussiah/dsh-haavk-boot
再手动从 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles 里删掉一行:
"@shawsheepsussiah/dsh-haavk-boot"
(pnpm 不会自动清 bundles,这是当前 DSH 的行为。)
重启 DSH 即可。
目录结构
dsh-haavk-boot/
├── package.json 插件清单(含 dsh.bundle.patch 声明) ├── cordis.patch.yml 把插件插入 loader 树的 patch ├── lib/ │ ├── index.js Host 端:注册路由 / 配置 / SSE / 遥测 │ ├── client.js Web 端:自举启动屏 + 设置面板 │ ├── splash.js 启动屏运行时:视频 → 字幕 → 溶解 │ ├── splash.css 启动屏样式(全屏锁死 + HUD + 粒子层) │ └── assets/ │ └── boot.mp4 开机视频(6.2 MB,H.264 1080p) └── docs/screenshots/
工作原理(给想改的人)
启动屏怎么出现
DSH 桌面端的主页面是 dsh-app://app/index.html,直接从 dist 目录读文件返回,不经过 Host 的 renderIndex / tapIndex 注入流程。
所以本插件走的是客户端自举:
client.js 被 __ModuleLoader__ 加载 └─ apply() → 读 localStorage 上次配置 → 首帧决定挂不挂(不等 HTTP) └─ mountSplash() ├─ 往 <body> 插入空壳 ├─ 挂载 /plugins/dsh-haavk-boot/splash.css └─ 加载 /plugins/dsh-haavk-boot/splash.js ├─ 自己构建全部 markup(video / HUD / 6 条字幕 / 进度条) └─ 播放 /plugins/dsh-haavk-boot/asset/boot.mp4 └─ 按 video.currentTime 点亮 6 条字幕 └─ 视频结束 → 溶解 → 移除 root → 解锁滚动
window.__DSH_HAAVK_CFG__ 由上层注入,splash.js 只读不写;markup 只有这一个来源,Host 的 tapIndex 也只注入空壳,避免两处漂移。
驱动只有一条回路:driver ∈ {'video','clock'}。视频能起播就用 video.currentTime;1.6 秒宽限期内没起播,整体切到墙钟;17 秒硬兜底一定放行(绝不锁死黑屏)。
/plugins/dsh-haavk-boot/* 这些路径会被桌面协议层转发给 Host 的 webServer,由 lib/index.js 注册的路由提供文件。
字幕时间轴
| # | 起 | 止 | 文字 |
| 1 | 0.00s | 1.43s | 信息与你无限, |
| 2 | 1.53s | 3.03s | Relink 重塑未来。 |
| 3 | 3.03s | 5.37s | 欢迎使用 Relink 三号体验版。 |
| 4 | 5.60s | 8.00s | 本设备将持续采集上传您的 |
| 5 | 8.00s | 10.33s | 生理体征、精神状态相关数据, |
| 6 | 10.53s | 13.63s | 请在使用前,检阅并签署用户协议。 |
由 splash.js 里的 CUES 数组控制,改时间轴直接改这个数组。
标题栏按钮怎么隐藏(Windows)
那三个按钮是 Windows 原生绘制的,不是网页元素,z-index 再高压不住。
DSH 的 preload 里有一段逻辑:往 <body> 塞一个隐藏 探针,读它的计算色,通过 IPC 调 setTitleBarOverlay({color, symbolColor})。
本插件做的:
1. 找到那个探针 ,把它的内联色改成 rgba(0,0,0,0)
2. 同时在 body 上覆盖 --dsw-specific-sidebar-fill / --dsw-alias-label-primary(这两个变量定义在 body 上,写 html 无效)
3. poke 一次 body.style,触发 preload 的 MutationObserver 重发 IPC
4. 启动屏结束 → 恢复原值
不需要全屏,窗口模式下也能隐身。
安全兜底
- 首帧用 localStorage 缓存的上次配置决策,不等 /config 回来(避免主界面先闪一下)
- /config 回来若与缓存不一致,会纠正:该撤就撤、该挂就挂(unmountSplash() 会复位 splashScheduled)
- 视频 1.6s 内没起播 → 切墙钟驱动字幕,17s 硬兜底放行
- 视频加载失败 → 直接切墙钟
- splash.js 加载失败 → client.js 的 onerror 移除 root 并解锁
- 任何 try/catch 都吞掉异常,绝不阻塞 DSH 主界面
- 视频路由支持 Range / 206 / ETag 304 / 416,Electron 重播不再重新拉 6.2MB
Host 路由
| 路径 | 方法 | 作用 |
| /splash.css | GET | 启动屏样式 |
| /splash.js | GET | 启动屏运行时 |
| /asset/boot.mp4 | GET | 开机视频(支持 Range / 206 / 304 / 416) |
| /config | GET / PATCH | 读 / 写配置 |
| /events | GET | SSE 状态推送 |
| /status | GET | 当前状态快照 |
| /logs | GET | 遥测日志 |
| /preview | POST | 手动触发一次序列预览 |
| /task | POST | 后台任务 |
访问控制基于「本机回环 socket」;Origin: dsh-app://app(桌面壳自定义协议)放行,跨源 http Origin 一律 403。
自定义
换视频
建议先转成 H.264(HEVC 在 Electron 里可能不播)
ffmpeg -i 你的视频.mp4 -c:v libx264 -profile:v high -pix_fmt yuv420p \
-crf 20 -preset medium -vf "scale=1920:-2" \
-c:a aac -b:a 128k -movflags +faststart \
lib/assets/boot.mp4
改字幕
编辑 lib/splash.js 里的 CUES,同时改 lib/client.js 里 SPLASH_HTML 的 文案。两边必须条数一致。
改外观
lib/splash.css 里全部是 #dsh-startup-root 作用域下的样式,字体、颜色、位置都在那。
设置面板
装好后打开 设置 → 插件 → 哈夫克Relink,可以:
- 启用 / 关闭节点
- 开关开机启动屏
- 开关视觉层(粒子 / HUD)
- 开关音频
- 开关「热重载后重播」
- 一键重播启动屏(同时会 POST 一次 /preview)
改动会写入 ~/.dsh/@shawsheepsussiah/dsh-haavk-boot/settings.json。
排错
启动屏不出现?
1. 确认 ~/.dsh/profiles/desktop/package.json 的 bundles 里有 dsh-haavk-boot
2. 确认 plugins/dsh-haavk-boot/cordis.patch.yml 存在(缺这个 loader 不会加载)
3. 完全退出 DSH 再打开(关窗口不算)
4. 看 ~/.dsh/@shawsheepsussiah/dsh-haavk-boot/boot.log,正常应该有:
apply() v=0.2.6 webServer=yes inject=["webServer"]
route ok /plugins/dsh-haavk-boot/splash.css
...
tapIndex=function
打开就弹「应用无法启动或已意外停止 / 1 entry did not activate」?
这是 client.js 注册 id 与包名不一致造成的。控制台里会有:
client-modules: duplicate factory registration for "dsh-haavk-boot"
含义:__ModuleLoader__.load({ id }) 用了不带 scope 的 dsh-haavk-boot,而 Host 的 graph row id 是完整包名 @shawsheepsussiah/dsh-haavk-boot,两边对不上,combo 脚本注册失败后 Host 回退单资源 URL 再执行一次,于是撞 duplicate,整条 boot entry 卡死。
修法:id 必须是 package.json 的完整 name。0.2.2 及更早都有这个 bug,请升到 0.2.6+。
页面白屏打不开?
按 F12 看 Console。如果是 Identifier 'xxx' has already been declared,说明 client.js 顶层有变量声明——本插件所有变量都在 factory 内,不应出现;若你改过代码,把变量包回 factory 里。
字幕和声音对不上?
CUES 的时间是按视频音轨转写出来的。换视频后要重新对齐。
兼容性
- ✅ Windows 10/11 桌面版(标题栏隐身仅 Windows 生效)
- ✅ macOS(无标题栏按钮,其余功能正常)
- ⚠️ Web 版:启动屏会正常显示,但 / 页面需要登录态,client.js 加载时机可能略晚
许可
MIT
致谢
- 视觉风格来自《三角洲行动》哈夫克 Relink 开机仪式
- 插件架构参考 dsh-dafeiyu 的 slots 注册写法
天空属于哈夫克。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ShawSheepSussiah/dsh-haavk-boot
启动时播放全屏开机视频与字幕,再进主界面
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,269已汉化DSH
70.8
这是你的仓库?认领条目