Release / Version consistency (push) Canceled after 0s
Release / Build (macos-latest) (push) Canceled after 0s
Release / Build (ubuntu-latest) (push) Canceled after 0s
Release / Build (windows-latest) (push) Canceled after 0s
Release / Attach macOS install script (push) Canceled after 0s
2.8 KiB
2.8 KiB
KimiSwitch v0.8.6
供应商名称唯一性防护版:修复同一厂商配置第二把 Key 时,因供应商名称撞车导致第一个供应商条目被静默覆盖、API Key 随之丢失的问题。
同名覆盖丢失(事故修复)
- 事故复现路径:Kimi Switch 里供应商以「名称」为唯一存储键,新建第二个供应商时若名称与已有厂商相同(例如两把 Key 都叫
TokenHub),应用会在内存里无提示地用新条目顶掉旧条目,随后任意一次保存(包括 Ctrl+S 快捷键与切换供应商)都会把丢失状态写进 config.toml——第一把 Key 就此消失,全程没有任何警告 - 根因:四个写入点(编辑改名、JSON 应用、新建占位名、保存校验)全部没有名称查重;且 Ctrl+S 是窗口级快捷键,会绕过任何被禁用的按钮,单纯「灰掉保存按钮」拦不住
- 本次修复后:名称撞车在每一层都会被拦下,被顶掉的条目还能自动找回(见下),同类丢失不再可能发生
防护机制
- 编辑页即时提示:名称为空或与其他供应商重名时,名称输入框立即红框 + 错误说明(「供应商名称不能为空」/「名称与其他供应商重复」),顶部保存按钮同时禁用
- 保存硬阻止:三条保存入口(Ctrl+S、底部保存按钮、切换供应商)统一过检——撞名未解除或存在空名条目时弹窗阻止,绝不落盘
- 被顶掉的供应商自动找回:撞名瞬间被覆盖的原厂商会被暂存保护,改名离开撞名状态时自动还原回列表(例如把
TokenHub-copy错改成TokenHub后再改成TokenHub-3,原来的TokenHub连同它的 Key 和模型映射都会回来) - 新建占位名防撞:
+ 自定义配置生成的provider-N占位名改为循环取号,删除过条目后不再回退撞名 - 「配置 JSON」源头拒绝:粘贴的 JSON 里
name与其他供应商重名时直接拒绝应用,不产生任何变更 - 复制提示修正:复制供应商的提示文案显示真实新名(
-copy/-copy-2),不再固定显示-copy
其他
- 名称比较为大小写敏感全等(
TokenHub与tokenhub视为两个不同供应商,与 config.toml 键语义一致);首尾空白自动忽略 - models.dev 快照同步至 2026-10-16(8,894 模型 / 230 供应商)
- 本次零 Rust 改动,存储层与 config.toml 格式完全不变,升级 / 回退无迁移成本
测试
- 前端 157 项(新增 7 项名称校验:空名 / 纯空白 / 撞名 / 大小写不判撞 / 双侧空白归一 / 唯一名 / 空名优先级)
- 置换暂存与自动还原算法经 27 条独立断言推演验证(含连续两次撞名、撞名后重载、撞名后返回丢弃等边界)
- Rust 212 项(本次无改动,全量回归通过)