Skip to content

Plataforma técnica · Sevastopol

Registry en Sevastopol

Islands Registry Agents

RegistryViewIsland muestra el estado de agentes externos del ecosistema en la vista /registry. Cada agente reportado tiene nombre, rol, lenguaje, puertos opcionales, URL opcional y root_path. El frontend no chequea puertos directamente — delega esa responsabilidad al Orchestrator para evitar restricciones de CORS desde el navegador.

Es una feature opcional: depende de una fuente de registry configurada en el backend. En entornos sin registry, la island muestra un empty state explicativo en lugar de error.

DecisiónMotivo
Sin auto-refresh (botón “Refrescar Estado” manual)El chequeo de puertos es caro (TCP connect con timeout); polear cada N segundos sobrecarga sin beneficio. El operador refresca cuando necesita estado actualizado.
Empty state explicativo, no errorSin registry configurado no es un fallo — es ausencia de feature. El card central explica que la vista depende de una fuente externa, con label “Feature opcional · source externo requerido” para distinguir de error real.
Toast solo en error de redError de fetch o respuesta no-OK dispara toast; el empty state no. Separa “fuente ausente” de “fuente caída”.
Status visual binario (active vs no-active)El tipo soporta active / inactive / unknown pero la UI agrupa inactive + unknown con el mismo styling gris. Reduce ruido visual cuando el registry todavía no clasifica algún agente.
Pulse animation solo en activebg-emerald-500 animate-pulse señala vida. Los inactivos quedan estáticos.
Glow lateral por statusUna franja vertical de 1px en el borde izquierdo del card (bg-emerald-500 activo / bg-zinc-300 resto) — lectura del estado sin leer texto.
Lenguaje codificado en avatar tipográficoPy (azul, python) / Js (verde, node) / As (naranja, astro) / Ts (default). 10×10 avatar coloreado en vez de íconos — sobrevive a cambios del catálogo de lenguajes sin actualizar assets.
root_path truncado con tooltipPath completo en title del <code> para evitar wrap en cards pequeños.
Puertos como chips con nombre + número8000 (http) en chip primario — el operador necesita ambos campos juntos para entender qué expone el agente.
URL opcional con icon de external-linkLink con target="_blank" y la flecha de “abrir en nueva pestaña”. Solo aparece si el agente reporta url.
hideCloseButton={true}La vista es una página, no un modal — el botón de cerrar del IslandBase se oculta.
EstadoLecturaIndicador visual
activeEl registry confirma que el puerto responde.Pill verde + pulse. Glow lateral verde.
inactivePuerto cerrado o timeout.Pill gris. Glow lateral gris.
unknownSin puerto definido o sin clasificación.Igual que inactive (UI agrupa).
CampoOrigenDisplay
name, roleIdentificación del agente.Título + badge en cabecera del card.
languagepython / node / astro / otros.Avatar tipográfico coloreado.
statusEstado del chequeo del Orchestrator.Pill + glow lateral.
root_pathPath filesystem del agente.<code> truncado con tooltip.
portsRecord<string, number> (nombre → puerto).Chips con puerto (nombre).
urlURL pública si aplica.Link “Abrir interfaz” en nueva pestaña.
  • Grid responsivo: grid-cols-1 (mobile) → md:grid-cols-2lg:grid-cols-3.
  • Cards con overflow-hidden, hover muestra borde highlight.
  • Scroll vertical en el contenedor del grid para volúmenes grandes.

Ninguno. La island no usa useActiveTenant ni useActivePeriod — el registry es a nivel de plataforma, no per-tenant.

ComponenteUso
IslandBaseWrapper con title, description, actions, isLoading.
ToastProvider + useToastToast en error de red.
Método + rutaUso
GET /api/agent/registryLista de agentes con estado. Vacío si no hay registry configurado.

Proxy en pages/api/agent/registry.ts con createProxy("/api/agent/registry") — forwarder simple al Orchestrator.

El Orchestrator mantiene la lógica de chequeo (TCP probe con timeout). Cuando no hay registry configurado el endpoint devuelve lista vacía — el frontend la trata como empty state.

  • Nostromo y otros agentes del ecosistema reportan al registry cuando está configurado.
  • Auth valida la sesión en el fetch (authenticatedFetch).
  • Dashboard comparte el patrón de polling/lectura externa pero refresca automáticamente (60s briefing, 30s monitoring); aquí el refresh es manual por costo del chequeo de puertos.

Estas relaciones se documentan en cada destino, no aquí.