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