v0.4.29
Fixed
- 修复断网恢复后隧道长时间不通:
NetworkWatcher此前把「无路由」(空指纹)直接忽略,于是拔插网线、睡眠唤醒、路由器重启后 DHCP 分回同一 IP 这三种情况前后指纹相同,watcher 完全不发通知,隧道一直卡在旧的边缘连接上。现在把空指纹记录为有效状态:有→空只记录不回调(无路由时重连无意义),空→有触发回调(即使地址与断网前相同)。 - 修复隧道断开后恢复过慢的三处短板:连接数掉到 0 时第一次探测就立刻软重连(跳过 cloudflared 自身的指数退避),
_TUNNEL_RECONNECT_TIMEOUT由 60 秒收紧到 5 秒后仍为 0 才重启进程,进程已死 / stdin 不可用时直接升级重启;隧道处于非健康 running 状态时强制走 3 秒探测档(此前只看网关健康度,隧道断了但网关健康会停在 15 秒档);穿隧道 e2e 探活连续失败 2 次即触发软重连,此前「降级(边缘不可达)」只显示状态、永不自动恢复(失败计数在_probe_tunnel_e2e内部维护,区分「真的探测失败」与「被 60 秒节流跳过」)。综合效果:断网到隧道重新连通从最坏 20–35 秒降到 2–4 秒,连接数掉 0 的发现时间从 15 秒降到 3 秒,边缘不可达从「永不恢复」变为约 7–10 秒。 - 修复流式对话进行中点「重启网关」十几秒没反应:uvicorn 收到 SIGTERM 会等在途 SSE 请求结束,而用户点重启往往正是因为请求卡住。优雅停止窗口从硬编码 10 秒收紧为
GRACEFUL_STOP_TIMEOUT = 5.0,SIGKILL 后的收尸等待提为KILL_REAP_TIMEOUT = 5.0;重启时在真正开始停止前先弹「正在重启网关…」通知,消除「点了没反应」的观感。
Changed
- 同步上游网关至
main-97cfd67:凭据文件(kiro-auth-token.json)改为原子写。此前_save_credentials_to_file()用open(path, 'w')覆盖,'w'模式一打开就把原文件截断为 0 字节,若进程在写完前被 SIGKILL(或断电 / 崩溃)会留下半个 JSON,accessToken/refreshToken一起损坏,下次启动解析失败、用户必须重新登录。现改为同目录临时文件 +Path.replace()原子重命名(与account_manager._save_state()一致),临时文件以 0600 创建、存在原文件时沿用其权限位,失败路径清理残留临时文件,且保留「保存失败不让 token 刷新整体失败」的兜底语义。本次收紧的 SIGKILL 窗口正建立在这个保证之上。 - docker-compose 镜像 pin 至
ghcr.io/zhujunsan/kiro-gateway:main-97cfd67。
Full Changelog: v0.4.28...v0.4.29