MCPcopy
hub / github.com/codeaashu/claude-code / normalizeMessages

Function normalizeMessages

src/utils/messages.ts:741–823  ·  view source on GitHub ↗
(messages: Message[])

Source from the content-addressed store, hash-verified

739): (NormalizedAssistantMessage | NormalizedUserMessage)[]
740export function normalizeMessages(messages: Message[]): NormalizedMessage[]
741export function normalizeMessages(messages: Message[]): NormalizedMessage[] {
742 // isNewChain tracks whether we need to generate new UUIDs for messages when normalizing.
743 // When a message has multiple content blocks, we split it into multiple messages,
744 // each with a single content block. When this happens, we need to generate new UUIDs
745 // for all subsequent messages to maintain proper ordering and prevent duplicate UUIDs.
746 // This flag is set to true once we encounter a message with multiple content blocks,
747 // and remains true for all subsequent messages in the normalization process.
748 let isNewChain = false
749 return messages.flatMap(message => {
750 switch (message.type) {
751 case 'assistant': {
752 isNewChain = isNewChain || message.message.content.length > 1
753 return message.message.content.map((_, index) => {
754 const uuid = isNewChain
755 ? deriveUUID(message.uuid, index)
756 : message.uuid
757 return {
758 type: 'assistant' as const,
759 timestamp: message.timestamp,
760 message: {
761 ...message.message,
762 content: [_],
763 context_management: message.message.context_management ?? null,
764 },
765 isMeta: message.isMeta,
766 isVirtual: message.isVirtual,
767 requestId: message.requestId,
768 uuid,
769 error: message.error,
770 isApiErrorMessage: message.isApiErrorMessage,
771 advisorModel: message.advisorModel,
772 } as NormalizedAssistantMessage
773 })
774 }
775 case 'attachment':
776 return [message]
777 case 'progress':
778 return [message]
779 case 'system':
780 return [message]
781 case 'user': {
782 if (typeof message.message.content === 'string') {
783 const uuid = isNewChain ? deriveUUID(message.uuid, 0) : message.uuid
784 return [
785 {
786 ...message,
787 uuid,
788 message: {
789 ...message.message,
790 content: [{ type: 'text', text: message.message.content }],
791 },
792 } as NormalizedMessage,
793 ]
794 }
795 isNewChain = isNewChain || message.message.content.length > 1
796 let imageIndex = 0
797 return message.message.content.map((_, index) => {
798 const isImage = _.type === 'image'

Callers 8

executeForkedSkillFunction · 0.85
callFunction · 0.85
MessagesImplFunction · 0.85
normalizeMessageFunction · 0.85

Calls 2

deriveUUIDFunction · 0.85
createUserMessageFunction · 0.85

Tested by

no test coverage detected