e8850d8965
Añade un control "Nueva room" en el header del sidebar (botón "+") y CTAs en los estados vacíos del sidebar y del panel. Abren un modal que pide el asunto, crea la room con bus.createRoom contra el bus real, la inserta en la lista (dedup por id, sin recargar) y la activa. - NewRoomModal: modal de Mantine con loading, manejo de SessionError/Error en español, crear con Enter o botón, formulario limpio en cada apertura. - ChatShell: estado del modal con useDisclosure, handleRoomCreated centraliza inserción + selección, empty state del panel rediseñado con botón crear. - Sidebar: prop onNewRoom, botón "+" con tooltip, empty state distingue "sin resultados" de "sin rooms" (con CTA crear primera room). No toca la capa de datos (busService.ts ni web/src/bus/): usa los métodos de bus tal como están. Verificado end-to-end contra el cluster real: crear room desde la UI, enviar mensaje y verlo aparecer por la suscripción. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>