文档 · 随安装包分发

运行方式:常驻与退出

关窗为什么不退出、自启动怎么工作、什么算「忙」。

适用:Quileg HID 0.5.0+。相关:app/README.md(界面,源码仓库)、MCP 接入说明(MCP-SETUP.md)

App 同时是设备控制台和AI 的 MCP 接口,所以窗口只是它的一部分。这里定义 「窗口 / 进程 / 服务」的关系,以及关窗、退出、登录启动的行为。

1. 三层模型

层内容关窗退出
服务hidagent :8890、UxPlay、板子 TCP 7300、MCP不动停
窗口镜像、设备、日志隐藏关
入口GUI、HIDBridge --mcp(宿主拉起)不受影响--mcp 独立进程

结论:关窗 ≠ 退出。默认点红叉只是把窗口收起来,服务继续跑。

2. 设置项与默认值

⌘, → 运行方式:

设置选项默认生效
开机时自动启动开 / 关关保存时写/删 LaunchAgent
启动时显示窗口 / 仅后台启动显示窗口下次启动
关闭窗口时留在后台(Dock)/ 每次询问 / 直接退出留在后台立即
退出确认仅在忙时 / 总是 / 从不仅在忙时立即

首次隐藏会弹一次说明「仍在后台运行」,之后不再弹(hide_hint_shown)。

3. 行为矩阵

操作空闲忙刷固件
红叉隐藏窗口隐藏窗口(不打断)拒绝
⌘Q / 文件→退出直接退出弹确认,列出原因拒绝
点 Dock 图标恢复窗口恢复窗口—
登录启动不显示窗口(--background)——
第二次启动唤醒已有实例后退出同左—

退出确认文案会列原因,例如:

退出 Quileg HID?
现在退出会打断:
· 板子已连接
· AI 最近 12 秒有操作

退出后会停止 MCP 接口、投屏和板子连接。
[继续运行]  [仍然退出]

4. 什么算「忙」

core/lifecycle.py: busy_reasons():

刷固件是硬阻塞:_flashing 时红叉和 ⌘Q 都直接拒绝。

5. 开机自启动

6. 单实例

7. 还没做(P2)

菜单栏常驻(NSStatusItem、无 Dock 图标)需要 PyObjC/Swift 桥和额外的签名/公证回归, 当前先用 Dock 图标;需要时再加「显示窗口 / 设备状态 / 退出」菜单。

8. 验收

本页内容与安装包内文档同源,版本见 VERSION.txt。未在页面上展示的细节,可在 Releases 页下载的 DMG 中找到完整原文。