namespace ControlCenter.Models; /// /// Defines which side of the Control Center dashboard a minion occupies. /// public enum MinionSide { /// Development side — Rex, Dex, Hex. Dev, /// Business side — Larry, Mel, Buzz. Business } /// /// Visual state of a minion sprite, derived from the agent's /// . Maps Active/Idle/Thinking/Error /// to frontend animation states. /// public enum MinionState { /// Agent is actively processing — minion shows working animation. Active, /// Agent is idle — minion shows idle/patrolling animation. Idle, /// Agent is thinking (LLM call in flight) — minion shows thinking animation. Thinking, /// Agent encountered an error — minion shows error/distress animation. Error } /// /// Static mapping entry that associates an agent ID with a minion's /// display side and position index within that side. /// /// Position indices are zero-based within each side. The dev side /// has Rex at 0, Dex at 1, and Hex at 2. The business side has /// Larry at 0, Mel at 1, and Buzz at 2. /// /// Agent identifier, e.g. "rex", "dex". /// Which side of the dashboard the minion occupies. /// Zero-based position index within the side. /// Human-readable name, e.g. "Rex". public record AgentMinionMapping( string AgentId, MinionSide Side, int PositionIndex, string DisplayName ); /// /// Real-time minion state update pushed to SignalR clients /// when an agent's status changes. Combines the static mapping /// (who/where) with the dynamic state (what the minion is doing). /// /// Agent identifier, e.g. "rex". /// Human-readable minion name, e.g. "Rex". /// Which side of the dashboard — Dev or Business. /// Position within the side (0-based). /// Current minion animation state. /// ISO 8601 timestamp of the state change. public record MinionStateUpdate( string AgentId, string DisplayName, MinionSide Side, int PositionIndex, MinionState State, string Timestamp );