🏗️ Arquitectura de Microkernel Reactivo
Firefly JS se basa en una arquitectura de microkernel altamente desacoplada y reactiva. Imagina que el sistema es como un estudio de grabación: el Kernel es la mesa de mezclas, los Plugins son los micrófonos y sensores, y las Tools son los ingenieros que deciden qué hacer con el sonido.
Se compone de cuatro pilares fundamentales:
🧭 Los 4 Pilares del Orquestador
1. Config (firefly.config.ts) 📋
Es la declaración de intenciones. Es el único lugar donde le dices a Firefly qué quieres que haga. Define qué piezas existen y con qué parámetros operan. El Kernel no adivina; lee este archivo para saber qué cargar y cómo configurarlo.
2. Bootstrap 🚀
Es el director de escena. Su única misión es despertar a las piezas en el orden correcto y decidir cuánto tiempo debe estar encendido el sistema:
- Modo Run: Como una "foto"; ejecuta las tareas y apaga el sistema al terminar. Ideal para chequear errores antes de subir código.
- Modo Watch: Como un "video en vivo"; mantiene el Kernel encendido para reaccionar a cambios en tiempo real mientras programas.
3. Kernel (Cerebro Reactivo) 🧠
Es el "aire" que respiran las piezas. No tiene lógica de negocio propia (no sabe qué es un archivo o un contrato). Solo ofrece:
- Registro: Una lista de quién está conectado.
- Bus de Eventos: Un canal de radio donde las piezas gritan lo que pasa ("¡He terminado de leer!") y otras escuchan para actuar.
4. Plugins vs Tools 🔌🛠️
Esta es la distinción más importante:
- Plugins (Capacidades): Son los que "dan" información. Por ejemplo, leer el disco o conectarse a una IA.
- Tools (Acciones): Son las que "hacen" algo con esa información. Por ejemplo, pintar el árbol en consola o avisarte si rompiste una regla.
🔄 Dinámica Reactiva: Drivers vs Procesos
Diferenciamos cómo actúan los componentes para que el sistema sea eficiente:
🧩 Plugins de Ejecución (Procesos)
Hacen una tarea y devuelven un resultado. Son como pedir una pizza: haces el pedido (await plugin.process()) y esperas a que llegue.
📡 Plugins de Mensajería (Drivers)
Están siempre encendidos. Son como un sensor de movimiento: se quedan vigilando y, cuando pasa algo, avisan al Bus de Eventos sin que nadie se lo pida explícitamente.
🛠️ Tools Orquestadoras
Son el pegamento. Pueden pedirle datos a un Plugin de proceso y luego quedarse escuchando a un Driver para actualizar el resultado automáticamente.
📊 Ciclo de Vida y Flujo (Bootstrap)
- Carga: El sistema lee tu configuración personalizada.
- Registro Secuencial: Se encienden los componentes uno por uno. Si un componente es un Driver, el sistema lo considera listo en cuanto abre su canal de escucha.
- Ejecución Inicial: Se disparan las herramientas para procesar el estado actual del proyecto.
- Vida en Memoria:
- En RUN: Al terminar las tareas, el sistema se apaga solo.
- En WATCH: El sistema se queda "despierto" esperando que los Drivers detecten cambios (ej: editaste un archivo) para avisar a las herramientas.
