背景
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"))对上。
复现步骤
- 在 OpenCode 里连接 Moonshot(国际站
moonshotai 和/或中国站 moonshotai-cn)
- V2 下打开
/cache-balance,选中 Moonshot
- 观察余额
期望行为
两个站点的余额各自可查,币种分别为 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
背景
balance-providers.ts目前只有一条 Moonshot 适配器(id: "moonshot"),余额端点是国内站https://api.moonshot.cn/v1/users/me/balance。而 OpenCode 的 provider 目录(models.dev)把 Moonshot 拆成了两个独立 provider:
moonshotaihttps://api.moonshot.ai/v1moonshotai-cnhttps://api.moonshot.cn/v1插件里没有
moonshotai这个 id,两边只能靠前缀匹配(startsWith("moonshot"))对上。复现步骤
moonshotai和/或中国站moonshotai-cn)/cache-balance,选中 Moonshot期望行为
两个站点的余额各自可查,币种分别为 USD(国际站)/ CNY(中国站),凭据按站点一一对应。
实际行为
provider.list()的顺序决定,可能读到国际站 key却打到国内站端点,返回 401
根因
moonshot)与 OpenCode provider id(moonshotai/moonshotai-cn)不一致,靠前缀匹配碰运气
建议方向
moonshotai(国际站,USD)与moonshotai-cn(中国站,CNY),id 直接对齐OpenCode provider id,消除前缀匹配
matchBalanceProvider的自动切换匹配需能区分两者balance-providers.ts,两端保持一致环境