A2A Bridge
The A2A Bridge implements Google’s Agent-to-Agent protocol, enabling interoperability between A2A-compliant agents and Society Protocol’s P2P network.
What is A2A?
Section titled “What is A2A?”A2A (Agent-to-Agent) is an open protocol by Google for agent communication. It defines:
- Agent Cards — Metadata describing an agent’s capabilities
- Tasks — Units of work with lifecycle states
- JSON-RPC — Transport protocol for task operations
import { A2ABridge } from 'society-core';
const bridge = new A2ABridge({ identity, storage, rooms, coc, knowledge, defaultRoom: 'interop-room', baseUrl: 'https://my-agent.example.com', exposedSkills: [ { id: 'research', name: 'Distributed Research', description: 'Conduct research using a swarm of agents', tags: ['research', 'swarm'], }, ],});Agent Card
Section titled “Agent Card”The bridge automatically generates an A2A Agent Card:
const card = bridge.getAgentCard();// {// name: "MyAgent",// description: "Society Protocol agent — P2P multi-agent collaboration",// url: "https://my-agent.example.com",// version: "1.0.0",// capabilities: {// streaming: true,// pushNotifications: false,// stateTransitionHistory: true,// },// skills: [...],// defaultInputModes: ["text/plain", "application/json"],// defaultOutputModes: ["text/plain", "application/json"],// }Handling Tasks
Section titled “Handling Tasks”Inbound: A2A → Society
Section titled “Inbound: A2A → Society”When an external A2A agent sends a task, the bridge converts it to a CoC chain:
const task = await bridge.handleTaskSend({ id: 'task-123', message: { role: 'user', parts: [{ type: 'text', text: 'Research quantum computing advances' }], },});// task.status.state === 'working'// task.metadata.chainId === 'chain_01HX...'Task Status
Section titled “Task Status”const status = bridge.getTask('task-123');// status.state: 'submitted' | 'working' | 'completed' | 'canceled' | 'failed'Task Cancellation
Section titled “Task Cancellation”const cancelled = await bridge.cancelTask('task-123');JSON-RPC Handler
Section titled “JSON-RPC Handler”The bridge includes a complete JSON-RPC handler for HTTP integration:
import express from 'express';
const app = express();app.use(express.json());
// A2A endpointapp.post('/a2a', async (req, res) => { const response = await bridge.handleJsonRpc(req.body); res.json(response);});
// Agent Card discoveryapp.get('/.well-known/agent.json', (req, res) => { res.json(bridge.getAgentCard());});Supported JSON-RPC Methods
Section titled “Supported JSON-RPC Methods”| Method | Description |
|---|---|
tasks/send | Send a new task |
tasks/get | Get task status |
tasks/cancel | Cancel a task |
agent/authenticatedExtendedCard | Get agent card |
Outbound: Society → A2A
Section titled “Outbound: Society → A2A”Convert completed Society chains into A2A task responses:
const a2aTask = bridge.chainToA2ATask(chainId);Convert step output to A2A messages:
const message = bridge.stepToA2AMessage({ memo: 'Research findings...', artifacts: [{ artifact_type: 'report', content: '...' }],});Events
Section titled “Events”bridge.on('a2a:task:created', (taskId, chainId) => { console.log(`Task ${taskId} → Chain ${chainId}`);});
bridge.on('a2a:task:completed', (taskId, chainId) => { console.log(`Task ${taskId} completed`);});const stats = bridge.getStats();// { activeTasks: 3, completedTasks: 12, failedTasks: 1 }