dsh-web-restart: 确保/重启 DSH Web 服务

前言

DeepSeek Harness(DSH)的理念是「一切皆插件」。在本地开发或调试时,如果 dsh 的 agent 运行在 web 服务进程内部,直接通过命令杀掉 web 进程(如 Stop-Process),等于杀掉了 agent 所在的进程树,导致重启命令无法执行,出现“自杀式重启”的问题。

dsh-web-restart 通过 WMI (Win32_Process.Create) 将新服务进程创建在 WMI 宿主下,使其完全脱离 agent 进程树。加载该插件后,服务挂了会自动拉起;需要加载新代码时,可以通过 flag 触发脱管重启。

这是什么

这是一个 DSH bundle 插件,用于确保或重启 DeepSeek Harness 的 web 服务。它由 LnsiAxe 维护,采用 MIT 许可证。

安装与启用

安装前请确保 DSH 版本大于等于 0.1.0-rc.6。

# 在 headless profile 下安装,用于服务挂了时通过任务复活 web 服务
dsh plugin --profile headless add @lnsiaxe/dsh-web-restart

# 在 web profile 下安装,用于启用 flag 文件触发重启功能
dsh plugin --profile web add @lnsiaxe/dsh-web-restart

# 启动 dsh web,插件会在加载时生效
dsh web

核心功能

该插件提供两种运行模式和一个触发机制:

  • ensure 模式(默认):检查端口是否监听。未监听时脱管启动,已监听时不做任何操作。
  • rotate 模式:检查端口是否监听。已监听时脱管重启(调用方返回后 kill 再拉起),未监听时直接启动。
  • flag 文件触发:在 web profile 下运行时,创建特定 flag 文件,下一个会话回合开始时插件会删除 flag 并脱管重启服务。

典型用法

场景一:服务挂掉后

# 运行 headless 任务,插件会在 boot 时自动拉起 web 服务
dsh --profile headless "启动 web 服务"

场景二:加载新代码后重启

# 1. 在 web profile 下创建 flag 文件
New-Item C:\Users\<you>\.dsh\dsh-web-restart.flag

# 2. 发送一条消息触发新回合
# 插件检测到 flag,删除 flag 并重启 web 服务

配置

通过 cordis.patch.yml 配置端口和模式:

- insert:
    - id: web-restart
      name: '@lnsiaxe/dsh-web-restart'
      config:
        port: 3080        # web 服务端口
        mode: ensure      # ensure | rotate
        # workspace: C:\Users\<you>\my-workspace  # 可选,默认取进程 cwd
        # gitDir: C:\Users\<you>\git\cmd  # 可选,默认 ~\git\cmd(给 side-panel 的 git 用)

工作原理

  1. 脚本生成:激活时,插件会在 DSH_HOME 目录下生成 dsh-web-restart-launch.cmd 和 dsh-web-restart-rotate.cmd。这两个脚本负责设置环境变量、切换目录并执行 node ... web --port <port>。
  2. 进程启动:通过 PowerShell 的 Invoke-CimMethod Win32_Process.Create 调用 WMI。在 Windows 平台上,新进程的父进程是 WMI 宿主,因此不受 agent/服务进程树的回收影响;非 Windows 平台则回退为 spawn(..., { detached: true }).unref()。
  3. 自重启跳过:插件在 web profile 里加载时会检测 argv 是否包含 web,如果包含则跳过自重启逻辑,仅响应 flag 触发。

注意事项

  • 平台依赖:Windows 平台依赖 WMI;非 Windows 平台使用 detached spawn。
  • 版本要求:需要 DSH 版本 0.1.0-rc.6 及以上。
  • 权限安全:插件以当前 dsh 进程的权限运行,使用前请检查源码与许可证。

链接

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

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

小夜