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

    🎯 Quiz interactivo: responde pregunta a pregunta y ve tu nota al final

    El Generador de Quiz ya no muestra un bloque de texto con respuestas colapsables (que además salían como etiquetas <details> sin renderizar). Ahora es una tarjeta INTERACTIVA: cada pregunta con sus opciones seleccionables, botón Siguiente/Anterior y barra de progreso; al terminar ves tu nota (aciertos/total y %), qué preguntas fallaste, tu respuesta y la correcta con su explicación, y un botón para reintentar. Internamente el modelo genera el quiz en un formato estructurado que la app pinta como componente.

    Nuevo

    • 🎯 Quiz como tarjeta interactiva: elige opción → Siguiente → resultados
    • 🔁 Botón "Reintentar"; ya no aparecen etiquetas <details> sin formato

    Arreglado

    • 📊 Al final: nota, aciertos/fallos, tu respuesta vs la correcta + explicación
  2. v9.4.31

    🧹 Arreglado el "data: {...}" raro que salía en las respuestas con imagen

    Al analizar imágenes (con OCR) aparecía una línea técnica fea encima de la respuesta: data: {"type":"tool_timeline_event",...}. Era un evento interno del stream que no se filtraba bien cuando quedaba pegado al texto. Ahora se elimina aunque no esté en su propia línea, y además el contenido FINAL del mensaje del asistente se limpia de estos eventos al pintarlo (no solo durante el streaming), sin afectar a artifacts ni código.

    Nuevo

    • 🧹 Ya no se cuela el "data: {tool_timeline_event…}" encima de las respuestas

    Arreglado

    • 🛡️ Limpieza robusta: pilla el evento aunque venga pegado al texto, y también en el mensaje ya guardado
  3. v9.4.30

    ⚡ Menos latencia: lecturas de BD en paralelo al preparar la respuesta

    Primer paso (conservador) para reducir el tiempo que tarda el chat en arrancar la respuesta. Antes de llamar al modelo se hacían varias consultas a la base de datos de forma secuencial; ahora se lanzan en paralelo las que son independientes: el perfil del usuario junto con sus memorias, y (en proyectos) los datos del proyecto junto con las memorias del proyecto. La sección de carpetas ya iba en paralelo. Cada par ahorra una ida y vuelta a la BD (~50-150 ms con la BD en el NAS). Sin cambios de comportamiento.

    Nuevo

    • Cambio conservador en la ruta crítica del chat: misma lógica, menos esperas

    Mejorado

    • Perfil + memorias del usuario se cargan en paralelo (antes secuencial)
    • En proyectos: datos del proyecto + memorias del proyecto en paralelo
  4. v9.4.29

    🏷️ La insignia muestra el modelo REAL que respondió + modelo de visión configurable

    Dos mejoras. (1) Hasta ahora la insignia del mensaje mostraba el modelo que TENÍAS seleccionado, aunque el servidor lo cambiara (AutoModel o el forzado de visión a 5.5). Ahora el servidor avisa por el stream del modelo realmente usado y la insignia lo refleja al instante, sin esperar a recargar. (2) El modelo que analiza las imágenes ya no está fijo en el código: hay un ajuste nuevo en el panel admin (Modelos → "Modelo para análisis de imagen") con un desplegable de los modelos con visión; si no se configura, se usa GarBotGPT-5.5 por defecto.

    Nuevo

    • 🏷️ La insignia del mensaje refleja el modelo que de verdad respondió (no el seleccionado)
    • ⚙️ Panel admin: elige el modelo para análisis de imagen (desplegable de modelos con visión)
    • 🔁 Por defecto sigue siendo GarBotGPT-5.5 si no se configura nada
  5. v9.4.28

    🖼️ Fotos sin tarjeta (solo la imagen) + análisis de imagen siempre con GarBotGPT-5.5

    Dos ajustes pedidos. (1) Las imágenes en el chat se muestran ahora SOLO como la foto: se quitó la tarjeta azul con borde, el nombre del archivo, el tamaño y el icono; además ya no se recorta (se conserva la imagen entera, no cuadrada forzada). Sigue siendo pulsable para abrir la vista grande. (2) El análisis de imagen ya no lo hace el modelo Mini: cuando hay una foto adjunta, el servidor fuerza GarBotGPT-5.5 (el mejor en visión), por encima del AutoModel y del modelo seleccionado. Si por permisos 5.5 no estuviera disponible para ese usuario, se cae al AutoModel/modelo normal.

    Nuevo

    • 🖼️ Las fotos del chat se ven solo como imagen (sin tarjeta, sin borde, sin recortar)
    • 🧠 Con foto adjunta se usa SIEMPRE GarBotGPT-5.5 para analizarla (no el Mini)
  6. v9.4.27

    🖼️ Las fotos vuelven a verse en el chat (miniaturas) y en cuadrícula compacta

    Dos arreglos para los adjuntos de imagen en el chat. (1) Las fotos no se veían: salía una tarjeta con icono de clip en vez de la miniatura. Causa: el bucket privado user-files tenía RLS activado pero SIN políticas, así que el navegador no podía firmar la URL de tus propias imágenes (todo denegado por defecto); solo el servidor, con clave de servicio, podía. Se han añadido las políticas estándar para que cada usuario acceda a SUS archivos (carpeta = su id), de forma segura: un usuario no puede ver los de otro. (2) Las imágenes se apilaban a lo ancho (220px) una debajo de otra, obligando a hacer scroll; ahora se muestran como miniaturas cuadradas compactas que se colocan varias por fila. Los archivos no-imagen (PDF, hojas, docs) mantienen su tarjeta.

    Nuevo

    • 🖼️ Las fotos del chat se ven de nuevo como miniatura (no el icono de clip)
    • 🧱 Imágenes en cuadrícula compacta (varias por fila) en vez de apiladas → menos scroll

    Seguridad

    • 🔐 Políticas RLS del bucket user-files: cada quien ve solo SUS archivos (seguro)
  7. v9.4.26

    🖼️ Arreglado: editar un mensaje con fotos ya no pide volver a subirlas

    Al editar (o regenerar) un mensaje que tenía imágenes, el modelo se quedaba sin ellas y pedía que las subieras otra vez. La causa: al reenviar la petición, los adjuntos solo se incluían si había una herramienta de documentos activa (unidad de red, hoja de cálculo, generación de documentos, intérprete de código o RAG estricto); las imágenes, que usan visión y no dependen de ninguna herramienta, se descartaban. Ahora las imágenes se reenvían SIEMPRE al editar/regenerar, así la visión sigue funcionando. Los adjuntos no-imagen (documentos/hojas) mantienen su condición anterior.

    Nuevo

    • 🖼️ Editar/regenerar un mensaje con fotos conserva las imágenes (visión sigue activa)
    • 🔧 Las imágenes se reenvían siempre; los documentos/hojas siguen ligados a su herramienta
  8. v9.4.25

    💬 Chats independientes: varias conversaciones respondiendo a la vez

    Antes el estado de "respondiendo" era único y global: si un chat estaba generando respuesta y te ibas a otro, el segundo se bloqueaba (tu mensaje quedaba en cola). Ahora el streaming es POR conversación: cada chat tiene su propio buffer, su propio indicador y su propio botón de detener. Puedes lanzar una respuesta en un chat, cambiarte a otro y escribir/enviar allí inmediatamente, mientras el primero sigue respondiendo en segundo plano; al volver, ves su texto en vivo. Un mensaje encolado siempre se envía a SU conversación de origen aunque hayas cambiado de chat. Los campos que ve la UI siguen reflejando el chat que estás mirando, así que el resto de la app (indicadores, sugerencias, voz, artifacts) no cambia. Si borras un chat que estaba respondiendo, su stream se aborta limpiamente.

    Nuevo

    • 💬 Streaming POR conversación: ya no se bloquea enviar en otro chat mientras uno responde
    • 🔀 Cambia de chat libremente: el de origen sigue respondiendo en segundo plano
    • 📨 La cola de mensajes recuerda su conversación: cada mensaje va a SU chat
    • 🧹 Borrar un chat en curso aborta su respuesta sin afectar a los demás
  9. v9.4.24

    🧭 AutoModel inteligente: ahora elige el MEJOR modelo para cada tarea (sube y baja)

    Reescrito el motor de selección automática de modelo. Antes solo BAJABA a un modelo más barato cuando la pregunta era trivial (ahorro), nunca mejoraba las respuestas difíciles. Ahora clasifica la tarea (trivial · simple · código · razonamiento/matemáticas · creativo · texto largo · visión) y, leyendo tu catálogo REAL de modelos habilitados (con sus capacidades: visión, herramientas, ventana de contexto, reasoning_effort), elige el mejor encaje: BAJA a un modelo rápido para saludos/preguntas cortas y SUBE a uno más capaz (p. ej. un Codex para programar, el modelo de mayor razonamiento para matemáticas, uno con visión para imágenes) cuando la tarea lo pide. Estrategia equilibrada: calidad cuando hace falta, ahorro cuando no. Si una imagen requiere visión y tu modelo no la tiene, cambia solo a uno que sí. Robusto: ante cualquier error o catálogo vacío respeta tu modelo. Solo afecta al modo AutoModel; los invitados siguen en GarBotGPT-5-Mini.

    Nuevo

    • 🧭 Enrutado BIDIRECCIONAL: baja en triviales y SUBE en tareas duras (código, mates, análisis largo)
    • 🎯 Consciente de la tarea: código → modelo coder; razonamiento → mayor reasoning_effort; imagen → modelo con visión
    • 🗂️ Usa el catálogo real de model_configs (capacidades reales), no listas fijas — nunca apunta a un modelo inexistente

    Arreglado

    • 🛡️ A prueba de fallos: ante error o sin catálogo, se respeta el modelo que elegiste; invitados sin cambios
  10. v9.4.23

    🧹 Limpieza del AutoModel: fuera el código muerto de "tipo de tarea"

    El auto-routing de modelo arrastraba código que se ejecutaba en CADA mensaje pero no tenía ningún efecto: detectTaskType() clasificaba el input (code/reasoning/creative/...) y el resultado se guardaba en globalThis.__lastTaskType y en un log, pero nunca se leía en ninguna parte. También quedaban un mapa TASK_PREFERRED_FAMILY y una lista FAST_MODELS sin usar. Se ha eliminado todo (≈90 líneas) para que el router solo haga lo que realmente decide: el downgrade conservador a un modelo más rápido cuando la pregunta es trivial. Sin cambios de comportamiento para el usuario; menos cómputo por mensaje y código más claro.

    Nuevo

    • 🧹 Eliminado detectTaskType() + patrones CODE/REASONING/CREATIVE (no se leía su salida)
    • 🧹 Fuera el mapa TASK_PREFERRED_FAMILY, la lista FAST_MODELS y globalThis.__lastTaskType (código muerto)

    Mejorado

    • ⚙️ El downgrade conservador (pregunta trivial → modelo rápido) sigue intacto y verificado por tipos
  11. v9.4.22

    🩹 Causa raíz del "typing failed": FK de conversación optimista (arreglado en el endpoint)

    Tras reproducirlo contra la BD: el endpoint /api/conversations/[id]/typing devolvía 500 "Failed to update typing state" cuando el chat se acababa de crear de forma OPTIMISTA y aún no estaba persistido en la tabla conversations → el upsert violaba la foreign key (code 23503). La base de datos está correcta (la constraint UNIQUE existe). Ahora el endpoint trata ese caso como lo que es —no crítico— y responde 200 no-op en lugar de 500. Junto con el backoff del cliente (v9.4.21), el indicador de "escribiendo" deja de generar errores por completo.

    Nuevo

    • 🔎 Diagnóstico confirmado reproduciendo el upsert contra la BD real
    • La tabla conversation_typing y su constraint UNIQUE están correctas (no requería migración)

    Arreglado

    • 🩹 /typing ya no devuelve 500 cuando la conversación aún no existe (FK 23503 → 200 no-op)
  12. v9.4.21

    🔇 Fin de la tormenta de errores "typing heartbeat failed"

    El composer enviaba un "heartbeat" de escritura a /api/conversations/[id]/typing cada 1,2s mientras escribías; si el endpoint fallaba, registraba el error CADA vez → la consola se inundaba de "[ChatInput] typing heartbeat failed". Ahora, al primer fallo, se DEJA de llamar al endpoint para esa conversación (no se reintenta cada 1,2s) y se registra un solo aviso. El indicador de "escribiendo" es no crítico y el broadcast en tiempo real (el que usan los chats compartidos) sigue funcionando aparte del endpoint.

    Nuevo

    • 📡 El broadcast realtime de "escribiendo" sigue activo (chats compartidos OK)

    Arreglado

    • 🔇 El heartbeat de typing para al primer fallo (no más spam cada 1,2s)
    • 🧹 Consola limpia: un solo aviso en vez de error continuo
  13. v9.4.20

    🟢 Tu propio estado siempre "En línea" + nombres de modelo legibles

    Pulido tras una prueba completa de la app. (1) El pill de presencia de tu propio usuario a veces mostraba "Desconnectat" (dependía del último ping de actividad); ahora el usuario actual se ve SIEMPRE "En línea" (si estás usando la app, estás conectado). (2) Se mostraban ids crudos de modelo ("gpt-5-5", "gpt-5.2") en el modal de Custom GPT ("modelo por defecto") y en el "Coste por modelo" del dashboard admin; ahora se resuelven al nombre del panel (ej. "GarBotGPT-5.5").

    Nuevo

    • 🟢 Tu propio estado siempre "En línea" (no "Desconnectat")
    • 🏷️ Modal Custom GPT: nombre de modelo legible en "modelo por defecto"
    • 🏷️ Dashboard admin: "Coste por modelo" con nombre del panel, no el id crudo
  14. v9.4.19

    🔓 Botón "Iniciar sesión" para invitados + arreglado login desde invitado

    Dos cosas. (1) En la cabecera de invitado ahora hay botón de "Iniciar sesión"/"Entrar" además de "Regístrate" (escritorio y móvil). (2) BUG: la página de login redirigía a /chat nada más entrar si había una sesión de invitado (anónima) activa, así que era imposible loguearse desde el modo invitado. Ahora la auto-redirección solo ocurre con un usuario REAL; si la sesión es anónima, se muestra el formulario de login con normalidad.

    Nuevo

    • 🔓 Botón "Iniciar sesión"/"Entrar" para invitados (escritorio + móvil)
    • La auto-redirección de /auth/login solo aplica a usuarios reales, no a invitados

    Arreglado

    • 🐛 Arreglado: login imposible desde invitado (redirigía a /chat por la sesión anónima)
  15. v9.4.18

    📱 Envío instantáneo desde welcome también en MÓVIL

    El envío optimista de v9.4.17 hacía instantánea la transición welcome→chat en escritorio (la vista cambia con activeConversationId), pero en móvil el cambio depende de NAVEGAR a /chat/[id], y esa navegación se hacía tras crear la conversación (~3s) → en móvil seguía lento. Ahora la navegación a /chat/[id] también es optimista (al instante), porque esa ruta es client-only y renderiza el chat desde el store sin consultar al servidor. Resultado: en móvil pulsar enviar también salta al chat al momento, con el mensaje y "Pensant…" visibles.

    Nuevo

    • 🧭 Navegación a /chat/[id] optimista (ruta client-only, sin 404)
    • ↩️ Si falla crear la conversación, vuelve a welcome y restaura el texto

    Mejorado

    • 📱 Móvil: clic enviar → vista de chat instantánea (antes esperaba ~3s)
  16. v9.4.17

    ⚡ Envío instantáneo desde welcome (de ~2,6 s a ~0 s percibidos)

    Medido en directo: al enviar el primer mensaje desde la pantalla de bienvenida, pasaban ~2.609 ms (2,6 s) hasta que cambiaba a la vista de chat, porque el cliente ESPERABA a crear la conversación en el servidor (round-trip a la BD) antes de cambiar de pantalla y mostrar el mensaje. Ahora el envío es OPTIMISTA: se pre-genera el id de la conversación y se cambia a la vista de chat + se muestra tu mensaje y "Pensant…" AL INSTANTE; la conversación se crea en el servidor en segundo plano (con ese mismo id, sin saltos). La respuesta del modelo sigue tardando lo suyo (latencia BD+modelo), pero la app reacciona al momento. Si la creación fallara, se revierte y se restaura el texto.

    Nuevo

    • 🟦 Tu mensaje y "Pensant…" aparecen al momento, sin esperar al servidor
    • 🆔 La conversación se crea en segundo plano con id pre-generado (sin swap ni remontaje)

    Mejorado

    • Clic enviar → vista de chat: de ~2.609 ms a ~16 ms (instantáneo)
  17. v9.4.16

    ⚡ Arreglados los parpadeos/tirones del chat (tormenta de 403 + re-animación)

    Se cazaron en directo (navegador + instrumentación del DOM) las causas de los parpadeos. (1) Los hooks de colaboración (TypingIndicator y useConversationCollaboration) reconsultaban sus endpoints cada 1,5s/30s y, para invitados o conversaciones sin acceso, recibían 401/403 y REINTENTABAN sin parar → tormenta de errores + re-renders que llegaban a congelar la página (React #185 "Maximum update depth"). Ahora paran al primer 401/403 y se reinician solo al cambiar de conversación. (2) La animación de entrada de las burbujas (message-in) se re-disparaba al terminar el stream porque la burbuja se remonta con el id de BD; ahora solo se anima en mensajes recién creados (<2s) — adiós flash, y también desaparece la cascada de animaciones al abrir un chat.

    Nuevo

    • TypingIndicator y colaboración dejan de reintentar ante 401/403 (no más tormenta de 403)
    • 🧊 Adiós al congelamiento por bucle de re-render (React #185)
    • La animación de burbuja ya no parpadea al terminar de responder ni al abrir un chat
  18. v9.4.15

    🔁 Invitados ahora usan GarBotGPT-5-Mini (antes 5.2)

    Se cambió el modelo disponible para invitados (no logueados) de GarBotGPT-5.2 a GarBotGPT-5-Mini (gpt-5-mini). Ahora GarBotGPT-5-Mini es el único modelo seleccionable para invitados y GarBotGPT-5.2 aparece bloqueado con candado como el resto. Forzado también server-side en /api/chat.

    Nuevo

    • 🔁 Modelo de invitado: GarBotGPT-5-Mini (gpt-5-mini)
    • 🛡️ Enforcement server-side actualizado a gpt-5-mini

    Seguridad

    • 🔒 GarBotGPT-5.2 pasa a estar bloqueado para invitados
  19. v9.4.14

    📱 Composer del welcome bajado para invitados + saludo sin IP

    Dos arreglos para invitados (no afecta a logueados). (1) En la pantalla de bienvenida, el cuadro de escribir aparecía flotando demasiado arriba (sobre las tarjetas de accesos rápidos) dejando un hueco abajo: pasaba porque la barra de navegación inferior no se renderiza para invitados, pero su altura (~56px) seguía reservada. Ahora se trata como altura 0 y el composer baja al fondo. (2) El saludo mostraba la IP del invitado ("Invitado · 104.x.x.x"); ahora muestra siempre el alias amigable (ej. "Invitado Zorro Curioso 482"). Además, los nombres antiguos con IP se migran al alias en el siguiente mensaje.

    Nuevo

    • 📱 Composer del welcome ya no flota arriba para invitados (nav inferior cuenta como 0)
    • 🏷️ Saludo de invitado sin IP: alias amigable y estable
    • 🧹 Migración automática de nombres antiguos "Invitado · <ip>" → alias
  20. v9.4.13

    🔒 Menú de modelos con candados para invitados + 🧰 Herramientas por modelo (admin)

    Tres cosas. (1) Invitados (no logueados): el menú de modelos vuelve a mostrarse, pero todos los modelos salen bloqueados con candado y solo GarBotGPT-5.2 es seleccionable; un aviso invita a registrarse para desbloquear el resto. (2) El nombre que se asigna a un invitado ya NO es su IP, sino un alias amigable y estable (ej. "Invitado Zorro Curioso 482"), más legible en el panel admin y sin exponer la IP. (3) NUEVA pestaña "Herramientas" en el editor de modelos del admin: permite habilitar/deshabilitar por modelo qué herramientas aparecen en el menú del chat (búsqueda web, deep research, código, imágenes, documentos, hojas de cálculo, conocimiento, integraciones). Por defecto todas habilitadas, así que los modelos existentes no cambian.

    Nuevo

    • 🏷️ Nombre de invitado amigable y estable (no la IP)
    • 🧰 Admin: pestaña "Herramientas" para activar/desactivar tools por modelo (afecta al menú del input)

    Seguridad

    • 🔒 Invitados: todos los modelos visibles pero bloqueados (candado); solo GarBotGPT-5.2 usable

    Invitados

    • El selector de modelo se muestra de nuevo en escritorio y móvil, con todos los modelos en gris + candado salvo GarBotGPT-5.2.
    • Aviso "Regístrate gratis para desbloquear todos los modelos" dentro del menú.
    • El modo automático se oculta para invitados (solo pueden usar un modelo).
    • Nombre de invitado generado de forma estable a partir del id de usuario, sin usar la IP.

    Admin · Modelos

    • Nueva pestaña "Herramientas" en el editor de cada modelo.
    • Cada herramienta tiene su interruptor; lo desactivado no aparece en el menú del chat para ese modelo.
    • Se guarda en model_configs.tool_config (JSON). Por defecto todo habilitado.
  21. v9.4.12

    📱 Header móvil de invitado arreglado + invitados solo usan GarBotGPT-5.2

    Dos cosas para invitados (no afecta a logueados). (1) En móvil el header se desbordaba (el botón "Regístrate" quedaba cortado) por tener demasiados elementos. Como los invitados solo pueden usar un modelo, se quita el selector de modelo y se muestra una etiqueta estática "GarBotGPT-5.2"; eso libera espacio y el header entra bien (también compactado el botón Regístrate). (2) Los invitados solo pueden usar el modelo gpt-5.2 (= GarBotGPT-5.2): forzado server-side en /api/chat (se ignora auto-route y cualquier otro modelo) y sin selector en el cliente.

    Nuevo

    • 📱 Header móvil de invitado ya no se desborda (selector de modelo oculto + Regístrate compacto)
    • 🏷️ Sin selector de modelo para invitados (etiqueta estática)

    Seguridad

    • 🔒 Invitados forzados a gpt-5.2 (GarBotGPT-5.2) server-side
  22. v9.4.11

    🔒 Invitados: herramientas se bloquean y desactivan al llegar al límite

    Cuando un invitado agota sus usos de herramientas (3), las herramientas se bloquean: la que tuviera activa se desactiva automáticamente y en el menú aparece un candado con "Límite de herramientas alcanzado · Regístrate". Combinado con el bloqueo del servidor (por IP), las tools quedan inutilizables hasta registrarse. No afecta a usuarios logueados.

    Nuevo

    • ⏏️ La herramienta activa se desactiva automáticamente al llegar al límite

    Mejorado

    • 🪝 Hook useGuestUsage (uso real por IP) para la UI

    Seguridad

    • 🔒 Candado + "Límite alcanzado · Regístrate" en el menú de herramientas
  23. v9.4.10

    🔐 Límite de invitados REAL: por IP (ya no se salta cerrando incógnito)

    PRIORITARIO: el límite de invitados se podía saltar cerrando y reabriendo el navegador (incógnito) → cada sesión anónima nueva reseteaba el contador → acceso ilimitado. Ahora el límite es POR IP y día (tabla guest_usage + RPC atómica consume_guest_usage en la DB): 10 mensajes y 3 usos de herramientas por IP/día. Cerrar/reabrir el navegador NO resetea nada. Los contadores del chat y del menú de herramientas leen el uso real por IP. Fail-closed si la comprobación falla.

    Nuevo

    • 🔐 Límite por IP/día (10 mensajes, 3 herramientas) — no se salta con incógnito
    • ⚛️ Consumo atómico en la DB (consume_guest_usage) → sin condiciones de carrera
    • 📊 Contadores reales por IP en chat y menú de herramientas
  24. v9.4.9

    🏷️ El nombre del modelo nunca muestra el id crudo: siempre "GarBotGPT"

    Definitivo: en las burbujas, si el nombre del modelo no se resuelve al del panel (config aún no cargada, id desconocido, etc.) ya NO se muestra el id crudo (gpt-5.2). Se muestra el nombre del panel cuando se conoce (GarBotGPT-5.2) y, si no, la marca "GarBotGPT". Nunca el identificador técnico.

    Nuevo

    • 🏷️ Nunca el id crudo del modelo en las burbujas
    • Muestra "GarBotGPT-5.2" cuando se conoce; "GarBotGPT" como mínimo
  25. v9.4.8

    🛡️ PRIORITARIO: unidad de red nunca se llama si está desactivada + nombre del modelo + invitados con IP

    Tres arreglos. (1) PRIORITARIO: la unidad de red se llamaba aunque estuviera desactivada/oculta, porque el servidor la reactivaba por "intención inferida del texto" o por referencias a ficheros de la conversación reciente, ignorando el permiso/toggle. Ahora SOLO se activa con el toggle explícito del usuario (y con permiso): eliminada toda la inferencia y la reactivación por ficheros recientes; gate por permiso en varios puntos (defensa en profundidad). Si está oculta/desactivada, no se llama jamás. (2) El nombre del modelo salía como id crudo (gpt-5.2 / gpt-5-2): los mensajes guardan el id con punto o con guion, pero el mapa de nombres solo tenía una variante; ahora mapea ambas → siempre el nombre del panel. (3) Los invitados (sin login) ahora reciben nombre "Invitado · <IP>" para poder identificarlos en el panel admin.

    Nuevo

    • 🛡️ Unidad de red: solo se activa con el toggle explícito; nunca por inferencia ni ficheros recientes
    • 🏷️ Nombre del modelo resuelve variantes punto/guion (gpt-5.2 = gpt-5-2 = GarBotGPT-5.2)
    • 👤 Invitados identificados como "Invitado · <IP>" en el panel admin

    Seguridad

    • 🔒 Gate por permiso en varios puntos (no se llama si el usuario no puede usarla)
  26. v9.4.7

    🧹 Invitados: "Regístrate" visible, sin "En línea" y con acceso a Ajustes

    Tres ajustes del modo invitado (no afectan a usuarios logueados). (1) El botón "Regístrate" del header no se veía (el fondo degradado no se renderizaba); ahora es sólido (violeta) y bien visible, en header de escritorio y móvil. (2) En la pantalla de bienvenida se ocultaba mal el indicador "En línea" para invitados; ahora no aparece. (3) Como a los invitados se les ocultó el menú de usuario, no tenían forma de abrir Ajustes; añadido un botón de engranaje (Ajustes) en el header para invitados.

    Nuevo

    • 🔘 "Regístrate" sólido y visible (header escritorio y móvil)
    • 🙈 Pill "En línea" oculto para invitados en la welcome
    • ⚙️ Botón de Ajustes para invitados en el header (al ocultar el menú de usuario)

    Seguridad

    • 🔒 Sin cambios para usuarios logueados
  27. v9.4.6

    🛠️ Fix: contador de herramientas de invitado + imágenes de búsqueda web solo si son relevantes

    Dos arreglos. (1) El contador de usos de herramientas de invitado se quedaba en "3 de 3" aunque se usara una tool: el incremento de profiles.guest_tool_uses era fire-and-forget (void) y en Vercel las promesas no esperadas se cancelan al terminar la respuesta, así que nunca persistía. Ahora se hace con await (en la fase de preparación, sin latencia perceptible). (2) La búsqueda web a veces mostraba imágenes sin relación (logos, banderas, capturas de la página): el selector forzaba un mínimo de imágenes rellenando con candidatas de baja relevancia e incluso screenshots. Ahora solo muestra imágenes que superan un umbral de confianza; si ninguna lo supera, no muestra ninguna (mejor ninguna que irrelevante).

    Nuevo

    • 🔢 El contador de herramientas de invitado ahora baja al usar una tool (await del incremento)
    • 🖼️ Búsqueda web: solo imágenes relevantes; eliminado el relleno forzado y las capturas de página
    • 🙅 Si ninguna imagen es de fiar, no se muestra ninguna
  28. v9.4.5

    🏷️ Fix: el nombre del modelo salía como id crudo unos segundos

    En las burbujas, el modelo aparecía primero como id crudo (p.ej. "gpt-5.2") y, unos segundos después, ya con el nombre del panel admin ("GarBotGPT-5.2"). Causa: el store de modelos arrancaba con los nombres fallback estáticos (= id) y solo tras cargar /api/models (config del admin, con latencia) tenía el nombre real. Ahora la config de modelos se cachea en localStorage, así el primer render ya muestra el nombre del panel y se refresca en segundo plano. Sin flicker de nombre.

    Nuevo

    • 🏷️ El nombre del modelo se muestra ya correcto desde el primer render (sin pasar por el id crudo)

    Mejorado

    • 💾 Config de modelos cacheada en localStorage; refresco en segundo plano
    • 🛠️ Al guardar modelos en el panel, la cache se actualiza (reloadModels)
  29. v9.4.4

    🧹 Invitados: ocultar también la tarjeta de usuario del sidebar

    Para los invitados (sin login) quedaba visible la tarjeta de usuario al pie del sidebar mostrando "? Cargando…". Ahora también se oculta para invitados, igual que el menú de usuario del header y la barra inferior. Los usuarios logueados la siguen viendo.

    Nuevo

    • 🧹 Sidebar: tarjeta de usuario ("? Cargando…") oculta para invitados

    Seguridad

    • 🔒 Usuarios logueados: sin cambios
  30. v9.4.3

    🐛 Fix: el invitado entraba al login en vez de al chat

    El acceso directo de invitados no funcionaba: al entrar te mandaba a /auth/login en vez de al chat. Causa: el proxy/middleware (Next 16) redirigía a /auth/login a cualquier visitante SIN sesión en rutas no públicas, incluido /chat — antes de que el layout pudiera crear la sesión anónima. Solución: el middleware ahora permite /chat (y subrutas) sin sesión, así el GuestBootstrap crea la sesión anónima y muestra el chat. Además, los invitados (anónimos) ya pueden abrir /auth/register y /auth/login para "subir" a una cuenta real (antes el middleware los expulsaba de las páginas de auth por estar técnicamente autenticados).

    Nuevo

    • 🔓 Invitados anónimos pueden acceder a /auth/register y /auth/login para registrarse

    Arreglado

    • 🐛 Middleware: /chat accesible sin sesión → el invitado entra directo (no al login)

    Seguridad

    • 🔒 Resto de rutas privadas (ajustes, mis archivos, admin…) siguen pidiendo login

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