🔌 Plugins: Proveedores de Capacidades
Los Plugins son los proveedores de capacidades y servicios en Firefly JS. Su misión es alimentar al sistema con datos procesados del entorno o exponer conexiones externas a través del Bus de Eventos.
🏗️ Naturaleza de un Plugin
Un plugin es una clase que implementa la interfaz Plugin. Dependiendo de cómo interactúen con el sistema, se dividen en dos tipos:
1. Plugins de Ejecución (Procesos) 🧩
Responden a una llamada directa a través de su método process(). Son ideales para tareas que devuelven un resultado concreto y predecible.
- Ejemplo:
FileReaderPluginescanea el disco y devuelve un árbol de archivos.ContractReaderPluginprocesa ese árbol y devuelve reglas arquitectónicas.
2. Plugins de Mensajería (Drivers) 📡
Actúan como sensores activos. Se conectan a fuentes externas (IA, Sockets, Bus de eventos externo) y emiten eventos al Kernel de forma asíncrona.
- Implementación: Su método
initializearranca el listener y resuelve rápido para no bloquear el bootstrap, pero mantiene el canal abierto.
🛠️ Anatomía del Código
ts
import { Plugin, PluginContext } from '@fireflyjs/core'
export class MiPlugin implements Plugin<TOutput, TInput> {
readonly name = "mi-plugin-identificador"
// Opcional: Para configuración inicial y suscripción a eventos (Drivers)
initialize({ events }: PluginContext): void | Promise<void> {
// Escuchar eventos externos o internos
}
// Opcional: Contrato explícito para solicitar datos (Procesos)
async process(data?: TInput): Promise<TOutput> {
// Lógica de transformación o consulta
}
}🌍 Interacción con el Mundo Exterior
Firefly JS permite que los plugins interactúen con cualquier proveedor (APIs, IA, Bases de datos):
- Promesas y Timeouts: El método
processes asíncrono por definición. Es responsabilidad del plugin manejar sus propios reintentos y límites de tiempo. - Agnosticismo: Los plugins no deben conocer a las Tools que los consumen. Su única responsabilidad es entregar datos de calidad.
💡 ¿Qué deberías construir como Plugin?
- Lectores de Archivos: Extender el
FileReaderpara parsear formatos específicos (YAML, JSON, AST). - Conectores: Adaptadores para herramientas como Jira, GitHub Actions o modelos LLM.
- Proveedores de Reglas: Sistemas que extraigan contratos de bases de datos o servicios de gobernanza.
