1use sim_kernel::Symbol;
2use sim_lib_server::{FrameEnvelope, ServerFrame};
3
4#[derive(Clone, Debug, PartialEq, Eq)]
6pub enum AgentRole {
7 Planner,
9 Worker,
11 Critic,
13 Judge,
15 Verifier,
17 Voice,
19 User,
21 System,
23 Tool,
25 Retriever,
27 Recorder,
29 Custom(Symbol),
31}
32
33impl AgentRole {
34 pub fn as_symbol(&self) -> Symbol {
36 match self {
37 Self::Planner => Symbol::new("planner"),
38 Self::Worker => Symbol::new("worker"),
39 Self::Critic => Symbol::new("critic"),
40 Self::Judge => Symbol::new("judge"),
41 Self::Verifier => Symbol::new("verifier"),
42 Self::Voice => Symbol::new("voice"),
43 Self::User => Symbol::new("user"),
44 Self::System => Symbol::new("system"),
45 Self::Tool => Symbol::new("tool"),
46 Self::Retriever => Symbol::new("retriever"),
47 Self::Recorder => Symbol::new("recorder"),
48 Self::Custom(symbol) => symbol.clone(),
49 }
50 }
51}
52
53pub fn stamp_envelope_role(envelope: &mut FrameEnvelope, role: &AgentRole) {
55 envelope.role = Some(role.as_symbol());
56 envelope.hop = envelope.hop.saturating_add(1);
57}
58
59pub fn stamp_frame_role(frame: &mut ServerFrame, role: &AgentRole) {
61 stamp_envelope_role(&mut frame.envelope, role);
62}