Release v0.9.17

- fix lock 里 esbuild 平台子包 extraneous 改 optional:npm ci 在 darwin 不再 EBADPLATFORM (9ff63eb)
- fix web/package-lock.json sync:之前升 vitest 4.1.5 没重建 lock,CI npm ci 严格挂 (1ee7ad5)
- ci 真正修 nvm 卡死:set -e 跟 nvm.sh 不兼容,source 时临时关掉 errexit (38a0929)
- ci 修 nvm.sh 路径鲁棒性:brew --prefix nvm 动态拿真路径 + fallback + debug (7d182d1)
- ci 修 nvm 路径:用 brew Apple Silicon 路径 /opt/homebrew/opt/nvm/nvm.sh (9f99c59)
- ci 根治 node 版本:加 .nvmrc + web job before_script source nvm.sh && nvm use (229cacd)
- ci 修 web job 卡死:vitest --pool=threads → --pool=forks 绕 node 25 worker_threads 死锁 (19e77d1)
- ci 修 web job:npm ci 加 --ignore-scripts 绕 esbuild postinstall 在 node 25 SIGKILL (f5ed1d3)
- fix CI lint:恢复 internal/webui/dist/.gitkeep — commit 7b38829 误删导致 fresh clone 挂 (f1d1648)
- fix self-test 阶段 UI 看着死锁:桥 install:log + 120s total timeout (49f0f00)
- fix 部署期 auto-analyze 死锁:加 60s timeout + 桥 OnLog 让用户看到进度 (7b38829)
- hardening RunInstall 5 分钟 total timeout 兜底防未来无 timeout 卡死 (4ff743b)
- feat codex install 自动写 network_access=true 不再让用户手抄 toml (9520460)