Capítulo 3: Arquitectura

3.1 Arquitectura General

El protocolo adopta una arquitectura Provider-Consumer descentralizada, similar al modelo de descubrimiento por hipervínculos de la Web y al mecanismo de descubrimiento de nodos de redes P2P.

┌─────────────────────────────────────────────────────────┐
│              Dominio del Proveedor (Provider Domain)      │
│                                                         │
│  ┌──────────────────────────┐                           │
│  │ /.well-known/skill-sharing│                           │
│  └────────┬─────────────────┘                           │
│           │                                             │
│     ┌─────┴─────┐                                       │
│     ▼           ▼                                       │
│  ┌──────┐   ┌──────┐                                   │
│  │Desc.A│   │Desc.B│                                   │
│  └──┬───┘   └──┬───┘                                   │
│     ▼           ▼                                       │
│  ┌──────┐   ┌──────┐                                   │
│  │Endp.A│   │Endp.B│                                   │
│  └──────┘   └──────┘                                   │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│              Consumidor de Skills (iFay)                  │
│                                                         │
│  ┌────────────┐  ┌──────────────┐  ┌────────────┐      │
│  │Discovery   │→ │Schema        │→ │Invocation  │      │
│  │Client      │  │Validator     │  │Client      │      │
│  └────────────┘  └──────────────┘  └────────────┘      │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│         Opcional: Registro de Skills (Skill Registry)    │
│                                                         │
│  ┌────────────────────────────────────┐                 │
│  │          Registry Index            │                 │
│  │  (Referencias de índice → Descriptores de proveedores)│
│  └────────────────────────────────────┘                 │
└─────────────────────────────────────────────────────────┘

3.2 Flujo de Interacción del Protocolo

Fase 1: Descubrimiento de Skills

Consumidor (iFay)                    Proveedor
      │                                  │
      │── GET /.well-known/skill-sharing ─→│
      │                                  │
      │←── Índice de Skills (Skill Index) ─│
      │                                  │
      │── Schema Validator parsing ──→    │
      │                                  │

Fase 2: Invocación de Skills

Consumidor (iFay)                    Proveedor
      │                                  │
      │── POST {invocation_endpoint} ────→│
      │   (Solicitud de invocación)       │
      │                                  │
      │←── 202 Accepted ─────────────────│
      │   (Confirmación + ID de ejecución)│
      │                                  │
      │── GET {status_endpoint}/{id} ────→│
      │                                  │
      │←── Estado de ejecución ──────────│
      │                                  │
      │── GET {result_endpoint}/{id} ────→│
      │                                  │
      │←── Resultado de ejecución ───────│
      │                                  │

3.3 Tres Rutas de Descubrimiento

RutaMétodoDescripciónCaso de Uso
Well-Known URIGET /.well-known/skill-sharingMétodo principal de descubrimiento. Retorna el índice de todos los skills bajo el dominioExplorar todos los skills de un proveedor
URL directaGET {skill_descriptor_url}Obtención directa cuando la URL del Skill Descriptor es conocidaDirección de skill específica conocida
Consulta al registroGET {registry_url}/skills?type={type}Opcional. Búsqueda masiva a través del registroBúsqueda de skills por tipo

3.4 Arquitectura de Organización de Archivos

project-root/
├── docs/
│   ├── en/                          # Idioma base (inglés)
│   │   ├── specification/
│   │   │   ├── 2025-11-25/          # Documentos versionados
│   │   │   └── draft/               # Documentos borrador
│   │   ├── blueprint/               # Documentos blueprint
│   │   ├── community/               # Documentos comunitarios
│   │   ├── develop/                 # Guías de desarrollo
│   │   └── sdk/                     # Documentos SDK
│   └── ...                          # Otros idiomas (misma estructura)
├── schema/
│   ├── draft/                       # Schema borrador
│   │   ├── schema.json
│   │   ├── schema.ts
│   │   └── schema.mdx
│   └── 2025-10-25/                  # Schema versionado
│       ├── schema.json
│       ├── schema.ts
│       └── schema.mdx
└── src/                             # Código fuente de herramientas
    ├── validator.ts                 # Schema Validator
    ├── discovery.ts                 # Lógica del mecanismo de descubrimiento
    ├── invocation.ts                # Lógica del protocolo de invocación
    └── version.ts                   # Lógica de gestión de versiones

3.5 Responsabilidades de los Componentes

Discovery Client (Cliente de descubrimiento)

Responsable de localizar Skill Descriptors en la red descentralizada:

  • Enviar solicitudes a la Well-Known URI para obtener el índice de skills
  • Obtener Skill Descriptors conocidos vía URL directa
  • Búsqueda masiva a través del registro
  • Soporte de consultas de filtrado basadas en tipo de capacidad

Schema Validator

Responsable de validar la conformidad de los Skill Descriptors:

  • Usa schema.json para validar documentos Skill Descriptor
  • Parsea documentos válidos en objetos Skill Descriptor estructurados
  • Retorna campos en violación específicos y razones para documentos inválidos
  • Soporta serialización de objetos Skill Descriptor a Pretty Print JSON

Invocation Client (Cliente de invocación)

Responsable de la invocación remota de skills descubiertos:

  • Construcción de solicitudes de invocación estandarizadas
  • Procesamiento del flujo de autenticación
  • Gestión de consultas de estado de ejecución
  • Manejo de respuestas de timeout y error