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. v7.9.0

    Fix edit revert + leak de unidad de red · tablas markdown editoriales · runtime Python robusto

    La versión 7.9.0 corrige tres bugs críticos: (1) al editar un mensaje y regenerar la respuesta, el cliente "volvía" a mostrar la respuesta antigua al acabar streaming hasta cambiar de chat — fix en el effect de message_versions; (2) la herramienta de unidad de red seguía activándose en regen aunque el cliente la enviara como false — fix en chat/route.ts para no inferir intent ni hacer fallback a attachments del histórico cuando hay regenerate_message_id; (3) el code interpreter fallaba con "No hay runtime de Python" cuando Python sí estaba instalado pero no en PATH del proceso Node — detección robusta con sweep de rutas, where/which y caché. También rediseña las tablas markdown con estética editorial profesional (zebra, hover ámbar, tipografía optical, dark mode).

    Nuevo

    • Fallback a `where python`/`where py` en Windows y `which python3`/`which python` en Unix antes de rendirse.
    • attachmentFileIdsForRag = [] en regen sin attachments explícitos: ni siquiera se consulta /files de la conversación. Antes se llevaba todos los attachments_json del histórico al RAG aunque el usuario no los hubiera mencionado.
    • effectiveDbQuery, effectiveGmailRead, effectiveGmailSend también respetan flags explícitas en regen (no se infieren del input editado).

    Mejorado

    • BUG CRÍTICO 1 — Edit message revert: tras editar un mensaje y recibir nueva respuesta, al acabar streaming la UI volvía a la respuesta anterior. Sólo cambiar de chat y volver mostraba la nueva. Fix en MessageBubble.tsx: el useEffect que cachea message_versions sólo se disparaba al montar; ahora también refetchea cuando cambia message.content / updated_at / edit_version / forcedAssistantVersion.
    • Tablas markdown rediseñadas con estética editorial: borde sutil, header zinc-50 con border-bottom 2px, zebra striping suave, hover ámbar, tipografía optical (uppercase 10.5px en headers con tracking 0.08em, 13.5px tabular-nums en cuerpo), primera columna en negrita, dark mode nativo, scroll horizontal limpio.
    • Caché del binario Python resuelto durante 5 minutos: la primera ejecución prueba candidatos, las siguientes van directas al binario que funcionó. Auto-renovación tras instalar.

    Arreglado

    • BUG CRÍTICO 2 — Network drive en edit: aunque la v7.7.0 ya enviaba network_drive_rag: false desde el cliente, el backend SEGUÍA activándolo por dos rutas: (a) inferredNetworkDriveIntent del texto del input editado, (b) fallback a recentConversationAttachmentIds del histórico de la conversación. Fix en chat/route.ts: cuando regenerate_message_id está presente, NO se infieren intents ni se hace fallback al histórico — sólo se respetan las flags y attachments explícitos del cliente.
    • BUG 3 — Runtime de Python: el code interpreter fallaba con "No hay runtime de Python disponible" en Windows incluso con Python instalado, porque el spawn no encontraba `python`/`py` en el PATH del proceso Node (típico tras instalar sin reiniciar el shell del dev server).
    • Detección de Python robusta: sweep de rutas habituales en Windows (LOCALAPPDATA\Programs\Python\Python313/312/.../38, Program Files\Python*) y macOS/Linux (/usr/local/bin, /opt/homebrew/bin, framework de macOS, pyenv).
    • Mensaje de error mejorado: lista los candidatos probados, incluye el path típico para CODE_INTERPRETER_PYTHON_BIN según SO, y recuerda que tras instalar Python hay que reiniciar el dev server.

    Fix CRÍTICO — Edit message revert

    • Síntoma: usuario envía mensaje → recibe respuesta A → edita el mensaje → streaming muestra respuesta B correctamente → al acabar streaming la UI vuelve a A → cambiar de chat y volver muestra B (la real, ya persistida en DB).
    • Causa raíz: el useEffect que carga `message_versions` desde Supabase sólo se ejecutaba al montar el componente (deps `[isAssistant, message.id]`). Tras editar, message.id no cambia (se reusa el regen_target_message_id) — el effect no refetchea. assistantVersions queda con `[{version_index: 1, content: respuestaA}]`.
    • displayContent (línea 2535) prioriza `assistantVersions[idx].content` sobre `message.content`. Como assistantVersions está cacheada con respuestaA, ése es el que se renderiza, aunque message.content de loadMessages ya sea respuestaB.
    • Fix: añadir `message.content`, `message.updated_at`, `message.edit_version` y `forcedAssistantVersion` a las dependencias del effect. Cualquier señal de regeneración refresca el cache local.
    • Fix bonus: el effect ahora usa flag de cancelación (cancelled=true en cleanup) para evitar setState tras unmount durante navegación entre chats.
    • Fix bonus: si ya hay un override `forcedAssistantVersion`, lo respeta al reposicionar el activeAssistantVersionIdx (antes saltaba siempre al último, lo que rompía la navegación entre versiones del usuario).
    • Fix bonus: comparación previMax vs nextMax para evitar reemplazar el array si la query devuelve menos versiones (race con loadMessages).

    Fix CRÍTICO — Network drive leak en regen

    • Síntoma: aunque la v7.7.0 corrigió el cliente para mandar `network_drive_rag: false` y `attachments: []` cuando ninguna herramienta los necesita, el backend seguía adjuntando archivos del contexto a la respuesta editada (chips "generame-un-docx-sobre…" bajo el mensaje).
    • Causa raíz 1 — inferencia textual: chat/route.ts línea 5429 calculaba `effectiveNetworkDriveRag = network_drive_rag || inferredNetworkDriveIntent || explicitFileReferences.length > 0`. Si el contenido editado contenía palabras como "documento", "lista", "manual", "explica" + scope, se reactivaba la herramienta a espaldas del cliente.
    • Causa raíz 2 — fallback a attachments del histórico: chat/route.ts línea 6872 calculaba `attachmentFileIdsForRag = explicitAttachmentFileIds.length > 0 ? explicitAttachmentFileIds : recentConversationAttachmentIds`. En regen el cliente manda explicitAttachmentFileIds=[] → caía al histórico → traía PDFs antiguos al contexto RAG.
    • Fix 1: cuando `regenerate_message_id` está presente, las inferencias `inferredNetworkDriveIntent`, `inferredDbQueryIntent`, `inferredGmailReadIntent`, `inferredGmailSendIntent` se ignoran. Sólo cuentan las flags explícitas del cliente.
    • Fix 2: cuando `regenerate_message_id` está presente Y el cliente NO mandó attachments explícitos, attachmentFileIdsForRag = []. No se hace fallback al histórico.
    • Resultado: editar "¿Qué puedes hacer?" devuelve respuesta limpia sin chips de PDFs viejos, sin reactivar herramientas que el usuario no había marcado.

    Fix — Code interpreter Python runtime

    • Síntoma: en Windows, pulsar "Ejecutar" en un bloque de código Python devuelve "No hay runtime de Python disponible en el servidor (python3/python/py)" aunque Python esté instalado en C:\Python313\python.exe o en LOCALAPPDATA.
    • Causa raíz: el proceso Node del dev server se inició antes de añadir Python al PATH (o tras instalar Python sin reiniciar el shell), por lo que `spawn("python")` falla con ENOENT en los 3 candidatos típicos.
    • Fix 1 — sweep de rutas habituales: nueva función `discoverExtraPythonPaths()` que busca en LOCALAPPDATA\Programs\Python\Python{313,312,311,310,39,38}\python.exe y Program Files\Python*\python.exe en Windows, y /usr/local/bin/python3, /opt/homebrew/bin/python3, /Library/Frameworks/Python.framework/... en macOS/Linux.
    • Fix 2 — fallback con `where`/`which`: si los candidatos comunes fallan, hace `where python`, `where py` (Windows) o `which python3`, `which python` (Unix) y añade los resultados a la lista de candidatos antes de rendirse.
    • Fix 3 — caché del binario resuelto: una vez encontrado un Python que funciona, se cachea durante 5 minutos. Las siguientes ejecuciones van directas al binario sin probar candidatos. Auto-renovación tras expirar.
    • Fix 4 — mensaje de error mejorado: lista los candidatos probados, incluye el path típico para CODE_INTERPRETER_PYTHON_BIN por SO (C:\Python312\python.exe / /usr/local/bin/python3) y recuerda reiniciar `npm run dev` tras instalar Python.
    • Sin breaking changes: si CODE_INTERPRETER_PYTHON_BIN está configurado, sigue siendo prioridad absoluta.

    Tablas markdown — rediseño editorial

    • Antes: tabla con borde rounded-2xl, header bg-zinc-100/90, sin zebra, sin hover, sin dark mode, fuente sm uniforme, primera columna sin distinción.
    • Ahora: borde rounded-lg con border zinc-200/80 dark:zinc-700/60 + shadow-sm.
    • Header: bg-zinc-50 dark:bg-zinc-800/60 con border-bottom 2px gruesa, tipografía uppercase 10.5px tracking 0.08em color zinc-500.
    • Body: zebra striping sutil con `[&>tr:nth-child(even)]:bg-zinc-50/60` (light) y `dark:[&>tr:nth-child(even)]:bg-zinc-800/30`.
    • Hover de fila: bg-amber-50/40 (light) / bg-amber-500/5 (dark) — destaca la fila apuntada sin saturar.
    • Bordes internos finos zinc-100 dark:zinc-800/60, last:border-b-0 (no double border al final).
    • Padding cómodo px-3.5 py-2.5, primer y último td/th con first:pl-4 / last:pr-4 para respiración.
    • Tipografía del cuerpo: 13.5px tabular-nums, `<strong>` se renderiza zinc-900 dark:zinc-50 font-semibold (datos resaltados), primera columna automáticamente font-medium text-zinc-900 dark:text-zinc-50 (parece label).
    • Soporte dark mode nativo en todos los rincones de la tabla.
    • Scroll horizontal cuando la tabla excede el contenedor (overflow-x-auto + min-width 360px sm 480px).

    Calidad técnica

    • Typecheck verde tras todas las modificaciones.
    • Sin breaking changes: el contrato de la API de chat sigue igual, sólo cambia la priorización interna de flags en regen.
    • Cache de python bin con expiración: evita filtraciones de rutas obsoletas tras desinstalar/mover Python.
    • Effect de message_versions con cancellation flag: previene setState on unmounted component al cambiar rápido de chat.
  2. v7.8.0

    Mobile model menu pro · fix subir archivos en canales · nuevas funciones de canal

    La versión 7.8.0 actualiza el menú de modelos mobile (modo automático + separación por plataforma como en PC), arregla un bug por el que subir archivos en canales fallaba siempre con error 500 (bucket inexistente), corrige el badge de corona en avatares cuadrados, y añade un set de nuevas funciones al módulo de canales: buscador interno, scroll-to-bottom con contador de mensajes nuevos, drag&drop de archivos sobre el chat, copiar texto y enlace directo a un mensaje, deep links #m-<id> con highlight, atajos de teclado (Ctrl+K, Ctrl+F, Esc) y picker de emojis y toolbar de acciones rediseñados.

    Nuevo

    • Mobile: el menú de modelos ahora muestra el toggle "Modo automático" con icono Sparkles ámbar (igual que en PC).
    • Mobile: modelos agrupados por proveedor (OpenAI, Google, Anthropic, Meta, Mistral, Ollama, OpenRouter, Groq, Otros) con header de plataforma en color distintivo y separadores.
    • Mobile: cuando "Auto" está activo el botón del header muestra "Auto · <modelo base>" con icono Sparkles, igual que en PC.
    • Whitelist de mimes en canales ampliada: PDF, Word, Excel, PowerPoint (legacy + nuevos), OpenDocument, RTF, CSV, JSON, XML, YAML, MD, HTML, ZIP/7Z/RAR/TAR/GZ, imágenes (HEIC/AVIF incluidos), audio y vídeo. Tamaño máximo subido a 25 MB (antes 10 MB).
    • Logo de admin (corona): el badge se posicionaba mal sobre avatares cuadrados (rounded-md). Ahora `admin-crown-ring` no fuerza border-radius — el avatar decide. Se añade variante `admin-crown-ring--circle` para avatares redondos del header.
    • Buscador interno del canal: nuevo botón Search en el header del canal abre una barra que filtra mensajes por contenido en tiempo real. Muestra contador de resultados.
    • Atajo Ctrl/Cmd + K abre el buscador del canal desde cualquier sitio del módulo. Ctrl/Cmd + F lo abre cuando el foco ya está dentro del canal.
    • Scroll-to-bottom button: aparece flotando arriba del input cuando el usuario está scrolleado y desaparece al llegar abajo.
    • Contador de mensajes nuevos: si llegan mensajes mientras estás scrolleado arriba, el botón de scroll muestra "X nuevo(s)" en píldora rosa.
    • Drag & drop de archivos: arrastra cualquier archivo sobre el área del canal y se sube automáticamente con preview overlay.
    • Copy message: nueva acción "Copiar texto" en la toolbar de hover del mensaje (icono Copy de lucide). Toast de confirmación.
    • Copy message link: la acción de copiar enlace ahora genera deep links `#m-<message_id>` correctamente. Pegar el link en otra pestaña hace scroll-into-view + highlight ámbar 1.4s.
    • Deep links: al abrir el canal con un hash `#m-<id>` el cliente desplaza la lista hasta ese mensaje y lo resalta brevemente.
    • Whitelist del input file = whitelist del backend (incluye .doc, .ppt, .pptx, .odt, .ods, .odp, .rtf, .md, .json, .xml, .yaml, .yml, .log, .html, .htm, .7z, .rar, .tar, .gz).

    Mejorado

    • Esc cierra el buscador o, si está cerrado, el modal de perfil y el popup de menciones.
    • Toolbar de acciones del mensaje rediseñada: rounded-md, bordes neutros zinc-200, hover bg-zinc-100, sin shadows pesadas. Soporte dark mode nativo.
    • Picker de emojis quick-react rediseñado: rounded-md, bordes neutros, hover bg suave en cada emoji.
    • Botón de respuesta a hilo (thread count) rediseñado: outline neutro en lugar de pill indigo.

    Arreglado

    • Bug crítico CANALES: subir archivos siempre devolvía 500 porque /api/channels/upload intentaba escribir en buckets `channel-files` y `files` que NO existen en el proyecto. Ahora usa el bucket real `user-files` con prefijo `channel-attachments/`.

    Mobile — Menú de modelos

    • Añadido toggle "Modo automático" con icono Sparkles ámbar al inicio del bottom-sheet de modelos. Texto explicativo "Elige modelo según complejidad" / "Usar siempre el modelo seleccionado".
    • Añadida la lógica de agrupación por proveedor (mismo `getProviderKey` que el header de PC): OpenAI, Google, Anthropic, Meta, Mistral, Ollama, OpenRouter, Groq, Otros.
    • Cada grupo tiene un header con label en color distintivo (emerald para OpenAI, blue para Google, orange para Anthropic, etc.).
    • Separadores `<hr>` entre grupos, padding refinado.
    • Cuando autoModelMode está activo, ningún modelo se marca como seleccionado (la decisión la hace el backend).
    • Botón principal del header muestra "Auto · <modelo base>" en lugar del nombre del modelo cuando autoModelMode está activo.
    • Icono Sparkles con gradient amber→orange dentro de un cuadradito redondeado en lugar del icono del modelo cuando autoModelMode está activo.

    Fix CRÍTICO — subir archivos en canales

    • Síntoma: pulsar el clip en un canal, seleccionar archivo, recibe error "No se pudo subir el archivo" sin más detalle. Logs del servidor: 500 Internal Server Error.
    • Causa raíz: /api/channels/upload intentaba subir al bucket `channel-files` y, si fallaba, al bucket `files`. Ninguno de los dos existe en este proyecto. Los buckets reales son `user-files`, `avatars` y `public-assets`.
    • Fix: ahora usa el bucket `user-files` (el mismo que /api/files/upload), aislando los archivos del módulo de canales bajo el prefijo `channel-attachments/<user_id>/...`. Sin fallback porque ya no es necesario.
    • Mejora: la whitelist de mime types se expandió usando el mismo modelo que /api/files/upload (ALLOWED_MIME_PREFIXES + ALLOWED_MIME_EXACT + ALLOWED_EXTENSIONS) — ya no rechaza .doc/.xls/.ppt legacy, .zip, .7z, .rar, HEIC, AVIF, etc.
    • application/octet-stream se acepta sólo si la extensión está en la whitelist (mismo patrón anti-abuso que en upload).
    • Tamaño máximo subido de 10 MB a 25 MB.
    • Errores devuelven status correctos (413 para tamaño, 415 para tipo, 500 para upload error) con mensajes legibles en español.
    • El campo accept del input file en ChannelView se sincronizó con la whitelist nueva.

    Logo de admin (corona) — fix de posicionamiento

    • Antes: la clase `.admin-crown-ring` forzaba `border-radius: 9999px`. Esto entraba en conflicto con avatares cuadrados nuevos (rounded-md/rounded-lg) en canales y modal de perfil — los volvía circulares aunque el contenedor fuese cuadrado.
    • Antes: el badge `.admin-crown-badge` se posicionaba a `top: -6px; right: -6px`, demasiado lejos del centro para avatares pequeños (28-32px) usados en filas de canal — quedaba sobre el ring.
    • Ahora: `.admin-crown-ring` no fuerza border-radius (deja que el elemento decida con rounded-md/rounded-full).
    • Ahora: badge a `top: -4px; right: -4px`, tamaño 13×13 (antes 14×14), borde 1.5px sólido blanco para contraste, gradient más suave (fde68a → f59e0b).
    • Nuevo: variante `.admin-crown-ring--circle` para casos en los que el avatar SÍ debe ser redondo (header de chat, modal de perfil, panel de admin).
    • Aplicada `admin-crown-ring--circle` en src/components/chat/Header.tsx (avatar redondo) y src/components/admin/panels/UsersAdminPanelContent.tsx (avatares de tabla y modal).
    • En src/components/channels/ChannelList.tsx se quitó el doble ring (`ring-1.5 ring-amber-400 admin-crown-ring`) — el shadow del crown ring ya provee el efecto.

    Canales — Buscador interno

    • Nuevo botón Search en el header del canal: toggle on/off, estilo zinc-900 cuando activo.
    • Barra de búsqueda full-width que aparece bajo el header cuando se activa, con icono Search, input de tipo text, botón X para limpiar y contador de resultados.
    • Búsqueda en tiempo real: filtra los mensajes cargados en memoria por substring case-insensitive en `content`.
    • Empty state cuando no hay resultados con mensaje claro y sugerencia de cargar histórico antiguo.
    • Atajo Ctrl/Cmd + K: abre el buscador desde cualquier punto del módulo de canales.
    • Atajo Ctrl/Cmd + F: abre el buscador cuando el foco ya está dentro de la vista del canal (data-channel-view).
    • Esc: cierra el buscador (limpia query); si ya está cerrado, cierra modal de perfil / mention popup como antes.

    Canales — Scroll & nuevos mensajes

    • Listener de scroll en el contenedor: detecta si el usuario está cerca del fondo (< 80px) o no.
    • Botón flotante "Ir al final" / "X nuevo(s)" arriba del input, con shadow suave y hover state.
    • Cuando llegan mensajes nuevos por Realtime y el usuario está scrolleado arriba (>120px), se incrementa contador `unreadNew` y se muestra el badge rojo con el número.
    • Si el mensaje viene del propio usuario (envió desde otra ventana), no cuenta para unreadNew.
    • Click en el botón hace scroll smooth al final y resetea el contador.
    • Cuando el usuario llega al fondo manualmente, también resetea unreadNew.

    Canales — Drag & drop de archivos

    • Listener `onDragOver`/`onDragLeave`/`onDrop` en el contenedor `data-channel-view`.
    • Detecta `dataTransfer.types.includes("Files")` para distinguir entre arrastrar texto vs arrastrar archivos.
    • Overlay de drop con backdrop blur, borde dashed blanco, icono Paperclip, mensaje "Suelta el archivo para subirlo" + ayuda "Máximo 25 MB · imágenes, vídeo, audio, documentos, ZIP…"
    • Al soltar, llama a `handleFileUpload(file)` con el primer archivo del DataTransfer.
    • Sin cambios en la UX: aparece el preview habitual + se sube + queda como `pendingAttachment` listo para enviar con el siguiente mensaje.

    Canales — Copy & deep links

    • Nueva acción "Copiar texto" en la toolbar de hover del mensaje (icono Copy de lucide). Usa `navigator.clipboard.writeText` con fallback a textarea oculto + execCommand para navegadores antiguos.
    • Toast de confirmación "Mensaje copiado" / "No se pudo copiar el mensaje" según resultado.
    • La acción de copiar enlace ahora genera URLs con hash `#m-<message_id>` (antes usaba query param `&msg=` que el componente no manejaba).
    • El componente añade `id="m-${msg.id}"` a cada mensaje renderizado, lo que permite a los deep links funcionar con scroll-into-view nativo.
    • useEffect específico para deep links: lee `window.location.hash`, busca el elemento por id, hace `scrollIntoView({ behavior: "smooth", block: "center" })` y aplica un highlight ámbar transitorio (1.4s) con transición suave.
    • Listener de hashchange: si el usuario navega a otro #m-<id> desde la misma página, también funciona.

    Canales — UI refinada

    • Toolbar de acciones del mensaje: rounded-md (antes rounded-2xl), border zinc-200, p-0.5 (antes p-1), shadow-md (antes shadow-lg shadow-black/10), backdrop-blur-md.
    • Cada botón de acción: rounded-md, hover bg-zinc-100, color zinc-500 base con hover a zinc-800. Soporte dark mode (hover bg-zinc-700, hover text zinc-100).
    • Botón Eliminar: hover bg-rose-50 dark:bg-rose-500/15 + hover text rose-600 dark:rose-400.
    • Picker de emojis quick-react: rounded-md, p-1, border zinc-200/70, cada emoji con padding 1×0.5 y hover bg-zinc-100 (antes hover scale-125 sin contenedor).
    • Botón "X respuestas en hilo": outline neutro (border zinc-200/70 + bg-white) en lugar de pill indigo. Más coherente con el resto del módulo.

    Calidad técnica

    • Typecheck verde tras todas las modificaciones.
    • Sin breaking changes: la API del backend no cambia (sólo se corrige el bucket usado internamente).
    • Sin pérdida de funcionalidad existente: todas las acciones previas (responder en hilo, fijar, editar, eliminar, reaccionar) siguen funcionando.
    • Lint clean (sin warnings introducidos).
    • Reuso de helpers (getProviderKey idéntico en mobile y desktop, copy clipboard con fallback robusto).
  3. v7.7.0

    Rediseño minimalista del módulo de Canales y fix crítico del editado de mensajes

    La versión 7.7.0 rehace por completo la estética del sistema de Canales (página, lista y vista de canal) para alinearlo con la línea minimalista del resto del producto: fuera gradientes violeta/indigo, blobs animados y liquid-glass; dentro tipografía más limpia, jerarquía consistente, dark mode nativo y micro-interacciones discretas. Además corrige un bug crítico en el editado/regeneración de mensajes que reactivaba la herramienta de unidad de red sin permiso del usuario y filtraba todos los archivos del contexto en la respuesta.

    Nuevo

    • regenerateFromHere ahora reenvía explícitamente todas las flags de herramientas (web_search, db_query, network_drive_rag, deep_research, document_generation, spreadsheet_analysis, code_interpreter, integraciones Google/Spotify/Microsoft, auto_route_model) leyéndolas del store; no se infieren más por defecto.
    • Los attachments del mensaje original sólo se reenvían cuando hay una herramienta que los consume activa (RAG estricto, network_drive_rag, spreadsheet_analysis, document_generation, code_interpreter). Si re-preguntas "¿Qué puedes hacer?", ya no se cuelan PDFs anteriores.
    • channels/page.tsx: fuera blobs animados (welcome-blob-1/2/3), fuera bg gradient slate→blue→indigo. Fondo unificado #f9f9f9 / #171717 (dark).
    • ChannelList: header limpio (icono cuadrado + título tipográfico), botón "+" en zinc-900 sólido (no gradient indigo→violet), search compacto con bg zinc-100/80, tabs como underline (no pill), filas de canal con icono 28px y badges sólidos (rose-500 para menciones, zinc-900 para no leídos).
    • ChannelView: header sticky con backdrop-blur sutil, icono cuadrado neutro, badges minimalistas, mensajes con hover zinc-100/70 sin shadows, avatares 32px con borde redondo discreto.
    • Modales de crear/editar canal: sin gradient violeta→purpura, header limpio con borde inferior, picker de iconos en estilo neutral (ring zinc-900 cuando seleccionado), botones primarios en zinc-900/zinc-100.
    • Input de mensaje en canal: contenedor con borde neutro, botón send sólido zinc-900/zinc-100 (antes gradient indigo→violet→purple con scale animation), attach como icono ghost.
    • Adjuntos preview (durante upload y tras upload): bg zinc-100 neutro en lugar de gradient indigo/violet.
    • Mention popup en input de canales: bordes y superficies neutras, item activo con bg zinc-100, sin colores de marca azul.
    • Empty state de canal sin mensajes: icono cuadrado en zinc-100, sin gradients indigo/violet.
    • Pin bar (mensajes fijados): amber-50 suave en lugar de gradient amber→orange. Cards de pin con bordes neutros.
    • STATUS_DOT simplificado: emerald-500 / blue-500 / purple-500 / amber-500 / zinc-300 sin shadows.
    • Soporte dark mode nativo en todos los rincones del módulo de canales (antes sólo light).
    • Tipografía coherente con el resto del producto (10/11/12.5/13/13.5/15px) y tracking-tight en títulos.

    Mejorado

    • Sistema de Canales completamente rediseñado estéticamente: minimalista, coherente con chat/admin/sidebar/changelog/welcome.
    • ThreadPanel rediseñado: header limpio, replies con avatar cuadrado neutro, botón send minimalista. Soporte completo dark mode.
    • Modal de perfil de usuario: header sin gradient blue/cyan, cards con bordes neutros, status dot simple sin animación ping.
    • Bordes y superficies usando la paleta unificada zinc-200/70 dark:zinc-800/60 en lugar de white/40 + shadows pesadas.

    Seguridad

    • Bug crítico: al editar un mensaje el backend reactivaba la herramienta de unidad de red ("network_drive_rag") sin permiso del usuario, mostrando una lista enorme de archivos del contexto bajo la respuesta. Corregido.

    Fix crítico: editado de mensajes activaba network drive sin permiso

    • Síntoma: al editar "¿Qué puedes hacer?" la respuesta llegaba acompañada de una lista enorme de archivos (Manual_Interno_GESEM.txt, generame-un-docx-sobre..., 12-25-FerranGarola.pdf, etc.) que no debían aparecer.
    • Causa: regenerateFromHere() en MessageBubble.tsx reenviaba TODOS los rawAttachments del mensaje original en cada edición sin filtrar por herramienta activa. El backend (chat/route.ts línea 5429) calcula effectiveNetworkDriveRag = network_drive_rag || inferredNetworkDriveIntent || explicitFileReferences.length > 0; al recibir attachments siempre disparaba el RAG de unidad de red aunque el usuario no lo hubiera activado.
    • Causa secundaria: regenerateFromHere tampoco enviaba network_drive_rag, db_query, deep_research, document_generation, spreadsheet_analysis, integraciones ni auto_route_model. El backend asumía valores por defecto e inferidos del input.
    • Fix: regenerateFromHere ahora lee del store (useChatStore) las flags actuales del usuario (networkDriveRag, dbQuery, deepResearch, documentGeneration, spreadsheetAnalysis, integrationGoogle, integrationSpotify, integrationMicrosoft, autoModelMode) y las envía explícitas en cada POST a /api/chat.
    • Fix de attachments: forwardedAttachments = attachmentsConsumingToolActive ? attachmentIds : []. Se filtran a [] si no hay herramienta activa que los necesite (networkDriveRag || spreadsheetAnalysis || documentGeneration || codeInterpreter || ragMode === "strict").
    • Resultado: al editar un mensaje plano la respuesta vuelve limpia, sin archivos colados, sin reactivar herramientas que el usuario tiene desactivadas.

    Canales — wrapper (channels/page.tsx)

    • Eliminados los 3 blobs animados (welcome-blob-1, welcome-blob-2, welcome-blob-3) que generaban gradientes violeta/cyan/indigo de 750px con blur de 90px.
    • Eliminado bg-gradient-to-br from-slate-50 via-blue-50/50 to-indigo-50/40 del wrapper.
    • Sustituido por fondo plano #f9f9f9 (light) / #171717 (dark) coherente con chat/admin/sidebar.
    • Sidebar de canales con border-r border-zinc-200/70 dark:border-zinc-800/60, sin liquid-glass-sidebar.
    • Header del sidebar: botón back con hover bg-zinc-100, título con font-medium tracking-tight (no más bold con emoji 📡 inline).
    • Estado vacío rediseñado: icono Hash dentro de un cuadrado redondeado neutro w-14 h-14, título con tracking-tight, descripción text-zinc-500 leading-relaxed.

    Canales — lista (ChannelList.tsx)

    • Header reducido a 6×6 icono + título 13px font-semibold. Botón "+" 7×7 en bg-zinc-900 dark:bg-zinc-100 (antes 7×7 gradient indigo→violet con shadow-md).
    • Search input: pl-8 pr-7 py-1.5 con bg-zinc-100/80 dark:bg-zinc-800/60, focus:bg-white. Icono Search 12.5px alineado.
    • Tabs como underline: pestaña activa con span absoluto h-px en zinc-900, pestaña inactiva text-zinc-500 (antes pill bg-white con shadow-indigo-100).
    • Toggle "Solo menciones" como botón con border zinc-200 (antes pill rosa indigo-100).
    • Filas de canal: w-7×7 icono cuadrado bg-zinc-100, nombre 13px font-medium, "X miembros" 10.5px text-zinc-500. Hover bg-zinc-50, activa bg-zinc-100 (antes gradient indigo→violet shadow-lg).
    • Badges: menciones en bg-rose-500 sólido (antes border rose-200 + bg rose-50), no leídos en bg-zinc-900 (antes gradient red→pink).
    • Filas de usuario: avatar 7×7 redondeado md (no rounded-xl), status dot 2.5×2.5 sin animate-ping, info 12.5px font-medium.
    • Modales (crear/editar): max-w-md (antes max-w-sm), header sin gradient violeta/azul, picker de iconos con ring zinc-900 cuando seleccionado (no scale-110+shadow-indigo). Botones cancelar+guardar como toolbar bottom (no grid 2 cols).

    Canales — vista (ChannelView.tsx)

    • Header sticky: backdrop-blur-md sobre bg-white/90 (antes liquid-glass-header con shadow-sm). Padding vertical reducido a 2.5.
    • Channel icon 8×8 rounded-md (antes 9×9 rounded-2xl gradient indigo→violet con shadow).
    • Pin/mute buttons como icon-only 8×8 con hover bg-zinc-100 (antes pill border + scale).
    • Pinned bar: bg-amber-50/50 dark:bg-amber-500/5 (antes gradient amber→orange shadow-sm), cards de pin con border zinc-200 (no amber gradient).
    • Empty state: w-16×16 rounded-2xl bg-zinc-100 (antes w-20×20 rounded-3xl gradient indigo→violet con border indigo-100).
    • Filas de mensaje: hover bg-zinc-100/70 dark:bg-zinc-800/40 (antes hover bg-white/80 con shadow indigo-rgba). Padding vertical reducido a 2.
    • Avatares de mensaje: 8×8 rounded-md (antes 9×9 rounded-2xl con scale-105 hover). Modelo IA con gradient zinc-700→zinc-900 (no más violet→indigo).
    • Mensaje editado inline: textarea con border zinc-300, botones Save (zinc-900) y Cancel (zinc-200) (antes botón save gradient indigo→violet).
    • Mention popup: items con bg-zinc-100 cuando seleccionado (antes bg-blue-50 text-blue-700), iconos de bot en cuadrado neutro (no indigo-100).
    • Input container: rounded-lg con border-zinc-200 dark:border-zinc-700 + focus-within:border-zinc-400 (antes liquid-glass-input shadow-lg ring-indigo-100/50 con focus expansivo).
    • Botón Send: 8×8 rounded-md bg-zinc-900 dark:bg-zinc-100 (antes p-2.5 rounded-full gradient indigo→violet→purple con scale-110 hover y ch-send-pulse animation).
    • Adjuntos preview (uploading + ready): bg-zinc-100 con border-zinc-200 (antes bg-gradient-to-r from-indigo-50 to-violet-50).
    • Mention hint y char counter: text-[10.5px] text-zinc-400/500 (antes text-[10px] text-zinc-400/70).

    Canales — ThreadPanel y modal de perfil

    • ThreadPanel: bg-white dark:bg-[#1d1d1d], border zinc-200/70 (antes bg-white/80 con backdrop-blur).
    • Header del thread: text-13px font-semibold con icono MessageSquare zinc-500 (antes indigo-500).
    • Parent message: bg-zinc-50 dark:bg-zinc-900/40 con label uppercase tracking-wider zinc-500.
    • Avatares en replies: 6×6 rounded-md bg-zinc-200 (antes gradient blue→indigo).
    • Botón send del thread: 8×8 bg-zinc-900 (antes p-2 gradient indigo→violet con scale hover).
    • Botón "Ver respuestas anteriores": border zinc-200 en bg-white (antes pill text-indigo).
    • Modal de perfil: max-w-md rounded-xl con border zinc-200 (antes rounded-3xl con shadow blob 28px-70px).
    • Header del modal: limpio con border-bottom (antes gradient blue→indigo→cyan).
    • Avatar del usuario: 14×14 rounded-lg (antes 16×16 rounded-full con shadow-md).
    • Status dot: 3×3 simple (antes 3.5×3.5 con animate-ping para online).
    • Cards de info (rol app, rol canal, género, cumpleaños, última actividad, miembro desde, cuenta creada): rounded-md border zinc-200 bg-zinc-50 (antes rounded-xl). Soporte dark mode nativo en todas.
    • Bio card: igual a las otras tarjetas, padding y tipografía coherente.

    Calidad técnica

    • Typecheck verde tras todas las modificaciones de canales y del fix de regenerateFromHere.
    • Sin cambios en la API ni en el contrato de tipos: ChannelList y ChannelView mantienen la misma firma de props.
    • Sin pérdida de funcionalidad: gestión de miembros, mensajes, hilos, reacciones, pins, mute, DMs, edición/borrado de mensajes — todo funciona igual.
    • Reducción de ruido visual estimada: ~20 gradientes eliminados, ~15 shadows pesadas removidas, animaciones blob descartadas (mejora rendimiento en GPU baja gama).
    • Coherencia visual con welcome / chat / admin / sidebar / changelog: ahora canales no se siente "una app distinta" dentro del mismo producto.
  4. v7.6.0

    Hardening de seguridad, velocidad post-streaming y rediseño del changelog

    La versión 7.6.0 endurece la seguridad del backend (SSRF blacklist en webhooks, mime whitelist en upload, RLS tightening en token_usage, SIGKILL forzado en code interpreter), recorta 1-3 segundos del cierre de cada respuesta de la IA (webhooks en paralelo con timeout, generación de título con AbortSignal, cache 5 min de provider api_key, throttle de snapshot a 500ms/128 chars), y rediseña la página de changelog con un layout más expresivo y jerárquico. También limpia varios useEffect sin cleanup, refuerza el manejo de errores y soluciona logs que filtraban stack traces.

    Nuevo

    • Mime whitelist en /api/files/upload: lista explícita de tipos permitidos. Octet-stream solo si la extensión es conocida. Devuelve 415 con razón clara.
    • Code interpreter: SIGTERM + SIGKILL forzado a los 2s para eliminar procesos zombi cuando timeout no funciona.
    • Webhooks en paralelo con timeout 4s cada uno (Promise.allSettled): -100ms a -1s al cierre del response cuando hay 2+ webhooks.
    • Title generation con AbortSignal de 3s + fallback: deja de bloquear el cierre 5-10s si OpenAI tarda.
    • Throttle de snapshot durante stream subido a 500ms/128 chars: -50% adicional en writes Supabase durante respuestas largas.
    • Body req.json() con catch: si el JSON es inválido responde 400 inmediato en vez de colgar el endpoint.
    • Queue wait loop con timeout máximo 60s: si la cola queda atascada, el usuario no espera infinitamente.
    • Promise.all → Promise.allSettled en /api/admin/feedback: una query fallida ya no tumba la respuesta entera.
    • JSON.parse del plan de agentes con fallback: si el modelo devuelve JSON inválido, no crashea (steps vacíos).
    • useEffect cleanup en /auth/update-password y ActivityContext: cancelable, sin race tras unmount.
    • Webhooks Discord/Slack: emojis correctos (antes mojibake "ðŸ..." → ahora 💬 👤 📊 🤖).
    • a11y: motion-safe:animate-pulse en ModernDashboard (respeta prefers-reduced-motion), disabled:pointer-events-none en botón de registro.
    • void supabase.removeChannel en 3 cleanups de Realtime (no-floating-promises).

    Mejorado

    • Página de changelog rediseñada con layout tipo timeline agrupado por mes, hero dramático, stats banner y cards por área de feature.

    Arreglado

    • console.error sin filtrar stack/paths: solo .message en code-interpreter, title gen y webhooks.

    Seguridad

    • SSRF en webhooks: validateWebhookUrl bloquea localhost, 127.x, 10.x, 192.168.x, 172.16-31.x, 169.254 (metadata), ::1 y direcciones IPv6 link-local.
    • RLS tightening (migración 075): WITH CHECK (true) en token_usage → solo service_role o auth.uid()=user_id.
    • Cache in-memory de provider api_key descifrado (TTL 5min): -50-100ms por chat request en cuentas con providers custom.

    Seguridad

    • SSRF: nueva función validateWebhookUrl() en /api/webhooks que rechaza https://localhost, 127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16-31.0.0/12, 169.254.0.0/16 (AWS metadata), ::1, fd*, fc* (link-local IPv6).
    • Aplicado en POST y PATCH de webhooks: si el URL no pasa el check, devuelve 400 con razón legible.
    • Mime whitelist en /api/files/upload: PDF, Word/Excel/PowerPoint, OpenDocument, RTF, CSV, JSON, XML, YAML, código, imágenes (PNG/JPG/WebP/GIF/HEIC/SVG), audio (MP3/WAV/M4A/OGG), video (MP4/MOV) y ZIP.
    • Octet-stream solo se acepta si la extensión está en la whitelist (.pdf, .docx, etc.). Si no, 415 con error.
    • RLS tightening en token_usage (migration 075): la policy "Service role can insert" tenía WITH CHECK (true), permitiendo a cualquier service-role insertar con cualquier user_id. Reemplazada por auth.role() = service_role OR auth.uid() = user_id.
    • Code interpreter: tras SIGTERM por timeout, programa SIGKILL forzado a los 2s para no dejar zombies de Python.
    • Logs sanitizados: console.error sin objeto Error completo (no leak de stack/paths/env).

    Velocidad de respuesta de la IA

    • Webhooks ahora en PARALELO con Promise.allSettled y timeout AbortController de 4s cada uno. Antes: secuencial bloqueando 1-3s por cada webhook configurado.
    • Title generation con AbortSignal de 3s: si OpenAI tarda más, fallback a truncar el input. Antes: sin timeout, bloqueaba el cierre 5-10s.
    • Cache in-memory 5min de provider api_key descifrado: decryptAndMigrateSecretField era ~50-100ms por chat request, ahora primer hit y los siguientes son instant.
    • Throttle de persistLiveAssistantSnapshot subido de 250ms/64 chars a 500ms/128 chars: el cliente lee del propio stream, los snapshots solo importan para colaboradores via Realtime; reduce ~50% más las writes a Supabase.
    • Total ahorrado en cierre del response (post-streaming): 1-3 segundos en condiciones típicas con webhooks/multi-tools.

    Robustez

    • body = await req.json() ahora con .catch(): si el JSON es inválido o vacío, responde 400 sin crashear el endpoint.
    • Queue wait loop con timeout máximo de 60 segundos: si conversation_live_runs queda atascada por un bug en otro request, el usuario no espera infinitamente — se fuerza el run con un warn.
    • Promise.all → Promise.allSettled en /api/admin/feedback: profiles + listUsers + conversations son queries independientes; una fallida ya no tumba la respuesta entera. Cada array hace fallback a [].
    • JSON.parse del plan de agentes en /api/agents/execute: try/catch con fallback a { steps: [] } en vez de 500.
    • Type guard de step.query (unknown → string) en agent execution para evitar passing de undefined a searchWeb.

    Lifecycle React

    • useEffect en /auth/update-password ahora cancelable: setea state solo si el componente sigue montado. Antes generaba React warning "setState on unmounted".
    • useEffect en ActivityContext igual: cancela getUser() si el contexto se desmonta antes de resolver.
    • void en cleanup de supabase.removeChannel en AdminPageClient (sync jobs), UserTokenUsage y MessageReactions: explicita que ignoramos la promesa (silencia no-floating-promises).

    UX y a11y

    • Botón "Solicitar acceso" en /auth/register con disabled:pointer-events-none: ya no se puede activar con tab+enter cuando está deshabilitado (evita doble submit).
    • Skeleton del ModernDashboard ahora es motion-safe:animate-pulse (respeta prefers-reduced-motion del sistema).
    • Webhooks Discord/Slack: el cuerpo del mensaje ahora lleva emojis legibles (💬 chat completado · 👤 usuario · 📊 mensajes · 🤖 modelo). Antes salían mojibake "💬..." por encoding doble.

    Página de Changelog (rediseño nivel dios)

    • Hero rediseñado: título dramático "Cada cambio, documentado." con tipografía 64px + gradient text sutil en la palabra "documentado".
    • Aurora gradient mesh suave en el fondo del hero (violeta/cyan/ámbar), reemplazando los orbs animados pesados.
    • Stat ribbon con 3 píldoras: "Última versión" con dot animado verde, total de versiones, total de cambios.
    • Top bar sticky con backdrop-blur y "Volver al chat" + "Releases GitHub" como atajos.
    • Timeline agrupado por MES (sticky header de mes mientras haces scroll) — antes era una lista plana sin jerarquía temporal.
    • Versión renderizada en font-mono 44px (display) con anchor link copiable (#v7.6.0).
    • Highlights en card destacada con icono ✨ "Lo destacado" y bullets con hover state.
    • Cambios detallados ahora en GRID 2 columnas: cada feature group es una card con icono semántico (Zap=perf, Shield=seguridad, Wrench=fix, Palette=ui, TrendingUp=mejora, Sparkles=default).
    • Cada card de área tiene contador en píldora ("8") y bullets compactos.
    • Footer minimalista con count de versiones + cambios totales + links a chat/GitHub/releases.
    • Dark mode nativo en todos los elementos.
    • scroll-mt-24 en cada artículo para que el anchor link no quede oculto bajo el sticky header.
    • Helpers utilitarios: getAreaIcon() detecta el icono por keywords del área, totalChangesAcrossVersions() suma highlights+features para el stat, groupByMonth() crea las secciones temporales.

    Calidad técnica

    • Typecheck verde después de cada commit (4 commits en esta release).
    • Sin rotura: todos los cambios mantienen API existente (auto_route_model sigue siendo opt-in, webhooks siguen aceptando los mismos campos, etc.).
    • Migración 075 aislada (no toca tablas, solo policy de RLS): aplicar es seguro y reversible.
    • Falsos positivos descartados tras análisis (IDOR en calendar import, path traversal en network-drive-write, trigger sin OR REPLACE en migration 009).
  5. v7.5.0

    Modo automático de modelo, paste de imágenes y limpieza de admin

    La versión 7.5.0 introduce el "Modo automático" de selección de modelo: el sistema baja a un modelo más rápido y barato (GIA-5.4-nano / GIA-5.4-mini / GIA-5.2) cuando la pregunta es trivial, y mantiene el modelo capable seleccionado para preguntas complejas. Incluye toggle visible en el menú de modelos del header, indicador "Auto · <modelo base>" en el botón, mejora del paste de imágenes desde el portapapeles (los screenshots ahora se nombran correctamente), y la limpieza de 4521 LOC de un backup huérfano del panel admin.

    Nuevo

    • Nuevo "Modo automático" de modelo: baja a GIA-5.4-nano/-mini cuando la pregunta es trivial, mantiene GIA-5.5 cuando es compleja.
    • Toggle visible en el dropdown de modelos del header con switch verde/gris y descripción contextual.
    • Indicador en el botón del menú: "Auto · GIA-5.5" con icono ✨ Sparkles cuando el modo automático está activo.
    • Heurística conservadora: pregunta trivial (saludos, ≤4 palabras) → downgrade. Adjuntos o complejidad intermedia con tools activas → mantiene capable.
    • Soporte para IDs con guión (gpt-5-5, gpt-5-4) y con punto (gpt-5.5, gpt-5.4) — comparación case-insensitive.
    • Tiempo de respuesta del modelo visible bajo cada mensaje (1.2 s, 850 ms) con dot verde.
    • Pegar imagen desde portapapeles: los screenshots ahora se nombran "pasted-image-YYYYMMDD-HHMMSS.png" con extensión correcta del mime.
    • Toast informativo al pegar imágenes: "Imagen pegada, subiendo..." (o "N imágenes pegadas...").
    • Activación opt-in del auto-routing por defecto en el frontend (ChatInput + WelcomeScreen).
    • Persistencia del toggle en localStorage: la preferencia del usuario sobrevive a refresh.

    Mejorado

    • Cuando "Auto" está activo, el menú no marca ningún modelo como seleccionado (UI más coherente).
    • Borrado AdminPageClient.backup.tsx (4521 LOC huérfano): cold start del dev más rápido.

    Arreglado

    • Cadena de aliases robusta: si el target no existe en model_configs (gpt-5-4-nano), prueba gia-5-4-nano, gpt-5-4-mini, gia-5-4-mini, gpt-5-2, gia-5-2, gpt-5-mini, antes de hacer fallback al original.

    Auto-routing de modelo

    • Nuevo módulo src/lib/server/chat/auto-router.ts con heurísticas puras y testeables.
    • looksTrivial(): detecta saludos, cortesías, preguntas de ≤4 palabras.
    • looksComplex(): detecta código (```), SQL, palabras clave técnicas (analiza, compara, plan, propuesta, etc.) y >80 palabras.
    • looksCapable(): regex laxa que detecta gpt-[4-9], gia-[4-9], claude sonnet/opus, gemini pro, mistral large, llama 70b/405b. Excluye sufijos fast (mini, nano, haiku, flash, small, turbo).
    • inferFastPeer(): mapea cualquier modelo capable a su peer rápido del mismo proveedor.
    • Soporta IDs con guión y punto: gpt-5-5 ≡ gpt-5.5 ≡ GIA-5.5.
    • Defensa: si el id ya contiene mini/nano, devuelve null (no bajamos más).
    • Pregunta trivial bypass de tools: "Hola" con RAG activo SÍ se downgradea (las tools no afectan a un saludo).
    • Complejidad intermedia con tool activa: mantiene modelo capable (la tool sí va a usarse).

    UI del menú de modelos

    • Toggle "Modo automático" arriba del listado: icono Sparkles ámbar/naranja + switch verde/gris + copy explicativo.
    • Botón del header muestra "Auto · GIA-5.5" cuando autoModelMode está ON, con icono ✨ en lugar del icon del modelo.
    • Tooltip al hover: "Modo automático activo (base: GIA-5.5)".
    • Cuando Auto está activo, los modelos del menú no se marcan como seleccionados (sin checkmark ni bg destacado) — la decisión es del backend.
    • ⭐ favorito sigue visible y persistido independientemente del modo Auto.
    • Estado autoModelMode persistido en localStorage bajo "geia:auto-model-mode".
    • Default: ON (todos los usuarios obtienen el ahorro automático sin configurar nada).

    Resiliencia del backend

    • Fallback de aliases en chat/route.ts: si el target del downgrade (p.ej. gpt-5-4-nano) no existe en model_configs, prueba 6+ alternativas antes de rendirse.
    • Si ningún alias resuelve, vuelve al modelo original sin romper la respuesta.
    • Log detallado en cada llamada con auto_route activo: input (60 chars), selected, decision, downgraded, finalModel, anyToolActive, hasAttachments.
    • Logs separados para "skip por X" y "downgrade: A → B (Y palabras)".
    • Cuando el alias se resuelve, log adicional: "[AutoRoute] target alias resolved: gpt-5-4-nano → gia-5-4-nano".

    Paste de imágenes

    • Los screenshots del portapapeles vienen sin name → ahora se generan con timestamp.
    • Formato: "pasted-image-YYYYMMDD-HHMMSS.png" / "pasted-file-...bin".
    • Detecta la extensión correcta a partir del mime type (image/png → png, image/jpeg → jpg, etc.).
    • Toast informativo al pegar: "Imagen pegada, subiendo..." o "N imágenes pegadas, subiendo...".
    • Funciona con múltiples archivos pegados en simultáneo.

    Limpieza

    • Borrado AdminPageClient.backup.tsx (4521 LOC sin uso) — repo más limpio, ESLint ya no lo escanea.
    • Cold start del dev más rápido (un archivo gigante menos que tipar).

    Calidad técnica

    • Typecheck verde tras cada commit.
    • auto-router.ts puro y sin dependencias de Supabase: testeable como función pura.
    • Heurísticas regex con flags case-insensitive y soporte para múltiples separadores (- _ .).
    • API del auto-router consistente: AutoRouteResult con { model, reason, downgraded } siempre poblado.
    • Activación segura: opt-in vía body flag auto_route_model. Por defecto se respeta el modelo seleccionado.
  6. v7.4.0

    Rediseño minimalista, rendimiento del chat y nuevo sidebar Sleek

    La versión 7.4.0 unifica la estética del producto bajo un sistema minimalista estilo ChatGPT (#f9f9f9 / #171717), introduce un sidebar nuevo "Sleek" con dos modos (expandido y colapsado), rediseña por completo la pantalla de bienvenida, mejora la velocidad de respuesta de la IA reduciendo writes durante el streaming y paralelizando queries pre-modelo, y limpia más de 200 textos con encoding roto en el panel de administración.

    Nuevo

    • Nueva pantalla de bienvenida limpia: tipografía sin gradientes, logo elegante, starter prompts y dark mode nativo.
    • Sidebar "Sleek" único para móvil y desktop con modo colapsado tipo ChatGPT (rail de iconos + tooltips).
    • Estilo minimalista uniforme en chat, admin y sidebar: fondo plano, fuentes coherentes, sin glass morphism pesado.
    • Tiempo de respuesta del modelo visible bajo cada mensaje (1.2 s, 850 ms, etc.) con dot verde.
    • Lazy load de modales (settings, voice, file preview, collaborators) y librerías pesadas (tesseract.js, pdfjs-dist, mammoth, xlsx) — bundle inicial 30%+ más pequeño.
    • Logo del sidebar limpia el contexto antes de navegar — ahora siempre lleva al welcome.
    • Realtime reconnect automático: si el canal de Supabase se cae, recarga mensajes sin requerir refresh manual.
    • Watchdog de 90 s en el reader del stream: nunca más spinner colgado para siempre.
    • Toast cuando una respuesta no se pudo guardar — antes desaparecía silenciosamente al recargar.

    Mejorado

    • Respuestas de la IA hasta 600ms más rápidas: paralelización de queries pre-modelo, menos writes durante streaming, cache in-memory de network drives.
    • Cache global con React Query: navegación instantánea entre páginas, menos hits a Supabase.

    Arreglado

    • Fix del modelo preferido (⭐): se restaura siempre al volver a la welcome o crear chat nuevo, no solo al abrir la app.
    • Más de 200 textos con caracteres rotos arreglados en el admin (mojibake UTF-8 ↔ Latin-1).
    • Error boundary específico del chat — un error en MessageBubble ya no rompe toda la app.

    Pantalla de bienvenida

    • Layout rediseñado con jerarquía clara: status pill → logo → saludo → typewriter → composer → starters.
    • Saludo sin gradient text, tipografía limpia con apellido/nombre del usuario en color secundario.
    • 4 starter prompts de un click (analizar documento, investigación profunda, buscar web, archivos de red) que envían el mensaje al instante.
    • Avatar pill compacto con dot de estado (online / typing / reading / offline) sin glass morphism pesado.
    • Animaciones suavizadas con respeto a prefers-reduced-motion (sin bounce-in al cargar).
    • Dark mode nativo: fondo #171717, paneles #0a0a0b, texto y borders adaptados.
    • Quick actions móvil reducidas a píldoras compactas (rounded-14 vs rounded-2xl) sin sombras saturadas.
    • Subtitle del calendario en color ámbar discreto, sin shadow ni backdrop-blur.

    Sidebar Sleek (nuevo)

    • Componente único SidebarSleek que sustituye Sidebar.tsx (1044 LOC) y MobileSidebar.tsx (995 LOC) — total ahorrado: ~1200 LOC.
    • Modo expandido (260px): logo, búsqueda con ⌘K visible, nav items (imágenes, canales, apps, nueva carpeta), grupos por fecha (Hoy, Ayer, Últimos 7/30 días, mes a mes), pinned arriba, footer con user card.
    • Modo colapsado (60px): rail de iconos estilo ChatGPT con tooltips a la derecha, badge de canales sin leer, avatar al pie con menú emergente (Ajustes, Admin, Cerrar sesión).
    • Click en logo del sidebar limpia projectContextId, folderContextId y activeConversationId antes de navegar — siempre lleva al welcome.
    • Modal de 3 puntos rediseñado estilo ChatGPT minimal: sin headers ni icon tiles, solo iconos pelados con texto.
    • Iconos de carpeta correctamente mapeados (FolderOpen, Brain, Briefcase, etc.) — antes mostraba la cadena cruda "folder", "work", "brain".
    • Pin/Star/Share como mini-iconos a la derecha de cada chat (ámbar/sky) en lugar de chips de texto.
    • Resize handle agarrable: hit area de 8px con línea visible de 1px, antes era 1px imposible de pillar.
    • Empty state con CTA: glow pulsante + botón "Crear primer chat".
    • Atajos de teclado: ⌘K enfoca filtro, "/" focus rápido, click en chat con Cmd/Ctrl abre en nueva pestaña.
    • Drag & drop de carpetas y chats con indicadores visuales suaves.

    Velocidad de respuesta de la IA

    • Throttle de snapshot durante streaming subido de 90ms / 16 chars a 250ms / 64 chars — reduce 80% las writes a Supabase durante respuestas largas.
    • syncLiveRun ya no se llama por cada token, solo en cambios de fase reales — reduce a la mitad las writes restantes.
    • Profile select específico (id, name, avatar_url, role) en lugar de select('*') — ahorra 20-50ms por request.
    • Queries pre-modelo paralelizadas con Promise.all (participantes + profile en lugar de serial) — ahorra 100-200ms TTFT.
    • Cache in-memory de 60s para "¿usuario tiene network drives sincronizados?" — evita query Supabase repetida en cada chat.
    • Tiempo total ahorrado al primer token: 300-600ms en condiciones típicas.

    Tiempo de respuesta visible

    • Bajo cada mensaje del asistente aparece el tiempo del modelo: "1.2 s", "850 ms", "1m 5s".
    • Dot verde junto al tiempo para identificarlo visualmente.
    • Tooltip al hacer hover muestra los milisegundos exactos.
    • Se persiste en meta_json.response_time_ms y meta_json.generation con tokens y provider.

    Performance frontend

    • React Query (@tanstack/react-query) instalado y montado como provider raíz para cache global de queries.
    • Hook useUnreadChannels migrado a React Query: cache compartido + Realtime auto-invalidate, varios componentes ya no fetchean por separado.
    • Hook useFolders disponible para futuras migraciones (sidebar, knowledge, admin).
    • 5 orbs animados con blur-90px eliminados del ChatShell — ahorro de 5-10% de CPU constante en desktop.
    • Modales lazy-loaded en SidebarSleek (CreateFolderModal, ConversationCollaboratorsModal) — solo cargan al abrirlos.
    • next/image en avatares de Header con AVIF/WebP automático — 40% menos peso en imágenes externas.
    • Dominios añadidos al config: googleusercontent.com, *.supabase.co, i.scdn.co, graph.microsoft.com.
    • Cache-Control en /api/public/app-settings y /api/public/welcome-messages: stale-while-revalidate de 5-10 min en lugar de no-store.
    • Throttle del reader del stream (90s sin chunks aborta) ya integrado en ChatInput.

    Bugs críticos del chat

    • Realtime de Supabase reconecta automáticamente si CHANNEL_ERROR / TIMED_OUT / CLOSED — antes los mensajes nuevos no llegaban hasta refresco manual.
    • Insert de mensaje del usuario captura el error explícitamente — antes era silencioso y rompía source_message_id.
    • regenerate_message_id se valida antes de continuar — antes podía duplicar tareas si el ID no existía.
    • Persistencia fallida del mensaje del asistente emite marcador __PERSISTENCE_FAILED__ al cliente — antes la respuesta se perdía sin aviso.
    • Frontend muestra toast de 8s cuando la respuesta no se pudo guardar.
    • ChatErrorBoundary envuelve ChatArea — un error en MessageBubble ya no tumba toda la app.

    Modelo preferido

    • El modelo preferido (⭐) ahora se restaura al volver a la welcome o iniciar chat nuevo, no solo al abrir la app por primera vez.
    • Antes la lógica solo aplicaba el preferido cuando selectedModel era el default inicial "gpt-5.2" — al navegar por chats con otros modelos, el preferido se perdía.
    • Ahora dos casos cubiertos: primera carga + activeConversationId === null — sigue respetando el modelo del chat existente cuando se entra en uno.

    Panel de administración

    • Shell minimalista: fondo #f9f9f9 (light) / #171717 (dark) con dark mode nativo en header, sidebar y dashboard.
    • Eliminados los 3 orbs animados de fondo y el "liquid-glass" pesado.
    • Header del admin sin gradient text en "Panel Admin" — tipografía limpia tracking-tight.
    • Sidebar nav reducido a 256px con bg sólido, items con bg-zinc-200 al activar (sin shadow + scale).
    • Cards del dashboard sin liquid-glass: border + bg-white sólido, hover sutil sin scale-105.
    • Storage stats sin gradient text en cifras: tipografía font-semibold tracking-tight.
    • 205 textos con encoding mojibake corregidos: Conexión, automáticamente, análisis, ningún, podrán, extraído, etc.
    • Emojis arreglados en el admin: 📊 📧 📁 👥 💡 🌐 ✅ ❌ ⭐.
    • Símbolos arreglados: ¿ ¡ ° ½.
    • Script reusable scripts/fix-encoding.mjs con mapeo UTF-8 ↔ Latin-1 doble.

    Estilo y consistencia visual

    • Sistema de colores unificado: light #f9f9f9, dark #171717 (mismos que el sidebar y el shell).
    • Radios reducidos a 3 escalas (8/12/16/20px) en lugar de 5 distintos.
    • Tipografía a 3 tamaños principales (10px labels, 12.5-13.5px contenido, 15px brand).
    • Iconos Lucide con strokeWidth 1.75 en secundarios y 2 en primarios para crear jerarquía.
    • Eliminadas sombras saturadas (shadow-xl, shadow-blue-500/30) — ahora shadow-sm o sin sombra.
    • Backdrop-blur eliminado de zonas donde no aporta (footers sin contenido detrás).

    Calidad técnica

    • Typecheck verde después de cada cambio sin excepciones.
    • Persistencia del mensaje del asistente con metadatos de generación (modelo, provider, tokens, latencia).
    • Component memo + comparador custom en ChatRow del sidebar para evitar re-renders.
    • Selectores específicos en queries Supabase en lugar de select('*').
    • Cache-Control con stale-while-revalidate en endpoints públicos.
    • Eliminados los 5 orbs animados que costaban CPU constante en desktop.
  7. v7.3.5

    Persistencia estable de busquedas y composer movil corregido

    La version 7.3.5 estabiliza las respuestas generadas con busqueda web y Deep Research para que no desaparezcan al refrescar o cambiar de chat, y corrige el composer movil para que el icono de enviar quede integrado correctamente dentro del input.

    Nuevo

    • El cliente reintenta cargar mensajes persistidos antes de crear un fallback local, evitando parpadeos y respuestas perdidas.
    • El input movil separa definitivamente las acciones de voz, stop, cola y enviar para evitar iconos fuera de sitio.
    • El boton de enviar movil solo aparece cuando hay texto o adjuntos, y se mantiene dentro de la capsula del composer.
    • Se anaden protecciones CSS para impedir que el boton de enviar se renderice si el input esta vacio.
    • Version visible actualizada a 7.3.5 en header PC y header movil.

    Seguridad

    • Las respuestas finales de busqueda web y Deep Research se persisten con mas seguridad antes de cerrar el streaming.

    Streaming y persistencia

    • El backend refuerza la escritura de respuestas finales cuando una peticion con herramientas termina o se interrumpe despues de haber generado contenido util.
    • Las respuestas de busqueda web y Deep Research dejan de depender solo del estado live temporal para sobrevivir a refresh, cambio de chat o recarga de mensajes.
    • La recarga final del cliente espera varias ventanas cortas de sincronizacion antes de decidir si necesita insertar un fallback optimista.
    • Los placeholders live_streaming no se tratan como respuestas definitivas si no contienen contenido final valido.

    Composer movil

    • Rama movil dedicada para acciones del input: microfono, modo conversacion, enviar, stop y cola ya no comparten el layout desktop.
    • El icono de enviar se oculta cuando no hay contenido y aparece como boton interno cuando el usuario escribe o adjunta archivos.
    • El stop de streaming y el contador de cola mantienen tamano fijo para evitar desplazamientos visuales en la barra inferior.
    • CSS defensivo con data attributes para bloquear estados inconsistentes en el composer movil.

    Calidad tecnica

    • Typecheck completo ejecutado tras los cambios del composer y la persistencia.
    • Package version y lockfile sincronizados con 7.3.5.
    • Changelog local actualizado para documentar las correcciones incluidas en esta entrega.
  8. v7.3.0

    Nombre publico simplificado, streaming web estable y Deep Research recuperado

    La version 7.3.0 simplifica el nombre publico de la pagina inicial para que el navegador muestre solamente GIA, mantiene intactos los titulos dinamicos de conversaciones, corrige carreras de streaming tras busquedas web, recupera el viewport de Deep Research y evita que estados colaborativos de chats compartidos afecten a chats normales.

    Nuevo

    • El titulo base de la web pasa de "GIA - Gestion Empresarial con IA" a "GIA".
    • Los chats conservan sus titulos dinamicos con formato "Nombre del chat - GIA".
    • Version visible actualizada a 7.3.0 en header PC y header movil.
    • Las respuestas generadas con busqueda web dejan de desaparecer al finalizar el streaming.
    • Deep Research vuelve a emitir frames live en la card inline y en la ventana flotante.
    • Los estados de chats compartidos ya no renderizan tarjetas live dentro de chats normales.

    Identidad y metadata

    • Metadata global de Next.js actualizada para que la pagina inicial use el titulo GIA.
    • No se modifica la logica de ChatShell que genera titulos por conversacion, proyecto o carpeta.
    • Package version y lockfile sincronizados con 7.3.0.

    Chat y busqueda web

    • Serializacion de snapshots live para impedir que estados antiguos como "investigando" sobrescriban la respuesta final.
    • El cierre del streaming espera el snapshot final done antes de recargar mensajes.
    • El cliente ya no considera placeholders live_streaming=true como respuestas persistidas validas.
    • Fallback local reforzado: si el placeholder sigue visible tras una busqueda web, se convierte en la respuesta final sin parpadeo.
    • Los placeholders colaborativos vacios se ocultan en chats privados para evitar bloques residuales bajo respuestas normales.

    Deep Research visual

    • El endpoint de eventos live acepta conversaciones con acceso de owner o participante, no solo consultas owner-only.
    • El hook de live viewport rehidrata historial y mantiene polling controlado para recuperar frames aunque el SSE llegue tarde.
    • La card inline y la ventana flotante muestran errores/fallbacks claros si Playwright no puede arrancar en vez de quedarse cargando indefinidamente.
    • ChatInput envia research_mode y deep_research_mode para que el backend respete el modo rapido o exhaustivo seleccionado.
    • Playwright publica eventos de error de navegador cuando falta configuracion o no se puede crear el contexto visual.

    Chats compartidos aislados

    • El backend solo considera colaborativa una conversacion si tiene participantes activos distintos del propietario.
    • MessageBubble solo renderiza tarjetas live de colaboracion cuando la conversacion esta marcada como compartida.
    • ChatArea limpia streams y pendientes compartidos al entrar en chats normales.
    • El refresco rapido de estados compartidos queda desactivado en chats privados para evitar parpadeos y bloqueos visuales.
  9. v7.2.0

    Composer pulido, Ollama estable y automatizaciones mejoradas

    La version 7.2.0 corrige el composer del chat para adjuntos inline estilo ChatGPT, estabiliza la resolucion de modelos y la integracion con Ollama, mejora la experiencia movil y convierte Tareas en Automatizaciones con indicaciones y herramientas configurables.

    Nuevo

    • Los adjuntos pasan a mostrarse dentro del composer con previews inline y subida autenticada por servidor.
    • El input desktop deja de romperse al combinar adjuntos y herramientas activas gracias a un grid corregido y mas compacto.
    • El sync de modelos ya no pisa display_name editados manualmente en admin.
    • Automatizaciones anade indicaciones de ejecucion y herramientas activables por tarea.
    • Admin gana navegacion movil dedicada y el selector de modelos evita claves duplicadas y grupos repetidos.

    Mejorado

    • Ollama usa endpoints normalizados, no exige API key y deja de mezclarse visualmente con modelos Meta.

    Composer y adjuntos

    • Nueva API /api/files/upload para subir archivos desde el chat de forma autenticada y registrar file_id real antes de enviar el mensaje.
    • Los adjuntos se renderizan inline dentro del composer en lugar de abrir una tarjeta separada sobre el input.
    • Desktop composer reorganizado para soportar correctamente la combinacion de texto, adjuntos y herramientas activas sin solapar filas ni chips.
    • Miniaturas de adjuntos mas compactas, boton de eliminar mas limpio y badge de herramientas duplicado eliminado en desktop.
    • Validacion de layout con typecheck para evitar regresiones del textarea colapsado en el shell minimalista.

    Modelos y proveedores

    • El sync de modelos conserva display_name personalizados cuando el admin ya ha renombrado un modelo.
    • Nueva utilidad central de endpoints AI para normalizar rutas OpenAI-compatible y Ollama.
    • Ollama prueba modelos con la ruta correcta, deja de enviar Authorization si no hay API key y usa /v1/chat/completions y /api/tags donde corresponde.
    • El selector de modelos deduplica opciones para evitar warnings de React por keys repetidas como openai o meta.
    • La clasificacion visual prioriza provider_type, de modo que los modelos Ollama dejan de aparecer en el grupo Meta.

    Chat y vista movil

    • Header PC y header movil actualizados a la version 7.2.0.
    • Deep Research inline viewport se ajusta mejor al flujo movil y reduce dependencias del popup flotante.
    • ChatArea y MessageBubble limpian mejor estados residuales para reducir mensajes fantasma al terminar respuestas o cambiar de contexto.
    • Store de modelos y chat refinados para resolver mejor el modelo activo por config_id, slug publico o provider_model_id.

    Automatizaciones y admin

    • La seccion Tareas se presenta como Automatizaciones en la interfaz de ajustes.
    • Cada automatizacion editable incorpora indicaciones/instructions y lista de herramientas habilitadas para la ejecucion.
    • Task execution y mutaciones preservan prompt, instrucciones y enabled_tools dentro de execution_json.
    • Nueva navegacion admin movil mas adaptada, con header y accesos tactiles dedicados sin tocar la experiencia desktop.
  10. v7.1.0

    Calendario sincronizado y comparador multi-modelo

    La version 7.1.0 convierte el calendario en un modulo operativo con eventos persistidos en Supabase, vistas dia/semana/mes/lista, edicion completa, integracion Google Calendar y creacion desde mensajes del chat. Tambien incorpora comparacion directa entre varios modelos desde el composer.

    Nuevo

    • Nueva pagina /calendar con agenda real, modal avanzado de eventos y vistas Dia, Semana, Mes y Lista.
    • Los eventos dejan de depender de localStorage y pasan a guardarse en Supabase con la tabla calendar_events.
    • Integracion con Google Calendar para importar eventos, crear eventos desde GIA y consultar disponibilidad.
    • Crear evento al clicar un dia y editar evento al clicar una tarjeta del calendario.
    • Accion Crear evento desde mensajes del chat para convertir texto con fecha/hora en borrador de calendario.
    • Nuevo comparador multi-modelo para seleccionar 2-4 modelos y recibir una respuesta comparativa trazable.

    Calendario persistente

    • Nueva migracion 074_calendar_events.sql con owner_id, categoria, fuente, recurrencia, recordatorios, asistentes, enlaces, metadata y RLS por usuario.
    • Nueva API /api/calendar/events para listar y crear eventos sincronizados por usuario.
    • Nueva API /api/calendar/events/[id] para editar y borrar eventos propios.
    • Eventos ordenados por fecha y filtrados por rango visible para mantener la agenda rapida.
    • Las tareas pendientes con due_at se proyectan dentro del calendario como eventos de tipo tarea.

    Interfaz de calendario

    • Nueva vista Dia para revisar todos los eventos de una jornada concreta.
    • Nueva vista Semana con columnas por dia y creacion directa desde cada dia.
    • Vista Mes redisenada con chips de eventos, contador de overflow y seleccion visual del dia actual.
    • Vista Lista para agenda futura compacta.
    • Click en un dia vacio abre el modal de creacion preconfigurado con esa fecha.
    • Click en un evento abre el modal de edicion con todos sus datos cargados.
    • Boton flotante movil para crear evento rapidamente y modal tipo bottom sheet en pantallas pequenas.

    Modal avanzado de eventos

    • Campos para titulo, descripcion, ubicacion, fecha, hora de inicio, hora de fin y todo el dia.
    • Categorias con color: Trabajo, Reunion, Foco, Personal, IA, Google, Proyecto y Tarea.
    • Recordatorios: sin aviso, 10 minutos, 30 minutos, 1 hora o 1 dia antes.
    • Recurrencia diaria, semanal o mensual con expansion visual en el rango activo.
    • Asistentes internos y enlaces/archivos relacionados guardados como JSON.
    • Modo privado o compartido preparado para futuras funciones colaborativas.
    • Eliminacion de eventos propios desde el modal de edicion.

    Google Calendar

    • Nuevos scopes OAuth calendar.readonly y calendar.events dentro de la conexion Google.
    • Endpoint /api/calendar/google/import para importar eventos del calendario principal de Google.
    • Endpoint /api/calendar/google/freebusy para consultar disponibilidad del dia seleccionado.
    • Opcion para crear un evento tambien en Google Calendar al guardarlo desde GIA.
    • Los eventos importados de Google guardan source_id, enlace htmlLink y metadata de sincronizacion.

    Eventos desde IA y chat

    • Input inteligente en /calendar que interpreta frases como "manana reunion con Alex a las 17:00".
    • Detector local de fecha, dia de la semana, hora, titulo y categoria probable antes de guardar.
    • Accion de mensaje "Anadir al calendario" en escritorio.
    • Accion movil "Crear evento" dentro del menu por presion larga de mensajes propios.
    • Apertura de /calendar?draft=... para transformar contenido del chat en borrador editable.

    Comparador multi-modelo

    • Nuevo modo Comparar modelos dentro del composer de chat.
    • Selector de 2 a 4 modelos visibles respetando permisos y configuracion publica.
    • Nueva API /api/chat/compare para resolver modelos por configuracion segura y generar comparativas.
    • Insercion de mensaje de usuario y respuesta assistant con metadata de comparacion.
    • Soporte para proveedores OpenAI-compatible, Gemini-compatible, Anthropic y Ollama-style segun configuracion existente.

    Version y navegacion

    • Header PC actualizado a la version 7.1.0.
    • Header movil actualizado a la version 7.1.0.
    • Acceso a Calendario desde el menu de foto de usuario en PC.
    • Acceso a Calendario desde el menu de tres puntos en movil.
  11. v7.0.0

    Welcome editable, calendario inteligente y admin reorganizado

    La version 7.0.0 convierte la pagina Welcome en una experiencia configurable desde admin, anade saludos especiales por festivos y ocasiones, soporta variables dinamicas y HTML seguro, y reorganiza el panel admin para que sea mas facil mantener la plataforma.

    Nuevo

    • Nueva tab Welcome en Admin para editar los textos permanentes de la pantalla de bienvenida por idioma.
    • Nueva tab Calendario en Admin para gestionar festivos, Sant Jordi y saludos especiales por pais, region o ciudad.
    • Soporte para variables dinamicas en Welcome: nombre, dia, hora, parte del dia, estado de actividad y rol admin/usuario.
    • Nueva variable {countdown} configurable desde Admin Welcome con fecha objetivo, estilos, colores y preview en vivo.
    • Las variables ahora se aplican en todos los textos del Welcome: saludo, frases animadas, input, disclaimer, accesos y sugerencias.
    • HTML y CSS inline seguro en los mensajes de Welcome, con sanitizado para bloquear scripts, eventos peligrosos y estilos inseguros.
    • Menu admin reorganizado por bloques Principal, IA, Datos y Experiencia para reducir el desorden operativo.

    Welcome configurable

    • Nueva API publica para cargar mensajes de bienvenida configurados desde app_settings sin exponer permisos admin.
    • Nueva API admin para leer, editar y restaurar los mensajes de Welcome por idioma.
    • Edicion de saludo principal, frases animadas, placeholder del input, disclaimer, accesos rapidos moviles y sugerencias guardadas.
    • Preview dentro del panel admin para validar rapidamente como quedaran los textos antes de guardar.
    • Panel Welcome ampliado hasta 1580px, con preview lateral, mapa de edicion y bloques mas legibles.
    • La pantalla Welcome conserva fallback local si la configuracion publica no esta disponible.

    Variables dinamicas

    • Anadidas variables {name}, {weekday}, {time}, {partOfDay}, {activityStatus}, {isAdmin} y {countdown}.
    • {time} inserta la hora local actual del usuario.
    • {partOfDay} resuelve manana/tarde/noche segun la hora y el idioma activo.
    • {activityStatus} muestra el estado de actividad del usuario cuando esta disponible.
    • {isAdmin} permite diferenciar mensajes para usuarios admin o usuarios normales.
    • {countdown} inserta una cuenta atras viva que se actualiza cada segundo y puede usarse en cualquier campo del Welcome.
    • El placeholder del input resuelve variables como texto plano seguro para evitar etiquetas HTML dentro del campo.
    • Las frases animadas y el disclaimer renderizan las mismas variables que el saludo principal.

    Countdown configurable

    • Nueva configuracion countdown por idioma dentro del JSON de Welcome, sin migracion adicional.
    • Admin permite activar/desactivar countdown, elegir fecha objetivo, texto de etiqueta y texto expirado.
    • Estilos disponibles: glass premium, azul suave, oscuro y minimal.
    • Personalizacion de tamano, redondeado, color de acento, fondo, texto y borde.
    • Render visual redisenado con capsula responsive, unidades separadas por dias/horas/minutos/segundos y mejor integracion dentro del titulo grande.

    HTML seguro

    • Nuevo renderer SafeRichText reutilizable para renderizar contenido enriquecido sin ejecutar JavaScript.
    • Sanitizador propio para permitir HTML basico, emojis y estilos inline controlados.
    • Bloqueo explicito de script, style, iframe, object, embed, form, inputs, handlers on* y URLs javascript/vbscript.
    • Las frases animadas con HTML se muestran como frase completa para evitar romper etiquetas durante el typewriter.

    Calendario inteligente

    • Nueva tabla calendar_occasions con fecha, recurrencia anual, categoria, pais, region, ciudad, prioridad, saludos por idioma y estado activo.
    • Endpoint publico /api/calendar/welcome para resolver el mejor saludo especial segun fecha, idioma y ubicacion.
    • Endpoint admin CRUD para crear, editar, activar, desactivar y borrar ocasiones especiales.
    • Sincronizador anual con Nager.Date y semillas locales para ocasiones como Sant Jordi.
    • La WelcomeScreen puede sustituir el saludo normal por mensajes especiales como Bon Sant Jordi cuando corresponde.

    Admin y base de datos

    • Navegacion admin agrupada por Principal, IA, Datos y Experiencia tanto en sidebar como en menu movil.
    • Welcome y Calendario quedan dentro de Experiencia para separar configuracion visual de gestion operativa.
    • Nueva migracion 072_calendar_occasions.sql para calendario y saludos especiales.
    • Nueva migracion 073_welcome_messages_settings.sql para persistir la configuracion editable de Welcome.
    • Tipos TypeScript ampliados para calendar occasions y configuraciones de Welcome.
  12. v6.9.0

    Carpetas como workspaces y herramientas por defecto

    La version 6.9.0 convierte Carpetas en un workspace visual mas claro: nueva pantalla principal, modales premium, sidebar refinado y una tab Herramientas que permite activar herramientas por defecto para los chats nuevos creados dentro de cada carpeta.

    Nuevo

    • Nueva tab Herramientas en configuracion de carpeta para definir herramientas activas por defecto.
    • Los chats nuevos dentro de una carpeta heredan automaticamente herramientas como Web, Deep Research, Unidad de red, Imagen, Documentos, Excel, Code Interpreter e integraciones.

    Mejorado

    • Pantalla de carpeta redisenada como workspace con cabecera premium, metricas de chats, documentos, memoria y knowledge.
    • Crear y configurar carpetas ahora usa modales mas limpios, responsive y consistentes con el diseno minimalista actual.
    • Sidebar PC y movil muestran carpetas con iconos consistentes, mejor jerarquia visual y acciones mas discretas.

    Workspace de carpetas

    • La vista de carpeta deja de ser una lista basica y pasa a funcionar como un workspace con identidad visual propia.
    • Cabecera con icono, nombre, descripcion, acciones limpias y metricas de chats, documentos, memoria y colecciones knowledge.
    • Estado vacio mejorado con llamada clara para crear el primer chat o preparar contexto.
    • Lista de chats de carpeta con icono, modelo usado, fecha, badges de fijado y compartido.

    Herramientas por defecto

    • Nueva columna default_tools_json para guardar herramientas predeterminadas por carpeta.
    • Nueva tab Herramientas en el modal de configuracion de carpeta.
    • Soporte para activar por defecto Cerca web, Deep Research, Unidad de red, Generar imagen, Generar document, Excel/CSV, Code Interpreter, Base de datos, Google, Spotify y Microsoft 365.
    • ChatInput carga esas preferencias al abrir una carpeta sin chat activo y respeta permisos de modelo, rol y colaboracion.

    Modales y creacion

    • Modal de crear carpeta redisenado con bottom sheet movil, preview de carpeta, selector de iconos y CTA principal mas claro.
    • Modal de configuracion reorganizado con navegacion lateral en PC y tabs horizontales en movil.
    • General, Prompt, Herramientas, Documentos, Knowledge y Memoria tienen jerarquia visual mas clara.
    • Documentos, knowledge y memoria mantienen sus acciones existentes con tarjetas y estados mas legibles.

    Sidebar y header

    • Nuevo sistema compartido de iconos para carpetas que elimina emojis corruptos y mantiene consistencia visual.
    • Sidebar PC reduce ruido: acciones de carpeta aparecen al hover, drop state mas claro y boton de crear primer chat si esta vacia.
    • Sidebar movil muestra cada carpeta como workspace con icono, subtitulo y chevron.
    • Chip de carpeta activa en header actualizado a un estilo blanco minimalista con icono consistente.

    Base de datos y estabilidad

    • Anadida migracion 071_folder_default_tools.sql para persistir herramientas por defecto en Supabase.
    • Tipos TypeScript actualizados con Folder.default_tools_json.
    • Typecheck validado con tsc --noEmit.
  13. v6.8.0

    Movil mas pro, voz adaptada y estabilidad visual

    La version 6.8.0 refina la experiencia movil con menu de usuario mas completo, Spotify en reproduccion con progreso, modo voz adaptado a pantalla pequena, herramientas con logos oficiales y varios fixes de estabilidad que eliminan warnings y parpadeos visuales.

    Nuevo

    • Spotify muestra portada, artista, progreso y tiempo de reproduccion en el menu movil sin ocupar espacio cuando no hay musica sonando.
    • Menu de herramientas usa logos oficiales a color para Google, Spotify y Microsoft tanto en PC como en movil.
    • Correcciones de estabilidad: hydration warning mitigado, scroll button sin bucle de updates, sugerencias sin errores ruidosos y eliminado onSelectStart no soportado.

    Mejorado

    • Menu movil de tres puntos con perfil de usuario, corona admin, estado activo, acceso a changelog/admin y Spotify solo cuando hay reproduccion activa.
    • Modo voz movil redisenado como card liquid glass con temporizador, avatar GIA, transcripcion centrada y botones grandes de silenciar/colgar.

    Header y menu movil

    • El menu de tres puntos movil incorpora bloque de perfil con avatar, email, estado online/typing/read/offline y badge admin con corona.
    • Se anaden accesos directos a Changelog y Panel Admin cuando el usuario tiene permisos.
    • La tarjeta Spotify se oculta si no hay reproduccion activa para mantener el menu limpio.
    • Cuando Spotify esta sonando, se muestra portada, cancion, artista, barra de progreso y tiempo actual / duracion.

    Voz movil

    • Nueva interfaz movil para modo conversacion: card inferior liquid glass adaptada a safe area y barra de navegacion.
    • Temporizador visible arriba a la derecha y estado contextual TU, GIA, BUSCANDO, CONECTANDO o ESCUCHANDO.
    • Avatar GIA centrado con reaccion visual al audio y transcripcion grande centrada.
    • Botones tactiles de silenciar y colgar con estilo de llamada movil y haptics existentes conservados.
    • La version PC del modal de voz queda intacta.

    Composer y herramientas

    • El menu de herramientas movil adopta la estructura compacta tipo ChatGPT usada en PC.
    • Google, Spotify y Microsoft usan logos SVG de marca a color en menus, chips activos y version movil.
    • El input movil elimina el borde azul nativo al enfocar y mantiene el estilo glass limpio.
    • El menu por presion larga de mensajes moviles ya no aplica fondo gris pesado sobre el chat.

    Estabilidad

    • RootLayout usa suppressHydrationWarning para evitar ruido por atributos inyectados por extensiones o el cliente.
    • El boton de bajar al final del chat evita setState repetidos y corrige el error Maximum update depth exceeded.
    • Follow-up suggestions deja de lanzar errores de consola cuando la API devuelve error o no hay sugerencias.
    • El hook useLongPress elimina onSelectStart porque React lo ignora y generaba warning en consola.
    • Se mantiene typecheck y build de produccion pasando con Next.js 16.1.6.

    Documentacion

    • Anadido documento de analisis completo del proyecto en Markdown y DOCX para auditar capacidades, arquitectura y modulos.
    • Incluido script local para regenerar el DOCX del analisis del proyecto.
  14. v6.7.0

    Sidebar PC premium y herramientas mas claras

    La experiencia de escritorio gana una capa visual mas cuidada: sidebar con profundidad sutil, renombrado de chats integrado, menu de herramientas estilo ChatGPT y header actualizado a la version 6.7.0. Tambien se limpian indicadores redundantes sobre el input y se corrige la apertura del selector de modelo movil.

    Nuevo

    • Renombrar chat en el sidebar PC pasa a una capsula integrada con guardar/cancelar y sin borde azul nativo.
    • Sidebar de escritorio refinado con fondo degradado suave, panel superior flotante, busqueda elevada y estados activos mas claros.
    • Menu de herramientas PC reorganizado en formato compacto tipo ChatGPT con acciones principales y subpanel Mas.
    • El header de PC muestra la version 6.7.0 y el selector de modelo movil se abre arriba sin tapar el input.

    Mejorado

    • Menu contextual de chats PC con posicion fija, blur, sombras limpias y mejor comportamiento al hacer scroll o redimensionar.

    Sidebar PC

    • Nuevo tratamiento visual con gradiente suave, bordes finos, sombras controladas y botones activos con ring discreto.
    • Renombrado de chats convertido en formulario inline premium con icono, seleccion automatica del texto, boton de confirmar y boton de cancelar.
    • Filas de conversacion con hover mas suave, active state blanco elevado y mejor separacion entre grupos.
    • Carpetas, secciones y sidebar colapsado ajustados para mantener una jerarquia visual consistente.
    • Menu de tres puntos renderizado con posicion fija para evitar cortes dentro del scroll del sidebar.

    Composer y herramientas

    • Menu de herramientas de escritorio redisenado en una lista compacta con acciones prioritarias: adjuntar, generar imagen, Deep Research y busqueda web.
    • Submenu Mas para integraciones y herramientas avanzadas sin saturar el primer nivel.
    • Picker de knowledge dentro del menu PC con seleccion clara, estado de carga y opcion de limpiar colecciones.
    • Eliminado el indicador redundante de estado de IA encima del input para reducir ruido visual.

    Header y movil

    • Header PC actualizado para mostrar version 6.7.0 en el enlace de changelog.
    • Selector de modelo movil reforzado con z-index y pointer-events correctos para abrirse encima del contenido y no sobre el input.
    • El panel movil de modelos queda anclado debajo del header y con scrim funcional.
  15. v6.6.0

    Interfaz PC minimalista y sidebar redisenado

    La interfaz de escritorio adopta una direccion mas limpia tipo ChatGPT: header flotante sin ruido, input mas equilibrado, sidebar plano y menus contextuales coherentes. En movil se ajusta el header, el selector de modelo y el welcome para evitar solapes y mejorar la navegacion.

    Nuevo

    • Input de escritorio refinado con botones sin brillos, tooltips personalizados y chip de herramientas activas con cierre rapido.
    • Header de PC simplificado con acciones flotantes y version visible de nuevo, moviendo notificaciones/sonido a ajustes.
    • Header movil con selector de modelo compacto, acciones alineadas a la derecha y panel de modelos anclado arriba para no tapar el input.
    • Welcome movil ajustado para bajar contenido y evitar solapes con el header liquid glass.

    Mejorado

    • Sidebar de PC redisenado completo con fondo plano, filas limpias, grupos sin emojis y menus contextuales solidos.

    Interfaz PC

    • Rediseno minimalista de escritorio guardando copia del estilo anterior en style-backups/legacy-pc-style-v6.5.0.
    • Header de escritorio sin barra pesada: controles flotantes, version visible y menos elementos permanentes.
    • Composer PC reorganizado con altura estable, transiciones mas suaves y estados activos menos agresivos.
    • Botones de voz, microfono y envio sin brillos/glows ni sombras circulares innecesarias.

    Sidebar PC

    • Fondo plano #f7f7f8, borde derecho fino y eliminacion de glass, blur, gradientes y sombras pesadas.
    • Controles superiores simplificados: nuevo chat, busqueda, imagenes, canales, proyectos, apps y nueva carpeta en lista clara.
    • Filas de conversacion planas con active state gris, hover suave, shared badge discreto y menu de tres puntos solo en hover.
    • Grupos de chats sin emojis, contadores discretos y secciones Carpetas/Chats con jerarquia mas sobria.
    • Sidebar colapsado rehecho con ancho 60px, botones centrados, active gris y resize handle casi invisible.

    Input y tooltips

    • Tooltips nativos del navegador reemplazados por tooltips personalizados en acciones principales del composer.
    • El chip de herramientas activas muestra una X al pasar el raton para desactivar todas las herramientas de una vez.
    • El estado de herramienta activa evita fondos pesados y mantiene una estetica mas limpia dentro del input.

    Movil

    • Header movil cambia la capsula central a selector de modelo compacto.
    • Botones de nuevo chat y mas opciones quedan agrupados a la derecha.
    • El panel de modelos movil se abre arriba, debajo del header, evitando tapar el input inferior.
    • Welcome movil baja su contenido para no quedar pegado ni tapado por el header flotante.
  16. v6.5.0

    Generacion de imagenes con ventana viva en el chat

    La generacion de imagenes pasa a sentirse integrada en la conversacion: aparece una card inline tipo ChatGPT mientras se crea la imagen, muestra progreso visual y se transforma en resultado final con acciones rapidas.

    Nuevo

    • El backend emite un evento interno cuando la imagen queda lista o falla para actualizar la card sin mostrar texto tecnico en el chat.
    • Chats compartidos muestran una card de generacion cuando otro participante lanza una imagen, en lugar de un placeholder generico.

    Mejorado

    • Nueva card inline de generacion de imagenes con estado vivo, fases visuales, barra de progreso y preview placeholder.
    • El resultado final de imagen usa la misma experiencia visual con acciones para abrir, descargar, copiar y crear una variante.

    Imagenes en chat

    • Nuevo componente ImageGenerationCard reutilizable para estados running, ready y error.
    • Estado efimero imageGenerationRun en el store UI para controlar la ventana viva de generacion sin ensuciar mensajes persistidos.
    • La respuesta visible limpia los eventos image_generation_event para que no aparezcan como texto Markdown.
    • La card final conserva prompt, modelo y acciones rapidas sobre la imagen generada.

    Backend y streaming

    • El flujo /api/chat emite image_generation_event con status ready/error, image_url, prompt y modelo.
    • Se mantiene la persistencia actual en Supabase Storage y meta_json.image_url / meta_json.image_prompt.
    • La experiencia es compatible con gpt-image-1.5 sin depender de partial images no garantizadas por el modelo actual.

    Chats compartidos

    • Los placeholders live de generacion de imagen se renderizan como card visual para el otro usuario.
    • La card evita duplicar el bloque generico de pensando mientras la imagen se esta generando.
  17. v6.4.0

    Estabilidad visual movil y cierre fiable del streaming

    La version movil del chat corrige los parpadeos mas visibles al finalizar respuestas de IA, mejora el handoff entre streaming y mensaje persistido, y reduce saltos de scroll y overflow en pantallas pequenas.

    Nuevo

    • La respuesta de la IA ya no desaparece unos segundos al terminar el streaming si Supabase tarda en devolver el mensaje final.
    • Fallback local optimista para respuestas finales, reemplazado automaticamente por el mensaje persistido cuando llega desde la base de datos.
    • Welcome movil recuperada para entrar o crear un chat sin generar conversaciones vacias antes del primer mensaje.
    • Header movil liquid glass ya no tapa el welcome ni el primer mensaje: el contenido baja segun la altura real del header.

    Mejorado

    • Chats compartidos sincronizan mejor el evento assistant-done para que el receptor cambie antes de la tarjeta live al mensaje real.

    Arreglado

    • Composer movil con posicion inferior mas robusta y tablas Markdown mas seguras en pantallas estrechas.

    Chat movil

    • Handoff visual mas estable entre streamingContent y el mensaje final de assistant.
    • Autoscroll movil menos agresivo durante chunks de streaming para evitar saltos acumulados.
    • Correccion del calc() del composer inferior para respetar nav movil y safe area en navegadores moviles.
    • Tablas Markdown con ancho minimo reducido en movil para prevenir overflow horizontal excesivo.
    • Nuevo chat en movil vuelve a mostrar WelcomeScreen y crea la conversacion solo al enviar el primer mensaje.
    • WelcomeScreen adaptada a movil con espaciado dinamico del composer/nav y layout mas compacto.
    • Padding superior dinamico conectado al header movil para evitar solapes en welcome y conversaciones recien abiertas.

    Streaming y persistencia

    • Respuesta assistant optimista local cuando el stream termina antes de que el mensaje persistido llegue al store.
    • Merge del store mejorado con optimistic_client_stream_id y shared_stream_id para retirar el fallback sin duplicados.
    • Limpieza mas robusta de marcadores internos del stream como TITLE_UPDATED y eventos de research en el contenido visible.

    Chats compartidos

    • Sincronizacion silenciosa inmediata al recibir assistant-done por realtime.
    • Filtro live ajustado para no ocultar mensajes assistant persistidos durante el cierre del stream local.
    • Follow-ups calculados sobre mensajes combinados para convivir mejor con mensajes live y optimistas.
  18. v6.3.0

    Colaboracion avanzada en chats compartidos y cabecera movil simplificada

    Los chats compartidos pasan a una capa colaborativa mucho mas completa, con settings por conversacion, presencia y trabajo compartido sobre mensajes, mientras la experiencia movil se limpia con una cabecera iOS-like y un flujo de inicio mas estable.

    Nuevo

    • Chats compartidos con reglas por conversacion: memoria, solo lectura, tools permitidas, comments, assignments y links vivos.
    • Modal de compartir ampliado con gestion real de links, revocacion, caducidad y opciones de colaboracion.

    Mejorado

    • Base nueva para presencia, cola visual de prompts, live runs y estados colaborativos de IA mucho mas gobernables.
    • Header movil rediseñado con estructura mas limpia: menu lateral, capsula central del chat y acciones compactas.

    Chats compartidos

    • Nuevos tipos y endpoints para collaboration, presence, read receipts, comments y assignments sobre conversaciones compartidas.
    • Links de acceso en vivo con mas control operativo, incluyendo revocacion, expiracion y metadatos adicionales.
    • Ampliacion del control de acceso y de las reglas de colaboracion por conversacion para evitar usos incoherentes.
    • Mejor base para ownership visual de prompts, estados de ejecucion y coordinacion entre participantes.

    Interfaz colaborativa

    • ConversationCollaboratorsModal ampliado para gestionar personas, links y reglas del chat desde un mismo flujo.
    • MessageBubble y ChatArea preparados para capas colaborativas como comments, assignments y estados live.
    • ChatInput y WelcomeScreen ajustados para convivir con el nuevo modelo compartido sin romper el flujo inicial.

    Movil

    • Cabecera movil rehacida en un patron mucho mas limpio y cercano a iOS: menu circular, titulo en capsula y acciones compactas.
    • Mejor integracion visual de chats compartidos dentro del header mostrando el avatar del propietario cuando aplica.
    • Composer movil y textos de soporte refinados para acompasar el nuevo header sin ruido extra.
  19. v6.2.0

    Chats compartidos en vivo y colaboracion mucho mas rapida

    Se incorpora colaboracion en tiempo real estilo ChatGPT para chats propios, con invites y enlaces vivos, typing y streaming de IA compartidos, y una base movil mas refinada para trabajar en equipo.

    Nuevo

    • Chats propios compartidos en tiempo real con participantes, roles y enlace de acceso vivo.
    • Mensajes, typing y respuestas de la IA mucho mas rapidos para el otro usuario, con placeholder live y streaming persistido.
    • Sidebar compartido con avatar del propietario y badge SHARE tanto para owner como para invitado.

    Mejorado

    • Mejoras fuertes de UX movil: menus contextuales iOS-like, quote por gesto, haptics best-effort y composer mas limpio.

    Chats compartidos

    • Invitacion por usuario con roles owner, editor y viewer sobre conversaciones normales.
    • Enlace autenticado de acceso en vivo para entrar al mismo chat compartido.
    • Typing en tiempo real, mensajes remotos optimistas y streaming de IA visible para todos los participantes.
    • Persistencia del estado live en messages para no depender solo del broadcast efimero.

    Realtime y experiencia de chat

    • Placeholder assistant persistido antes del stream para que el otro usuario vea antes el estado de respuesta.
    • Polling silencioso y resincronizacion corta para cerrar huecos de Supabase Realtime.
    • Aislamiento de identidad en chats compartidos para no mezclar memoria ni nombres entre participantes.
    • Avatar y nombre del autor humano visibles en burbujas y elementos colaborativos.

    Movil

    • Long press premium en sidebar y mensajes con menus contextuales tipo iOS.
    • Swipe suave para citar mensajes y preview de reply antes de enviar.
    • Composer movil simplificado con acceso rapido por + y mejor gestion de adjuntos.
    • Buscador movil, estados vacios y feedback visual tactil mucho mas pulidos.
  20. v6.1.0

    Bloqueo temporal de usuarios, modelos más sólidos y canales móviles refinados

    Se corrigen fallos reales en canales, se habilita el bloqueo temporal con página dedicada, se arregla la visibilidad de modelos y se mejora la experiencia móvil en admin, settings y canales.

    Nuevo

    • Bloqueo temporal de usuarios con enforcement global y página bloqueado de estilo premium.
    • Botón ocultar modelos reparado con PATCH parcial real y modal de modelos más sólido en móvil.

    Mejorado

    • Canales más estables: el mensaje ya no desaparece tras enviar y el perfil del usuario vuelve a resolverse correctamente.
    • Acceso al panel admin desde settings móvil y más optimización general en canales para pantallas pequeñas.

    Seguridad y acceso

    • Bloqueo temporal o indefinido por usuario desde admin.
    • Middleware global que redirige al usuario bloqueado a una página dedicada.
    • Página /blocked con tiempo restante, fecha de fin y motivo del bloqueo.

    Canales

    • El envío ya no se pierde por reinicios de estado al resolver el usuario actual.
    • El backend devuelve el mensaje insertado incluso si fallan tareas no críticas después del insert.
    • Optimizaciones móviles: header sticky, input con safe area, hoja de perfil más natural y toolbar hover oculta en móvil.

    Admin y modelos

    • Ocultar/mostrar modelos corregido con PATCH parcial real.
    • Modal de modelos en móvil con scroll bloqueado detrás del overlay.
    • Nueva entrada Admin dentro del settings modal para acceder al panel desde móvil.
  21. v6.0.0

    Deep Research visual con Playwright y viewport persistente

    Deep Research incorpora navegacion visual real con Playwright, viewport incrustado en el chat, historial persistente por conversacion y una experiencia de investigacion mucho mas trazable.

    Nuevo

    • Live Viewport incrustado en el chat y ventana flotante con capturas en tiempo real.
    • Playwright con navegacion interna, clicks reales, scroll mas util y aceptacion de banners de cookies.
    • Persistencia del historial de investigacion al cambiar de chat y volver.

    Mejorado

    • Mejoras de query focus, fallback visual y bloqueo de frames inutiles como CAPTCHA de Google.

    Deep Research

    • Viewport en vivo dentro del chat con miniaturas, breadcrumb y modo seguir en vivo.
    • Ventana flotante sincronizada con el mismo historial de investigacion.
    • Historial rehidratado por conversacion para no perder capturas ni eventos al navegar entre chats.

    Playwright y navegacion visual

    • Browser pass determinista con scroll, extraccion, clicks internos y recorrido de paginas relevantes.
    • Aceptacion automatica de banners de cookies en motores y webs visitadas.
    • Fallback visual cuando Google bloquea, evitando mostrar capturas inutiles como frame principal.

    Calidad de respuesta

    • Consultas de investigacion con query foco para reducir busquedas absurdas.
    • Priorizacion mas clara de fuentes deportivas y paginas de resultados cuando la consulta lo requiere.
    • Eventos en vivo y evidencia visual mas consistente para auditar cada paso de la investigacion.
  22. v5.9.0

    Feedback, tareas y changelog

    Se añade feedback estructurado de respuestas, mejoras de tareas ejecutables y una pagina publica de changelog.

    Nuevo

    • Feedback de respuestas IA con pulgar, puntuacion 0-10 y comentario.
    • Panel admin de feedback con modelo, herramientas, prompt y valoracion.
    • Navegacion con enlaces reales para abrir paginas en nueva pestana.
    • Nueva pagina /changelog y nueva 404 con estilo liquid glass.

    Feedback IA

    • Thumbs up/down por respuesta de la IA.
    • Popup de valoracion con nota 0-10 y comentario.
    • Panel admin Feedback con modelo, prompt, herramientas y extracto valorado.

    Tareas

    • Pausa, reactivacion y edicion desde chat.
    • Notificaciones y resultados publicados en la conversacion.
    • Soporte para feedback y mejoras de formato en respuestas programadas.

    Plataforma

    • Changelog independiente del chat.
    • Navegacion mejor preparada para abrir paginas en otra pestana.
    • Pagina 404 personalizada con el lenguaje visual de GIA.
  23. v5.8.0

    Unidad de red y tareas ejecutables

    Se refuerza la unidad de red con contenido completo persistido y se habilitan tareas ejecutables desde el chat.

    Nuevo

    • RAG de unidad de red con full_text, secciones y tablas.
    • Tareas programadas de busqueda web, unidad de red, correo, analytics, adsense y BD.
    • Guardado de documentos generados en unidad de red.

    Unidad de red

    • Sincronizacion con contenido completo persistido y fallback robusto.
    • Consulta de documentos por texto y no solo por nombre.
    • Guardado de documentos generados desde el chat en la unidad de red.

    Tareas ejecutables

    • Busquedas web programadas con resumen.
    • Revision de unidad de red y correo.
    • Consultas programadas sobre Analytics, AdSense y bases de datos.
  24. v5.7.0

    Canales, menciones y progreso de sincronizacion

    Se mejora la colaboracion en canales y la visibilidad del progreso real de sincronizaciones.

    Nuevo

    • Paginacion real de mensajes e hilos en canales.
    • Menciones persistidas con badges y filtro.
    • Barra de progreso real para unidades de red con estado en vivo.

    Canales

    • Paginacion incremental de mensajes e hilos.
    • DMs con clave unica estable.
    • Autor IA separado del autor humano.
    • Menciones reales a usuarios y modelos.

    Admin

    • Progreso detallado por archivo en sincronizaciones.
    • Resumen de estado y costes de sync.
  25. v5.0.0

    Spotify, voz avanzada y dashboard de analitica

    Se incorpora una integracion completa con Spotify, mejoras grandes en voz y una base de analitica mas util para administracion y seguimiento.

    Nuevo

    • Spotify full integration.
    • Modo de voz avanzado.
    • Analytics dashboard.
    • Base solida para reporting de producto.
  26. v4.9.0

    Voice, reactive agents y browser agent

    Release centrada en automatizacion reactiva, voz y capacidades de agente en navegador, con mejor observabilidad de costes.

    Nuevo

    • Reactive agents.
    • Cost dashboard.
    • Browser agent.

    Mejorado

    • Voice improvements.
  27. v4.8.0

    Invitaciones y seguridad

    Se refuerza la capa de invitaciones y se añaden mejoras de seguridad y control de acceso en la plataforma.

    Nuevo

    • Sistema de invitaciones.
    • Mayor control de acceso.

    Seguridad

    • Mejoras de seguridad.
  28. v4.7.0

    Roles, herramientas y permisos

    Release orientada a reforzar permisos, herramientas y control fino de acceso en la experiencia multiusuario.

    Nuevo

    • Herramientas mas gobernadas.

    Mejorado

    • Mejoras del sistema de roles.

    Seguridad

    • Permisos mas consistentes.
  29. v4.2.0

    Hotfixes de canales

    Se corrigen errores de TypeScript y estabilidad en rutas de hilos y mensajes fijados dentro de canales.

    Nuevo

    • Build TypeScript estabilizado.

    Arreglado

    • Fixes en pins de canales.
    • Fixes en thread routes.
  30. v4.1.3

    Refinamiento incremental de plataforma

    Ajuste de estabilidad sobre la rama 4.1 con mejoras menores de producto y consistencia general.

    Nuevo

    • Refinamiento incremental.
    • Pulido de estabilidad.

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