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

重启坞 7gzgn/dsh-restart-dock

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

一键重启宿主或刷新页面,改完插件立刻生效

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

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

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

状态速览

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

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 11 处,展示前 11 条)
  • 读取本地文件
    lib/index.js:44
    if (!existsSync(file)) return undefined;
  • 读取本地文件
    lib/index.js:45
    return JSON.parse(readFileSync(file, 'utf8'));
  • 写入本地文件
    lib/index.js:53
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    lib/index.js:54
    writeFileSync(file, JSON.stringify(value, null, 2), 'utf8');
  • 写入本地文件
    lib/index.js:146
    try { mkdirSync(info.stateDir, { recursive: true }); } catch { }
  • 执行外部命令固定命令
    lib/index.js:158
    const child = spawn('cmd.exe', ['/c', 'start', '', '/b', 'powershell.exe', ...psArgs], {
  • 读取本地文件
    lib/index.js:342
    const st = statSync(base.path);
  • 发起网络请求
    client.js:528
    const res = await fetch(BASE + '/status', { headers: MARK, cache: 'no-store' });
  • 发起网络请求
    client.js:541
    const res = await fetch(BASE + '/status', { headers: MARK, cache: 'no-store' });
  • 发起网络请求
    client.js:574
    const res = await fetch(BASE + '/restart', {
  • 发起网络请求
    client.js:671
    const res = await fetch(BASE + '/bundle-ready', { headers: MARK, cache: 'no-store' });
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

README

由 DeepSeek 最新模型翻译生成
dsh-restart-dock · 重启坞 界面上一个小框,两个按钮: - 重启 —— 停掉 DSH 宿主,再按原来的命令行把它拉起来。改插件、改 client.js、改 profile 配置之后用它。 - 刷新 —— 只重载当前页面,不碰进程。 改完东西总要「关窗口 → 找快捷方式 → 重开」的那条路,变成一次点击。 点重启会先问一句:立即 / 30 秒 / 60 秒 / 2 分钟 / 取消。选延迟就在原地倒计时,随时可以撤回 —— 给自己留一个反悔的窗口。 框可以拖,而且始终贴边:整块按住就能拖走(像页面翻译那个小按钮),松手离哪边近就贴哪边;收起成小圆点之后照样能拖。位置记的是「贴哪条边 + 离边多远」,不是绝对坐标 —— 所以窗口放大、缩小、全屏,它都自动跟着边框走,不会跑到视口外面看不见。 为什么值得单独做 DSH 的插件分两半:宿主半(进程里的 JS)和客户端半(浏览器里的 JS)。 - 客户端半改完,刷新页面就行; - 宿主半改完,必须重启进程——模块已经加载过,改文件不会换掉那一代代码。 这就是这个插件唯一要解决的问题。它不装功能,只装一个「门把手」。
展开完整文档(README 剩余 1 节)
dsh-restart-dock · 重启坞

界面上一个小框,两个按钮:

- 重启 —— 停掉 DSH 宿主,再按原来的命令行把它拉起来。改插件、改 client.js、改 profile 配置之后用它。
- 刷新 —— 只重载当前页面,不碰进程。

改完东西总要「关窗口 → 找快捷方式 → 重开」的那条路,变成一次点击。

点重启会先问一句:立即 / 30 秒 / 60 秒 / 2 分钟 / 取消。选延迟就在原地倒计时,随时可以撤回 —— 给自己留一个反悔的窗口。

框可以拖,而且始终贴边:整块按住就能拖走(像页面翻译那个小按钮),松手离哪边近就贴哪边;收起成小圆点之后照样能拖。位置记的是「贴哪条边 + 离边多远」,不是绝对坐标 —— 所以窗口放大、缩小、全屏,它都自动跟着边框走,不会跑到视口外面看不见。

为什么值得单独做

DSH 的插件分两半:宿主半(进程里的 JS)和客户端半(浏览器里的 JS)。

- 客户端半改完,刷新页面就行;
- 宿主半改完,必须重启进程——模块已经加载过,改文件不会换掉那一代代码。

这就是这个插件唯一要解决的问题。它不装功能,只装一个「门把手」。

装

在 DSH 里让 agent 装本地目录 plugin_manager install_bundle target=D:\path\to\dsh-restart-dock

或从市场装(发布后)。

装完重启一次 DSH,界面右下角会出现小框;之后改插件就能点它了。

两个动作分别做什么

刷新

location.reload()。纯前端,不经过宿主,任何平台都能用。

重启

点一次 → 按钮变成「确认重启?」;4 秒内再点一次才执行(防误触)。

真正的执行体是 lib/relaunch.ps1,由宿主半 spawn 成一个脱离宿主的独立 PowerShell 进程,所以它能在宿主被停掉之后继续活着并把它拉起来。过程:

1. 锁定目标:从宿主 pid 往上找 DSH 进程,再爬到「同一可执行文件的最顶层」——也就是用户会双击的那个应用(跳过 Chromium 的 --type= 子进程)。找不到就拒绝,绝不按名字猜一个进程去杀。
2. 等 2 秒(让 HTTP 响应先回到界面,不留半截请求)。
3. 停整棵进程树(先叶子后根),最多等 20 秒确认真的退出。
杀完还会再清一遍「孤儿」:只清「父进程 pid 在本次清理名单里」的漏网进程。判据不能是「父进程已死」——正常的桌面版主进程,其父进程本来就已经退了,那样会把用户正在用的实例和救援通道一起误杀。这一步是必需的:残留的 web 宿主占着端口时,新实例启动会报 desktop welcome: Web authentication failed,起一次崩一次。
4. 按目标进程原来的命令行重新拉起它(参数原样保留)。
5. 写报告到 ~/.dsh/dsh-restart-dock/last.json。

界面那边会自己轮询 /status:先确认宿主真的停过(连不上),再等它回来(又连上)→ 自动刷新页面,不用自己按 F5。

注意:桌面版里重启会关掉窗口,页面本身也跟着没了。自动刷新主要对「浏览器里打开的 DSH」有意义。窗口会自己回来。

安全边界(这部分是刻意的)

重启会打断一切,所以这个入口收得很紧:

| 边界 | 做法 |
| 跨源网页(主防线) | 要求自定义头 x-dsh-restart-dock: 1 —— 跨源请求带自定义头必先撞 CORS preflight,而本插件不答 preflight,浏览器根本不会把真请求发出来 |
| 同一界面判定 | 拒绝浏览器明确标的 Sec-Fetch-Site: cross-site;如果请求带了 Origin,再核对是否同源(127.0.0.1 / localhost / 0.0.0.0 同端口视为同源) |
| 为什么不再强求 Origin | 实测桌面 app 的 dsh-app:// 页面连 POST 都不带 Origin(也不带 Sec-Fetch-Site)。强求它只会把界面自己的按钮全挡成 403 —— 加固措施必须以实测为准 |
| 目标进程 | 显式探测 + exe 必须真实存在;探测失败直接拒绝 |
| 响应 | 不带任何凭据,只回 pid / 端口 / 上次重启报告 |

只读接口:GET /dsh-restart-dock/status 也只对同源开放。

排障

| 文件 | 内容 |
| ~/.dsh/dsh-restart-dock/last.json | 上一次重启的结果(relaunched / failed / armed / dry-run + 原因) |
| ~/.dsh/dsh-restart-dock/helper.log | helper 的逐步日志(探测到哪个进程、什么时候停、什么时候拉、新 pid) |
| ~/.dsh/dsh-restart-dock/pending.json | 点击后到 helper 动手之间的排程记录 |

只想看它会动谁、不动手:

powershell -NoProfile -ExecutionPolicy Bypass
-File lib\relaunch.ps1 -CallerPid <宿主pid> -StateDir D:\tmp\rd -DryRun

-DryRun 只探测并写报告,不碰任何进程。也可以 -TargetPid <pid> 显式指定目标(测试用)。

已知限制

- 只实现了 Windows。非 Windows 平台「重启」返回 501 并提示用「刷新」;UI 和刷新在所有平台都能用。
- 重启会打断正在跑的任务。插件不做排程、不做「等这一轮说完」——那是 dsh-restart-planner 的活,两者可共存:一个给人点,一个给 agent 自己用。
- 重启后不会替你续话(刻意不做)。窗口回来就是你原来那一屏,不会自动往对话里发消息 —— 按钮是你亲手按的,回来再冒一句「我继续」很奇怪。想要「重启后自动接着干」,用重启插件那条链。
- 如果宿主是被某个 job object(例如某些终端)托管的,脱离出来的 helper 也可能被一起带走。桌面版从快捷方式启动时不在 job 里,实测正常。
- lib/relaunch.ps1 必须带 UTF-8 BOM。Windows PowerShell 5.1 读无 BOM 的 UTF-8 文件会按 ANSI 解码,中文注释会把语法搞坏(实测会报一堆「意外标记」)。

兼容性

- DSH >=0.2.1-rc.2 <0.3.0-0(0.2.1-rc.2 真机验证)
- Windows + Windows PowerShell 5.1 或更高
- 客户端半没有任何构建步骤:window.__ModuleLoader__.load 形态,和官方插件同构

结构

lib/index.js 宿主半:两个路由 + spawn helper lib/relaunch.ps1 执行体:探测 → 停 → 拉 → 报告 client.js 客户端半:右下角小框(shell.overlay 座位)
locale/{zh,en}.json 插件列表里的标题与描述
icon.svg 插件图标

License

MIT
预览分享卡片长什么样 ↓7gzgn/dsh-restart-dock
分享 · DeepSeek Harness Hub
7gzgn/dsh-restart-dock

一键重启宿主或刷新页面,改完插件立刻生效

回到顶部