Skip to content

feat(account): 新增账号测试功能,测试该账号的文字/图片模型是否可用,与凭证可用性测试 - #452

Open
agermel wants to merge 2 commits into
qxcnm:mainfrom
agermel:feature/select
Open

feat(account): 新增账号测试功能,测试该账号的文字/图片模型是否可用,与凭证可用性测试#452
agermel wants to merge 2 commits into
qxcnm:mainfrom
agermel:feature/select

Conversation

@agermel

@agermel agermel commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

RT
RomeoGroeger696709@outlook com

变更摘要

  • 新增「测试账号」入口:对账号发一次真实上游请求,验证其使用文字/图片模型的凭据是否可用,通过 SSE / Tauri 事件把进度与结果实时回传到弹窗。
  • 图片测试走 image_generation 工具(顶层文字模型 + gpt-image-2 工具),避免把 gpt-image-2 当顶层主模型直连被上游以「ChatGPT 账号不支持该模型」拒绝。
  • 依据所选模型能力(supports_image_generation)自动修正测试类型,并把 kind 字段端到端打通(修复 Tauri 命令静默丢弃 kind)。
  • 依据结果更新账号状态:401/403 → 不可用,429 → 限流,成功 → 恢复 active(手动 disabled/inactive 不自动恢复)。

改动范围

  • Frontend
  • Desktop / Tauri
  • Service
  • Gateway / Protocol Adapter
  • Docs / Governance
  • Workflow / Release

主要文件

  • crates/service/src/account/account_test.rs(新增)— 测试核心:发起请求、解析 SSE、状态回写、取消、脱敏
  • crates/service/src/http/account_test_events.rs(新增)— 账号测试事件的 SSE 端点(tiny_http + axum 双实现)
  • crates/service/src/account/account_status.rs — 测试结果 → 账号状态(unavailable / limited / restore active)
  • crates/service/src/gateway/core/runtime_config.rs — 账号测试代理解析 + 带超时的上游客户端
  • crates/service/src/models_v2/mod.rssupports_image_generation() 能力判定
  • apps/src/components/modals/account-test-modal.tsx(新增)— 测试弹窗(分组下拉 + 实时终端 + 图片预览)
  • apps/src/lib/api/account-test-events.ts(新增)— Tauri / SSE 事件监听
  • apps/src/components/ui/select.tsx — 下拉锚定默认 alignItemWithTrigger=false

验证

  • pnpm -C apps run test
  • pnpm -C apps run build
  • pnpm -C apps run test:ui
  • cargo test --workspace
  • 其他本地验证已说明

已执行的实际验证:

cargo check -p codexmanager-service          # 通过
cargo check (apps/src-tauri)                 # 通过

未执行的验证与原因:

  • cargo test --workspace:未执行(account_test.rs 内的单元测试尚未跑,提交前建议补跑 cargo test -p codexmanager-service)。
  • 前端 test / build / test:ui:未执行,需在提交前跑一遍确认无类型/构建回归。

风险与影响面

  • select.tsx 的 alignItemWithTrigger=false 是全局默认改动,影响所有 Select 组件,需回归检查其它下拉(账号管理、模型管理等)无视觉/定位回退。
  • 测试会发真实上游请求,会消耗账号配额/token。
  • 测试成功会自动把「自动失败态(unavailable/limited/banned)」账号恢复为 active——这是有意的副作用,但会影响账号池可用性,需确认符合预期。
  • 主网关路径另有 5 处既有的代理地址回显错误串(runtime_config.rs 的 *_upstream_client_for_account / websocket_proxy_url_for_account)本次未一并修复,建议单独开提交处理。

备注

  • 提交前请确认未包含敏感 token、cookie、API key(本次错误信息均已脱敏,日志不打 token / 代理地址)。
  • 仓库根下还有未跟踪文件 docs/zh-CN/report/账号测试UX缺口报告.md,需决定是否随本 PR 提交。

新增「测试账号」入口:对账号发一次真实上游请求,验证其使用文字/图片模型的凭据是否可用,通过 SSE / Tauri 事件把进度与结果实时回传到弹窗。

- 图片测试走 image_generation 工具(顶层文字模型 + gpt-image-2 工具),而不是把 gpt-image-2 当顶层主模型直连——后者会被上游以「ChatGPT 账号 不支持该模型」拒绝。
- 依据所选模型的能力(supports_image_generation)自动修正测试类型,并把kind 字段端到端打通(修复 Tauri 命令静默丢弃 kind 的问题)。
- 依据测试结果更新账号状态:401/403 → 不可用,429 → 限流,成功 → 恢复active(手动 disabled/inactive 不自动恢复)。
@qxcnm

qxcnm commented Sep 2, 2026

Copy link
Copy Markdown
Owner

审查结论:暂不合并。当前 Rust CI 在 cargo fmt --all -- --check 失败,本地合并当前主线后也可复现;此外 Web/service 模式缺少 /api/events/account-test 的 SSE 注册与代理,RPC 虽能启动测试,但弹窗收不到事件并会卡在运行中。还有两项现有功能风险:PR 把 SelectContent 的全局默认对齐行为改掉,影响约 55 个既有 Select;账号测试订阅在拿到 testId 前会接受任意广播事件,并发测试可能串流。缓存合并态专项测试已通过,但不消除上述 blocker。请先修复 rustfmt、补齐 codexmanager-web SSE 代理及测试、按 testId 隔离事件,并把 Select 改动收窄到新弹窗后再复审。

- rustfmt:cargo fmt --all 修复超长行并重排模块声明与 use 顺序,恢复 CI 通过
- web SSE:codexmanager-web 新增 /api/events/account-test 路由与转发代理,
  补齐服务端事件通路,弹窗不再因收不到事件卡在「运行中」
- testId 隔离:前端在订阅前本地生成并持有 testId(crypto.randomUUID 兜底),
  后端 start_account_test 优先采用客户端 testId(未提供回退自增 ID),
  消除「订阅到拿到 testId」之间的并发串流窗口
- Select 收窄:恢复 SelectContent 全局默认对齐行为,仅测试弹窗内两处
  显式 alignItemWithTrigger={false},避免影响既有约 55 个 Select
- 新增 codexmanager-web 的 account-test SSE 代理测试
@agermel

agermel commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

@qxcnm fixed 🫡

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