# 已知问题与迁移遗留 记录 UI 库迁移(Phase 006-007,naive-ui → Arco Design Vue)过程中**发现但按规则未修**的问题,以及自动化测试**测不到、只能靠手工验证**的风险点。 用法:日常使用时遇到异常表现,先来本文档搜关键词。确认命中后按「证据」栏定位,确认是同一个问题再修。 新增条目请追加到对应分区末尾,不要重排已有条目。 --- ## 一、已确认的业务逻辑缺陷 这些是读代码时确认存在的真实缺陷,与迁移无关(迁移前就存在),但迁移过程中被注意到。修它们属于逻辑改动,需单独开分支。 ### 1. ~~ModelSelector 的 computed 里有副作用~~ — 已修(2026-10-19) - **原现象**:切换模型时 provider 选择偶尔「自己跳」,或 `customProvider` 状态被莫名改写 - **位置**:`packages/client/src/components/layout/ModelSelector.vue`,`providerOptions` computed 的 getter - **原证据**:computed 的 getter 内部给 `customProvider.value` 赋值。computed 应当是纯读。副作用是:任何其它 computed 或渲染逻辑读到 `providerOptions`,都会顺带改写 `customProvider` - **修法**:把赋值移到 `watch` 或显式的 setter 里 - **实际改动**:getter 恢复成纯读(只返回 `activeModelGroups` 映射出的 options), 同步改由 `watch(() => appStore.selectedProvider, ...)` 承担。 `openModal()` 里原有的那次赋值保留 —— watch 是懒的,不在首帧触发。 - **回归测试**:`tests/client/model-selector-provider-sync.test.ts` (断言 getter 无赋值、watch 挂在 `selectedProvider` 而非 `providerOptions` 上、 `openModal` 仍初始化) ### 2. ~~ProfileSelector 把 i18n key 当文案用~~ — 已核实为误报,无需修 - **原记录现象**:某些运行时状态提示里显示原始 key(如 `profiles.runtime.checking`)而不是中文/英文文案 - **位置**:`packages/client/src/components/layout/ProfileSelector.vue`,`gatewayStatusText` / `bridgeStatusText` - **核实结论(2026-10-19)**:**该缺陷不存在**。三点证据: 1. `t` 来自 `useI18n()`(`:20`),`t('profiles.runtime.checking')` 返回的是 **已翻译的文案**,不是 key 本身。不存在「`t()` 的结果被当消息正文」的问题 —— 那正是 `t()` 的预期用法。 2. 组件内 33 处 `t()` 调用逐条比对 `zh.ts:1478-1510`,`avatar.*` 与 `runtime.*` 全部 key 齐全且中英双语都有对应条目,无缺失。 3. 全项目 grep `message.(warning|error|success|info|normal)\('[a-z]...')` **零匹配** —— 没有裸传 key 字符串的调用点。 - **原记录为何误判**:原条目自己给出的「修法」与「证据」是同一句话 (都是 `message.warning(t('profiles.runtime.checking'))`),说明写条目时 把「`t()` 已经包了一层」当成了「少包了一层」。 - **若仍复现**:不要按原条目改代码。先确认复现路径,再查该路径上是否有 **另一处**未走 `t()` 的提示,或该 key 所属的 profile 名是否为空导致 `t(key, { name })` 插值异常。 ### 3. ~~McpManagerView 的 `_autoRetryCount` 赋值可能静默失效~~ — 已核实为误报,无需修 - **原现象**:MCP 失败后点「重试」,自动重试计数似乎没有正确归零 - **原位置**:`packages/client/src/views/hermes/McpManagerView.vue`,`let _autoRetryCount` - **原记录**:在 header 按钮的内联表达式 `@click="_autoRetryCount = 0; loadServers()"` 里被重置。 `