Skip to content

Releases: Mr54233/dsh-restart-now

v1.2.3 — 确认框可再次弹出(fix #2)

Choose a tag to compare

@Mr54233 Mr54233 released this 30 Oct 10:09

v1.2.3

修复一个确认框的"一次性"缺陷(#2)。

问题

开启「二次确认」后,点击重启弹出确认框;此时只要不点取消/重启,而是点右上角 x、点击遮罩或按 Escape 关掉弹窗,之后再点「立即重启」就再也不弹确认框、也无法重启——只能从托盘退出。

根因

确认框有一个"只弹一个"的标志 confirmOpen。此前只有「取消 / 重启」两个按钮走的包装关闭函数会复位它;而 x / 遮罩 / Escape 三条路走的是 openModal 内部关闭函数,绕过了复位逻辑。标志从此永远卡在"已打开"。

修法

复位挪到所有关闭路径共同经过的 onClose 回调里,并加"只触发一次"保护(按钮关闭后浏览器偶尔还会补发残余事件)。

测试

  • 新增 U21u 回归:按报告者的路径把 x / 遮罩 / Escape 三条关闭路各验一遍——关掉后再点必须能重新弹出(全套 123 例通过,此前 122)。
  • client-smoke 的 DOM 桩补齐了真实事件监听、parentNode 与 createElementNS,把模态框端到端驱动起来。

v1.2.2 — 入口开关落配置文件(fix #1)

Choose a tag to compare

@Mr54233 Mr54233 released this 26 Oct 06:08

修复

  • 入口开关重启后回弹(#1):四个界面入口的开关状态从 localStorage 迁移到 profile 配置文件,强杀进程树不再丢失;localStorage 降级为首帧缓存。1.2.x 老用户的本地开关会在下次挂载时一次性迁移进配置文件。
  • 废弃 hideSidebarButton,统一为 entryFooter(旧键保留只读映射:true → entryFooter: false,不再写回磁盘)。
  • 修复迁移判据真 bug:客户端原先以「生效配置里有无 entry 键」判断是否迁移,但生效配置必然叠加默认值导致判据恒真——改由宿主回报权威信号 entriesDeclared。

变更

  • 配置从 5 键扩到 8 键:allowRestart / confirm / exePath / platformAuth / entryPanel / entryFooter / entryHeader / entrySettingsRow(后四个默认全开)。
  • 设置页拨动入口开关时全量 8 键写回 /config;写失败界面显红字提示,并在下次打开设置页时自动重试。
  • README 重写为极简市场版(208 → 72 行),新增 screenshots.json + assets/ 四张真实界面截图(插件仓库自声明,市场下次构建自动采纳)。

验证

v1.2.1 — 平台会话鉴权 / 复用启动参数 / 冷却防连点

Choose a tag to compare

@Mr54233 Mr54233 released this 22 Oct 16:00

v1.2.1

第一个把「安全 / 正确性」那一批缺口补齐的版本。npm 上从 1.0.3 直接跳到 1.2.1(1.1.0 / 1.2.0 只在仓库里有,没有发布到 npm)。

安全

  • 动作口/配置口/状态口要平台会话凭据:/restart、/config、/status 现在先过平台鉴权,再进安装锁与任务守卫。
    本机其它程序直接 curl 会拿到 401(缺/过期凭据)或 403(来源不可信),两个语义分开。
    探测口 /environment 永不拦截,并在 platformAuth 字段回报 {enforced, available, verdict, error} 供诊断。
  • 逃生门:界面自身若因壳层凭据形态变化而失效,把 platformAuth 置 false 可回到「只做回环围栏」的旧行为。
  • 客户端凭据模式:7 处 credentials: 'omit' 改为 'same-origin'。省略凭据会让壳层鉴权拿不到 cookie,
    鉴权上线后界面每个操作都会 401——这是必须一起改的连带修复。

正确性

  • 复用原始启动参数:拉起前用 WMI 问「GUI 主进程当初是怎么被启动的」,三重校验(首段必须是同一个 exe;
    出现 --type= 或 --expose-internals 说明抓到的是子进程/宿主;问不到)任一不成立就退回不带参数启动。
    绝不转发插件自己的 process.argv——插件跑在桌面宿主里,那个 argv 转发出去会拉起没有窗口的进程。
  • 清继承环境变量:ELECTRON_RUN_AS_NODE 之外,再清 DSH_SESSION_ID / DSH_WEB_URL / DSH_SHELL
    (它们描述「上一次运行/会话」,跨进程继承会污染新实例的回执归属与端口判断);
    DSH_HOME / DSH_PROFILE / DSH_PROFILE_DIR 是安装身份,保留。清单以 RESPAWN_ENV_DROP 常量导出并由测试锁死。
  • 连点不会派发两个助手:距上次重启开始不足 5 秒返回 409 cooldown 并提示还要等几秒。
    判据取「内存时间戳」与「上次回执 atMs」中较晚者,所以重启换了新宿主也认得;exe 不可用这类前置失败不占窗口。

体验

  • 拉起后回探:查新实例进程树里有没有人在 LISTEN(Get-NetTCPConnection),只记日志
    (web_listen=ok port=… / timeout / unsupported),不当成功判据——端口每次启动都不同,连旧端口会在每次成功之后误报。
  • 全失败要说话:三次都没起来时弹系统消息框,说明原因、请手动打开、给日志路径(powershell.exe 不在就换 pwsh.exe)。
  • 侧栏面板不再有两个图标:面板行与标题栏按钮文字相同,曾被同一个「认领」逻辑重复画一遍;现在排除带直接子 svg 的行。

测试

npm test → 114 pass / 0 fail(新增 test/platform-auth.test.js、test/cooldown.test.js,并补充 dispatch 用例覆盖 401/403/旁路/异常降级/冷却)。

说明

  • 平台:Windows + DSH Desktop(其它环境一律 403,web 环境绝不碰)。
  • 插件管理器里显示的图标与说明来自宿主读到的插件元数据(icon.svg + 本地化 title/description)。

v1.1.0 — 优雅重启 / 任务守卫 / 重启回执 / 版本自检

Choose a tag to compare

@Mr54233 Mr54233 released this 22 Oct 08:44

1.1.0 — graceful restart, activity guard, receipt, version self-check

重启机制重写 / Restart mechanism rewritten

  • 只杀主进程(taskkill /PID <main> /F,不再带 /T):host 因 IPC 断开自行优雅关闭,会话日志得以下盘;等主进程退出 30s,再给 host 15s 自行退出,最后才补刀。
  • 派发不再依赖 WMI/VBS/系统 node:用应用自身 exe 当 node(ELECTRON_RUN_AS_NODE=1)跑助手,detached 脱离进程树。
  • ACK 握手保险:助手先确认启动,800ms 内没确认就返回 500,进程一个都不杀。
  • 拉起验证:最多重试 3 次、每次存活验证 2.5s;失败原因写进回执与 %TEMP% 日志。
  • 助手把 main_stop / host_grace / respawn / total 计时写日志,慢在哪一段一眼可见。

新增 / New

  • 活跃任务守卫:有任务在跑时返回 409 busy(带任务/作业数),可选择「仍然重启」「等空闲后重启」(5s 复检,上限 30 分钟,可撤销)或取消;GET /status 可轮询。
  • 插件安装中硬拦:检测 .plugin-manager/run.json,安装/更新期间拒绝重启(记录无法解析时记日志放行,避免崩溃残锁把按钮永久锁死)。
  • 重启回执:设置页显示上次重启结果——停机多少秒 / 未确认 / 失败原因。
  • 版本自检:engines.dsh >= 0.2.0,运行时版本从 app.asar 读出并显示在设置页(不匹配时红字)。
  • 斜杠命令:/restart、/restart --force、/restart --wait。
  • 英文界面:中英双语文案表,按界面语言自动切换。

变更 / Changed

  • delayMs 配置项移除:点下去立刻执行,没有反悔窗口。配置现为四项:allowRestart、confirm、exePath、hideSidebarButton。

验证 / Verified

  • 12 个测试文件、90 个用例全绿(新增 tasks / version / receipt / dispatch / client-smoke)。
  • 真实 web 宿主冒烟:探测口、/status、/config 全部 200,/restart 在 web 下正确 403 non-desktop,方法白名单 405。
  • CI:windows-latest × node 22/24,单测 + tarball 文件清单校验。

需要 DSH Desktop ≥ 0.2.0,暂时仅支持 Windows。