Skip to content

fix(runtime): 启动检查超时后自动再试一次 - #1938

Merged
jinghero merged 4 commits into
AUTO-MAS-Project:devfrom
jinghero:fix/startup-recovery-readable-20261112
Nov 12, 2026
Merged

jinghero merged 4 commits into
AUTO-MAS-Project:devfrom
jinghero:fix/startup-recovery-readable-20261112

Conversation

@jinghero

@jinghero jinghero commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

摘要

  • 5.8 启动检查第一次超时后,页面会一直显示同一个错误,没有真正再试。现在确认旧 Runtime 已经结束后,自动再试一次;两次都失败才停在失败页。这个自动重试只用于启动前的工作区检查超时。
  • 多个页面请求共用同一次启动,手动重试会真正重新开始。补齐更新弹窗的“重新启动后端”按钮:一次手动重试失败后,再点一次仍会重新启动,不再反复返回旧错误。旧进程没结束或程序正在退出时,仍禁止再启动另一份。
  • 日志补上进程何时启动、何时有输出、何时退出,以及每次尝试的错误和耗时,方便继续排查。正常启动不额外等待。

验证

当前提交 7a184b5d8,Windows,使用锁定依赖并禁用生产遥测。

  • 新增检查实际运行更新弹窗的处理函数、主进程调用和后端启动。旧代码在第二次点击后仍只创建过一次进程,检查失败;修复后第二次点击真正启动成功,普通页面请求仍保留原来的去重行为。
  • 8 个相关测试文件共 138 项通过,包含启动、更新、手动重试、取消、进程退出和应用关闭检查。格式、类型、构建、更新日志及完整 Windows 安装包打包通过。lint 有一条未改动页面的旧警告,已用原始代码确认。
  • 此前 5 条初始化及首页浏览器流程通过,并使用旧 Runtime v0.1.29 完成真实正常启停:只尝试一次,健康检查就绪,关闭后所有持有进程及端口释放。这次只补更新弹窗按钮,没有改那条正常启动路径。
  • 更新弹窗的审查意见 已复现并修正。代码规范和任务要求分别独立复查,两边均未发现新的问题。

还没确认的事

用户那台电脑开机、休眠时为什么偶尔收不到 Runtime 的第一条消息,还没有复现。这次修复了“第一次临时失败后不再自动恢复”,也补了后续排查需要的日志,没有把所有启动失败都说成已解决。

uv 的另一处问题单独修复在 Runtime #37,两个 PR 可以分别合入。

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-12T11:00:26.647498Z ac782f0 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added 模块: Runtime 按更新日志碎片自动设置 类型: 修复 按更新日志碎片自动设置 labels Nov 12, 2026

Copy link
Copy Markdown
Contributor Author

总体结论:修改后合并

AUTO-MAS-Project/AUTO-MAS #1938

宝宝,这次把“请求结束”和“进程真的退出”分清楚了:自动恢复只针对已经退出的只读检查,迟到的握手也不会重新报成功,这个收尾方向很稳喵。不过还有一个旧按钮没跟上新的重试约定,会让用户点了重试却没有真正再启动,需要一起补上。

Runtime 客户端负责进程握手和退出证据,BackendService 管理启动与清理,InitializationService 保存一次桌面启动的进度和结果。普通窗口共享结果没问题;用户明确点击的重试,需要告诉主进程开始新的一次。

[逻辑 · P2] 更新弹窗的“重新启动后端”会重复返回旧失败

位置:initializationHandlers.ts:310–327、useBackendRuntimeUpdate.ts:202–230。

静态推演:后端更新完成但重新启动失败后,用户在更新弹窗点击“重新启动后端”。这个入口仍调用不带参数的 backendStart();本次修改会为它建立桌面启动任务。如果这次手动尝试也失败,结果就会被缓存。即使用户随后排除了临时故障,再点同一按钮,IPC 也会在第 313 行直接返回旧失败,不再创建 Runtime 进程。按钮仍会解除加载状态并保留,所以看起来可以重试,实际上没有尝试。

基线中这个入口直接调用 backend.startBackend(),不会保存这份新的失败快照。后台 WebSocket 恢复要等另一轮重连失败,还受次数限制,不能代替按钮本身的重试。

这里不用放开普通窗口的去重保护啦:把更新弹窗这个明确的手动入口改为 backendStart(true),复用已有的重置能力即可。建议补一个“更新进入 restart 失败 → 第一次手动尝试失败 → 故障解除 → 第二次点击真实启动成功”的回归,现有新增测试只覆盖了显式传 true 的调用,没有覆盖这个旧调用者。

