Repository navigation
Releases: DDDMUC/dsh-power-menu-mac
Releases · DDDMUC/dsh-power-menu-mac
Release list
dsh-power-menu-mac v0.1.4
电源菜单现在也能用在 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 上照旧。
- 关闭:有 launchd 作业就
修复
- 桌面版和
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
菜单从两项变成四项,另加一个定时弹窗、一个配置页,和一道防止「刷新把插件打挂」的保险。
新增
- 刷新:只重载渲染层,应用和 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
修一个会让桌面版直接起不来的坑。
修复
- 重启 / 关闭时把攒下来的
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
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
DSH 桌面版(macOS)右上角电源按钮:关闭 DSH / 重启 DSH。
- 纯 macOS 移植版,对应 Windows 原版 xichen-62/dsh-power-menu(MIT)。
- 关闭:结束整个应用。重启:把窗口拉回来,并确认新进程真的注册到了窗口服务器。
- 纯本地,只监听回环地址。
- 仅支持 macOS(
os: ["darwin"])。
安装与启用见 README。