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

随处重启 JoblessJoe/dsh-restart-anywhere

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

一键原地重启 dsh,适配各类部署环境

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

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

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

状态速览

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

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
  • 读取本地文件
    lib/index.js:44
    const readCgroup = () => { try { return readFileSync('/proc/self/cgroup', 'utf8') } catch { return '' } }
  • 执行外部命令来自配置/变量
    lib/index.js:114
    child = spawn(process.execPath, args, { stdio: 'inherit', detached: process.platform !== 'win32',
  • 执行外部命令固定命令
    lib/index.js:161
    const failed = await new Promise(resolve => execFile('systemd-run', args, { timeout: 10_000 },
  • 写入本地文件
    lib/index.js:196
    mkdirSync(dirname(WAKE_FILE), { recursive: true })
  • 写入本地文件
    lib/index.js:197
    writeFileSync(WAKE_FILE, JSON.stringify({ sessionId: exec.agent.session.id, prompt, at: Date.now() }))
  • 删除本地文件
    lib/index.js:201
    if (prompt) rmSync(WAKE_FILE, { force: true })
  • 读取本地文件
    lib/index.js:221
    try { wake = JSON.parse(readFileSync(WAKE_FILE, 'utf8')); rmSync(WAKE_FILE, { force: true }) } catch { return }
  • 删除本地文件
    lib/index.js:221
    try { wake = JSON.parse(readFileSync(WAKE_FILE, 'utf8')); rmSync(WAKE_FILE, { force: true }) } catch { return }
  • 发起网络请求
    lib/client.js:28
    const info = () => fetch(ROUTE, { cache: "no-store" }).then((r) => (r.ok ? r.json() : null), () => null);
  • 发起网络请求
    lib/client.js:54
    const res = await fetch(ROUTE, { method: "POST" });
  • 请求外部主机x
    test.js:96
    const res = await m.ctx.route.fetch(new Request('http://x/api/dsh-restart'))
  • 发起网络请求
    test.js:96
    const res = await m.ctx.route.fetch(new Request('http://x/api/dsh-restart'))
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:x

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 一键原地重启
  • 适配多种部署环境
  • 零依赖

一个重启按钮,适配你的环境,管好 DeepSeek Harness(dsh)网页 GUI:systemd、Docker、Kubernetes、pm2、launchd、终端、Windows 都能用。原地重启,零依赖。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness(dsh)web GUI 插件,在 Settings 上方加一个小巧的 Restart dsh 按钮。需要重启的时候就用它:装了插件、改了配置,或者修好了自己插件里的 bug。 它能配合你的环境工作。 systemd、Docker、Kubernetes、pm2、tmux 面板、普通终端或 Windows:点一下,几秒后 dsh 就回来了。页面会自己刷新。 npx @deepseek-ai/dsh plugin --profile web add dsh-restart-anywhere 配合你的环境工作 大多数重启按钮都是杀掉 dsh,然后指望有什么东西再把它拉起来。这只对作者自己的环境有效。一个脱离进程的「重新启动我」辅助进程,会跟着 systemd 服务一起被杀掉。干净退出不会触发 Restart=on-failure。没有重启策略的容器就直接停了。而在 pm2 或 runit 下,辅助进程和守护进程都会去启动 dsh,然后抢同一个端口。 dsh-restart-anywhere 不把 dsh 的命交给别人。
展开完整文档(README 剩余 1 节)
DeepSeek Harness(dsh)web GUI 插件,在 Settings 上方加一个小巧的 Restart dsh 按钮。需要重启的时候就用它:装了插件、改了配置,或者修好了自己插件里的 bug。

它能配合你的环境工作。 systemd、Docker、Kubernetes、pm2、tmux 面板、普通终端或 Windows:点一下,几秒后 dsh 就回来了。页面会自己刷新。

npx @deepseek-ai/dsh plugin --profile web add dsh-restart-anywhere

配合你的环境工作

大多数重启按钮都是杀掉 dsh,然后指望有什么东西再把它拉起来。这只对作者自己的环境有效。一个脱离进程的「重新启动我」辅助进程,会跟着 systemd 服务一起被杀掉。干净退出不会触发 Restart=on-failure。没有重启策略的容器就直接停了。而在 pm2 或 runit 下,辅助进程和守护进程都会去启动 dsh,然后抢同一个端口。

dsh-restart-anywhere 不把 dsh 的命交给别人。它原地重启 dsh:

| 你的环境 | 会发生什么 | 留下什么 |
| systemd(用户或系统 unit,任意 Restart= 策略) | 让 systemd 重启该 unit,于是你得到一个全新进程,和 systemctl restart 一模一样。如果不被允许(系统 unit、没有 root),就退回原地重启。 | 什么都不留 |
| Docker / Podman / Kubernetes(有没有重启策略都行) | 原地重启:PID 不变,容器完全察觉不到。 | 什么都不留 |
| pm2、supervisord、launchd、runit、s6、nssm、forever…… | 原地重启:守护进程看到的还是它启动的那个进程,一直在运行。 | 什么都不留 |
| Terminal、tmux、screen、nohup | 原地替换:PID 不变,新 dsh 继续往同一个终端输出。Ctrl-C 照样能停掉它。 | 无 |
| Windows / Node < 22.15 | 包装进程:旧进程保留下来,作为新 dsh 的轻量父进程。它转发 Ctrl-C,并以 dsh 的退出码退出。 | 父进程 |
| dsh 桌面应用 | 按钮隐藏:应用自己管理生命周期。 | 不适用 |

不需要检测 supervisor,不需要配置,不需要 root,也不需要辅助脚本。

工作原理

1. 优雅关闭。 插件调用 dsh 自己的退出钩子(ctx.appExit)。每个插件都按正常退出的方式完成清理,会话也会刷盘。
2. 进程变成新的 dsh。
- Linux / macOS,Node ≥ 22.15: process.execve() 把进程映像换成全新的 dsh,命令行、环境变量和 stdio 都保持不变。PID 不变,也不会留下任何残留。
- Windows / 较旧的 Node: 进程作为一个小包装进程继续存活,并启动新的 dsh 作为子进程。后续重启复用同一个包装进程,所以永远只有一个。
- systemd: systemd 自己重启 unit,通过一个一秒的临时定时器,让 HTTP 响应先到达你的浏览器。
3. 页面重新加载。 浏览器轮询,直到有带新 boot ID 的服务器响应,然后重新加载。无论重启是快是慢,这套机制都管用。

让它站得住脚的几个细节:

- --port 0: 重启时固定一个随机端口,页面才能重新找到 dsh。
- 不刷屏浏览器标签页: 重新启动时加上 --no-open。
- 重复点击: 重启进行中再发一个请求,会收到 409。

安装

装进你的 dsh web 配置档(下面的 web 是配置档名;换成支撑你 web GUI 的那个配置档)。从源码检出运行时,用 pnpm dsh 代替 npx @deepseek-ai/dsh:

npx @deepseek-ai/dsh plugin --profile web add dsh-restart-anywhere

这会把包装进配置档,并加入 dsh.profile.bundles。重新加载浏览器标签页,Restart dsh 就会出现在 Settings 上方。如果没有出现,用老办法最后重启一次 dsh。从那以后,点按钮就行。

需要 dsh 0.2.0 或更新版本,以及 Node 20+。没有构建步骤,也没有运行时 npm 依赖。

使用

点击 Restart dsh 并确认。dsh 重启期间图标会旋转,新 dsh 起来后页面会重新加载,通常 5 秒左右。

正在运行的智能体会话会被重启打断,跟任何重启一样。确认对话框里也这么写了。

安全

- 需要登录: 重启路由通过 dsh 自己的 /api 连接层(ctx.connection.fetch)注册。它只响应已登录你 dsh 的浏览器,并且 dsh 的 Host/Origin 防护同样生效。
- 公网实例也安全: 在能从互联网访问的实例上,未认证请求会收到 401,无法重启任何东西。
- 不执行 shell 命令: 任何东西都不经过 shell。唯一的外部程序是 systemd-run,而且只在 dsh 作为 systemd 服务运行时才会用到。

已测试

在 Linux 上用 dsh 0.2.0 实测通过:

- systemd: 用户单元,Restart=no 和 Restart=on-failure 两种都试过。
- systemd 回退: systemd-run 不可用时走回退路径,正常。
- 普通终端: 走 execve 路径,连续重启三次,然后 Ctrl-C 和 SIGTERM。
- 包装器路径: Node 不支持 execve 时,连续重启三次,然后 Ctrl-C。
- 只在失败时重启的守护进程: dsh 一直活着,守护进程完全没察觉。
- --port 0,以及同时点两次。

macOS 走的是和 Linux 一样的 execve 路径,Windows 走的是和老版本 Node 一样的包装器路径。两者都还没在真机上跑过,非常欢迎反馈。

npm test 会跑部署方式检测和命令行检查。

License

MIT

中文简介 · DeepSeek Harness (dsh) Web 界面插件:侧边栏「设置」上方的一个小小的「重启 dsh」按钮,适用于你的部署方式 —— systemd、Docker / Podman、Kubernetes、pm2、supervisord、launchd、终端 / tmux / nohup、Windows。原地重启(进程 PID 不变),无需检测或配置守护进程,重启完成后页面自动刷新。零运行时依赖,无需配置。安装:npx @deepseek-ai/dsh plugin --profile web add dsh-restart-anywhere
预览分享卡片长什么样 ↓JoblessJoe/dsh-restart-anywhere
分享 · DeepSeek Harness Hub
JoblessJoe/dsh-restart-anywhere

一键原地重启 dsh,适配各类部署环境

回到顶部