前言¶
在 DeepSeek Harness (DSH) 的开发与调试过程中,有时需要重启 dsh web 进程。这通常发生在修改了配置文件、更改了插件宿主半、调整了端口或工作区,或者需要清除会话状态时。传统的做法是打开终端、手动停止进程并重新启动。dsh-plugin-restart 插件在设置中提供了一个重启按钮,通过一次点击即可替换正在运行的服务进程,并让页面自动重连。
插件介绍¶
该插件由 chenkui-luo 维护,采用 MIT 许可证。它通过在 DSH 的设置界面中添加一个重启卡片,解决了需要终端操作或重新打开桌面图标才能重启的问题。插件运行在 DSH 的 web 上下文中,不需要管理员权限,也不会触碰系统配置。
安装与启用¶
在终端中执行以下命令即可安装:
dsh plugin --profile web add github:chenkui-luo/dsh-plugin-restart
安装完成后,刷新页面,进入设置界面即可看到重启选项。
核心功能¶
- 进程替换与自动重连:点击按钮后,会替换当前 serving 页面的
dsh web进程,页面会自动重新连接。 - 无需终端操作:整个过程在浏览器设置中完成,不需要打开命令行终端。
- 处理热重载失效场景:针对插件宿主半修改、配置修改、端口变更或会话状态清除等无法热重载的情况提供解决方案。
- 安全机制:仅支持认证的 same-origin loopback 请求,不接受代理转发的请求。
- 权限控制:不需要管理员权限,不修改系统配置。
使用流程¶
点击设置中的重启按钮后,后台会按顺序执行以下操作:
- 发起请求:页面发送
POST /dsh-restart/restart请求,请求为认证的 same-origin。 - 启动辅助进程:宿主半启动一个 detached helper 进程,并在任何服务停止前响应请求。
- 等待端口释放:helper 等待端口停止接受连接。
- 启动器接管:launcher 启动一个新的
dsh web实例,并写入启动令牌文件。 - 确认替换:helper 确认新实例已就绪,然后允许旧进程退出。
- 页面重连:页面在下一次轮询中检测到新的实例 ID,从而重新加载自己。
注意事项¶
- 中断对话:重启会中断当前正在进行的对话轮次,这是重启的标准行为。
- 端口占用:如果端口被 launcher 无法识别的进程占用(例如手动启动的
dsh web),重启操作会接管该端口,包括其进程树。 - 错误提示:当关键文件缺失时,按钮会报告清晰的错误,而不是假装工作。
日志与配置¶
重启过程的详细日志保存在本地:
%LOCALAPPDATA%\DeepSeekHarness\restart-plugin\logs\restart.log
插件支持以下环境变量配置:
| 变量名 | 作用 |
|---|---|
DSH_RESTART_INSTALL_DIR |
Launcher 运行时目录(默认 %LOCALAPPDATA%\DeepSeekHarness) |
DSH_RESTART_DATA |
插件私有数据目录(默认 <INSTALL_DIR>\restart-plugin) |
DSH_RESTART_LAUNCHER |
指向另一个 launcher 脚本(用于便携安装或测试) |
结尾¶
该插件通过自动化进程替换与重连流程,简化了 DSH 的日常维护工作。更多细节与源码,请参考插件目录或GitHub 仓库。