Mandarin715/dsh-autostart ↗★ 1
dsh-autostart
Windows-only DSH plugin: one-click boot autostart and a restart that cannot leave DSH down. No console window ever.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Mandarin715/dsh-autostart说明文档
阅读完整 README ↗使用
| 控件 | 作用 |
|---|---|
| 服务状态 | 实时探测端口,显示运行中/已停止 |
| 开机自启开关 | 启用时会写 ~/.dsh/dsh-autostart/config.json、生成 bootstrap.vbs,并写入注册表 HKCU\...\Run 的 DSH autostart 项 |
| 当前访问地址 | 从捕获的启动输出里解析出的最新带 token 地址,可一键复制 |
| 重启服务 | 二次确认后重启;DSH 会在数秒内恢复。它会先确保有看护进程在跑、由它把 DSH 拉回来;起步失败则当场拒绝这次重启 |
| 钩子脚本 | 可选。服务起来后会执行它,用于拉起你自己的依赖进程 |
页面完全打不开? 这张卡片只在 DSH 运行时才存在 —— 见下面的「服务没起来时怎么救」。
配置
在 profile 的 cordis.patch.yml 里:
- id: dsh-autostart
name: dsh-autostart
config:
hookScript: '' # 可选,服务起来后执行的脚本绝对路径
dshPort: 3080
exitDelayMs: 800 # 重启时旧宿主退出前的延时;上限 5000(见下方说明)
waitForExitMs: 30000 # 自常驻看护进程取代旧重启路径后已无读者 —— 保留只是为了让
# 已存在的 config.json 仍能加载
startTimeoutMs: 30000
openBrowserOnBoot: false # true = 开机时自动打开浏览器
blockWhenAgentsRunning: false # true = 有 Agent 在跑时拒绝重启
allowedHosts: [] # 经反代访问时填你的域名(必须显式填写),如 ['derp.example.com']
exitDelayMs的有效上限是 5000 毫秒。 这个延时只为让重启响应先刷出去、旧宿主再退出;而新拉起的 看护进程等这个宿主退出只等 30 秒(DEFAULT_TAKEOVER_EXIT_MS)。延时超过那个窗口,接管就会放弃并收工, 重启也就变成了关机 —— 所以超过 5000 的值在使用处被截断到 5000,而不是拒绝加载 (index.js的MAX_EXIT_DELAY_MS)。
allowedHosts必须由你显式填写(opt-in)。 默认是空数组,即不信任任何非回环的 Host。 如果你是通过反向代理访问 DSH(例如 frp + auth-proxy,它会把浏览器发来的原始 Host 转发过来), 那么请求里的 Host 是公网域名而不是127.0.0.1,写操作按钮(启用/停用自启、重启服务)会被守卫 拒绝并返回 403。把你的域名填进allowedHosts后这些按钮才可用;同源校验 (Origin 必须与 Host 完全一致)对这些条目仍然生效——可接受的写法见下。
allowedHosts 可接受的写法:裸主机名,或 host:port,例如 ['derp.example.com'] 或
['derp.example.com:8443']。不要带协议头或路径(https://derp.example.com/ 是错的)。
浏览器访问 https://derp.example.com 时 Host 不带端口,因此对白名单里的权威跳过本地 dshPort
校验——填进白名单本身就是显式授权,而 Origin 与 Host 的同源校验依然必须成立。回环地址仍保持严格端口校验。
改配置后要不要重新启用自启?——要,但原因不是 dispose。
hookScript/dshPort/startTimeoutMs这些字段是在**「启用自启」时快照进config.json** 的,而看护进程读的是config.json、不是插件的实时配置。所以改了它们**必须回设置页 重新点一次「启用自启」**才会生效(重复启用是幂等的)。真机实测过:改了hookScript却只重启服务,config.json里仍是旧值,钩子不会执行。 而allowedHosts只影响插件的路由守卫,重载即生效,与自启无关。waitForExitMs同样会被快照,但已经没有任何代码读它(见上方配置示例里的说明)。注册表项不会因为改配置而消失。 插件只在自己真的被卸载时(判据:本插件的
service.js已不存在)才移除DSH autostart;DSH 因重载或加载失败而拆解插件树时保留它。