前言¶
在 DSH 的插件机制里,Web 侧边栏和 agent 工具都可以扩展。对于经常在前台终端运行 dsh web 的场景,一次完整重启通常需要手动结束当前进程,再用原始命令重新启动;如果旧进程还没有退出,或者 Web 端口仍被占用,重启就容易失败。
dsh-web-restart 针对这个流程提供侧边栏按钮和 agent 可调用工具:终止当前 dsh web 进程,并在旧进程退出、端口空闲后,以相同命令重新拉起。重启期间页面不刷新,同一会话标签页会自动恢复 UI。
这是什么¶
dsh-web-restart 是一个 DSH Web 插件,用于从侧边栏一键完整重启 harness。
它会做三件事:
- 结束当前
dsh web进程。 - 通过启动守卫等待旧进程退出且 Web 端口空闲。
- 以相同命令行重新拉起
dsh web,并保留原有运行参数。
仓库路径为 csdjl88/dsh-web-restart,许可证为 MIT。由于 npm 名称 dsh-restart 已被同目的项目占用,该插件发布为 dsh-web-restart。
核心功能¶
侧边栏重启按钮¶
插件在 sidebar.footer.action 行提供一个重启按钮。点击后会直接触发重启,没有确认对话框。该设计适用于 single-user、trusted-host 场景。
完整进程重启¶
插件会终止当前 dsh web 进程,并以相同命令行重新拉起。重启会保留 --profile、--patch 及内部参数,并且始终确保新进程带有 --no-open,避免再弹出一个浏览器窗口。
启动守卫¶
新进程不会立即启动。插件会等待旧进程退出,并且确认 Web 端口空闲后,才拉起新的 dsh web。因此,在不需要 systemd、Docker、pm2 等守护进程的情况下,也可以完成一次受控重启。
页面自动恢复¶
重启期间,按钮会显示 Restarting…,并轮询健康端点。页面不会整页刷新,也不会打开新标签页。DSH WebSocket 自动重连后,UI 会在同一会话标签页恢复。
Agent 可调用工具¶
插件提供 dsh_restart 工具,可以和 Web 按钮共用同一套重启核心。
单次执行保护¶
当一次重启正在进行时,重复点击按钮或再次调用工具会被拒绝,避免并发触发多次重启。
双语支持¶
插件提供中英文双语 UI 文案和 README。
安装与启用¶
插件要求 DSH 0.1.0-rc.7 或更新版本。
安装命令如下:
dsh plugin --profile web add github:csdjl88/dsh-web-restart
安装完成后,需要重启 DSH,重启按钮才会出现在侧边栏底部。
典型用法¶
Web 按钮¶
安装并重启 DSH 后,可以点击侧边栏底部的 Restart DSH 按钮。
重启期间,按钮会显示 Restarting… 并自动轮询。页面不会刷新,DSH WebSocket 自动重连后恢复 UI。
如果新进程在 30 秒内未就绪,界面会显示错误。此时应检查运行 dsh 的终端。
Agent 工具¶
在对话中可以直接要求重启 DSH。对应工具是 dsh_restart,可选参数为 reason。
例如,可以在对话中要求:
restart DSH
需要注意:一次重启会中断所有正在运行的 agent 任务和后台作业。
底层接口与契约¶
插件通过以下 HTTP 端点触发和检查重启状态:
POST /dsh-restart
GET /dsh-restart/health
其中 POST /dsh-restart 用于触发重启,GET /dsh-restart/health 返回存活信息,并返回 pid,便于前端识别新进程。
插件还会使用以下环境契约:
DSH_RESTARTED_BY
DSH_RESTART_OLD_PID
DSH_RESTART_PORT
适用场景与注意¶
适合的场景¶
该插件适用于在前台终端运行 dsh web、且没有 supervisor 自动拉起策略的环境。
它适合用于:
- 修改 DSH Web 插件、补丁或相关配置后重启 harness。
- 从浏览器侧边栏触发一次完整进程重启。
- 让 agent 在对话中直接调用重启工具。
与 supervisor 同时使用时要谨慎¶
如果运行环境已经使用 systemd、Docker、pm2 等 supervisor,并且配置了自动重启策略,插件的启动守卫和 supervisor 可能同时尝试拉起新进程。
这会导致两个实例竞争端口,其中一个进程可能触发 EADDRINUSE。
在受 supervisor 管理的环境中,建议禁用 supervisor 的自动重启策略,或移除 dsh-web-restart 插件。
重启后如何停止 DSH¶
重启后的新 dsh web 会运行在自己的 session,也就是自己的进程组。旧的前台进程组退出后,可能不再接收终端的 Ctrl+C。
停止重启后的 DSH,可以使用以下任一方式:
- 关闭运行
dsh的终端窗口。 - 在该终端中按
Ctrl+D。 - 在新终端中执行:
pkill -f "dsh web"
或者:
kill <pid>
权限与安装前检查¶
该插件会终止并重新拉起当前 dsh web 进程,相当于对当前 DSH 运行环境执行完整重启。安装前建议检查源码、依赖和 MIT 许可证,确认其行为符合当前使用环境的要求。
结尾¶
dsh-web-restart 解决的是前台运行 dsh web 时的完整重启问题:保留原命令参数,避免端口竞争,避免打开新标签页,并提供 Web 按钮和 dsh_restart agent 工具。它适合无 supervisor 的前台 DSH Web 环境,也可以让 agent 在对话中直接触发重启。
目录页:
https://www.skillhub.cn/plugins/csdjl88/dsh-web-restart
GitHub 仓库:
https://github.com/csdjl88/dsh-web-restart