From fe257cd8d18acef5a58ecc4eaa9efb0cdb8a2494 Mon Sep 17 00:00:00 2001 From: Dani Akash Date: Tue, 24 Mar 2026 14:43:05 +0530 Subject: [PATCH] feat: only parse browseros provider errors (#542) --- .../entrypoints/sidepanel/index/Chat.tsx | 5 ++- .../entrypoints/sidepanel/index/ChatError.tsx | 34 +++++++++++++------ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/packages/browseros-agent/apps/agent/entrypoints/sidepanel/index/Chat.tsx b/packages/browseros-agent/apps/agent/entrypoints/sidepanel/index/Chat.tsx index 440b7bfe3..1f0162185 100644 --- a/packages/browseros-agent/apps/agent/entrypoints/sidepanel/index/Chat.tsx +++ b/packages/browseros-agent/apps/agent/entrypoints/sidepanel/index/Chat.tsx @@ -36,6 +36,7 @@ export const Chat = () => { stop, agentUrlError, chatError, + selectedProvider, getActionForMessage, liked, onClickLike, @@ -224,7 +225,9 @@ export const Chat = () => { /> )} {agentUrlError && } - {chatError && } + {chatError && ( + + )} void + providerType?: string } -function parseErrorMessage(message: string): { +function parseErrorMessage( + message: string, + providerType?: string, +): { text: string url?: string isRateLimit?: boolean isCreditsExhausted?: boolean isConnectionError?: boolean } { - // Detect MCP server connection failures + const isBrowserosProvider = providerType === 'browseros' + + // Detect MCP server connection failures (universal — affects all providers) if ( (message.includes('Failed to fetch') || message.includes('fetch failed')) && message.includes('127.0.0.1') @@ -45,10 +51,11 @@ function parseErrorMessage(message: string): { } } - // Detect credit exhaustion from gateway + // Detect credit exhaustion from gateway (BrowserOS provider only) if ( - message.includes('CREDITS_EXHAUSTED') || - message.includes('Daily credits exhausted') + isBrowserosProvider && + (message.includes('CREDITS_EXHAUSTED') || + message.includes('Daily credits exhausted')) ) { return { text: 'Daily credits exhausted. Credits reset at midnight UTC.', @@ -58,8 +65,11 @@ function parseErrorMessage(message: string): { } } - // Detect BrowserOS rate limit (unique pattern, no provider uses this) - if (message.includes('BrowserOS LLM daily limit reached')) { + // Detect BrowserOS rate limit (BrowserOS provider only) + if ( + isBrowserosProvider && + message.includes('BrowserOS LLM daily limit reached') + ) { return { text: 'Add your own API key for unlimited usage.', url: 'https://dub.sh/browseros-usage-limit', @@ -83,9 +93,13 @@ function parseErrorMessage(message: string): { return { text: text || 'An unexpected error occurred', url } } -export const ChatError: FC = ({ error, onRetry }) => { +export const ChatError: FC = ({ + error, + onRetry, + providerType, +}) => { const { text, url, isRateLimit, isCreditsExhausted, isConnectionError } = - parseErrorMessage(error.message) + parseErrorMessage(error.message, providerType) // --- Commented out for Kimi partnership launch (restore after) --- // const surveyUrl = useMemo( @@ -151,7 +165,7 @@ export const ChatError: FC = ({ error, onRetry }) => { View Usage & Billing )} - {isRateLimit && !isCreditsExhausted && ( + {isRateLimit && !isCreditsExhausted && providerType === 'browseros' && (

{/* biome-ignore lint/a11y/useValidAnchor: link with click tracking */}