use shadi_mas::{
Epoch, PatternKind, TaskAdapter, TaskEnvelope,
experiments::{LiveA2ATaskAdapter, LiveA2ATaskAdapterConfig},
};
pub fn run(
prompt: &str,
to_agent_id: &str,
local_agent_id: &str,
endpoint: &str,
) -> anyhow::Result<()> {
std::env::set_var("SLIM_ENDPOINT", endpoint);
let config = LiveA2ATaskAdapterConfig {
endpoint: endpoint.to_string(),
agent_id: local_agent_id.to_string(),
local_name: Some(format!("agntcy/shadi/{local_agent_id}-a2a")),
peer_agent_id: to_agent_id.to_string(),
destination: Some(format!("agntcy/shadi/{to_agent_id}-a2a")),
};
let adapter = LiveA2ATaskAdapter::new(config);
let task_id = uuid::Uuid::new_v4().to_string();
println!("Delegating task {task_id} to '{to_agent_id}'...");
let task = TaskEnvelope {
task_id: task_id.clone(),
pattern: PatternKind::Development,
epoch: Epoch(0),
correlation_id: Some(format!("agentbridge-delegate-{task_id}")),
body: prompt.as_bytes().to_vec(),
};
adapter.dispatch(task).map_err(|e| anyhow::anyhow!("{e}"))?;
let dispatches = adapter
.dispatches()
.map_err(|e| anyhow::anyhow!("failed to read dispatches: {e}"))?;
if let Some(record) = dispatches.first() {
println!("Response from '{to_agent_id}' ({:.0}ms):", record.elapsed_ms);
println!("{}", record.response);
} else {
println!("Task dispatched successfully.");
}
Ok(())
}