From a9f0b36cdab5f1af89eab4c0366b031565859c5a Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Tue, 13 Jan 2026 14:07:28 +0000 Subject: [PATCH 1/3] Ensures error details are shown for all errors (except diff, which has its own case) --- webview-ui/src/components/chat/ChatRow.tsx | 6 ++++-- webview-ui/src/components/chat/ErrorRow.tsx | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index e36ef2811bb..0bbab8782a8 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -1336,7 +1336,9 @@ export const ChatRowContent = ({ } // Fallback for generic errors - return + return ( + + ) case "completion_result": return ( <> @@ -1526,7 +1528,7 @@ export const ChatRowContent = ({ case "ask": switch (message.ask) { case "mistake_limit_reached": - return + return case "command": return ( Date: Tue, 13 Jan 2026 14:44:29 +0000 Subject: [PATCH 2/3] More details --- webview-ui/src/components/chat/ChatRow.tsx | 6 +- webview-ui/src/components/chat/ErrorRow.tsx | 21 ++++-- .../ApiOptions.provider-filtering.spec.tsx | 4 +- .../src/components/settings/constants.ts | 68 +++++++++---------- webview-ui/src/i18n/locales/ca/chat.json | 3 +- webview-ui/src/i18n/locales/de/chat.json | 3 +- webview-ui/src/i18n/locales/en/chat.json | 3 +- webview-ui/src/i18n/locales/es/chat.json | 3 +- webview-ui/src/i18n/locales/fr/chat.json | 3 +- webview-ui/src/i18n/locales/hi/chat.json | 3 +- webview-ui/src/i18n/locales/id/chat.json | 3 +- webview-ui/src/i18n/locales/it/chat.json | 3 +- webview-ui/src/i18n/locales/ja/chat.json | 3 +- webview-ui/src/i18n/locales/ko/chat.json | 3 +- webview-ui/src/i18n/locales/nl/chat.json | 3 +- webview-ui/src/i18n/locales/pl/chat.json | 3 +- webview-ui/src/i18n/locales/pt-BR/chat.json | 3 +- webview-ui/src/i18n/locales/ru/chat.json | 3 +- webview-ui/src/i18n/locales/tr/chat.json | 3 +- webview-ui/src/i18n/locales/vi/chat.json | 3 +- webview-ui/src/i18n/locales/zh-CN/chat.json | 3 +- webview-ui/src/i18n/locales/zh-TW/chat.json | 3 +- 22 files changed, 92 insertions(+), 61 deletions(-) diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index 0bbab8782a8..24749bb4191 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -1132,14 +1132,16 @@ export const ChatRowContent = ({ // } } else { body = t("chat:apiRequest.errorMessage.unknown") - docsURL = "mailto:support@roocode.com?subject=Unknown API Error" + docsURL = + "mailto:support@roocode.com?subject=Unknown API Error&body=[Please include full error details]" } } else if (message.text.indexOf("Connection error") === 0) { body = t("chat:apiRequest.errorMessage.connection") } else { // Non-HTTP-status-code error message - store full text as errorDetails body = t("chat:apiRequest.errorMessage.unknown") - docsURL = "mailto:support@roocode.com?subject=Unknown API Error" + docsURL = + "mailto:support@roocode.com?subject=Unknown API Error&body=[Please include full error details]" } } diff --git a/webview-ui/src/components/chat/ErrorRow.tsx b/webview-ui/src/components/chat/ErrorRow.tsx index a5f80365bb8..50e7c67b5bb 100644 --- a/webview-ui/src/components/chat/ErrorRow.tsx +++ b/webview-ui/src/components/chat/ErrorRow.tsx @@ -1,7 +1,7 @@ import React, { useState, useCallback, memo, useMemo } from "react" import { useTranslation } from "react-i18next" import { VSCodeButton } from "@vscode/webview-ui-toolkit/react" -import { BookOpenText, MessageCircleWarning, Copy, Check, Microscope } from "lucide-react" +import { BookOpenText, MessageCircleWarning, Copy, Check, Microscope, Info } from "lucide-react" import { useCopyToClipboard } from "@src/utils/clipboard" import { vscode } from "@src/utils/vscode" @@ -10,6 +10,7 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from " import { Button } from "../ui" import { useExtensionState } from "@src/context/ExtensionStateContext" import { useSelectedModel } from "@src/components/ui/hooks/useSelectedModel" +import { PROVIDERS } from "../settings/constants" /** * Unified error display component for all error types in the chat. @@ -97,6 +98,8 @@ export const ErrorRow = memo( const { version, apiConfiguration } = useExtensionState() const { provider, id: modelId } = useSelectedModel(apiConfiguration) + const usesProxy = PROVIDERS.find((p) => p.value === provider)?.proxy ?? false + // Format error details with metadata prepended const formattedErrorDetails = useMemo(() => { if (!errorDetails) return undefined @@ -104,14 +107,14 @@ export const ErrorRow = memo( const metadata = [ `Date/time: ${new Date().toISOString()}`, `Extension version: ${version}`, - `Provider: ${provider}`, + `Provider: ${provider}${usesProxy ? " (proxy)" : ""}`, `Model: ${modelId}`, "", "", ].join("\n") return metadata + errorDetails - }, [errorDetails, version, provider, modelId]) + }, [errorDetails, version, provider, modelId, usesProxy]) const handleDownloadDiagnostics = useCallback( (e: React.MouseEvent) => { @@ -290,10 +293,18 @@ export const ErrorRow = memo( {t("chat:errorDetails.title")} -
-
+							
+
 									{formattedErrorDetails}
 								
+ {usesProxy && ( +
+ + + {t("chat:errorDetails.proxyProvider")} + +
+ )}