feat(quota): Moonshot Open Platform balance and TPD lock for custom nodes (#12590)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
This commit is contained in:
Bob.Hou
2026-09-03 11:47:50 -04:00
committed by GitHub
parent a47d2e521e
commit 831ea040c3
121 changed files with 1626 additions and 247 deletions

View File

@@ -91,6 +91,14 @@ const QUOTA_PATTERNS: ReadonlyArray<RegExp> = [
// Trailing punctuation/whitespace before the closing quote is tolerated
// because real API responses may include a period or trailing space.
/"error"\s*:\s*"usage limit reached[.\s]*"/i,
// Moonshot Open Platform organization TPD (tokens-per-day). Live body:
// "request reached organization TPD rate limit, current: N, limit: M".
// Do not use a bare /TPD/ — too wide. Limit is read from the body, never
// hardcoded (Tier0=1.5M, Tier1+=unlimited).
/organization TPD rate limit/i,
/\bTPD rate limit\b/i,
/insufficient balance/i,
];
/**
@@ -155,6 +163,9 @@ const TERMINAL_QUOTA_PATTERNS: ReadonlyArray<RegExp> = [
/individual quota reached/i,
/enable overages/i,
/daily free allocation/i,
/organization TPD rate limit/i,
/\bTPD rate limit\b/i,
/insufficient balance/i,
];
/**