## 背景 `balance-providers.ts` 目前只有一条 Moonshot 适配器(`id: "moonshot"`),余额端点是国内站 `https://api.moonshot.cn/v1/users/me/balance`。 而 OpenCode 的 provider 目录(models.dev)把 Moonshot 拆成了两个独立 provider: | provider id | 站点 | API | | --- | --- | --- | | `moonshotai` | 国际站 | `https://api.moonshot.ai/v1` | | `moonshotai-cn` | 中国站 | `https://api.moonshot.cn/v1` | 插件里没有 `moonshotai` 这个 id,两边只能靠前缀匹配(`startsWith("moonshot")`)对上。 ## 复现步骤 1. 在 OpenCode 里连接 Moonshot(国际站 `moonshotai` 和/或中国站 `moonshotai-cn`) 2. V2 下打开 `/cache-balance`,选中 Moonshot 3. 观察余额 ## 期望行为 两个站点的余额各自可查,币种分别为 USD(国际站)/ CNY(中国站),凭据按站点一一对应。 ## 实际行为 - 只配国际站时:显示「未配置」(插件端点是国内站,id 也对不上) - 两个都配时:前缀匹配命中的 provider 由 `provider.list()` 的顺序决定,可能读到国际站 key 却打到国内站端点,返回 401 - 国际站余额无论如何都查不到 ## 根因 - 单条适配器无法表达「同一供应商的两个站点」 - 余额 provider id(`moonshot`)与 OpenCode provider id(`moonshotai` / `moonshotai-cn`)不一致, 靠前缀匹配碰运气 ## 建议方向 - 拆成两条:`moonshotai`(国际站,USD)与 `moonshotai-cn`(中国站,CNY),id 直接对齐 OpenCode provider id,消除前缀匹配 - `matchBalanceProvider` 的自动切换匹配需能区分两者 - V1 / V2 共用 `balance-providers.ts`,两端保持一致 ## 环境 - OS: Windows 11 - opencode: 2.0.14 - opencode-visual-cache: 1.7.1 - Node: v22.18.0
Activity