Skip to content

Commit b5acd67

Browse files
committed
feat(ui-tars): update ErrorMessage ui component
1 parent cbe25ad commit b5acd67

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

apps/ui-tars/src/main/services/runAgent.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ export const runAgent = async (
165165
signal: abortController?.signal,
166166
operator: operator,
167167
onData: handleData,
168-
onError: ({ error }) => {
168+
onError: (params) => {
169+
const { error } = params;
169170
logger.error('[onGUIAgentError]', settings, error);
170171
setState({
171172
...getState(),

apps/ui-tars/src/renderer/src/components/RunMessages/Messages.tsx

+36-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
import { AlertCircle, Camera, Loader2 } from 'lucide-react';
66
import { Button } from '@renderer/components/ui/button';
7+
import { GUIAgentError, ErrorStatusEnum } from '@ui-tars/shared/types';
78

89
export const HumanTextMessage = ({ text }: { text: string }) => {
910
return (
@@ -27,13 +28,46 @@ export const ScreenshotMessage = ({ onClick }: ScreenshotMessageProps) => {
2728
};
2829

2930
export const ErrorMessage = ({ text }: { text: string }) => {
31+
let parsedError: GUIAgentError | null = null;
32+
try {
33+
const parsed = JSON.parse(text);
34+
if (parsed && typeof parsed === 'object' && 'code' in parsed) {
35+
parsedError = parsed as GUIAgentError;
36+
}
37+
} catch {
38+
// ignore
39+
}
40+
3041
return (
3142
<div className="flex flex-col gap-2 my-4 p-4 bg-red-500/10 border border-red-500/20 rounded-lg">
3243
<div className="flex items-center gap-2">
3344
<AlertCircle className="w-5 h-5 text-red-500 shrink-0" />
34-
<span className="font-medium text-red-500">Error</span>
45+
<span className="font-medium text-red-500">
46+
{parsedError
47+
? ErrorStatusEnum[parsedError.code] || 'UNKNOWN_ERROR'
48+
: 'Error'}
49+
</span>
3550
</div>
36-
<div className="text-sm text-red-500/90 break-all">{text}</div>
51+
{parsedError ? (
52+
<div className="flex flex-col gap-1">
53+
<div className="text-sm text-red-500/90 font-medium">
54+
{parsedError.message}
55+
</div>
56+
{parsedError.stack ? (
57+
<div className="text-xs text-red-500/70 font-mono mt-2">
58+
{parsedError.stack}
59+
</div>
60+
) : (
61+
parsedError.detail && (
62+
<div className="text-xs text-red-500/70 font-mono mt-2">
63+
{parsedError.detail}
64+
</div>
65+
)
66+
)}
67+
</div>
68+
) : (
69+
<div className="text-sm text-red-500/90 break-all">{text}</div>
70+
)}
3771
</div>
3872
);
3973
};

0 commit comments

Comments
 (0)