在开发智能体或调整配置时,修改 bundle、插件或主题后需要重启服务。手动操作依赖桌面启动器,路径或启动参数可能不一致,导致环境差异。本插件在 DSH 设置页的 General 区添加“重启 Web 服务”按钮,直接复用当前运行进程的配置进行重启,页面会在服务就绪后自动重新载入。
dsh-restart-btn 是一个由 SiriusWJ 维护的 DSH 插件。它通过复用桌面启动器机制(node + lib/bin.js、日志重定向、TCP 就绪轮询)解决非 ASCII 路径下计划任务静默失败的问题,并提供一键重启入口。
核心功能¶
- 设置页入口:在 DSH 设置页 General 区添加“重启 Web 服务”按钮。
- 自动重启与刷新:点击后重启
dsh web,服务就绪后页面自动重新载入。 - 跨平台兼容:兼容 Windows(终端/桌面/服务/计划任务)、Linux/macOS/WSL、源码树运行及 nvm/volta/pnpm 全局安装。
- 非 ASCII 路径修复:使用 UTF-8 JSON 配置文件替代命令行,避免中文路径在计划任务中静默失败。
- 端口冲突处理:当端口被占用时,退化为停掉发起重启的那个进程(
selfPid)。 - 就绪验证:通过 GET
/dsh-restart-btn/ping验证,最多等待 45 秒,检查helper.launch是否出现。 - 界面语言:界面中英双语,跟随 DSH 语言设置。
安装¶
使用以下命令安装插件:
dsh plugin --profile web add github:SiriusWJ/dsh-restart-btn
典型用法¶
- 界面操作:在 DSH 设置页 General 区点击“重启 Web 服务”按钮。
- API 重启:发送
POST /dsh-restart-btn/restart,Body 为{"port":"3080"}。 - 状态检测:发送
GET /dsh-restart-btn/ping,返回{ok, instance, pid, platform}判断新进程是否就绪。 - 工作流:改完 bundle 需要重启一次 dsh 生效(第一次请手动重启)。
注意事项¶
- 标签页行为:重启时不加
--no-open,会多开一个已授权的标签页(与桌面快捷方式一致),旧标签页靠 Cookie 自动重载。 - 进程管理:只停监听该端口的进程。若 dsh 被 supervisor 托管,可能自动拉起,导致端口未释放。
- 系统依赖:macOS 需要
lsof,极简 Linux 镜像若无lsof/fuser/ss会报错。 - 会话问题:重启后有时会话需要重新授权(Cookie 寿命问题),页面会提示用桌面快捷方式。
- 身份识别:前端只在 ping 到另一个 instance 时才刷新页面。
日志与排错¶
插件运行时会将日志输出到暂存目录。若路径含非 ASCII 字符会依次回退。
- Windows:
%LOCALAPPDATA%\dsh-restart-btn - Linux/macOS:
$TMPDIR/dsh-restart-btn
主要日志文件包括:
| 文件 | 说明 |
|---|---|
restart.log |
重启全过程(停进程、端口释放、启动、就绪、失败原因及 stderr 尾部)。 |
helper.launch |
助手启动凭证(PID),用于验证助手是否成功启动。 |
dsh.out.log |
新服务的标准输出(含 token 地址)。 |
dsh.err.log |
新服务的标准错误。 |
生态背景¶
DeepSeek Harness 理念是“一切皆插件”。本插件旨在标准化开发流程中的重启操作。源代码与文档可在 GitHub 查看。