Fix: la imagen al refrescar salía como "archivo 0 B" + ahora aparece en /imagenes
Tras refrescar el chat la imagen generada salía como un attachment genérico (clip de papel "archivo 0 B") en vez de la card de imagen. Causa: desde v7.22 el endpoint /api/image/generate guarda la imagen en `meta_json.generated_image_url`, pero MessageBubble (`getImageUrl`) y la página /imagenes seguían leyendo el campo legacy `meta_json.image_url`. Resultado: el url no se encontraba, no se renderizaba la card, y el attachment con `kind: "generated_image"` caía al renderizador genérico. Fix: leer ambos campos (legacy + nuevo + attachments_json) y filtrar el attachment generated_image para que no se muestre como archivo genérico.
Nuevo
- 🖼️ La imagen ahora reaparece como CARD al refrescar (antes salía como attachment "archivo 0 B").
- 🗂️ Las imágenes nuevas YA aparecen en la página /imagenes (galería).
- 🔍 `getImageUrl(message)` busca en 3 sitios: meta_json.image_url (legacy), meta_json.generated_image_url (v7.22+), y attachments_json[] con kind="generated_image".
- 🚫 Filtrado: el attachment con `kind: "generated_image"` se excluye del listado de attachments del bubble — ya se renderiza arriba en la card, no debe duplicarse como archivo.
- 🏷️ El badge del modelo en la card persistida ahora viene del registro real (antes estaba hardcoded a "gpt-image-1").
- 📝 Nueva función `getImageModel(message)` simétrica a getImageUrl/getImagePrompt.
Causa raíz
- Pre-v7.22 (cuando la imagen se generaba inline en /api/chat) los campos eran `image_url`/`image_prompt` en meta_json.
- En v7.22 movimos la generación a /api/image/generate, que escribe en `generated_image_url`/`generated_image_prompt` y añade un `attachments_json[].kind: "generated_image"`.
- Pero MessageBubble.tsx:getImageUrl y ImagesGalleryPage.tsx seguían leyendo SÓLO los campos legacy. Resultado: las imágenes generadas desde v7.22 nunca persistían visualmente.
- Adicional: el attachment generated_image llegaba al renderizador genérico de archivos sin file_id ni size → mostraba "archivo / 0 B" con icono de clip.
Cambios en MessageBubble.tsx
- getImageUrl: lee meta_json.image_url || meta_json.generated_image_url || attachments_json[kind=generated_image].url.
- getImagePrompt: misma lógica con prompt.
- getImageModel: nueva función para el badge del modelo.
- rawAttachments: filtra los `kind: "generated_image"` para que no se rendericen como attachment genérico.
- ImageGenerationCard recibe modelLabel del registro real (no hardcoded).
Cambios en ImagesGalleryPage.tsx (/imagenes)
- Query incluye attachments_json además de meta_json.
- Lookup en 3 sitios: meta_json.image_url legacy, meta_json.generated_image_url, attachments_json[kind=generated_image].url.
- Las imágenes generadas desde v7.22 ahora aparecen en la galería del usuario.
- Las pre-v7.22 (legacy) siguen apareciendo (compat hacia atrás).
