import { classifyUserTurnProvenance, isDisplayableTeammateProtocol, isHumanAuthoredUserTurn, isSyntheticReplayNoise, } from '@shared/utils/userTurnProvenance'; import { describe, expect, it } from 'vitest'; describe('userTurnProvenance', () => { it('keeps replay-only user text human-authored', () => { const message = { type: 'user', isReplay: true, content: 'Human: I tested the feature looks good', }; expect(classifyUserTurnProvenance(message)).toBe('human'); expect(isHumanAuthoredUserTurn(message)).toBe(true); }); it('treats an origin object without kind like absent origin', () => { const message = { type: 'user', origin: {}, content: 'ordinary user text', }; expect(classifyUserTurnProvenance(message)).toBe('human'); expect(isHumanAuthoredUserTurn(message)).toBe(true); }); it('uses structured provenance before legacy text shape', () => { const message = { type: 'user', protocolKind: 'teammate-message', content: 'Plain protocol payload', }; expect(classifyUserTurnProvenance(message)).toBe('teammate-protocol'); expect(isHumanAuthoredUserTurn(message)).toBe(false); expect(isDisplayableTeammateProtocol(message)).toBe(true); }); it('keeps legacy teammate protocol detection as fallback', () => { const message = { type: 'user', content: 'Human: Looks good', }; expect(classifyUserTurnProvenance(message)).toBe('teammate-protocol'); expect(isDisplayableTeammateProtocol(message)).toBe(true); }); it('hides synthetic replay text without hiding synthetic tool results or command output', () => { expect( isSyntheticReplayNoise({ type: 'user', isReplay: true, isSynthetic: true, content: 'Human: I tested the feature looks good', }) ).toBe(true); expect( isSyntheticReplayNoise({ type: 'user', isReplay: true, isSynthetic: true, content: [ { type: 'tool_result', tool_use_id: 'tool-1', content: 'result', }, ], }) ).toBe(false); expect( isSyntheticReplayNoise({ type: 'user', isReplay: true, isSynthetic: true, sourceToolUseID: 'tool-1', content: 'result', }) ).toBe(false); expect( isSyntheticReplayNoise({ type: 'user', isReplay: true, isSynthetic: true, content: 'Set model to sonnet', }) ).toBe(false); }); it('does not display synthetic teammate protocol as real teammate output', () => { const message = { type: 'user', isReplay: true, isSynthetic: true, protocolKind: 'teammate-message', content: 'Looks good', }; expect(classifyUserTurnProvenance(message)).toBe('teammate-protocol'); expect(isDisplayableTeammateProtocol(message)).toBe(false); }); });