using MeetingAssistant.MeetingNotes; namespace MeetingAssistant.Workflow; public enum MeetingWorkflowEventType { Created, StateTransition, SpeakerIdentified } public sealed record MeetingWorkflowEvent( MeetingWorkflowEventType Type, MeetingSessionArtifacts Artifacts, AssistantContextState? FromState = null, AssistantContextState? ToState = null, string? SpeakerName = null) { public static MeetingWorkflowEvent Created(MeetingSessionArtifacts artifacts) { return new MeetingWorkflowEvent(MeetingWorkflowEventType.Created, artifacts); } public static MeetingWorkflowEvent StateTransition( MeetingSessionArtifacts artifacts, AssistantContextState from, AssistantContextState to) { return new MeetingWorkflowEvent(MeetingWorkflowEventType.StateTransition, artifacts, from, to); } public static MeetingWorkflowEvent SpeakerIdentified( MeetingSessionArtifacts artifacts, string speakerName) { return new MeetingWorkflowEvent(MeetingWorkflowEventType.SpeakerIdentified, artifacts, SpeakerName: speakerName); } }