Skip to content

[Bug] zcode login 写入的 defaultModelSelection 未按实际权益选择品牌:bigmodel 权益账号 headless 全部报 [1113] 余额不足 #857

Description

@txw778899-netizen

提交前确认 · Pre-submission checklist

  • 我已搜索过现有 issue,确认这不是重复 / I searched existing issues and confirmed this isn't a duplicate.
  • 我已阅读 CONTRIBUTING.md / I've read CONTRIBUTING.md.

问题类别 · Category

账号 / 登录 · Account / Login

涉及的 Agent 框架 · Agent framework

ZCode Agent(自研)

严重程度 · Severity

阻塞使用 · Blocking (无法使用核心功能 / core function unusable)

复现频率 · Reproducibility

必现 · Always

问题描述 · Description

环境:ZCode CLI 0.16.9(apps/zcode-cli@0.16.9,仓库 HEAD 29628c9),Windows 11。

账号事实:BigModel Individual Coding Plan 有效(桌面端经 account:bigmodel-individual-coding-plan 正常使用);Z.AI 侧无对应权益/余额。桌面端 ~/.zcode/v2/coding-plan-cache.json 明确标记 builtin:bigmodel-coding-plan: available、builtin:zai-coding-plan: coding_plan_not_entitled。

现象:zcode login(chat.z.ai OAuth)成功后,CLI 把 defaultModelSelection 写死为 Z.AI 侧的 account:zai-individual-coding-plan/GLM-5.3。此后所有 headless 全新会话都打到 https://api.z.ai/api/anthropic 并失败:

ProviderBusinessError: [1113][Insufficient balance or no resource package. Please recharge.]
  providerId: 'account:zai-individual-coding-plan'

同一账号在桌面端一切正常——权益在 bigmodel 侧,CLI 却只往 zai 侧发请求。

同时观察到:登录流程确实在 ~/.zcode/v2/provider_config.json 里为 account:bigmodel-individual-coding-plan 写入了 providerRules(modelOrder 含 GLM-5.3/GLM-5.3-Flash/GLM-5.3-FlashX),但没有为它写入任何 access 凭据——注册表里存在一个「不可选」的 Provider,resolveInitialModelSelection 静默跳过它,回退到写错的 zai 默认。两层机制各自正常,叠加结果必错。

根因(packages/bootstrap/src/auth-login.ts)

  • createOAuthClient(约 :366-373):providerId: options.providerId ?? "zai" —— 登录客户端固定 zai 品牌;

  • persistStandaloneCodingPlanConnection(约 :325-364):按登录品牌解析唯一 Provider 后,无条件持久化默认选择:

    await repository.saveConfiguredDefault({ providerId, modelId }); // :355

整条链路没有查询权益状态(哪个品牌真正持有 coding plan)。resolveStandaloneCodingPlanProvider(standalone-account-provider-runtime.ts:67-80)只按 family 从 Built-in Config 选模板,与权益无关。

修复方案

  1. 登录完成后查询双品牌 coding plan 权益(桌面端已有同款机制,见 ~/.zcode/v2/coding-plan-cache.json 的 entryStatus),从 available 的品牌中选择默认;都可用时 zai 优先(保持现行为),仅 bigmodel 可用时选 bigmodel;
  2. 或暴露 zcode login --provider zai|bigmodel,双品牌均有权益时交互询问;
  3. saveConfiguredDefault 前对所选组合做权益断言或轻量预检,避免把必然失败的组合持久化为默认值;
  4. 一致性:为 account:* Provider 写 providerRules 的同时确保 access 凭据就绪,否则跳过该规则,避免「注册了但永远不可选」的半状态。

相关反馈:#837(CLI 无头执行无法使用 bigmodel.cn Coding Plan)、#839([1113] 报错的使用问题视角)、#842(provider_config.json 校验降级)。本 issue 提供源码级根因与修复方案。

复现步骤 · Steps to reproduce

  1. 使用「bigmodel 侧有 Individual Coding Plan、zai 侧无权益」的账号执行 zcode login,完成 OAuth
  2. 检查 ~/.zcode/v2/provider_config.json:config.defaultModelSelection 为 {"providerId":"account:zai-individual-coding-plan","modelId":"GLM-5.3"}
  3. 执行 zcode -p "hi" → [1113] Insufficient balance or no resource package(api.z.ai)
  4. 同一账号桌面端正常

期望表现 · Expected behavior

登录完成后,defaultModelSelection 应指向实际持有权益的品牌侧 coding plan;被写入的每个账号 Provider 要么配齐 access 凭据,要么不写入。

实际表现 · Actual behavior

zcode -p "…" 每次报 [1113] Insufficient balance or no resource package(providerId: account:zai-individual-coding-plan);CLI 登录后完全不可用,与桌面端同账号行为不一致。

ZCode 版本 · ZCode version

3.14.3(apps/zcode-cli 0.16.9)

设备 / 系统 / 浏览器 · Device / OS / Browser

Windows 11 Pro 10.0.22631 x64

截图 / 录屏 / 日志 · Screenshots / Recordings / Logs

相关:#837、#839、#842。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions