Skip to content
This repository was archived by the owner on Sep 6, 2026. It is now read-only.

Codex++ 1.2.62

Choose a tag to compare

@github-actions github-actions released this 03 Aug 20:37
· 93 commits to main since this release

Codex++ v1.2.62

本版本集中修复“管理器保存配置后,重启 Codex 配置不生效、模型选择消失或恢复默认,必须反复保存和重启,最后甚至始终无法生效”的持久化故障喵~

问题根因

这不是单一界面问题,而是四条并发与错误处理链路叠加造成的喵~

  1. settings.json 读取或 JSON 解析失败时,旧逻辑会静默构造一份完整默认配置,后续任一保存都可能把默认值写回磁盘喵~
  2. 管理器、launcher、helper 和 Codex 页面可能同时写设置,但旧原子写入固定共用 settings.json.tmp,并发时会争用、替换或覆盖同一个临时文件喵~
  3. Codex 页面刚记录的新模型选择,可能被管理器稍早读取的完整设置快照覆盖,导致 lastUsedModelmodel 或自定义模型默认项丢失喵~
  4. 管理器存在多个异步保存入口,较旧请求的响应可能晚于较新请求返回,并反向覆盖界面中的最新状态喵~

现场还确认当前用户设置中的“供应商配置总开关”为关闭状态,也就是 relayProfilesEnabled = false;该状态按设计会阻止启动器把供应商和模型写入 Codex live 配置,是“怎么保存都不生效”的直接阻断因素之一喵~

核心修复

  • SettingsStore 增加跨进程共享/独占文件锁,读取使用共享锁,完整保存、局部修改和模型选择回写使用独占锁,避免多个 Codex++ 进程同时改写设置喵~
  • SettingsStore 的原子保存改为每次使用唯一临时文件,不再让管理器与 helper 争用固定的 settings.json.tmp 喵~
  • settings.json 损坏、暂时不可读或结构不正确时会返回明确错误并停止写入,不再把读取失败伪装成“默认配置读取成功”,因此不会继续用默认值覆盖原文件喵~
  • Codex 页面记录模型选择改为一次加锁完成的原子读改写,避免读取和写入之间被其他进程插入保存喵~
  • 管理器保存完整设置时,会合并磁盘上最新且仍存在于新模型列表中的选择,并同步保留 lastUsedModelmodel 和自定义模型默认项喵~
  • 如果用户主动从模型列表删除当前模型,仍会按新列表正常回退,不会错误恢复已经无效的旧模型喵~
  • 管理器所有 save_settings 请求进入同一串行队列,只有最新且成功的响应可以更新界面,旧响应不再覆盖新表单喵~
  • 设置加载失败时保留当前表单草稿,不再采用失败响应携带的默认设置;供应商切换失败时重新读取已经回滚的持久化状态喵~
  • 供应商切换事务现在同时保护 settings.json 与 Codex live config.toml / auth.json,切换中的任一步骤失败都会恢复两侧文件,避免重启后读取半套配置喵~
  • 第三方供应商导入、cc-switch 导入、Provider 同步记录和图片设置重置均停止使用“读取失败后以默认设置继续写入”的危险路径喵~
  • 当“供应商配置总开关”关闭时保存活动供应商,管理器会明确提示配置只会存档且重启 Codex 也不会应用,不再显示误导性的纯成功提示喵~

升级后操作

安装 v1.2.62 后,请在管理器的供应商列表中先开启“供应商配置总开关”,再保存活动供应商并重启 Codex 喵~

本版本不会擅自把这个总开关改为开启,因为它本身是用户可持久化控制的显式设置喵~

如果 settings.json 已经损坏,管理器现在会显示读取错误并停止覆盖;应先根据错误保留或修复原配置,再重新保存,而不是继续生成默认配置喵~

代码范围

  • crates/codex-plus-core/src/settings.rs:跨进程锁、严格读取、唯一临时文件、原子 mutate、模型选择合并与并发测试喵~
  • apps/codex-plus-manager/src-tauri/src/commands.rs:安全读取、保存和失败响应处理喵~
  • apps/codex-plus-manager/src/App.tsx:保存串行队列、最新响应保护、表单保留和总开关阻断提示喵~
  • crates/codex-plus-core/src/relay_switch.rs:设置与 live 配置双回滚事务喵~
  • crates/codex-plus-core/src/routes.rsprovider_import.rsofficial_remote.rs:移除读取失败后默认化写回路径并使用原子修改喵~
  • apps/codex-plus-manager/src/model-windows.test.ts 与 Rust 测试:补齐前端竞态、坏 JSON、并发修改、模型保留和回滚覆盖喵~

从 v1.2.61 到 v1.2.62 共修改 17 个文件,新增 522 行、删除 141 行,其中包含版本与项目操作记录喵~

验证结果

  • 第二轮完整 cargo test --workspace -- --test-threads=1 全部通过,workspace 单元、集成和文档测试零失败,总耗时约 9 分 52 秒喵~
  • SettingsStore 21 项测试全部通过,包含损坏 JSON 拒绝默认化、16 路并发 mutation 无丢失和运行时模型选择保留喵~
  • 供应商切换 7 项测试全部通过,包含 settings/live 文件双回滚喵~
  • 前端 16 项测试、TypeScript、Vite 生产构建、Rust 格式和差异检查全部通过喵~
  • i18n 精确校验为 plain 721/721、template 64/64,没有缺失词条喵~
  • npm audit 仍报告仓库既有 1 个 low 与 2 个 high,本版本没有新增依赖喵~
  • 所有验证均未连接、替换、重启或操作当前 Codex 页面、当前任务、当前 helper 与 9229 CDP 喵~

GitHub Actions

发行资产与 SHA-256

文件 大小 SHA-256
CodexPlusPlus-1.2.62-windows-x64-setup.exe 16,435,077 B 0593943590e711f8e459e8ba9eebf8122111cc55c38c0df3d841d622ff500693
CodexPlusPlus-1.2.62-windows-x64.zip 20,736,564 B 46ef6c13b9b3ce12a6f92b82f8a09847326e387e801049fe6232aa9170893f57
CodexPlusPlus-1.2.62-macos-x64.dmg 24,202,807 B c96f800136d65b008d53035ceac17b88f5507c0516a28fa06eda6246197623f9
CodexPlusPlus-1.2.62-macos-x64.zip 20,723,666 B 90f3f2c51c644570be3266783727835ca43623b6e62a55d9728b770afa009c81
CodexPlusPlus-1.2.62-macos-arm64.dmg 23,658,170 B c1361dfd72211e83721a207436be586ad27acef2a7e4527a720c3c0a0dad455a
CodexPlusPlus-1.2.62-macos-arm64.zip 20,231,644 B a9e0a9e956e21a14db76b63b4a7ef230dd9d6715b896707116098ebadfa0b512

完整变更对比v1.2.61...v1.2.62 喵~