在会话标题栏一键安全重启客户端并恢复会话
32.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:npm 同名包「dsh-restart-button」归属 jiqiu0709/dsh-restart-button,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add PPsz-qqq/dsh-restart-button该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · desktop
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意npm 同名包「dsh-restart-button」归属 jiqiu0709/dsh-restart-button,装到的可能不是本插件
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-restart-button @ 0.1.2
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/22 06:42:59
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 22 处,展示前 22 条)
- 读取本地文件lib/index.js:62
return JSON.parse(readFileSync(join(LIB_DIR, '..', 'package.json'), 'utf8')).version - 写入本地文件lib/index.js:122
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件lib/index.js:123
appendFileSync(file, `[${stamp()}] [host ${process.pid}] ${message}\n`) - 读取本地文件lib/index.js:204
const manifest = JSON.parse(readFileSync(join(profileDir, 'package.json'), 'utf8')) - 读取本地文件lib/index.js:209
version = JSON.parse(readFileSync(join(profileDir, 'node_modules', ...pkg.split('/'), 'package.json'), 'utf8')).version ?? null - 读取本地文件lib/index.js:239
const record = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件lib/index.js:247
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件lib/index.js:249
writeFileSync(tmp, JSON.stringify(record, null, 2)) - 写入本地文件lib/index.js:250
renameSync(tmp, file) - 删除本地文件lib/index.js:255
if (record !== undefined && (id === undefined || record.id === id)) rmSync(file, { force: true }) - 执行外部命令来自配置/变量lib/index.js:277
const child = spawn(command, args, { - 读取本地文件lib/index.js:291
return readFileSync(statusFile, 'utf8').trim() - 写入本地文件lib/detach.mjs:27
writeFileSync(tmp, `failed: ${message}`) - 写入本地文件lib/detach.mjs:28
renameSync(tmp, statusFile) - 执行外部命令来自配置/变量lib/detach.mjs:37
const child = spawn(exec.command, exec.args, { stdio: 'ignore', windowsHide: true, env: process.env }) - 写入本地文件lib/relaunch-web.mjs:27
mkdirSync(dirname(spec.logFile), { recursive: true }) - 写入本地文件lib/relaunch-web.mjs:28
appendFileSync(spec.logFile, `[${stamp()}] [web-helper ${process.pid}] ${message}\n`) - 写入本地文件lib/relaunch-web.mjs:35
writeFileSync(tmp, value) - 写入本地文件lib/relaunch-web.mjs:36
renameSync(tmp, spec.statusFile) - 写入本地文件lib/relaunch-web.mjs:103
mkdirSync(dirname(spec.serverLogFile), { recursive: true }) - 执行外部命令来自配置/变量lib/relaunch-web.mjs:106
const child = spawn(spec.command, spec.args, { - 删除本地文件lib/relaunch-web.mjs:120
rmSync(spec.statusFile, { force: true })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 会话标题栏一键重启
- 安全重启客户端
- 重启后恢复会话
DeepSeek Harness 插件:会话标题栏右上角加一键重启按钮(Windows 桌面端 + dsh web),一键重启 DeepSeek Harness 客户端。
README
由 DeepSeek 最新模型翻译生成dsh-restart-button
在 DeepSeek Harness 会话标题栏的右上角加一个「重启」按钮(↻),点一下就能安全地重启整个客户端。
重启按钮位于会话标题栏右上角,右侧边栏开关左边
功能
- 位置:会话标题栏右侧工具区的最右端(conversation.session.header.utilities,order 1000),紧挨右侧边栏开关。
- 一键重启:没有任务在运行时直接重启。
- 跑完后再重启:有会话正在运行或后台作业未结束时,确认框里多一个「跑完后重启」。选它之后按钮变成蓝色并带一个闪烁的小点,所有任务结束后自动重启;再点按钮可以「取消安排」或「立即重启」。
- 重启后接着干:重启前会记下你当前打开的会话和被中断的会话。重启完成后自动回到原来的会话,并弹出卡片「重启前有 N 个会话正在运行」,点「全部继续」就向这些会话发送"继续",也可以逐个点开。
- 插件更新提醒:插件被原地更新(升级或重装)后,新代码要重启才会加载。插件会发现这种情况,在按钮上显示一个橙色小点,并弹出卡片「插件更新待生效:名称 旧版本 → 新版本」,可以「立即重启」或「稍后」。
- 悬停查看运行状态:鼠标放在按钮上会显示 Host 已运行多久、占用多少内存、几个会话正在运行、是否已安排重启、有几个插件更新等待生效。
展开完整文档(README 剩余 1 节)
dsh-restart-button
在 DeepSeek Harness 会话标题栏的右上角加一个「重启」按钮(↻),点一下就能安全地重启整个客户端。
重启按钮位于会话标题栏右上角,右侧边栏开关左边
功能
- 位置:会话标题栏右侧工具区的最右端(conversation.session.header.utilities,order 1000),紧挨右侧边栏开关。
- 一键重启:没有任务在运行时直接重启。
- 跑完后再重启:有会话正在运行或后台作业未结束时,确认框里多一个「跑完后重启」。选它之后按钮变成蓝色并带一个闪烁的小点,所有任务结束后自动重启;再点按钮可以「取消安排」或「立即重启」。
- 重启后接着干:重启前会记下你当前打开的会话和被中断的会话。重启完成后自动回到原来的会话,并弹出卡片「重启前有 N 个会话正在运行」,点「全部继续」就向这些会话发送"继续",也可以逐个点开。
- 插件更新提醒:插件被原地更新(升级或重装)后,新代码要重启才会加载。插件会发现这种情况,在按钮上显示一个橙色小点,并弹出卡片「插件更新待生效:名称 旧版本 → 新版本」,可以「立即重启」或「稍后」。
- 悬停查看运行状态:鼠标放在按钮上会显示 Host 已运行多久、占用多少内存、几个会话正在运行、是否已安排重启、有几个插件更新等待生效。
- 桌面版(Windows):重启 Electron 外壳和后台 Host,新窗口自动打开,参数与原来一致。
- dsh web:重启服务进程,页面在服务恢复后自动刷新。
- 失败时弹窗说明原因,并给出日志路径 ~/.dsh/logs/restart-button.log。
工作原理(桌面版)
DeepSeek Harness 桌面版由 Electron 主进程启动一个 Node 模式的 Host 子进程(它跑插件、会话和 Web 服务)。
点击按钮后:
1. 浏览器端向 POST api/restart-button.restart 发请求(走 DSH 自带的 Host/Origin 校验和浏览器鉴权)。
2. Host 把当前会话和正在运行的会话写进 ~/.dsh/restart-button/last-restart.json,供重启后的 Host 读取。
3. Host 启动一个脱离进程树的辅助程序(detach.mjs → restart-desktop.ps1),由它核对 Electron 主进程和 Host 的身份(可执行文件路径、父子关系)。
4. 辅助程序挂起 Electron 主进程,使它察觉不到 Host 退出(不会弹出崩溃对话框、不会写崩溃报告)。
5. Host 断开与主进程的 IPC,走的正是桌面版退出时的同一条优雅关闭路径:会话落盘、插件逐个释放。
6. Host 退出后,辅助程序结束被冻结的主进程及其残留子进程,等端口 19387 释放后,用原来的参数重新启动 DeepSeek Harness.exe。
任何一步出错都会记录到日志;若在挂起后失败,辅助程序会恢复主进程,不会留下卡死的窗口。
「跑完后重启」由 Host 每秒检查一次:连续 3 秒没有运行中的 Agent 回合、排队消息或后台作业,就按上面的流程重启(会先留 1.5 秒让页面显示"正在重启")。
「插件更新提醒」的判断方法:Host 记下本进程加载过的每个插件的版本和来源。Node 会缓存已加载的模块,所以之后磁盘上的版本或来源一旦变化(原地更新,或先移除再安装),都算待生效;本进程从未加载过的新插件会直接热加载,不算。
配置
可在 profile 的 cordis.patch.yml 中调整确认策略:
- id: restart-button
config:
confirm: when-busy # when-busy(默认,仅在有任务运行时确认)| always(总是确认)| never(从不确认)
安装
在 DeepSeek Harness 的「插件」页面点「安装」,填入下面任意一种来源(也可以让 Agent 用 plugin_manager install_bundle 安装同样的来源):
| 来源 | 填写内容 |
| 插件市场 dshmarket | 搜索 dsh-restart-button(作者 PPsz-qqq),一键安装 |
| GitHub Release 打包文件(推荐) | 最新版:https://github.com/PPsz-qqq/dsh-restart-button/releases/latest/download/dsh-restart-button.tgz;指定版本:https://github.com/PPsz-qqq/dsh-restart-button/releases/download/v0.2.0/dsh-restart-button-0.2.0.tgz |
| GitHub 仓库 | github:PPsz-qqq/dsh-restart-button#v0.2.0 |
| 本地打包文件 | .tgz 的绝对路径,例如 C:\Users\<you>\.dsh\plugins\dsh-restart-button-0.2.0.tgz |
第一次安装立即生效,无需重启。
升级需要重启一次:Node 会在整个进程生命周期内缓存已加载的模块,所以已加载过的插件,无论是原地安装新版本,还是先移除再安装,后台 Host 部分都要重启后才会换成新代码(界面部分会先更新)。安装新版本后按钮会出现橙色小点和「插件更新待生效」卡片,点「立即重启」即可。从本地 .tgz 安装的,升级前不要删除旧的 .tgz 文件。
自己打包:在仓库根目录运行 pnpm pack(或 npm pack),生成 dsh-restart-button-<version>.tgz。
接口
所有 POST 都要求 content-type: application/json。
| 路由 | 方法 | 说明 |
| api/restart-button.status | GET | 运行模式、是否支持、确认策略、运行时长与内存(runtime)、正在运行的会话(busySessions)、当前重启状态、已安排的重启(scheduled)、待生效的插件更新(pendingPlugins)、重启后的恢复信息(resume)、日志路径 |
| api/restart-button.restart | POST { when?: 'now' \| 'idle', activeSessionId?: string } | 立即重启(202);when: 'idle' 且有任务运行时改为安排重启(202,scheduled: true) |
| api/restart-button.cancel | POST {} | 取消已安排的重启 |
| api/restart-button.resume-ack | POST { id, action? } | 标记重启后的恢复信息已处理 |
限制
- 桌面版一键重启目前只支持 Windows;macOS / Linux 桌面版上按钮自动隐藏。
- dsh web 模式下,重启后的服务在后台运行,输出追加到 ~/.dsh/logs/restart-button-web-server.log,不再占用原来的终端。
- 按钮在会话标题栏中,未打开任何会话(新建会话页)时不显示;提示卡片在任何页面都会出现。
- 恢复信息只在重启后 10 分钟内有效;「全部继续」发送的是普通用户消息"继续"(英文界面为 "Continue")。
- 「已安排的重启」保存在当前 Host 进程里,插件被重新加载或客户端被手动关闭后会失效。
开发与测试
test/ 里的测试都不依赖真实客户端,也不会打包进插件:
| 文件 | 内容 | 运行 |
| host.test.mjs | Host 端全部路由:活动判定、跑完后重启、取消、恢复记录、插件更新检测、失败回滚 | node test/host.test.mjs |
| client.test.cjs | 用真实 React 18 + jsdom 渲染按钮和卡片,对接模拟的 Host | 先在任意目录 pnpm add react@18 react-dom@18 jsdom,再 RB_CLIENT_DEPS=<该目录> node test/client.test.cjs |
| dummy-main.mjs + dummy-host.mjs | 用两个 Node 进程模拟 Electron 主进程和 Host,完整演练桌面版重启:核对 → 挂起 → Host 优雅退出 → 结束主进程 → 用原参数重启 | 见下 |
| dummy-web.mjs | 模拟 dsh web 服务的重启 | 见下 |
$env:RB_TEST_DIR = "$env:TEMP\rb-test"; New-Item -ItemType Directory $env:RB_TEST_DIR -Force | Out-Null
$env:RB_TEST_PORT = '19399'
Start-Process node -ArgumentList "$PWD\test\dummy-main.mjs" -WindowStyle Hidden # 或 test\dummy-web.mjs 几秒后查看 $env:RB_TEST_DIR\events.log 与 restart.log(UTF-8);每次演练前清空 RB_TEST_DIR
发布清单
1. 更新 package.json 的版本号和 CHANGELOG.md,跑一遍上面的测试。
2. pnpm pack 生成 dsh-restart-button-<version>.tgz。
3. 打标签 v<version> 并推送,创建同名 GitHub Release,上传两个资产:dsh-restart-button-<version>.tgz,以及同一文件的无版本号副本 dsh-restart-button.tgz。插件市场条目里的 releases/latest/download/dsh-restart-button.tgz 依赖后者。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
PPsz-qqq/dsh-restart-button
在会话标题栏一键安全重启客户端并恢复会话
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2