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

托盘重启菜单 hxh230802/dsh-tray-restart

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

给桌面端托盘和应用菜单加上一键重启项

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · desktop
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 22 处,展示前 15 条)
  • 写入本地文件
    lib/index.js:76
    mkdirSync(path.dirname(file), { recursive: true })
  • 写入本地文件
    lib/index.js:77
    appendFileSync(file, `${new Date().toISOString()} [${level}] ${message}\n`, 'utf8')
  • 写入本地文件
    lib/index.js:100
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/index.js:101
    writeFileSync(
  • 读取本地文件
    lib/index.js:124
    return existsSync(explicit) ? explicit : undefined
  • 读取本地文件
    lib/index.js:128
    return existsSync(candidate) ? candidate : undefined
  • 读取本地文件
    lib/index.js:142
    return JSON.parse(readFileSync(path.join(backupDir(), 'manifest.json'), 'utf8'))
  • 读取本地文件
    lib/index.js:161
    hold: existsSync(holdFile()),
  • 写入本地文件
    lib/index.js:199
    mkdirSync(path.dirname(file), { recursive: true })
  • 写入本地文件
    lib/index.js:200
    writeFileSync(file, source, 'utf8')
  • 读取本地文件
    lib/index.js:213
    if (existsSync(bundled)) candidates.push({ command: bundled, args: ['--check', file], env: process.env })
  • 执行外部命令来自配置/变量
    lib/index.js:223
    const result = spawnSync(candidate.command, candidate.args, {
  • 读取本地文件
    lib/index.js:311
    if (!options.manual && existsSync(holdFile())) {
  • 删除本地文件
    lib/index.js:357
    rmSync(holdFile(), { force: true })
  • 发起网络请求
    lib/client.js:126
    return fetch(ROUTE + path, {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

给 DeepSeek Harness 桌面托盘和应用菜单加上重启项,靠打补丁改 app.asar 实现。

README

由 DeepSeek 最新模型翻译生成
dsh-tray-restart 把 「重启 DeepSeek Harness」 加到 DeepSeek Harness 桌面端现有的菜单里: - 系统托盘右键菜单:打开 DeepSeek Harness / 重启 DeepSeek Harness / 退出 DeepSeek Harness - 标题栏「应用」菜单(macOS 为菜单栏):生产构建也出现 重启 DeepSeek Harness(官方原本只在 development 构建里放重启项) 点它执行的是应用自己的 app.relaunch() + quitWithoutConfirmation():先走正常的退出流程(Host 关闭、任务收尾),再重新拉起应用。它和官方开发版里的重启项是同一套逻辑。 原理 桌面端的托盘和应用菜单由 Electron 主进程的 resources/app.asar → lib/main.js 创建。
展开完整文档(README 剩余 1 节)
dsh-tray-restart

把 「重启 DeepSeek Harness」 加到 DeepSeek Harness 桌面端现有的菜单里:

- 系统托盘右键菜单:打开 DeepSeek Harness / 重启 DeepSeek Harness / 退出 DeepSeek Harness
- 标题栏「应用」菜单(macOS 为菜单栏):生产构建也出现 重启 DeepSeek Harness(官方原本只在 development 构建里放重启项)

点它执行的是应用自己的 app.relaunch() + quitWithoutConfirmation():先走正常的退出流程(Host 关闭、任务收尾),再重新拉起应用。它和官方开发版里的重启项是同一套逻辑。

原理

桌面端的托盘和应用菜单由 Electron 主进程的 resources/app.asar → lib/main.js 创建。DSH 插件跑在 Host 子进程里,没有任何运行时接口能往这些原生菜单里加项,所以本插件在 Host 每次启动时直接给 lib/main.js 打一个等长补丁:

1. 找到 lib/main.js,检查是否已有 dsh-tray-restart:menu:v2 标记;
2. 没有则做两处文本替换,删掉同区域等长的注释、用空格补齐,保证字节长度完全不变(asar 里每个文件的 offset 是固定的,不能改长度);
3. 用真实的 Node 对补丁后的 ESM 跑 node --check,失败就完全不碰 app.asar;
4. 备份原始 main.js,原地写入,更新 asar header 里该文件的 SHA256,再读回校验;
5. 因为主进程已经加载了旧代码,重启一次 DSH 后新菜单才会出现。

应用更新会替换 app.asar;下次启动插件检测到标记消失,会自动重新打补丁。

插件页

插件管理器里打开 dsh-tray-restart 会看到一个配置卡片,显示:

- 补丁状态、桌面端版本、补丁版本;
- app.asar、备份目录、日志路径;
- 「重新检查」「立即打补丁」「还原原始菜单」三个操作。

点「还原原始菜单」会把备份写回 app.asar,并暂停自动补丁(避免下次启动又打上);再点「立即打补丁」即可恢复。补丁写入后仍然需要重启一次 DSH 才生效。

安装

在 DSH 的插件管理器里安装 npm 包:

@hxhxh/dsh-tray-restart

或从 GitHub 安装:

github:hxh230802/dsh-tray-restart

plugin_manager 工具的 npm 目标:

{ "action": "install_bundle", "target": "@hxhxh/dsh-tray-restart" }

安装后如果 Host 已经热加载了插件,app.asar 会立刻被补上,但菜单要重启一次才更新。也可以手动落盘:

node scripts/apply.mjs

还原

原始 lib/main.js 备份在:

%USERPROFILE%\.dsh\dsh-tray-restart\backup\main.original.js
%USERPROFILE%\.dsh\dsh-tray-restart\backup\manifest.json

还原(会先确认当前 main.js 仍是插件写入的那一版):

node scripts/restore.mjs

如果应用更新过,脚本会拒绝还原,避免把旧文件覆盖到新版本上。

极端情况下(asar header 被写坏、常规 restore 无法解析),用原始 header 备份直接回写:

node scripts/emergency-restore.mjs

配置

profile patch 里按 id dsh-tray-restart 覆盖:

- id: dsh-tray-restart
config:
enabled: true # false = 不加载、不检查补丁 dryRun: false # true = 只生成补丁并做语法校验,不写 app.asar verifySyntax: true # 写入前跑 node --check asarPath: '' # 仅调试/非标准安装时显式指定 app.asar

状态与日志

%USERPROFILE%\.dsh\dsh-tray-restart\status.json
%USERPROFILE%\.dsh\logs\dsh-tray-restart.log

status.json 的 state 可能是 patched、already-patched、dry-run、failed、skipped。

注意

- 补丁只匹配当前桌面端版本的 main.js 文案(0.2.0-rc.2 验证通过)。应用大版本更新后如果锚点对不上,插件会记录 unsupported 并保持 app.asar 原样,不会把应用弄坏。
- 这是对已安装应用文件的修改,不是官方 API;写入前有语法校验和备份。若应用无法启动,运行 node scripts/restore.mjs 还原即可。
- 「重启」会中断正在运行的任务;它没有额外的二次确认,和官方开发版菜单一致。
- 仅 Windows 桌面端需要打补丁;dsh web / 开发模式会跳过。
预览分享卡片长什么样 ↓hxh230802/dsh-tray-restart
分享 · DeepSeek Harness Hub
hxh230802/dsh-tray-restart

给桌面端托盘和应用菜单加上一键重启项

这是你的仓库?认领条目

回到顶部