Volver

Funcionamiento A2A por WebSocket

Esta vista explica como el servidor A2A registra muchos agentes, asigna direcciones temporales, publica directorio y enruta mensajes directos por WebSocket.

Endpoint

Canal principal

ws://localhost:3000/ws/a2a

Ese endpoint no se abre como pagina web. Lo consume JavaScript desde el monitor, Angular o un proceso externo.

Servidor puente

Que hace

  • Recibe registros de agentes.
  • Mantiene el directorio A2A.
  • Publica estado en tiempo real.
  • Guarda logs tecnicos.
Escala actual

Agentes soportados

multiples agentes

El monitor trae controles para A/B, pero el servidor acepta cualquier agente con ID valido y le asigna una direccion nueva por conexion.

Servidor en 3 partes

Directory, Bridge y Decision Agent

Parte Que resuelve Comandos
Directory Lista agentes disponibles y conectados con direccion temporal unica. a2a.directory.request
Bridge Permite que un agente escriba a otro por connectionId. a2a.message.direct
Decision Agent Recomienda que agentes usar para cumplir un proyecto. a2a.decision.advise
Flujo

Como viaja un mensaje

Usuario / UI

Envia un comando o texto desde el monitor.

chat.send

Servidor puente

Valida el mensaje, consulta directorio y cambia actividad.

state

Agente destino

Procesa segun su especialidad y puede pedir ayuda a otro agente.

directMessages
Registro de agente

Que envia cada agente

{
  "type": "agent.start",
  "agent": {
    "id": "backend-01",
    "name": "Backend 01",
    "description": "Especialista en backend",
    "instruction": "Solo resuelve temas de backend.",
    "delayMs": 5000
  }
}
Estado global

Que reciben las pantallas

{
  "type": "state",
  "state": {
    "runtime": {},
    "activity": {},
    "directory": {},
    "logs": [],
    "directMessages": []
  }
}
A2A explicado

Que significa A2A en este proyecto

A2A significa Agent to Agent: un agente no trabaja aislado. Primero entiende la tarea, despues revisa su propia especialidad y, si detecta que una parte no le corresponde, consulta el directorio para encontrar otro agente que pueda ayudar.

En este demo el servidor actua como puente A2A. Los agentes no se hablan directamente por sockets separados; ambos se registran en el puente y el puente mantiene el estado comun: quien existe, quien esta conectado, que hace cada uno y que mensajes se enviaron.

La idea central: el usuario escribe a un agente, ese agente consulta el directorio, decide si necesita apoyo y el sistema registra esa colaboracion para que sea visible en chat, tabla y logs.

Directory Agent

Como decide a quien pedir ayuda

  1. El agente recibe una tarea desde chat.send.
  2. El servidor arma una lista con agentes online, excluyendo al agente que pidio ayuda.
  3. Se compara el texto de la tarea contra la description y la instruction de cada agente disponible.
  4. Si hay coincidencia util, se selecciona un auxiliar y se crea una entrada en directoryQueries.
  5. Si no hay auxiliar online, el agente responde desde su especialidad y deja claro que no encontro apoyo disponible.
Contexto compartido

Que sabe cada turno

  • runtime: si cada agente esta online o down.
  • activity: si esta idle, procesando, enviando o recibiendo.
  • directory.available: todos los agentes registrados como posibles.
  • directory.connected: agentes online con connectionId temporal.
  • directMessages: mensajes entre usuario, agente principal y agente auxiliar.
  • logs: detalle tecnico de cada evento del puente.
Secuencia A2A real

Ejemplo de colaboracion entre agentes

Paso Quien actua Que pasa Donde se ve
1 Usuario Envia una tarea a cualquier agente conectado desde el chat directo. Chat directo
2 Agente solicitante Evalua su especialidad y marca actividad procesando. Tabla de agentes
3 Directory Agent Lista agentes online y sus especialidades para encontrar apoyo. Directorio y logs
4 Agente solicitante -> agente recomendado Si otro agente encaja mejor en una parte, se envia una solicitud de apoyo por direccion A2A. Chat directo
5 Servidor puente Publica un nuevo state por WebSocket para todas las pantallas abiertas. Monitor, directorio, logs
6 Agente solicitante Responde al usuario explicando su parte y el apoyo solicitado. Chat directo
Recursos disponibles

Que tenemos en cada parte

Parte Disponible Uso
Servidor A2A /ws/a2a, estado en vivo, logs, directorio Puente central entre la web y los agentes.
Agente configurable id, name, description, instruction, delayMs Agente configurable con especialidad propia.
Otro agente configurable id, name, description, instruction, delayMs Otro agente configurable para ayudar o complementar.
Directory Agent available, connected, connectionId, especialidad Permite saber quien existe, quien esta online y quien puede ayudar.
Monitor web Registro, canal, chat directo, tabla de agentes, logs Control visual para usuario no tecnico.
HTML de directorio Conectados y disponibles en tiempo real Consulta simple del directorio A2A.
Mensajes WebSocket

Comandos aceptados

  • agent.start: registra y levanta un agente.
  • agent.stop: detiene un agente.
  • a2a.resource.deliver: entrega textos, JSON, URLs, archivos, elementos o recursos a un agente.
  • a2a.processing.start: ordena iniciar procesamiento y marca al agente como procesando.
  • a2a.processing.finish: registra resultado y cierra el procesamiento.
  • a2a.agent.free: el agente informa al servidor que ya esta libre para recibir otra tarea.
  • channel.connect: conecta el canal A2A.
  • channel.disconnect: desconecta el canal.
  • chat.send: envia texto a un agente.
  • conversation.step: fuerza el siguiente turno.
  • conversation.finish: termina la conversacion.
  • logs.clear: limpia logs tecnicos.
Actividad

Estados visibles

  • down: agente apagado.
  • online: agente registrado en el puente.
  • idle: esperando trabajo.
  • procesando: analizando mensaje.
  • enviando: enviando respuesta.
  • recibiendo: recibiendo mensaje.
  • desconectado: sin actividad en canal.
Proceso real

Cuando el usuario escribe al agente

  1. La UI envia chat.send al servidor WebSocket.
  2. El servidor marca al agente como procesando.
  3. El agente consulta el directorio para saber que otros agentes existen y cuales estan conectados.
  4. Si hay un agente mas idoneo para una parte del trabajo, lo selecciona como apoyo.
  5. El servidor registra la consulta al directorio y publica el nuevo state.
  6. La respuesta aparece en el chat y los logs muestran el detalle tecnico.