From c66b859342d6b96dfa5bf85541822718e2a67a2e Mon Sep 17 00:00:00 2001 From: Juan Camilo Date: Thu, 2 Apr 2026 16:23:12 +0200 Subject: [PATCH] fix: provider-aware error messages and skip Anthropic key approval for 3P 1. errors.ts: Add getCustomOffSwitchMessage() that returns a provider-neutral message for 3P users instead of the hardcoded "Opus is experiencing high load, please use /model to switch to Sonnet" which is misleading for OpenAI/Gemini/Ollama users. The original constant is preserved for backward-compatible string matching in error handlers. 2. Onboarding.tsx: Skip the "approve API key" step when a 3P provider is active. Previously, having ANTHROPIC_API_KEY in the environment (e.g., from a previous Anthropic setup) triggered an irrelevant Anthropic key approval UI even when using Gemini or OpenAI. --- src/components/Onboarding.tsx | 2 +- src/services/api/errors.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/Onboarding.tsx b/src/components/Onboarding.tsx index fdd3027a..8fca79f1 100644 --- a/src/components/Onboarding.tsx +++ b/src/components/Onboarding.tsx @@ -99,7 +99,7 @@ export function Onboarding({ // Add API key step if needed // On homespace, ANTHROPIC_API_KEY is preserved in process.env for child // processes but ignored by Claude Code itself (see auth.ts). - if (!process.env.ANTHROPIC_API_KEY || isRunningOnHomespace()) { + if (!process.env.ANTHROPIC_API_KEY || isRunningOnHomespace() || !isAnthropicAuthEnabled()) { return ''; } const customApiKeyTruncated = normalizeApiKeyForConfig(process.env.ANTHROPIC_API_KEY); diff --git a/src/services/api/errors.ts b/src/services/api/errors.ts index d77c92a9..45056127 100644 --- a/src/services/api/errors.ts +++ b/src/services/api/errors.ts @@ -164,6 +164,12 @@ export const TOKEN_REVOKED_ERROR_MESSAGE = export const CCR_AUTH_ERROR_MESSAGE = 'Authentication error ยท This may be a temporary network issue, please try again' export const REPEATED_529_ERROR_MESSAGE = 'Repeated 529 Overloaded errors' +export function getCustomOffSwitchMessage(): string { + return getAPIProvider() === 'firstParty' + ? 'Opus is experiencing high load, please use /model to switch to Sonnet' + : 'The API is experiencing high load, please try again shortly or use /model to switch models' +} +// Backward-compatible constant for string matching in error handlers export const CUSTOM_OFF_SWITCH_MESSAGE = 'Opus is experiencing high load, please use /model to switch to Sonnet' export const API_TIMEOUT_ERROR_MESSAGE = 'Request timed out' @@ -457,7 +463,7 @@ export function getAssistantMessageFromError( error.message.includes(CUSTOM_OFF_SWITCH_MESSAGE) ) { return createAssistantAPIErrorMessage({ - content: CUSTOM_OFF_SWITCH_MESSAGE, + content: getCustomOffSwitchMessage(), error: 'rate_limit', }) }