Skip to content

修复 Qoder CN 的 PAT 账户状态和配额刷新问题 - #513

Open
mcxinyu wants to merge 1 commit into
caigee-cmd:mainfrom
mcxinyu:m1/fix-qoder-cn-card-info
Open

mcxinyu wants to merge 1 commit into
caigee-cmd:mainfrom
mcxinyu:m1/fix-qoder-cn-card-info

Conversation

@mcxinyu

@mcxinyu mcxinyu commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

问题

Qoder PAT(令牌)账户显示过时的卡片数据:状态从未更新,积分一直处于冻结状态,凭证类型显示为“无”而非“PAT”。这意味着“刷新积分”操作没有任何可见效果,后台扫描无法显示实际配额,导出时也不携带便携式PAT有效载荷。

解决方案

将PAT支持的Qoder账户视为浏览器登录账户,以便进行准备和配额管理:

  • 在Qoder适配器上注册一个Prober,以便进程中的PAT账户能够报告实时会话健康状况和网关UID,而不是跳转到不存在的/health工作线程。
  • 在手动“刷新信用”时,强制执行同步的上游 /api/v2/quota/usage 调用;错误会显示在控制台,而不是留下一个标记为“现在”的过时数字。
  • 保持缓存快照的FetchedAt作为真实的上游时间戳,而不是每次读取时都进行重写。
  • 使用与浏览器/工作线程路径相同的规则合并配额桶——不可用的组织包不再增加总体余额。
  • 在成功进行PAT登录后,记录auth_type = pat,以便卡片显示正确的类型,并确保导出/导入功能正常。
  • 通过便携式qoder-pat-v1载荷导出支持PAT的Qoder账户,而不是使用传统的CLI blob。
  • 通过通用配额路径映射Qoder插件/资源包的详细信息,以便持久化快照与浏览器登录时的细分行保持一致。
  • 将Qoder网关401/403视为需要登录的情况,而非一般性中断,因此卡片上显示“重新登录”。

这涉及什么

  • internal/providers/qoder/adapter.go — 注册探测器(Prober);探测器针对PAT账户调用网桥(Bridge),针对旧版调用工作进程URL;配额(Quota)始终强制进行上游读取。
  • internal/providers/qoder/bridge.go — 将EnsureAccountStatus拆分为即发即弃版本和返回错误的RefreshAccountStatus版本;保留真实的quotaFetchedAt时间戳。
  • internal/providers/interfaces.go — 在QuotaInfo中添加HasAddOn/ResourcePackage*字段。
  • internal/control/login.go — 在PAT登录后调用SetCredentialAuthType。
  • internal/control/accounts.go — 通过其便携式凭证载荷导出PAT账户。
  • internal/accounts/store.go + internal/store/store.go — 新增SetCredentialAuthType方法。
  • internal/runtime/manager_probe.go — 将 forceQuota 参数传递给进程内分支;处理认证错误。
  • internal/runtime/manager_quota.go — 提取了 quotaSnapshotFromInfo,以便在通用路径下保留 Qoder 存储桶的详细信息。
  • internal/runtime/manager_maintenance.go — 在签入后,在不通过共享配额获取门的情况下,刷新进程中的Qoder配额。
  • internal/runtime/manager_accounts.go — 仅当快照实际存在时才保存配额。
  • 对adapter_test.go、bridge_quota_test.go、duty_services_test.go、providers_test.go等文件的测试覆盖了新行为。

测试

  • 为以下功能添加了单元测试:PAT认证类型记录、通过有效载荷导出PAT、探测器使用网关UID报告进程内会话就绪状态、强制配额刷新以暴露错误、真实FetchedAt保留、不可用资源包排除、同步强制配额刷新、配额失败时错误暴露,以及通过通用路径实现Qoder故障分解持久化。
  • 更新了现有的Qoder签入测试和遗留的PAT测试,以适应新的Prober注册和基于有效载荷的导出。

清单

  • 变更已通过测试(新增测试和更新测试)
  • 如有可能,在实时Qoder CN PAT账户上进行手动质量保证(QA)测试
  • 编写了更新日志条目(添加了changelog/unreleased/qoder-token-account-card-refresh.md)
  • 现有浏览器登录的Qoder账户无重大变更
  • 待办事项:验证带有组织资源包的PAT账户是否显示正确的可支出余额

- 为 PAT 账号注册 Prober,使运行时能够通过内进程探针刷新就绪状态和额度
- PAT 登录成功后记录 auth_type="pat",使卡片和导出能正确识别凭据类型
- QuotaSnapshot 保留真实的 quotaFetchedAt 时间戳,不再每次读取都覆写为"now"
- 强制刷新时同步拉取 /api/v2/quota/usage,失败返回错误而非静默返回旧值
- 不可用的组织资源包不再计入headline总额,与浏览器路径规则保持一致
- 导出时对 qoder-pat-v1 格式走 payload 分支,不再尝试读取已废弃的 CLI blob
- 探针遇到网关 401/403 时将账号标记为 login_required,卡片显示"重新登录"
- 补充 adapter、bridge、runtime 相关测试覆盖上述变更

@caigee-cmd caigee-cmd left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved.

PAT-backed Qoder accounts now share the browser-login probe and quota path: the registered Prober refreshes the in-process session, a manual refresh hits /api/v2/quota/usage and surfaces failures, and the snapshot keeps the real fetch time plus the add-on / resource-package breakdown. Auth type pat is recorded so the card and qoder-pat-v1 export match. Worker-URL accounts still stay on /health.

Checked the diff against current main (clean merge, the 19-file change only) and ran go test for internal/providers/qoder, internal/runtime, internal/control, and internal/store. CI is green. Live PAT QA is still unchecked, as noted in the PR.

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