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.4.2

    🚪 Invitados: entra directo al chat + límites visibles (sin login)

    Mejora del acceso público. (1) Abrir la app ya NO lleva al login: crea una sesión de invitado y entra directo al chat. En el header, los invitados ven "Regístrate" (los logueados, su menú normal). (2) Para invitados se ocultan el menú de usuario y la barra inferior de navegación; los logueados ven todo igual. (3) Los invitados pueden usar herramientas pero con un tope de 3 usos (server-side), y se muestran contadores en vivo: en el chat los mensajes restantes (de 10) y en el menú de herramientas los usos restantes (de 3), que bajan al usarlos. Nada de esto afecta a los usuarios con cuenta.

    Nuevo

    • 🚪 Entrada directa al chat como invitado (sin pasar por login)
    • 🔘 Header: "Regístrate" para invitados; menú de usuario y barra inferior ocultos
    • 🛠️ Invitados: 3 usos de herramientas (server-side) + 10 mensajes
    • 🔢 Contadores en vivo: mensajes en el chat, usos de herramientas en su menú

    Seguridad

    • 🔒 Usuarios logueados: sin cambios, todo igual
  2. v9.4.1

    📎 Fix: subir archivos grandes (PDFs pesados) ya no falla

    Adjuntar un PDF/archivo grande daba "No se pudo subir el archivo". Causa: el archivo se subía como multipart a /api/files/upload, una función serverless de Vercel, y Vercel limita el body de las funciones a 4,5MB — cualquier archivo mayor era rechazado por la plataforma ANTES de llegar a nuestro código (que permitía hasta 30MB). Solución: los archivos ahora se suben DIRECTAMENTE a Supabase Storage mediante una signed upload URL (cliente → Supabase, sin pasar por Vercel), así que el límite de 4,5MB ya no aplica. Se valida auth, tipo, tamaño (30MB) y cuota de almacenamiento en el servidor ANTES de emitir la URL, y se registra el archivo + ingest después. Aplicado al composer del chat.

    Nuevo

    • 📎 Subida directa a Supabase Storage vía signed URL (evita el límite de 4,5MB de Vercel)
    • 🧩 Nuevos endpoints /api/files/sign-upload y /api/files/register; helper uploadFileViaSignedUrl

    Arreglado

    • PDFs y archivos grandes (hasta 30MB) ya suben sin error

    Seguridad

    • 🔒 Validación server-side (auth, tipo, tamaño, cuota) antes de emitir la URL; path acotado al user
  3. v9.4.0

    🚪 Acceso público sin registro: "Probar sin cuenta" (10 mensajes gratis)

    Ahora cualquiera puede probar GarBotGPT sin registrarse. En el login hay un botón "Probar sin cuenta" que crea una sesión anónima (Supabase anonymous sign-in) y deja chatear al instante, con un tope de 10 mensajes. Al llegar al límite se invita a crear una cuenta gratis. Los invitados son solo-chat (sin tools caras: imagen, vídeo, deep research, documentos, code interpreter…) para controlar coste. Todo el tope es server-side (no se puede saltar). Esto además resuelve el rechazo de Google Play (los revisores ya no necesitan credenciales: pulsan "Probar sin cuenta"). Se habilitó GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED en el Supabase autoalojado. RLS y datos siguen aislados por usuario (cada invitado tiene su user_id).

    Nuevo

    • 🚪 Botón "Probar sin cuenta" en /auth/login → sesión anónima y a chatear
    • 🔢 Tope de 10 mensajes por invitado (server-side, en /api/chat)
    • 💸 Invitados solo-chat: tools caras vetadas (imagen/vídeo/deep research/docs/code)
    • Resuelve el rechazo de Google Play (acceso sin credenciales para revisores)

    Seguridad

    • 🔒 RLS intacta: cada invitado tiene su propio user_id, datos aislados
  4. v9.3.3

    ⚡ Fin del "rato" con cursor al terminar la respuesta

    Al terminar la IA de responder, la respuesta se quedaba un rato con el cursor parpadeando (parecía colgada) y luego "actualizaba" al mensaje final. Causa: en el cierre del stream el código hacía varios round-trips lentos al NAS (recargar conversaciones, recargar mensajes y reintentos esperando a que el mensaje apareciera en la DB) ANTES de limpiar el estado de streaming, así que la burbuja con cursor se quedaba visible todo ese tiempo (latencia Vercel↔NAS). Ahora, en cuanto la IA termina, se pinta el mensaje final al instante (optimista) y se quita la burbuja de streaming; la confirmación contra la base de datos ocurre en segundo plano y reconcilia sin parpadeo (dedupe por contenido + user_id, ventana de 60s).

    Nuevo

    • 🔄 La confirmación en la DB (loadMessages/reintentos) ocurre en segundo plano
    • 🧩 Reusa el mismo id/meta que la reconciliación existente → no duplica

    Mejorado

    • El mensaje final aparece al instante al terminar la IA (sin "rato" con cursor)

    Seguridad

    • 🔒 Dedupe fiable por contenido + user_id (verificado: 306/306 mensajes con user_id)
  5. v9.3.2

    ⚡ Borrar chats al instante (borrado optimista)

    Eliminar un chat se sentía muy lento: el endpoint de borrado hace ~5-6 round-trips a la base de datos (auth, comprobar propiedad, preservar histórico de token_usage, borrar) y, al estar la app en Vercel y la DB en el NAS, cada salto cuesta ~150-300ms → el chat tardaba 1-2s en desaparecer porque la UI ESPERABA al servidor. Ahora el chat se quita de la lista al instante (optimista) y el borrado real ocurre en segundo plano; si el servidor fallara, el chat se restaura y se avisa con un toast. No tiene nada que ver con los chats compartidos.

    Nuevo

    • 🔄 Borrado real en segundo plano; rollback + aviso si el servidor falla
    • 🧭 El chat activo navega a la welcome sin esperar
    • 🔎 El log mostraba errores de colaboración/Realtime, pero el borrado lento era por los round-trips Vercel↔NAS, no por chats compartidos

    Mejorado

    • El chat desaparece de la lista al instante al eliminar (ya no espera al servidor)
  6. v9.3.1

    🐛 Fix: mensaje del asistente duplicado al terminar (burbuja de streaming solapada)

    A veces, al terminar de responder, se veían DOS burbujas del asistente con el mismo texto pero distinto modelo (p.ej. GarBotGPT-5.2 y GarBotGPT-5.5 en modo Auto). Causa: al cerrar el stream, loadMessages cargaba el mensaje persistido (con el modelo realmente usado, p.ej. el auto-routed 5.2) ANTES de limpiar streamingContent, así que durante esa ventana convivían el mensaje real y la burbuja de streaming (etiquetada con el modelo seleccionado, p.ej. 5.5). Confirmado por SSH que en la base de datos solo hay UN mensaje (no era duplicación real, solo de render). Solución: ocultar la burbuja de streaming en cuanto exista el mensaje persistido del asistente. Respeta regeneración y chats compartidos (no oculta mensajes en live_streaming).

    Nuevo

    • Se oculta la burbuja de streaming en cuanto el mensaje real está persistido
    • 🔬 Verificado por SSH: en la DB solo hay 1 mensaje (era solo render, no duplicación real)

    Arreglado

    • 🐛 Doble burbuja del asistente (mismo texto, modelos 5.2/5.5) al terminar el stream

    Seguridad

    • 🔒 No afecta a regeneración ni a chats compartidos (live_streaming protegido)
  7. v9.3.0

    📰 Landing rediseñada en estilo editorial premium cálido (revista de lujo)

    Cambio total de estilo de toda la landing: de dark premium a editorial premium cálido. Paleta crema/terracota/oliva, titulares serif grandes, layout de revista con numeración (01, 02…), reglas finas, drop-cap en el manifiesto, wordmark gigante en el footer y efectos suaves (reveal, parallax, contadores, marquee). Rehechas las 6 páginas (inicio, funciones, precios, seguridad, estudio, contacto), nav y footer. Datos 100% reales.

    Nuevo

    • 📰 Estilo editorial: crema cálido + acentos terracota/oliva + serif de revista
    • 🔢 Layout con numeración de secciones, reglas finas y drop-cap
    • ✒️ Wordmark gigante en el footer + nav editorial
    • 🎞 Efectos suaves: reveal-on-scroll, parallax tilt, contadores, marquee
    • 📄 Las 6 páginas rehechas con datos reales (20+ modelos, 23 tools, 8 OAuth)
  8. v9.2.1

    🔍 Fix: preview de documentos en chat ahora abre a pantalla completa

    El preview de pptx/docx desde la card del chat salía diminuto dentro de la propia card. Causa: la DocumentGenerationCard tiene backdrop-blur, que crea un "containing block" para position:fixed, así que el modal se quedaba atrapado dentro de la card en vez de ocupar la pantalla. Solución: renderizar el modal con un Portal a document.body para que escape y se abra a pantalla completa.

    Nuevo

    • Modal renderizado vía createPortal a document.body → pantalla completa

    Arreglado

    • 🐛 Preview del chat atrapado dentro de la card por el backdrop-blur (containing block de fixed)
  9. v9.2.0

    🎨 Landing completa rediseñada (todas las subpáginas) con efectos avanzados

    Toda la landing (/landing y las 5 subpáginas: funciones, precios, seguridad, sobre nosotros, contacto) rediseñada en estilo dark premium con un toolkit de efectos compartido: fondo aurora animado, glassmorphism, spotlight que sigue el ratón, tilt 3D, contadores animados, marquee de proveedores, reveal-on-scroll y botones con glow/shimmer. Nav y footer adaptados al tema oscuro en todas las páginas. Datos 100% reales de la plataforma.

    Nuevo

    • 🖱 Cards con spotlight que sigue el ratón + tilt 3D al hover
    • 🔢 Contadores animados (20+ modelos, 23 tools, 8 OAuth)
    • 🌓 Nav y footer del landing en tema oscuro en todas las páginas
    • 🧩 Formulario de contacto con estados + datos reales en todas las secciones

    Mejorado

    • 🎨 Toolkit de efectos compartido (fx.tsx): aurora, spotlight, tilt 3D, contadores, marquee, reveal

    Seguridad

    • 🏠 Home, Funciones, Precios, Seguridad, Sobre nosotros y Contacto — todo nuevo dark premium
  10. v9.1.0

    ✨ Nueva landing dark premium + preview pptx en chat + modal compartir móvil

    Rediseño completo de la /landing: estilo dark premium con fondo mesh animado, glassmorphism, gradientes, marquee de proveedores y animaciones reveal-on-scroll. Datos reales (20+ modelos, 23 herramientas, 8 OAuth, self-hosting, RLS, datos en UE). Nav y footer adaptados al tema oscuro. Además: la vista previa de pptx/docx del chat ahora detecta el tipo igual que Mis Archivos (por formato y extensión), y el modal de compartir es full-screen en móvil.

    Nuevo

    • Landing nueva dark premium con efectos (mesh animado, glass, gradientes, reveal-on-scroll)
    • 🏷 Marquee de proveedores (OpenAI, Anthropic, Google, Meta, Mistral, DeepSeek)
    • 🌓 Nav y footer del landing adaptados al tema oscuro
    • 📄 Preview pptx/docx en chat alineado con Mis Archivos (detección por formato + extensión)
    • 📱 Modal de compartir full-screen en móvil

    Seguridad

    • 🧩 Secciones: hero, stats, 3 pilares, 23 herramientas, casos reales, seguridad, CTA
  11. v9.0.3

    📤 Subir archivos sin análisis + delete rápido + preview responsive + sin splash

    Varias mejoras. (1) Mis Archivos: nuevo botón "Subir archivos" que guarda archivos SIN pasar por el análisis RAG (solo almacenamiento) — no afecta al sistema de análisis existente. (2) Botón de eliminar de acceso rápido: la barra de selección ahora es sticky (siempre visible) + botón flotante de eliminar en móvil. (3) Vista previa de documentos optimizada para móvil (pantalla completa, sin padding). (4) Splash screen eliminado por completo.

    Nuevo

    • 📤 "Subir archivos" en Mis Archivos sin análisis (skip_ingest) — solo guarda
    • 🗑 Barra de selección sticky + botón flotante de eliminar en móvil
    • 📱 Vista previa de docs responsive (pantalla completa en móvil)
    • 🚀 Splash screen eliminado
  12. v9.0.2

    ⚡ Borrado instantáneo en Mis Archivos + modal compartir con rol Editor/Lector

    Tres mejoras. (1) Eliminar archivos en Mis Archivos tardaba ~20s con el modal bloqueado (el endpoint borraba chunks RAG + blob + contents en secuencia). Ahora el borrado es instantáneo: el archivo desaparece y el modal se cierra al momento, la limpieza pesada corre en background y en paralelo. (2) Modal de compartir chat reorganizado con un selector de acceso prominente Editor / Lector (con descripción) que aplica tanto a invitaciones como a los enlaces que generes. (3) Generar enlace con rol: ahora puedes compartir un enlace en vivo eligiendo si quien entra es Editor (puede escribir) o Lector (solo lee), además del enlace público de solo lectura.

    Nuevo

    • 🚀 DELETE /api/files/[id] paraleliza la limpieza (chunks + contents + blob) en vez de secuencial
    • 🎚 Modal compartir: toggle Editor/Lector prominente con descripción de cada rol
    • 🔗 Enlace en vivo con rol elegible (Editor o Lector) + enlace público de solo lectura

    Mejorado

    • Mis Archivos: borrado individual y masivo instantáneo (optimista) — antes ~20s bloqueado
  13. v9.0.1

    📄 Fix card de documentos persistida + vista previa de docx/pptx

    Dos fixes en la generación de documentos. (1) La DocumentGenerationCard (Generado + Descargar) solo se renderizaba dentro del bloque de mensaje "live"; al persistir el mensaje, la card buena desaparecía y volvía la card de adjunto vieja. Ahora la card se renderiza también en mensajes persistidos normales y se filtra el adjunto duplicado del documento generado. (2) El botón "Abrir" descargaba el archivo (los Office docs no se previsualizan inline en el navegador). Ahora abre una "Vista previa" en modal: docx/xlsx/pptx con el visor de Microsoft Office Online (URL firmada) y PDF en iframe, con botones Abrir/Descargar.

    Nuevo

    • 🧹 El documento generado ya no se duplica como adjunto suelto debajo
    • 👁 Botón "Vista previa" (antes "Abrir"): docx/xlsx/pptx con visor Office Online, PDF en iframe
    • El modal de preview tiene botones Abrir en pestaña y Descargar + cierre con Esc

    Arreglado

    • 🐛 DocumentGenerationCard ahora persiste en el chat (no revierte a la card de adjunto vieja)
  14. v9.0.0

    🎉 v9.0 — Selección masiva en Mis Archivos, modelos por provider, email de reset pro

    Versión mayor 9.0.0 con varias mejoras. (1) Mis Archivos: selección individual + seleccionar todo + eliminación masiva, y tabs que separan Todos / Imágenes / Documentos. (2) Modal de permisos (admin → Roles): el tab Modelos ahora agrupa los modelos por provider (OpenAI, Ollama, etc.) con cabecera por grupo y "Bloquear/Permitir todos" por provider. (3) Email de recuperación de contraseña: nueva plantilla HTML profesional (logo, botón degradado, enlace de respaldo, nota de seguridad) servida desde el storage del Supabase self-hosted. (4) Verificado que el contenedor auth está sano (el aviso de Synology era una referencia de ID cacheada tras recrearlo por CLI).

    Nuevo

    • ☑️ Mis Archivos: selección individual + seleccionar todo + eliminación masiva
    • 🗂 Mis Archivos: tabs Todos / Imágenes / Documentos
    • 🔧 Contenedor auth verificado sano (login + reset operativos)

    Seguridad

    • 🏷 Modal permisos: modelos agrupados por provider con bloqueo por grupo
    • ✉️ Email de reset de contraseña con plantilla HTML pro (logo, botón, fallback, seguridad)
  15. v8.101.0

    🛠 Fix card de documentos + cuota real en Mis Archivos + dominio ai.garbotgpt.com

    Tres fixes. (1) La generación de documentos/pptx mostraba el SSE crudo (data: {document_generation_event}) + todo el texto del documento en vez de una card. Causa: el handler principal de envío (ChatInput) no parseaba document_generation_event ni lo filtraba del texto (solo lo hacía el de regenerar). Ahora muestra la card desde el inicio (como imágenes) y oculta el texto del stream — el contenido va dentro del archivo descargable. (2) La página Mis Archivos mostraba 5GB hardcoded; ahora lee el límite real del usuario (storage_limit_mb) y muestra la cuota correcta o "Sin límite". (3) El dominio cambió a ai.garbotgpt.com: actualizado SITE_URL en el self-hosted para que los emails de reset de contraseña apunten al dominio correcto.

    Nuevo

    • 📄 El texto del documento ya no se muestra en el chat durante el stream (solo la card, como imágenes)
    • 💾 Mis Archivos usa el límite de almacenamiento real del usuario (no 5GB fijo)
    • 🌐 Reset de contraseña ahora apunta a https://ai.garbotgpt.com (SITE_URL actualizado en self-hosted)

    Arreglado

    • 🐛 Card de documentos: ChatInput ahora parsea document_generation_event (card visible) + filtra el SSE crudo
  16. v8.100.0

    🎨 Admin: modal Roles/Permisos con tabs + tab Herramientas ordenado por categorías

    Dos rediseños del panel admin. (1) El modal de permisos por usuario (Roles y Permisos) era un scroll largo y feo; ahora es más ancho con 3 tabs internos (Herramientas, Modelos, Límites), toggles más claros, búsqueda de modelos, presets de cuota/almacenamiento y "Bloquear/Permitir todo". Incluye también el límite de almacenamiento. (2) El tab Herramientas era un grid plano de 23 cards; ahora está agrupado por categorías (Búsqueda e información, Generación de contenido, Análisis, Integraciones) con barra de stats (total/disponibles/con bloqueos/usuarios), buscador y filtro por estado.

    Nuevo

    • 🔘 Toggles de tools con check/cross verde-rojo + "Bloquear/Permitir todo"
    • 🔍 Búsqueda de modelos dentro del modal + presets de cuota y almacenamiento
    • 🧰 Tab Herramientas agrupado por 4 categorías con contador por sección
    • 📊 Barra de stats en Herramientas + buscador + filtro (Todas/Disponibles/Con bloqueos)

    Seguridad

    • 🗂 Modal Permisos con 3 tabs (Herramientas · Modelos · Límites) + más ancho y estético
  17. v8.99.0

    📧 SMTP real configurado + tab Modelos compactado (admin)

    Dos cosas: (1) Configurado SMTP real en la Supabase self-hosted (servidor sv91.ifastnet.com, cuenta garbot@garbotgpt.com) — ahora recuperación de contraseña y emails funcionan (verificado HTTP 200). El hostname mail.garbotgpt.com no tenía DNS; se detectó el servidor real vía SPF. (2) El tab Modelos del admin estaba saturado: cada modelo mostraba 5 cajas de métricas + 7 botones. Ahora cada fila es compacta (nombre, slug, capacidades como puntos, coste, toggle visibilidad, Editar y menú "⋯") con métricas expandibles bajo demanda.

    Nuevo

    • 📧 SMTP real en self-hosted: recuperación de contraseña y emails operativos
    • 🔍 Detectado servidor de correo real (sv91.ifastnet.com) vía SPF — mail.garbotgpt.com no resolvía
    • 🗜 Tab Modelos: filas compactas en vez de 5 cajas + 7 botones por modelo
    • 🔘 Capacidades como puntos (S/V/T/J/D/W/R), métricas expandibles, acciones en menú overflow
    • 👁 Toggle de visibilidad inline + badge "Oculto" + Editar primario
  18. v8.98.0

    🔧 Fix registro de usuarios (auto-confirm en self-hosted) + entrada directa al chat

    El registro daba "Error al registrarte" tras migrar a la Supabase self-hosted. Causa real: GoTrue tenía ENABLE_EMAIL_AUTOCONFIRM=false + SMTP placeholder (fake_mail_user), así que al registrar intentaba enviar email de confirmación, fallaba y devolvía HTTP 500 ("Error sending confirmation email"). Activado auto-confirm en el servidor (supabase.garbotgpt.com). Ahora el registro funciona y, como el usuario queda confirmado al instante con sesión activa, la página de registro lo lleva directo al chat en vez de mostrar "revisa tu email".

    Nuevo

    • Activado GOTRUE_MAILER_AUTOCONFIRM=true en el self-hosted + recreado contenedor auth
    • 🚀 Registro exitoso lleva directo a /chat (el usuario ya tiene sesión)
    • Verificado: el trigger de profiles asigna role "user" automáticamente al registrarse

    Arreglado

    • 🐛 Causa: ENABLE_EMAIL_AUTOCONFIRM=false + SMTP falso → signup 500 al enviar email de confirmación
  19. v8.97.0

    🔢 Versión visible en el header del Panel Admin (todas las tabs)

    El header del panel admin ahora muestra un badge con la versión actual (vX.XX.X) visible en todas las tabs, tanto en desktop (derecha del header) como en móvil (junto al label "Admin").

    Nuevo

    • 🔢 Badge de versión en AdminHeader desktop (lado derecho)
    • 📱 Badge de versión en el header admin móvil
  20. v8.96.0

    🏷 Título de la pestaña en Welcome ahora solo "GarBotGPT"

    El título del navegador en la página de inicio (welcome) mostraba "GarBotGPT - Gestion Empresarial con IA". Ahora muestra solo "GarBotGPT", más limpio. Los títulos de chats/proyectos/carpetas siguen igual (con su sufijo).

    Nuevo

    • 🏷 baseTitle de la welcome page simplificado a "GarBotGPT"
  21. v8.95.0

    💾 Límite de almacenamiento por usuario + modal de usuario con tabs

    Dos mejoras en el panel admin → Usuarios. (1) Nuevo límite de almacenamiento por usuario: un admin puede establecer un tope en MB (con presets 500MB/1GB/5GB o "sin límite"). El upload de archivos verifica el uso actual vs el límite y rechaza la subida si lo excede. El modal muestra una barra con el uso actual del usuario. (2) El modal de edición de usuario rediseñado: más grande (max-w-2xl) y organizado en 3 tabs — Perfil, Cuenta y seguridad, Permisos y límites — en vez de un scroll largo. La self-hosted Supabase (supabase.garbotgpt.com) pasa a ser la DB activa.

    Nuevo

    • 💾 Nuevo campo storage_limit_mb por usuario (migración 089)
    • 🚫 Enforcement en /api/files/upload: rechaza subida con 413 si supera el límite
    • 📊 Barra de uso de almacenamiento en el modal (verde/ámbar/rojo según %)
    • 🔐 GET /api/admin/users ahora devuelve storage_used_bytes (SUM de archivos) por usuario
    • 🗄 DB activa migrada a self-hosted supabase.garbotgpt.com

    Mejorado

    • 🎚 Presets rápidos de límite: 500 MB · 1 GB · 5 GB · Sin límite

    Seguridad

    • 🗂 Modal de usuario rediseñado con 3 tabs (Perfil · Cuenta y seguridad · Permisos y límites) y más grande
  22. v8.94.0

    👁 Visor de documentos in-app en "Mis Archivos"

    Antes, al clicar un archivo se abría una pestaña nueva que normalmente lo descargaba (sobre todo Office docs). Ahora se abre un visor full-screen integrado que previsualiza el documento según su tipo: imágenes, PDFs e iframe, vídeo/audio con reproductor, Office (.docx/.xlsx/.pptx) con el visor de Microsoft Office Online (vía URL firmada temporal), y texto/código/markdown/csv renderizado. Si un tipo no se puede previsualizar, ofrece descarga. Botones de Abrir en pestaña y Descargar en la toolbar, cierre con Esc.

    Nuevo

    • 👁 Visor full-screen con toolbar (Abrir / Descargar / Cerrar con Esc)
    • 🖼 Imágenes: render directo · 📄 PDF: iframe inline
    • 🎬 Vídeo y 🔊 audio: reproductor nativo embebido
    • 📊 Office (.docx/.xlsx/.pptx): visor de Microsoft Office Online vía URL firmada temporal (10 min)
    • 📝 Texto/código/markdown/csv: contenido renderizado (cap 200KB)
    • 🆕 Endpoint /api/files/[id]/signed-url para generar la URL firmada del visor Office

    Mejorado

    • Fallback a descarga para tipos no previsualizables
  23. v8.93.0

    🎨 "Mis Archivos" rediseñada por completo

    Rediseño total de la página /my-files. Antes era una tabla plana y gris. Ahora tiene: hero con icono degradado, 4 stats cards (archivos, indexados, procesando, espacio), barra de almacenamiento usado (cuota visual 5GB), iconos coloreados por tipo de archivo (PDF rojo, imagen fucsia, docx azul, pptx naranja, xlsx verde, etc.), filas tipo card con hover lift, badges de estado mejorados y mejores empty states. Soporte dark mode completo.

    Nuevo

    • 📊 4 stats cards: Archivos · Indexados · Procesando · Espacio usado
    • 🌈 Iconos coloreados por tipo: PDF rojo, imagen fucsia, vídeo rosa, audio cian, docx azul, pptx naranja, xlsx verde, código slate, zip ámbar
    • 🃏 Filas tipo card con sombra + hover lift en vez de tabla plana
    • 🔍 Búsqueda con focus ring + filtros pill con degradado activo
    • Topbar sticky con blur, mejores empty/loading states, Enter para guardar rename

    Mejorado

    • 🎨 Hero con icono degradado violeta→fucsia + subtítulo descriptivo
    • 💾 Barra de almacenamiento usado (cuota visual 5GB, se pone roja >90%)
  24. v8.92.0

    📁 "Mis Archivos" añadido al menú de usuario (desktop + móvil)

    La sección "Mis Archivos" (/my-files) solo era accesible desde la sidebar. Ahora aparece también en el menú desplegable del avatar (desktop) y en el menú de acciones (móvil), junto a Calendario y Changelog.

    Nuevo

    • 📁 Link "Mis Archivos" en el dropdown del avatar (Header.tsx desktop)
    • 📱 Entrada "Mis Archivos" en el menú de acciones móvil (MobileHeader.tsx)

    Mejorado

    • 🎨 Icono FileText ámbar para consistencia visual
  25. v8.91.0

    🎙 Voz: fix DEFINITIVO de bubbles que desaparecían + fix doble bubble en tool calls

    Dos fixes críticos del modo voz. (1) Las bubbles del modo voz desaparecían tras un rato porque mergeServerMessagesWithOptimistic en chat-store.ts wipea cualquier mensaje local que NO tenga meta.optimistic_local=true cuando loadMessages se ejecuta. Marcamos todos los addMessage del modo voz como optimistic_local + persistimos optimistic_client_message_id en DB para matching robusto. (2) Cuando se activaba un tool aparecía una bubble "[Respuesta de voz sin transcripcion]" antes de la respuesta real. Causa: response.done se dispara también para el turn que solo contiene function_call (sin texto). Ahora detectamos isFunctionCallOnly y skipeamos el bubble — solo creamos uno con la respuesta tras sendToolOutput.

    Nuevo

    • 🔇 Eliminado log ruidoso "response.audio.delta received" (se disparaba cada frame de audio)

    Mejorado

    • 🔗 Persistimos optimistic_client_message_id en DB para que matchesOptimisticWithPersisted matchee perfectamente

    Arreglado

    • 🐛 Fix DEFINITIVO bubbles voz: meta.optimistic_local=true en todos los addMessage del modo voz (user placeholder, AI deltas, AI final, generated image)
    • 🐛 Fix doble bubble en tools: response.done con solo function_call items NO crea bubble (se espera el response.done del follow-up tras sendToolOutput)
  26. v8.90.0

    🎙 GarBotGPT-Voz: 4 tools nuevas + identidad reforzada + fix bubbles que desaparecían

    Dos mejoras grandes al modo voz: (1) Las burbujas del usuario que aparecían un segundo y desaparecían eran porque updateMessage ignora silenciosamente IDs no presentes en el store (FIX 7.11.0) — si un loadMessages se disparaba entre handleSpeechCommitted y handleTranscript, el placeholder se wipeaba y el bubble nunca volvía. Ahora si el placeholder ya no existe, se re-añade con addMessage. (2) Añadidas 4 herramientas nuevas a GarBotGPT-Voz: youtube_search, save_memory, get_current_datetime, generate_image. System prompt reescrito con identidad fuerte "GarBotGPT-Voz" y descripción completa de capacidades.

    Nuevo

    • 🆕 Tool youtube_search: busca videos en YouTube (scrape ligero, sin API key)
    • 🆕 Tool save_memory: el usuario dice "recuerda que..." y GarBotGPT-Voz lo persiste en la tabla memories (scope user)
    • 🆕 Tool get_current_datetime: handler local (sin fetch) para "qué hora es" / "qué día es hoy"
    • 🆕 Tool generate_image: genera imagen via /api/image/generate y la inserta como attachment en el chat
    • 🎭 System prompt v8.90 con identidad "GarBotGPT-Voz, asistente conversacional con acceso completo a las herramientas de GarBotGPT"
    • 📋 Reglas explícitas por tool en el prompt: cuándo usar cada una y cómo presentar resultados en voz
    • Total tools en voz: 7 (web_search, network_search, db_query, youtube_search, save_memory, get_current_datetime, generate_image)

    Arreglado

    • 🐛 Fix bubbles desapareciendo: handleTranscript verifica si el placeholder sigue en store y lo re-añade si no
  27. v8.89.0

    🎙 Voz: arreglada transcripción + bubble del usuario (eventos GA renombrados)

    El nuevo modelo `gpt-realtime-mini` (GA) envía eventos con nombres distintos al Beta: `response.audio_transcript.*` → `response.output_audio_transcript.*`, y el `session.update` GA anida `turn_detection` y `transcription` dentro de `audio.input`. Nuestro hook escuchaba los nombres viejos → no llegaba transcripción ni del usuario ni del asistente (síntoma: "[Respuesta de voz sin transcripcion]" en bucle y sin bubble del usuario). Arreglado migrando todos los handlers + payload a formato GA.

    Nuevo

    • 🔧 session.update migrado a formato GA: `output_modalities`, `audio.input.{transcription,turn_detection}`, `audio.output.voice`
    • Compat: los handlers Beta antiguos se mantienen (case fall-through) por si en algún momento revertimos
    • 👤 Ahora aparece la bubble del usuario inmediatamente al hablar + transcripción real al terminar
    • 🤖 Ahora aparece transcripción real del asistente en vez del fallback "[Respuesta de voz sin transcripcion]"

    Arreglado

    • 🐛 Eventos GA añadidos: response.output_audio.delta/done · response.output_audio_transcript.delta/done · response.output_text.delta/done · conversation.item.input_audio_transcription.delta
  28. v8.88.0

    🎙 Voz: migración a gpt-realtime-mini (GA) — el preview anterior está deprecado

    OpenAI deprecó la familia `*-realtime-preview`. Migrado el default del modo voz a `gpt-realtime-mini` (modelo GA oficial). Mismo precio (~$10/$20 por 1M tokens audio in/out), mejor latencia (~400ms) y soporte completo GA: interrupciones nativas, function calling estable, image input y mejor calidad de voz. La cuenta ahora tiene acceso a los 4 modelos GA (gpt-realtime, gpt-realtime-mini, gpt-realtime-1.5 y gpt-realtime-2 — verificado HTTP 200 en client_secrets).

    Nuevo

    • Default migrado: `gpt-4o-mini-realtime-preview` → `gpt-realtime-mini`
    • 🆕 Modelos GA accesibles: gpt-realtime · gpt-realtime-mini · gpt-realtime-1.5 · gpt-realtime-2
    • 💰 Mini sigue siendo 3× más barato que los full (~$10/$20 vs ~$32/$64 por 1M tokens audio)
    • 🔧 Cambio en src/app/api/voice/session/route.ts + src/hooks/useRealtimeVoice.ts

    Mejorado

    • Latencia ~400ms (vs ~600ms del preview anterior)
  29. v8.87.0

    🔇 Botón mute arreglado + voice card en posición correcta en Welcome

    Dos fixes UX del modo voz: el botón mute no cambiaba visualmente (la lógica retornaba sin tocar state si el audio stream no estaba listo) y la voice card aparecía abajo en welcome (donde no hay composer). Ahora el mute siempre toggle el state + aplica al stream si está disponible, y la voice card en welcome se ancla encima del input centrado mediante CSS var --welcome-input-top expuesta por el WelcomeScreen.

    Nuevo

    • 📍 Voice card en welcome: top var(--welcome-input-top) + translateY(-100%) = justo encima del input centrado
    • 📏 WelcomeScreen expone posición Y del input vía useEffect + ResizeObserver

    Mejorado

    • Cuando voiceModalOpen, el wrapper del input del welcome tiene mt-32 extra para empujar elementos arriba y dejar hueco visual

    Arreglado

    • 🐛 toggleMute: setIsMuted(prev => !prev) primero, aplica a stream solo si existe. Antes retornaba si stream era null y el state no cambiaba.
  30. v8.86.0

    🎙 Voz: modelo default cambiado a gpt-4o-mini-realtime-preview (gpt-realtime requería acceso)

    El endpoint GA /v1/realtime/calls funciona perfecto, pero el modelo `gpt-realtime` (unified GA) requiere acceso especial que esta API key no tiene. Probé los modelos disponibles y todos los `*-realtime-preview` SÍ funcionan. Cambiado default a `gpt-4o-mini-realtime-preview` (más barato).

    Nuevo

    • Probados con HTTP 200: gpt-4o-realtime-preview · gpt-4o-realtime-preview-2024-12-17 · gpt-4o-mini-realtime-preview · gpt-realtime-mini
    • 💰 Default a gpt-4o-mini-realtime-preview (más barato que la versión full)

    Mejorado

    • 🔧 Si quieres usar gpt-realtime (unificado), solicita acceso a OpenAI o cámbialo en la UI

    Arreglado

    • 🐛 Error 403 model_not_found con `gpt-realtime` → confirmado por curl directo

1036 versiones publicadas · página 27 de 35. Míralo dentro de la app.