agent_core_runtime/agent/
messages.rs1use crate::controller::types::ControlCmd;
7use crate::controller::{AskUserQuestionsRequest, ToolResultStatus, TurnId};
8use crate::permissions::{BatchPermissionRequest, PermissionRequest};
9
10#[derive(Debug, Clone)]
12pub enum UiMessage {
13 TextChunk {
15 session_id: i64,
16 turn_id: Option<TurnId>,
17 text: String,
18 input_tokens: i64,
19 output_tokens: i64,
20 },
21
22 Display {
24 session_id: i64,
25 turn_id: Option<TurnId>,
26 message: String,
27 },
28
29 ToolExecuting {
31 session_id: i64,
32 turn_id: Option<TurnId>,
33 tool_use_id: String,
34 display_name: String,
35 display_title: String,
36 },
37
38 ToolCompleted {
40 session_id: i64,
41 turn_id: Option<TurnId>,
42 tool_use_id: String,
43 status: ToolResultStatus,
44 error: Option<String>,
45 },
46
47 Complete {
49 session_id: i64,
50 turn_id: Option<TurnId>,
51 input_tokens: i64,
52 output_tokens: i64,
53 stop_reason: Option<String>,
55 },
56
57 TokenUpdate {
59 session_id: i64,
60 turn_id: Option<TurnId>,
61 input_tokens: i64,
62 output_tokens: i64,
63 context_limit: i32,
64 },
65
66 Error {
68 session_id: i64,
69 turn_id: Option<TurnId>,
70 error: String,
71 },
72
73 System { session_id: i64, message: String },
75
76 CommandComplete {
78 session_id: i64,
79 command: ControlCmd,
80 success: bool,
81 message: Option<String>,
82 },
83
84 UserInteractionRequired {
86 session_id: i64,
87 tool_use_id: String,
88 request: AskUserQuestionsRequest,
89 turn_id: Option<TurnId>,
90 },
91
92 PermissionRequired {
94 session_id: i64,
95 tool_use_id: String,
96 request: PermissionRequest,
97 turn_id: Option<TurnId>,
98 },
99
100 BatchPermissionRequired {
104 session_id: i64,
105 batch: BatchPermissionRequest,
106 turn_id: Option<TurnId>,
107 },
108}
109
110pub mod channels {
112 use crate::controller::ControllerInputPayload;
113 use tokio::sync::mpsc;
114
115 use super::UiMessage;
116
117 pub use crate::controller::DEFAULT_CHANNEL_SIZE;
119
120 pub type ToControllerTx = mpsc::Sender<ControllerInputPayload>;
122 pub type ToControllerRx = mpsc::Receiver<ControllerInputPayload>;
124
125 pub type FromControllerTx = mpsc::Sender<UiMessage>;
127 pub type FromControllerRx = mpsc::Receiver<UiMessage>;
129
130 pub fn create_channels(
135 channel_size: Option<usize>,
136 ) -> (ToControllerTx, ToControllerRx, FromControllerTx, FromControllerRx) {
137 let size = channel_size.unwrap_or(DEFAULT_CHANNEL_SIZE);
138 let (to_ctrl_tx, to_ctrl_rx) = mpsc::channel(size);
139 let (from_ctrl_tx, from_ctrl_rx) = mpsc::channel(size);
140 (to_ctrl_tx, to_ctrl_rx, from_ctrl_tx, from_ctrl_rx)
141 }
142}