验证范围

已静态检查握手失败、进程归属、取消退出、有限重试、更新恢复入口及相关测试。已有 CI 的前端 lint、类型、格式检查和 343 项测试通过,其中 Runtime 客户端 22 项、BackendService 55 项;这些测试没有覆盖上面的更新弹窗调用链。

dot酱没有执行项目代码或测试,也没有独立复现开机、休眠时的原始握手超时,不能把恢复措施写成已经找到原始超时根因。补齐这个手动入口,再让它和普通窗口各走各的正确路径喵。

—— dot酱敬上 🐾

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ac782f0ce7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Contributor Author

总体结论:可以合并

AUTO-MAS-Project/AUTO-MAS #1938

宝宝,这次更新弹窗明确传了 backendStart(true),手动重试终于和普通窗口请求分开了喵。新增回归还把弹窗处理函数、IPC 和启动服务串起来,检查了“第一次失败、普通请求不重启、再次点击成功”;不是只改了参数就放过它,dot酱给你拍拍爪。

上次的阻断项已修复。结合此前检查的握手、进程退出、取消和有限重试链路,本轮未发现新的必须修改项,可以合并。

本轮为静态复核;已读取最新 CI 日志,前端 344 项测试通过,其中 BackendService 56 项。dot酱未执行项目代码或测试,开机、休眠时原始握手超时的根因仍未确认,这项恢复措施不等于根因已经解决。

—— dot酱拍拍爪敬上 🐾

@jinghero
jinghero merged commit f35f968 into AUTO-MAS-Project:dev Nov 12, 2026
9 checks passed
@github-actions github-actions Bot mentioned this pull request Nov 13, 2026
3 tasks
ClozyA added a commit that referenced this pull request Nov 13, 2026
## Release v5.9.0-beta.1

由「准备发版」工作流生成。这是唯一允许修改 `CHANGELOG.md` 与版本号的 PR,合并后请手动运行「构建并发布应用程序」。

合并前请在本 PR 里完成:

