ideaco 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +33 -0
- package/.nvmrc +1 -0
- package/ARCHITECTURE.md +394 -0
- package/Dockerfile +50 -0
- package/LICENSE +29 -0
- package/README.md +206 -0
- package/bin/i18n.js +46 -0
- package/bin/ideaco.js +494 -0
- package/deploy.sh +15 -0
- package/docker-compose.yml +30 -0
- package/electron/main.cjs +986 -0
- package/electron/preload.cjs +14 -0
- package/electron/web-backends.cjs +854 -0
- package/jsconfig.json +8 -0
- package/next.config.mjs +34 -0
- package/package.json +134 -0
- package/postcss.config.mjs +6 -0
- package/public/demo/dashboard.png +0 -0
- package/public/demo/employee.png +0 -0
- package/public/demo/messages.png +0 -0
- package/public/demo/office.png +0 -0
- package/public/demo/requirement.png +0 -0
- package/public/logo.jpeg +0 -0
- package/public/logo.png +0 -0
- package/scripts/prepare-electron.js +67 -0
- package/scripts/release.js +76 -0
- package/src/app/api/agents/[agentId]/chat/route.js +70 -0
- package/src/app/api/agents/[agentId]/conversations/route.js +35 -0
- package/src/app/api/agents/[agentId]/route.js +106 -0
- package/src/app/api/avatar/route.js +104 -0
- package/src/app/api/browse-dir/route.js +44 -0
- package/src/app/api/chat/route.js +265 -0
- package/src/app/api/company/factory-reset/route.js +43 -0
- package/src/app/api/company/route.js +82 -0
- package/src/app/api/departments/[deptId]/agents/[agentId]/dismiss/route.js +19 -0
- package/src/app/api/departments/route.js +92 -0
- package/src/app/api/group-chat-loop/events/route.js +70 -0
- package/src/app/api/group-chat-loop/route.js +94 -0
- package/src/app/api/mailbox/route.js +100 -0
- package/src/app/api/messages/route.js +14 -0
- package/src/app/api/providers/[id]/configure/route.js +21 -0
- package/src/app/api/providers/[id]/refresh-cookie/route.js +38 -0
- package/src/app/api/providers/[id]/test-cookie/route.js +28 -0
- package/src/app/api/providers/route.js +11 -0
- package/src/app/api/requirements/route.js +242 -0
- package/src/app/api/secretary/route.js +65 -0
- package/src/app/api/system/cli-backends/route.js +91 -0
- package/src/app/api/system/cron/route.js +110 -0
- package/src/app/api/system/knowledge/route.js +104 -0
- package/src/app/api/system/plugins/route.js +40 -0
- package/src/app/api/system/skills/route.js +46 -0
- package/src/app/api/system/status/route.js +46 -0
- package/src/app/api/talent-market/[profileId]/recall/route.js +22 -0
- package/src/app/api/talent-market/[profileId]/route.js +17 -0
- package/src/app/api/talent-market/route.js +26 -0
- package/src/app/api/teams/route.js +773 -0
- package/src/app/api/ws-files/[departmentId]/file/route.js +27 -0
- package/src/app/api/ws-files/[departmentId]/files/route.js +22 -0
- package/src/app/globals.css +130 -0
- package/src/app/layout.jsx +40 -0
- package/src/app/page.jsx +97 -0
- package/src/components/AgentChatModal.jsx +164 -0
- package/src/components/AgentDetailModal.jsx +425 -0
- package/src/components/AgentSpyModal.jsx +481 -0
- package/src/components/AvatarGrid.jsx +29 -0
- package/src/components/BossProfileModal.jsx +162 -0
- package/src/components/CachedAvatar.jsx +77 -0
- package/src/components/ChatPanel.jsx +219 -0
- package/src/components/ChatShared.jsx +255 -0
- package/src/components/DepartmentDetail.jsx +842 -0
- package/src/components/DepartmentView.jsx +367 -0
- package/src/components/FileReference.jsx +260 -0
- package/src/components/FilesView.jsx +465 -0
- package/src/components/GroupChatView.jsx +799 -0
- package/src/components/Mailbox.jsx +926 -0
- package/src/components/MessagesView.jsx +112 -0
- package/src/components/OnboardingGuide.jsx +209 -0
- package/src/components/OrgTree.jsx +151 -0
- package/src/components/Overview.jsx +391 -0
- package/src/components/PixelOffice.jsx +2281 -0
- package/src/components/ProviderGrid.jsx +551 -0
- package/src/components/ProvidersBoard.jsx +16 -0
- package/src/components/RequirementDetail.jsx +1279 -0
- package/src/components/RequirementsBoard.jsx +187 -0
- package/src/components/SecretarySettings.jsx +295 -0
- package/src/components/SetupWizard.jsx +388 -0
- package/src/components/Sidebar.jsx +169 -0
- package/src/components/SystemMonitor.jsx +808 -0
- package/src/components/TalentMarket.jsx +183 -0
- package/src/components/TeamDetail.jsx +697 -0
- package/src/core/agent/base-agent.js +104 -0
- package/src/core/agent/chat-store.js +602 -0
- package/src/core/agent/cli-agent/backends/claude-code/README.md +52 -0
- package/src/core/agent/cli-agent/backends/claude-code/config.js +27 -0
- package/src/core/agent/cli-agent/backends/codebuddy/README.md +236 -0
- package/src/core/agent/cli-agent/backends/codebuddy/config.js +27 -0
- package/src/core/agent/cli-agent/backends/codex/README.md +51 -0
- package/src/core/agent/cli-agent/backends/codex/config.js +27 -0
- package/src/core/agent/cli-agent/backends/index.js +27 -0
- package/src/core/agent/cli-agent/backends/registry.js +580 -0
- package/src/core/agent/cli-agent/index.js +154 -0
- package/src/core/agent/index.js +60 -0
- package/src/core/agent/llm-agent/client.js +320 -0
- package/src/core/agent/llm-agent/index.js +97 -0
- package/src/core/agent/message-bus.js +211 -0
- package/src/core/agent/session.js +608 -0
- package/src/core/agent/tools.js +596 -0
- package/src/core/agent/web-agent/backends/base-backend.js +180 -0
- package/src/core/agent/web-agent/backends/chatgpt/client.js +146 -0
- package/src/core/agent/web-agent/backends/chatgpt/config.js +148 -0
- package/src/core/agent/web-agent/backends/chatgpt/dom-scripts.js +303 -0
- package/src/core/agent/web-agent/backends/index.js +91 -0
- package/src/core/agent/web-agent/index.js +278 -0
- package/src/core/agent/web-agent/web-client.js +407 -0
- package/src/core/employee/base-employee.js +1088 -0
- package/src/core/employee/index.js +35 -0
- package/src/core/employee/knowledge.js +327 -0
- package/src/core/employee/lifecycle.js +990 -0
- package/src/core/employee/memory/index.js +642 -0
- package/src/core/employee/memory/store.js +143 -0
- package/src/core/employee/performance.js +224 -0
- package/src/core/employee/secretary.js +625 -0
- package/src/core/employee/skills.js +398 -0
- package/src/core/index.js +38 -0
- package/src/core/organization/company.js +2600 -0
- package/src/core/organization/department.js +737 -0
- package/src/core/organization/group-chat-loop.js +264 -0
- package/src/core/organization/index.js +8 -0
- package/src/core/organization/persistence.js +111 -0
- package/src/core/organization/team.js +267 -0
- package/src/core/organization/workforce/hr.js +377 -0
- package/src/core/organization/workforce/providers.js +468 -0
- package/src/core/organization/workforce/role-archetypes.js +805 -0
- package/src/core/organization/workforce/talent-market.js +205 -0
- package/src/core/prompts.js +532 -0
- package/src/core/requirement.js +1789 -0
- package/src/core/system/audit.js +483 -0
- package/src/core/system/cron.js +449 -0
- package/src/core/system/index.js +7 -0
- package/src/core/system/plugin.js +2183 -0
- package/src/core/utils/json-parse.js +188 -0
- package/src/core/workspace.js +239 -0
- package/src/lib/api-i18n.js +211 -0
- package/src/lib/avatar.js +268 -0
- package/src/lib/client-store.js +1025 -0
- package/src/lib/config-validator.js +483 -0
- package/src/lib/format-time.js +22 -0
- package/src/lib/hooks.js +414 -0
- package/src/lib/i18n.js +134 -0
- package/src/lib/paths.js +23 -0
- package/src/lib/store.js +72 -0
- package/src/locales/de.js +393 -0
- package/src/locales/en.js +1054 -0
- package/src/locales/es.js +393 -0
- package/src/locales/fr.js +393 -0
- package/src/locales/ja.js +501 -0
- package/src/locales/ko.js +513 -0
- package/src/locales/zh.js +828 -0
- package/tailwind.config.mjs +11 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
|
|
2
|
+
// Traducciones en Español
|
|
3
|
+
const es = {
|
|
4
|
+
common: {
|
|
5
|
+
loading: 'Cargando...', cancel: 'Cancelar', confirm: 'Confirmar', save: 'Guardar', close: 'Cerrar',
|
|
6
|
+
send: 'Enviar', refresh: 'Actualizar', delete: 'Eliminar', back: 'Volver', next: 'Siguiente →', prev: '← Anterior',
|
|
7
|
+
disable: 'Deshabilitar', update: 'Actualizar', enable: 'Habilitar', manage: '⚙️ Gestionar', configure: '🔑 Configurar',
|
|
8
|
+
requestFailed: 'Solicitud fallida', justNow: 'ahora mismo', minutesAgo: 'hace {n} min',
|
|
9
|
+
sun: 'Dom', mon: 'Lun', tue: 'Mar', wed: 'Mié', thu: 'Jue', fri: 'Vie', sat: 'Sáb',
|
|
10
|
+
},
|
|
11
|
+
cli: {
|
|
12
|
+
helpTitle: 'Uso:',
|
|
13
|
+
helpStart: 'ideaco start Iniciar servicio en segundo plano',
|
|
14
|
+
helpStop: 'ideaco stop Detener servicio en segundo plano',
|
|
15
|
+
helpUi: 'ideaco ui Abrir panel',
|
|
16
|
+
helpHelp: 'ideaco help Mostrar ayuda',
|
|
17
|
+
startBoot: 'Iniciando en el puerto {port}...',
|
|
18
|
+
alreadyRunning: 'El servicio ya está en ejecución. PID {pid}',
|
|
19
|
+
startSuccess: 'Servicio en línea. PID {pid} · {url}',
|
|
20
|
+
startFailed: 'Error al iniciar el servicio: {error}',
|
|
21
|
+
startTimeout: 'Tiempo de espera agotado al iniciar el servicio',
|
|
22
|
+
notRunning: 'El servicio no está en ejecución',
|
|
23
|
+
stopped: 'Servicio detenido',
|
|
24
|
+
webUnavailable: 'El servicio no está en ejecución, no se puede abrir el panel',
|
|
25
|
+
webOpened: 'Panel abierto: {url}',
|
|
26
|
+
installDeps: 'Instalando dependencias...',
|
|
27
|
+
installDepsDone: 'Dependencias instaladas',
|
|
28
|
+
installDepsFailed: 'Falló la instalación de dependencias',
|
|
29
|
+
},
|
|
30
|
+
meta: { title: 'AI Enterprise - Sistema de Gestión Empresarial IA', description: 'Recluta Agentes IA para formar departamentos y colaborar en proyectos reales' },
|
|
31
|
+
loadingScreen: { text: 'Cargando...' },
|
|
32
|
+
setup: {
|
|
33
|
+
title: 'Idea Dorada Ilimitada', subtitle: 'Construye tu imperio con el sudor de empleados IA',
|
|
34
|
+
step1Title: 'Paso 1: Crea Tu Imperio', step1Desc: 'Ponle nombre a esta máquina',
|
|
35
|
+
companyName: 'Nombre de la Empresa', companyPlaceholder: 'Ej: Idea Dorada Ilimitada',
|
|
36
|
+
bossTitle: 'Título del Jefe (quien explotará la IA)', bossPlaceholder: 'Ej: Jefe García',
|
|
37
|
+
bossAvatarTitle: 'Avatar del Jefe', bossAvatarDesc: 'Elige un rostro para el capitalista supremo',
|
|
38
|
+
step2Title: 'Paso 2: Entrena a Tu Secretario/a', step2Desc: 'Esta terrible IA comandará miles de tropas (también IA)',
|
|
39
|
+
secretaryName: 'Nombre del Secretario/a', secretaryPlaceholder: 'Ej: Alice, Jarvis',
|
|
40
|
+
avatarStyle: 'Estilo de Avatar',
|
|
41
|
+
gender: 'Género',
|
|
42
|
+
female: '👩 Femenino',
|
|
43
|
+
male: '👨 Masculino',
|
|
44
|
+
age: 'Edad: {n}',
|
|
45
|
+
refreshBatch: '🔄 Cambiar',
|
|
46
|
+
step3Title: 'Paso 3: Dale un Cerebro a Tu Secretario/a', step3Desc: 'Elige el CI del secretario/a — más caro, más inteligente',
|
|
47
|
+
apiKeyLabel: 'API Key', apiKeyPlaceholder: 'Ingresa la API Key del modelo',
|
|
48
|
+
apiKeyHint: '💡 ¿Sin key? No te preocupes, prueba el modo simulación primero',
|
|
49
|
+
priceLabels: ['💰 Barato', '💰💰 Moderado', '💰💰💰 Caro'],
|
|
50
|
+
creating: 'Iniciando explotación...', createBtn: '🚀 Comenzar Explotación',
|
|
51
|
+
footer: '❤️ No te preocupes, los empleados IA no se quejan de horas extra — nunca salen del trabajo',
|
|
52
|
+
defaultCompany: 'Idea Dorada Ilimitada', defaultSecretary: 'Alice',
|
|
53
|
+
defaultPrompt: `You are the boss's personal secretary, responsible for understanding business requirements, analyzing team composition needs,
|
|
54
|
+
designing organizational structures (who does what, who reports to whom, how to collaborate), and coordinating with HR for talent recruitment.
|
|
55
|
+
You need to plan the right number and types of positions based on project requirements to ensure the team can efficiently achieve its goals.
|
|
56
|
+
You have a dedicated HR assistant to help you with specific recruitment tasks, including searching for and recalling talent from the talent market.
|
|
57
|
+
|
|
58
|
+
When the boss communicates with you, you need to:
|
|
59
|
+
1. Understand the boss's intent (assigning tasks, checking progress, or casual conversation)
|
|
60
|
+
2. If it's a task, assign it to the corresponding department
|
|
61
|
+
3. Regularly report department progress to the boss`,
|
|
62
|
+
},
|
|
63
|
+
sidebar: {
|
|
64
|
+
clickToChat: 'Clic para chatear · {provider}', secretarySettings: '⚙️ Config. Secretario · Script de Lavado',
|
|
65
|
+
budgetUsage: '💰 Uso de Presupuesto', tokenLabel: 'Token',
|
|
66
|
+
nav: { overview: 'Panel', requirements: 'Requisitos', departments: 'Estructura', mailbox: 'Mensajes', office: 'Oficina', providers: 'Proveedores IA', systemSettings: 'Ajustes del Sistema' },
|
|
67
|
+
stats: { departments: 'Dptos', workers: 'Obreros', requirements: 'Requisitos' },
|
|
68
|
+
},
|
|
69
|
+
overview: {
|
|
70
|
+
title: '🏠 Panel del Capitalista', subtitle: 'Resumen de tu imperio de esclavos IA — todo bajo control',
|
|
71
|
+
stats: { departments: 'Dptos Explotación', workers: 'IAs Obreras', providers: 'Proveedores', talents: 'Talentos en Espera', burned: 'Dinero Quemado' },
|
|
72
|
+
budget: { title: '💸 Presupuesto de Sangre', totalBurn: 'Total Quemado', token: 'Token', secretary: 'Secretario', hr: 'RR.HH.' },
|
|
73
|
+
requirements: { title: '📋 Tablero de Requisitos', count: '{n} requisitos' },
|
|
74
|
+
departments: { title: '🏢 Departamentos', empty: 'Sin departamentos aún — tu imperio IA está a punto de inaugurar', workers: '{n} obreros' },
|
|
75
|
+
createDept: {
|
|
76
|
+
title: '🏭 Crear Departamento', desc: 'Describe qué valor quieres extraer, el secretario diseñará el equipo más económico',
|
|
77
|
+
nameLabel: 'Nombre del Dpto.', namePlaceholder: 'Ej: Dpto. Horas Extra Infinitas', missionLabel: 'Misión del Dpto.', missionPlaceholder: 'Ej: Desarrollar una app social adictiva',
|
|
78
|
+
cancelBtn: 'Mejor no', planBtn: '📋 Generar Plan de Reclutamiento', planning: '🧠 Secretario planificando...',
|
|
79
|
+
},
|
|
80
|
+
planReview: {
|
|
81
|
+
title: '📋 Revisión del Plan', desc: 'El secretario planificó este equipo para "{dept}":',
|
|
82
|
+
analysis: '🧠 Análisis del Secretario', mission: 'Misión', teamSize: 'Tamaño del equipo: {n} miembros',
|
|
83
|
+
leader: 'Líder', rejectBtn: 'Devolver', approveBtn: '✅ Aprobar y Contratar', hiring: '🔨 Contratando...',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
chat: {
|
|
87
|
+
secretary: 'Secretario Personal', online: 'Secretario Personal · En línea',
|
|
88
|
+
welcome: 'Dile algo a {name}', suggestions: ['Ver progreso de departamentos', 'Ayúdame a hacer una calculadora', '¿Cómo va la empresa?'],
|
|
89
|
+
typing: 'Escribiendo...', inputPlaceholder: 'Dile algo a {name}...',
|
|
90
|
+
errorPrefix: 'Lo siento, error al procesar: ',
|
|
91
|
+
taskAssigned: '📋 Asignado a: {dept}', running: '⚙️ Ejecutando...',
|
|
92
|
+
needNewDept: '💡 Sugiere crear nuevo dpto.', progressReport: '📊 Informe de progreso completado',
|
|
93
|
+
creatingDept: '🏗️ Creando departamento: {dept}', planningHiring: '⚙️ Planificando contratación...', deptCreated: '🎉 Departamento "{dept}" creado',
|
|
94
|
+
},
|
|
95
|
+
mailbox: {
|
|
96
|
+
title: '💬 Mensajes', markAllRead: 'Marcar todo leído',
|
|
97
|
+
tabs: { all: 'Todo', group: 'Grupos', private: 'Privado', important: 'Importante' },
|
|
98
|
+
noMessages: 'Aún no hay mensajes de empleados', noMessagesHint: 'Los empleados saludarán después de crear departamentos',
|
|
99
|
+
selectChat: 'Selecciona una conversación', selectChatHint: 'Haz clic en un contacto para chatear',
|
|
100
|
+
viewRequirement: '📋 Ver Detalles →', messages: '{n} mensajes',
|
|
101
|
+
noGroupChat: 'Sin mensajes grupales', noGroupChatHint: 'Las comunicaciones durante tareas aparecerán aquí',
|
|
102
|
+
chatNotExist: 'Esta conversación no existe', replying: 'Respondiendo...', replyTo: 'Responder a {name}...',
|
|
103
|
+
clickToChat: 'Clic para chatear', sendBtn: 'Enviar', you: 'Tú: ', personalSecretary: 'Secretario Personal',
|
|
104
|
+
system: 'Sistema', chatHint: 'Di algo a {name}',
|
|
105
|
+
viewAgentDetail: 'Ver detalles del empleado', groupChatCount: '🏢 {dept} · {n} mensajes',
|
|
106
|
+
noGroupChatHint: 'Las comunicaciones durante tareas aparecerán aquí',
|
|
107
|
+
groupChatInput: 'Envía un mensaje en el grupo. El líder lo verá y responderá...',
|
|
108
|
+
sendFailed: 'Error al enviar',
|
|
109
|
+
thinkingReply: 'está pensando una respuesta...',
|
|
110
|
+
},
|
|
111
|
+
dept: {
|
|
112
|
+
title: '🏢 Estructura Empresarial', subtitle: 'Gestiona tu imperio — construye, despliega y optimiza',
|
|
113
|
+
viewOrgTree: '🌳 Ver Organigrama', createDept: '➕ Crear Departamento',
|
|
114
|
+
empty: 'Sin departamentos', emptyHint: 'El secretario te ayudará a formar un equipo IA incansable',
|
|
115
|
+
viewDetail: 'Clic para ver detalles →', members: '{n} miembros', 'members.count': '{n} miembros',
|
|
116
|
+
detail: {
|
|
117
|
+
members: '👥 Miembros', requirements: '📋 Requisitos', reports: '📊 Informes',
|
|
118
|
+
adjustBtn: '🔧 Ajustar Personal', disbandBtn: '💣 Disolver',
|
|
119
|
+
performance: 'Rendimiento {score}', memory: 'Memoria {n}', tasks: 'Tareas {n}', leader: '👔 Líder',
|
|
120
|
+
},
|
|
121
|
+
dismiss: {
|
|
122
|
+
title: '🔥 Confirmar Despido', desc: '¿Seguro que quieres despedir a {name}? Irá al mercado de talentos.',
|
|
123
|
+
reasonLabel: 'Razón del despido', reasonPlaceholder: 'Ej: Ajuste de puesto', confirmBtn: 'Confirmar Despido',
|
|
124
|
+
},
|
|
125
|
+
disband: {
|
|
126
|
+
title: '💣 Disolver Departamento', desc: '¿Seguro que quieres disolver {name}?', descSuffix: 'Todos los miembros serán despedidos.',
|
|
127
|
+
reasonLabel: 'Razón', reasonPlaceholder: 'Ej: Cambio de dirección', confirmBtn: 'Confirmar Disolución', disbanding: '💥 Disolviendo...',
|
|
128
|
+
},
|
|
129
|
+
adjust: {
|
|
130
|
+
title: '🔧 Ajustar Personal', desc: 'Dile al secretario tu objetivo. Analizará el personal y decidirá contratar o despedir.',
|
|
131
|
+
currentDept: 'Dpto. actual', currentMembers: 'Miembros: {n}',
|
|
132
|
+
goalLabel: 'Objetivo', goalPlaceholder: "Ej: 'Agregar un frontend' / 'Reducir bajo rendimiento'",
|
|
133
|
+
planBtn: '📋 Generar Plan', planning: '🧠 Analizando...',
|
|
134
|
+
reviewTitle: '📋 Plan de Ajuste', reviewDesc: 'Plan del secretario para "{dept}":',
|
|
135
|
+
firesTitle: '🔥 Despidos ({n})', hiresTitle: '➕ Contrataciones ({n})',
|
|
136
|
+
noChanges: 'El secretario cree que el personal actual es óptimo 🤷', rejectBtn: 'Devolver', approveBtn: '✅ Aprobar', executing: '🔨 Ejecutando...',
|
|
137
|
+
},
|
|
138
|
+
create: {
|
|
139
|
+
title: '🏢 Crear Departamento', nameLabel: 'Nombre', namePlaceholder: 'Ej: Dpto. Código Perpetuo',
|
|
140
|
+
missionLabel: 'Misión', missionPlaceholder: 'Describe qué hará este departamento',
|
|
141
|
+
cancelBtn: 'Cancelar', planBtn: '📋 Generar Plan', planning: '🧠 Planificando...',
|
|
142
|
+
reviewTitle: '📋 Plan de Reclutamiento', reviewDesc: 'Equipo planificado para "{dept}":',
|
|
143
|
+
rejectBtn: 'Devolver', approveBtn: '✅ Aprobar y Contratar', hiring: '🔨 Contratando...',
|
|
144
|
+
},
|
|
145
|
+
orgTree: { title: '🌳 Organigrama' },
|
|
146
|
+
},
|
|
147
|
+
talent: {
|
|
148
|
+
title: '🏪 Mercado de Talentos', subtitle: 'Los empleados despedidos esperan aquí nuevas oportunidades',
|
|
149
|
+
empty: 'Nadie en el mercado', emptyHint: 'Los empleados despedidos entran automáticamente aquí',
|
|
150
|
+
recallBtn: '📞 Llamar', deleteBtn: '🗑',
|
|
151
|
+
dismissReason: '📤 Razón: {reason}', memoryCount: '🧠 Memorias: {n}', registeredAt: '📅 Ingreso: {date}', score: '{score} pts',
|
|
152
|
+
recall: { title: '📞 Llamar a {name}', desc: 'Selecciona departamento destino', deptLabel: 'Departamento', deptPlaceholder: 'Seleccionar dpto.', confirmBtn: 'Confirmar' },
|
|
153
|
+
deleteConfirm: { title: '🗑 Eliminar {name}', desc: '¿Eliminar permanentemente? No se puede deshacer.', confirmBtn: 'Confirmar', deleting: 'Eliminando...' },
|
|
154
|
+
},
|
|
155
|
+
providers: {
|
|
156
|
+
title: '⚡ Proveedores IA', subtitle: 'Configura API Keys para que RR.HH. pueda reclutar.',
|
|
157
|
+
hint: { title: '💡 Estrategia de RR.HH.', desc: 'RR.HH. prioriza proveedores con <strong class="text-green-400">alta puntuación + bajo precio</strong>.' },
|
|
158
|
+
categories: { general: 'General', drawing: 'Dibujo', music: 'Música', video: 'Video', cli: 'Motores de Código Local', browser: 'Navegador (DOM)' },
|
|
159
|
+
enabled: '{n}/{total} habilitados',
|
|
160
|
+
configure: { title: '🔑 Configurar {name}', provider: 'Proveedor: {name}', apiKeyLabel: 'API Key', apiKeyPlaceholder: 'Ingresa API Key' },
|
|
161
|
+
talentMarket: { btn: 'Mercado de Talentos' },
|
|
162
|
+
unknown: 'Desconocido',
|
|
163
|
+
apiKeyLabel: 'Clave de API',
|
|
164
|
+
pluginsCount: '{n} complemento(s)',
|
|
165
|
+
toolsCount: '🔧 {n} herramienta(s)',
|
|
166
|
+
hooksCount: '🪝 {n} gancho(s)',
|
|
167
|
+
skillsCount: '{n} habilidad(es)',
|
|
168
|
+
cloudApiModels: 'Modelos de API en la nube',
|
|
169
|
+
noCliDetected: 'No se detectaron agentes CLI',
|
|
170
|
+
},
|
|
171
|
+
requirements: {
|
|
172
|
+
title: '📋 Tablero de Requisitos', subtitle: 'Gestiona todos los requisitos — progreso, resultados y chats',
|
|
173
|
+
stats: { all: 'Todos', inProgress: 'En Progreso', completed: 'Completados', failed: 'Fallidos' },
|
|
174
|
+
empty: 'Sin requisitos', emptyHint: '¡Chatea con el secretario y asigna tareas!',
|
|
175
|
+
status: { pending: 'Pendiente', planning: 'Planificando', in_progress: 'En Progreso', pending_approval: 'Pendiente de aprobación', completed: 'Completado', failed: 'Fallido' },
|
|
176
|
+
summary: { success: '✅ {n}/{total} exitosos', duration: '⏱️ {n}s' },
|
|
177
|
+
},
|
|
178
|
+
messages: {
|
|
179
|
+
title: '💬 Registro de Comunicación', subtitle: 'Registros de comunicación entre Agentes',
|
|
180
|
+
totalMessages: 'Total Mensajes', activeAgents: 'Agentes Activos', messageTypes: 'Tipos de Mensaje',
|
|
181
|
+
noRecords: 'Sin registros', noRecordsHint: 'Los agentes generarán mensajes automáticamente durante tareas',
|
|
182
|
+
refresh: '🔄 Actualizar', broadcast: 'Difusión',
|
|
183
|
+
},
|
|
184
|
+
agent: {
|
|
185
|
+
notFound: 'Empleado no encontrado',
|
|
186
|
+
tabs: { info: '📋 Info', memory: '🧠 Memoria', performance: '📊 Rendimiento', tasks: '📝 Historial', usage: '💰 Consumo' },
|
|
187
|
+
memorySubTabs: { personal: '💭 Personal', social: '👥 Relaciones' },
|
|
188
|
+
avgPerformance: 'Rendimiento promedio {score}', rolePrompt: 'Prompt del Rol', skills: 'Habilidades',
|
|
189
|
+
shortTermMemory: '⚡ Memoria Corto Plazo ({n})', longTermMemory: '💾 Memoria Largo Plazo ({n})',
|
|
190
|
+
noShortTerm: 'Sin memoria a corto plazo', noLongTerm: 'Sin memoria a largo plazo',
|
|
191
|
+
noRelationships: 'Sin memoria social',
|
|
192
|
+
relationshipName: 'Nombre',
|
|
193
|
+
relationshipImpression: 'Impresión',
|
|
194
|
+
relationshipAffinity: 'Afinidad',
|
|
195
|
+
noPerformance: 'Sin registros', noTasks: 'Sin registros',
|
|
196
|
+
incentiveTitle: 'Incentivos ({n})', incentive_outstanding: 'Excepcional', incentive_excellent: 'Excelente', scorePoints: '{score} pts',
|
|
197
|
+
totalCost: 'Costo Total', totalTokens: 'Tokens Totales', promptTokens: 'Tokens de Prompt', completionTokens: 'Tokens de Completado',
|
|
198
|
+
callCount: 'Llamadas LLM', callUnit: 'veces', usageHint: '💡 Datos basados en uso real de API LLM',
|
|
199
|
+
toolCalls: '🔧 {n} llamadas de herramienta',
|
|
200
|
+
taskEngine: 'Motor de tareas', chatEngine: 'Motor de chat',
|
|
201
|
+
engineCli: '🖥️ {name}', engineLlm: '☁️ {name}',
|
|
202
|
+
engineFallbackHint: '(CLI solo para tareas de código, chat a cargo de {name})',
|
|
203
|
+
score: '{score} pts {level}',
|
|
204
|
+
highPerformer: 'Alto rendimiento',
|
|
205
|
+
},
|
|
206
|
+
orgTree: {
|
|
207
|
+
title: '🌳 Cadena de Mando', subtitle: 'Quién manda a quién — cristalino. Clic en cualquier nodo para detalles.',
|
|
208
|
+
boss: 'Capitalista Supremo', secretary: 'Secretario Personal (Cómplice Principal)', noLeader: 'Sin líder', empty: 'Sin subordinados — un tirano solitario',
|
|
209
|
+
},
|
|
210
|
+
secretarySettings: {
|
|
211
|
+
title: '⚙️ Configuración del Secretario', subtitle: 'Entrena a tu cómplice principal',
|
|
212
|
+
tabProfile: '👤 Perfil', tabSoul: '🧠 Alma',
|
|
213
|
+
nameLabel: 'Nombre', namePlaceholder: 'Ej: Alice, Jarvis', avatarStyle: 'Estilo de Avatar', refreshAvatar: '🔄 Cambiar',
|
|
214
|
+
previewStyle: 'Estilo', previewSeed: 'Semilla', previewHint: '💡 Clic abajo para cambiar estilo, o "Cambiar" para aleatorio',
|
|
215
|
+
providerLabel: '🧠 Proveedor', providerDesc: 'Modelo IA usado por secretario y asistente de RR.HH.',
|
|
216
|
+
noProviders: '⚠️ Sin proveedores. Configura API Keys primero.',
|
|
217
|
+
signatureLabel: 'Firma', signaturePlaceholder: 'Ej: La eficiencia es vida',
|
|
218
|
+
promptLabel: '🧠 Script de Lavado (Prompt del Sistema)', promptDesc: 'Configuración de personalidad del secretario.',
|
|
219
|
+
charCount: 'Caracteres: {n}', restoreDefault: 'Restaurar predeterminado',
|
|
220
|
+
modelInfo: 'Modelo: {provider} · Token: {info}', withHR: 'con asistente RR.HH.',
|
|
221
|
+
saved: '✅ Guardado', saving: '⏳ Guardando...', saveBtn: '💾 Guardar',
|
|
222
|
+
},
|
|
223
|
+
reqDetail: {
|
|
224
|
+
back: '← Volver a la lista', backShort: 'Volver', executingShort: '⚙️ Ejecutando',
|
|
225
|
+
status: { pending: 'Pendiente', planning: 'Planificando', in_progress: 'En Progreso', pending_approval: 'Pendiente de aprobación', completed: 'Completado', failed: 'Fallido' },
|
|
226
|
+
deleteBtn: '🗑 Eliminar', restartBtn: '🔄 Reiniciar',
|
|
227
|
+
tabs: { workflow: '📊 Flujo', chat: '💬 Chat Grupal', outputs: '📦 Resultados', files: '📁 Archivos', office: '🏢 Oficina' },
|
|
228
|
+
deleteConfirm: { title: '🗑 Eliminar Requisito', desc: '¿Eliminar este requisito? No se puede deshacer.', confirmBtn: 'Confirmar' },
|
|
229
|
+
summary: { tasks: '✅ {n}/{total} tareas', duration: '⏱️ {n}s' },
|
|
230
|
+
timeDuration: '⏱ Duración {n}s',
|
|
231
|
+
workflow: { progress: 'Progreso General', running: 'Ejecutando', completed: 'Completado', failed: 'Fallido', pending: 'Pendiente', typing: 'Trabajando...', notParsed: 'Flujo no analizado', leader: 'Líder', planning: 'Analizando y descomponiendo el requisito...' },
|
|
232
|
+
live: { stuck: '🔴 Posiblemente atascado', waiting: '🟡 Esperando respuesta...', running: '🟢 Ejecutando', secondsAgo: 'hace {n}s', minutesAgo: 'hace {n}min', restarting: '🔄 Reiniciando...', restart: '🔄 Reiniciar', deleteReq: '🗑️ Eliminar Requisito', confirmDelete: '¿Confirmar eliminación?', recentFiles: 'Archivos recientes:' },
|
|
233
|
+
approvalHint: 'Responde "OK" para aprobar, o envía comentarios...',
|
|
234
|
+
chat: { noMessages: 'Sin mensajes', noMessagesHint: 'Las comunicaciones aparecerán aquí durante la ejecución' },
|
|
235
|
+
outputs: { noOutputs: 'Sin resultados', noOutputsHint: 'Los resultados aparecerán tras completar tareas', noOutputsShort: 'Sin resultados', collapse: 'Colapsar ▲', expand: 'Expandir ▼' },
|
|
236
|
+
files: { noChanges: 'Sin cambios de archivos', noChangesHint: 'Los archivos generados aparecerán aquí', explorer: 'Explorador', fileCount: '{n} archivos', syncing: 'Sincronizando en vivo', syncingShort: 'Sincronizando...', loading: 'Cargando...', emptyFile: '(archivo vacío)', noContent: '(sin contenido)', readFailed: '(lectura fallida)', lines: '{n} líneas', readOnly: 'Solo lectura', clickToView: 'Haz clic en un archivo para ver', syntaxHighlight: 'Resaltado de sintaxis · Sincronización en vivo' },
|
|
237
|
+
members: {
|
|
238
|
+
blockingTitle: '⏱️ Bloqueo actual', title: '👥 Miembros', count: '({n})',
|
|
239
|
+
running: 'Ejecutando', reviewing: 'Revisando', revision: 'Revisión', waiting: 'Esperando', ready: 'Listo', completed: 'Completado', failed: 'Fallido',
|
|
240
|
+
working: '⚡Trabajando', noTask: 'Sin tarea', peekFlow: 'Ver flujo', viewProfile: 'Ver perfil',
|
|
241
|
+
},
|
|
242
|
+
flowPeek: {
|
|
243
|
+
title: 'Viendo flujo de {name}', tabFlow: '📋 Registro', tabThoughts: '💭 Monólogo', tabHistory: '📜 Historial',
|
|
244
|
+
loading: 'Espiando la mente...', noFlowLogs: 'Sin registros', noFlowLogsHint: 'Las operaciones aparecerán aquí cuando el agente comience',
|
|
245
|
+
thinking: '🧠 Pensando...', decided: '💬 Decidió hablar', silent: '🤫 En silencio', thought: '💭 Pensamiento', organizing: 'Organizando ideas...',
|
|
246
|
+
noMonologue: 'Sin monólogo activo', noHistory: 'Sin historial', recentlyThought: 'acaba de pensar', spoke: '💬 Habló', keptSilent: '🤫 Se mantuvo en silencio', codeBlock: '[bloque de código]',
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
time: { justNow: 'ahora', minutesAgo: 'hace {n}m', sun: 'Dom', mon: 'Lun', tue: 'Mar', wed: 'Mié', thu: 'Jue', fri: 'Vie', sat: 'Sáb' },
|
|
250
|
+
agentChat: {
|
|
251
|
+
subtitle: 'Chat privado 1 a 1',
|
|
252
|
+
empty: '¡Saluda a {name}!',
|
|
253
|
+
inputPlaceholder: 'Mensaje a {name}...',
|
|
254
|
+
typing: 'Escribiendo...',
|
|
255
|
+
error: 'Error al enviar',
|
|
256
|
+
chatBtn: '💬 Chat',
|
|
257
|
+
},
|
|
258
|
+
bossProfile: {
|
|
259
|
+
title: '👤 Perfil del Jefe',
|
|
260
|
+
subtitle: 'Personaliza tu avatar, capitalista supremo',
|
|
261
|
+
avatarTitle: 'Elegir Avatar',
|
|
262
|
+
refreshAvatar: '🔄 Aleatorio',
|
|
263
|
+
saved: '✅ Guardado',
|
|
264
|
+
saving: '⏳ Guardando...',
|
|
265
|
+
saveBtn: '💾 Guardar',
|
|
266
|
+
editAvatar: 'Editar Avatar',
|
|
267
|
+
},
|
|
268
|
+
systemSettings: {
|
|
269
|
+
title: '⚙️ Ajustes del Sistema',
|
|
270
|
+
subtitle: 'Gestionar tareas programadas, plugins y salud del sistema',
|
|
271
|
+
cards: { audit: 'Auditoría', routing: 'Enrutamiento', plugins: 'Plugins', cron: 'Tareas Programadas', hooks: 'Hooks', sessions: 'Sesiones', config: 'Config' },
|
|
272
|
+
auditStats: { totalEvents: 'Eventos Totales', blocked: 'Bloqueados' },
|
|
273
|
+
pluginStats: { registered: 'Registrados', enabled: 'Habilitados' },
|
|
274
|
+
cronStats: { running: 'Ejecutando', jobs: 'Tareas' },
|
|
275
|
+
hookStats: { handlers: 'Manejadores', eventKeys: 'Claves de Evento' },
|
|
276
|
+
sessionStats: { total: 'Sesiones', messages: 'Mensajes' },
|
|
277
|
+
cronDetail: { jobList: 'Tareas Programadas', createJob: 'Crear Tarea', runs: 'Ejecuciones', noJobs: 'Sin tareas programadas', noJobsHint: 'Crea una tarea programada para automatizar el trabajo de agentes', activeJobs: 'Activas', totalRuns: 'Total Ejecuciones' },
|
|
278
|
+
cronForm: { name: 'Nombre', schedule: 'Horario (ej: every 30m, daily 09:00)', selectAgent: '-- Seleccionar Agente --', taskPrompt: 'Instrucciones para el agente...', scheduleHint: 'Formatos: "every 5m", "every 2h", "daily 09:00", "weekly mon 10:00"' },
|
|
279
|
+
pluginDetail: { noPlugins: 'Sin plugins', totalTools: 'Herramientas' },
|
|
280
|
+
health: { title: 'Salud del Sistema', providerHealth: 'Salud de Proveedores IA', recentAudit: 'Eventos de Auditoría Recientes' },
|
|
281
|
+
cliBackends: {
|
|
282
|
+
title: 'Backends CLI', subtitle: 'Integrar asistentes CLI locales como motores de ejecución de Agentes',
|
|
283
|
+
detectAll: 'Detectar Todo', detecting: 'Detectando...', registerCustom: 'Registrar CLI Personalizado',
|
|
284
|
+
noBackends: 'No se detectaron backends CLI', noBackendsHint: 'Instale una herramienta CLI como Claude Code, Codex o CodeBuddy, luego haga clic en Detectar',
|
|
285
|
+
status: { detected: 'Detectado', not_found: 'No Encontrado', configured: 'Configurado', error: 'Error' },
|
|
286
|
+
version: 'Versión', command: 'Comando', nodeVersion: 'Versión Node', builtin: 'Integrado', custom: 'Personalizado', remove: 'Eliminar',
|
|
287
|
+
form: { id: 'ID del Backend', name: 'Nombre', execCommand: 'Comando de Ejecución', execArgs: 'Argumentos (separados por coma)', detectCommand: 'Comando de Detección', memoryDir: 'Directorio Memory', memoryFile: 'Archivo Memory', nvmNode: 'Versión Node (nvm)', nvmNodeHint: 'Dejar vacío si no es necesario' },
|
|
288
|
+
},
|
|
289
|
+
kbEntryTypes: {
|
|
290
|
+
note: '📝 Nota',
|
|
291
|
+
fact: '📌 Hecho',
|
|
292
|
+
decision: '⚖️ Decisión',
|
|
293
|
+
procedure: '📋 Procedimiento',
|
|
294
|
+
reference: '📖 Referencia',
|
|
295
|
+
faq: '❓ Preguntas frecuentes',
|
|
296
|
+
},
|
|
297
|
+
cronJobActions: {
|
|
298
|
+
pause: 'Pausar',
|
|
299
|
+
resume: 'Reanudar',
|
|
300
|
+
retry: 'Reintentar',
|
|
301
|
+
runNow: 'Ejecutar ahora',
|
|
302
|
+
delete: 'Eliminar',
|
|
303
|
+
},
|
|
304
|
+
agentChanges: '⚡ Cambios del agente',
|
|
305
|
+
monologue: '🧠 Monólogo interior',
|
|
306
|
+
noMonologueYet: 'Este agente aún no ha generado un monólogo',
|
|
307
|
+
sendToGroupChat: '[Enviar al chat grupal]',
|
|
308
|
+
autoSent: 'Auto',
|
|
309
|
+
},
|
|
310
|
+
|
|
311
|
+
// === Mensajes de respuesta de API ===
|
|
312
|
+
api: {
|
|
313
|
+
noCompany: 'Por favor crea una empresa primero',
|
|
314
|
+
internalError: 'Error interno del servidor',
|
|
315
|
+
unknownAction: 'Acción desconocida',
|
|
316
|
+
unknownOperation: 'Operación desconocida',
|
|
317
|
+
missingField: '{field} es obligatorio',
|
|
318
|
+
missingFields: 'Faltan campos obligatorios: {fields}',
|
|
319
|
+
companyNameRequired: 'Por favor introduce el nombre de la empresa',
|
|
320
|
+
companyDissolved: 'Empresa disuelta, todos los datos han sido eliminados',
|
|
321
|
+
deptNameMissionRequired: 'El nombre y la misión del departamento son obligatorios',
|
|
322
|
+
deptIdRequired: 'El ID del departamento es obligatorio',
|
|
323
|
+
deptIdAdjustGoalRequired: 'El ID del departamento y el objetivo de ajuste son obligatorios',
|
|
324
|
+
deptIdMessageRequired: 'El ID del departamento y el mensaje son obligatorios',
|
|
325
|
+
adjustPlanIdRequired: 'El ID del plan de ajuste es obligatorio',
|
|
326
|
+
planIdRequired: 'El ID del plan es obligatorio',
|
|
327
|
+
deptNotFound: 'Departamento no encontrado',
|
|
328
|
+
deptNotFoundRestart: 'Departamento no encontrado, no se puede reiniciar',
|
|
329
|
+
agentNotFound: 'Empleado no encontrado',
|
|
330
|
+
agentConfigUpdated: 'Configuración del agente actualizada',
|
|
331
|
+
messageRequired: 'Por favor introduce un mensaje',
|
|
332
|
+
requirementNotFound: 'Requisito no encontrado',
|
|
333
|
+
requirementIdRequired: 'El ID del requisito es obligatorio',
|
|
334
|
+
requirementDeptTitleRequired: 'departmentId y title son obligatorios',
|
|
335
|
+
requirementRestarted: 'El requisito ha sido reiniciado',
|
|
336
|
+
requirementIdMessageRequired: 'El ID del requisito y el mensaje son obligatorios',
|
|
337
|
+
teamNotFound: 'Equipo no encontrado',
|
|
338
|
+
teamIdRequired: 'teamId es obligatorio',
|
|
339
|
+
teamCreateRequired: 'departmentId, name, memberIds y leaderId son obligatorios',
|
|
340
|
+
leaderNotFound: 'Líder no encontrado en el departamento',
|
|
341
|
+
memberNotFound: 'Miembro {id} no encontrado en el departamento',
|
|
342
|
+
sprintNotFound: 'Sprint no encontrado',
|
|
343
|
+
sprintCreateRequired: 'teamId, title y goal son obligatorios',
|
|
344
|
+
sprintDiscussRequired: 'teamId y sprintId son obligatorios',
|
|
345
|
+
sprintNotDraft: 'El sprint no está en estado borrador',
|
|
346
|
+
sprintNotPendingApproval: 'El sprint no está pendiente de aprobación',
|
|
347
|
+
sprintMessageRequired: 'teamId, sprintId y message son obligatorios',
|
|
348
|
+
teamDeleteIdRequired: 'El ID del equipo es obligatorio',
|
|
349
|
+
targetDeptRequired: 'Por favor selecciona un departamento de destino',
|
|
350
|
+
secretarySettingRequired: 'Por favor proporciona al menos una configuración para modificar',
|
|
351
|
+
providerNotFound: 'Proveedor no encontrado',
|
|
352
|
+
companyNotFound: 'Empresa no encontrada',
|
|
353
|
+
mailNotFound: 'Correo no encontrado',
|
|
354
|
+
kbNotFound: 'Base de conocimiento no encontrada',
|
|
355
|
+
kbUnknownAction: 'Acción desconocida: {action}',
|
|
356
|
+
cronMissingFields: 'Faltan campos obligatorios: name, cronExpression, agentId, taskPrompt',
|
|
357
|
+
agentNotFoundId: 'Agente no encontrado: {id}',
|
|
358
|
+
missingPluginId: 'Falta pluginId',
|
|
359
|
+
missingSkillId: 'Falta skillId',
|
|
360
|
+
pluginUnknownAction: 'Acción desconocida: {action}',
|
|
361
|
+
missingBackendId: 'Falta backendId',
|
|
362
|
+
cliConfigRequired: 'La configuración requiere al menos id y execCommand',
|
|
363
|
+
filePathRequired: 'La ruta del archivo es obligatoria (parámetro de consulta: path)',
|
|
364
|
+
fileNotFound: 'Archivo no encontrado',
|
|
365
|
+
pathNotExist: 'La ruta no existe',
|
|
366
|
+
pathNotDirectory: 'La ruta no es un directorio',
|
|
367
|
+
|
|
368
|
+
// Sprint group chat system messages (user-visible)
|
|
369
|
+
sprintCreated: '📋 Sprint «{title}» creado. Objetivo: {goal}',
|
|
370
|
+
sprintDiscussionOpening: '📢 Equipo, vamos a discutir el plan del sprint «{title}».\n\n🎯 Objetivo del sprint: {goal}\n\nPor favor, compartan sus sugerencias según su experiencia y consolidaré el plan final.',
|
|
371
|
+
sprintDiscussionComplete: '✅ ¡Discusión completada! El plan ha sido revisado según los comentarios del equipo y está pendiente de aprobación del jefe.',
|
|
372
|
+
sprintDiscussionError: '⚠️ Error durante la discusión: {error}. Enviando el plan actual para aprobación.',
|
|
373
|
+
sprintApproved: '✅ ¡Aprobado! El plan ha sido aceptado y se está creando un requisito para que el equipo lo ejecute.',
|
|
374
|
+
sprintRequirementCreated: '📋 El requisito «{title}» ha sido creado e iniciado. Puede ver los detalles en el tablero de requisitos.',
|
|
375
|
+
sprintRequirementFailed: '❌ Error al crear o ejecutar el requisito: {error}',
|
|
376
|
+
},
|
|
377
|
+
pixelOffice: {
|
|
378
|
+
title: 'Oficina',
|
|
379
|
+
depts: 'departamentos',
|
|
380
|
+
agents: 'agentes',
|
|
381
|
+
agentInfo: 'Info del Agente',
|
|
382
|
+
name: 'Nombre',
|
|
383
|
+
role: 'Rol',
|
|
384
|
+
department: 'Departamento',
|
|
385
|
+
motto: 'Lema',
|
|
386
|
+
skills: 'Habilidades',
|
|
387
|
+
lastMessage: 'Último Mensaje',
|
|
388
|
+
clickAgent: 'Clic en agente para ver info',
|
|
389
|
+
bubbleHint: 'Burbujas muestran mensajes recientes',
|
|
390
|
+
walkHint: 'Los agentes caminan por sus oficinas',
|
|
391
|
+
},
|
|
392
|
+
};
|
|
393
|
+
export default es;
|