feat: add Token Plan quota query for Kimi, Zhipu GLM, and MiniMax

Add a new "Token Plan" template type in the usage query panel that
natively queries quota/usage from Chinese coding plan providers
(Kimi For Coding, Zhipu GLM, MiniMax) without requiring custom scripts.

- Rust backend: new coding_plan service with provider-specific API
  queries (Kimi /v1/usages, Zhipu /api/monitor/usage/quota/limit,
  MiniMax /coding_plan/remains) normalized into UsageResult
- Frontend: Token Plan template in UsageScriptModal with auto-detection
  of provider based on ANTHROPIC_BASE_URL pattern matching
- Follows the same pattern as GitHub Copilot template (dedicated API
  path in queryProviderUsage, no JS script needed)
This commit is contained in:
Jason
2026-04-05 11:39:29 +08:00
parent 8d38f0ee4f
commit bfdac2a22a
16 changed files with 761 additions and 98 deletions
+5 -7
View File
@@ -343,9 +343,7 @@ export function ProviderCard({
</div>
</div>
<div
className="flex items-center ml-auto min-w-0 gap-3"
>
<div className="flex items-center ml-auto min-w-0 gap-3">
<div className="ml-auto">
<div className="flex items-center gap-1">
{isOfficial ? (
@@ -393,9 +391,7 @@ export function ProviderCard({
</div>
</div>
<div
className="flex items-center gap-1.5 flex-shrink-0 opacity-0 pointer-events-none group-hover:opacity-100 group-focus-within:opacity-100 group-hover:pointer-events-auto group-focus-within:pointer-events-auto transition-opacity duration-200"
>
<div className="flex items-center gap-1.5 flex-shrink-0 opacity-0 pointer-events-none group-hover:opacity-100 group-focus-within:opacity-100 group-hover:pointer-events-auto group-focus-within:pointer-events-auto transition-opacity duration-200">
<ProviderActions
appId={appId}
isCurrent={isCurrent}
@@ -406,7 +402,9 @@ export function ProviderCard({
onSwitch={() => onSwitch(provider)}
onEdit={() => onEdit(provider)}
onDuplicate={() => onDuplicate(provider)}
onTest={onTest && !isOfficial ? () => onTest(provider) : undefined}
onTest={
onTest && !isOfficial ? () => onTest(provider) : undefined
}
onConfigureUsage={
isOfficial ? undefined : () => onConfigureUsage(provider)
}