mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-25 09:35:52 +00:00
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>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -29,6 +29,7 @@ export function toInternalMessages(
|
||||
messages: readonly DeepImmutable<SDKMessage>[],
|
||||
): 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':
|
||||
|
||||
Reference in New Issue
Block a user