一键重启会话,插件改动立即生效
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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 版本走,宿主那层的服务名变了就得跟着改。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Fyue7/dsh-restart-button
一键重启会话,插件改动立即生效
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,798已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,327已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,021已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 150,724已汉化DSH
71.1