dsh-rst:在会话里用 /rst 重启 DSH 并收回执

前言

DeepSeek Harness(DSH)把能力拆成插件;装插件、改插件配置、切 profile 之后,往往要重启宿主进程新代码才会生效。常见做法是关掉应用、等进程退出、再手动打开刚才的会话——步骤不长,一天重复几十遍时,消耗的是注意力而不是那几秒。社区插件 dsh-rst(维护者 JingYu-er)在会话里提供斜杠命令 /rst:由进程外的启动器关掉当前 Host 并拉起新进程,重启完成后在发起重启的那条会话里追加回执卡片,说明用时与新 Host PID。它是给人用的用户命令,不是模型工具。

这是什么

dsh-rst 给 DSH 增加命令 rst。在桌面版或 CLI 模式下输入 /rst,插件写交接文件、detach 拉起 relaunch.cjs,新 Host 起来后向原会话补发「已重启完成」类回执。它不接管进程管理、不替你切模型或改配置、也不改动对话内容(除回执相关的命令卡片事件)。当前版本 0.2.4,许可证 MIT,Node >= 20;进程关停依赖 tasklist / taskkill,仅支持 Windows 10/11。

为什么需要进程外启动器

重启要完成三步:关掉当前 Host → 等 Web 端口释放 → 用同样参数拉起同一个 exe。这三步不能由 Host 自己在退出前可靠跑完——命令在 Host 里执行,Host 一退出,后续的「等端口、再拉起」没有保证。因此职责拆开:插件负责收命令、写 pending.json、在新 Host 里轮询并回写回执;relaunch.cjs 作为 detached 的纯 Node 进程,不在 DSH 进程树里,负责关 Host、等端口、spawn 同一 exe,并把步骤写入 restart-<ts>.log。

核心功能

能力 说明
/rst 重启 DSH;命令卡片给出启动器 PID、日志路径与预计耗时
/rst --dry-run 只打印重启计划(父进程/宿主 PID、exe、Web 端口、日志路径),不杀进程、不写 pending.json
跨重启回执 触发时写 %LOCALAPPDATA%\dsh-rst\pending.json;新 Host 在 apply 后每 500 ms 轮询 sessions.get(sessionId),最多 180 s,会话变 live 后追加 command/run 与 command/done
消息兜底 监听 session/event,匹配 ^/rst(\s|$) 且 5 s 防抖后走同一流程(便于配合远程控制类插件)
安全闸 杀进程前用 tasklist 校验目标 PID 映像名与计划中的 exe 一致;不一致则 abort,只记日志
只杀指定 PID 不使用 taskkill /T,避免误伤 Vite、终端等子进程

回执只写命令卡片,不向会话日志插入 assistant/message 事件——避免破坏 DSH 会话持久化格式。

安装与启用

推荐从 npm 安装(桌面 profile):

dsh plugin --profile desktop add dsh-rst

也可从 GitHub 指定分支安装:

dsh plugin --profile desktop add github:JingYu-er/dsh-rst#main

本地开发可 link:

dsh plugin --profile desktop add link:D:\path\to\dsh-rst

装完后需要重启一次 DSH,bundle 层才会生效。就绪与否可用 dry-run 确认:

/rst --dry-run

典型用法

  1. 装完或更新插件、改插件代码、切换配置后,在当前会话输入 /rst。
  2. 先看命令卡片中的重启器 PID 与 restart-<ts>.log 路径;数秒后同一会话应出现成功回执,含用时与新 Host PID。
  3. 动手改启动逻辑或排查「会不会杀错进程」前,先执行 /rst --dry-run 核对计划。

时序概览:你发 /rst → 插件写 pending.json 并 spawn relaunch.cjs(默认 delay 2 s、grace 2 s)→ 启动器关 Host、等端口(桌面模式从 DSH_WEB_URL 解析,最多 10 s)、拉起 exe(失败最多重试 3 次)→ 新 Host 恢复会话并补回执 → 删除 pending.json。

状态文件与排障

状态与日志目录:%LOCALAPPDATA%\dsh-rst\(缺省 LOCALAPPDATA 时回退 TEMP 或用户目录)。

文件 用途
loaded.log 插件是否被 Host 加载
invocations.log 每次触发记录
host-trace.log Host 侧痕迹
announce.log 回执轮询 start / attempt / appended / timeout
pending.json 待补发回执;成功即删
restart-<ts>.log 单次重启启动器逐步日志

常见问题:无 /rst 补全 → 查 loaded.log 与 profile 的 bundle 配置;找不到重启器脚本 → 检查包是否包含 relaunch.cjs;应用没回来 → 看 restart-<ts>.log 停在哪一步;回执没来 → 打开原会话等待 live,或下次启动再补(180 s 超时只记日志,不等于重启失败)。

适用场景与注意

适合频繁「改插件 → 验证 → 再改」的 DSH 开发者,以及需要通过消息通道远程触发重启的场景(需自行评估远程插件与安全边界)。

务必知晓:

  • 插件以当前 DSH 进程权限运行;安装前请阅读 源码与 LICENSE。
  • 重启会打断正在跑的回合,长回合中避免 /rst。
  • TUI 模式无 Web 端口,拉起后不等端口;回执仍依赖会话在 180 s 内恢复为 live。
  • 命令名固定为 rst,与其他插件撞名时需先处理命名冲突。

DSH 生态理念是「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-rst 把「关应用、等退出、再找回会话」压成一条 /rst,并把结果写回你正在说话的那条会话。需要细节、界面截图与时序说明时,见仓库 README:https://github.com/JingYu-er/dsh-rst。

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

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

Xiaoye