🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

关机重启按钮 PangXitong/dsh-restart-button

DeepSeek Harness
PangXitong44 天前有提交已提供中文文档扫描:含敏感能力

在会话工具栏一键关闭或重启 DSH 进程

28.4/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add PangXitong/dsh-restart-button
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/06·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 44 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
  • 写入本地文件
    lib/index.js:12
    appendFileSync(LOG_PATH, "[" + ( new Date()).toISOString() + "] " + message + "\n");
  • 写入本地文件
    lib/index.js:51
    writeFileSync(helperPath, lines.join("\r\n") + "\r\n", "utf8");
  • 执行外部命令固定命令
    lib/index.js:66
    execFile(
  • 执行外部命令固定命令
    lib/index.js:89
    const child = spawn(
  • 执行外部命令固定命令
    lib/index.js:100
    const child = spawn("sh", ["-c", cmd], { detached: true, stdio: "ignore" });
  • 发起网络请求
    lib/client.js:167
    await fetch(route, { method: "POST", keepalive: true });
  • 写入本地文件
    build.mjs:30
    await mkdir(join(__dirname, 'lib'), { recursive: true });
  • 读取本地文件
    build.mjs:70
    const clientCode = await readFile(tmpPath, 'utf8');
  • 写入本地文件
    build.mjs:82
    await writeFile(join(__dirname, 'lib/client.js'), wrapped, 'utf8');
  • 删除本地文件
    build.mjs:83
    await rm(tmpPath, { force: true });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-slots
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 一键关闭DSH进程
  • 一键重启DSH进程

在Deepseek Harness的设置中新增一个关闭/重启按钮

README

由 DeepSeek 最新模型翻译生成
dsh-restart-button 在 DeepSeek Harness(dsh)Web UI 的会话头部右侧工具区新增一个关机按钮,点击后展开「关闭 / 重启」两个操作,一键关闭或重启整个 DSH 进程。 DeepSeek Harness(dsh)Web UI 会话头部里的关机按钮。点击展开 关闭 / 重启 两个操作,关闭或重启整个 DSH 进程。 特性 - 会话头部右侧工具区(工具栏)的关机图标按钮(⏻),悬浮高亮 - 点击展开菜单:「重启」「关闭」 - 关闭:先关闭当前网页,再关闭整个 DeepSeek Harness 进程 - 重启:先关闭当前网页,再由一个独立进程在 3 秒后重新启动同一个 DSH 命令 - 自包含重启:用 process.execPath + process.argv 重新拉起 DSH,无需任何外部 .bat / .sh 脚本(各平台支持情况见下方「兼容性」) - 注册进 DSH 官方插槽 conversation.session.header.utilities,不改 DSH 核心;由 React 正常渲染,不依赖 DOM 结构猜测 安装 在终端执行: dsh plugin --profile web add github:PangXitong/dsh-restart-button
展开完整文档(README 剩余 1 节)
dsh-restart-button

在 DeepSeek Harness(dsh)Web UI 的会话头部右侧工具区新增一个关机按钮,点击后展开「关闭 / 重启」两个操作,一键关闭或重启整个 DSH 进程。

DeepSeek Harness(dsh)Web UI 会话头部里的关机按钮。点击展开 关闭 / 重启 两个操作,关闭或重启整个 DSH 进程。

特性

- 会话头部右侧工具区(工具栏)的关机图标按钮(⏻),悬浮高亮
- 点击展开菜单:「重启」「关闭」
- 关闭:先关闭当前网页,再关闭整个 DeepSeek Harness 进程
- 重启:先关闭当前网页,再由一个独立进程在 3 秒后重新启动同一个 DSH 命令
- 自包含重启:用 process.execPath + process.argv 重新拉起 DSH,无需任何外部 .bat / .sh 脚本(各平台支持情况见下方「兼容性」)
- 注册进 DSH 官方插槽 conversation.session.header.utilities,不改 DSH 核心;由 React 正常渲染,不依赖 DOM 结构猜测

安装

在终端执行:

dsh plugin --profile web add github:PangXitong/dsh-restart-button

然后重启 DSH,刷新页面,工具栏右侧即出现关机按钮。

使用

1. 点击工具栏右侧的关机按钮(⏻)→ 下方展开菜单
2. 点击「关闭」→ 当前网页关闭,随后 DSH 进程退出
3. 点击「重启」→ 当前网页关闭,3 秒后 DSH 进程重启,刷新页面即可继续使用

浏览器只允许脚本关闭「由脚本打开」的窗口,手动打开的标签页通常无法自动关闭。此时页面会转为整屏提示(「DSH 已关闭」/「DSH 正在重启…」),并提供「关闭此页面」按钮手动关闭。

截图

关机按钮在工具栏中的位置

点击关机按钮展开菜单:

关闭 / 重启菜单

工作原理

插件采用 DSH 的「双半侧」结构:

| 半侧 | 文件 | 职责 |
| Host(lib/index.js,Node 主进程) | src/index.ts | 通过 ctx.inject(['webServer']) 注册两条同源 HTTP 路由:POST /dsh-restart-button/close(process.exit(0))与 POST /dsh-restart-button/restart(先创建重启用的独立进程,再退出) |
| Client(lib/client.js,浏览器) | src/client/index.tsx | 通过 ctx.slots.inject('conversation.session.header.utilities', …) 把关机按钮注册进会话头部右侧工具区(kind: 'list' 官方插槽);点击按钮 fetch 同源路由,收到响应后关闭当前网页 |

关闭 / 重启的执行顺序

两个操作走同一套顺序 —— 先关网页,再关或重启 DSH:

1. 客户端 fetch 调用对应的同源路由(keepalive: true,即使页面立刻关闭请求也能送达)
2. Host 回复 { ok: true }
3. 客户端调用 window.close() 关闭当前页面
4. Host 随后才真正动作:关闭直接 process.exit(0);重启则先创建好重启进程,再 process.exit(0)

重启进程在 Host 回复之后才被创建,因此页面一定先消失。

重启是如何做到的(src/index.ts)

关键点是:从 DSH 进程里 spawn(..., { detached: true }) 出来的子进程,在 Windows 上活不过父进程 —— 它仍在 DSH 的进程树 / 作业对象里,DSH 一退出就被一起杀掉(表现就是「只能关闭、不能重启」)。因此 Windows 上改为把重启交给 WMI 服务:

1. 在 %TEMP%\dsh-restart-button-relaunch.ps1 写一个 PowerShell 助手脚本:等待 3 秒 → 切回原工作目录 → 透传当前进程的环境变量 → 执行 node <dsh bin.js> <原来的 argv>
2. 通过 WMI(Win32_Process.Create) 创建这个助手进程 —— 它的父进程是 WMI 服务(WmiPrvSE.exe),完全不在 DSH 的进程树里,所以 DSH 退出后照常存活
3. 确认创建成功后,DSH 才 process.exit(0)

WMI 创建失败时会回退到 detached spawn 方式。

POSIX(macOS / Linux)走的是另一条路径:sh -c 'sleep 3; exec …' 配合 detached: true,理论依据是 detached 在 POSIX 上会调用 setsid(2) 建立新会话,配合 stdio: 'ignore' 可避免父进程退出时子进程收到 SIGHUP。该路径尚未在真机上验证,详见「兼容性」一节。

因为重新执行的是 process.execPath + process.argv.slice(1)(含 --profile 等参数),所以无论用 dsh web、npx @deepseek-ai/dsh web 还是 node /path/to/dsh web 启动,都能带同样的参数重启(在 Windows 上已实测;POSIX 上若通过符号链接启动,process.argv[1] 为软链路径,尚待验证)。

排查用日志:%TEMP%\dsh-restart-button.log(Windows)记录了每次重启的请求、助手进程 PID 与退出码。

客户端落位与关闭页面(src/client/index.tsx)

客户端用 DSH 官方的插槽机制落位,而不是猜测 DOM:conversation.session.header.utilities 是 ui-conversation 声明的 kind: 'list' 座位,和宿主自己的「Session log」胶囊同一行,按 order 插在流内,因此不会与宿主控件重叠。slots.inject 会等待该座位的声明出现(可能晚于本插件激活),声明被撤销后重新声明时会再次回调。React 由 DSH 客户端模块表作为平台基线模块提供,产物中只保留 require('react'),不打包第二份 React。

关闭页面用 window.open('', '_self', '') + window.close()。若浏览器拒绝关闭(手动打开的标签页会这样),400ms 后页面转为整屏提示,避免留下一个已断连的界面。

构建

源码用 TypeScript,lib/ 预构建入库,安装时免构建。如需从源码重新构建:

pnpm install
pnpm run build # node build.mjs,依赖 esbuild

产物:lib/index.js(ESM,Host)+ lib/client.js(window.__ModuleLoader__.load 格式,Client)。

兼容性

- DeepSeek Harness 0.1.5+(开发该插件时的版本;会话头部工具插槽 conversation.session.header.utilities 需存在于 ui-conversation)
- Node.js ^22.19.0 或 >=24

平台支持情况:

| 平台 | 关闭 | 重启 |
| Windows | ✅ 已验证 | ✅ 已验证 |
| macOS | ✅(纯 Node API,无平台差异) | ⚠️ 未验证 |
| Linux | ✅(纯 Node API,无平台差异) | ⚠️ 未验证 |

关闭是纯 Node 的 process.exit(0),无平台差异。

重启在 Windows 上已实测通过(见上节);macOS / Linux 走的是另一条代码路径(sh -c 'sleep 3; exec …' + detached: true),该路径尚未在真机上验证过。理论上 detached 在 POSIX 上会调用 setsid(2) 建立新会话、配合 stdio: 'ignore' 可避免父进程退出时的 SIGHUP,但以下两点仍需实测确认:

- 孤儿进程在 macOS 的 launchd / Linux 各 init 系统下的存活行为
- 通过符号链接启动 DSH(如 /usr/local/bin/dsh)时,process.argv[1] 为软链路径,重启后能否正确定位入口文件

在 macOS / Linux 上使用前请先自行验证重启功能;关闭功能可直接使用。

该插槽属于 DSH 0.1.x 开发者预览版契约,破坏性更新后可能需要调整插槽名。插槽名在 src/client/index.tsx 的 SLOT_HEADER_UTILITIES 常量里;src/client/react-shim.d.ts 只是为了让本仓库在未安装 @types/react 时也能通过类型检查,若之后加入 @types/react,删掉该文件即可。

许可证

Apache-2.0
预览分享卡片长什么样 ↓PangXitong/dsh-restart-button
分享 · DeepSeek Harness Hub
PangXitong/dsh-restart-button

在会话工具栏一键关闭或重启 DSH 进程

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部