
wuguanganandClaude Opus 5
5ce8c9893e
fix: 重启后开项目弹系统终端;终端关了会话还显示在线
两个都是「看起来对、其实一直错」的判断。
## 1. iTerm 检测
iTerm2 的包叫 iTerm.app,只有可执行文件叫 iTerm2。旧的 isInstalled 拿
AppleScript 名拼 /Applications/iTerm2.app,永远不存在,detectTerminal()
一路降级到 macOS 终端。
平时看不出来:hub session 通常已存在且有客户端连着,走 addWindow 根本
不碰终端检测。只有开机后第一次建 session 才暴露 —— 所以现象是"重启后",
其实和重启无关。
改成 bundle id 走 LaunchServices,路径只做兜底且两个候选包名都试。
顺带修 pgrep:macOS 的 pgrep 默认排除自己的祖先进程(要 -a),所以
从 iTerm 里跑的 hubctl/hubprobe 问"iTerm 在跑吗"恒为否。改用
NSRunningApplication(也不会像 AppleScript 那样触发冷启动)。
## 2. detached 会话
关掉终端不结束会话 —— claude 的父进程是 tmux server,关窗口只是 detach。
kill(pid, 0) 依然为真,项目行一直亮着蓝点写"1 个会话"。
不是把它报成已退出(那会掩盖一个还在烧 token 的进程),而是把两半都说:
还在跑,但终端已经关了。空心点 + "1 个会话 · 终端已关",
会话详情卡的位置标注也加上"(终端已关,仍在后台跑)"。
边界:按 tmux 会话名判而不是"有没有任何客户端";绑不到 pane 的不算
detached —— 那是根本不在 tmux 里,判断不了的事不能当结论下。
14 个新测试,482 个全过。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>