changelog
v1.41.0 — 2026-04-03
Funcionalidades — UX de administracion y scheduling
- Rediseño de la pagina de tenants — La pagina de tenants para superadmin ahora usa una vista mas compacta y orientada por organizacion para revisar workspaces mas rapido.
- Herramienta MCP
setup_scheduling— Nueva herramienta idempotente que crea_fyso_schedules,_fyso_schedule_exceptionsy_fyso_bookingsantes de usar los flujos de scheduling en un tenant. - Mayor claridad en el selector de organizaciones — Las organizaciones personales que no te pertenecen ahora se muestran como
Personal (Owner Name)y exhiben badges de rol en el switcher.
Correcciones — Metadata y MCP
- Contexto de tenant en MCP stateless — Las requests MCP que no traen estado previo de sesion ahora recuperan correctamente el tenant seleccionado.
- Endurecimiento de export/import de metadata —
/metadata/exportconserva el envelope JSON estandar en respuestas normales, negocia gzip cuando corresponde, y/metadata/importrestaura correctamente filas de entidades y metadata nullable de custom fields. - Cobertura smoke para metadata — Se agregaron pruebas end-to-end para export/import de metadata y negociacion por headers para detectar regresiones antes.
Correcciones — Scheduling
- Bootstrap de scheduling y carreras al reservar — Los tenants nuevos ahora reciben las entidades requeridas de scheduling, la falta de setup devuelve un
422claro y la creacion de slots cierra una condicion de carrera TOCTOU.
v1.40.0 — 2026-04-01
Funcionalidades — App Distribution
- Clonado de metadata para tenants
instance— La creacion de un tenantinstanceahora puede clonar la metadata desde su tenant standalone de origen. - Forwarding de
modeysourceTenantId— MCPcreate_tenantyPOST /auth/tenantsahora propagan de forma consistente los campos de app distribution durante la creacion del tenant.
Funcionalidades — Developer Experience
- Scripts auxiliares de equipo — Se agregaron
lib/start-teamylib/team-statuspara iniciar e inspeccionar sesiones locales multi-agent/dev. - Cobertura E2E para grupos de herramientas MCP — Se agregaron smoke tests sobre todos los grupos de herramientas MCP documentados para validar el comportamiento del servidor en vivo.
Correcciones
- Aplicacion consistente de
instanceGuard— Las rutas de mutacion de schema ahora aplican la proteccion de tenants instance en el orden correcto de middlewares. - Correcciones de transporte de metadata — La exportacion de metadata ahora respeta
Accept-Encodingpara la negociacion de contenido, y las correcciones de importacion manejan inserts de entidades y valores nullable enisSystem. - Bootstrap de scheduling — Las entidades del sistema de scheduling se crean al crear un tenant para que los flujos de reservas funcionen en tenants nuevos sin reparacion manual.
- Pulido de landing y mensajeria — Los CTAs de signup ahora van a onboarding, la web incluye favicon y los hooks de mensajes de agentes manejan correctamente estado de thread undefined.
v1.34.0 — 2026-03-17
Funcionalidades
- Administración multi-usuario de tenant — Los propietarios de tenants pueden invitar usuarios con roles específicos. El flujo de invitación incluye el rol asignado. Incluye log de auditoría de asignación de roles, atribución de acciones administrativas y login de usuario-tenant via
/login/tenant. - resolve_depth en registro individual —
GET /entities/:name/records/:id?resolve_depth=1ahora resuelve relaciones sin necesitar?resolve=true. La profundidad máxima se alineó a 2 en todos los endpoints. - Reintento de agente por rate limit — El agent runner reintenta con backoff exponencial cuando el proveedor de IA devuelve 429 (rate limited).
Correcciones
- Forma consistente de error 429 — El middleware de rate limit ahora devuelve una respuesta estándar
{ error: "RATE_LIMITED", ... }en todos los endpoints. - Orden estable de registros — La consulta de registros agrega una clave de ordenamiento secundaria (
id) para evitar ordenamiento no determinístico cuando varios registros comparten el mismo valor de campo de ordenamiento. - Autenticación en ejecución de agente — El endpoint de ejecución de agente ahora acepta tokens de sesión y API keys, no solo tokens de administrador.
- Advertencia al crear agente — Crear un agente sin proveedor de IA configurado devuelve una advertencia en la respuesta en lugar de fallar silenciosamente al ejecutar.
select_tenantcon coincidencia parcial —select_tenantahora intenta coincidencia por prefijo cuando no hay coincidencia exacta de slug. Selecciona automáticamente si hay una sola coincidencia; lista candidatos si hay varias.generate_business_ruleeliminado — La herramienta poco confiable de NL-a-DSL fue eliminada. Usacreate_business_rulecon DSL generado por el agente.
v1.33.2 — 2026-03-15
Seguridad
- Payload de debug de IA restringido —
debug_payloaden las respuestas de IA ahora requiere que la configuraciónai.debugdel tenant esté habilitada. Deshabilitado por defecto en producción.
Correcciones
- Filtros en REST API —
?filters=campo = valorahora filtra correctamente los registros en endpoints de listado. Los filtros AND compuestos también funcionan. - resolve_depth en REST API —
?resolve_depth=1resuelve correctamente las relaciones en endpoints de listado. - Validación de referencias en reglas de negocio — Las referencias a campos en el DSL de reglas se validan contra el schema de la entidad al publicar, evitando fallos silenciosos.
v1.33.1 — 2026-03-15
Funcionalidades
- Editor de agentes mejorado — El editor de agentes ahora gestiona canales de forma 1:N, historial de prompts con rollback y múltiples proveedores de IA por agente.
- Dashboard de costos de IA — Nueva página de administración que muestra el gasto de IA por proveedor, modelo y agente a lo largo del tiempo.
- CRUD de plantillas de prompts — Crea, edita y elimina plantillas de prompts reutilizables desde el panel de administración.
- Carga masiva de documentos — Arrastra y suelta múltiples archivos para cargarlos a la base de conocimiento en una sola operación.
- Página de gestión de integraciones — Nueva página de administración para gestionar instancias de integraciones registradas (credenciales, estado, re-autenticación).
- Editor visual de reglas de negocio — Constructor de reglas con drag-and-drop que soporta acciones de llamada a IA.
v1.33.0 — 2026-03-15
Cambios que rompen compatibilidad
- RBAC puro — roles legacy eliminados — Los nombres de roles integrados fueron eliminados. Los roles ahora son plantillas completamente editables. Un rol por tenant puede marcarse como
is_owner. Las asignaciones de roles existentes se migran automáticamente; las configuraciones de roles personalizados se conservan.
Funcionalidades
- Canales de agente 1:N — Cada agente puede conectarse a múltiples canales simultáneamente (web widget, Telegram, etc.).
- Rate limiting y presupuesto de IA — Presupuestos de tokens y límites de frecuencia configurables por tenant y por agente, con alertas antes de superar el límite.
- Versionado de prompts con rollback — Cada cambio en un prompt se guarda como versión. Se puede revertir a cualquier versión anterior desde el editor de agentes.
- Streaming SSE para canales — Las respuestas de los agentes se transmiten token a token via Server-Sent Events. Telegram muestra indicadores de escritura.
- Múltiples proveedores de IA por tenant — Agrega varias configuraciones de proveedor (OpenAI, Anthropic o cualquier endpoint compatible con OpenAI). Se usa el primer proveedor activo; se pueden configurar cadenas de prioridad y fallback.
- Plantillas de prompts reutilizables — Define plantillas de prompts compartidas entre agentes. Las plantillas soportan sustitución de campos con sintaxis
{{campo}}. - Presets por industria — Configuraciones iniciales con un clic para tipos de negocio comunes: taller, clínica, tienda.
- Dashboard de costos de IA — Seguimiento de gasto en tiempo real por proveedor, modelo y agente.
- Integración con Telegram — Bot de Telegram como plugin de integración de primera clase. Se configura desde la página de integraciones.
- Indexación masiva de conocimiento — Carga múltiples documentos a la vez; la indexación se ejecuta en paralelo con reporte de progreso.
v1.32.0 — 2026-03-14
Funcionalidades
- SDK de integraciones — Se pueden construir integraciones de terceros con
defineAction/validateManifest. Las integraciones se registran con un almacén de credenciales, un registro de manifiestos y un ejecutor en tiempo de ejecución. - Integración con Discord via webhook — Integración integrada para enviar mensajes a canales de Discord. Se configura una vez y se usa en reglas de negocio.
- Herramientas MCP para agentes — Nuevo grupo de herramientas
fyso_agents:list,create,update,delete,run,test,list_runs,list_versions,rollback,list_templates,from_template. - Agent Runner — Ejecuta agentes de forma programática con seguimiento de sesión, historial de ejecución y snapshots de versión.
- Base de conocimiento en Agent Runner — Los agentes usan automáticamente la base de conocimiento del tenant para recuperación RAG durante las ejecuciones.
- Acción MCP
create_tenant— Provisiona nuevos tenants desde una sesión MCP (superadmin). - Herramienta MCP
report_feedback— Envía feedback estructurado desde una sesión de agente.
v1.31.0 — 2026-03-14
Funcionalidades
- Motor de IA — Fyso ahora incluye un motor de IA integrado. Configura adaptadores de proveedores de IA (endpoints compatibles con OpenAI, Anthropic) desde el panel de administración. Todas las llamadas de IA se registran con modelo, tokens, latencia y costo.
- Presupuesto y rate limiting de IA — Configura presupuestos mensuales de tokens y límites de frecuencia por tenant. El estimador de presupuesto muestra el gasto proyectado antes de habilitar.
- Contexto de ejecución (
$ctx) — Las reglas de negocio y las acciones de IA comparten un contexto de variables entre acciones ($ctx). Permite pasar datos entre pasos de regla sin almacenamiento externo. - Motor de plantillas — Sustitución de campos en prompts y acciones de reglas usando la sintaxis
{{campo}}. - Tipo de acción
ai_call— Las reglas de negocio pueden invocar un modelo de IA como acción, con la respuesta disponible en$ctx. - Tipo de acción
webhook_send— Las reglas de negocio pueden enviar webhooks HTTP como acción. - Herramienta MCP
test_ai_call— Playground de prompts: prueba cualquier prompt contra cualquier proveedor configurado y ve el desglose completo de tokens y costos. - Infraestructura de Agent Runner — Tablas internas de sesiones, ejecuciones y llamadas de herramientas. Base para el Agent Runner de v1.32.
- Generador semántico de herramientas — Los agentes generan automáticamente descripciones semánticas de las herramientas disponibles a partir de su definición
tools_scope. - Panel de prueba de agentes — Interfaz de chat en vivo para probar agentes en
/agents/:id/test, con inspector de ejecución (pestañas Resumen, Flujo, Pasos, Raw). - Memoria de agentes — Habilita
memory_enabled: trueen un agente para extraer y persistir hechos entre conversaciones. Los hechos se inyectan en el system prompt en las sesiones siguientes. - Cumplimiento GDPR — Aceptación de DPA, consentimiento de IA por sesión, supresión de datos y log de auditoría de consentimiento. Endpoints:
POST /api/auth/tenants/:id/dpa-accept,POST /api/rgpd/sessions/:sessionId/consent,DELETE /api/rgpd/users/:externalRef/ai-data. - Widget web — Integra un agente como burbuja de chat flotante con una sola etiqueta
<script>. Título, color y posición configurables. - Editor visual de reglas — Editor de reglas de negocio con drag-and-drop en
/agents/:slug/rules, con chips de variables de plantilla. - Visor de logs de IA —
/agents/:slug/logsmuestra el historial de ejecuciones con barra de estadísticas, panel de filtros y diálogo de detalle por ejecución.
v1.30.0 — 2026-03-12
Funcionalidades
- Identidad de bot — JWT con permisos de entidad —
POST /api/auth/bots/identifyahora devuelve un JWT con permisos de entidad con alcance. El JWT es aceptado por los endpoints de registros de entidad (middlewarerequireTenantContext), con permisos aplicados en cada solicitud sin bypass de admin. Los bots se verifican contrabot_identitiesen cada solicitud. (#953, #957) - Identidad de bot — schema extendido — La tabla
bot_identitiesincorpora columnaspermissions,createdByUserId,createdByTypepara soportar bots creados por usuarios con permisos con alcance. (#954) - Autoregistro de bots por usuarios del tenant — Los usuarios del tenant pueden registrar bots con alcance a su propio tenant sin intervención del admin. Los permisos del bot deben ser un subconjunto estricto de los permisos del usuario registrante. Límite por usuario: 5 bots activos. (#959)
Correcciones
- Paddle checkout devuelve transactionId — La respuesta de checkout ahora incluye
transactionIdpara el flujo de overlay de Paddle.js. (#958) - CSP headers de Paddle — Se agregaron los dominios de Paddle a
connect-srcyframe-srcde Content-Security-Policy. (#964) - Overlay de Paddle.js — El checkout ahora usa el overlay de Paddle.js en lugar de redirección, manteniendo a los usuarios en la página de facturación. (#956)
v1.29.0 — 2026-03-09
Funcionalidades
- Herramienta MCP
fyso_welcome— Nueva herramienta MCP que propone estructuras de entidades según el tipo de negocio. El plugin de Claude Code la invoca en la primera conexión para guiar a nuevos usuarios durante la configuración. (#942) - Dashboard con onboarding prioritario — El dashboard ahora muestra un banner de conexión MCP para las cuentas nuevas que aún no han conectado un cliente MCP. (#941)
- Acceso directo para tenant único — Los usuarios con acceso a un solo tenant omiten el selector de tenants y van directamente a su espacio de trabajo. (#939)
- Auto-provisionamiento en login con Google — El primer login con Google ahora crea automáticamente una cuenta y un tenant, eliminando la necesidad de un paso separado de registro. (#935)
Correcciones
- Registro abierto — Se eliminó el requisito de beta cerrada; se eliminaron herramientas MCP obsoletas. (#938)
- Validación de herramienta
add_field— La herramienta MCP ahora validafieldKeyyfieldTypeantes de enviar a la API. (#927)
v1.28.1 — 2026-03-08
Correcciones
- Bucle de crash de PgListener —
postgres.js .listen()no acepta un tercer callback; el argumento incorrecto activabahandleConnectionLost()de inmediato, causando un bucle infinito de reconexión. Se corrigió usando la opción de conexiónonclose. (#911) - Links de invitación de plataforma —
window.location.origingeneraba links confyso.devcuando el admin estaba en ese dominio. Ahora usaVITE_APP_URL, con valor por defectohttps://app.fyso.dev. (#911) - Páginas de aceptación de invitación — Las rutas relativas
/api/...no se resuelven en Cloudflare Pages. Se cambió agetApiUrl(). (#911) - CSP bloqueando llamadas a API — Se agregaron
https://*.amazonlightsail.com,wss://*.amazonlightsail.com,wss://*.fyso.devyhttps://cloudflareinsights.comaconnect-src. (#911) - Autenticación de platform keys en WebSocket — Las platform API keys (
fyso_pkey_*) ahora funcionan en conexiones WebSocket con aplicación completa de RBAC (filtrado de campos y filas en el broadcast). (#911)
v1.28.0 — 2026-03-07
Funcionalidades
- Registros en tiempo real via WebSocket — Actualizaciones en vivo en el navegador. Los triggers
pg_notifyde PostgreSQL se activan en INSERT/UPDATE/DELETE para todas las tablas de entidades. Un servicio PgListener se suscribe en una conexión dedicada; un SubscriptionManager enruta los eventos a los clientes WebSocket con filtrado de campos y filas por RBAC. El hook ReactuseRealtimeRecordsmaneja la reconexión con backoff exponencial e invalidación de cache de React Query. Los admins pueden habilitar o deshabilitar tiempo real por entidad. Endpoint WebSocket:wss://api.fyso.dev/ws. Ver referencia WebSocket. (#891–#909)
v1.27.0 — 2026-03-07
Funcionalidades
- Proveedor de pagos Paddle — Alternativa a Stripe, configurable via
PAYMENT_PROVIDER=paddle. Implementación completa con verificación de webhooks HMAC-SHA256 enPOST /api/webhooks/paddle. (#883, #884)
Refactorización
- Herramientas MCP consolidadas — 48 herramientas MCP individuales reemplazadas por 8 herramientas agrupadas (
fyso_data,fyso_schema,fyso_rules,fyso_auth,fyso_views,fyso_knowledge,fyso_deploy,fyso_meta). Se mantienen handlers backward-compatible. (#867, #868) - Herramientas MCP de canal y bot eliminadas — Se eliminaron herramientas obsoletas; las invitaciones se agruparon en
fyso_auth. (#874)
Seguridad
- Validación de TTL de API keys — Se rechazan valores NaN, Infinity, negativos y cero con errores 400. (#889)
- Headers de seguridad HTTP — CSP, X-Frame-Options, HSTS para Cloudflare Pages. (#870)
v1.26.0 — 2026-03-04
Cambios que rompen compatibilidad
- Formato de respuesta REST API simplificado — Los datos de registros ahora son planos:
response.data.items[n].campoen lugar deresponse.data.data[n].data.campo.PaginatedResult.datase renombró aPaginatedResult.items. Los campos de sistema (id,entityId,createdAt, etc.) siempre están presentes en el nivel superior. Los nombres de campos reservados (id,entityId,name,createdAt,updatedAt,createdBy,updatedBy) se rechazan al crear campos de entidad.
Correcciones
- URL base de
get_rest_api_spec— La herramienta MCP ahora usanew URL().originen lugar de reemplazo de cadena; todos los ejemplos curl incluyenX-Tenant-ID. (#862)
v1.25.0 — 2026-03-03
Funcionalidades
$currentUser.emaily$currentUser.nameen filterDsl — Las condiciones de filtro a nivel de fila pueden referenciar el email y el nombre del usuario autenticado. Los campos de auditoríacreated_byyupdated_byse establecen al crear y actualizar registros. (#856)- Acción
search_docsenfyso_knowledge— Los agentes MCP pueden buscar en la documentación de la plataforma Fyso directamente via la herramienta de conocimiento. (#859)
Correcciones
- Timestamps de registros —
created_at/updated_atse establecen explícitamente en la inserción; ya no devuelven null. (#855) - Reutilización de slugs de vistas — Los slugs de vistas eliminadas ahora pueden reutilizarse. (#857)
- Manejo de errores en rutas de vistas — Las rutas se envuelven en try-catch con salvaguardas de conexión a base de datos. (#858)
v1.24.0 — 2026-03-03
Seguridad
Una ola de endurecimiento que corrige 56 errores encontrados durante una revisión de seguridad interna. Correcciones clave:
- Filtro de filas SQL —
== nullahora generaIS NULL; se rechazan tokens finales, caracteres desconocidos (puntos y coma, backticks) y$currentTenantindefinido. (#811, #814, #816, #818) - RBAC — La acción comodín
*se expande a todas las acciones; múltiples filtros de filas de múltiples roles se combinan con OR; la unión deexcludeFieldssigue la semántica de unión correcta. (#819, #821, #822) - Autorización — Los niveles de acceso requeridos desconocidos fallan de forma cerrada. (#823)
- Almacenamiento de archivos — Protección contra path traversal (rechaza
..y bytes nulos); prevención de acceso entre tenants. (#833, #834) - Sesión — Los usuarios desactivados son bloqueados en
validateSession. (#826) - Logger de auditoría — Contraseñas, tokens y secretos son redactados de los logs. (#836)
- Facturación — Guardia contra inyección SQL en interpolación de schemas de tenant. (#825)
v1.23.0 — 2026-03-02
Seguridad
- Inyección SQL — Se usan queries parametrizadas en
metadata.service.ts. (#720) - Secretos — Se eliminó el fallback de clave de cifrado hardcodeada. (#721)
Funcionalidades
- Observabilidad de indexación de conocimiento — Dashboard de estadísticas, disparador de reindexación y estado del worker. (#679)
v1.22.0 — 2026-03-01
Funcionalidades
- UI de vistas de entidades — CRUD de vistas en el panel de administración, más una página de registros de vista con DynamicTable. (#740)
- Campo de título configurable — Las entidades pueden definir qué campo aparece como nombre de presentación del registro, con fallback inteligente. (#749)
Correcciones
- URL del MCP — Se corrigió la URL hardcodeada; ahora usa
mcp.fyso.dev/mcp. (#747) - Limpieza del MCP — Se eliminaron herramientas MCP de public-keys obsoletas. (#746)
v1.21.0 — 2026-03-01
Funcionalidades
- Vistas de entidades — proyecciones filtradas con permisos RBAC — Crea vistas con nombre sobre entidades usando condiciones en Filter DSL (ej:
reporter == $currentUser). Cada vista tiene permisos RBAC independientes usandoview:<slug>como clave de entidad. REST API: CRUD completo en/api/viewsmas acceso a registros en/api/views/:slug/records. Herramientas MCP:create_view,list_views,update_view,delete_view. Los filtros de vista se componen con los filtros del query string. El acceso admin omite filtros de usuario. 32 tests (10 integracion + 22 E2E cross-validation). (#735, closes #746)
Infraestructura
- Sitios estaticos: Cloudflare R2 + Worker — El hosting de sitios estaticos migro de almacenamiento en filesystem a Cloudflare R2 servido por un Cloudflare Worker. Se elimino el endpoint
validate-domain. (#731, closes #730)
Mantenimiento
- Eliminar referencias a PM2 y Caddy — Se elimino el workflow de deploy con PM2,
ecosystem.config.js, endpoints de health monitoring y targets de Caddy en el Makefile. Documentacion de deploy actualizada para la arquitectura actual de Lightsail + Cloudflare. (#736)
v1.20.0 — 2026-03-01
Funcionalidades
- Migracion de Next.js a Vite + React Router PWA — Se reemplazo Next.js 16 por Vite 6 + React Router v7 +
vite-plugin-pwa. El 90% de las paginas eran'use client'haciendo SSR innecesario. Tiempo de build reducido de ~45s a ~15s. 56 rutas con lazy loading.next-intlreemplazado porreact-i18next(wrapper de compatibilidad, sin cambios en call-sites).@sentry/nextjsreemplazado por@sentry/react. Los 11 API routes de Next.js eliminados (el frontend llama directamente al backend Hono). PWA con service worker para soporte offline e instalacion como app. (#719, closes #716) - Migracion de sitios estaticos a Cloudflare R2 + Worker — El hosting de sitios estaticos ahora usa Cloudflare R2 como almacenamiento de objetos + un Cloudflare Worker para servir los archivos, reemplazando el enfoque basado en filesystem. Los assets se suben a buckets R2; el Worker maneja el routing de requests. Se elimino el endpoint
validate-domain(el CF Worker maneja la validacion de dominios). Se elimino el bloque de sites en Caddy. (#731, closes #730) - Mejoras en tests E2E de agente MCP — Suite de tests E2E extendida para interacciones de agentes MCP con mayor confiabilidad. (#724)
Correcciones
- Limpieza de Docker en CI — Se agrego poda de imagenes y capas Docker en los pipelines de CI para prevenir agotamiento de disco en runners. (#726)
- Mejoras en tests de CI — Se mejoro la confiabilidad de tests y se redujeron fallas intermitentes en CI. (#728, #729)
v1.19.0 — 2026-02-28
Funcionalidades
- Mejoras en busqueda de knowledge base, ingestion por URL y tracking — La UI de busqueda incorpora slider de precision, barra de certeza con colores, toggle de fragmentos, filtro de uno-por-documento y un modal de ayuda. La ingestion por URL ahora descarga el contenido de la pagina en lugar de guardar la URL, con limpieza de HTML (elimina nav, header, footer, aside, scripts). Nuevos eventos:
knowledge_ingest(tokens, tiempo de procesamiento),knowledge_delete,knowledge_searchmejorado (tokens de embedding). Nuevo bloque de statsembedding_usage_30d. El filtroone_per_documentse movio de cliente a SQLDISTINCT ON. La herramienta MCPsearch_knowledgeahora soporta el parametroone_per_documentcon threshold por defecto corregido a 0.3. (#701, closes #702) - Visibilidad de permisos en roles — La UI de roles ahora muestra los permisos efectivos de cada rol, incluyendo acceso CRUD por entidad, visibilidad de campos (whitelist/blocklist) y filtros a nivel de fila. Los admins pueden ver de un vistazo lo que cada rol puede acceder sin inspeccionar JSON crudo. (#705)
- Tests E2E de agente MCP — Suite de tests end-to-end para interacciones de agentes MCP, validando invocaciones de herramientas contra la API en vivo. (#707)
Correcciones
- Actualizacion de test XSS — Se actualizaron los tests de seguridad XSS para coincidir con el comportamiento actual de sanitizacion. (#696)
- CI migrado a
ubuntu-latest— Los runners de GitHub Actions actualizados de versiones fijas de Ubuntu aubuntu-latest. (#697) - Mejora visual profesional de la UI — Mejoras de consistencia visual en todo el panel de administracion. (#700)
v1.18.0 — 2026-02-28
Funcionalidades
- CRUD de usuarios — modal de edicion, asignacion de roles, reset de password — El panel de administracion ahora incluye una interfaz de gestion de usuarios con edicion inline, dropdown de asignacion de roles y boton de reset de password. (#683)
- Autoservicio de perfil de usuario — Los usuarios pueden editar su nombre, cambiar su password y ver sus roles asignados desde una pagina de perfil. (#684)
- Envio de email de invitacion — Las invitaciones ahora incluyen un campo de email y un boton de envio que despacha el link de invitacion via Resend. (#685)
- Observabilidad de knowledge base — dashboard de indexacion y busqueda unificada — Nuevo dashboard mostrando estado de indexacion de documentos, conteo de chunks y progreso de embeddings. Busqueda unificada en todos los documentos de la knowledge base. (#686)
- Log de auditoria RBAC — Los eventos de asignacion y revocacion de roles ahora se registran con timestamp, actor y usuario objetivo. Visible en el panel de administracion. (#687)
- API keys autenticadas — scopes expandidos, rotacion y auth callout — Las API keys incorporan nuevos scopes, soporte de rotacion de keys y un mecanismo de callout de autenticacion para validacion externa. (#688, closes #662)
- Filtrado a nivel de fila via reglas de negocio
on_query— Nuevo tipo de triggeron_querypara reglas de negocio que compila condiciones DSL a clausulas SQLWHEREen tiempo de consulta. Se asigna unrowFilteren elEntityPermissionConfigde un rol para vincularlo a una reglaon_query. Semantica de union: si algun rol del usuario otorga acceso de lectura sin restricciones, no se aplica ningun filtro. Parser de expresiones personalizado (tokenizer + recursive-descent) genera SQL type-safe con Drizzle.!=usaIS DISTINCT FROMpara manejo correcto de NULL. (#692, closes #676) - Relaciones
has_manycon resolucion en cascada y permisos — Nuevo tipo de campohas_manypara lookups inversos uno-a-muchos (ej:factura→lineasviaforeignKey).findByIdahora soporta los query params?resolve=true&resolve_depth=Npara resolucion anidada. La resolucion en cascada respeta RBAC por entidad:rowFilter(nivel de fila),fields(whitelist),excludeFields(blocklist). Si el usuario no tiene permisoreaden una entidad relacionada, el campo se omite por completo. (#694, closes #677)
Correcciones
- Rutas proxy de API de Next.js faltantes — Se corrigieron las rutas de auth flows y reset password que no se proxeaban correctamente. (#682)
- Validacion de asignacion de roles via MCP — La asignacion de roles a traves de herramientas MCP ahora pasa por la misma validacion a nivel de servicio que la API REST. (#690, closes #675)
- Rate limit en envio de invitaciones — El endpoint de envio de invitaciones ahora tiene rate limit para prevenir abuso. (#693)
- Correcciones de integracion del nodo n8n — Se resolvieron problemas de compatibilidad con el nodo comunitario de n8n. (#691, closes #638)
v1.17.0 — 2026-02-24
Funcionalidades
- Permisos por entidad y campo en anonymous keys — Las anonymous API keys ahora soportan control de acceso granular via
entityPermissions. Permite restringir una key a entidades especificas (las no listadas devuelven403) y excluir campos sensibles de todas las respuestas viaexcludeFields. Las keys existentes sinentityPermissionsmantienen acceso irrestricto (backwards compatible). (#651, closes #643) - Gestion de APIs con control de acceso basado en roles (RBAC) — Definiciones de API con nombre, roles configurables y una matriz de permisos (
entidad × rol → [read, create, update, delete]). Se emiten keysfyso_pkey_*por rol. El middlewarerequirePlatformApiKeyaplica la matriz en cada request. La entidad comodin (*) otorga acceso a todas las entidades para un rol. CRUD completo para definiciones de API mas emision y revocacion de keys. Completamente independiente de las keysfyso_ak_*existentes. (#656, closes #642) - Invitaciones de plataforma — cuota de 5 invitaciones para cuentas gratuitas — Los usuarios
platform_adminpueden invitar hasta 5 personas a crear cuentas en el plan gratuito. Las invitaciones usan tokens hex-64 unicos, expiran en 7 dias y soportan ciclo de vida completo (crear, listar, revocar, validar, aceptar). La cuota trackea invitaciones activas; revocar libera un slot. El email de invitacion se envia via Resend. 5 endpoints bajo/api/platform/invitations. (#637, closes #630) - GET /api/usage/storage — desglose de almacenamiento por tenant — Nuevo endpoint que devuelve un desglose del almacenamiento consumido por categoria: base de datos (
pg_total_relation_size, cantidad de tablas, filas estimadas), knowledge base (bytes + cantidad de documentos) y bucket (bytes + cantidad de archivos).total_byteses la suma de todas las categorias. El bucket devuelve 0 en la version actual; el conteo completo de S3 esta planificado para una version futura. (#655, closes #650) - i18n para textos del popup PageHelp — El componente
PageHelpahora usa traducciones denext-intlen lugar de un mapaCOPYhardcodeado. Se agregaron las claves de pagina faltantes (roles,mcpConfig,webhooks,sites) a ambos archivos de locale. Las 14 claves de pagina se renderizan correctamente en EN y ES. (#634, closes #632) - Cloudflare wildcard DNS para subdominios de tenant — Se reemplaza Caddy por Cloudflare wildcard DNS (
*.fyso.dev) + nginx para el routing de subdominios de tenant. El nuevo middlewareresolveHostTenantextrae el slug del tenant del headerHost/x-forwarded-host, omitiendo subdominios reservados y paths de sitios estaticos.requireTenantContextusahostTenantSlugcomo fallback. nginx reemplaza Caddyfile; Cloudflare maneja la terminacion SSL. (#635, closes #633)
Refactorizacion
- Sistema unificado de tokens y roles — Nuevo middleware
resolveTokenque clasifica todos los tipos de tokens entrantes en un descriptor normalizado{tokenType, tokenRole}.ROLE_HIERARCHYextendida conanonymous(nivel 0).requireRole()leetokenRoleprimero, habilitando aplicacion consistente de roles en todos los tipos de tokens. Mapeo token-a-rol: sesion admin/JWT yfyso_ak_*→owner;anon_*→anonymous; sesion de usuario tenant → rol asignado al usuario. Todo el middleware existente queda sin cambios. (#652, closes #644)
Correcciones
- PDF generation: fallback de entidad desde la plantilla —
buildInputDataahora usatemplate.entidad_origencomo fallback cuandoentityNameno se pasa en la llamada a la API. Corrige PDFs en blanco cuando se proveerecordIdsinentityName(como hace el dialogo del designer). (#653, closes #639) - Plugin de tablas en PDF — Se agrego el plugin
tablede@pdfme/schemasal designer (frontend) y al generator (backend). Los campos tipo tabla reciben inputarray[][]en lugar de ser stringificados. (#653, closes #640, #641) - Upload binario de PDF a la knowledge base — Nuevo endpoint
POST /api/knowledge/documents/uploadque acepta multipart/form-data con un campofile(application/pdf, max 20 MB) y untitleopcional. Convierte el buffer a base64 y delega adocumentService.ingestDocumentpara chunking y generacion de embeddings. Tambien agrega el metodo clienteapi.knowledge.upload(file, title?). (#654, closes #648)
v1.16.0 — 2026-02-23
Funcionalidades
- Llaves publicas reemplazan las llaves anonimas — Las API keys anonimas (
anon_*) son reemplazadas por llaves publicas basadas en roles (fyso_pk_*). Cada llave publica ahora requiere unroleIdy hereda los permisos de entidad del rol. Los scopes (records:read,channels:read), TTL, rate limits y lista CORS funcionan igual que antes. Nuevas herramientas MCP:create_public_key,list_public_keys,revoke_public_key. Nuevos endpoints REST:GET/POST/DELETE /api/auth/public-keys. Autenticacion viaX-Public-Key,X-Anon-Key(legacy) oAuthorization: Bearer fyso_pk_*. Las rutas/auth/anonymous-keysse preservan por compatibilidad. (#670) - Gestion de APIs con RBAC — Define APIs con nombre, roles configurables y matriz de permisos por entidad (
read,create,update,delete). Emite llaves de plataforma (fyso_pkey_*) por rol — cada llave aplica la matriz en requests a/api/entities/*. Entidad comodin*otorga acceso a todas las entidades para un rol. Gestion via REST (GET/POST/PUT/DELETE /api/apis,GET/POST/DELETE /api/apis/:id/keys) o el panel Configuracion → Gestion de APIs. (#656, #659) - Invitaciones de plataforma — Los admins pueden invitar nuevos usuarios por email. Cada admin tiene una cuota de 5 invitaciones activas (vencimiento a los 7 dias). Los usuarios invitados se registran via
POST /api/platform/invitations/:token/accept. Gestion viaPOST/GET/DELETE /api/platform/invitationso el panel Plataforma → Invitaciones. (#637, #668) - Tablas en PDF — El Disenador de PDF ahora incluye un plugin de tabla: arrastra un elemento de tabla al canvas para definir columnas y filas. El Generador de PDF acepta input
array[][]para campos tipo tabla (array de filas, cada fila un array de celdas). (#653) - Base de conocimiento: carga binaria de PDF — Carga archivos PDF directamente via
POST /api/knowledge/documents/upload(multipart/form-data). Aceptafile(solo PDF, maximo 20 MB) ytitleopcional. El texto se extrae automaticamente y el documento se indexa en segundo plano. (#654) - Endpoint de uso de almacenamiento —
GET /api/usage/storagedevuelve un desglose del almacenamiento por tenant: tamano de base de datos (bytes exactos + cantidad de tablas + filas estimadas), tamano de la base de conocimiento (bytes + cantidad de documentos) y almacenamiento en bucket. (#655) - Nodo de n8n — Paquete oficial
n8n-nodes-fysopara automatizacion con n8n. El nodo Fyso admite 7 operaciones: listTenants, listEntities, createRecord, getRecord, listRecords, updateRecord, deleteRecord. El nodo Fyso Trigger escucha eventosrecord.created,record.updatedyrecord.deletedvia webhooks. Instalable desde el registro de nodos de comunidad de n8n. (#664) - Sistema de chequeo de salud de schemas — Nuevo
schema-health.serviceque detecta gaps de migracion en todos los schemas de tenant al iniciar. Verifica tablas, columnas, extensiones, indices y triggers faltantes. Dos endpoints de superadmin:GET /health/schemadevuelve un reporte completo con issues por tenant y SQL sugerido para corregir;POST /health/schema/fixre-ejecuta DDL en todos los tenants degradados (idempotente). Loguea warnings[schema-health]al arrancar si algun tenant esta degradado. (#612) - Gestion de invitaciones de tenant — Ciclo de vida completo de invitaciones para onboarding de miembros. Los admins crean invitaciones via
POST /api/invitations(con contexto de tenant) con email opcional, las listan viaGET /api/invitations, y las revocan viaDELETE /api/invitations/:token. Los superadmins ven todas las invitaciones cross-tenant viaGET /api/admin/platform/invitationscon filtros de status/tenantId y paginacion. Los endpoints publicosGET /auth/invite/:token(preview) yPOST /auth/invite/accept(registro via invitacion) permiten que los usuarios invitados se registren solos. Los codigos de registro de plataforma (POST /api/invitationssin contexto de tenant) siguen funcionando igual. (#616) - Deploys sin downtime — La API y el servidor MCP ahora usan PM2 en modo cluster con graceful shutdown. Los rolling restarts levantan un nuevo worker antes de apagar el anterior, eliminando gaps de requests durante los deploys. (#615)
- Gestion de invitaciones: invalidar y links listos para compartir —
DELETE /api/invitations/:tokendesactiva un codigo de invitacion de forma inmediata.POST /api/invitationsahora devuelve{ token, inviteUrl }en la respuesta, para compartir el link directamente sin construir la URL manualmente. (#613) - Herramienta MCP
update_user_password— Admins y owners del tenant pueden resetear la contraseña de cualquier usuario sin necesitar la contraseña actual. Usaupdate_user_password({ userId, newPassword }). Útil para recuperar acceso cuando un usuario está bloqueado. Se agregó al perfil de herramientascore. (#574) - Cloudflare for SaaS: SSL automático para dominios personalizados — Cuando
CLOUDFLARE_API_TOKENyCLOUDFLARE_ZONE_IDestán configurados, el setup de dominio personalizado ahora usa Cloudflare for SaaS. CF provisiona SSL automáticamente; los tenants agregan un único CNAME al fallback origin configurado. Un nuevo endpoint de webhook (POST /api/sites/cloudflare-webhook) recibe actualizaciones de estado SSL desde CF. Sin configuración, el flujo de verificación DNS manual se preserva sin cambios. (#569) - API keys anónimas — Anonymous API keys (
anon_*) para acceso público a recursos del tenant sin autenticación de usuario. Scopes configurables (records:read,channels:read), TTL obligatorio (1–365 días, default 90), rate limits por key, lista CORS y log de auditoría completo. Máximo 20 keys activas por tenant. Gestiona via MCP (create_anonymous_key,list_anonymous_keys,revoke_anonymous_key) o REST (GET/POST/DELETE /api/auth/anonymous-keys,GET /api/auth/anonymous-keys/:id/audit). (#547) - Autogestión de usuarios del tenant — Flujos de autogestión con feature flags para usuarios de tenant. El autoregistro (
POST /auth/tenant/register) crea un usuario con rolviewersin invitación del admin. El flujo de forgot-password envía un link de recuperación por email, siempre devuelve 200 para evitar enumeración de emails, con rate limit de 3 requests/15 min por IP. Los endpoints de reset-password y change-password completan el flujo. Los admins pueden resetear la contraseña de cualquier usuario viaPATCH /auth/tenant/users/:id/reset-password. Habilita con los flagsselfRegistrationEnabledypasswordResetEnableden la configuración del tenant. (#553) - Autenticación de requests con anonymous keys — Las anonymous keys ahora se aplican en las requests entrantes. Incluye la key con el header
X-Anon-KeyoAuthorization: Bearer anon_...para acceder a endpoints de entidades y canales sin autenticación de usuario.GET /api/entities/*requiere el scoperecords:read;GET /api/channels/*requierechannels:read. Las operaciones de escritura siempre devuelven401. Todos los errores de autenticación retornan un401genérico para evitar filtrar información. (#561) - Admin API keys — Keys de API a nivel de plataforma (
fyso_adm_*) con control de scopes granular (platform:read,platform:write,tenants:manage). Crear, listar, revocar y auditar keys víaGET/POST/DELETE /api/admin/platform/keys. Log de auditoría completo con cada creación, uso y revocación. Las keys se hashean con bcrypt y se muestran solo una vez al crearlas. (#543, #555) - docs.fyso.dev es ahora la URL oficial de la documentación. fyso.dev y www.fyso.dev sirven la landing page, con un link visible a docs en Navbar y Footer. (#532)
- Instancia dedicada
/health/detailed— devuelve campos extendidos de aislamiento:instance.id,instance.uptime_seconds,instance.region,database.type,security.network_isolation,security.public_db_access. Permite verificar el estado de aislamiento de instancias Enterprise. (#524) - Rollback de instancia dedicada — script
rollback.shpara revertir a un tag de imagen anterior con verificación de salud. (#524) - Imágenes Docker en GHCR —
fyso-api,fyso-mcp,fyso-migrateconstruidas y publicadas automáticamente en GHCR en cada push amainy en tags semver. (#524)
Correcciones
- URLs de sites estaticos cambiadas a
-sites.fyso.dev— Los sites estaticos ahora se sirven en{subdominio}-sites.fyso.deven lugar de{subdominio}.sites.fyso.dev. Esto es necesario para la cobertura del certificado wildcard de Cloudflare (*.fyso.dev). Actualiza cualquier URL hardcodeada o registro CNAME que apunte al patron anterior. Los dominios personalizados no se ven afectados. (#665) - PDF en blanco al usar
recordIdsinentityName—generate_pdfllamado solo conrecordId(sinentityName) ahora resuelve la entidad desde el campoentidad_origende la plantilla. Antes estas llamadas producian un PDF en blanco. (#653) - Instancia dedicada: presion en checkpoints de PostgreSQL — Bajo carga de escritura, el I/O de checkpoints saturaba el disco en instancias dedicadas (se observaron escrituras de 3.5 minutos por checkpoint). Se ajustaron
checkpoint_completion_target,wal_buffersymax_wal_sizeen eldocker-compose.ymldedicado.PG_SHARED_BUFFERSes configurable por tamaño de servidor via.env. (#611) - La respuesta de actualizar registro refleja campos calculados por after-save — Cuando una regla de negocio after-save escribe campos en el registro que se está actualizando, la respuesta del update ahora devuelve el estado final. Antes, solo la respuesta de create tenía este comportamiento; el update devolvía el snapshot previo a la regla. Un GET posterior siempre fue correcto; ahora el update es consistente con él. (#568)
- Hardening de seguridad: flujos de autenticación — El autoregistro (
POST /auth/tenant/register) ahora tiene rate limit de 5 requests por hora por IP+tenant. Los cambios de contraseña, resets y resets del admin ahora invalidan todas las sesiones activas del usuario afectado. Un nuevo token de reset de contraseña invalida cualquier token previo activo para ese usuario. (#573) - Reconexiones SSL en workers de base de datos — Los workers en segundo plano (job queue, servicio de embeddings) fallaban al reconectarse a RDS después de timeouts de inactividad por una incompatibilidad en la negociación SSL de postgres.js. Se reemplazó el modo string
ssl: 'require'por la forma de objetossl: { rejectUnauthorized: false }y se aumentóidle_timeoutde 20 s a 60 s para reducir reconexiones innecesarias. (#565) - Autenticación en rutas de gestión de anonymous keys —
GET /api/auth/anonymous-keysyPOST /api/auth/anonymous-keysahora devuelven correctamente401 Unauthorizedpara requests no autenticadas (antes devolvían400). (#562) - La respuesta de crear registro ahora refleja campos calculados por after-save — Cuando una regla de negocio after-save actualiza campos del registro recién creado, la respuesta de create ahora devuelve el estado final en lugar del snapshot previo a la regla. Un GET posterior mostraba los valores correctos; ahora la respuesta de create es consistente. (#544)
- Límite de concurrencia en el evaluador de reglas de negocio — Bajo alta concurrencia de escrituras, la evaluación de reglas podía agotar el pool de conexiones a la base de datos. Un semáforo limita ahora las evaluaciones concurrentes (por defecto: 8, configurable con la variable de entorno
RULE_EVAL_MAX_CONCURRENCY). Las evaluaciones excedentes se encolan en lugar de generar queries ilimitadas. (#545) - Entidades draft nunca publicadas visibles vía API —
getEntityByNameahora retornanullpara drafts sinpublishedVersioncuandoincludeDrafts=false. Antes, una entidad recién creada (nunca publicada) pasaba el guard y era accesible por la API de registros. (#533) - Estabilidad de reglas de negocio bajo carga concurrente — El pool de conexiones aumentó de 20 a 40 (
DB_MAX_CONNECTIONS). Un nuevo semáforo en el servicio de registros limita las evaluaciones concurrentes de reglas a 8 (MAX_CONCURRENT_RULES). Las accionesupdate_relatedafter-save que apuntan al mismo registro padre se agrupan en una sola escritura a la base de datos, reduciendo entradas WAL en cargas de escritura intensiva. (#577) - Entidades del sistema ocultas;
content_textrecuperado en documentos — Las entidades_fyso_*ya no aparecen en los resultados delist_entitiesni en la lista de entidades del panel. Los tenants existentes que no tenían la columnadocuments.content_textla reciben automáticamente en la próxima actualización DDL, restaurando la indexación de texto completo en la base de conocimiento. (#606)
v1.14.0 — 2026-02-21
Funcionalidades
- Página de administración Knowledge/RAG — Navega y gestiona documentos de la base de conocimiento desde el panel de administración (#496, #497)
- UI de administración de webhooks — Gestiona suscripciones de webhooks para eventos de entidades desde el panel de administración (#499)
- RAG fase 2: ingesta PDF/HTML + analíticas de búsqueda — Ingesta documentos PDF y HTML en la base de conocimiento; registra consultas de búsqueda con métricas de latencia y score (#371, #508)
- Landing page: sección de precios — 3 niveles de precios (Free/Pro/Enterprise) con toggle mensual/anual (#503)
- Landing page: sección de integraciones — Muestra integraciones con plataformas de automatización (n8n, Make, Zapier) (#504)
- Sitio de documentación Astro Starlight — Nuevo sitio de documentación con i18n ES/EN (#506)
Correcciones
- Panel de salud del superadmin: alinear nombres de campos con la API y mostrar procesos PM2 (#495)
- Validación SSRF en reglas http_callback + pruebas unitarias rollup/action (#498)
- Reintentar transacciones en fallo de serialización para reducir errores de deadlock (#502, #505)
- MCP: serializar
template_jsoncomo string en herramientacreate_pdf_template(#511) - MCP: usar
'ai'en lugar de'agent'parageneratedByen herramientas de reglas (#510)
Pruebas
- Pruebas de ciclo de vida de máquina de estados para transiciones de entidad/regla/flujo (#500)
- Pruebas de condición de carrera de concurrencia para webhooks, reglas, publicación de entidades, flujos (#501)
sidebar_position: 100
Changelog
Todos los cambios relevantes de Fyso están documentados aquí.
v1.12.0 — Seguridad y Billing (2026-02-20)
Seguridad
- Protección SSRF: bloqueo de rangos IPv4/IPv6 privados, DNS rebinding y bypass en forma hex
::ffff:7f00:1(#437, #438, #427) - Aislamiento de tenant en rules engine: datos de otros tenants ya no son accesibles via lookup/aggregate (#432)
- Prevención de SQL injection:
validateSchemaName()protege contra injection en nombres de entidades y campos - Auth boundary: tests completos de autenticación cubriendo 403 para contexto de tenant inválido (#434)
- Rules hardening: guard contra Infinity/NaN, advertencia de condicional sin default, fuzz tests (#418, #419, #423, #428)
- Lookup cross-tenant bloqueado: lookups de reglas ahora con scope del tenant solicitante (#426)
Billing
- Enforcement de planes: free (1 tenant / 3 entidades), pro/beta (5 tenants / ilimitado), enterprise (ilimitado) (#405, #406)
- HTTP 402 cuando se supera la cuota
- Endpoint
GET /api/auth/usagepara consultar uso del plan actual PlanBadge+ hookuseUsageen la UI web (#413)- Página de Tenants: eliminado auto-redirect que impedía crear un 2° tenant
Fixes
DELETE entityahora usa CASCADE para manejar FK constraints derecord_embeddings(#398)- Unicidad del slug de tenant: sufijo hex de 5 caracteres previene colisiones en nombres similares (#425)
- Formas de respuesta MCP: fallback cuando la API retorna
{success:true}sin.data(#429) - Validación de inputs:
.trim()+min(1)en schemas Zod (#431) - Aislamiento de tests: tenant demo-company seleccionado explícitamente en 22 archivos de test
Interno
- Migración 0042: campos
plan+ Stripe enadmin_users,owned_byen tenants - 2343 líneas de cobertura de tests nuevos en 16 archivos
v1.11.0 — Seguridad (2026-02-20)
Release mayor de seguridad: validación de inputs, protección SSRF, prevención de SQL injection y hardening de API.
Seguridad
- Prevención de SQL injection: validación Zod en nombres de entidades, webhooks, reglas, UUIDs de scheduling, dominios de sites, IDs de documentos
- Protección SSRF: bloquear seguimiento de redirects en interpolación de URLs en flows; sanitizar HTML de emails en flows
- RBAC en plano de gestión: control de acceso basado en roles en endpoints de management
- Prevención de passthrough de hash de contraseña: filtrar respuesta de auth/me; fix de aislamiento de tenant en update-record
- Enmascaramiento de secretos de webhooks: prevenir suscripciones duplicadas
- Fix de bypass de timeout en reglas
- Protección de namespace: bloquear modificación del namespace
_fyso_por usuarios - Fix de SQL injection por fieldKey
Features
- Herramientas MCP para RBAC:
list_roles,create_role,assign_role,revoke_role - Suite de tests de regresión: 19 archivos E2E, ~170 tests cubriendo seguridad, SSRF, RBAC, auth boundary, validación de inputs
Fixes
- Deduplicación de jobs: prevenir emails/webhooks duplicados de jobs after_save
- Ingesta de knowledge: transacción para chunks; almacenar contenido para retry
- Guard contra overflow de enteros en fórmulas
- Guards en entidades/flows: bloquear transacción de publish; guard en delete de flow con runs activos
- Jobs API: scope de tenant; guard en eliminación de entidad; validar entidad de flow
- Surfacing de errores de DB desde getFieldValue/aggregate
- Sanitización de respuestas de error; fix DELETE data wrapper; fix de case en subdominio
- Fix de crash en schema Zod para steps de flow; fix de shape de respuesta delete_flow
- Reordenamiento de rutas de reglas; manejo de entidad faltante en herramienta MCP
v1.10.1 — Verificación de Email + Emails por Eventos (2026-02-20)
Features
- Flujo de verificación de email — página verify-email, banner en dashboard para usuarios no verificados, botón de reenvío
- Bloqueo suave de creación de tenant y API key para emails no verificados
- Emails por eventos — templates
plan_limit_reached,new_user_joinedcon rate limiting de 15 minutos - Rate limits de email — por tipo de evento por tenant (tabla
email_rate_limits)
Fixes
APP_BASE_URLagregado al env de producción para compatibilidad con Auth0 SDK v4RESEND_API_KEYagregado al workflow de deploy de producción- Migración de seguridad para columna
email_verified
v1.10.0 — Open Core + Superadmin + MCP Marketplace (2026-02-20)
Arquitectura
- Open Core: detección de plugins en tiempo de compilación via
@fyso/pro. Build OSS funciona standalone, build PRO carga el módulo completo en compilación - Enterprise: Deployment Dedicado: Dockerfiles multi-stage (~50MB),
docker-compose.ymlcompleto, scripts de provision/update/backup, workflow de GitHub Actions - Persistencia de sesión MCP: preferencias de sesión (tenant, bot) persisten en DB via
mcp_user_preferences
Superadmin
- UI de Superadmin: sección Platform en sidebar — gestionar todos los tenants (ver, cambiar plan, suspender), ver todos los usuarios admin, dashboard de salud del servidor
MCP & API
- Anotaciones de seguridad MCP: las 85 herramientas MCP tienen
readOnlyHint,destructiveHint,idempotentHint,openWorldHint - Manifests para MCP Marketplace:
manifest.json(Anthropic Connectors Directory),smithery.yaml(Smithery.ai) - API Management avanzado:
GET /api/openapi.json(OpenAPI 3.1), rate limits por API key,GET /api/usage/dashboard - Medición de uso y quotas: rate limiting por tenant (200 req/min), códigos 402 para quota excedida
- Abstracción de proveedor de embeddings: interfaz
EmbeddingProvider, configurable via env varEMBEDDING_PROVIDER
Features
- Knowledge Base RAG: ingesta de documentos con chunking automático, embeddings OpenAI, búsqueda por similitud coseno. Herramientas MCP:
upload_document,search_knowledge,list_documents,get_document,delete_document,get_knowledge_stats - RBAC: roles y permisos por tenant. 3 roles del sistema (admin, member, viewer), middleware
requirePermission
v1.9.0 — Sprint de Plataforma (2026-02-19)
Features
- Suscripciones a webhooks para eventos de entidades
- Medición de uso y auditoría para billing
- pgvector estado y métricas en dashboard
- Tokens de deploy de GitHub con generación de workflows
- Backups a S3 — pg_dump a S3
- Sistema de plugins de proveedores de pago con Stripe
- AWS SSM Parameter Store para secretos de producción
- Metadatos de plugin para Anthropic marketplace
- API REST de panel de super admin para gestión de plataforma
- Herramientas MCP de super admin con controles de seguridad
- Landing page en Next.js
- Storybook para la librería de componentes
@fyso/ui - Sitio de docs Docusaurus con i18n ES/EN
v1.8.0 — Billing, PDFs, Ubicación & CI/CD (2026-02-19)
Features
- Billing con Stripe — checkout, portal de clientes, webhooks, límites de uso por plan
- Motor de PDF con pdfme — templates, editor visual, herramienta MCP
generate_pdf - Campo de ubicación — selector Leaflet/OSM, proxy de geocoding, almacenamiento lat/lng/dirección
- Motor de flows — triggers + steps como metadata, CRUD + toggle
- Almacenamiento de archivos con abstracción FlyDrive + herramienta MCP
upload_file - Integridad referencial JSONB — validar relaciones + acciones onDelete
- Log de ejecución de reglas para debugging
- Registro de plugins de campos — sistema extensible
- Login con invitación — cuenta no existente solicita código
- Landing page i18n — selector de idioma + traducciones
Infraestructura
- CI/CD con GitHub Actions — pipeline test → build → deploy con smoke tests
.envdesde GitHub Secrets en cada deploy- Fix de compatibilidad PM2 + Bun
Perfiles de herramientas MCP
- core (28 herramientas): +
generate_pdf, +upload_file - advanced (38 herramientas): +
create_flow,list_flows,update_flow,delete_flow,toggle_flow
v1.7.2 — Scheduling, Importación CSV & Hotfixes (2026-02-17)
Features
- Scheduling con rrule.js — disponibilidad, slots y agregados por rango de fechas
- Importación CSV con preview y coerción de tipos
- Cola de jobs con SKIP LOCKED y acciones de reglas async
- Branding de tenant — appName, logoUrl, primaryColor
- Publicación de apps — link de instalación, UI en dashboard
- Estados vacíos rediseñados con i18n
Fixes
- Permitir subdominios
*.sites.fyso.deven CORS - Consistencia de cards — página de usuarios tabla→cards
- Archivado de tenant (soft delete) con diálogo de confirmación
- Auditoría mobile responsive — 11 vistas corregidas para 375px+
- Unificación de idioma UI — i18n páginas de reset password
v1.7.1 — Polish de UI (2026-02-17)
- Corrección de 5 bugs visuales en batch de polish de UI
v1.7.0 — Seguridad + Developer Skills (2026-02-17)
Seguridad
- Autorización por roles para gestión de usuarios de tenant
- Hardening de seguridad — CORS, cookies, body limit, validación de schema, JWT audience, propiedad de tenant, rate limit
- Prevención de SQL injection — parametrizar SQL de embeddings
- Guard de acceso cross-tenant via header
X-Tenant-Slug - Configuración de pool de conexiones PostgreSQL
Features
- Agente fyso-architect + skill
/fyso-publish - Skills base —
/fyso-new-app,/fyso-add-entity,/fyso-deploy - Paquete
@fyso/uiextraído - Prebuilds dinámicos — tabla
app_catalogen DB generate_business_ruleacepta DSL JSON como input principal
v1.6.0 — Auth, i18n & Developer Experience (2026-02-17)
Features
- Login con email+contraseña — independencia de Google OAuth
- Códigos de invitación respaldados en DB para beta cerrada
- Flujo de reset de contraseña con token por email
- Emails transaccionales — bienvenida + invitación via Resend
- Setup de i18n con next-intl para localización del frontend
- Perfiles de herramientas MCP — reducir superficie para nuevos builders
- Plugin de Claude Code para el servidor MCP de Fyso
Mejoras
- Descripciones de herramientas MCP traducidas al inglés
- Mensajes de error de API en inglés
v1.5.0 — Landing para Builders (2026-02-17)
- Landing page orientada a builders
- Roadmaps, design brief y ADR para planificación de beta
v1.4.0 — Panel de Builder (2026-02-16)
- Panel de builder wave 1 — layout shell, command palette, rediseño de dashboard
- Panel de builder wave 2 — páginas
- Herramientas de desarrollo en el panel de builder (wave 3)
v1.3.0 — Prebuilds & Búsqueda (2026-02-15)
Features
- Apps prebuild: freelancer/consultora, Taller/Servicio técnico, Tienda retail
- Exportación CSV para cualquier entidad
- Búsqueda de texto en tablas de entidades
- Búsqueda híbrida + umbral de similitud para búsqueda semántica
- Onboarding web — formulario guiado + auto-provisioning
- Acciones after_save para actualizaciones cross-entity en reglas
- Herramienta MCP
list_users - Sentry para tracking de errores en API y frontend
- Backups automáticos de PostgreSQL con retención y alertas
- Middleware de rate limiting
- Date picker con shadcn Calendar
- Theming de tenant — nombre del negocio + color primario
- Tracking de eventos internos para analíticas de beta
Fixes
- Orden funcional en DynamicTable
- Info de expiración de token de deploy + permisos de canal por defecto
- Fix de JWT audience mismatch en MCP
v1.2.0 — Motor de Reglas (2026-02-14)
Features
- Lookup & aggregate cross-entity en motor de reglas — campos lookup leen valores de entidades relacionadas, campos aggregate calculan
count()ysum() - Auto-creación de admin en primer login con Google con sistema de códigos de invitación
- Landing page agregada
v1.1.0 — Login con Google (2026-02-14)
- Auto-creación de cuenta admin en primer login con Google con código de invitación
- Nuevo endpoint
POST /google-register
v1.0.0 — Primera Release (2026-02-14)
Primera release pública de Fyso.
Features
- Autenticación OAuth 2.1 — flujo de código de autorización con PKCE S256, tokens JWT RS256, rotación de refresh tokens
- Hosting de sitios estáticos —
*.sites.fyso.devcon HTTPS automático via Caddy - Upload multipart para sitios estáticos
- Sistema de channel tools
- Infraestructura QA basada en Docker
- CI con GitHub Actions
Pipeline: Centinela → Cero → Crisol → Lupa → Pulso