objectiveai_sdk/cli/command/agents/enqueue/
mod.rs1use crate::cli::command::CommandRequest;
10use crate::cli::command::agents::message::RequestMessage;
11use crate::cli::command::agents::selector::AgentSelector;
12
13#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
14#[schemars(rename = "cli.command.agents.enqueue.Request")]
15pub struct Request {
16 pub path_type: Path,
17 pub agent: AgentSelector,
22 pub message: RequestMessage,
25 #[serde(default, skip_serializing_if = "Option::is_none")]
29 #[schemars(extend("omitempty" = true))]
30 pub key: Option<String>,
31 #[serde(flatten)]
32 pub base: crate::cli::command::RequestBase,
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
36#[schemars(rename = "cli.command.agents.enqueue.Path")]
37pub enum Path {
38 #[serde(rename = "agents/enqueue")]
39 AgentsEnqueue,
40}
41
42impl CommandRequest for Request {
43 fn into_command(&self) -> Vec<String> {
44 let mut argv = vec!["agents".to_string(), "enqueue".to_string()];
45 self.agent.push_flags(&mut argv);
46 self.message.push_flags(&mut argv);
47 if let Some(key) = &self.key {
48 argv.push("--key".to_string());
49 argv.push(key.clone());
50 }
51 self.base.push_flags(&mut argv);
52 argv
53 }
54
55 fn request_base(&self) -> &crate::cli::command::RequestBase {
56 &self.base
57 }
58
59 fn request_base_mut(&mut self) -> Option<&mut crate::cli::command::RequestBase> {
60 Some(&mut self.base)
61 }
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
68#[schemars(rename = "cli.command.agents.enqueue.Response")]
69pub struct Response {
70 pub id: i64,
71 #[serde(default, skip_serializing_if = "Option::is_none")]
72 #[schemars(extend("omitempty" = true))]
73 pub agent_instance_hierarchy: Option<String>,
74 #[serde(default, skip_serializing_if = "Option::is_none")]
75 #[schemars(extend("omitempty" = true))]
76 pub agent_tag: Option<String>,
77}
78
79#[derive(clap::Args)]
80pub struct Args {
81 #[command(flatten)]
82 pub agent: crate::cli::command::agents::selector::AgentSelectorArgs,
83 #[command(flatten)]
84 pub message: MessageArgs,
85 #[arg(long)]
88 pub key: Option<String>,
89 #[command(flatten)]
90 pub base: crate::cli::command::RequestBaseArgs,
91}
92
93#[derive(clap::Args)]
96#[group(required = true, multiple = false)]
97pub struct MessageArgs {
98 #[arg(long)]
100 pub simple: Option<String>,
101 #[arg(long)]
103 pub inline: Option<String>,
104 #[arg(long)]
106 pub file: Option<std::path::PathBuf>,
107 #[arg(long)]
109 pub python_inline: Option<String>,
110 #[arg(long)]
112 pub python_file: Option<std::path::PathBuf>,
113}
114
115#[derive(clap::Args)]
116#[command(args_conflicts_with_subcommands = true)]
117pub struct Command {
118 #[command(flatten)]
119 pub args: Args,
120 #[command(subcommand)]
121 pub schema: Option<Schema>,
122}
123
124#[derive(clap::Subcommand)]
125pub enum Schema {
126 RequestSchema(request_schema::Args),
128 ResponseSchema(response_schema::Args),
130}
131
132impl TryFrom<Args> for Request {
133 type Error = crate::cli::command::FromArgsError;
134 fn try_from(args: Args) -> Result<Self, Self::Error> {
135 let message = if let Some(s) = args.message.simple {
136 RequestMessage::Simple(s)
137 } else if let Some(s) = args.message.inline {
138 let mut de = serde_json::Deserializer::from_str(&s);
139 let v = serde_path_to_error::deserialize(&mut de).map_err(|source| {
140 crate::cli::command::FromArgsError {
141 field: "inline",
142 source: source.into(),
143 }
144 })?;
145 RequestMessage::Inline(v)
146 } else if let Some(p) = args.message.file {
147 RequestMessage::File(p)
148 } else if let Some(s) = args.message.python_inline {
149 RequestMessage::PythonInline(s)
150 } else {
151 RequestMessage::PythonFile(args.message.python_file.unwrap())
154 };
155 let agent = AgentSelector::try_from(args.agent)?;
156 Ok(Self {
157 path_type: Path::AgentsEnqueue,
158 agent,
159 message,
160 key: args.key,
161 base: args.base.into(),
162 })
163 }
164}
165
166#[cfg(feature = "cli-executor")]
167pub async fn execute<E: crate::cli::command::CommandExecutor>(
168 executor: &E,
169 mut request: Request,
170
171 agent_arguments: Option<&crate::cli::command::AgentArguments>,
172 ) -> Result<Response, E::Error> {
173 request.base.clear_transform();
174 executor.execute_one(request, agent_arguments).await
175}
176
177#[cfg(feature = "cli-executor")]
178pub async fn execute_transform<E: crate::cli::command::CommandExecutor>(
179 executor: &E,
180 mut request: Request,
181 transform: crate::cli::command::Transform,
182
183 agent_arguments: Option<&crate::cli::command::AgentArguments>,
184 ) -> Result<serde_json::Value, E::Error> {
185 request.base.set_transform(transform);
186 executor.execute_one(request, agent_arguments).await
187}
188
189#[cfg(feature = "mcp")]
190impl crate::cli::command::CommandResponse for Response {
191 fn into_mcp(self) -> crate::cli::command::McpResponseItem {
192 crate::cli::command::McpResponseItem::JSONL(serde_json::to_value(self).unwrap())
193 }
194}
195
196pub mod request_schema;
197
198pub mod response_schema;