1pub mod address;
2pub mod get;
3pub mod refresh_secret_signature_pair;
4pub mod secret;
5pub mod set;
6pub mod signature;
7
8#[derive(clap::Subcommand)]
9pub enum Command {
10 Get(get::Command),
11 Set(set::Command),
12 Address {
13 #[command(subcommand)]
14 command: address::Command,
15 },
16 RefreshSecretSignaturePair(refresh_secret_signature_pair::Command),
17 Secret {
18 #[command(subcommand)]
19 command: secret::Command,
20 },
21 Signature {
22 #[command(subcommand)]
23 command: signature::Command,
24 },
25}
26
27#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
28#[serde(untagged)]
29#[schemars(rename = "cli.command.daemon.config.Request")]
30pub enum Request {
31 #[schemars(title = "Get")]
32 Get(get::Request),
33 #[schemars(title = "GetRequestSchema")]
34 GetRequestSchema(get::request_schema::Request),
35 #[schemars(title = "GetResponseSchema")]
36 GetResponseSchema(get::response_schema::Request),
37 #[schemars(title = "Set")]
38 Set(set::Request),
39 #[schemars(title = "SetRequestSchema")]
40 SetRequestSchema(set::request_schema::Request),
41 #[schemars(title = "SetResponseSchema")]
42 SetResponseSchema(set::response_schema::Request),
43 #[schemars(title = "Address")]
44 Address(address::Request),
45 #[schemars(title = "RefreshSecretSignaturePair")]
46 RefreshSecretSignaturePair(refresh_secret_signature_pair::Request),
47 #[schemars(title = "RefreshSecretSignaturePairRequestSchema")]
48 RefreshSecretSignaturePairRequestSchema(refresh_secret_signature_pair::request_schema::Request),
49 #[schemars(title = "RefreshSecretSignaturePairResponseSchema")]
50 RefreshSecretSignaturePairResponseSchema(refresh_secret_signature_pair::response_schema::Request),
51 #[schemars(title = "Secret")]
52 Secret(secret::Request),
53 #[schemars(title = "Signature")]
54 Signature(signature::Request),
55}
56
57#[objectiveai_sdk_macros::json_schema_ignore]
60#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
61#[schemars(rename = "cli.command.daemon.config.Response")]
62#[serde(untagged)]
63pub enum Response {
64 #[schemars(title = "Get")]
65 Get(get::Response),
66 #[schemars(title = "GetRequestSchema")]
67 GetRequestSchema(get::request_schema::Response),
68 #[schemars(title = "GetResponseSchema")]
69 GetResponseSchema(get::response_schema::Response),
70 #[schemars(title = "Set")]
71 Set(set::Response),
72 #[schemars(title = "SetRequestSchema")]
73 SetRequestSchema(set::request_schema::Response),
74 #[schemars(title = "SetResponseSchema")]
75 SetResponseSchema(set::response_schema::Response),
76 #[schemars(title = "Address")]
77 Address(address::Response),
78 #[schemars(title = "RefreshSecretSignaturePair")]
79 RefreshSecretSignaturePair(refresh_secret_signature_pair::Response),
80 #[schemars(title = "RefreshSecretSignaturePairRequestSchema")]
81 RefreshSecretSignaturePairRequestSchema(refresh_secret_signature_pair::request_schema::Response),
82 #[schemars(title = "RefreshSecretSignaturePairResponseSchema")]
83 RefreshSecretSignaturePairResponseSchema(refresh_secret_signature_pair::response_schema::Response),
84 #[schemars(title = "Secret")]
85 Secret(secret::Response),
86 #[schemars(title = "Signature")]
87 Signature(signature::Response),
88}
89
90#[cfg(feature = "mcp")]
91impl crate::cli::command::CommandResponse for Response {
92 fn into_mcp(self) -> crate::cli::command::McpResponseItem {
93 match self {
94 Response::Get(v) => v.into_mcp(),
95 Response::GetRequestSchema(v) => v.into_mcp(),
96 Response::GetResponseSchema(v) => v.into_mcp(),
97 Response::Set(v) => v.into_mcp(),
98 Response::SetRequestSchema(v) => v.into_mcp(),
99 Response::SetResponseSchema(v) => v.into_mcp(),
100 Response::Address(v) => v.into_mcp(),
101 Response::RefreshSecretSignaturePair(v) => v.into_mcp(),
102 Response::RefreshSecretSignaturePairRequestSchema(v) => v.into_mcp(),
103 Response::RefreshSecretSignaturePairResponseSchema(v) => v.into_mcp(),
104 Response::Secret(v) => v.into_mcp(),
105 Response::Signature(v) => v.into_mcp(),
106 }
107 }
108}
109
110impl TryFrom<Command> for Request {
111 type Error = crate::cli::command::FromArgsError;
112 fn try_from(command: Command) -> Result<Self, Self::Error> {
113 match command {
114 Command::Get(cmd) => match cmd.schema {
115 None => Ok(Request::Get(get::Request::try_from(cmd.args)?)),
116 Some(get::Schema::RequestSchema(args)) =>
117 Ok(Request::GetRequestSchema(get::request_schema::Request::try_from(args)?)),
118 Some(get::Schema::ResponseSchema(args)) =>
119 Ok(Request::GetResponseSchema(get::response_schema::Request::try_from(args)?)),
120 },
121 Command::Set(cmd) => match cmd.schema {
122 None => Ok(Request::Set(set::Request::try_from(cmd.args)?)),
123 Some(set::Schema::RequestSchema(args)) =>
124 Ok(Request::SetRequestSchema(set::request_schema::Request::try_from(args)?)),
125 Some(set::Schema::ResponseSchema(args)) =>
126 Ok(Request::SetResponseSchema(set::response_schema::Request::try_from(args)?)),
127 },
128 Command::Address { command } =>
129 Ok(Request::Address(address::Request::try_from(command)?)),
130 Command::RefreshSecretSignaturePair(cmd) => match cmd.schema {
131 None => Ok(Request::RefreshSecretSignaturePair(
132 refresh_secret_signature_pair::Request::try_from(cmd.args)?,
133 )),
134 Some(refresh_secret_signature_pair::Schema::RequestSchema(args)) =>
135 Ok(Request::RefreshSecretSignaturePairRequestSchema(
136 refresh_secret_signature_pair::request_schema::Request::try_from(args)?,
137 )),
138 Some(refresh_secret_signature_pair::Schema::ResponseSchema(args)) =>
139 Ok(Request::RefreshSecretSignaturePairResponseSchema(
140 refresh_secret_signature_pair::response_schema::Request::try_from(args)?,
141 )),
142 },
143 Command::Secret { command } =>
144 Ok(Request::Secret(secret::Request::try_from(command)?)),
145 Command::Signature { command } =>
146 Ok(Request::Signature(signature::Request::try_from(command)?)),
147 }
148 }
149}
150
151impl crate::cli::command::CommandRequest for Request {
152 fn request_base(&self) -> &crate::cli::command::RequestBase {
153 match self {
154 Request::Get(inner) => inner.request_base(),
155 Request::GetRequestSchema(inner) => inner.request_base(),
156 Request::GetResponseSchema(inner) => inner.request_base(),
157 Request::Set(inner) => inner.request_base(),
158 Request::SetRequestSchema(inner) => inner.request_base(),
159 Request::SetResponseSchema(inner) => inner.request_base(),
160 Request::Address(inner) => inner.request_base(),
161 Request::RefreshSecretSignaturePair(inner) => inner.request_base(),
162 Request::RefreshSecretSignaturePairRequestSchema(inner) => inner.request_base(),
163 Request::RefreshSecretSignaturePairResponseSchema(inner) => inner.request_base(),
164 Request::Secret(inner) => inner.request_base(),
165 Request::Signature(inner) => inner.request_base(),
166 }
167 }
168
169 fn request_base_mut(&mut self) -> Option<&mut crate::cli::command::RequestBase> {
170 match self {
171 Request::Get(inner) => inner.request_base_mut(),
172 Request::GetRequestSchema(inner) => inner.request_base_mut(),
173 Request::GetResponseSchema(inner) => inner.request_base_mut(),
174 Request::Set(inner) => inner.request_base_mut(),
175 Request::SetRequestSchema(inner) => inner.request_base_mut(),
176 Request::SetResponseSchema(inner) => inner.request_base_mut(),
177 Request::Address(inner) => inner.request_base_mut(),
178 Request::RefreshSecretSignaturePair(inner) => inner.request_base_mut(),
179 Request::RefreshSecretSignaturePairRequestSchema(inner) => inner.request_base_mut(),
180 Request::RefreshSecretSignaturePairResponseSchema(inner) => inner.request_base_mut(),
181 Request::Secret(inner) => inner.request_base_mut(),
182 Request::Signature(inner) => inner.request_base_mut(),
183 }
184 }
185}
186
187#[cfg(feature = "cli-executor")]
188pub async fn execute<E: crate::cli::command::CommandExecutor>(
189 executor: &E,
190 request: Request,
191
192 agent_arguments: Option<&crate::cli::command::AgentArguments>,
193 ) -> Result<
194 std::pin::Pin<Box<dyn futures::Stream<Item = Result<Response, E::Error>> + Send>>,
195 E::Error,
196> {
197 use futures::StreamExt;
198 let stream: std::pin::Pin<Box<dyn futures::Stream<Item = Result<Response, E::Error>> + Send>> =
199 match request {
200 Request::Get(req) => {
201 let value = get::execute(executor, req, agent_arguments).await?;
202 Box::pin(crate::cli::command::StreamOnce::new(Ok(
203 Response::Get(value),
204 )))
205 }
206 Request::GetRequestSchema(req) => {
207 let value = get::request_schema::execute(executor, req, agent_arguments).await?;
208 Box::pin(crate::cli::command::StreamOnce::new(Ok(
209 Response::GetRequestSchema(value),
210 )))
211 }
212 Request::GetResponseSchema(req) => {
213 let value = get::response_schema::execute(executor, req, agent_arguments).await?;
214 Box::pin(crate::cli::command::StreamOnce::new(Ok(
215 Response::GetResponseSchema(value),
216 )))
217 }
218 Request::Set(req) => {
219 let value = set::execute(executor, req, agent_arguments).await?;
220 Box::pin(crate::cli::command::StreamOnce::new(Ok(
221 Response::Set(value),
222 )))
223 }
224 Request::SetRequestSchema(req) => {
225 let value = set::request_schema::execute(executor, req, agent_arguments).await?;
226 Box::pin(crate::cli::command::StreamOnce::new(Ok(
227 Response::SetRequestSchema(value),
228 )))
229 }
230 Request::SetResponseSchema(req) => {
231 let value = set::response_schema::execute(executor, req, agent_arguments).await?;
232 Box::pin(crate::cli::command::StreamOnce::new(Ok(
233 Response::SetResponseSchema(value),
234 )))
235 }
236 Request::Address(req) => {
237 let inner = address::execute(executor, req, agent_arguments).await?;
238 Box::pin(inner.map(|r| r.map(Response::Address)))
239 }
240 Request::RefreshSecretSignaturePair(req) => {
241 let value =
242 refresh_secret_signature_pair::execute(executor, req, agent_arguments).await?;
243 Box::pin(crate::cli::command::StreamOnce::new(Ok(
244 Response::RefreshSecretSignaturePair(value),
245 )))
246 }
247 Request::RefreshSecretSignaturePairRequestSchema(req) => {
248 let value = refresh_secret_signature_pair::request_schema::execute(
249 executor, req, agent_arguments,
250 )
251 .await?;
252 Box::pin(crate::cli::command::StreamOnce::new(Ok(
253 Response::RefreshSecretSignaturePairRequestSchema(value),
254 )))
255 }
256 Request::RefreshSecretSignaturePairResponseSchema(req) => {
257 let value = refresh_secret_signature_pair::response_schema::execute(
258 executor, req, agent_arguments,
259 )
260 .await?;
261 Box::pin(crate::cli::command::StreamOnce::new(Ok(
262 Response::RefreshSecretSignaturePairResponseSchema(value),
263 )))
264 }
265 Request::Secret(req) => {
266 let inner = secret::execute(executor, req, agent_arguments).await?;
267 Box::pin(inner.map(|r| r.map(Response::Secret)))
268 }
269 Request::Signature(req) => {
270 let inner = signature::execute(executor, req, agent_arguments).await?;
271 Box::pin(inner.map(|r| r.map(Response::Signature)))
272 }
273 };
274 Ok(stream)
275}
276
277#[cfg(feature = "cli-executor")]
278pub async fn execute_transform<E: crate::cli::command::CommandExecutor>(
279 executor: &E,
280 request: Request,
281 transform: crate::cli::command::Transform,
282
283 agent_arguments: Option<&crate::cli::command::AgentArguments>,
284 ) -> Result<
285 std::pin::Pin<Box<dyn futures::Stream<Item = Result<serde_json::Value, E::Error>> + Send>>,
286 E::Error,
287> {
288 let stream: std::pin::Pin<Box<dyn futures::Stream<Item = Result<serde_json::Value, E::Error>> + Send>> =
289 match request {
290 Request::Get(req) => {
291 let value = get::execute_transform(executor, req, transform, agent_arguments).await?;
292 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
293 }
294 Request::GetRequestSchema(req) => {
295 let value = get::request_schema::execute_transform(executor, req, transform, agent_arguments).await?;
296 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
297 }
298 Request::GetResponseSchema(req) => {
299 let value = get::response_schema::execute_transform(executor, req, transform, agent_arguments).await?;
300 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
301 }
302 Request::Set(req) => {
303 let value = set::execute_transform(executor, req, transform, agent_arguments).await?;
304 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
305 }
306 Request::SetRequestSchema(req) => {
307 let value = set::request_schema::execute_transform(executor, req, transform, agent_arguments).await?;
308 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
309 }
310 Request::SetResponseSchema(req) => {
311 let value = set::response_schema::execute_transform(executor, req, transform, agent_arguments).await?;
312 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
313 }
314 Request::Address(req) => {
315 let inner = address::execute_transform(executor, req, transform, agent_arguments).await?;
316 Box::pin(inner)
317 }
318 Request::RefreshSecretSignaturePair(req) => {
319 let value = refresh_secret_signature_pair::execute_transform(
320 executor, req, transform, agent_arguments,
321 )
322 .await?;
323 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
324 }
325 Request::RefreshSecretSignaturePairRequestSchema(req) => {
326 let value = refresh_secret_signature_pair::request_schema::execute_transform(
327 executor, req, transform, agent_arguments,
328 )
329 .await?;
330 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
331 }
332 Request::RefreshSecretSignaturePairResponseSchema(req) => {
333 let value = refresh_secret_signature_pair::response_schema::execute_transform(
334 executor, req, transform, agent_arguments,
335 )
336 .await?;
337 Box::pin(crate::cli::command::StreamOnce::new(Ok(value)))
338 }
339 Request::Secret(req) => {
340 let inner = secret::execute_transform(executor, req, transform, agent_arguments).await?;
341 Box::pin(inner)
342 }
343 Request::Signature(req) => {
344 let inner = signature::execute_transform(executor, req, transform, agent_arguments).await?;
345 Box::pin(inner)
346 }
347 };
348 Ok(stream)
349}
350
351#[cfg(feature = "cli-listener")]
354pub enum ListenerExecution {
355 Get(get::ListenerExecution),
356 GetRequestSchema(get::request_schema::ListenerExecution),
357 GetResponseSchema(get::response_schema::ListenerExecution),
358 Set(set::ListenerExecution),
359 SetRequestSchema(set::request_schema::ListenerExecution),
360 SetResponseSchema(set::response_schema::ListenerExecution),
361 Address(address::ListenerExecution),
362 RefreshSecretSignaturePair(refresh_secret_signature_pair::ListenerExecution),
363 RefreshSecretSignaturePairRequestSchema(refresh_secret_signature_pair::request_schema::ListenerExecution),
364 RefreshSecretSignaturePairResponseSchema(refresh_secret_signature_pair::response_schema::ListenerExecution),
365 Secret(secret::ListenerExecution),
366 Signature(signature::ListenerExecution),
367}