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

重启按钮 Fyue7/dsh-restart-button

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

一键重启会话,插件改动立即生效

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · ui
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 18 处,展示前 14 条)
  • 读取本地文件
    lib/index.js:161
    if (existsSync(candidate)) return { path: candidate, exists: true };
  • 读取本地文件
    lib/index.js:170
    return existsSync(candidate) ? candidate : '';
  • 写入本地文件
    lib/index.js:185
    mkdirSync(home, { recursive: true });
  • 写入本地文件
    lib/index.js:186
    appendFileSync(logFile, `[${new Date().toISOString()}] ${line}\n`, 'utf8');
  • 读取本地文件
    lib/index.js:194
    if (!file || !existsSync(file)) return [];
  • 读取本地文件
    lib/index.js:195
    return readFileSync(file, 'utf8')
  • 读取本地文件
    lib/index.js:237
    if (exe === '' || !existsSync(exe)) problems.push(`找不到可执行文件:${exe === '' ? '(空)' : exe}`);
  • 读取本地文件
    lib/index.js:238
    if (helper === '' || !existsSync(helper)) problems.push(`找不到 helper 脚本:${helper === '' ? '(空)' : helper}`);
  • 写入本地文件
    lib/index.js:288
    mkdirSync(home, { recursive: true });
  • 写入本地文件
    lib/index.js:299
    writeFileSync(file, line, 'utf8');
  • 写入本地文件
    lib/index.js:392
    mkdirSync(home, { recursive: true });
  • 执行外部命令来自配置/变量
    lib/index.js:402
    child = spawn(psPath, argv, {
  • 写入本地文件
    lib/index.js:607
    mkdirSync(home, { recursive: true });
  • 发起网络请求
    client/index.js:62
    return fetch(API + '/' + action, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-commands@deepseek-ai/dsh-host-webserver@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 一键重启会话
  • 插件改动立即生效
  • 全程零窗口

给 DSH 会话头部加一颗重启按钮:完全退出并把新实例拉回来,全程零窗口。非官方插件。

README

由 DeepSeek 最新模型翻译生成
dsh-restart-button 会话头部右侧那一排里的那颗「⟳」(就在那颗文件夹图标右边一格,纯图标,不带字):完全退出 DeepSeek Harness,再把新实例拉起来。 给「改了插件代码 → 必须重启才生效」这件事准备的。点击到界面回来约 8 秒,全程没有终端窗口。 怎么工作的 宿主自己就是那个要被关掉的东西,而且它所在的那棵进程树是一个作业对象:树里的一切连同宿主一起死。 所以流程分成「找死」和「活着」两只手: 点 ⟳(3 秒倒计时,可取消) └─ 宿主:spawn helper(PowerShell)→ 立刻回 HTTP 响应 └─ helper(restart-dsh.ps1): 1. 写 relay-config.json(参数)和 relay-launch.vbs(无窗口入口) 2. schtasks 建一次性任务并运行:动作 = wscript.exe //B relay-launch.vbs wscript 是 GUI 子系统程序,系统不给它建控制台;VBS 再以窗口样式 0 跑拉起器不成就退到 WMI,再退到 Shell.Application,最后才是自己拉 3. 回读日志,确认出现新的 relay start —— 确认它活着,才继续 4. 软杀 2 秒 → 强杀(CloseMainWindow / Stop-Process) 5. 退出。
展开完整文档(README 剩余 1 节)
dsh-restart-button

会话头部右侧那一排里的那颗「⟳」(就在那颗文件夹图标右边一格,纯图标,不带字):完全退出 DeepSeek Harness,再把新实例拉起来。

给「改了插件代码 → 必须重启才生效」这件事准备的。点击到界面回来约 8 秒,全程没有终端窗口。

怎么工作的

宿主自己就是那个要被关掉的东西,而且它所在的那棵进程树是一个作业对象:树里的一切连同宿主一起死。
所以流程分成「找死」和「活着」两只手:

点 ⟳(3 秒倒计时,可取消) └─ 宿主:spawn helper(PowerShell)→ 立刻回 HTTP 响应 └─ helper(restart-dsh.ps1):
1. 写 relay-config.json(参数)和 relay-launch.vbs(无窗口入口)
2. schtasks 建一次性任务并运行:动作 = wscript.exe //B relay-launch.vbs wscript 是 GUI 子系统程序,系统不给它建控制台;VBS 再以窗口样式 0 跑拉起器不成就退到 WMI,再退到 Shell.Application,最后才是自己拉
3. 回读日志,确认出现新的 relay start —— 确认它活着,才继续
4. 软杀 2 秒 → 强杀(CloseMainWindow / Stop-Process)
5. 退出。它会被作业对象带走,无所谓了 └─ 拉起器(relaunch-dsh.ps1,隐藏运行,活在外面):读 relay-config.json → 等旧实例真的消失(每 250ms 轮询,最多 20 秒;等不到就退出不启动) → 用 explorer.exe 起 DSH(不继承控制台) → 等 127.0.0.1:19387 重新监听 → 删掉计划任务 → 记一行 ok

为什么是这些形状(每条都是实测换来的)

1. 不能用 node:child_process:从宿主里 spawn 出来的子进程 63 毫秒就「退出 0」,脚本一行都没跑。
改用 DSH 自己的 ctx.subprocess(工具调用走的就是它)。
2. 拉起器必须由服务创建:作业对象连坐。Shell.Application 转发看着成功,实测那个进程仍在作业里,在宿主死的同一瞬间被杀。只有计划任务 / WMI 创建的进程能活。
3. 必须先确认它活着才动刀:不然杀了之后没人拉,DSH 就死在那儿。
4. DSH 必须由 explorer 起:Start-Process 会让 DSH 成为当前控制台的子进程,Chromium 会主动 attach 上去,于是那个窗口在 DSH 活着期间不会关,而关掉它会给 DSH 发 CTRL_CLOSE —— DSH 跟着死。
5. 计划任务的动作必须是 GUI 子系统程序:这台机器默认终端是 Windows Terminal, powershell.exe -WindowStyle Hidden 拦不住 WT 窗口(GetConsoleWindow 都返回 0)。wscript 才真没有窗口。
6. .ps1 / .cmd 一律纯 ASCII:PowerShell 5.1 读没有 BOM 的 .ps1 按 ANSI/GBK 解释, UTF-8 中文注释会吃掉换行,把下一行代码并进注释里静默不执行(曾让 $alive = Get-Targets 消失,日志显示 alive=0,我为此查了三轮)。校验:Select-String -Pattern '[^\x00-\x7F]' 应为空。
7. 别用 $home:它和自动变量 $HOME 同名(不区分大小写),赋值静默失效, relay-config.json 曾被写到 C:\Users\<user>\ 根下。用 $pluginHome。
8. schtasks /TR 上限 261 字符:所以任务不传参数,参数走 relay-config.json。

装法

1. 接进 profile(file: 依赖 + bundles 行 + pnpm install)推荐直接用 DSH 的插件管理器装这个 spec: file:E:/agent/projects/dsh-restart-button

2. 刷新页面(Ctrl+Shift+R)

改这个插件的代码:

node E:\agent\projects\dsh-restart-button\tools\sync.mjs
然后点会话头部那颗 ⟳

sync.mjs 那一步不能省:profile 用的是 nodeLinker: hoisted,file: 依赖是装的时候抄一份,源目录和运行时目录是两份独立的数据(实测不是硬链接,fsutil hardlink list 各只列自己一条)。
宿主加载的、按 ⟳ 时找的,都是抄过去的那份。

tools/ 必须跟着一起同步 —— 按钮找的 restart-dsh.ps1 就在抄过去的那份里,只同步 lib / client 的话,脚本改了多少次按钮都还是跑旧的。

用法

- 界面:会话头部右侧那一排,文件夹图标右边一格,只有一个 ⟳。点一下 3 秒倒计时,再点一下取消。
- 命令:/restart now、/restart dry(空转自检,只报账不动手)、/restart status。
- 兜底:双击仓库里的 tools\restart-dsh.cmd(路径跟着自己走,界面挂了也能用,走同一个 helper)。
桌面上那份独立拷贝已移除,免得两个入口各跑一份脚本。

日志

~/.dsh/dsh-restart-button/restart.log。一次成功的重启:

helper start: pid=4516 exe='E:\DeepSeek Harness\DeepSeek Harness.exe' grace=2s caller='header-button' consoleHidden=False
relay: arming (baseline relay-start lines = 8, config = '...\relay-config.json', launcher = '...\relay-launch.vbs', taskCmdLength = 92)
relay: schtasks create -> 成功: 成功创建计划任务 "dsh-restart-button-relay"。
relay start: pid=35280 exe='E:\DeepSeek Harness\DeepSeek Harness.exe' wait=20s port=19387
relay armed via: schtasks
stage1: alive=7 pid=16928,20316,27764,34312,35084,35612,35664
stage2: force kill 7 pid=...
relay: old instance is gone, launching in 600ms
relay launched via explorer: E:\DeepSeek Harness\DeepSeek Harness.exe
relay: new instance visible = True
ok: 127.0.0.1:19387 is listening again
relay: scheduled task removed

已知边界

- 只支持 Windows:计划任务、WMI、镜像名收尸、控制台语义,全是 Win32 玩法。
- 会打断正在跑的回合:所以有 3 秒倒计时。
- 需要计划任务或 WMI 至少一个可用:都被策略封掉的机器上,会退到 shell / inline,那时窗口可能又出现且不一定起得来;relay abort 那几行会说明是卡在哪一步。
- helper 自己那个控制台窗口:它由插件的 ctx.subprocess 拉起,可能闪一下(约 8 秒内随 helper 退出消失)。
要彻底消除得让插件改走 wscript 调 helper,那是宿主半的改动,需要一次宿主重载。
- 不是官方插件:跟着 DSH 版本走,宿主那层的服务名变了就得跟着改。
预览分享卡片长什么样 ↓Fyue7/dsh-restart-button
分享 · DeepSeek Harness Hub
Fyue7/dsh-restart-button

一键重启会话,插件改动立即生效

回到顶部