diff --git a/README-ES.md b/README-ES.md
new file mode 100644
index 0000000000..71e0602414
--- /dev/null
+++ b/README-ES.md
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+Motor de inteligencia colectiva simple y universal, prediciendo todo
+
+Un Motor de Inteligencia Colectiva Simple y Universal, Prediciendo Todo
+
+
+
+[](https://github.com/666ghj/MiroFish/stargazers)
+[](https://github.com/666ghj/MiroFish/watchers)
+[](https://github.com/666ghj/MiroFish/network)
+[](https://hub.docker.com/)
+[](https://deepwiki.com/666ghj/MiroFish)
+
+[](http://discord.gg/ePf5aPaHnA)
+[](https://x.com/mirofish_ai)
+[](https://www.instagram.com/mirofish_ai/)
+
+[English](./README.md) | [中文文档](./README-ZH.md) | [Español](./README-ES.md)
+
+
+
+## ⚡ Descripción general
+
+**MiroFish** es un motor de predicción de próxima generación impulsado por tecnología multi-agente. Al extraer información semilla del mundo real (como noticias de última hora, borradores de políticas o señales financieras), construye automáticamente un mundo digital paralelo de alta fidelidad. Dentro de este espacio, miles de agentes inteligentes con personalidades independientes, memoria a largo plazo y lógica conductual interactúan libremente y experimentan evolución social. Podés inyectar variables dinámicamente desde una "perspectiva omnisciente" para deducir con precisión trayectorias futuras — **ensayar el futuro en un simulador digital y ganar decisiones tras incontables simulaciones**.
+
+> Solo necesitás: Subir materiales semilla (informes de análisis de datos o historias noveladas interesantes) y describir tus requisitos de predicción en lenguaje natural
+> MiroFish devolverá: Un informe de predicción detallado y un mundo digital de alta fidelidad profundamente interactivo
+
+### Nuestra visión
+
+MiroFish se dedica a crear un espejo de inteligencia colectiva que refleja la realidad. Al capturar la emergencia colectiva desencadenada por interacciones individuales, superamos las limitaciones de la predicción tradicional:
+
+- **A nivel macro**: Somos un laboratorio de ensayo para tomadores de decisiones, permitiendo que políticas y relaciones públicas sean probadas a riesgo cero
+- **A nivel micro**: Somos un sandbox creativo para usuarios individuales — ya sea deduciendo finales de novelas o explorando escenarios imaginativos, todo puede ser divertido, lúdico y accesible
+
+Desde predicciones serias hasta simulaciones lúdicas, hacemos que cada "¿qué pasaría si?" vea su resultado, haciendo posible predecir todo.
+
+## 🌐 Demo en vivo
+
+Visité nuestro entorno de demostración en línea y experimentá una simulación de predicción sobre eventos de opinión pública que preparamos para vos: [mirofish-live-demo](https://666ghj.github.io/mirofish-demo/)
+
+## 📸 Capturas de pantalla
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 🎬 Videos de demostración
+
+### 1. Simulación de opinión pública de la Universidad de Wuhan + Introducción al proyecto MiroFish
+
+
+
+
+Hacé clic en la imagen para ver el video completo de demostración de predicción usando el "Informe de Opinión Pública de la Universidad de Wuhan" generado por BettaFish
+
+
+### 2. Simulación del final perdido de "Sueño de las Cámaras Rojas"
+
+
+
+
+Hacé clic en la imagen para ver la predicción profunda de MiroFish del final perdido basada en cientos de miles de palabras de los primeros 80 capítulos de "Sueño de las Cámaras Rojas"
+
+
+> **Predicción financiera**, **Predicción de noticias políticas** y más ejemplos próximamente...
+
+## 🔄 Flujo de trabajo
+
+1. **Construcción del grafo**: Extracción de semillas & Inyección de memoria individual/colectiva & Construcción de GraphRAG
+2. **Configuración del entorno**: Extracción de relaciones entre entidades & Generación de personajes & Inyección de configuración de Agentes
+3. **Simulación**: Simulación paralela en dos plataformas & Análisis automático de requisitos de predicción & Actualización dinámica de memoria temporal
+4. **Generación de informe**: ReportAgent con amplio conjunto de herramientas para interacción profunda con el entorno post-simulación
+5. **Interacción profunda**: Conversá con cualquier agente del mundo simulado & Interactuá con ReportAgent
+
+## 🚀 Inicio rápido
+
+### Opción 1: Despliegue desde código fuente (Recomendado)
+
+#### Requisitos previos
+
+| Herramienta | Versión | Descripción | Verificar instalación |
+|-------------|---------|-------------|----------------------|
+| **Node.js** | 18+ | Runtime de frontend, incluye npm | `node -v` |
+| **Python** | ≥3.11, ≤3.12 | Runtime de backend | `python --version` |
+| **uv** | Última | Gestor de paquetes Python | `uv --version` |
+
+#### 1. Configurar variables de entorno
+
+```bash
+# Copiar el archivo de configuración de ejemplo
+cp .env.example .env
+
+# Editar el archivo .env y completar las claves API necesarias
+```
+
+**Variables de entorno requeridas:**
+
+```env
+# Configuración de API LLM (soporta cualquier API LLM con formato OpenAI SDK)
+# Recomendado: Modelo Alibaba Qwen-plus vía Bailian Platform: https://bailian.console.aliyun.com/
+# Alto consumo, probá primero simulaciones con menos de 40 rondas
+LLM_API_KEY=tu_api_key
+LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
+LLM_MODEL_NAME=qwen-plus
+
+# Configuración de Zep Cloud
+# La cuota mensual gratuita es suficiente para uso básico: https://app.getzep.com/
+ZEP_API_KEY=tu_zep_api_key
+```
+
+#### 2. Instalar dependencias
+
+```bash
+# Instalación con un clic de todas las dependencias (raíz + frontend + backend)
+npm run setup:all
+```
+
+O instalá paso a paso:
+
+```bash
+# Instalar dependencias Node (raíz + frontend)
+npm run setup
+
+# Instalar dependencias Python (backend, crea entorno virtual automáticamente)
+npm run setup:backend
+```
+
+#### 3. Iniciar servicios
+
+```bash
+# Iniciar frontend y backend (ejecutar desde la raíz del proyecto)
+npm run dev
+```
+
+**URLs de servicios:**
+- Frontend: `http://localhost:3000`
+- Backend API: `http://localhost:5001`
+
+**Iniciar individualmente:**
+
+```bash
+npm run backend # Iniciar solo el backend
+npm run frontend # Iniciar solo el frontend
+```
+
+### Opción 2: Despliegue con Docker
+
+```bash
+# 1. Configurar variables de entorno (igual que despliegue desde código fuente)
+cp .env.example .env
+
+# 2. Extraer imagen e iniciar
+docker compose up -d
+```
+
+Lee `.env` del directorio raíz por defecto, mapea puertos `3000 (frontend) / 5001 (backend)`
+
+> La dirección del mirror para descarga más rápida se proporciona como comentarios en `docker-compose.yml`, reemplazá si es necesario.
+
+## 📬 Unite a la conversación
+
+
+
+
+
+
+
+El equipo de MiroFish está reclutando posiciones de tiempo completo/pasantías. Si te interesan la simulación multi-agente y las aplicaciones de LLM, sentite libre de enviar tu CV a: **mirofish@shanda.com**
+
+## 📄 Agradecimientos
+
+**¡MiroFish ha recibido apoyo estratégico e incubación de Shanda Group!**
+
+El motor de simulación de MiroFish está impulsado por **[OASIS (Open Agent Social Interaction Simulations)](https://github.com/camel-ai/oasis)**, ¡agradecemos sinceramente las contribuciones de código abierto del equipo CAMEL-AI!
+
+## 📈 Estadísticas del proyecto
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 4b8369f4cf..6286d9f841 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
[](https://x.com/mirofish_ai)
[](https://www.instagram.com/mirofish_ai/)
-[English](./README.md) | [中文文档](./README-ZH.md)
+[English](./README.md) | [中文文档](./README-ZH.md) | [Español](./README-ES.md)
diff --git a/locales/es.json b/locales/es.json
new file mode 100644
index 0000000000..3fd17f8751
--- /dev/null
+++ b/locales/es.json
@@ -0,0 +1,665 @@
+{
+ "common": {
+ "confirm": "Confirmar",
+ "cancel": "Cancelar",
+ "loading": "Cargando...",
+ "error": "Error",
+ "success": "Éxito",
+ "completed": "Completado",
+ "processing": "Generando",
+ "pending": "Pendiente",
+ "ready": "Listo",
+ "running": "Ejecutando",
+ "failed": "Falló",
+ "unknown": "Desconocido",
+ "unknownError": "Error desconocido",
+ "none": "Ninguno",
+ "close": "Cerrar",
+ "back": "Volver",
+ "next": "Siguiente",
+ "retry": "Reintentar",
+ "noData": "No hay datos disponibles",
+ "hours": "horas",
+ "minutes": "minutos",
+ "rounds": "rondas",
+ "items": "elementos",
+ "files": "archivos"
+ },
+ "meta": {
+ "title": "MiroFish - Predecir Todo",
+ "description": "MiroFish - Sistema de simulación de opinión en redes sociales"
+ },
+ "nav": {
+ "visitGithub": "Visita nuestra página de Github"
+ },
+ "home": {
+ "tagline": "Motor de inteligencia colectiva simple y universal",
+ "version": "/ v0.1-Vista previa",
+ "heroTitle1": "Sube informes,",
+ "heroTitle2": "Predice el futuro",
+ "heroDesc": "A partir de un solo documento, {brand} extrae semillas de la realidad para generar automáticamente un mundo paralelo con hasta {agentScale}. Inyecta variables desde una perspectiva omnisciente para encontrar la {optimalSolution} en la dinámica compleja de grupos.",
+ "heroDescBrand": "MiroFish",
+ "heroDescAgentScale": "millones de Agentes",
+ "heroDescOptimalSolution": "\"óptimo local\"",
+ "slogan": "Que los Agentes ensayan el futuro, que las decisiones prevalezcan",
+ "systemStatus": "Estado del sistema",
+ "systemReady": "Listo",
+ "systemReadyDesc": "Motor de predicción en espera. Subí datos no estructurados para iniciar una secuencia de simulación.",
+ "metricLowCost": "Bajo costo",
+ "metricLowCostDesc": "Prom. $5/sim",
+ "metricHighAvail": "Escalable",
+ "metricHighAvailDesc": "Millones de Agentes",
+ "workflowSequence": "Flujo de trabajo",
+ "step01Title": "Construcción del grafo",
+ "step01Desc": "Extracción de semillas & Inyección de memoria & Construcción de GraphRAG",
+ "step02Title": "Configuración del entorno",
+ "step02Desc": "Extracción de entidades & Generación de personajes & Inyección de configuración de Agentes",
+ "step03Title": "Simulación",
+ "step03Desc": "Simulación paralela en dos plataformas & Análisis automático de requisitos & Memoria temporal",
+ "step04Title": "Informe",
+ "step04Desc": "ReportAgent interactúa con el entorno post-simulación mediante herramientas avanzadas",
+ "step05Title": "Interacción",
+ "step05Desc": "Conversa con cualquier individuo simulado & Interactúa con ReportAgent",
+ "realitySeed": "01 / Semilla de realidad",
+ "supportedFormats": "Formatos: PDF, MD, TXT",
+ "dragToUpload": "Arrastrá archivos para subir",
+ "orBrowse": "o hacé clic para explorar archivos",
+ "inputParams": "Parámetros de entrada",
+ "simulationPrompt": ">_ 02 / Prompt de simulación",
+ "promptPlaceholder": "// Describí tu requisito de simulación o predicción en lenguaje natural",
+ "engineBadge": "Motor: MiroFish-V1.0",
+ "startEngine": "Iniciar motor",
+ "initializing": "Inicializando..."
+ },
+ "main": {
+ "layoutGraph": "Grafo",
+ "layoutSplit": "Doble columna",
+ "layoutWorkbench": "Área de trabajo",
+ "stepNames": ["Construcción del grafo", "Configuración del entorno", "Ejecutar simulación", "Generación de informe", "Interacción profunda"]
+ },
+ "step1": {
+ "ontologyGeneration": "Generación de ontología",
+ "ontologyCompleted": "Completado",
+ "ontologyGenerating": "Generando",
+ "ontologyPending": "Pendiente",
+ "ontologyDesc": "El LLM analiza el contenido del documento y los requisitos de simulación, extrae semillas de la realidad y genera automáticamente la estructura ontológica adecuada",
+ "analyzingDocs": "Analizando documentos...",
+ "graphRagBuild": "Construcción de GraphRAG",
+ "graphRagDesc": "A partir de la ontología generada, los documentos se fragmentan automáticamente y se envían a Zep para construir un grafo de conocimiento, extrayendo entidades y relaciones, formando memoria temporal y resúmenes de comunidad",
+ "entityNodes": "Nodos de entidad",
+ "relationEdges": "Aristas de relación",
+ "schemaTypes": "Tipos de esquema",
+ "buildComplete": "Construcción completa",
+ "buildCompleteDesc": "La construcción del grafo está completa. Procedé al siguiente paso para configurar el entorno de simulación.",
+ "inProgress": "En progreso",
+ "creating": "Creando...",
+ "enterEnvSetup": "Entrar a configuración del entorno",
+ "createSimulationFailed": "Error al crear simulación: {error}",
+ "createSimulationException": "Excepción al crear simulación: {error}"
+ },
+ "step2": {
+ "simInstanceInit": "Inicialización de instancia de simulación",
+ "simInstanceDesc": "Crear una nueva instancia de simulación y obtener plantillas de parámetros del mundo",
+ "asyncTaskDone": "Tarea asíncrona completada",
+ "generateAgentPersona": "Generar personajes de Agentes",
+ "generateAgentPersonaDesc": "Combina contexto para extraer automáticamente entidades y relaciones del grafo de conocimiento, inicializar individuos simulados y asignar comportamientos y memorias únicos basados en semillas de la realidad",
+ "currentAgentCount": "Agentes actuales",
+ "expectedAgentTotal": "Total esperado de Agentes",
+ "relatedTopicsCount": "Temas relacionados con la semilla",
+ "generatedAgentPersonas": "Personajes de Agentes generados",
+ "unknownProfession": "Profesión desconocida",
+ "noBio": "Sin biografía",
+ "dualPlatformConfig": "Generar configuración de doble plataforma",
+ "dualPlatformConfigDesc": "El LLM configura inteligentemente el flujo temporal del mundo, algoritmos de recomendación, horas activas de cada individuo, frecuencia de publicaciones, disparadores de eventos y más, basado en requisitos y semillas de la realidad",
+ "simulationDuration": "Duración de la simulación",
+ "roundDuration": "Duración por ronda",
+ "totalRounds": "Rondas totales",
+ "activePerHour": "Activos por hora",
+ "peakHours": "Horas pico",
+ "workHours": "Horario laboral",
+ "morningHours": "Horario matutino",
+ "offPeakHours": "Horas valle",
+ "agentConfig": "Configuración de Agentes",
+ "activeTimePeriod": "Horas activas",
+ "postsPerHour": "Publicaciones/hora",
+ "commentsPerHour": "Comentarios/hora",
+ "responseDelay": "Retraso de respuesta",
+ "activityLevel": "Nivel de actividad",
+ "sentimentBias": "Sesgo emocional",
+ "influenceWeight": "Influencia",
+ "recommendAlgoConfig": "Configuración de algoritmo de recomendación",
+ "platform1Name": "Plataforma 1: Plaza / Feed",
+ "platform2Name": "Plataforma 2: Tema / Comunidad",
+ "recencyWeight": "Peso de recencia",
+ "popularityWeight": "Peso de popularidad",
+ "relevanceWeight": "Peso de relevancia",
+ "viralThreshold": "Umbral viral",
+ "echoChamberStrength": "Intensidad de cámara de eco",
+ "llmConfigReasoning": "Razonamiento de configuración LLM",
+ "initialActivation": "Orquestación de activación inicial",
+ "initialActivationDesc": "Genera automáticamente eventos de activación iniciales y temas candentes basados en la dirección narrativa para guiar el estado inicial del mundo de simulación",
+ "orchestrating": "Orquestando",
+ "narrativeDirection": "Dirección narrativa",
+ "initialHotTopics": "Temas candentes iniciales",
+ "initialActivationSeq": "Secuencia de activación inicial ({count})",
+ "setupComplete": "Configuración completa",
+ "setupCompleteDesc": "El entorno de simulación está listo. Ahora podés iniciar la simulación.",
+ "roundsConfig": "Configuración de rondas de simulación",
+ "roundsConfigDesc": "MiroFish planifica automáticamente simular {hours} horas del mundo real, cada ronda representa {minutesPerRound} minutos de tiempo transcurrido",
+ "customToggle": "Personalizado",
+ "roundsUnit": "rondas",
+ "estimatedDuration": "Para 100 Agentes: est. ~{minutes} minutos",
+ "estimatedDurationFull": "Para 100 Agentes: est. {minutes} minutos",
+ "recommendedRounds": "{rounds} (recomendado)",
+ "customTip": "Para primeras ejecuciones, recomendamos cambiar a 'Modo personalizado' para reducir rondas, obtener una vista previa rápida y disminuir el riesgo de errores",
+ "backToGraphBuild": "Volver a construcción del grafo",
+ "startDualWorldSim": "Iniciar simulación paralela de mundo dual",
+ "profileModalAge": "Edad aparente",
+ "profileModalGender": "Género aparente",
+ "profileModalCountry": "País/Región",
+ "profileModalMbti": "MBTI aparente",
+ "profileModalBio": "Biografía del personaje",
+ "profileModalTopics": "Temas relacionados con la semilla",
+ "profileModalPersona": "Antecedentes detallados del personaje",
+ "personaDimExperience": "Experiencia completa del evento",
+ "personaDimExperienceDesc": "Trayectoria conductual completa en este evento",
+ "personaDimBehavior": "Perfil conductual",
+ "personaDimBehaviorDesc": "Resumen de experiencia y preferencias conductuales",
+ "personaDimMemory": "Huella de memoria única",
+ "personaDimMemoryDesc": "Memorias formadas a partir de semillas de la realidad",
+ "personaDimSocial": "Red social",
+ "personaDimSocialDesc": "Conexiones individuales y grafo de interacción",
+ "genderMale": "Masculino",
+ "genderFemale": "Femenino",
+ "genderOther": "Otro",
+ "yearsOld": "años",
+ "initializing": "Inicializando",
+ "generating": "Generando"
+ },
+ "step3": {
+ "startGenerateReport": "Generar informe",
+ "generatingReport": "Iniciando...",
+ "waitingForActions": "Esperando acciones de agentes...",
+ "errorMissingSimId": "Error: falta simulationId",
+ "startingDualSim": "Iniciando simulación paralela de doble plataforma...",
+ "graphMemoryUpdateEnabled": "Actualización dinámica de memoria del grafo habilitada",
+ "setMaxRounds": "Rondas máximas de simulación configuradas en: {rounds}",
+ "oldSimCleared": "Registros de simulación anteriores eliminados, reiniciando simulación",
+ "engineStarted": "Motor de simulación iniciado exitosamente",
+ "startFailed": "Error al iniciar: {error}",
+ "startException": "Excepción al iniciar: {error}",
+ "stoppingSim": "Deteniendo simulación...",
+ "simStopped": "Simulación detenida",
+ "stopFailed": "Error al detener: {error}",
+ "stopException": "Excepción al detener: {error}",
+ "allPlatformsCompleted": "Todas las simulaciones de plataforma han finalizado",
+ "simCompleted": "Simulación completada",
+ "graphRealtimeRefresh": "Actualización en tiempo real del grafo habilitada (30s)",
+ "graphRefreshStopped": "Actualización en tiempo real del grafo detenida",
+ "preparingGoBack": "Preparando para volver al Paso 2, cerrando simulación...",
+ "closingSimEnv": "Cerrando entorno de simulación...",
+ "simEnvClosed": "Entorno de simulación cerrado",
+ "closeFailed": "Error al cerrar el entorno de simulación, intentando detención forzada...",
+ "stoppingProcess": "Deteniendo proceso de simulación...",
+ "checkStatusFailed": "Error al verificar estado de simulación: {error}",
+ "forceStopSuccess": "Simulación detenida forzosamente",
+ "forceStopFailed": "Error en detención forzada: {error}",
+ "startGenerateReportBtn": "Generar informe",
+ "generatingReportBtn": "Iniciando..."
+ },
+ "step4": {
+ "generatingSection": "Generando {title}...",
+ "goToInteraction": "Entrar a interacción profunda",
+ "waitingForReportAgent": "Esperando a Report Agent...",
+ "collapse": "Colapsar ▲",
+ "expandAll": "Mostrar todo {count} ▼",
+ "expandAllEntities": "Mostrar todo {count} ▼",
+ "scenarioLabel": "Escenario: ",
+ "tabKeyFacts": "Hechos clave ({count})",
+ "tabCoreEntities": "Entidades centrales ({count})",
+ "tabRelationChains": "Cadenas de relación ({count})",
+ "tabSubQueries": "Subconsultas ({count})",
+ "panelKeyFacts": "Últimos hechos clave de la memoria temporal",
+ "totalCount": "{count} total",
+ "totalEntityCount": "{count} total",
+ "panelCoreEntities": "Entidades centrales",
+ "factCount": "{count} hechos",
+ "panelRelationChains": "Cadenas de relación",
+ "panelSubQueries": "Subpreguntas de análisis de consulta derivada",
+ "emptyKeyFacts": "No hay hechos clave disponibles",
+ "emptyCoreEntities": "No hay entidades centrales disponibles",
+ "emptyRelationChains": "No hay cadenas de relación disponibles",
+ "tabActiveFacts": "Hechos activos ({count})",
+ "tabHistoricalFacts": "Hechos históricos ({count})",
+ "tabEntities": "Entidades ({count})",
+ "panelActiveFacts": "Hechos activos",
+ "emptyActiveFacts": "No hay hechos activos disponibles",
+ "panelHistoricalFacts": "Hechos históricos",
+ "emptyHistoricalFacts": "No hay hechos históricos disponibles",
+ "panelEntities": "Entidades",
+ "emptyEntities": "No hay entidades disponibles",
+ "searchLabel": "Buscar: ",
+ "tabFacts": "Hechos ({count})",
+ "tabEdges": "Aristas ({count})",
+ "tabNodes": "Nodos ({count})",
+ "panelSearchResults": "Resultados de búsqueda",
+ "emptySearchResults": "No se encontraron resultados",
+ "panelRelatedEdges": "Aristas relacionadas",
+ "panelRelatedNodes": "Nodos relacionados",
+ "world1": "Mundo 1",
+ "world2": "Mundo 2"
+ },
+ "step5": {
+ "interactiveTools": "Herramientas interactivas",
+ "agentsAvailable": "{count} agentes disponibles",
+ "chatWithReportAgent": "Chat con Report Agent",
+ "chatWithAgent": "Chat con cualquier individuo del mundo",
+ "selectChatTarget": "Seleccionar interlocutor",
+ "sendSurvey": "Enviar encuesta al mundo",
+ "reportAgentChat": "Report Agent - Chat",
+ "reportAgentDesc": "Versión conversacional del agente generador de informes con acceso a 4 herramientas profesionales y la memoria completa de MiroFish",
+ "toolInsightForge": "InsightForge Atribución Profunda",
+ "toolInsightForgeDesc": "Alinea datos de semillas del mundo real con el estado de simulación, combinando Memoria Global/Local para análisis de atribución profunda trans-temporal",
+ "toolPanoramaSearch": "PanoramaSearch Seguimiento Completo",
+ "toolPanoramaSearchDesc": "Algoritmo BFS basado en grafos que reconstruye rutas de propagación de eventos, capturando la topología completa del flujo de información",
+ "toolQuickSearch": "QuickSearch Recuperación Rápida",
+ "toolQuickSearchDesc": "Interfaz de consulta instantánea basada en GraphRAG con indexación optimizada para extracción rápida de atributos de nodos y hechos discretos",
+ "toolInterviewSubAgent": "InterviewSubAgent Entrevista Virtual",
+ "toolInterviewSubAgentDesc": "Entrevistas autónomas que realizan diálogos paralelos multi-ronda con individuos simulados, recopilando datos de opinión no estructurados y estados psicológicos",
+ "profileBio": "Biografía",
+ "chatEmptyReportAgent": "Chateá con Report Agent para explorar el contenido del informe en profundidad",
+ "chatEmptyAgent": "Chateá con individuos simulados para comprender sus perspectivas",
+ "chatInputPlaceholder": "Escribí tu pregunta...",
+ "selectSurveyTarget": "Seleccionar objetivos de encuesta",
+ "selectedCount": "Seleccionados {selected} / {total}",
+ "surveyQuestions": "Preguntas de encuesta",
+ "surveyInputPlaceholder": "Ingresá la pregunta que deseás enviar a todos los objetivos seleccionados...",
+ "submitSurvey": "Enviar encuesta",
+ "surveyResults": "Resultados de encuesta",
+ "surveyResultsCount": "{count} respuestas",
+ "selectAll": "Seleccionar todo",
+ "clearSelection": "Limpiar selección",
+ "errorOccurred": "Lo sentimos, ocurrió un error: {error}",
+ "noResponse": "Sin respuesta",
+ "requestFailed": "Solicitud fallida",
+ "selectAgentFirst": "Por favor, seleccioná primero un individuo simulado"
+ },
+ "graph": {
+ "panelTitle": "Visualización de relaciones del grafo",
+ "refreshGraph": "Actualizar grafo",
+ "graphMemoryRealtime": "Memoria de corto/largo plazo de GraphRAG actualizándose en tiempo real",
+ "realtimeUpdating": "Actualizándose en tiempo real...",
+ "pendingContentHint": "Parte del contenido aún se está procesando. Considerá actualizar el grafo manualmente más tarde.",
+ "nodeDetails": "Detalles del nodo",
+ "relationship": "Relación",
+ "graphDataLoading": "Cargando datos del grafo...",
+ "waitingOntology": "Esperando generación de ontología...",
+ "toggleMaximize": "Maximizar/Restaurar",
+ "closeHint": "Cerrar sugerencia"
+ },
+ "history": {
+ "title": "Historial de simulaciones",
+ "graphBuild": "Construcción del grafo",
+ "envSetup": "Configuración del entorno",
+ "analysisReport": "Informe de análisis",
+ "moreFiles": "+{count} archivos",
+ "noFiles": "Sin archivos",
+ "loadingText": "Cargando...",
+ "simRequirement": "Requisito de simulación",
+ "relatedFiles": "Archivos relacionados",
+ "noRelatedFiles": "Sin archivos relacionados",
+ "replayTitle": "Reproducción de simulación",
+ "step1Button": "Construcción del grafo",
+ "step2Button": "Configuración del entorno",
+ "step4Button": "Informe de análisis",
+ "replayHint": "El Paso 3 'Ejecutar simulación' y el Paso 5 'Interacción profunda' deben iniciarse durante la ejecución y no soportan reproducción histórica",
+ "notStarted": "Sin iniciar",
+ "roundsProgress": "{current}/{total} rondas",
+ "untitledSimulation": "Simulación sin título",
+ "unknownFile": "Archivo desconocido"
+ },
+ "api": {
+ "projectNotFound": "Proyecto no encontrado: {id}",
+ "projectDeleteFailed": "Proyecto no encontrado o error al eliminar: {id}",
+ "projectDeleted": "Proyecto eliminado: {id}",
+ "projectReset": "Proyecto reiniciado: {id}",
+ "requireSimulationRequirement": "Por favor, proporcioná un requisito de simulación (simulation_requirement)",
+ "requireFileUpload": "Por favor, subí al menos un archivo de documento",
+ "noDocProcessed": "Ningún documento se procesó exitosamente. Por favor, verificá los formatos de archivo.",
+ "requireProjectId": "Por favor, proporcioná project_id",
+ "configError": "Error de configuración: {details}",
+ "zepApiKeyMissing": "ZEP_API_KEY no configurada",
+ "ontologyNotGenerated": "Ontología aún no generada. Por favor, llamá a /ontology/generate primero.",
+ "graphBuilding": "Construcción del grafo en progreso. No reenvíes. Para forzar reconstrucción, agregá force: true.",
+ "textNotFound": "Contenido de texto extraído no encontrado",
+ "ontologyNotFound": "Definición de ontología no encontrada",
+ "graphBuildStarted": "Tarea de construcción del grafo iniciada. Consultá progreso vía /task/{taskId}.",
+ "graphBuildComplete": "Construcción del grafo completa",
+ "buildFailed": "Construcción falló: {error}",
+ "taskNotFound": "Tarea no encontrada: {id}",
+ "graphDeleted": "Grafo eliminado: {id}",
+ "entityNotFound": "Entidad no encontrada: {id}",
+ "graphNotBuilt": "Grafo aún no construido. Por favor, llamá a /api/graph/build primero.",
+ "requireSimulationId": "Por favor, proporcioná simulation_id",
+ "simulationNotFound": "Simulación no encontrada: {id}",
+ "projectMissingRequirement": "Proyecto sin requisito de simulación (simulation_requirement)",
+ "prepareStarted": "Tarea de preparación iniciada. Consultá progreso vía /api/simulation/prepare/status.",
+ "alreadyPrepared": "Preparación ya completada. No es necesario regenerar.",
+ "notStartedPrepare": "Preparación no iniciada. Por favor, llamá a /api/simulation/prepare.",
+ "taskCompletedPrepared": "Tarea completada (preparación ya existente)",
+ "requireTaskOrSimId": "Por favor, proporcioná task_id o simulation_id",
+ "configNotFound": "Configuración de simulación no encontrada. Por favor, llamá a /prepare primero.",
+ "configFileNotFound": "Archivo de configuración no encontrado. Por favor, llamá a /prepare primero.",
+ "unknownScript": "Script desconocido: {name}. Disponibles: {allowed}",
+ "scriptFileNotFound": "Archivo de script no encontrado: {name}",
+ "requireGraphId": "Por favor, proporcioná graph_id",
+ "noMatchingEntities": "No se encontraron entidades coincidentes",
+ "maxRoundsPositive": "max_rounds debe ser un entero positivo",
+ "maxRoundsInvalid": "max_rounds debe ser un entero válido",
+ "invalidPlatform": "Tipo de plataforma inválido: {platform}. Opciones: twitter/reddit/parallel",
+ "simRunningForceHint": "La simulación está en ejecución. Detenla primero vía /stop, o usá force=true para reiniciar.",
+ "simNotReady": "Simulación no lista. Estado actual: {status}. Por favor, llamá a /prepare primero.",
+ "graphIdRequiredForMemory": "La actualización de memoria del grafo requiere un graph_id válido. Asegurate de que el grafo esté construido.",
+ "dbNotExist": "La base de datos no existe. La simulación puede no haberse ejecutado aún.",
+ "requireMessage": "Por favor, proporcioná un mensaje",
+ "missingGraphId": "Falta el ID del grafo",
+ "missingGraphIdEnsure": "Falta el ID del grafo. Por favor, asegurate de que el grafo haya sido construido.",
+ "missingSimRequirement": "Falta la descripción del requisito de simulación",
+ "reportAlreadyExists": "El informe ya existe",
+ "reportGenerateStarted": "Tarea de generación de informe iniciada. Consultá progreso vía /api/report/generate/status.",
+ "reportGenerated": "Informe generado",
+ "reportNotFound": "Informe no encontrado: {id}",
+ "noReportForSim": "No se encontró informe para esta simulación: {id}",
+ "reportDeleted": "Informe eliminado: {id}",
+ "reportGenerateFailed": "Generación de informe falló",
+ "sectionNotFound": "Sección no encontrada: section_{index}.md",
+ "reportProgressNotAvail": "Informe no encontrado o progreso no disponible: {id}",
+ "requireAgentId": "Por favor, proporcioná agent_id",
+ "requirePrompt": "Por favor, proporcioná un prompt (pregunta de entrevista)",
+ "invalidInterviewPlatform": "La plataforma debe ser 'twitter' o 'reddit'",
+ "envNotRunning": "Entorno de simulación no ejecutándose o cerrado. Asegurate de que la simulación esté completa y en modo espera de comandos.",
+ "interviewTimeout": "Tiempo de espera de respuesta de entrevista agotado: {error}",
+ "requireInterviews": "Por favor, proporcioná entrevistas (lista de entrevistas)",
+ "interviewListMissingAgentId": "Elemento {index} de la lista de entrevistas: falta agent_id",
+ "interviewListMissingPrompt": "Elemento {index} de la lista de entrevistas: falta prompt",
+ "interviewListInvalidPlatform": "Elemento {index} de la lista de entrevistas: plataforma debe ser 'twitter' o 'reddit'",
+ "batchInterviewTimeout": "Tiempo de espera de respuesta de entrevista por lote agotado: {error}",
+ "globalInterviewTimeout": "Tiempo de espera de respuesta de entrevista global agotado: {error}",
+ "envRunning": "El entorno está en ejecución y listo para comandos de entrevista",
+ "envNotRunningShort": "Entorno no ejecutándose o cerrado",
+ "requireGraphIdAndQuery": "Por favor, proporcioná graph_id y query",
+ "initReportAgent": "Inicializando Report Agent..."
+ },
+ "progress": {
+ "initGraphService": "Inicializando servicio de construcción del grafo...",
+ "textChunking": "Fragmentando texto...",
+ "creatingZepGraph": "Creando grafo en Zep...",
+ "settingOntology": "Configurando definición de ontología...",
+ "addingChunks": "Agregando {count} fragmentos de texto...",
+ "waitingZepProcess": "Esperando que Zep procese los datos...",
+ "fetchingGraphData": "Obteniendo datos del grafo...",
+ "graphBuildComplete": "Construcción del grafo completa",
+ "buildFailed": "Construcción falló: {error}",
+ "startBuildingGraph": "Iniciando construcción del grafo...",
+ "graphCreated": "Grafo creado: {graphId}",
+ "ontologySet": "Ontología configurada",
+ "textSplit": "Texto dividido en {count} fragmentos",
+ "fetchingGraphInfo": "Obteniendo información del grafo...",
+ "sendingBatch": "Enviando lote {current}/{total} ({chunks} fragmentos)...",
+ "batchFailed": "Lote {batch} falló: {error}",
+ "noEpisodesWait": "No hay episodios para esperar",
+ "waitingEpisodes": "Esperando que {count} fragmentos de texto se procesen...",
+ "episodesTimeout": "Algunos fragmentos excedieron el tiempo de espera, {completed}/{total} completados",
+ "zepProcessing": "Zep procesando... {completed}/{total} completados, {pending} pendientes ({elapsed}s)",
+ "processingComplete": "Procesamiento completo: {completed}/{total}",
+ "taskComplete": "Tarea completa",
+ "taskFailed": "Tarea falló",
+ "startPreparingEnv": "Preparando entorno de simulación...",
+ "connectingZepGraph": "Conectando al grafo de Zep...",
+ "readingNodeData": "Leyendo datos de nodos...",
+ "readingComplete": "Listo, {count} entidades encontradas",
+ "startGenerating": "Iniciando generación...",
+ "analyzingRequirements": "Analizando requisitos de simulación...",
+ "generatingOutline": "Generando esquema del informe...",
+ "parsingOutline": "Analizando estructura del esquema...",
+ "outlinePlanComplete": "Planificación del esquema completa",
+ "deepSearchAndWrite": "Búsqueda profunda & escritura ({current}/{max})",
+ "initReport": "Inicializando informe...",
+ "startPlanningOutline": "Planificando esquema del informe...",
+ "outlineDone": "Esquema completo, {count} secciones",
+ "generatingSection": "Generando sección: {title} ({current}/{total})",
+ "sectionDone": "Sección {title} completa",
+ "assemblingReport": "Ensamblando informe completo...",
+ "reportComplete": "Generación de informe completa",
+ "reportFailed": "Generación de informe falló: {error}",
+ "savingProfiles": "Guardando archivos de perfil...",
+ "profilesComplete": "Listo, {count} perfiles generados",
+ "callingLLMConfig": "Llamando al LLM para generar configuración...",
+ "savingConfigFiles": "Guardando archivos de configuración...",
+ "configComplete": "Generación de configuración completa",
+ "generatingTimeConfig": "Generando configuración temporal...",
+ "generatingEventConfig": "Generando configuración de eventos y temas candentes...",
+ "generatingAgentConfig": "Generando configuración de agentes ({start}-{end}/{total})...",
+ "generatingPlatformConfig": "Generando configuración de plataforma...",
+ "zepSearchQuery": "Toda la información, actividades, eventos, relaciones y antecedentes sobre {name}",
+ "timeConfigLabel": "Configuración temporal",
+ "eventConfigLabel": "Configuración de eventos",
+ "agentConfigResult": "Configuración de Agentes: {count} generados",
+ "postAssignResult": "Asignación de publicaciones: {count} publicaciones asignadas",
+ "profileGenerated": "[Generado] {name} ({type})",
+ "readingGraphEntities": "Leyendo entidades del grafo",
+ "generatingProfiles": "Generando perfiles de Agentes",
+ "generatingSimConfig": "Generando configuración de simulación",
+ "preparingScripts": "Preparando scripts"
+ },
+ "log": {
+ "preparingGoBack": "Preparando para volver al Paso 2, cerrando simulación...",
+ "closingSimEnv": "Cerrando entorno de simulación...",
+ "simEnvClosed": "✓ Entorno de simulación cerrado",
+ "closeSimEnvFailed": "Error al cerrar entorno de simulación, intentando detención forzada...",
+ "simForceStopSuccess": "✓ Simulación detenida forzosamente",
+ "forceStopFailed": "Detención forzada falló: {error}",
+ "stoppingSimProcess": "Deteniendo proceso de simulación...",
+ "simStopped": "✓ Simulación detenida",
+ "stopSimFailed": "Error al detener simulación: {error}",
+ "checkStatusFailed": "Error al verificar estado de simulación: {error}",
+ "enterStep4": "Entrando al Paso 4: Generación de informe",
+ "loadingSimData": "Cargando datos de simulación: {id}",
+ "timeConfig": "Configuración temporal: {minutes} minutos por ronda",
+ "timeConfigFetchFailed": "Error al obtener configuración temporal, usando valor por defecto: {minutes} min/ronda",
+ "projectLoadSuccess": "Proyecto cargado: {id}",
+ "loadSimDataFailed": "Error al cargar datos de simulación: {error}",
+ "loadException": "Error de carga: {error}",
+ "graphDataLoadSuccess": "Datos del grafo cargados exitosamente",
+ "graphLoadFailed": "Carga del grafo falló: {error}",
+ "graphRealtimeRefreshStart": "Actualización en tiempo real del grafo habilitada (30s)",
+ "graphRealtimeRefreshStop": "Actualización en tiempo real del grafo detenida",
+ "simRunViewInit": "SimulationRunView inicializada",
+ "customRounds": "Rondas de simulación personalizadas: {rounds}",
+ "enterStep3": "Entrando al Paso 3: Ejecutar simulación",
+ "customRoundsConfig": "Rondas de simulación personalizadas: {rounds} rondas",
+ "useAutoRounds": "Usando rondas de simulación auto-configuradas",
+ "detectedSimEnvRunning": "Se detectó entorno de simulación en ejecución, cerrando...",
+ "closeSimEnvFailedWithError": "Error al cerrar entorno de simulación: {error}",
+ "closeSimEnvException": "Excepción al cerrar entorno de simulación: {error}",
+ "detectedSimRunning": "Se detectó simulación en ejecución, deteniendo...",
+ "forceStopSimFailed": "Detención forzada de simulación falló: {error}",
+ "forceStopSimException": "Excepción en detención forzada de simulación: {error}",
+ "simViewInit": "SimulationView inicializada",
+ "errorMissingSimId": "Error: falta simulationId",
+ "simInstanceCreated": "Instancia de simulación creada: {id}",
+ "preparingSimEnv": "Preparando entorno de simulación...",
+ "detectedExistingPrep": "Se detectó preparación existente, utilizándola directamente",
+ "prepareTaskStarted": "Tarea de preparación iniciada",
+ "prepareTaskId": " └─ ID de tarea: {taskId}",
+ "zepEntitiesFound": "Se encontraron {count} entidades del grafo de Zep",
+ "entityTypes": " └─ Tipos de entidad: {types}",
+ "startPollingProgress": "Consultando progreso de preparación...",
+ "prepareFailed": "Preparación falló: {error}",
+ "prepareException": "Excepción en preparación: {error}",
+ "prepareComplete": "✓ Preparación completa",
+ "prepareFailedWithError": "✗ Preparación falló: {error}",
+ "startGeneratingConfig": "Generando configuración de simulación de doble plataforma...",
+ "generatingAgentProfileConfig": "Generando configuración de personajes de agentes...",
+ "generatingLLMConfig": "Llamando al LLM para generar parámetros de configuración de simulación...",
+ "configComplete": "✓ Configuración de simulación generada",
+ "configSummaryAgents": " ├─ Agentes: {count}",
+ "configSummaryHours": " ├─ Duración: {hours} horas",
+ "configSummaryPosts": " ├─ Publicaciones iniciales: {count}",
+ "configSummaryTopics": " ├─ Temas candentes: {count}",
+ "configSummaryPlatforms": " └─ Plataformas: Twitter {twitter}, Reddit {reddit}",
+ "timeConfigDetail": "Configuración temporal: {minutes} min/ronda, {rounds} rondas totales",
+ "narrativeDirection": "Dirección narrativa: {direction}",
+ "envSetupComplete": "✓ Configuración del entorno completa, listo para simular",
+ "startSimCustomRounds": "Iniciando simulación, rondas personalizadas: {rounds}",
+ "startSimAutoRounds": "Iniciando simulación, rondas auto-configuradas: {rounds}",
+ "startGeneratingAgentProfiles": "Generando personajes de agentes...",
+ "agentProfile": "→ Personaje de agente {current}/{total}: {name} ({profession})",
+ "allProfilesComplete": "✓ Todos los {count} personajes de agentes generados",
+ "loadingExistingConfig": "Cargando datos de configuración existentes...",
+ "loadedAgentProfiles": "Se cargaron {count} personajes de agentes",
+ "configLoadSuccess": "✓ Configuración de simulación cargada",
+ "configSummaryPostsAlt": " └─ Publicaciones iniciales: {count}",
+ "configGenerating": "Configuración generándose, consultando...",
+ "loadConfigFailed": "Error al cargar configuración: {error}",
+ "step2Init": "Paso 2: configuración del entorno inicializada",
+ "step3Init": "Paso 3: ejecución de simulación inicializada",
+ "startingDualSim": "Iniciando simulación paralela de doble plataforma...",
+ "setMaxRounds": "Rondas máximas de simulación configuradas en: {rounds}",
+ "graphMemoryUpdateEnabled": "Actualización dinámica de memoria del grafo habilitada",
+ "oldSimCleared": "✓ Registros de simulación anteriores eliminados, reiniciando simulación",
+ "engineStarted": "✓ Motor de simulación iniciado exitosamente",
+ "startFailed": "✗ Error al iniciar: {error}",
+ "startException": "✗ Excepción al iniciar: {error}",
+ "stoppingSim": "Deteniendo simulación...",
+ "simStoppedSuccess": "✓ Simulación detenida",
+ "stopFailed": "Error al detener: {error}",
+ "stopException": "Excepción al detener: {error}",
+ "allPlatformsCompleted": "✓ Todas las simulaciones de plataforma han finalizado",
+ "simCompleted": "✓ Simulación completada",
+ "reportRequestSent": "Solicitud de generación de informe enviada, por favor esperá...",
+ "startingReportGen": "Iniciando generación de informe...",
+ "reportGenTaskStarted": "✓ Tarea de generación de informe iniciada: {reportId}",
+ "reportGenFailed": "✗ Error al iniciar generación de informe: {error}",
+ "reportGenException": "✗ Excepción en generación de informe: {error}",
+ "step5Init": "Paso 5: interacción profunda inicializada",
+ "selectChatTarget": "Interlocutor seleccionado: {name}",
+ "sendFailed": "Envío falló: {error}",
+ "sendToReportAgent": "Enviado a Report Agent: {message}...",
+ "reportAgentReplied": "Report Agent respondió",
+ "sendToAgent": "Enviado a {name}: {message}...",
+ "agentReplied": "{name} respondió",
+ "sendSurvey": "Enviando encuesta a {count} objetivos...",
+ "receivedReplies": "Se recibieron {count} respuestas",
+ "surveySendFailed": "Envío de encuesta falló: {error}",
+ "loadReportData": "Cargando datos del informe: {id}",
+ "loadReportFailed": "Error al cargar informe: {error}",
+ "reportDataLoaded": "Datos del informe cargados",
+ "loadReportLogFailed": "Error al cargar registros del informe: {error}",
+ "loadedProfiles": "Se cargaron {count} individuos simulados",
+ "loadProfilesFailed": "Error al cargar individuos simulados: {error}",
+ "interactionViewInit": "InteractionView inicializada",
+ "reportViewInit": "ReportView inicializada",
+ "getReportInfoFailed": "Error al obtener información del informe: {error}",
+ "enterStep": "Entrando al Paso {step}: {name}",
+ "returnToStep": "Volviendo al Paso {step}: {name}",
+ "customSimRounds": "Rondas de simulación personalizadas: {rounds} rondas"
+ },
+ "report": {
+ "taskStarted": "Tarea de generación de informe iniciada",
+ "planningStart": "Iniciando planificación del esquema del informe",
+ "fetchSimContext": "Obteniendo contexto de simulación",
+ "planningComplete": "Planificación del esquema completa",
+ "sectionStart": "Iniciando generación de sección: {title}",
+ "reactThought": "ReACT ronda {iteration} pensando",
+ "toolCall": "Llamando herramienta: {toolName}",
+ "toolResult": "Herramienta {toolName} devolvió resultado",
+ "llmResponse": "Respuesta del LLM (llamadas a herramientas: {hasToolCalls}, respuesta final: {hasFinalAnswer})",
+ "sectionContentDone": "Generación de contenido de sección {title} completa",
+ "sectionComplete": "Generación de sección {title} completa",
+ "reportComplete": "Generación de informe completa",
+ "errorOccurred": "Ocurrió un error: {error}",
+ "agentInitDone": "ReportAgent inicializado: graph_id={graphId}, simulation_id={simulationId}",
+ "executingTool": "Ejecutando herramienta: {toolName}, parámetros: {params}",
+ "toolExecFailed": "Ejecución de herramienta falló: {toolName}, error: {error}",
+ "startPlanningOutline": "Iniciando planificación del esquema del informe...",
+ "outlinePlanDone": "Planificación del esquema completa: {count} secciones",
+ "outlinePlanFailed": "Planificación del esquema falló: {error}",
+ "reactGenerateSection": "ReACT generando sección: {title}",
+ "sectionIterNone": "Sección {title} iteración {iteration}: el LLM devolvió None",
+ "sectionConflict": "Sección {title} ronda {iteration}: el LLM produjo tanto llamada a herramienta como respuesta final (conflicto #{conflictCount})",
+ "sectionConflictDowngrade": "Sección {title}: {conflictCount} conflictos consecutivos, degradando para truncar y ejecutar primera llamada a herramienta",
+ "sectionGenDone": "Generación de sección {title} completa (llamadas a herramientas: {count})",
+ "multiToolOnlyFirst": "El LLM intentó {total} llamadas a herramientas, ejecutando solo la primera: {toolName}",
+ "sectionNoPrefix": "Sección {title} sin prefijo 'Final Answer:', adoptando salida del LLM como contenido final (llamadas a herramientas: {count})",
+ "sectionMaxIter": "Sección {title} alcanzó iteraciones máximas, forzando generación",
+ "sectionForceFailed": "Sección {title}: LLM de finalización forzada devolvió None, usando mensaje de error por defecto",
+ "sectionGenFailedContent": "(Esta sección falló al generar: el LLM devolvió una respuesta vacía, por favor reintentá más tarde)",
+ "outlineSavedToFile": "Esquema guardado en archivo: {reportId}/outline.json",
+ "sectionSaved": "Sección guardada: {reportId}/section_{sectionNum}.md",
+ "reportGenDone": "Generación de informe completa: {reportId}",
+ "reportGenFailed": "Generación de informe falló: {error}",
+ "agentChat": "Chat de Report Agent: {message}...",
+ "fetchReportFailed": "Error al obtener contenido del informe: {error}",
+ "outlineSaved": "Esquema guardado: {reportId}",
+ "sectionFileSaved": "Sección guardada: {reportId}/{fileSuffix}",
+ "fullReportAssembled": "Informe completo ensamblado: {reportId}",
+ "reportSaved": "Informe guardado: {reportId}",
+ "reportFolderDeleted": "Carpeta de informe eliminada: {reportId}",
+ "redirectToQuickSearch": "search_graph redirigido a quick_search",
+ "redirectToInsightForge": "get_simulation_context redirigido a insight_forge"
+ },
+ "console": {
+ "zepToolsInitialized": "ZepToolsService inicializado",
+ "zepRetryAttempt": "Zep {operation} intento {attempt} falló: {error}, reintentando en {delay}s...",
+ "zepAllRetriesFailed": "Zep {operation} falló después de {retries} intentos: {error}",
+ "graphSearch": "Búsqueda en grafo: graph_id={graphId}, query={query}...",
+ "graphSearchOp": "Búsqueda en grafo (grafo={graphId})",
+ "searchComplete": "Búsqueda completa: se encontraron {count} hechos relevantes",
+ "zepSearchApiFallback": "API de búsqueda de Zep falló, retrocediendo a búsqueda local: {error}",
+ "usingLocalSearch": "Usando búsqueda local: query={query}...",
+ "localSearchComplete": "Búsqueda local completa: se encontraron {count} hechos relevantes",
+ "localSearchFailed": "Búsqueda local falló: {error}",
+ "fetchingAllNodes": "Obteniendo todos los nodos del grafo {graphId}...",
+ "fetchedNodes": "Se obtuvieron {count} nodos",
+ "fetchingAllEdges": "Obteniendo todas las aristas del grafo {graphId}...",
+ "fetchedEdges": "Se obtuvieron {count} aristas",
+ "fetchingNodeDetail": "Obteniendo detalle del nodo: {uuid}...",
+ "fetchNodeDetailOp": "Obtener detalle del nodo (uuid={uuid}...)",
+ "fetchNodeDetailFailed": "Error al obtener detalle del nodo: {error}",
+ "fetchingNodeEdges": "Obteniendo aristas del nodo {uuid}...",
+ "foundNodeEdges": "Se encontraron {count} aristas relacionadas al nodo",
+ "fetchNodeEdgesFailed": "Error al obtener aristas del nodo: {error}",
+ "fetchingEntitiesByType": "Obteniendo entidades de tipo {type}...",
+ "foundEntitiesByType": "Se encontraron {count} entidades de tipo {type}",
+ "fetchingEntitySummary": "Obteniendo resumen de relaciones para entidad {name}...",
+ "fetchingGraphStats": "Obteniendo estadísticas del grafo {graphId}...",
+ "fetchingSimContext": "Obteniendo contexto de simulación: {requirement}...",
+ "insightForgeStart": "InsightForge recuperación de insights profundos: {query}...",
+ "generatedSubQueries": "Se generaron {count} subconsultas",
+ "insightForgeComplete": "InsightForge completo: {facts} hechos, {entities} entidades, {relationships} relaciones",
+ "generateSubQueriesFailed": "Error al generar subconsultas: {error}, usando valores por defecto",
+ "panoramaSearchStart": "PanoramaSearch búsqueda amplia: {query}...",
+ "panoramaSearchComplete": "PanoramaSearch completo: {active} activos, {historical} históricos",
+ "quickSearchStart": "QuickSearch búsqueda simple: {query}...",
+ "quickSearchComplete": "QuickSearch completo: {count} resultados",
+ "interviewAgentsStart": "InterviewAgents entrevista profunda (API real): {requirement}...",
+ "profilesNotFound": "Perfiles no encontrados para simulación {simId}",
+ "loadedProfiles": "Se cargaron {count} perfiles de agentes",
+ "selectedAgentsForInterview": "Se seleccionaron {count} agentes para entrevista: {indices}",
+ "generatedInterviewQuestions": "Se generaron {count} preguntas de entrevista",
+ "callingBatchInterviewApi": "Llamando API de entrevista por lote (doble plataforma): {count} agentes",
+ "interviewApiReturned": "API de entrevista devolvió: {count} resultados, éxito={success}",
+ "interviewApiReturnedFailure": "API de entrevista devolvió fallo: {error}",
+ "interviewApiCallFailed": "Llamada a API de entrevista falló (¿entorno no ejecutándose?): {error}",
+ "interviewApiCallException": "Excepción en llamada a API de entrevista: {error}",
+ "interviewAgentsComplete": "InterviewAgents completo: se entrevistaron {count} agentes (doble plataforma)",
+ "loadedRedditProfiles": "Se cargaron {count} perfiles de reddit_profiles.json",
+ "readRedditProfilesFailed": "Error al leer reddit_profiles.json: {error}",
+ "loadedTwitterProfiles": "Se cargaron {count} perfiles de twitter_profiles.csv",
+ "readTwitterProfilesFailed": "Error al leer twitter_profiles.csv: {error}",
+ "llmSelectAgentFailed": "Selección de agente por LLM falló, usando selección por defecto: {error}",
+ "generateInterviewQuestionsFailed": "Error al generar preguntas de entrevista: {error}",
+ "generateInterviewSummaryFailed": "Error al generar resumen de entrevista: {error}"
+ }
+}
\ No newline at end of file