前言¶
DeepSeek Harness (DSH) 采用插件化架构,在本地开发或调试时,有时需要重启后端或关闭服务。dsh-power-controls 在设置页面的「普通设置」中增加了两枚电源按钮,提供重启与关闭能力,并支持自动收尾机制,以防止页面关闭后服务器进程继续占用内存。
核心功能¶
该插件主要解决 DSH 后端的重启、关闭以及页面关闭后的资源释放问题。
-
重启 DSH (电源循环)
点击按钮后,插件会杀掉当前运行的dsh web进程,等待端口 3080 释放,然后重新拉起新实例,最后验证端口监听是否成功。页面断线几秒后会自动刷新回来。 -
关闭 DSH (仅关闭后端)
只关闭后端服务。浏览器标签页会停留在断线状态,用户需要双击桌面的 DSH Web 图标重新打开。 -
自动收尾 (等待所有页面停止 beaconing)
默认开启。当所有浏览器标签页都关闭或不可见时,插件会等待一段时间(默认 15 秒),确认没有活跃的页面请求后,才退出进程。配置项autoCloseMs可设为 0 禁用此功能。 -
标签页图标切换 (鲸鱼娘)
插件会将标签页的 favicon 替换为鲸鱼娘图片(128px)。服务端通过tapIndex注入资源路由,客户端通过applyFavicon()每次重渲染时重新确认图标状态。
重启机制说明¶
在 Windows 上,重启 DSH 依赖任务计划程序,而非简单的 spawn detached helper。
早期的实现方式是 spawn 一个 detached helper 进程,然后自己退出。这会导致问题:当父进程(dsh web)退出时,会回收整个进程树,helper 进程也会随之被杀掉,导致后端无法重新拉起。
为了避免这个问题,现在的实现方案是:
1. 点击「重启 DSH」按钮。
2. 后端注册一个名为 DSHPowerRestart 的计划任务。
3. 任务启动后执行 respawn-dsh-web.ps1 脚本:
* 按端口找到旧的 dsh web 并停掉。
* 等待 3080 端口释放(最多 60 秒)。
* 执行 start-dsh-web.ps1 -NoOpen 拉起新实例。
* 验证端口,最多重试 3 次。
4. 只有计划任务注册成功并启动后,后端插件才允许自己退出。
安装与启用¶
安装前必须先停止 DSH 后端。因为插件安装会让 pnpm 重解析依赖树,而正在运行的后端锁定了 lightningcss 原生模块,会导致后续安装报错(拒绝访问)。
# 从 GitHub 安装
dsh plugin --profile web add github:harmless0819-dev/dsh-power-controls
安装完成后,刷新设置页面,在「普通设置」中即可看到两枚电源按钮。
自检与使用¶
由于没有浏览器界面,可以通过命令行工具检查插件状态。
- 健康检查端点
插件提供了/dsh-power/health端点用于自检。
curl http://127.0.0.1:3080/dsh-power/health
返回数据包含 `lastReport`(上次上报时间)、`reportCount`(上报次数)、`clicks`(点击次数)、`injected`(是否成功注入按钮)、`reconnect`(重连次数)以及 `clients`(当前活跃客户端列表)。
- 查看退出日志
插件会将自动收尾的退出原因记录到日志文件D:\deepseek\logs\dsh-power-auto-close.log,并在下一次启动时的lastExit字段中反馈。
总结¶
dsh-power-controls 通过在设置页增加电源按钮,简化了 DSH 后端的重启与关闭流程。其自动收尾机制能有效避免页面关闭后服务器进程的资源占用。安装时需注意先停后端,并在 Windows 上依赖任务计划程序完成重启。