Skip to content

修一批网关与界面的健壮性问题(定时任务 / 会话 / 模型 / Git / 前端) - #168

Merged
greyoak111 merged 2 commits into
greyoak111:mainfrom
zx-5426:fix/audit-067
Nov 7, 2026
Merged

greyoak111 merged 2 commits into
greyoak111:mainfrom
zx-5426:fix/audit-067

Conversation

@zx-5426

@zx-5426 zx-5426 commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

改了什么、为什么 / What and why

一批与本机/边界条件有关的健壮性修复,都是小改动、没有新依赖:

  • 定时任务:同一任务的排队等待者去重,避免忙等结束后重复执行;「跳过下一次」在改期/时区变化后仍生效;跨午夜(22:00–02:00)的「每隔几小时」保存时拒绝,不再存一个永远不跑的任务。
  • 会话/回退:rewindFiles 的 spawn 补 error 监听(起不来不再带崩网关);回退补救改用 writeAll,满盘短写不再把文件截成半截;会话列表只认普通 .jsonl 文件,peekSessionRaw 在 read 抛错时也关闭 fd。
  • 模型/登录:配置里的 fallbackModels 做形状清洗,坏条目不再让 /model、/effort 和每轮启动抛 TypeError;effortLevelsOf 兜底;auth status 只从 stdout 里找带 loggedIn 的 JSON,前面的警告 JSON 不再被当成状态。
  • Git:未跟踪文件的行数统计加总读取预算;钩子指纹扫描给单文件大小上限,core.hooksPath 为空时不再把仓库根当钩子目录;gitNet 超时后整组杀子进程;.gitconfig 末尾没有换行时先补换行,safe.directory 能正常写入。
  • 组件/桥接/本地模型:取消安装时清理解包暂存树;桥接映射先 fsync 再 rename;本地模式切换写盘失败回 500 并回滚,不再假成功。
  • 前端:折叠分组后的「全选」只选画出来的条目;cc.sessFold 非对象时不再让后续脚本全不执行;畸形 hooks 配置不再让 Hooks 区崩溃;项目页模型清单拉取失败不再无限重画;PDF getPage(1) 失败有错误提示;端侧模式切换失败不再弹成功。

怎么测的 / How it was tested

  • 设备:Xiaomi Civi 4 Pro(arm64),Android 16;Node 26。

  • node scripts/test.mjs:811 项,810 通过,1 跳过,0 失败。

  • 新增回归测试:effortLevelsOf 非数组兜底、跨午夜 every 窗口拒绝、<synthetic> 正文在已流过增量后仍发出。

  • 这批改动只涉及网关与前端脚本;本机没有构建 APK,前端改动只做了 node --check,建议 CI 构建的包在 WebView 里点一遍受影响的页面(会话多选、扩展页 hooks、项目页、PDF 查看器、端侧模式切换)。

  • 没有新增界面文案(只改了已有提示的触发逻辑)

  • 没有引入新依赖或构建步骤

  • 没有二进制、压缩或混淆过的代码;没有改第三方代码

- 定时任务:忙等重复入队、跳过下一次标记失效、跨午夜窗口永不运行
- 会话/回退:spawn 失败带崩网关、短写截断、目录当会话、重复 fd
- 模型/登录:配置清单形状校验、auth status 解析
- Git:未跟踪文件读取上限、钩子大小上限、超时组杀、.gitconfig 换行
- 组件/桥接/本地模型:取消清理、fsync、写盘失败提示
- 前端:折叠全选、hooks 形状、项目页循环、PDF 错误、模式切换提示
- 补回归测试

Co-Authored-By: Claude Code <noreply@anthropic.com>
@zx-5426
zx-5426 requested a review from greyoak111 as a code owner November 5, 2026 17:44
@github-actions

github-actions Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

PR 安全初筛 / Safety pre-check

改动 41 个文件;高 1 项、中 1 项。

档 文件 行 为什么要看
高 gateway/web/lang-en.js 2820 译文文件里不是词条的行
中 gateway/gw/components.mjs 网关里碰文件、网络、安装的模块

「高」不等于有问题,只是这些地方一旦被动手脚,后果最重(能拿到签名钥匙、改到用户手机上的权限、或藏进看不见的内容),合并前请逐行看过。

- compCancel 里 1.5 秒后删 .staging/<id> 的做法删不到:取消后 tar 退出、
  compRunInstall 很快 reject,job.finished 先变 true,定时器看到就直接返回,
  解包树照旧留下。改到安装 promise 的失败回调里删,那时子进程已退出;
  压缩包保留,重试不用重下。
- 「设置写盘失败,模式没有切换」「每隔几小时…跨午夜请拆成两个任务」
  补 en 与 8 种语言译文,重新生成词典。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@greyoak111
greyoak111 merged commit 009ab3c into greyoak111:main Nov 7, 2026
1 check failed
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