Files
cmshoppe/docs/tasks/T-681.md
T

71 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-681
title: 自定义网关模型名称重命名
phase: 5
deps: [T-677, T-680]
status: DONE
created: 2026-07-21
---
# T-681 自定义网关模型名称重命名
## 问题 / 背景
设置页的「自定义网关」模型清单当前只有「新增」和「删除」。用户发现模型名称写错或希望调整命名时,只能重新新增一条模型并手动复制连接信息;若该模型被选为标题或图片默认模型,还可能留下失效的默认引用。
现有「保存」会连同模型连接参数一起写入,虽然技术上可编辑名称,但不适合作为清晰的名称管理操作,也不会迁移 `ai.default_text_model`、`ai.default_image_model` 对旧名称的引用。
## 方案
- 在自定义网关模型选择框右侧保持「新增」原位置,并在其右边、删除按钮左边新增「重命名」按钮,顺序固定为「新增」「重命名」「删除」。
- 仅在当前选中模型且没有连接测试任务运行时启用「重命名」。点击后用中文输入对话框显示当前名称作为默认值;取消不改动任何文件。
- 新名称去除首尾空白后校验:不能为空、不得与其它模型重名;校验失败以中文提示并保持当前选择和模型数据不变。
- 重命名只改模型 `name`,保留类别、启用状态、URL、模型 ID、API 类型、超时、额外参数和本地 API Key;不得在状态栏、弹窗或日志显示 API Key。
- 成功时立即写入 `ai_models.json`,并同步迁移当前配置中精确匹配旧名称的 `ai.default_text_model`、`ai.default_image_model`,立即写入 `config.json`。两份配置任一写入失败时向用户显示中文错误,不伪报成功。
- 写入成功后刷新模型清单并继续选中新名称;标题/图片默认模型下拉框显示新名称,状态栏显示“AI 模型已重命名:旧名称 → 新名称”。
- 为避免名称管理逻辑散落在 GUI 中,`appconfig` 提供可复用的重命名操作或等价的受控更新接口;其行为必须保留原模型字段并执行唯一性校验。
## 验收要点
- [ ] 自定义网关的模型操作顺序为「新增」「重命名」「删除」,默认网关面板不增加该操作。
- [ ] 选中模型后可重命名;无模型或连接测试运行时按钮不可用;取消输入不产生写入。
- [ ] 空名称、重复名称均不能保存,提示为中文,原模型及默认引用不变。
- [ ] 重命名后原模型的全部非名称字段(含 API Key)保持不变,新名称在模型清单、当前选择和默认模型下拉框中立即可见。
- [ ] 若标题/图片默认模型原先指向旧名称,对应默认引用迁移到新名称并持久化;未指向旧名称的引用不改变。
- [ ] 程序重启后模型名称和默认引用仍一致;状态栏、对话框、测试输出不泄露 API Key。
## 测试与文档
- 在 `tests/test_appconfig.py` 覆盖模型改名、重名/空名称拒绝和字段保留。
- 在 `tests/test_gui.py` 覆盖按钮顺序与状态、确认改名、取消、重名拒绝、默认标题/图片模型引用迁移及持久化回读。
- 更新 `docs/routes.md` 的设置页自定义网关模型管理说明。
## 验证
```bash
py -3.10 -m unittest tests.test_appconfig tests.test_gui
py -3.10 -m unittest discover -s tests
py -3.10 -m ruff check app tests main.py
py -3.10 -m compileall app main.py
git diff --check
```
## 边界(不改什么)
- 不改默认网关、cmhub URL/API Key/别名、模型调用、余额查询或商品套图来源选择逻辑。
- 不改变模型类别、API 类型、连接参数、超时语义或 API Key 的本地保存方式。
- 不新增批量重命名、模型分组、导入导出、在线同步或删除模型时自动替换默认引用。
- 不改 Chrome/CDP、采集、AI 生成、更新蝦皮或打包逻辑。
## 关联
- T-677:生成网关来源选择与自定义网关模型配置。
- T-680:设置页网关来源单选框,保持现有同行布局和保存语义。
## 执行记录
- 在自定义网关模型选择框右侧加入「重命名」按钮,固定操作顺序为「新增 / 重命名 / 删除」;无当前模型或连接测试运行中时不可用。输入对话框以当前名称预填,取消或名称未变不写入。
- `appconfig.rename_ai_model()` 统一执行名称清理、空名称/重名校验,并保留模型其余字段。设置页重命名后立即同步 `config.json` 中标题/图片默认模型引用;模型配置写入成功而默认引用保存失败时会回滚模型清单,避免留下旧名称引用。既有「保存」修改模型名称时复用同一迁移与回滚逻辑。
- 更新 `docs/routes.md`,并增加配置层与 GUI 回归测试:字段/API Key 保留、空名称/重名拒绝、按钮顺序与启用状态、文本/图片默认引用迁移、取消不写入。
- 验证通过:`py -3.10 -m unittest tests.test_appconfig tests.test_gui`(233 项)、`py -3.10 -m unittest discover -s tests`(653 项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。