refactor(infra): split provider usage
This commit is contained in:
61
src/infra/provider-usage.shared.ts
Normal file
61
src/infra/provider-usage.shared.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
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<UsageProviderId, string> = {
|
||||
anthropic: "Claude",
|
||||
"github-copilot": "Copilot",
|
||||
"google-gemini-cli": "Gemini",
|
||||
"google-antigravity": "Antigravity",
|
||||
"openai-codex": "Codex",
|
||||
zai: "z.ai",
|
||||
};
|
||||
|
||||
export const usageProviders: UsageProviderId[] = [
|
||||
"anthropic",
|
||||
"github-copilot",
|
||||
"google-gemini-cli",
|
||||
"google-antigravity",
|
||||
"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 <T>(
|
||||
work: Promise<T>,
|
||||
ms: number,
|
||||
fallback: T,
|
||||
): Promise<T> => {
|
||||
let timeout: NodeJS.Timeout | undefined;
|
||||
try {
|
||||
return await Promise.race([
|
||||
work,
|
||||
new Promise<T>((resolve) => {
|
||||
timeout = setTimeout(() => resolve(fallback), ms);
|
||||
}),
|
||||
]);
|
||||
} finally {
|
||||
if (timeout) clearTimeout(timeout);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user