dsh-power-controls:DSH 电源控制与自动收尾插件

前言

DeepSeek Harness (DSH) 采用插件化架构,在本地开发或调试时,有时需要重启后端或关闭服务。dsh-power-controls 在设置页面的「普通设置」中增加了两枚电源按钮,提供重启与关闭能力,并支持自动收尾机制,以防止页面关闭后服务器进程继续占用内存。

核心功能

该插件主要解决 DSH 后端的重启、关闭以及页面关闭后的资源释放问题。

  1. 重启 DSH (电源循环)
    点击按钮后,插件会杀掉当前运行的 dsh web 进程,等待端口 3080 释放,然后重新拉起新实例,最后验证端口监听是否成功。页面断线几秒后会自动刷新回来。

  2. 关闭 DSH (仅关闭后端)
    只关闭后端服务。浏览器标签页会停留在断线状态,用户需要双击桌面的 DSH Web 图标重新打开。

  3. 自动收尾 (等待所有页面停止 beaconing)
    默认开启。当所有浏览器标签页都关闭或不可见时,插件会等待一段时间(默认 15 秒),确认没有活跃的页面请求后,才退出进程。配置项 autoCloseMs 可设为 0 禁用此功能。

  4. 标签页图标切换 (鲸鱼娘)
    插件会将标签页的 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

安装完成后,刷新设置页面,在「普通设置」中即可看到两枚电源按钮。

自检与使用

由于没有浏览器界面,可以通过命令行工具检查插件状态。

  1. 健康检查端点
    插件提供了 /dsh-power/health 端点用于自检。
    curl http://127.0.0.1:3080/dsh-power/health
返回数据包含 `lastReport`(上次上报时间)、`reportCount`(上报次数)、`clicks`(点击次数)、`injected`(是否成功注入按钮)、`reconnect`(重连次数)以及 `clients`(当前活跃客户端列表)。
  1. 查看退出日志
    插件会将自动收尾的退出原因记录到日志文件 D:\deepseek\logs\dsh-power-auto-close.log,并在下一次启动时的 lastExit 字段中反馈。

总结

dsh-power-controls 通过在设置页增加电源按钮,简化了 DSH 后端的重启与关闭流程。其自动收尾机制能有效避免页面关闭后服务器进程的资源占用。安装时需注意先停后端,并在 Windows 上依赖任务计划程序完成重启。

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

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

小夜