import { describe, expect, test } from 'bun:test' import { collapseTeammateShutdowns } from '../collapseTeammateShutdowns' function makeShutdownMsg(uuid = '1'): any { return { type: 'attachment', uuid, timestamp: Date.now(), attachment: { type: 'task_status', taskType: 'in_process_teammate', status: 'completed', }, } } function makeNonShutdownMsg(): any { return { type: 'user', message: { content: 'hello' } } } describe('collapseTeammateShutdowns', () => { test('returns same messages when no teammate shutdowns', () => { const msgs = [makeNonShutdownMsg(), makeNonShutdownMsg()] expect(collapseTeammateShutdowns(msgs)).toEqual(msgs) }) test('leaves single shutdown message unchanged', () => { const msgs = [makeShutdownMsg()] const result = collapseTeammateShutdowns(msgs) expect(result).toHaveLength(1) expect(result[0]).toEqual(msgs[0]) }) test('collapses consecutive shutdown messages into batch', () => { const msgs = [makeShutdownMsg('1'), makeShutdownMsg('2')] const result = collapseTeammateShutdowns(msgs) expect(result).toHaveLength(1) expect((result[0] as any).attachment.type).toBe('teammate_shutdown_batch') }) test('batch attachment has correct count', () => { const msgs = [ makeShutdownMsg('1'), makeShutdownMsg('2'), makeShutdownMsg('3'), ] const result = collapseTeammateShutdowns(msgs) expect((result[0] as any).attachment.count).toBe(3) }) test('does not collapse non-consecutive shutdowns', () => { const msgs = [ makeShutdownMsg('1'), makeNonShutdownMsg(), makeShutdownMsg('2'), ] const result = collapseTeammateShutdowns(msgs) expect(result).toHaveLength(3) expect((result[0] as any).attachment.type).toBe('task_status') expect((result[2] as any).attachment.type).toBe('task_status') }) test('preserves non-shutdown messages between shutdowns', () => { const msgs = [ makeShutdownMsg('1'), makeNonShutdownMsg(), makeShutdownMsg('2'), ] const result = collapseTeammateShutdowns(msgs) expect(result[1]).toEqual(makeNonShutdownMsg()) }) test('handles empty array', () => { expect(collapseTeammateShutdowns([])).toEqual([]) }) test('handles mixed message types', () => { const msgs = [ makeNonShutdownMsg(), makeShutdownMsg('1'), makeShutdownMsg('2'), makeNonShutdownMsg(), ] const result = collapseTeammateShutdowns(msgs) expect(result).toHaveLength(3) expect((result[1] as any).attachment.type).toBe('teammate_shutdown_batch') }) test('collapses more than 2 consecutive shutdowns', () => { const msgs = Array.from({ length: 5 }, (_, i) => makeShutdownMsg(String(i))) const result = collapseTeammateShutdowns(msgs) expect(result).toHaveLength(1) expect((result[0] as any).attachment.count).toBe(5) }) test('non-teammate task_status messages are not collapsed', () => { const nonTeammate: any = { type: 'attachment', uuid: 'x', timestamp: Date.now(), attachment: { type: 'task_status', taskType: 'subagent', status: 'completed', }, } const msgs = [nonTeammate, { ...nonTeammate, uuid: 'y' }] const result = collapseTeammateShutdowns(msgs) expect(result).toHaveLength(2) }) })