dsh-restart-btn:DeepSeek Harness 一键重启插件

在开发智能体或调整配置时,修改 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

典型用法

  1. 界面操作:在 DSH 设置页 General 区点击“重启 Web 服务”按钮。
  2. API 重启:发送 POST /dsh-restart-btn/restart,Body 为 {"port":"3080"}。
  3. 状态检测:发送 GET /dsh-restart-btn/ping,返回 {ok, instance, pid, platform} 判断新进程是否就绪。
  4. 工作流:改完 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 查看。

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

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

小夜