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
);