DeepSeek Harness 插件

dsh-restart-button-jhjhhg7

A persistent restart-DSH button under the theme switch in settings.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
jhjhhg7/dsh-restart-button
最近更新
2026年8月17日
分类
界面增强
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-21

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/jhjhhg7/dsh-restart-button
插件名:dsh-restart-button-jhjhhg7
作者:jhjhhg7

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.zh-CN.md来源说明 · 只读预览
README 语言

DSH 重启按钮(DSH Restart Button)

一个 DeepSeek Harness(DSH)的持久化插件,在网页设置里加了一个「重启 DSH」按钮。点击后会强制结束当前 DSH 进程并重新拉起——是真正的进程级重启(杀进程 + 起新进程),而不是进程内热重载,页面会自动重连。

可选地,还可以搭配一个小型守护循环一起运行,让新进程在同一个控制台里回来(有日志、可 Ctrl+C),实现真正的「原地重启」。

> English version: README.md

---

功能

  • 设置 → 通用 里、主题/外观开关下方,加了一个「重启 DSH」按钮。
  • 两次点击确认(点一下 → 「确认重启」→ 执行),避免误触。
  • 重启流程:

1. 写入标记文件(dsh-restart.pending); 2. 启动一个脱离式 worker,执行 taskkill /F /PID <dsh>; 3. worker 等待几秒: - 如果守护循环已经重新拉起 DSH(3080 端口恢复)→ 完成,原地重启; - 否则 → 后台无窗口兜底重启。

  • 浏览器轮询插件接口,只有新进程(新 PID)开始服务后才刷新页面,并有 30 秒硬兜底。

---

为什么这样设计

动态 Cordis 插件随进程一起消亡,所以持久化插件没法从「自己内部」重启自己的宿主进程,必须借助外部「帮手」:

┌─────────────── Web UI ───────────────┐
│  settings.general.item (order 15)     │
│  [重启 DSH] 按钮  ──POST─────────────►│
└──────────────────────────────────────┘
                 │
                 ▼
   宿主插件 (lib/index.js)
   ┌─────────────────────────────────────────────┐
   │ 写标记 + 启动脱离式 node worker              │
   │  worker: taskkill /F /PID <dsh>             │
   │          等待 → 3080 端口恢复?             │
   │            是 → 守护器完成了重启             │
   │            否 → 后台兜底重启                 │
   └─────────────────────────────────────────────┘

   可选守护器 (dsh-loop.cjs)  ← 在你的终端里运行
   ┌─────────────────────────────────────────────┐
   │ loop { spawn dsh web (stdio inherit) }      │
   │ 退出时: 有标记?→ 重新拉起 : 退出             │
   └─────────────────────────────────────────────┘
  • worker 上的 detached: true 是关键:它必须能活过 DSH 自己的死亡(taskkill)才能完成重启;Windows 下非脱离的子进程会随父进程一起被杀。
  • 曾尝试用 AttachConsole 把新进程挂回原终端,但在现代终端(ConPTY / Windows Terminal)下会报 ERROR_INVALID_PARAMETER (87),所以改用了守护循环方案——不依赖任何控制台 API,更可靠。

---

仓库结构

dsh-restart-button/            # 插件包 (@dsh-external/dsh-restart-button)
├── package.json               # DSH bundle + client 清单
├── cordis.patch.yml           # 把插件行插入组合的补丁
├── lib/
│   ├── index.js               # HOST:/api/dsh-restart 路由 + 重启 worker
│   └── client.js              # CLIENT:设置页按钮 + 自动刷新轮询
├── dsh-loop.cjs               # 原地重启守护器(在终端里运行)
└── desktop/
    ├── dsh-start.cmd          # 双击启动器(可见控制台)
    └── DSH.vbs                # 桌面快捷方式(隐藏启动 + 自动开浏览器)

---

安装

1. 把插件装进你的 DSH profile

node "C:\Users\<you>\AppData\Roaming\npm\node_modules\@deepseek-ai\dsh\lib\bin.js" plugin --profile web add "C:\path\to\dsh-restart-button"

(如果 dsh 在 PATH 上,也可直接 dsh plugin --profile web add <path>

这会把 @dsh-external/dsh-restart-button 加进 profile bundle。重启 DSH 后生效。

2.(可选)运行守护器实现原地重启

没有守护器时按钮也能用,但新 DSH 会以后台无窗口方式启动。想在自己的终端里原地重启:

node "C:\path\to\dsh-restart-button\dsh-loop.cjs"

它会在同一个控制台里循环拉起 dsh webstdio: inherit)。Ctrl+C 停止。

3.(可选)桌面快捷方式

desktop/DSH.vbs 就是桌面「DeepSeek Harness (DSH)」快捷方式背后的脚本。双击它会:

1. 检查 DSH 是否已在 http://127.0.0.1:3080 上运行; 2. 若没运行,启动守护器(隐藏控制台); 3. 等 DSH 起来后自动打开浏览器。

desktop/dsh-start.cmd 是可见控制台版本(能看到日志 / Ctrl+C)。

---

配置

有几处绝对路径是针对某台机器写死的,换机器安装时需要改:

文件要改什么
lib/index.jsLOG(日志文件路径)、FLAG(重启标记路径)
dsh-loop.cjsBIN(DSH 的 bin.js 路径)、FLAG(必须与 lib/index.js 一致)
desktop/DSH.vbspowershell.exe ... node '<dsh-loop.cjs 的路径>' 这条命令
desktop/dsh-start.cmddsh-loop.cjs 的路径

插件运行时会从 process.execPath / process.argv 自动取 nodeargs,这两项不用写死。

---

排障

重启流程会把详细日志写到 dsh-restart.log(路径在 lib/index.js 里配置)。关键标记:

  • [runner] taskkill done, status=0 — 旧进程已杀。
  • [runner] port 3080 is up -> supervisor relaunched in-place, no fallback needed — 原地重启成功。
  • [runner] port 3080 still down after wait -> headless fallback — 没在跑守护器,DSH 以后台方式重启。
  • restart handler error: — 插件自身报错。

---

许可证

[MIT](LICENSE)