🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

开机自启 harmless0819-dev/dsh-autostart

DeepSeek Harness
harmless0819-dev40 天前有提交已提供中文文档扫描:未发现敏感能力

登录 Windows 时静默拉起 dsh web 并播放启动动画

29.4/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add harmless0819-dev/dsh-autostart
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 40 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 1 处,展示前 1 条)
  • 发起网络请求
    _cat.mjs:2
    const res = await fetch('http://127.0.0.1:3080/api/skin-center/v2/catalog')
扫描于 2026/10/31(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 登录时启动dshweb
  • 动态启动卡片
  • 避免重复启动

Windows 登录时启动 dsh web,带动态启动卡片。脚本自动定位,无控制台闪窗,已在运行的实例绝不重复启动。

README

由 DeepSeek 最新模型翻译生成
dsh-autostart 让 dsh web 开机自启,并配一个带启动动画的桌面快捷方式。 Windows 专用(wscript + PowerShell)。不闪黑框、不抢焦点、不会开出第二个实例。 ⚠️ 素材需自备:本仓库有意不含插画与音效(见下方「素材需自备」)。 脚本可直接用,只是启动动画会缺图。 安装 git clone https://github.com/harmless0819-dev/dsh-autostart cd dsh-autostart 桌面快捷方式:右键 start-dsh-web-with-splash.vbs → 发送到 → 桌面快捷方式。 登录自启:把 start-dsh-web.vbs 复制到启动文件夹(%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\),或参照「关掉自启」一节反向操作。 可配置项 脚本是自定位的:以自身目录推出仓库根,再由仓库根的父目录推出工作区,所以整个文件夹可以搬到任何地方。
展开完整文档(README 剩余 1 节)
dsh-autostart

让 dsh web 开机自启,并配一个带启动动画的桌面快捷方式。

Windows 专用(wscript + PowerShell)。不闪黑框、不抢焦点、不会开出第二个实例。

⚠️ 素材需自备:本仓库有意不含插画与音效(见下方「素材需自备」)。
脚本可直接用,只是启动动画会缺图。

安装

git clone https://github.com/harmless0819-dev/dsh-autostart
cd dsh-autostart

桌面快捷方式:右键 start-dsh-web-with-splash.vbs → 发送到 → 桌面快捷方式。

登录自启:把 start-dsh-web.vbs 复制到启动文件夹(%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\),或参照「关掉自启」一节反向操作。

可配置项

脚本是自定位的:以自身目录推出仓库根,再由仓库根的父目录推出工作区,所以整个文件夹可以搬到任何地方。全部可用环境变量覆盖:

| 环境变量 | 对应参数 | 默认 |
| DSH_WORKDIR | -WorkDir | 本仓库的父目录 |
| DSH_LOG_DIR | -LogDir | \logs |
| DSH_NODE_EXE | -NodeExe | PATH 上的 node |
| DSH_CLI_JS | -DshCli | npm root -g 下的 @deepseek-ai/dsh/lib/bin.js |
| DSH_SPLASH_TUNE | -TuneFile | \splash-tune.wav |

素材需自备

本仓库有意不包含以下素材(其来源与授权不在本项目的处置范围内):

| 文件 | 用途 | 缺了会怎样 |
| splash-frames\frame-.png | 启动动画的帧 | 跳过动画直接启动 |
| splash-tune.wav | 启动音效 | 静音(不报错退出) |
| dsh-web.ico | 桌面图标 | 用系统默认图标 |

用自己的素材补上同名文件即可;.gitignore 已挡住它们,避免误提交。

已知坑(写脚本时踩过)

- $PSScriptRoot 在 param() 里是空的:参数默认值在 param 块求值时 $PSScriptRoot 还没填充,用它算出的默认值是空字符串。正确做法是 param 里留空、块后再解析。(本仓库早期版本就踩了这个:Split-Path $PSScriptRoot -Parent 直接抛 Cannot bind argument to parameter Path because it is an empty string。)
- .ps1 含非 ASCII 必须带 BOM:PowerShell 5.1 把无 BOM 的 .ps1 按 ANSI 读,中文注释会变乱码并吃掉引号。本仓库脚本全部 ASCII-only,故无需 BOM。
- .vbs 必须 ASCII-only:wscript 同样按 ANSI 读无 BOM 的 .vbs。
- 改完别靠「看起来对」,用解析器校验:
[System.Management.Automation.Language.Parser]::ParseFile($p, [ref]$null, [ref]$err)

下面是原设计笔记(保留)

不闪黑框、不抢焦点、不会开出第二个实例。

桌面快捷方式(带启动动画)

桌面上的 DSH Web.lnk 走这条链路:wscript.exe → start-dsh-web-with-splash.vbs → show-splash.ps1 → start-dsh-web.ps1。

- 双击后屏幕中央弹出一张圆角卡片:鲸鱼娘动画(进场一次 + 无缝循环)配 waking up dsh web... 状态行
- 端口 3080 就绪后自动淡出关闭;60 秒兜底超时;-MinShowMs(默认 1400)保证端口已在时也是「露个脸」而不是闪一下
- 端口探测是纯异步观察(ConnectAsync 状态机),动画 tick 里零阻塞,不卡 UI
- 后台启动脚本本身幂等(3080 已监听就什么都不做),所以桌面图标和开机自启可以随便混用,双击已运行中的实例也不会再开一个
- 图标用 dsh-web.ico(用户提供的鲸鱼娘插画;7 个尺寸,16-48px 用头部特写、64-256px 用全身,因为全身缩到 16px 会糊成一团)

启动动画怎么组成

元素坐标不是估的:从「完整贴纸」参考图用连通域分析量出每个元素的位置与尺寸,再拆成 18 个独立 PNG 放进 .donghua/elements/(elements.json 记录坐标)。

| 元素 | 数量 | 动效 |
| 角色 | 1 | 进场:上浮 + 淡入 + 微放大;循环:浮动 ±5px、摇摆 ±1.6°、呼吸缩放 |
| 拱形文字「小肥鱼太棒了!」 | 1 | 进场:从上方带回弹落下;循环:轻浮 ±2px |
| 四角星 | 5 | 进场:错峰弹出(回弹过冲);循环:各自闪烁(缩放 + 透明 + 微浮动) |
| 速度线 | 11 | 进场:淡入;循环:沿自身主轴漂移(主轴角度由像素二阶矩算出) |

播放序列:frame-001..014 进场(播一次)→ frame-015..038 循环(无缝)。

卡片比例(金比例横版)

白底卡片是 380x235,即 高:宽 = 0.618:1(380/1.618 = 234.9)。插画本身是竖构图(参考图 1652x1883),所以做法是:

- 插画按卡片高度缩放(留 6px 上下余量 → 高 223、宽 196),水平居中,两侧自然留白
- 动效幅度跟着插画缩放走(合成器里的 MO = ART_H / 433),所以卡片变小后浮动/摇摆仍然是小幅的
- waking up ... 状态行放在卡片外的 34px 浅色窄条里(#EEF2F9 + 1px 分隔线 #DEE4EE),这样白底本体的比例不被状态条破坏

改比例只需动合成器顶部的 CARD_W / CARD_H / ART_MARGIN 三个常量。
两个细节是刻意做的:① 循环每个相位都归零(sin(θ+φ) - sin(φ)),所以循环第一帧与进场最后一帧严丝合缝;② 帧底色烤成不透明,圆角交给窗体 Region 裁,PictureBox 不需要透明,播放不闪烁。

参数:-Port、-TimeoutSec、-MinShowMs、-NoBoot(调试:不拉后端)、-FrameMs / -IntroFrames。

重做动画:改 .donghua/elements/ 里的元素图(或 elements.json 坐标),再重新渲染 38 帧:

python D:/deepseek/dsh-autostart/.donghua/build-splash-frames.py

它长什么样

Windows 登录 └─ 启动文件夹: DSH Web Autostart.vbs ← wscript.exe,GUI 子系统,不会闪黑框 └─ powershell : D:\deepseek\dsh-autostart\start-dsh-web.ps1 └─ node.exe: dsh web --port 3080 ← 后台常驻,stdout/stderr 直接写日志文件

start-dsh-web.ps1 每次只做四件事:

1. 探一下 3080 端口 —— 已在监听就不开第二个实例,而是把 UI 还给你:从 dsh-web-autostart.out.log 里读出本次实例的带 token 地址并打开浏览器(-NoOpen 时只记日志);
2. 校验 node 和 dsh CLI 还在不在(缺了会写日志而不是静默失败);
3. 用 Start-Process 把 node ... web --port 3080 甩到后台,stdout/stderr 重定向进日志文件;
4. 最多等 60 秒确认端口起来了,然后轮询 stdout 里的 dsh web: http://...?token=... 那行(它比监听晚一点出现)并写进日志(起不来只记警告,不重启)。

文件

| 路径 | 作用 |
| %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\DSH Web Autostart.vbs | 登录触发入口;删掉它就等于关掉自启 |
| D:\deepseek\dsh-autostart\start-dsh-web.ps1 | 真正干活的脚本(ASCII-only,见下) |
| D:\deepseek\logs\dsh-web-autostart.log | 自启脚本自己的日志:启动、就绪、带 token 的 URL |
| D:\deepseek\logs\dsh-web-autostart.out.log | dsh web 的 stdout(dsh web: http://... 这行就在这) |
| D:\deepseek\logs\dsh-web-autostart.err.log | dsh web 的 stderr(启动报错、插件挂载失败看这里) |
| D:\deepseek\dsh-autostart\.test\fake-web.js | 自测用的假 dsh web,用来验证启动链路而不碰 ~/.dsh |
| D:\deepseek\dsh-autostart\show-splash.ps1 | 启动动画播放器(预载 38 帧 + 端口异步探测 + 淡入淡出) |
| D:\deepseek\dsh-autostart\splash-frames\ | 渲染好的动画帧(进场 14 帧 + 循环 24 帧) |
| D:\deepseek\dsh-autostart\.donghua\ | 素材包解出的分层图 + 合成器脚本(build-splash-frames.py) |
| D:\deepseek\dsh-power-controls\respawn-dsh-web.ps1 | 电源循环脚本(设置页「重启 DSH」按钮走这条链) |

旧日志每次启动会被顶成 .prev,所以 .out.log 里的 URL 一定属于本次启动。

手动测试 / 排障

正常跑一次(端口在监听就什么都不做) powershell -ExecutionPolicy Bypass -File D:\deepseek\dsh-autostart\start-dsh-web.ps1

完整演练,不碰 3080、不弹浏览器: powershell -ExecutionPolicy Bypass -File D:\deepseek\dsh-autostart\start-dsh-web.ps1 -Port 3099 -NoOpen -Force -DshCli D:\deepseek\dsh-autostart\.test\fake-web.js

看结果:

Get-Content D:\deepseek\logs\dsh-web-autostart.log -Tail 5
Get-Content D:\deepseek\logs\dsh-web-autostart.out.log -Tail 5
netstat -ano | Select-String ':3080'

想手动拿本次的 GUI 地址:dsh-web-autostart.log 里最后一条 ready on port 3080: http://... 就是(带 token,直接粘进浏览器)。

关掉自启

删掉启动文件夹里的 DSH Web Autostart.vbs 即可,其他文件留着不影响。
只想临时跳过:登出前把该 VBS 改个扩展名也行。

关掉浏览器 ≠ 关掉 DSH(这条最容易踩)

dsh web 是个服务器:关掉浏览器标签页只是断开一个客户端,3080 依旧被占着。

以前这时候再启动一次,start-dsh-web.ps1 会静默退出(日志里只写 "nothing to do"),人看不到任何反馈,很容易转而去手敲 dsh web —— 那就撞上 EADDRINUSE: address already in use :::3080,看着就像"关个浏览器把端口搞坏了"。

现在的规则很简单:

| 你想干什么 | 怎么做 |

| 把界面找回来(后端还在跑) | 双击桌面图标 — 会读出带 token 的地址并打开浏览器 |
| 真的关掉 DSH(前后端) | 设置 → 普通设置 → 关闭 DSH(dsh-power-controls 插件),端口随之释放 |

| 只重启后端 | 同页面 重启 DSH(计划任务式的电源循环,见插件 README) |

| 想要一个临时实例 | dsh web --port 0(让系统随便挑个空闲端口,不碰 3080) |

为什么不做“关掉浏览器就自动关服务”:agent 就跑在这个后端里,浏览器一关就把正在跑的回合连同会话一起掐掉,太危险。所以关闭必须是一个明确动作(那个按钮)。

启动音效(小鲸鱼之歌)

- 片段:splash-tune.wav = 拿 D:\deepseek\表情\小鲸鱼唱歌.wav(20.4 秒原曲)剪的前 6.5 秒,带 0.25s 淡入 + 1.4s 淡出,所以收尾是渐弱而不是被切断
- 双击桌面图标:splash 打开时播放。卡片消失后脚本会多活一会儿(-TuneSec,默认 6.5)把这段放完再退出 —— 不这样的话进程一退声音就断了
- 登录时:启动文件夹那个 VBS 传了 -Tune,同样播这一段
- 想关掉:splash 加 -NoTune;登录那首把 VBS 里的 -Tune 删掉即可
- 想用整首:-Tune -TuneSec 20.43

为什么用 System.Media.SoundPlayer:Play() 是异步的,不会卡住动画那 20fps 的 timer;代价是进程必须活着,所以才有上面那段“等它放完”。

几个刻意的设计

- 为什么用 wscript 中转:计划任务或启动项里直接跑 powershell.exe -WindowStyle Hidden 仍会闪一下控制台窗口并抢走键盘焦点;wscript.exe 是 GUI 子系统程序,.Run(..., 0, ...) 让控制台从头就是隐藏的。
这套做法和本机 Fix-TaskFlashWindow.ps1 里给计划任务做的 shim 是同一个道理。
- 为什么不用 cmd /c "... >> log":Start-Process 传含引号的参数会被重新加引号, cmd /c 再去掉外层引号,两边的规则叠加后命令会被解析得面目全非(实测日志文件根本不生成)。
改成 Start-Process node.exe -RedirectStandardOutput 直接落文件,既没有引号博弈,也没有管道——不会出现「父进程退出把管道带走」的问题。
- start-dsh-web.ps1 里只有英文注释:Windows PowerShell 5.1 读没有 BOM 的 .ps1 会按 ANSI 解码,中文注释会变乱码甚至破坏解析(这条规矩抄自 Fix-TaskFlashWindow.ps1)。中文文档都放在这个 README 里。

已知边界

- 自启发生在登录时,不是开机即跑:dsh web 依赖当前用户的 ~/.dsh 和凭据,没登录跑起来也是另一个环境。
- 没有看门狗:dsh web 自己崩了不会自动拉起(这是当初选的方案)。要更稳就把 start-dsh-web.ps1 塞进一个计划任务里按需定时重跑——它有端口探测,重复执行是安全的。
- 浏览器由 dsh web 自己打开。如果它打开失败,stderr 会写进 .err.log,start-dsh-web.ps1 里也留了 -NoOpen 开关可以关掉。
预览分享卡片长什么样 ↓harmless0819-dev/dsh-autostart
分享 · DeepSeek Harness Hub
harmless0819-dev/dsh-autostart

登录 Windows 时静默拉起 dsh web 并播放启动动画

回到顶部