zagens_core/subagent/
mailbox.rs1use serde::{Deserialize, Serialize};
4
5use crate::models::Usage;
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(tag = "kind", rename_all = "snake_case")]
9pub enum MailboxMessage {
10 Started {
11 agent_id: String,
12 agent_type: String,
13 },
14 Progress {
15 agent_id: String,
16 status: String,
17 },
18 ToolCallStarted {
19 agent_id: String,
20 tool_name: String,
21 step: u32,
22 },
23 ToolCallCompleted {
24 agent_id: String,
25 tool_name: String,
26 step: u32,
27 ok: bool,
28 },
29 ChildSpawned {
30 parent_id: String,
31 child_id: String,
32 },
33 Completed {
34 agent_id: String,
35 summary: String,
36 },
37 Failed {
38 agent_id: String,
39 error: String,
40 },
41 Cancelled {
42 agent_id: String,
43 },
44 TokenUsage {
45 agent_id: String,
46 model: String,
47 usage: Usage,
48 },
49}
50
51impl MailboxMessage {
52 #[must_use]
53 pub fn started(agent_id: impl Into<String>, agent_type: impl AsRef<str>) -> Self {
54 Self::Started {
55 agent_id: agent_id.into(),
56 agent_type: agent_type.as_ref().to_string(),
57 }
58 }
59
60 #[must_use]
61 pub fn progress(agent_id: impl Into<String>, status: impl Into<String>) -> Self {
62 Self::Progress {
63 agent_id: agent_id.into(),
64 status: status.into(),
65 }
66 }
67
68 #[must_use]
69 pub fn token_usage(
70 agent_id: impl Into<String>,
71 model: impl Into<String>,
72 usage: Usage,
73 ) -> Self {
74 Self::TokenUsage {
75 agent_id: agent_id.into(),
76 model: model.into(),
77 usage,
78 }
79 }
80
81 #[must_use]
82 pub fn agent_id(&self) -> &str {
83 match self {
84 Self::Started { agent_id, .. }
85 | Self::Progress { agent_id, .. }
86 | Self::ToolCallStarted { agent_id, .. }
87 | Self::ToolCallCompleted { agent_id, .. }
88 | Self::Completed { agent_id, .. }
89 | Self::Failed { agent_id, .. }
90 | Self::Cancelled { agent_id }
91 | Self::TokenUsage { agent_id, .. } => agent_id,
92 Self::ChildSpawned { child_id, .. } => child_id,
93 }
94 }
95}