agent_core/agent/
messages.rs1use crate::controller::types::ControlCmd;
7use crate::controller::{AskUserQuestionsRequest, PermissionRequest, ToolResultStatus, TurnId};
8
9#[derive(Debug, Clone)]
11pub enum UiMessage {
12 TextChunk {
14 session_id: i64,
15 turn_id: Option<TurnId>,
16 text: String,
17 input_tokens: i64,
18 output_tokens: i64,
19 },
20
21 Display {
23 session_id: i64,
24 turn_id: Option<TurnId>,
25 message: String,
26 },
27
28 ToolExecuting {
30 session_id: i64,
31 turn_id: Option<TurnId>,
32 tool_use_id: String,
33 display_name: String,
34 display_title: String,
35 },
36
37 ToolCompleted {
39 session_id: i64,
40 turn_id: Option<TurnId>,
41 tool_use_id: String,
42 status: ToolResultStatus,
43 error: Option<String>,
44 },
45
46 Complete {
48 session_id: i64,
49 turn_id: Option<TurnId>,
50 input_tokens: i64,
51 output_tokens: i64,
52 stop_reason: Option<String>,
54 },
55
56 TokenUpdate {
58 session_id: i64,
59 turn_id: Option<TurnId>,
60 input_tokens: i64,
61 output_tokens: i64,
62 context_limit: i32,
63 },
64
65 Error {
67 session_id: i64,
68 turn_id: Option<TurnId>,
69 error: String,
70 },
71
72 System { session_id: i64, message: String },
74
75 CommandComplete {
77 session_id: i64,
78 command: ControlCmd,
79 success: bool,
80 message: Option<String>,
81 },
82
83 UserInteractionRequired {
85 session_id: i64,
86 tool_use_id: String,
87 request: AskUserQuestionsRequest,
88 turn_id: Option<TurnId>,
89 },
90
91 PermissionRequired {
93 session_id: i64,
94 tool_use_id: String,
95 request: PermissionRequest,
96 turn_id: Option<TurnId>,
97 },
98}
99
100pub mod channels {
102 use crate::controller::ControllerInputPayload;
103 use tokio::sync::mpsc;
104
105 use super::UiMessage;
106
107 pub use crate::controller::DEFAULT_CHANNEL_SIZE;
109
110 pub type ToControllerTx = mpsc::Sender<ControllerInputPayload>;
112 pub type ToControllerRx = mpsc::Receiver<ControllerInputPayload>;
114
115 pub type FromControllerTx = mpsc::Sender<UiMessage>;
117 pub type FromControllerRx = mpsc::Receiver<UiMessage>;
119
120 pub fn create_channels() -> (ToControllerTx, ToControllerRx, FromControllerTx, FromControllerRx)
122 {
123 let (to_ctrl_tx, to_ctrl_rx) = mpsc::channel(DEFAULT_CHANNEL_SIZE);
124 let (from_ctrl_tx, from_ctrl_rx) = mpsc::channel(DEFAULT_CHANNEL_SIZE);
125 (to_ctrl_tx, to_ctrl_rx, from_ctrl_tx, from_ctrl_rx)
126 }
127}