walrus_core/protocol/message/
client.rs1use compact_str::CompactString;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum HubAction {
10 Install,
12 Uninstall,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct SendRequest {
19 pub agent: CompactString,
21 pub content: String,
23 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub session: Option<u64>,
26 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub sender: Option<CompactString>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct StreamRequest {
34 pub agent: CompactString,
36 pub content: String,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub session: Option<u64>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub sender: Option<CompactString>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct DownloadRequest {
49 pub model: CompactString,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct HubRequest {
56 pub package: CompactString,
58 pub action: HubAction,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(rename_all = "snake_case")]
65pub enum MemoryOp {
66 Entities {
68 #[serde(default, skip_serializing_if = "Option::is_none")]
69 entity_type: Option<String>,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
71 limit: Option<u32>,
72 },
73 Relations {
75 #[serde(default, skip_serializing_if = "Option::is_none")]
76 entity_id: Option<String>,
77 #[serde(default, skip_serializing_if = "Option::is_none")]
78 limit: Option<u32>,
79 },
80 Journals {
82 #[serde(default, skip_serializing_if = "Option::is_none")]
83 agent: Option<String>,
84 #[serde(default, skip_serializing_if = "Option::is_none")]
85 limit: Option<u32>,
86 },
87 Search {
89 query: String,
90 #[serde(default, skip_serializing_if = "Option::is_none")]
91 entity_type: Option<String>,
92 #[serde(default, skip_serializing_if = "Option::is_none")]
93 limit: Option<u32>,
94 },
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
99#[serde(tag = "type", rename_all = "snake_case")]
100pub enum ClientMessage {
101 Send {
103 agent: CompactString,
105 content: String,
107 #[serde(default, skip_serializing_if = "Option::is_none")]
109 session: Option<u64>,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
112 sender: Option<CompactString>,
113 },
114 Stream {
116 agent: CompactString,
118 content: String,
120 #[serde(default, skip_serializing_if = "Option::is_none")]
122 session: Option<u64>,
123 #[serde(default, skip_serializing_if = "Option::is_none")]
125 sender: Option<CompactString>,
126 },
127 Download {
129 model: CompactString,
131 },
132 Ping,
134 Hub {
136 package: CompactString,
138 action: HubAction,
140 },
141 Sessions,
143 Kill {
145 session: u64,
147 },
148 Tasks,
150 KillTask {
152 task_id: u64,
154 },
155 Approve {
157 task_id: u64,
159 response: String,
161 },
162 Evaluate {
167 agent: CompactString,
169 content: String,
171 #[serde(default, skip_serializing_if = "Option::is_none")]
173 session: Option<u64>,
174 #[serde(default, skip_serializing_if = "Option::is_none")]
176 sender: Option<CompactString>,
177 },
178 SubscribeTasks,
180 Downloads,
182 SubscribeDownloads,
184 GetConfig,
186 SetConfig {
188 config: String,
190 },
191 MemoryQuery {
193 query: MemoryOp,
195 },
196}
197
198impl From<SendRequest> for ClientMessage {
199 fn from(r: SendRequest) -> Self {
200 Self::Send {
201 agent: r.agent,
202 content: r.content,
203 session: r.session,
204 sender: r.sender,
205 }
206 }
207}
208
209impl From<StreamRequest> for ClientMessage {
210 fn from(r: StreamRequest) -> Self {
211 Self::Stream {
212 agent: r.agent,
213 content: r.content,
214 session: r.session,
215 sender: r.sender,
216 }
217 }
218}
219
220impl From<DownloadRequest> for ClientMessage {
221 fn from(r: DownloadRequest) -> Self {
222 Self::Download { model: r.model }
223 }
224}
225
226impl From<HubRequest> for ClientMessage {
227 fn from(r: HubRequest) -> Self {
228 Self::Hub {
229 package: r.package,
230 action: r.action,
231 }
232 }
233}