oxios_kernel/kernel_handle/a2a_api.rs
1//! A2A API — agent-to-agent communication facade.
2
3use crate::a2a::{A2AMessageLogEntry, A2AProtocol};
4use std::sync::Arc;
5
6/// Agent-to-agent communication system calls.
7///
8/// Wraps [`A2AProtocol`] for inter-agent task delegation and messaging.
9/// Also exposes `oxi_sdk::MessageBus` for broadcast-based inter-agent communication.
10pub struct A2aApi {
11 protocol: Arc<A2AProtocol>,
12 /// Broadcast-based message bus for inter-agent communication.
13 message_bus: oxi_sdk::MessageBus,
14}
15
16impl A2aApi {
17 /// Create a new A2aApi with a MessageBus (capacity 256).
18 pub fn new(protocol: Arc<A2AProtocol>) -> Self {
19 Self {
20 protocol,
21 message_bus: oxi_sdk::MessageBus::new(256),
22 }
23 }
24
25 /// A2A protocol reference.
26 pub fn protocol(&self) -> &Arc<A2AProtocol> {
27 &self.protocol
28 }
29
30 /// Message bus reference for inter-agent broadcast messaging.
31 pub fn message_bus(&self) -> &oxi_sdk::MessageBus {
32 &self.message_bus
33 }
34
35 /// Subscribe to messages on the bus.
36 pub fn subscribe(&self) -> tokio::sync::broadcast::Receiver<oxi_sdk::InterAgentMessage> {
37 self.message_bus.subscribe()
38 }
39
40 /// Returns recent A2A message log entries.
41 ///
42 /// If `limit` is `Some(n)`, returns at most the last `n` entries.
43 pub fn get_message_log(&self, limit: Option<usize>) -> Vec<A2AMessageLogEntry> {
44 self.protocol.get_message_log(limit)
45 }
46
47 /// Returns message-log entries whose timestamp is within the last
48 /// `secs` seconds. Used by the topology endpoint to derive edges
49 /// from a sliding window of recent activity.
50 pub fn recent_messages(&self, secs: u64) -> Vec<A2AMessageLogEntry> {
51 self.protocol.recent_messages(secs)
52 }
53}