Skip to content

Commit 2c80150

Browse files
wsolarq11deepseek-v4-pro[1m]
andcommitted
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] <deepseek-ai@claude-code-best.win>
1 parent d3121f0 commit 2c80150

2 files changed

Lines changed: 6 additions & 2 deletions

File tree

src/utils/messages.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@ export function normalizeMessages(messages: Message[]): NormalizedMessage[] {
753753
// and remains true for all subsequent messages in the normalization process.
754754
let isNewChain = false
755755
return messages.flatMap(message => {
756+
if (!message) return [];
756757
switch (message.type) {
757758
case 'assistant': {
758759
const aMsg = message as AssistantMessage
@@ -776,7 +777,7 @@ export function normalizeMessages(messages: Message[]): NormalizedMessage[] {
776777
isVirtual: message.isVirtual,
777778
requestId: message.requestId,
778779
uuid,
779-
error: message.error,
780+
error: message?.error,
780781
isApiErrorMessage: message.isApiErrorMessage,
781782
advisorModel: message.advisorModel,
782783
} as NormalizedAssistantMessage
@@ -2376,6 +2377,7 @@ export function normalizeMessagesForAPI(
23762377
},
23772378
)
23782379
.forEach(message => {
2380+
if (!message) return [];
23792381
switch (message.type) {
23802382
case 'system': {
23812383
// local_command system messages need to be included as user messages

src/utils/messages/mappers.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export function toInternalMessages(
2929
messages: readonly DeepImmutable<SDKMessage>[],
3030
): Message[] {
3131
return messages.flatMap(message => {
32+
if (!message) return [];
3233
switch (message.type) {
3334
case 'assistant':
3435
return [
@@ -127,6 +128,7 @@ export function fromSDKCompactMetadata(
127128

128129
export function toSDKMessages(messages: Message[]): SDKMessage[] {
129130
return messages.flatMap((message): SDKMessage[] => {
131+
if (!message) return [];
130132
switch (message.type) {
131133
case 'assistant':
132134
return [
@@ -138,7 +140,7 @@ export function toSDKMessages(messages: Message[]): SDKMessage[] {
138140
session_id: getSessionId(),
139141
parent_tool_use_id: null,
140142
uuid: message.uuid,
141-
error: message.error,
143+
error: message?.error,
142144
},
143145
]
144146
case 'user':

0 commit comments

Comments
 (0)