From 3ceb61c035b2fe85b422ea4c5204dc0ea9f77ef0 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 19 Aug 2026 19:19:01 -0500 Subject: [PATCH] feat(umind): Umi, la mascota, y un solo vocabulario en toda la interfaz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La mascota. Umi sale del logo, no es un dibujo aparte: su cuerpo es la "u" del monograma y el punto del logo pasa a ser su antena, así que símbolo y personaje son la misma forma vista dos veces. Por eso puede estar al lado del logo sin competirle. Tiene estados, y no son decoración: cada pantalla vacía dice algo distinto y la cara lo dice antes que el texto. Dormida cuando todavía no pasó nada, buscando cuando falta cargarle información, contenta cuando no hay errores, alerta cuando algo se rompió. Los ojos toman el color de la superficie de atrás en vez de ser blancos, así se apoya sobre cualquier tarjeta y en modo oscuro no quedan dos puntos flotando. Las pantallas vacías. Había una buena y ocho que decían "Sin canales configurados." y nada más — el usuario quedaba resolviendo solo qué significa eso y qué hacer. Ahora las ocho explican qué va ahí y por qué importa: "No está atendiendo en ningún lado", "Todavía no sabe nada de tu negocio". El vocabulario. La misma cosa tenía dos nombres según la pantalla: tenant y espacio, tool y herramienta. Un producto que se llama distinto a sí mismo en cada lugar se siente como varios productos pegados. Queda: espacio, agente, herramienta, fuente. Y "al AI" pasa a "a la IA", que además es el género que ya usaba el resto del panel. Y la barra de scroll de las pestañas, que se veía gris y gruesa sobre el contenido: en escritorio las siete entran holgadas y no hacía falta, en móvil siguen deslizándose pero sin la barra encima. Co-Authored-By: Claude Opus 5 --- orchestrator/src/components/Sidebar.vue | 12 +- .../src/components/ui/UiEmptyState.vue | 24 +++- orchestrator/src/components/ui/UiMascota.vue | 118 ++++++++++++++++++ orchestrator/src/style.css | 13 ++ orchestrator/src/views/AgenteDetail.vue | 53 ++++++-- orchestrator/src/views/Home.vue | 5 +- orchestrator/src/views/TenantAgentes.vue | 4 +- public/orchestrator/assets/index-CRnmvnlL.js | 26 ---- public/orchestrator/assets/index-Culm0hM7.css | 1 - public/orchestrator/assets/index-DNRtUHD7.css | 1 + public/orchestrator/assets/index-Da7ZrNMD.js | 26 ++++ public/orchestrator/index.html | 4 +- public/umind.html | 27 +++- 13 files changed, 258 insertions(+), 56 deletions(-) create mode 100644 orchestrator/src/components/ui/UiMascota.vue delete mode 100644 public/orchestrator/assets/index-CRnmvnlL.js delete mode 100644 public/orchestrator/assets/index-Culm0hM7.css create mode 100644 public/orchestrator/assets/index-DNRtUHD7.css create mode 100644 public/orchestrator/assets/index-Da7ZrNMD.js diff --git a/orchestrator/src/components/Sidebar.vue b/orchestrator/src/components/Sidebar.vue index ee2614f..219a392 100644 --- a/orchestrator/src/components/Sidebar.vue +++ b/orchestrator/src/components/Sidebar.vue @@ -112,7 +112,7 @@ async function guardar() { } async function eliminar(t) { - if (!confirm(`¿Eliminar el tenant "${t.nombre}"? Esto borra también sus agentes. No se puede deshacer.`)) return + if (!confirm(`¿Eliminar el espacio "${t.nombre}"? Esto borra también sus agentes. No se puede deshacer.`)) return await api.del(apiUmind(`/umind/tenants/${t.ID}`)) if (tenantActivoId.value === String(t.ID)) router.push('/') await cargar() @@ -157,7 +157,7 @@ onMounted(() => { class="btn-primary w-full" @click="nuevoTenant" > - + Nuevo tenant + + Nuevo espacio @@ -166,7 +166,7 @@ onMounted(() => {