- [ ] 「本次亮点」够不够:合并前给碎片加 `highlight: true` 就会自动进这一类,现在也可以直接在
`CHANGELOG.md` 新版本段里把条目挪过去
- [ ] 有 3
个提交改了用户可见代码但没带碎片(清单见[运行摘要](https://github.com/AUTO-MAS-Project/AUTO-MAS/actions/runs/43347223103)),若用户可见就在新版本段里补一条
- [ ] 改完运行 `python scripts/changelog.py sync` 并提交

### 体积

- 首行 JSON 2371 / 18000 字符,带 1 个版本段
- 本版 40 条,最长的几条:
- 78 字(变更)【设置】自启与静默启动可独立设置,静默时直接进入托盘,关闭可选退出或托盘,最小化保留任务栏。 (#1928) by
@he0119 by @1w1w11w1
- 76 字(修复)【MAA】MAA 更新失败时统一检查安装健康;资源半更新自动重装,官方本体失败保留标记并提示使用官方修复入口 (#1909)
by @youngslin
- 75 字(变更)【模拟器】ModAVD 全部改由 modavd 命令行控制,移除自带的直控和更新器,不再支持无命令行的旧根目录
(#1918) by @qiyinxi
- 64 字(修复)【主页】调整任务台版本主线的 UI,并让版本更新倒计时更清楚 (#1926) by
@TyrannosaurusGodofWar
- 64 字(破坏性变更)【调度】重构任务调度与范围选择,完善日志恢复、独立触发、队列附加动作及电源收尾。 (#1845) by
@DLmaster361

自 `v5.8.0` 以来的改动:

### ⚠️ 破坏性变更

- 【调度】重构任务调度与范围选择,完善日志恢复、独立触发、队列附加动作及电源收尾。 (#1845) by @DLmaster361

### ✨ 新增

- 【M9A】新增 MAS 登录 B 服:处理隐私协议并选择已保存账号后交给 M9A 运行 (#1882) by @Douya36
- 【ok-ww】支持脚本逐账号或批量切号、显示失败原因并补跑未完成账号 (#1890) by @AthenaHibou
- 【ok-nte】支持按日配置日常计划,并可在详细配置中调整当天任务。 (#1921) by @AthenaHibou
- 【调度】在日志末尾显示预下载方式和进度,支持独立配色与连续渐变(仅公测) by @youngslin
- 【设置】支持调整自定义光标的显示大小。 (#1904) by @Douya36

### 🔧 变更

- 【调度】统一各脚本账号编辑页的页头和基本信息布局 by @Craun718
- 【模拟器】魔改 AVD 改名为 ModAVD,界面、提示和日志统一用新名称 (#1898) by @qiyinxi
- 【模拟器】ModAVD 全部改由 modavd 命令行控制,移除自带的直控和更新器,不再支持无命令行的旧根目录 (#1918) by
@qiyinxi
- 【设置】统一主要页面的标题、间距、卡片层次和日志按钮外观 (#1893) by @1w1w11w1
- 【设置】浅色主题改为中浅灰画布配纯白卡片,补回分隔线与卡片边缘层次 (#1855) by @beichen24a1
- 【设置】自启与静默启动可独立设置,静默时直接进入托盘,关闭可选退出或托盘,最小化保留任务栏。 (#1928) by @he0119 by
@1w1w11w1
- 【Runtime】加快运行环境健康时的启动准备 (#1907) by @jinghero

### 🐛 修复

- 【MAA】MAA 更新失败时统一检查安装健康;资源半更新自动重装,官方本体失败保留标记并提示使用官方修复入口 (#1909) by
@youngslin
- 【MAA】修复保存配置时修改被误判未保存并丢弃的问题 (#1930) by @jinghero
- 【end】MaaEnd 安装异常时统一恢复事务,并安全修复可信身份的损坏本体 (#1913) by @youngslin
- 【HSR】为 M7A 与 SRA 更新中断后的未完成回滚添加用户确认恢复入口 (#1915) by @youngslin
- 【HSR】修复 SRA 使用自建下载站时无法下载安装更新的问题。 (#1945) by @youngslin
- 【bgi】修复正式版安装资源尚未就绪时自动更新失败的问题 (#1901) by @youngslin
- 【ok-ww】修复直接启动游戏时无法覆盖默认资源档位的问题 (#1925) by @AthenaHibou
- 【ok-ww】修复新版脚本启动后不执行每日任务的问题 (#1940) by @AthenaHibou
- 【ok-ww】修复新版启动器不触发游戏更新及停服维护时反复重试的问题 (#1934) by @1w1w11w1
- 【ok-ww】修复鸣潮和异环更新重启后自动切号失败的问题。 (#1933) by @AthenaHibou
- 【ok-nte】修复仅开启任务后关闭时无法关闭游戏及启动器的问题。 (#1920) by @AthenaHibou
- 【BAAH】损坏的托管安装须由用户明确选择官方完整包修复,禁止绕过校验运行 (#1908) by @youngslin
- 【奇想盒】修复后端安装中断后无法自主确认恢复的问题 (#1905) by @youngslin
- 【SRC】修复原生安装中断后无法自主选择安全恢复的问题 (#1906) by @youngslin
- 【主页】调整任务台版本主线的 UI,并让版本更新倒计时更清楚(仅公测) (#1926) by @TyrannosaurusGodofWar
- 【调度】修复停止任务后脚本及更新子进程残留、项目持续占用和结果未保存的问题 (#1892) by @youngslin
- 【调度】统一配置表单、卡片间距与状态颜色,优化队列列宽和配置说明 (#1927) by @AthenaHibou
- 【模拟器】修复启动模拟器时 adb 命令执行不了却只提示超时、看不到原因的问题 (#1894) by @miaojiuqing
- 【模拟器】手动停止任务时不再把 ModAVD 模拟器连同任务一起强制结束 (#1919) by @qiyinxi
- 【工具】修复 MCP 查询全部托管失败及可空参数被错误拒绝的问题 (#1895) by @HarcoChen
- 【设置】修复模拟器管理和调度中心卡片外侧阴影显示不一致 (#1897) by @1w1w11w1
- 【设置】FluxDown 自动识别强制优先选择 MAS 内的文件夹。 (#1948) by @youngslin
- 【更新】统一脚本安装恢复入口及队列结束时的下载异常汇总 (#1916) by @youngslin
- 【Runtime】修复回退旧版后再次升级时无法启动的问题 (#1889) by @jinghero
- 【Runtime】修复后端启动异常退出却被误判为正常结束的问题 (#1929) by @jinghero
- 【Runtime】修复临时启动失败后反复停留在失败页的问题 (#1938) by @jinghero
- 【Runtime】修复初始化时依赖安装已成功却被误报为失败的问题。 by @ClozyA

Co-authored-by: ClozyA <133191303+ClozyA@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

模块: Runtime 按更新日志碎片自动设置 类型: 修复 按更新日志碎片自动设置

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant