From 2c801502dcce501315aad63549a87598892beebf Mon Sep 17 00:00:00 2001 From: wsolarq11 <925477003@qq.com> Date: Wed, 24 Jun 2026 13:06:40 +0800 Subject: [PATCH] fix: prevent null reference reading 'error' in MessagesBoundary normalizeMessages and toSDKMessages access message.error in flatMap callbacks executed during React render (via useMemo). When a null element is present in the messages array at runtime (e.g., from corrupted JSONL deserialization or streaming race conditions), null.error throws "Cannot read properties of null (reading 'error')". Add null guards to flatMap/forEach callbacks and optional chaining on message.error access points in normalizeMessages and toSDKMessages. Fixes: React Rendering Error in MessagesBoundary Co-Authored-By: deepseek-v4-pro[1m] --- src/utils/messages.ts | 4 +++- src/utils/messages/mappers.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/messages.ts b/src/utils/messages.ts index cc624abb2..067e0280d 100644 --- a/src/utils/messages.ts +++ b/src/utils/messages.ts @@ -753,6 +753,7 @@ export function normalizeMessages(messages: Message[]): NormalizedMessage[] { // and remains true for all subsequent messages in the normalization process. let isNewChain = false return messages.flatMap(message => { + if (!message) return []; switch (message.type) { case 'assistant': { const aMsg = message as AssistantMessage @@ -776,7 +777,7 @@ export function normalizeMessages(messages: Message[]): NormalizedMessage[] { isVirtual: message.isVirtual, requestId: message.requestId, uuid, - error: message.error, + error: message?.error, isApiErrorMessage: message.isApiErrorMessage, advisorModel: message.advisorModel, } as NormalizedAssistantMessage @@ -2376,6 +2377,7 @@ export function normalizeMessagesForAPI( }, ) .forEach(message => { + if (!message) return []; switch (message.type) { case 'system': { // local_command system messages need to be included as user messages diff --git a/src/utils/messages/mappers.ts b/src/utils/messages/mappers.ts index 8f2bff8b0..0290200fb 100644 --- a/src/utils/messages/mappers.ts +++ b/src/utils/messages/mappers.ts @@ -29,6 +29,7 @@ export function toInternalMessages( messages: readonly DeepImmutable[], ): Message[] { return messages.flatMap(message => { + if (!message) return []; switch (message.type) { case 'assistant': return [ @@ -127,6 +128,7 @@ export function fromSDKCompactMetadata( export function toSDKMessages(messages: Message[]): SDKMessage[] { return messages.flatMap((message): SDKMessage[] => { + if (!message) return []; switch (message.type) { case 'assistant': return [ @@ -138,7 +140,7 @@ export function toSDKMessages(messages: Message[]): SDKMessage[] { session_id: getSessionId(), parent_tool_use_id: null, uuid: message.uuid, - error: message.error, + error: message?.error, }, ] case 'user':