问题
CLI 会话启动后,quota(剩余额度)不会刷新。只有在启动新会话或执行 /model 命令时才会 fetch 一次 quota。会话中发消息不会触发 quota 更新。
分析
通过分析 qodercli 二进制(v1.0.33),发现以下代码:
refreshUserQuota() 是空实现(no-op):
async refreshAvailableCredits() {}
async refreshUserQuota() { return } // ← 应该 fetch API,但什么都没做
refreshUserQuotaIfStale() 逻辑正确,30 秒阈值:
async refreshUserQuotaIfStale(A = 30000) {
if (Date.now() - this.lastQuotaFetchTime > A)
return this.refreshUserQuota(); // 调了,但方法是空的
return this.lastRetrievedQuota;
}
每次 LLM 调用后确实会触发刷新检查:
// 在 generateContent 和 loggingStreamWrapper 中:
this.config.refreshUserQuotaIfStale()
.catch((g) => G.debug("quota refresh failed", g));
预期行为
refreshUserQuota() 应该调用 https://openapi.qoder.sh/api/v2/quota/usage API 获取最新 quota,更新 lastRetrievedQuota 和 lastQuotaFetchTime。这样每次 LLM 调用后(间隔 ≥30s)就会自动刷新 quota。
实际行为
- ✅ 会话启动时:fetch quota(正常,走独立代码路径)
- ✅ 执行
/model 命令时:fetch quota(正常,附带刷新)
- ❌ 每次 LLM 调用后:调了
refreshUserQuotaIfStale(),但 refreshUserQuota() 是 no-op,不 fetch
- ❌ 无定时刷新机制
影响
- 多窗口场景下,各窗口的 quota 显示不同(各会话启动时的快照)
- 长时间运行的会话,quota 数据过时
- 用户无法知道当前实际剩余额度
环境信息
- qodercli v1.0.33
- macOS (darwin, arm64)
- Bun runtime
问题
CLI 会话启动后,quota(剩余额度)不会刷新。只有在启动新会话或执行
/model命令时才会 fetch 一次 quota。会话中发消息不会触发 quota 更新。分析
通过分析 qodercli 二进制(v1.0.33),发现以下代码:
refreshUserQuota()是空实现(no-op):refreshUserQuotaIfStale()逻辑正确,30 秒阈值:每次 LLM 调用后确实会触发刷新检查:
预期行为
refreshUserQuota()应该调用https://openapi.qoder.sh/api/v2/quota/usageAPI 获取最新 quota,更新lastRetrievedQuota和lastQuotaFetchTime。这样每次 LLM 调用后(间隔 ≥30s)就会自动刷新 quota。实际行为
/model命令时:fetch quota(正常,附带刷新)refreshUserQuotaIfStale(),但refreshUserQuota()是 no-op,不 fetch影响
环境信息