#[derive(
Debug,
Clone,
Default,
PartialEq,
Eq,
serde::Serialize,
serde::Deserialize,
schemars::JsonSchema,
)]
#[schemars(rename = "cli.command.AgentArguments")]
pub struct AgentArguments {
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub agent_instance_hierarchy: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub agent_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub agent_full_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub agent_remote: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub response_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub response_ids: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub mcp_session_id: Option<String>,
}
impl AgentArguments {
#[cfg(feature = "cli-executor")]
pub fn apply_to_command(&self, command: &mut tokio::process::Command) {
let pairs: [(&str, &Option<String>); 7] = [
(
"OBJECTIVEAI_AGENT_INSTANCE_HIERARCHY",
&self.agent_instance_hierarchy,
),
("OBJECTIVEAI_AGENT_ID", &self.agent_id),
("OBJECTIVEAI_AGENT_FULL_ID", &self.agent_full_id),
("OBJECTIVEAI_AGENT_REMOTE", &self.agent_remote),
("OBJECTIVEAI_RESPONSE_ID", &self.response_id),
("OBJECTIVEAI_RESPONSE_IDS", &self.response_ids),
(crate::mcp::MCP_SESSION_ID_ENV, &self.mcp_session_id),
];
for (name, value) in pairs {
match value {
Some(v) => {
command.env(name, v);
}
None => {
command.env_remove(name);
}
}
}
}
}