Skip to content

Releases: DDDMUC/dsh-power-menu-mac

dsh-power-menu-mac v0.1.4

Choose a tag to compare

@DDDMUC DDDMUC released this 01 Nov 09:00

电源菜单现在也能用在 dsh web 部署上。

新增

  • 支持 dsh web。之前只认桌面版,web 上按钮要么不出现、要么点了 409。现在目标换成 host 自己:
    • 关闭:有 launchd 作业就 launchctl bootout(真关掉,不会被 KeepAlive 立刻拉回来);没有就直接结束进程。
    • 重启:有 launchd 就 kickstart -k 交给它;没有就自己杀掉、等端口释放、用原来的 argv 和工作目录重新 spawn。
    • 两种重启都会从新进程输出里抓 dsh web: http://…?token=… 并自动打开浏览器——每次启动 token 都会换,不自动打开的话你只能自己去日志里翻。无头部署可设 DSH_POWER_MENU_NO_OPEN=1。
    • GET /health 返回 {desktop, web, supervised};web + 有 supervisor 时,「现在关闭,N 分钟后启动」会收起(杀掉会被立刻拉回来,helper 再 spawn 会抢端口)。
    • 定时、倒计时胶囊、配置页、刷新保险这些在 web 上照旧。

修复

  • 桌面版和 dsh web 跑的是同一个 cli.js:原来只看 ELECTRON_RUN_AS_NODE 和父进程 pid,从终端起 dsh web 时会把那个 shell 当成 Electron 主进程,一点重启就把终端杀了。现在认 DSH_DESKTOP_NODE_EXECUTABLE 并比对父进程可执行文件。
  • XPC_SERVICE_NAME 会被继承,不能拿它判断"被 launchd 管着";现在回查 launchctl print 里那个作业的 pid 是不是本进程。
  • launchd plist 在真实用户目录,而 web 部署常改 HOME;原来会找错地方导致 supervised 重启抓不到新链接。改用 os.userInfo().homedir 优先。

实测

  • 无 supervisor(临时端口):kill → 端口释放 → 重新拉起 → 抓 URL,1.6 秒。
  • 有 launchd(fish2 实机):kickstart → 2.5 秒抓到新链接 → 自动打开。

安装与启用见 README。

dsh-power-menu-mac v0.1.3

Choose a tag to compare

@DDDMUC DDDMUC released this 31 Oct 18:19

菜单从两项变成四项,另加一个定时弹窗、一个配置页,和一道防止「刷新把插件打挂」的保险。

新增

  • 刷新:只重载渲染层,应用和 Host 都不动。之前想刷新只能重启,而重启一次就多下发一条 dsh-auth-<随机> cookie。
  • 刷新的保险:点刷新前先比对 profile 里各插件 exports["./client"] 的 mtime:size(宿主新增 GET /bundles)。有文件变过就弹框列出改动的插件,给「重启 / 仍然刷新 / 取消」三个选择——DSH 的 client bundle 按 revision 发布且不可变,旧 revision 会被直接拒绝,刷新换来的是一整页「请关闭应用并重新安装」。宿主判断不了时不拦。
  • 定时:居中弹窗,填分钟数后三选一——「N 分钟后关闭」「N 分钟后重启」「现在关闭,N 分钟后启动」。等待期间应用照常可用;到点前若应用被手动关掉或重启过,这条定时按 pid 比对自动作废。排定后按钮下方出现每秒跳的倒计时胶囊,右侧 × 直接取消。
  • 配置页:插件管理页里这一行多了配置控件,可以改默认分钟数、开关提示词注入、替换提示词正文。
  • 系统提示词注入:告诉模型「DSH 的重启与关闭由用户自己点电源菜单」,不再询问。只在桌面宿主渲染,可在配置页关掉或换掉。
  • 按钮在所有页面都能用:会话页仍在标题栏最右侧;面板页(插件、设置这类)固定在窗口右上角。

变更

  • 菜单项按破坏性从小到大排:刷新 → 重启 → 定时 → 关闭,误触最多落到刷新。
  • 菜单收窄到约 100px,四个标签都是两个字。

修复

  • 立即操作如果 30 秒还没把应用带走,自动放开 pending 闩并记日志,不再让之后每一次操作都 409。
  • 定时到点确认应用还在时,改用 LaunchServices 拿 pid(bundle id → ASN → pid),失败再退到两级 pgrep。原来只用精确锚点,遇到 argv[0] 写成 …/Contents/Resources/../MacOS/<名字> 的启动方式会一个都匹配不上,定时被误判成「应用已经不在跑」而直接放弃。
  • 宿主半边在非 macOS 上直接跳过,避免同一个 profile 里同时装着 Windows 版时提示词被注入两遍。

安装与启用见 README。

dsh-power-menu-mac v0.1.2

Choose a tag to compare

@DDDMUC DDDMUC released this 29 Oct 11:25

修一个会让桌面版直接起不来的坑。

修复

  • 重启 / 关闭时把攒下来的 dsh-auth-* cookie 删到只剩最近 3 条。宿主每次启动都下发一个新名字的 dsh-auth-<随机> cookie 且从不清理,cookie 又不区分端口,所有宿主共用同一批;攒到 71 条时 Cookie 请求头 16.1 KB,越过 Node 默认的 16 KB 上限,宿主回 431,桌面壳报 desktop welcome: Web authentication failed。用电源菜单反复重启会加速触发。
  • 清理在 app 退出之后、重启之前进行(app 关着才安全),走 macOS 自带的 /usr/bin/sqlite3;保留最近 3 条,避免把同机另一个长期运行的 dsh web 界面当场登出。

安装与启用见 README。

dsh-power-menu-mac v0.1.1

Choose a tag to compare

@DDDMUC DDDMUC released this 29 Oct 10:34

DSH 桌面版(macOS)右上角电源按钮:关闭 DSH / 重启 DSH。

修复

  • 打开菜单不再把焦点放进第一项(「关闭DSH」)——焦点落上去之后误按一个回车/空格就会把应用关掉。焦点现在留在触发按钮上;ArrowDown / ArrowUp / Home / End 仍然能进菜单,Esc 照旧关闭。
  • 打开菜单时显式把焦点收回触发按钮。有些 WebKit 表面里点按钮不会自动聚焦,否则会出现「菜单开了但方向键没反应」。

新增

  • 菜单按钮上的契约属性:data-dsh-power-action="shutdown" / data-dsh-power-action="restart"。选择器和自动化检查可以直接按动作定位,不用匹配标签文字。

安装与启用见 README。

dsh-power-menu-mac v0.1.0

Choose a tag to compare

@DDDMUC DDDMUC released this 26 Oct 01:20

DSH 桌面版(macOS)右上角电源按钮:关闭 DSH / 重启 DSH。

  • 纯 macOS 移植版,对应 Windows 原版 xichen-62/dsh-power-menu(MIT)。
  • 关闭:结束整个应用。重启:把窗口拉回来,并确认新进程真的注册到了窗口服务器。
  • 纯本地,只监听回环地址。
  • 仅支持 macOS(os: ["darwin"])。

安装与启用见 README。