This repository was archived by the owner on Sep 6, 2026. It is now read-only.
Codex++ 1.2.62
Codex++ v1.2.62
本版本集中修复“管理器保存配置后,重启 Codex 配置不生效、模型选择消失或恢复默认,必须反复保存和重启,最后甚至始终无法生效”的持久化故障喵~
问题根因
这不是单一界面问题,而是四条并发与错误处理链路叠加造成的喵~
settings.json读取或 JSON 解析失败时,旧逻辑会静默构造一份完整默认配置,后续任一保存都可能把默认值写回磁盘喵~- 管理器、launcher、helper 和 Codex 页面可能同时写设置,但旧原子写入固定共用
settings.json.tmp,并发时会争用、替换或覆盖同一个临时文件喵~ - Codex 页面刚记录的新模型选择,可能被管理器稍早读取的完整设置快照覆盖,导致
lastUsedModel、model或自定义模型默认项丢失喵~ - 管理器存在多个异步保存入口,较旧请求的响应可能晚于较新请求返回,并反向覆盖界面中的最新状态喵~
现场还确认当前用户设置中的“供应商配置总开关”为关闭状态,也就是 relayProfilesEnabled = false;该状态按设计会阻止启动器把供应商和模型写入 Codex live 配置,是“怎么保存都不生效”的直接阻断因素之一喵~
核心修复
SettingsStore增加跨进程共享/独占文件锁,读取使用共享锁,完整保存、局部修改和模型选择回写使用独占锁,避免多个 Codex++ 进程同时改写设置喵~- SettingsStore 的原子保存改为每次使用唯一临时文件,不再让管理器与 helper 争用固定的
settings.json.tmp喵~ settings.json损坏、暂时不可读或结构不正确时会返回明确错误并停止写入,不再把读取失败伪装成“默认配置读取成功”,因此不会继续用默认值覆盖原文件喵~- Codex 页面记录模型选择改为一次加锁完成的原子读改写,避免读取和写入之间被其他进程插入保存喵~
- 管理器保存完整设置时,会合并磁盘上最新且仍存在于新模型列表中的选择,并同步保留
lastUsedModel、model和自定义模型默认项喵~ - 如果用户主动从模型列表删除当前模型,仍会按新列表正常回退,不会错误恢复已经无效的旧模型喵~
- 管理器所有
save_settings请求进入同一串行队列,只有最新且成功的响应可以更新界面,旧响应不再覆盖新表单喵~ - 设置加载失败时保留当前表单草稿,不再采用失败响应携带的默认设置;供应商切换失败时重新读取已经回滚的持久化状态喵~
- 供应商切换事务现在同时保护
settings.json与 Codex liveconfig.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.rs、provider_import.rs、official_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、template64/64,没有缺失词条喵~ - npm audit 仍报告仓库既有 1 个 low 与 2 个 high,本版本没有新增依赖喵~
- 所有验证均未连接、替换、重启或操作当前 Codex 页面、当前任务、当前 helper 与
9229CDP 喵~
GitHub Actions
- 主分支三平台构建 30849067954:Windows、macOS x64、macOS arm64 全部成功喵~
- 正式发行构建 30850220679:版本校验、Windows x64、macOS x64、macOS arm64、六项资产校验和 GitHub Release 发布全部成功喵~
发行资产与 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 喵~