source dump of claude code
at main 55 lines 1.3 kB view raw
1import type { AttachmentMessage, RenderableMessage } from '../types/message.js' 2 3function isTeammateShutdownAttachment( 4 msg: RenderableMessage, 5): msg is AttachmentMessage { 6 return ( 7 msg.type === 'attachment' && 8 msg.attachment.type === 'task_status' && 9 msg.attachment.taskType === 'in_process_teammate' && 10 msg.attachment.status === 'completed' 11 ) 12} 13 14/** 15 * Collapses consecutive in-process teammate shutdown task_status attachments 16 * into a single `teammate_shutdown_batch` attachment with a count. 17 */ 18export function collapseTeammateShutdowns( 19 messages: RenderableMessage[], 20): RenderableMessage[] { 21 const result: RenderableMessage[] = [] 22 let i = 0 23 24 while (i < messages.length) { 25 const msg = messages[i]! 26 if (isTeammateShutdownAttachment(msg)) { 27 let count = 0 28 while ( 29 i < messages.length && 30 isTeammateShutdownAttachment(messages[i]!) 31 ) { 32 count++ 33 i++ 34 } 35 if (count === 1) { 36 result.push(msg) 37 } else { 38 result.push({ 39 type: 'attachment', 40 uuid: msg.uuid, 41 timestamp: msg.timestamp, 42 attachment: { 43 type: 'teammate_shutdown_batch', 44 count, 45 }, 46 }) 47 } 48 } else { 49 result.push(msg) 50 i++ 51 } 52 } 53 54 return result 55}