feat(studio): el cliente entra directo a su agente y ve primero las conversaciones

En el portal, un cliente con un solo espacio y un solo agente tenía que
elegir dos veces antes de llegar a lo suyo. Ahora entra directo.

Y la primera pestaña deja de ser configuración: lo que le importa al dueño
es qué le están preguntando sus clientes, y poder probarlo. Para el staff
el orden queda igual.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-17 18:26:46 -05:00
co-authored by Claude Opus 5
parent e2dab8117c
commit 1ebae791f6
6 changed files with 103 additions and 43 deletions
+30 -10
View File
@@ -13,7 +13,13 @@ const route = useRoute()
const agente = ref(null)
const error = ref('')
const tab = ref(typeof route.query.tab === 'string' ? route.query.tab : 'conocimiento')
const tab = ref(
typeof route.query.tab === 'string'
? route.query.tab
: contexto.esPortal
? 'conversaciones'
: 'conocimiento',
)
// ─── Base de conocimiento ───────────────────────────────────────────────────
const documentos = ref([])
@@ -299,15 +305,29 @@ async function enviarChatPrueba() {
}
}
const tabs = [
['conocimiento', 'Base de conocimiento'],
['herramientas', 'Herramientas'],
['canales', 'Canales'],
['conexiones', 'Conexiones'],
['chat', 'Chat de prueba'],
['conversaciones', 'Conversaciones'],
['auditoria', 'Auditoría'],
]
// Al dueño le importa qué le preguntan sus clientes y poder probarlo; la
// configuración la toca una vez. Al staff, al revés.
const tabs = computed(() =>
contexto.esPortal
? [
['conversaciones', 'Conversaciones'],
['chat', 'Probar'],
['conocimiento', 'Base de conocimiento'],
['herramientas', 'Herramientas'],
['canales', 'Canales'],
['conexiones', 'Conexiones'],
['auditoria', 'Auditoría'],
]
: [
['conocimiento', 'Base de conocimiento'],
['herramientas', 'Herramientas'],
['canales', 'Canales'],
['conexiones', 'Conexiones'],
['chat', 'Chat de prueba'],
['conversaciones', 'Conversaciones'],
['auditoria', 'Auditoría'],
],
)
// ─── Auditoría ────────────────────────────────────────────────────────────────
const eventos = ref([])
+44 -4
View File
@@ -1,14 +1,54 @@
<script setup>
import { contexto } from '../lib/contexto.js'
import { onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import { api } from '../lib/api.js'
import { apiUmind, contexto } from '../lib/contexto.js'
const router = useRouter()
const cargando = ref(contexto.esPortal)
// El cliente no tiene "tenants": tiene SU asistente. Si solo hay un espacio
// con un agente —el caso normal— entrar obligándolo a elegir dos veces es
// jerarquía nuestra, no suya. Se salta directo al agente.
//
// Con varios espacios o varios agentes sí hace falta elegir, así que ahí se
// muestra la pantalla de siempre.
async function irAlAgenteSiEsUnoSolo() {
if (!contexto.esPortal) return
try {
const t = await api.get(apiUmind('/umind/tenants'))
const tenants = t.items || []
if (tenants.length !== 1) return
const tenantId = tenants[0].ID
const a = await api.get(apiUmind(`/umind/agentes?tenant_id=${tenantId}`))
const agentes = a.items || []
if (agentes.length === 1) {
router.replace(`/tenants/${tenantId}/agentes/${agentes[0].ID}`)
return
}
router.replace(`/tenants/${tenantId}`)
} catch {
// Si algo falla se queda en esta pantalla, que igual deja navegar.
} finally {
cargando.value = false
}
}
onMounted(irAlAgenteSiEsUnoSolo)
</script>
<template>
<div class="flex flex-col items-center justify-center text-center py-24">
<div v-if="cargando" class="flex flex-col items-center justify-center py-24 text-sm text-tenue">
Abriendo tu asistente
</div>
<div v-else class="flex flex-col items-center justify-center text-center py-24">
<div class="text-4xl mb-4">💬</div>
<h1 class="text-lg font-medium text-gray-700 dark:text-gray-200">
<h1 class="text-lg font-medium text-texto">
{{ contexto.esPortal ? 'Elegí tu espacio de la izquierda' : 'Elegí un tenant de la izquierda' }}
</h1>
<p class="text-sm text-gray-400 dark:text-gray-500 mt-1">
<p class="text-sm text-tenue mt-1">
{{ contexto.esPortal
? 'Adentro vas a poder crear y configurar tus agentes.'
: 'o creá uno nuevo para empezar a configurar su agente.' }}