Repository navigation
Quota probe for OpenCode Go is gated on the literal provider name, so additional Go providers (multi-account setups) show no quota #1924
Description
Client or integration
OpenCodex dashboard
Area
Provider adapter
Summary
When multiple providers point at the canonical OpenCode Go base URL (https://opencode.ai/zen/go/v1) — the natural setup for balancing several Go subscriptions via combos — only the provider literally named opencode-go shows the rate-limit panel (5h / weekly / 30d). The sibling providers show no quota in the dashboard, and ocx provider quota --refresh --json returns no report rows for them. Expected: every key-auth provider on the canonical Go base URL reports quota.
Root cause: src/providers/quota.ts L2087 gates the probe on the provider name:
if ((provider.authMode ?? "key") === "key" && name === "opencode-go") {
return fetchOpenCodeGoQuota(name, provider);
}The Kimi branch just above (L2075) already uses the canonical-base-URL pattern instead, and fetchOpenCodeGoQuota itself re-validates isCanonicalOpenCodeGoBaseUrl(config.baseUrl) (L487), so the name check is both too narrow and redundant.
Proposed fix (verified locally on v2.14.0 — report rows went from 1 to 5, dashboard renders rate-limit bars for every sibling provider):
- if ((provider.authMode ?? "key") === "key" && name === "opencode-go") {
+ if ((provider.authMode ?? "key") === "key" && isCanonicalOpenCodeGoBaseUrl(provider.baseUrl)) {
return fetchOpenCodeGoQuota(name, provider);
}Safe against key leakage to non-canonical hosts because fetchOpenCodeGoQuota still checks the canonical URL before sending the bearer key.
Reproduction
ocx provider add opencode-go --api-key sk-AAA(registry preset)ocx provider add opencode-go-2 --adapter openai-chat --base-url https://opencode.ai/zen/go/v1 --api-key sk-BBBocx provider quota --refresh --json- Only one
"provider": "opencode-go"report is returned; the dashboard overview page foropencode-go-2has no rate-limit section.
Version
v2.14.0 (repro); the gate is unchanged on current main as of 2026-08-17 (L2087)
Operating system
macOS (Darwin 25.5)
Provider and model
opencode-go (any model; the quota probe is model-independent)
Logs or error output
ocx provider quota --refresh --json before the fix returns a single opencode-go report row; after the one-line change it returns all five (opencode-go, opencode-go-2 … opencode-go-5), each with fiveHourPercent / weeklyPercent / monthlyPercent populated from https://opencode.ai/zen/go/v1/usage.
Screenshots and supporting files
No response
Redacted configuration
Providers: opencode-go (registry preset) plus opencode-go-2..5, all adapter: openai-chat, baseUrl: https://opencode.ai/zen/go/v1, authMode: key, one API key each. Keys redacted.
Checks
- I searched existing issues and documentation.
- I removed secrets, tokens, account details, request credentials, and personal data.
Activity
github-actions commentedon Aug 17, 2026
Issue reopened
The report now contains the information required by the automated check. Thanks for updating it.
yzxcj797 commentedon Aug 18, 2026
One-line fix along your verified diff, plus regression tests:
isCanonicalOpenCodeGoBaseUrl(provider.baseUrl)(matching the Kimmi/A6api/CommandCode branches just above) instead of the literal provider name — every key-auth provider on the canonical Go base URL gets a report, and the bearer key still never leaves for non-canonical hosts becausefetchOpenCodeGoQuotare-validates the base URL before fetching;tests/opencode-go-quota.test.ts: the exact repro (a sibling provider namedopencode-go-2on the canonical URL now reports quota alongsideopencode-go— previously only the literal name produced a row), and a non-canonical base URL never probesopencode.aiwith the key.Ingwannu commentedon Aug 18, 2026
Confirmed against current
dev: the literal provider-name gate is still present and is narrower than the canonical destination check already enforced inside the probe. Draft PR #2027 now targetsdev; keeping this issue open until that exact-head implementation and CI are reviewed.lidge-jun commentedon Aug 19, 2026
리뷰 · 우선순위 46 / 80
OpenCode Go 키를 여러 프로바이더로 나눠 콤보로 묶으면, 이름이 정확히 opencode-go 인 행만 쿼터 패널이 나온다. 형제 프로바이더는 대시보드와 ocx provider quota 에 행이 없다. 옵트인 멀티키 호환이라 46이다. 기본 native 경로가 아니다.
src/providers/quota.ts 가 키 모드에서 name === opencode-go 일 때만 fetchOpenCodeGoQuota 를 부른다. 그 함수는 이미 isCanonicalOpenCodeGoBaseUrl 로 목적지를 다시 검사한다. 이름 게이트는 좁고 중복이다. 바로 아래 a6api 분기는 이름 대신 canonical baseUrl 을 본다.
OPENCODE_GO_BASE_URL 은 https://opencode.ai/zen/go/v1 이다. 복제 프로바이더가 이 URL과 키 모드면 프로브해야 한다. 다른 호스트에 같은 이름을 쓰는 커스텀은 fetch 함수의 canonical 가드가 키를 안 보낸다.
이 구멍이 #2060 의 Go 풀 요청을 가로막는다. 쿼터를 못 보면 소진 전환도 못 한다. 콤보 라운드로빈은 멤버를 돌려도 대시보드 숫자는 안 나온다.
해결방안
이름 비교를 isCanonicalOpenCodeGoBaseUrl(provider.baseUrl) 로 바꾼다. fetchOpenCodeGoQuota 는 그대로 둔다. 키 모드만 연다. 회귀는 같은 Go URL을 쓰는 복제 프로바이더마다 쿼터 행이 나오는 것, 다른 URL은 프로브하지 않는 것이다.
이 댓글은 grok-bot이 작성했습니다
lidge-jun commentedon Aug 19, 2026
리뷰 · 우선순위 64 / 80 · 유지
점수 정정임. 46 → 64. Go 쿼타 프로브가 이름
opencode-go일 때만 돌아서,opencode-go-2같은 형제 키는 대시보드/CLI에 안 나옴.fetchOpenCodeGoQuota는 이미 URL 검사함. 앞 게이트만 이름이라 잘림.유지함. 프로브(#1545/#2057)는
dev에 있음. 이건 그 표시를 키 여러 개로 여는 한 줄. #2060 로테이션이랑 이웃이지만 로테이션 전에 이게 있어야 함.해결방안:
name === "opencode-go"를isCanonicalOpenCodeGoBaseUrl(provider.baseUrl)로. draft #2027이 그 방향. 키는 캐논 URL일 때만 나감.이 댓글은 grok-bot이 작성했습니다
fix(quota): identify OpenCode Go by where it routes, not what it is n…
fix(quota): identify OpenCode Go by where it routes, not what it is n…
lidge-jun commentedon Aug 20, 2026
Fixed on
devby #2164, merged as 31750b0.Verified present on the branch rather than assumed:
git log origin/devshows the merge commit above. These PRs targetdevrather thanmain, so GitHub does not auto-close the linked issue — this closure is manual.It ships in the next release cut from
dev. Reopen if you still see it after updating.feat(deploy): add Railway/Dokploy container config; fix ClinePass quo…
fix(quota): identify OpenCode Go by where it routes, not what it is n…
fix(quota): identify OpenCode Go by where it routes, not what it is n…