Skip to content

feat: 支持 macOS(.app 探测 / osascript 弹窗 / Cmd+A 受信全选回填) - #2

Merged
Llliao1113 merged 2 commits into
Llliao1113:masterfrom
SimonUTD:feat/macos-support
Sep 9, 2026
Merged

feat: 支持 macOS(.app 探测 / osascript 弹窗 / Cmd+A 受信全选回填)#2
Llliao1113 merged 2 commits into
Llliao1113:masterfrom
SimonUTD:feat/macos-support

Conversation

@SimonUTD

@SimonUTD SimonUTD commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

背景

ZCode+ 此前仅支持 Windows(ZCode.exe 探测、tasklist/taskkill、PowerShell 弹窗、.lnk 快捷方式、Ctrl+A 受信全选)。本 PR 让控制器与安装器在 macOS 上原生可用,Windows 行为完全不变。

改动

controller.mjs

  • 探测链平台分支:macOS 支持 .app 包路径(自动解析 CFBundleExecutable,解析失败缺省 ZCode),候选来源为 ZCode+ 所在目录逐级向上、/Applications~/Applications、Spotlight(mdfind "kMDItemFSName == 'ZCode.app'");Windows 保持原链(盘符/标准位置/where
  • 进程管理:macOS 用 pgrep -x ZCode / pkill -x ZCode 替代 tasklist / taskkill
  • 弹窗:macOS 用 osascript display dialogexecFileSync 数组传参,无 shell 转义;AppleScript 字符串按行拆分用 linefeed 连接,支持中文/引号/换行/反斜杠);统一确认语义判断 messageBoxConfirmed()
  • 受信全选回填:macOS 全选修饰键为 Cmd(CDP modifiers 4),Windows 保持 Ctrl(2)—— Lexical 编辑器受信输入管线在 macOS 同样有效
  • 配置编辑器拉起:macOS open -t 替代 notepad
  • 探测失败引导文案、默认配置 _readme 平台化;版本 1.2.4 → 1.3.0

install.mjs

  • macOS 分支:部署到 ~/Library/Application Support/ZCodePlus,桌面生成可双击的 ZCode+.command 启动器(经 Terminal 登录 shell 启动,PATH 含 node);跳过 ico/vbs/bat/lnk 等 Windows 专属步骤

build-exe.mjs

  • 非 Windows 平台明确报错跳过,避免在 macOS 上误跑到一半崩溃

README.md

  • 徽章改 Windows + macOS;新增 macOS 安装章节;配置说明与排错表格平台化

实测环境

macOS(Darwin 25.6.0)+ ZCode 3.11.2(/Applications/ZCode.app)+ Node 25:

  • 探测:/Applications/ZCode.app 自动解析到 Contents/MacOS/ZCode
  • 拉起 + CDP 注入:星芒按钮、__wbEnhance binding、控制器版本号均在位 ✅
  • Cmd+A 受信全选回填:编辑器内容 AAA → Cmd+A + insertText BBB → 内容仅 BBB(替换而非追加)✅
  • osascript 弹窗中文/引号/换行/反斜杠转义 ✅
  • 自动模式凭据路径 ~/.zcode/v2/config.json 在 macOS 相同,无需改动 ✅
  • Windows 分支逻辑未动(无 Windows 机器复测,改动均在 IS_MAC 分支内)

备注

  • macOS 无发行包形态(build-exe 仅 Windows),README 已注明用 node install.mjs 源码部署

…l 进程管理、osascript 弹窗、Cmd+A 受信全选回填,install 生成 .command 启动器,build-exe 非平台守卫,README 平台化
…焙 node 路径、后台拉起控制器即退避免 LS 常驻去激活),控制器单实例 pid 锁防双通道重复注入、重复点击聚焦已运行 ZCode+;make-icon 模块化并新增 icns 打包
@SimonUTD

SimonUTD commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

追加:macOS 入口升级为真正的应用包。

  • install.mjs 生成 ZCode+.app(桌面 + ~/Applications,启动台可见):LSUIElement 后台型启动器,无终端窗口,图标复用反色逻辑生成 icns(make-icon.mjs 模块化 + 新增 packIcns);启动器内烘焙安装时的 node 绝对路径,失效时回退 PATH/常见位置
  • controller.mjs 新增单实例 pid 锁:重复点击入口只聚焦已运行的 ZCode+(osascript activate)后退出,避免两条 CDP 通道同时收 binding 造成双重增强/回填;锁随进程退出释放,控制器崩溃残留的 ZCode+ 仍走原有附着流程
  • 启动器后台拉起控制器后立即退出——否则 Launch Services 视应用常驻,后续点击只发激活事件给 node 进程,聚焦逻辑失效

实测(macOS + ZCode 3.11.2):双击 .app → ZCode+ 启动注入 ✓;重复点击 → 仅聚焦、进程数不变 ✓;ZCode 退出 → 控制器退出、锁释放 ✓

@Llliao1113
Llliao1113 merged commit def3924 into Llliao1113:master Sep 9, 2026
@Llliao1113

Copy link
Copy Markdown
Owner

感谢这个高质量的 PR!Cmd+A 受信回填的真机实测特别有价值——这是之前评估中最不确定的行为点。

已合并到 master(v1.3.1),PR 基于 v1.2.4 而 master 已含 Linux 重构,所以做了如下适配,darwin 行为均保持你的原实现

合并适配点

  1. 平台三分派重构:mac 候选链/弹窗独立成 addZcodeCandidatesMac / showMessageBoxMac 函数(对齐 v1.3 的 addZcodeCandidatesWin/Linux 架构),Linux 的僵尸进程过滤与两段杀保持不变
  2. cdpSamePlatform 补了 /Macintosh/ UA 判别——这是 WSL2 镜像网络下防跨系统误附着的防护,现在覆盖三平台
  3. ensureDesktopShortcut 守卫从 !== win32 改为 IS_MAC:恢复 Linux 发行包的 .desktop 入口生成(原 PR 守卫会误伤 Linux 链路)
  4. mac 杀进程改用与 Linux 同款两段杀(先 TERM 再 KILL)
  5. 版本号定为 1.3.0(你的分支)→ 1.3.1(避免与已发布的 1.3.0 撞号)
  6. README 三平台化(Linux/macOS 安装章节共存);build-exe 守卫文案修正

已验证(Windows/WSL 侧):单测 12/12、语法检查、平台审计(process.platform 仅 2 处定义)、双平台构建 1.3.1(win 32.7MB / linux 41.9MB,包内版本一致)、Windows 活体探针基线健康。

想请你帮忙做一轮真机回归:拉最新 master 后 node install.mjs 重装,重点验证:

  1. ✨ 按钮注入 + 增强回填(Cmd+A 通道)在新版 controller 下仍正常
  2. 设置面板「跟随 ZCode 当前模型」自动模式(mac 上 ~/.zcode/v2/config.json 路径你之前已验证相同)
  3. 单实例锁:重复点击 ZCode+.app 只聚焦不重复注入

如果发现任何 mac 侧问题,直接在这个 PR 或新 issue 里贴 zcode-plus.log 即可。后续计划:下个版本补 macOS 零依赖发行包(内嵌官方 darwin Node),让没装 node 的 Mac 用户也能用。再次感谢!🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants