Novedades · Changelog

Cada semana, un poco mejor.

Mejoramos GarBotGPT casi a diario. Estas son las novedades más recientes: nuevas herramientas, mejoras de velocidad y arreglos, contadas en claro.

  1. v9.5.33

    🔧 Fix pdfjs en Vercel: extractor de coordenadas vuelve a funcionar en producción

    En local funcionaba todo, pero en Vercel los logs mostraban dos errores en cada ingest de PDF: "Cannot find module ./pdf.worker.js" (coords) y "The path argument must be of type string. Received type number" (vision). Causa: pdfjs-dist usa require() dinámico para cargar el worker, los cmaps y las standard fonts; Next/Turbopack solo bundlea lo que detecta importado estáticamente. Resultado: en serverless el worker no existía, pdfjs fallaba, los PDFs se ingestaban solo con Tika (texto mashed) y las nóminas volvían a aparecer "No detallado". Fix: resolver workerSrc en runtime con require.resolve() y forzar outputFileTracingIncludes para que Vercel bundle pdf.worker.js + cmaps + standard_fonts con las rutas /api/files/** y /api/chat/**.

    Nuevo

    • 📦 next.config: outputFileTracingIncludes bundle pdf.worker + cmaps + standard_fonts
    • 🚫 pdfjs-dist + canvas movidos a serverExternalPackages
    • ✅ Coords vuelve a reconstruir tablas en producción (no solo en local)

    Arreglado

    • 🩹 GlobalWorkerOptions.workerSrc = require.resolve("pdfjs-dist/.../pdf.worker.js")
  2. v9.5.32

    ⚙️ Admin → Análisis de Documentos: nuevos controles para coords, visión, classifier y caps

    Hasta ahora las features añadidas en v9.5.26-31 (extractor por coordenadas, fallback con visión multimodal, clasificador LLM de intent y los caps de archivos en contexto) vivían en env vars o hardcoded en el código. Ahora todas son editables desde Admin → Análisis de Documentos. Nuevas secciones: "Extracción avanzada de PDFs" (toggle coords + toggle visión + modelo + máx páginas) y "Inteligencia del contexto en chat" (toggle classifier + modelo + 4 caps editables). Migración 118 añade 10 columnas nuevas a doc_analysis_config con defaults seguros.

    Nuevo

    • 🎛️ Admin → Extracción avanzada: toggle coords (gratis) + visión (de pago)
    • 🤖 Toggle del clasificador LLM de intent + selección de modelo
    • 🔢 4 caps editables: adjuntos/carpeta/chunks default/chunks agg max
    • 🗄️ Migración 118: 10 columnas nuevas en doc_analysis_config (aplicada al NAS)
  3. v9.5.31

    🧠 Adiós a las palabras clave: clasificador LLM decide qué contexto incluir

    Antes (v9.5.30): un regex con palabras clave ("todas/total/suma/cada/nóminas…") decidía si la IA recibía contexto de TODOS los archivos o solo unos pocos. Funcionaba el 80% del tiempo — pero frases como "explícame los gastos del año pasado" no matcheaban y la IA terminaba viendo solo 4 de 17. Reemplazado por un clasificador con gpt-4o-mini que entiende intención semántica: lee la pregunta, ve los nombres de los archivos y decide TODOS o ALGUNOS. Reglas rápidas: 1-4 archivos → siempre TODOS (gratis, sin llamada); 5+ archivos → clasificador. Si el clasificador falla (timeout, red, etc.), fallback al regex antiguo. Latencia añadida: ~300-700ms, compensada al correr en paralelo con el embedding del mensaje.

    Nuevo

    • 🤖 Clasificador con gpt-4o-mini reemplaza al regex de keywords
    • 🛡️ Fallback automático a regex si el clasificador falla
    • 📂 Aplica tanto a adjuntos directos como a carpetas

    Mejorado

    • ⚡ 1-4 archivos: siempre todos en contexto (sin llamada extra)
  4. v9.5.30

    📎 Adjuntos en chat: ahora la IA ve TODOS los archivos (antes solo 7)

    Al subir 17 nóminas a un chat y pedir "dame todas y suma cuánto he ganado", la IA solo veía 7 archivos. La causa: límites fijos en el flow de adjuntos (8 chunks, 4 documentos estructurados) — pensados para "analiza este PDF" no para agregación masiva. La detección de intent ("todas/total/suma/cada/cuánto/nóminas/facturas") ya existía para el flow de carpetas; ahora también se aplica a los adjuntos directos del chat. Cuando detecta intent de agregación: sube a 16-40 chunks y hasta 25 documentos con contexto estructurado completo. Además inserta una instrucción imperativa al modelo para que calcule y responda con el listado por documento sin pedir confirmación.

    Nuevo

    • 📊 17 archivos adjuntos → la IA ve los 17 (antes 7)
    • 🎯 Detecta intent: "todas/total/suma/cada/cuánto/nómina/factura"
    • ⚙️ Match hasta 40 chunks + 25 documentos con contexto completo
    • 🗣️ El modelo recibe orden de calcular y listar sin pedir confirmación
  5. v9.5.29

    ✨ Multi-cuenta: modal inline para reactivar sin salir de la página

    Antes (v9.5.28): si los tokens guardados de una cuenta estaban muertos server-side (colateral del bug viejo del logout global), te redirigía a /auth/login con email pre-rellenado. Funcionaba pero rompía el flow. Ahora aparece un modal pequeño centrado pidiendo solo la contraseña, sin salir de donde estés. Tecleas → reactivas → la cuenta vuelve viva al selector. Cero navegación. Pensado para las cuentas afectadas por el bug viejo: una vez reactivadas, los siguientes cambios entre cuentas son INSTANTÁNEOS (sin modal, sin login).

    Nuevo

    • 🪟 Modal inline "Reactivar cuenta" con email locked + contraseña
    • 🔁 Tras reactivar, los próximos switches son directos sin modal
    • 🗑️ Botón "Olvidar esta cuenta" si ya no quieres usarla
  6. v9.5.28

    🔄 Multi-cuenta: re-login automático cuando una cuenta caducó

    El fix de v9.5.25 (logout local en vez de global) evita que NUEVOS logouts maten los tokens, pero las cuentas guardadas en localStorage cuyos tokens YA fueron revocados (por el bug anterior) siguen dando 401 al intentar cambiar. Solución: cuando el switch falla con 401, en vez de quedarse el toast genérico "sesión caducada", redirigimos automáticamente al login con el email pre-rellenado y un banner ámbar explicando la situación. Un solo click (escribir contraseña) y la cuenta vuelve a estar viva en el selector. También arreglado un bug previo: cuando entrabas a /auth/login?add=1 con sesión activa, te redirigía a /chat sin dejarte ver el formulario.

    Nuevo

    • 🎯 Switch fallido (401) → auto-redirect a login con email + banner explicativo
    • 🛡️ /auth/login?add=1 ya no auto-redirige aunque haya sesión activa
    • ✨ Tras el re-login, la cuenta vuelve al selector sin pasos extra
  7. v9.5.27

    🎨 Landing actualizada con precios reales, packs y novedades

    La landing /landing/pricing decía "Beta gratis, sin precios todavía" — completamente obsoleto desde que tenemos planes y packs en vivo con Stripe. Reescrita: muestra Free (500 créditos), Pro €8 (5K cr/mes), Max €20 (15K cr/mes) y los 4 packs de créditos (5K €6, 15K €15, 60K €50, 130K €100). Añadido bloque transparente de qué cuesta cada acción (chat 3-8 cr, búsqueda web 12 cr, imagen 180 cr, deep research 200 cr, vídeo 1.200 cr). Sección de app móvil con CTA a Google Play y a iOS PWA. FAQ con preguntas reales. La home también actualizada con sección "Lo nuevo" (multi-cuenta, app móvil, créditos, ubicación) y teaser de precios antes del CTA final.

    Nuevo

    • 💰 /landing/pricing: Free + Pro €8 + Max €20 + 4 packs con precios reales
    • 📊 Bloque "cómo se gastan los créditos" con coste por acción
    • 📱 Sección app móvil con CTAs a Google Play y iOS PWA
    • 🆕 Home con sección "Lo nuevo" (multi-cuenta, créditos, app, ubicación)
    • ❓ FAQ con dudas reales sobre caducidad, cancelación, referidos, pago
  8. v9.5.26

    📄 Carpetas con PDFs leídos correctamente (nóminas, facturas, tablas)

    Hasta ahora pdf2json devolvía el texto de los PDFs tabulares MASHED — las columnas se pegaban entre sí ("5,76260,00" en vez de "5,76 | 260,00"). La IA solo lograba extraer datos de algunos meses por azar; los demás aparecían como "No detallado en extracto". Nuevo extractor que usa coordenadas X/Y de pdfjs.getTextContent y reconstruye las columnas por posición. Gratis, instantáneo, determinístico. Re-procesados los 17 PDFs de Nominas GESEM: 15/17 ahora tienen tablas detectadas. Visión (gpt-4o-mini) queda como fallback para PDFs escaneados puros.

    Nuevo

    • 📊 Extractor de coordenadas: reconstruye tablas por posición X/Y (pdfjs.getTextContent)
    • 👁️ Visión multimodal (gpt-4o-mini) como fallback para PDFs escaneados
    • 🔁 Script scripts/reextract-with-vision.ts para re-procesar carpetas existentes

    Arreglado

    • 🩹 OCR de tesseract envuelto en try/catch (antes mataba el ingest)
  9. v9.5.25

    🔐 Multi-cuenta REALMENTE arreglado + permisos de ubicación en Android

    Causa raíz definitiva del 401 en cambio de cuenta: el botón "Cerrar sesión" usaba el scope global por defecto, que revoca TODOS los refresh tokens del usuario en GoTrue. Así que al cerrar sesión en A y luego intentar volver a A desde el selector multi-cuenta, el token guardado ya no servía. Cambiado a scope:"local" en ambos sitios (Header y Sidebar). Comprobado en los logs del auth: cada "logout" del usuario borraba sus tokens server-side, dejando el switch imposible. Adicionalmente, añadidos permisos ACCESS_FINE/COARSE_LOCATION al manifest Android y nueva AAB (versionCode 5, versionName 9.5.25) para Google Play.

    Nuevo

    • 🎯 Logout ahora es local (scope:"local"): los refresh tokens del usuario sobreviven → multi-cuenta vuelve a funcionar

    Arreglado

    • 🪵 Logs en /api/auth/switch-account para diagnosticar futuros fallos

    Seguridad

    • 📱 Android TWA: permisos de ubicación añadidos + nueva AAB (v9.5.25 / code 5)
  10. v9.5.24

    🩹 Avatar visible en Header/Welcome + sidebar sin flicker

    Las nuevas URLs de avatar (supabase.garbotgpt.com) estaban bloqueadas por Next/Image porque el dominio no estaba en la whitelist — por eso Sidebar las mostraba bien pero Header y Welcome no. Añadido a la config. Además, al navegar entre /chat y /carpetas las carpetas del sidebar parpadeaban (la sidebar se remontaba); ahora hay caché y aparecen al instante.

    Nuevo

    • 🖼️ Avatares se muestran en Header y Welcome (faltaba el host en next.config)

    Mejorado

    • ⚡ Carpetas y nombre de usuario del sidebar instantáneos al navegar (sin flicker)
  11. v9.5.23

    🔧 Multi-cuenta estable + avatar limpio + visor más rico

    Causa raíz del "Auth session missing" identificada: GoTrue tenía el reuse interval de refresh token en 10 s, así que los tokens guardados se invalidaban casi de inmediato — lo subimos a 24 h. Limpiamos también las URLs de avatar antiguas que apuntaban al Supabase Cloud descatalogado, y el banner de ubicación pasa a toast flotante abajo. El visor de chats del admin ahora muestra una tarjeta del usuario con avatar, rol, créditos y plan.

    Nuevo

    • 🔧 GoTrue REFRESH_TOKEN_REUSE_INTERVAL: 10s → 86400s (24h) → multi-cuenta funciona
    • 🖼️ Avatares antiguos del cloud descatalogado limpiados (mostraban roto)
    • 📍 Banner de ubicación: toast flotante abajo (ya no tapa header)
    • 👤 Visor chats: tarjeta del usuario con avatar, rol, créditos y fecha alta
  12. v9.5.22

    ⚡ Mensajes admin en tiempo real + iconos en /pricing

    Cuando un admin envía un mensaje (banner/popup) a un usuario, ahora le aparece al INSTANTE sin necesidad de recargar la página. Además los packs 60k y 130k tienen iconos dedicados en la página de planes, destacados como "Mejor relación".

    Mejorado

    • ⚡ Banners/popups en tiempo real (Supabase Realtime)
    • 🎨 Iconos animados de los packs 60k/130k en /pricing

    Infraestructura

    • Migración 117: política RLS SELECT sobre banners + publicación realtime.
    • BannerDisplay se suscribe a postgres_changes y refetcha al cambiar.
  13. v9.5.20

    🔁 Todos los ids con guion bajo (el de Play sí los admite)

    Play tiene dos campos: el "ID de producto" (el que llega al backend al comprar, admite _) y el "ID de opción de compra" (interno, requiere -). Solo este último necesita guiones, así que ponemos TODOS los ids de catálogo con guion bajo y dejamos en el "ID de opción" el de guion.

    Nuevo

    • 🔁 BD vuelve a usar credits_60k / credits_130k (con guion bajo)
  14. v9.5.19

    🔁 Solo los packs nuevos (60k/130k) usan id con guion

    Los packs antiguos (5k, 15k) y las suscripciones (Pro/Max) vuelven a sus ids originales con guion bajo (nunca van a Play, no había razón para cambiarlos). Solo los packs nuevos (60k, 130k) usan kebab-case porque son los que se crean en Google Play, que no admite guion bajo.

    Nuevo

    • 🔁 IDs en BD: credits_5k, credits_15k, pro_monthly, max_monthly (como antes)
    • ✅ Solo nuevos: credits-60k, credits-130k (con guion, válidos en Play)
  15. v9.5.18

    🩹 3 fixes: ids Play, avatar header y aviso saldo bajo

    Renombrados los ids de los packs y planes a kebab-case (con guiones) para que sean válidos en Google Play. La foto de perfil ahora se actualiza al instante en el header tras subirla en Ajustes. El aviso de saldo bajo se mueve a un toast flotante abajo a la derecha (antes tapaba el header).

    Nuevo

    • 💬 Aviso de saldo bajo: toast flotante abajo (ya no tapa el header)

    Mejorado

    • 🖼️ Avatar del header se refresca al instante tras cambiar la foto

    Arreglado

    • 🩹 IDs de packs/planes en kebab-case (credits-5k, pro-monthly…) válidos en Play

    Infraestructura

    • Migración 114: rename de ids con _ → - en billing_products y user_entitlements.plan.
    • Evento geia-profile-updated para sincronizar avatar/nombre entre Settings y Header/Sidebar.
  16. v9.5.17

    📍 Ubicación opcional + visor de chats con estadísticas

    Nuevo banner para compartir tu ubicación (consentido); a partir de ahí GarBotGPT puede darte el tiempo, la hora local o sugerencias cerca de ti. Además, el visor de chats del admin muestra ahora una barra de estadísticas (mensajes, tokens, créditos, modelos, tiempo total) y un buscador para filtrar conversaciones.

    Nuevo

    • 📍 Compartir ubicación → contexto local en las respuestas (tiempo, hora, etc.)
    • 📊 Estadísticas en el visor de chats (msgs, tokens, créditos, modelos)
    • 🔍 Buscador de conversaciones en el visor

    Infraestructura

    • Migración 113: profiles.location_json + endpoint /api/user/location (PUT/GET/DELETE).
    • Reverse-geocode con Nominatim (OSM). Ubicación inyectada en el system prompt del chat.
  17. v9.5.16

    ⚡ Borrado de usuarios mucho más rápido

    El borrado de usuarios desde admin (uno o varios) tardaba mucho. Optimizado: evitamos un round-trip redundante a la BD por usuario y el borrado masivo ahora corre en paralelo (5 a la vez en vez de uno a uno). Borrar 10 usuarios pasa de ~10× a ~2×.

    Nuevo

    • 🧹 Endpoint usa solo auth.admin.deleteUser (cascadea, menos consultas)

    Mejorado

    • ⚡ Borrado masivo paralelizado (concurrencia 5)
  18. v9.5.15

    🔧 Multi-cuenta: fix v3 (singleton + recuperación)

    Cambiamos el cliente Supabase del navegador a singleton para que TODOS los eventos de rotación de token lleguen a un único listener — antes los tokens guardados quedaban obsoletos en silencio. Si el cambio aún así falla, ahora te llevamos directo al login con el email pre-rellenado para que vuelvas a entrar con 1 clic.

    Nuevo

    • 🔧 Cliente Supabase singleton (los tokens guardados se mantienen frescos)
    • ↪️ Si una cuenta caducó, te lleva al login con su email puesto
  19. v9.5.14

    💰 Ajuste de costes en créditos (modelos, herramientas y artifacts)

    Subimos los costes en créditos de las funciones más caras para reflejar mejor lo que cuestan en realidad. Las más afectadas: generar imágenes, vídeo, deep research y artifacts (webs/apps HTML). Los mensajes normales suben muy poco.

    Nuevo

    • 🎬 Vídeo: 180 → 1200 (Sora es caro)
    • 🔬 Deep research: 90 → 200
    • 📦 Artifact (HTML/app): 40 → 200

    Mejorado

    • 🎨 Imágenes: 60 → 180 créditos (cubre alta calidad)
  20. v9.5.13

    💎 Dos packs nuevos de créditos: 50€ y 100€

    Añadidos dos packs grandes con descuento progresivo: 60.000 créditos por 50€ y 130.000 créditos por 100€. Aparecen en la página de planes junto a los packs existentes.

    Mejorado

    • 💎 Pack 60.000 créditos · 50€ (≈44% más créditos/€ que el pack pequeño)
    • 💎 Pack 130.000 créditos · 100€ (≈56% más créditos/€)
  21. v9.5.12

    🖼️ Arreglada la subida de foto de perfil

    La foto de perfil no se aplicaba al subirla: el bucket "avatars" no tenía políticas RLS, así que la subida fallaba en silencio. Añadidas las políticas (cada usuario puede subir solo a su carpeta) y mejorado el mensaje de error si algo va mal.

    Nuevo

    • ⚠️ Mensaje claro si la subida falla (tipo no válido, tamaño, etc.)

    Mejorado

    • 🖼️ Foto de perfil ahora se guarda correctamente
  22. v9.5.11

    🔧 Multi-cuenta: fix definitivo (server-side switch)

    El cambio de cuenta ya no falla con "Auth session missing!": ahora el intercambio de tokens se hace en el servidor, que valida el refresh_token contra GoTrue y escribe las cookies de sesión correctamente. Si falla, la sesión actual queda intacta.

    Nuevo

    • 🛟 Si los tokens caducaron, la sesión actual NO se rompe

    Arreglado

    • 🔧 Cambio de cuenta robusto vía endpoint server-side
  23. v9.5.10

    📦 Artifacts compactos en el chat + ajuste de costes

    Cuando la IA genera HTML/código en un artifact, la burbuja del chat ya no muestra el código entero ocupando media pantalla: solo aparece la tarjeta compacta y al pulsarla se abre el panel lateral con el preview/código. Además se ha subido un poco el consumo de créditos para reflejar mejor el coste real de la IA, hay un recargo cuando se genera un artifact, y el bonus de bienvenida pasa de 1000 a 500.

    Nuevo

    • 📦 Burbuja compacta cuando hay artifact (sin código volcado)
    • 🎁 Bono de bienvenida: 500 créditos (antes 1000)

    Mejorado

    • 💎 Coste por mensaje un poco mayor (≈1,5–2×) y recargo por artifact
  24. v9.5.9

    🔧 Multi-cuenta: arreglado el error al cambiar entre cuentas

    Fix del bug "Auth session missing!" al cambiar de cuenta (que además dejaba sin sesión también a la cuenta activa). Ahora los tokens guardados se mantienen actualizados con cada refresh y, si el cambio falla, la sesión actual se restaura.

    Nuevo

    • 🔧 Cambio entre cuentas estable (sin "Auth session missing!")
    • 🛟 Si el cambio falla, la sesión actual se restaura automáticamente
  25. v9.5.8

    📱 Multi-cuenta también en el menú móvil

    La gestión de varias cuentas (añadir cuenta + cambiar entre ellas) que ya estaba en el menú de escritorio ahora está también en el menú de usuario de la barra lateral móvil.

    Nuevo

    • 📱 "Añadir cuenta" + cambio entre cuentas en el menú del sidebar móvil
  26. v9.5.7

    🪵 Admin: audit log con borrado + nueva tab "Log errores"

    Ahora puedes borrar entradas del audit log (una por una, las de más de 30 días o todas), y hay una nueva pestaña "Log errores" al lado donde aparecen los errores del programa (con su origen, mensaje, contexto y stack), también borrables.

    Nuevo

    • 🗑️ Borrado de entradas del audit log (uno / antiguos / todos)

    Arreglado

    • 🐛 Nueva pestaña "Log errores" con los errores del servidor y borrado

    Infraestructura

    • Tabla error_logs + helper logError() + endpoint /api/admin/error-logs.
    • Captura inicial en webhook Stripe y cron de auto-recarga.
  27. v9.5.6

    🛠️ Admin: visor de chats en página + créditos en tab Usuarios

    El visor de chats de un usuario ahora se abre en una pestaña nueva con un layout tipo chat real (sidebar de conversaciones a la izquierda, mensajes a la derecha en burbujas), en modo solo lectura. Además, el botón "Créditos y suscripción" está disponible también desde la tab Usuarios (antes solo en Roles y Permisos).

    Nuevo

    • 🪟 Visor de chats como página nueva con look de chat real (sin input)
    • 💳 Botón "Créditos y suscripción" añadido en la tab Usuarios
  28. v9.5.5

    👥 Multi-cuenta: cambia entre cuentas desde el menú

    Ahora puedes tener varias cuentas guardadas en el navegador y cambiar entre ellas desde el menú de usuario (arriba a la derecha): nuevo botón "Añadir cuenta" y, cuando hay más de una, una lista para elegir con un toque, sin cerrar sesión cada vez.

    Nuevo

    • 👥 "Añadir cuenta" en el menú de usuario
    • 🔄 Cambia entre cuentas con un clic
  29. v9.5.4

    ⚡ Pequeña mejora de latencia en el chat

    Eliminamos una consulta redundante a la base de datos antes de cada respuesta (reutilizamos el perfil que ya se había leído), reduciendo un poco el tiempo hasta que la IA empieza a responder.

    Mejorado

    • ⚡ Una consulta menos a la base de datos por mensaje
  30. v9.5.3

    📧 Avisos por email: renovación, pago fallido y saldo bajo

    Ahora recibes un email cuando tu suscripción se renueva (con los créditos añadidos), cuando falla un pago (para que actualices la tarjeta y no pierdas el acceso) y cuando te queda poco saldo. Complementa los avisos dentro de la app.

    Nuevo

    • 📧 Email al renovar la suscripción (créditos añadidos)
    • ⚠️ Email si falla el pago, con enlace para actualizar la tarjeta

    Mejorado

    • 💎 Email de saldo bajo (una vez al mes)

    Facturación

    • Helper SMTP (nodemailer) + emails en el webhook de Stripe y en el cron de facturación.

1346 versiones publicadas · página 33 de 45. Míralo dentro de la app.