From ef58838198d873816e2de83e60820091d5b744e9 Mon Sep 17 00:00:00 2001 From: puzhen <1303385763@qq.com> Date: Thu, 20 Nov 2025 00:38:11 +0800 Subject: [PATCH 1/2] update --- src/store/chatStore.ts | 86 +++++++++++++++++++++++++++++++++--------- 1 file changed, 69 insertions(+), 17 deletions(-) diff --git a/src/store/chatStore.ts b/src/store/chatStore.ts index 810701015..0e3955fcd 100644 --- a/src/store/chatStore.ts +++ b/src/store/chatStore.ts @@ -447,7 +447,28 @@ const chatStore = (initial?: Partial) => createStore()( }) : undefined, async onmessage(event: any) { - const agentMessages: AgentMessage = JSON.parse(event.data); + let agentMessages: AgentMessage; + + try { + agentMessages = JSON.parse(event.data); + } catch (error) { + console.error('Failed to parse SSE message:', error); + console.error('Raw event.data:', event.data); + + // Create error task to notify user + const currentStore = getCurrentChatStore(); + const currentId = getCurrentTaskId(); + const newTaskId = currentStore.create(); + currentStore.setActiveTaskId(newTaskId); + currentStore.setHasWaitComfirm(newTaskId, true); + currentStore.addMessages(newTaskId, { + id: generateUniqueId(), + role: "agent", + content: `**System Error**: Failed to parse server message. The connection may be unstable.\n\nPlease try again or contact support if this persists.`, + }); + return; + } + console.log("agentMessages", agentMessages); const agentNameMap = { developer_agent: "Developer Agent", @@ -1032,7 +1053,15 @@ const chatStore = (initial?: Partial) => createStore()( addWebViewUrl(currentTaskId, agentMessages.data.message as string, agentMessages.data.process_task_id as string) } if (agentMessages.data.method_name === 'browser_navigate' && agentMessages.data.message?.startsWith('{"url"')) { - addWebViewUrl(currentTaskId, JSON.parse(agentMessages.data.message)?.url as string, agentMessages.data.process_task_id as string) + try { + const urlData = JSON.parse(agentMessages.data.message); + if (urlData?.url) { + addWebViewUrl(currentTaskId, urlData.url as string, agentMessages.data.process_task_id as string) + } + } catch (error) { + console.error('Failed to parse browser_navigate URL:', error); + console.error('Raw message:', agentMessages.data.message); + } } let taskRunning = [...tasks[currentTaskId].taskRunning] @@ -1190,23 +1219,46 @@ const chatStore = (initial?: Partial) => createStore()( } if (agentMessages.step === "error") { - console.error('Model error:', agentMessages.data) - const errorMessage = agentMessages.data.message || 'An error occurred while processing your request'; + try { + console.error('Model error:', agentMessages.data); - // Create a new task to avoid "Task already exists" error - // and completely reset the interface - const newTaskId = create(); - // Prevent showing task skeleton after an error occurs - setActiveTaskId(newTaskId); - setHasWaitComfirm(newTaskId, true); + // Safely extract error message with optional chaining + const errorMessage = agentMessages.data?.message || + agentMessages.data?.error || + 'An error occurred while processing your request'; - // Add error message to the new clean task - addMessages(newTaskId, { - id: generateUniqueId(), - role: "agent", - content: `❌ **Error**: ${errorMessage}`, - }); - uploadLog(currentTaskId, type) + // Create a new task to avoid "Task already exists" error + // and completely reset the interface + const newTaskId = create(); + // Prevent showing task skeleton after an error occurs + setActiveTaskId(newTaskId); + setHasWaitComfirm(newTaskId, true); + + // Add error message to the new clean task + addMessages(newTaskId, { + id: generateUniqueId(), + role: "agent", + content: `**Error**: ${errorMessage}`, + }); + uploadLog(currentTaskId, type); + } catch (error) { + console.error('Failed to handle model error:', error); + console.error('Original agentMessages:', agentMessages); + + // Fallback: create error task with generic message + try { + const fallbackTaskId = create(); + setActiveTaskId(fallbackTaskId); + setHasWaitComfirm(fallbackTaskId, true); + addMessages(fallbackTaskId, { + id: generateUniqueId(), + role: "agent", + content: `**Critical Error**: An unexpected error occurred. Please try again or contact support.`, + }); + } catch (fallbackError) { + console.error('Failed to create fallback error task:', fallbackError); + } + } return } From cc577e7b502967b7a6de44b6ab9be81dd81595e7 Mon Sep 17 00:00:00 2001 From: Wendong-Fan Date: Thu, 20 Nov 2025 14:16:53 +0800 Subject: [PATCH 2/2] minor fix wendong --- src/store/chatStore.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/store/chatStore.ts b/src/store/chatStore.ts index ba612a424..296a15bdf 100644 --- a/src/store/chatStore.ts +++ b/src/store/chatStore.ts @@ -458,7 +458,6 @@ const chatStore = (initial?: Partial) => createStore()( // Create error task to notify user const currentStore = getCurrentChatStore(); - const currentId = getCurrentTaskId(); const newTaskId = currentStore.create(); currentStore.setActiveTaskId(newTaskId); currentStore.setHasWaitComfirm(newTaskId, true); @@ -1223,9 +1222,14 @@ const chatStore = (initial?: Partial) => createStore()( try { console.error('Model error:', agentMessages.data); - // Safely extract error message with optional chaining + // Validate that agentMessages.data exists before processing + if (agentMessages.data === undefined || agentMessages.data === null) { + throw new Error('Invalid error message format: missing data'); + } + + // Safely extract error message with fallback chain const errorMessage = agentMessages.data?.message || - agentMessages.data?.error || + (typeof agentMessages.data === 'string' ? agentMessages.data : null) || 'An error occurred while processing your request'; // Mark all incomplete tasks as failed @@ -1277,18 +1281,21 @@ const chatStore = (initial?: Partial) => createStore()( console.error('Failed to handle model error:', error); console.error('Original agentMessages:', agentMessages); - // Fallback: create error task with generic message + // Fallback: try to create error task with minimal operations try { + const { create, setActiveTaskId, setHasWaitComfirm, addMessages } = get(); const fallbackTaskId = create(); setActiveTaskId(fallbackTaskId); setHasWaitComfirm(fallbackTaskId, true); addMessages(fallbackTaskId, { id: generateUniqueId(), role: "agent", - content: `**Critical Error**: An unexpected error occurred. Please try again or contact support.`, + content: `**Critical Error**: An unexpected error occurred while handling a model error. Please refresh the application or contact support.`, }); } catch (fallbackError) { console.error('Failed to create fallback error task:', fallbackError); + // Last resort: just log the error without creating UI elements + console.error('Original error that could not be displayed:', agentMessages); } } return;