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

Function filterWhitespaceOnlyAssistantMessages

src/utils/messages.ts:4875–4919  ·  view source on GitHub ↗
(
  messages: Message[],
)

Source from the content-addressed store, hash-verified

4873 messages: Message[],
4874): Message[]
4875export function filterWhitespaceOnlyAssistantMessages(
4876 messages: Message[],
4877): Message[] {
4878 let hasChanges = false
4879
4880 const filtered = messages.filter(message => {
4881 if (message.type !== 'assistant') {
4882 return true
4883 }
4884
4885 const content = message.message.content
4886 // Keep messages with empty arrays (handled elsewhere) or that have real content
4887 if (!Array.isArray(content) || content.length === 0) {
4888 return true
4889 }
4890
4891 if (hasOnlyWhitespaceTextContent(content)) {
4892 hasChanges = true
4893 logEvent('tengu_filtered_whitespace_only_assistant', {
4894 messageUUID:
4895 message.uuid as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
4896 })
4897 return false
4898 }
4899
4900 return true
4901 })
4902
4903 if (!hasChanges) {
4904 return messages
4905 }
4906
4907 // Removing assistant messages may leave adjacent user messages that need
4908 // merging (the API requires alternating user/assistant roles).
4909 const merged: Message[] = []
4910 for (const message of filtered) {
4911 const prev = merged.at(-1)
4912 if (message.type === 'user' && prev?.type === 'user') {
4913 merged[merged.length - 1] = mergeUserMessages(prev, message) // lvalue
4914 } else {
4915 merged.push(message)
4916 }
4917 }
4918 return merged
4919}
4920
4921/**
4922 * Ensure all non-final assistant messages have non-empty content.

Callers 3

resumeAgentBackgroundFunction · 0.85
normalizeMessagesForAPIFunction · 0.85

Calls 4

logEventFunction · 0.85
mergeUserMessagesFunction · 0.85
pushMethod · 0.45

Tested by

no test coverage detected