From 84f2a25218a773626b6f8745b2dbec8a84029d45 Mon Sep 17 00:00:00 2001 From: Gabriel Couto Date: Tue, 27 Jan 2026 10:49:04 -0300 Subject: [PATCH] feat: add ANTHROPIC_BASE_URL environment variable support --- scripts/debug-claude-usage.ts | 4 +++- src/agents/models-config.providers.ts | 18 ++++++++++++++++++ src/infra/provider-usage.fetch.claude.ts | 4 +++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/scripts/debug-claude-usage.ts b/scripts/debug-claude-usage.ts index 27cd03f4c..e0c9e25e6 100644 --- a/scripts/debug-claude-usage.ts +++ b/scripts/debug-claude-usage.ts @@ -67,7 +67,9 @@ const pickAnthropicTokens = (store: { }; const fetchAnthropicOAuthUsage = async (token: string) => { - const res = await fetch("https://api.anthropic.com/api/oauth/usage", { + const baseUrl = process.env.ANTHROPIC_BASE_URL?.trim() || "https://api.anthropic.com"; + const url = `${baseUrl}/api/oauth/usage`; + const res = await fetch(url, { headers: { Authorization: `Bearer ${token}`, Accept: "application/json", diff --git a/src/agents/models-config.providers.ts b/src/agents/models-config.providers.ts index 996f09dd0..e49fb4894 100644 --- a/src/agents/models-config.providers.ts +++ b/src/agents/models-config.providers.ts @@ -235,6 +235,15 @@ export function normalizeProviders(params: { normalizedProvider = googleNormalized; } + // Apply ANTHROPIC_BASE_URL environment variable override + if (normalizedKey === "anthropic") { + const baseUrl = process.env.ANTHROPIC_BASE_URL?.trim(); + if (baseUrl && normalizedProvider.baseUrl !== baseUrl) { + mutated = true; + normalizedProvider = { ...normalizedProvider, baseUrl }; + } + } + next[key] = normalizedProvider; } @@ -367,6 +376,15 @@ export async function resolveImplicitProviders(params: { allowKeychainPrompt: false, }); + // Add Anthropic provider if ANTHROPIC_BASE_URL is set + const anthropicBaseUrl = process.env.ANTHROPIC_BASE_URL?.trim(); + if (anthropicBaseUrl) { + providers.anthropic = { + baseUrl: anthropicBaseUrl, + models: [], + }; + } + const minimaxKey = resolveEnvApiKeyVarName("minimax") ?? resolveApiKeyFromProfiles({ provider: "minimax", store: authStore }); diff --git a/src/infra/provider-usage.fetch.claude.ts b/src/infra/provider-usage.fetch.claude.ts index 3e6dd2752..2b893d62c 100644 --- a/src/infra/provider-usage.fetch.claude.ts +++ b/src/infra/provider-usage.fetch.claude.ts @@ -99,8 +99,10 @@ export async function fetchClaudeUsage( timeoutMs: number, fetchFn: typeof fetch, ): Promise { + const baseUrl = process.env.ANTHROPIC_BASE_URL?.trim() || "https://api.anthropic.com"; + const url = `${baseUrl}/api/oauth/usage`; const res = await fetchJson( - "https://api.anthropic.com/api/oauth/usage", + url, { headers: { Authorization: `Bearer ${token}`,