import { normalizeProviderId } from "../agents/model-selection.js"; import type { UsageProviderId } from "./provider-usage.types.js"; export const DEFAULT_TIMEOUT_MS = 5000; export const PROVIDER_LABELS: Record = { anthropic: "Claude", "github-copilot": "Copilot", "google-gemini-cli": "Gemini", "google-antigravity": "Antigravity", minimax: "MiniMax", "openai-codex": "Codex", zai: "z.ai", }; export const usageProviders: UsageProviderId[] = [ "anthropic", "github-copilot", "google-gemini-cli", "google-antigravity", "minimax", "openai-codex", "zai", ]; export function resolveUsageProviderId(provider?: string | null): UsageProviderId | undefined { if (!provider) return undefined; const normalized = normalizeProviderId(provider); return usageProviders.includes(normalized as UsageProviderId) ? (normalized as UsageProviderId) : undefined; } export const ignoredErrors = new Set([ "No credentials", "No token", "No API key", "Not logged in", "No auth", ]); export const clampPercent = (value: number) => Math.max(0, Math.min(100, Number.isFinite(value) ? value : 0)); export const withTimeout = async (work: Promise, ms: number, fallback: T): Promise => { let timeout: NodeJS.Timeout | undefined; try { return await Promise.race([ work, new Promise((resolve) => { timeout = setTimeout(() => resolve(fallback), ms); }), ]); } finally { if (timeout) clearTimeout(timeout); } };