Skip to content

fix(kbrain): 旧供应商导入被拒后不再每次启动重试,并在设置页给出可关闭的提示 - #950

Merged
xiaozhou26 merged 4 commits into
Stack-Cairn:v2-kbrianfrom
AlphaCatMeow:fix-kbrain-legacy-provider-import-retry
Oct 10, 2026
Merged

xiaozhou26 merged 4 commits into
Stack-Cairn:v2-kbrianfrom
AlphaCatMeow:fix-kbrain-legacy-provider-import-retry

Conversation

@AlphaCatMeow

Copy link
Copy Markdown
Contributor

Closes #946

问题

K-brain 会拒收旧供应商:如果它和已导入的供应商有同名模型,但模型参数不一致,就会被拒(根因见 Stack-Cairn/K-brain#21)。前端以前每次启动都会把这些供应商重新提交一遍:先整批提交,收到 400,再逐个重试、逐个跳过,信息全写在控制台里。所以用户每次启动都会多出几次请求和一串告警,却不知道这几个供应商的模型在 v2 里用不了。

改动

  • 新增 crates/agent-gui/src/lib/settings/legacyProviderImport.ts
    • 按供应商 id 记下被拒原因和配置指纹。指纹没变就不再提交;用户改了这个供应商的配置,指纹变了,才会重新尝试。
    • 支持永久关闭提示,按「供应商 id + 指纹」记录;点「重试导入」不会让已关闭的提示重新出现。
  • lib/settings/storage.ts:导入前按记录过滤,导入后回写记录并发布快照。
  • 设置页供应商区块顶部新增提示条:
    • 列出没能导入的供应商。名字后面带短 id,用来和同名但已导入的记录区分。
    • 写明原因,并提供「重试导入」。
    • 右上角的关闭按钮会先弹确认框,写明关闭后不再提示、操作不可撤销。默认焦点在「取消」。
  • 新增 test/providers/kbrain-legacy-provider-import-retry.test.mjs,8 条用例。

验证

  • pnpm typecheck 通过;新增单测 8/8 通过。
  • 本地调试客户端:
    • 第一次启动,记下 4 个被拒的供应商。
    • 刷新页面后,控制台里供应商相关的告警从一串降到 0 条。
    • 提示条、确认弹框和关闭后的效果都已人工验收。

截图

提示条:

提示条

关闭前的确认弹框:

确认弹框

说明

这些供应商还是导入不了,要等 K-brain 那边修了才行(Stack-Cairn/K-brain#21)。这个 PR 只处理前端的表现:不再反复重试,给出可见提示,用户可以选择忽略。

K-brain 会拒绝与已导入供应商同名但模型元数据不一致的旧供应商。此前前端每次启动
都会重新提交这些供应商:一次整批 400、随后逐个重试并跳过,全部只写到控制台,
用户看到的现象是设置加载变慢、控制台刷告警,而那几个供应商的模型在 v2 里其实不可用。

- 新增 `lib/settings/legacyProviderImport.ts`:按供应商 id 记录被拒原因与配置指纹,
  指纹未变则不再重试;用户改动供应商配置后指纹变化,自动重新尝试。
- `lib/settings/storage.ts`:导入前按记录过滤,导入后回写记录并发布快照;
  新增 `retryRejectedLegacyProviderImport()` 供手动重试。
- 设置页供应商区块顶部新增提示条:列出未能导入的供应商(名字 + 短 id)与原因,
  并提供「重试导入」入口。
- 新增单测覆盖指纹稳定性、改动后重试、记录裁剪与损坏数据的兜底。

Closes Stack-Cairn#946
- 提示条右上角新增关闭按钮;点击后弹出确认框,说明关闭后不再提示、操作不可撤销,
  默认焦点在「取消」。
- 关闭按「供应商 id + 配置指纹」永久记录到本地;「重试导入」不会让已关闭的提示重新出现。
- 用户之后修改了该供应商的配置,指纹变化,会作为新记录重新提示。
- 补充两条单测。

Refs Stack-Cairn#946
- 共享设置页同时被桌面端和 Gateway WebUI 编译,WebUI 的 SettingsPageProps 也补上三个可选字段和
  SettingsRejectedLegacyProvider 类型(WebUI 不传,提示条不会显示)。
- App.tsx 与两份翻译文件按 biome 规则重排。

Refs Stack-Cairn#946
@AlphaCatMeow AlphaCatMeow reopened this Oct 9, 2026
@xiaozhou26

Copy link
Copy Markdown
Contributor

复核时补修 48a5b0f:仅缓存明确的 payload 拒绝(400/409/413/422),401/403/408/429 等可恢复失败继续允许重试;拒绝缓存和关闭状态按后端存储 scope 隔离,升级时不复用旧的无 scope 拒绝缓存。增加可恢复状态、旧缓存升级和后端隔离回归测试。与 #951/#952 联合验证:GUI 全套 3035 passed / 1 skipped;GUI、共享 UI、WebUI 类型检查通过;Chrome 1440/390 宽度隔离组件测试验证提示、取消、重试、关闭持久化,不接触真实用户数据。等待新 head CI 后合并。

@xiaozhou26
xiaozhou26 merged commit 970937a into Stack-Cairn:v2-kbrian Oct 10, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants