@deinossrl/dgp-agent 1.4.13 → 1.4.15

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.
Files changed (2) hide show
  1. package/index.mjs +97 -95
  2. package/package.json +1 -1
package/index.mjs CHANGED
@@ -202,9 +202,9 @@ async function fetchPlatformConfig() {
202
202
  // Variable para config de la plataforma (se carga async)
203
203
  let platformConfig = null;
204
204
 
205
- // Versión y modo del agente
206
- const AGENT_VERSION = '1.4.13';
207
- let AGENT_MODE = 'status'; // 'status' | 'deploy' | 'ai'
205
+ // Versión del agente
206
+ const AGENT_VERSION = '1.4.15';
207
+ let AGENT_MODE = 'smart'; // Siempre inteligente
208
208
 
209
209
  // Configuración (prioridad: env vars > archivo config > platform config > defaults)
210
210
  const CONFIG = {
@@ -395,6 +395,19 @@ function getRepoContext() {
395
395
  return context;
396
396
  }
397
397
 
398
+ /**
399
+ * Verifica si un mensaje de commit es vago/genérico
400
+ */
401
+ function isVagueCommitMessage(message) {
402
+ const vaguePatterns = [
403
+ /^(cambio|cambios|change|changes|update|updates|fix|fixes|wip|test|testing)s?$/i,
404
+ /^(minor|small|quick|tmp|temp|todo)(\s|$)/i,
405
+ /^\.+$/,
406
+ /^[a-z]{1,5}$/i, // mensajes muy cortos
407
+ ];
408
+ return vaguePatterns.some(p => p.test(message.trim()));
409
+ }
410
+
398
411
  /**
399
412
  * Procesa un comando git con ayuda de IA para entender mejor la intención
400
413
  */
@@ -403,19 +416,30 @@ async function processGitCommandWithAI(command, params) {
403
416
 
404
417
  const context = getRepoContext();
405
418
 
406
- const systemPrompt = `Eres un experto en Git y DevOps. Tu trabajo es analizar comandos git y mejorarlos si es necesario.
419
+ // Solo mejorar si el mensaje es vago
420
+ const originalMessage = params?.message || '';
421
+ const shouldImprove = isVagueCommitMessage(originalMessage);
422
+
423
+ if (!shouldImprove) {
424
+ logAI(`Mensaje del usuario es descriptivo, se usará tal cual`);
425
+ return {
426
+ analysis: 'El mensaje del usuario es descriptivo, se usa sin modificar',
427
+ improved_message: null, // null = no cambiar
428
+ skip: false
429
+ };
430
+ }
431
+
432
+ const systemPrompt = `Eres un experto en Git. Tu trabajo es mejorar mensajes de commit SOLO si son vagos.
407
433
 
408
434
  IMPORTANTE:
409
- - Si el comando es claro, simplemente ejecuta lo solicitado
410
- - Si hay ambigüedad, usa tu inteligencia para resolver
411
- - Genera mensajes de commit descriptivos si el mensaje es vago
435
+ - El usuario escribió: "${originalMessage}" - este mensaje ES VAGO
436
+ - Genera un mensaje descriptivo basado en los archivos modificados
412
437
  - Responde SOLO con JSON válido
413
438
 
414
439
  Formato de respuesta:
415
440
  {
416
- "analysis": "qué vas a hacer y por qué",
417
- "improved_message": "mensaje mejorado (solo para commits)",
418
- "additional_commands": ["comandos adicionales si son necesarios"],
441
+ "analysis": "por qué mejoraste el mensaje",
442
+ "improved_message": "mensaje mejorado basado en los cambios",
419
443
  "skip": false
420
444
  }`;
421
445
 
@@ -1181,40 +1205,45 @@ function printStatus(status) {
1181
1205
  }
1182
1206
 
1183
1207
  /**
1184
- * Loop principal del agente
1208
+ * Loop principal del agente - SIEMPRE inteligente
1185
1209
  */
1186
- async function runAgent(deployMode = false) {
1210
+ async function runAgent() {
1187
1211
  // Matar agente anterior y guardar PID
1188
1212
  killPreviousAgent();
1189
1213
  savePid();
1190
- AGENT_MODE = deployMode ? 'deploy' : 'status';
1214
+ AGENT_MODE = 'smart';
1191
1215
 
1192
1216
  printBanner([
1193
- 'DGP Agent - Despliegue-GPT Local Agent',
1194
- `@deinossrl/dgp-agent v${AGENT_VERSION}`
1195
- ], 'green');
1217
+ 'DGP Agent - Agente Inteligente',
1218
+ `v${AGENT_VERSION} | Web ↔ PC`
1219
+ ], 'cyan');
1196
1220
 
1197
1221
  if (!isGitRepo()) {
1198
1222
  logError('Not a git repository. Run this command from inside a git repo.');
1199
1223
  process.exit(1);
1200
1224
  }
1201
1225
 
1202
- logInfo(`Machine ID: ${CONFIG.machineId}`);
1203
- logInfo(`Mode: ${AGENT_MODE.toUpperCase()}`);
1204
- logInfo(`Report interval: ${CONFIG.interval}s`);
1205
- logInfo(`API URL: ${CONFIG.apiUrl}`);
1226
+ // Cargar config de la plataforma si no hay API key local
1227
+ if (!CONFIG.anthropicApiKey) {
1228
+ logInfo('Buscando configuración en la plataforma...');
1229
+ platformConfig = await fetchPlatformConfig();
1206
1230
 
1207
- if (deployMode) {
1208
- logInfo(`Command poll interval: ${CONFIG.commandPollInterval}s`);
1231
+ if (platformConfig?.anthropic_api_key) {
1232
+ CONFIG.anthropicApiKey = platformConfig.anthropic_api_key;
1233
+ if (platformConfig.ai_model) {
1234
+ CONFIG.aiModel = platformConfig.ai_model;
1235
+ }
1236
+ logSuccess('IA habilitada desde configuración de la plataforma');
1237
+ }
1209
1238
  }
1210
1239
 
1211
- if (!CONFIG.authToken) {
1212
- log('INFO: No auth token. Reporting anonymously.', 'yellow');
1213
- log('Set DGP_AUTH_TOKEN to associate with your user.', 'gray');
1214
- }
1240
+ logInfo(`Machine ID: ${CONFIG.machineId}`);
1241
+ logInfo(`IA: ${CONFIG.anthropicApiKey ? '✓ Habilitada' : ' No configurada'}`);
1242
+ logInfo(`Reporta cada ${CONFIG.interval}s | Escucha cada ${CONFIG.commandPollInterval}s`);
1215
1243
 
1216
1244
  console.log('');
1217
- logInfo('Press Ctrl+C to stop');
1245
+ logInfo('Escuchando comandos de la web...');
1246
+ logInfo('Presiona Ctrl+C para detener');
1218
1247
  console.log('');
1219
1248
 
1220
1249
  // Status reporting cycle
@@ -1246,7 +1275,10 @@ async function runAgent(deployMode = false) {
1246
1275
  },
1247
1276
  });
1248
1277
 
1249
- if (!response.ok) return;
1278
+ if (!response.ok) {
1279
+ log(`[Poll] Error: ${response.status}`, 'gray');
1280
+ return;
1281
+ }
1250
1282
 
1251
1283
  const commands = await response.json();
1252
1284
  if (commands.length === 0) return;
@@ -1343,75 +1375,48 @@ async function showStatus() {
1343
1375
  */
1344
1376
  function showHelp() {
1345
1377
  console.log(`
1346
- ${colors.bold}${colors.cyan}DGP Agent - Despliegue-GPT Local Agent${colors.reset}
1347
- ${colors.gray}@deinossrl/dgp-agent v1.4.7${colors.reset}
1378
+ ${colors.bold}${colors.cyan}DGP Agent - Agente Inteligente${colors.reset}
1379
+ ${colors.gray}@deinossrl/dgp-agent v${AGENT_VERSION}${colors.reset}
1348
1380
 
1349
1381
  ${colors.bold}DESCRIPCIÓN${colors.reset}
1350
- Agente local que reporta el estado de tu repositorio Git
1351
- a la plataforma TenMinute IA (Despliegue-GPT) y puede
1352
- ejecutar comandos de deploy remotos.
1382
+ Agente inteligente que conecta tu repositorio Git con TenMinute IA.
1383
+ Reporta estado, escucha comandos de la web, y usa IA para ejecutarlos.
1353
1384
 
1354
1385
  ${colors.bold}INSTALACIÓN${colors.reset}
1355
- ${colors.green}npm install -g @deinossrl/dgp-agent${colors.reset}
1386
+ ${colors.green}npm install -g @deinossrl/dgp-agent@latest${colors.reset}
1356
1387
 
1357
1388
  ${colors.bold}USO${colors.reset}
1358
- ${colors.cyan}dgp-agent${colors.reset} Inicia el agente (solo reporta estado)
1359
- ${colors.cyan}dgp-agent deploy${colors.reset} Modo deploy (reporta + escucha comandos)
1360
- ${colors.cyan}dgp-agent status${colors.reset} Muestra el estado actual una vez
1361
- ${colors.cyan}dgp-agent ai${colors.reset} Modo IA interactivo (requiere API key)
1362
- ${colors.cyan}dgp-agent ai "tarea"${colors.reset} Ejecuta una tarea con IA
1363
- ${colors.cyan}dgp-agent config${colors.reset} Gestiona la configuración local
1389
+ ${colors.cyan}dgp-agent${colors.reset} Inicia el agente inteligente
1390
+ ${colors.cyan}dgp-agent status${colors.reset} Muestra el estado actual (una vez)
1391
+ ${colors.cyan}dgp-agent config${colors.reset} Gestiona la configuración
1364
1392
  ${colors.cyan}dgp-agent help${colors.reset} Muestra esta ayuda
1365
1393
 
1366
- ${colors.bold}MODOS DE OPERACIÓN${colors.reset}
1367
- ${colors.yellow}Default${colors.reset} Solo reporta estado del repo cada 30s
1368
- ${colors.yellow}Deploy${colors.reset} Reporta estado + escucha comandos de la plataforma
1369
- Puede ejecutar: build, deploy via rsync, reload nginx
1394
+ ${colors.bold}¿QUÉ HACE EL AGENTE?${colors.reset}
1395
+ ${colors.green}✓${colors.reset} Reporta estado del repositorio a la plataforma web
1396
+ ${colors.green}✓${colors.reset} Escucha comandos enviados desde TenMinute IA
1397
+ ${colors.green}✓${colors.reset} Ejecuta comandos git (commit, push, pull, etc)
1398
+ ${colors.green}✓${colors.reset} Usa IA para interpretar tareas en lenguaje natural
1399
+ ${colors.green}✓${colors.reset} Mejora mensajes de commit automáticamente
1400
+
1401
+ ${colors.bold}CONFIGURACIÓN${colors.reset}
1402
+ La API key de Claude se configura desde:
1403
+ 1. Web: TenMinute IA > Configuración > Agente IA
1404
+ 2. CLI: dgp-agent config set anthropic-api-key sk-ant-...
1370
1405
 
1371
1406
  ${colors.bold}VARIABLES DE ENTORNO${colors.reset}
1372
- ${colors.yellow}DGP_AUTH_TOKEN${colors.reset} Token JWT para asociar a tu usuario
1373
- ${colors.yellow}DGP_API_URL${colors.reset} URL del endpoint API
1374
- ${colors.yellow}DGP_INTERVAL${colors.reset} Intervalo de reporte en segundos (default: 30)
1375
- ${colors.yellow}DGP_COMMAND_POLL_INTERVAL${colors.reset} Intervalo de polling comandos (default: 10)
1407
+ ${colors.yellow}ANTHROPIC_API_KEY${colors.reset} API key de Claude (opcional si está en web)
1408
+ ${colors.yellow}DGP_INTERVAL${colors.reset} Intervalo de reporte (default: 30s)
1376
1409
  ${colors.yellow}DGP_MACHINE_ID${colors.reset} ID personalizado de la máquina
1377
1410
 
1378
1411
  ${colors.bold}EJEMPLOS${colors.reset}
1379
- # Iniciar agente básico (solo reporta)
1380
- ${colors.gray}$ dgp-agent${colors.reset}
1381
-
1382
- # Iniciar en modo deploy (puede ejecutar deploys)
1383
- ${colors.gray}$ dgp-agent deploy${colors.reset}
1384
-
1385
- # Con token de autenticación
1386
- ${colors.gray}$ DGP_AUTH_TOKEN=eyJ... dgp-agent deploy${colors.reset}
1387
-
1388
- # Intervalo personalizado (60 segundos)
1389
- ${colors.gray}$ DGP_INTERVAL=60 dgp-agent${colors.reset}
1390
-
1391
- ${colors.bold}REQUISITOS PARA DEPLOY${colors.reset}
1392
- - SSH key configurada para acceso al servidor
1393
- - Node.js y npm en el PATH
1394
- - rsync instalado (Linux/Mac) o equivalente (Windows)
1395
- - Permisos sudo para reload nginx (vía sudoers sin password)
1396
-
1397
- ${colors.bold}CHANGELOG${colors.reset}
1398
- ${colors.cyan}v1.4.10${colors.reset} - AI Mode escucha todos los comandos (git + ai_task)
1399
- ${colors.cyan}v1.4.9${colors.reset} - Fix: AI Mode no reportaba status a la plataforma
1400
- ${colors.cyan}v1.4.8${colors.reset} - Banner dinámico con padding automático
1401
- ${colors.cyan}v1.4.7${colors.reset} - Modo AI visible en web, auto-kill agente anterior
1402
- ${colors.cyan}v1.4.6${colors.reset} - Fix: versión en banner AI Mode
1403
- ${colors.cyan}v1.4.5${colors.reset} - Modo escucha: recibe tareas AI desde la web
1404
- ${colors.cyan}v1.4.4${colors.reset} - Config global (compartida por todos los agentes)
1405
- ${colors.cyan}v1.4.3${colors.reset} - Config desde plataforma web (TenMinute IA)
1406
- ${colors.cyan}v1.4.2${colors.reset} - Fix: alineación banner, config persistente
1407
- ${colors.cyan}v1.3.0${colors.reset} - AI Mode: ejecuta tareas con lenguaje natural
1408
- ${colors.cyan}v1.2.7${colors.reset} - Fix: update via Edge Function (401 fix)
1409
- ${colors.cyan}v1.2.6${colors.reset} - Comando git_commit_push desde la UI
1410
- ${colors.cyan}v1.2.5${colors.reset} - Sincronización de versiones y changelog
1411
- ${colors.cyan}v1.2.4${colors.reset} - Mejoras en ejecución async de comandos shell
1412
- ${colors.cyan}v1.2.0${colors.reset} - Modo deploy con polling de comandos remotos
1413
- ${colors.cyan}v1.1.0${colors.reset} - Soporte para deploy via rsync y reload nginx
1414
- ${colors.cyan}v1.0.0${colors.reset} - Versión inicial: reporte de estado git
1412
+ ${colors.gray}# Iniciar agente${colors.reset}
1413
+ $ dgp-agent
1414
+
1415
+ ${colors.gray}# Ver estado sin iniciar loop${colors.reset}
1416
+ $ dgp-agent status
1417
+
1418
+ ${colors.gray}# Configurar API key${colors.reset}
1419
+ $ dgp-agent config set anthropic-api-key sk-ant-...
1415
1420
 
1416
1421
  ${colors.bold}MÁS INFO${colors.reset}
1417
1422
  https://github.com/DEINOS-SRL/tenminuteia
@@ -1550,11 +1555,6 @@ const args = process.argv.slice(2);
1550
1555
  const command = args[0];
1551
1556
 
1552
1557
  switch (command) {
1553
- case 'deploy':
1554
- case '-d':
1555
- case '--deploy':
1556
- runAgent(true); // Deploy mode
1557
- break;
1558
1558
  case 'status':
1559
1559
  case '-s':
1560
1560
  case '--status':
@@ -1568,15 +1568,17 @@ switch (command) {
1568
1568
  case 'version':
1569
1569
  case '-v':
1570
1570
  case '--version':
1571
- console.log('@deinossrl/dgp-agent v1.4.7');
1572
- break;
1573
- case 'ai':
1574
- case '--ai':
1575
- runAIMode();
1571
+ console.log(`@deinossrl/dgp-agent v${AGENT_VERSION}`);
1576
1572
  break;
1577
1573
  case 'config':
1578
1574
  handleConfigCommand(args.slice(1));
1579
1575
  break;
1576
+ // Aliases legacy + default → Agente Inteligente
1577
+ case 'deploy':
1578
+ case '-d':
1579
+ case '--deploy':
1580
+ case 'ai':
1581
+ case '--ai':
1580
1582
  default:
1581
- runAgent(false); // Status-only mode
1583
+ runAgent(); // Agente inteligente (siempre escucha + IA si disponible)
1582
1584
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deinossrl/dgp-agent",
3
- "version": "1.4.13",
3
+ "version": "1.4.15",
4
4
  "description": "Agente local para Despliegue-GPT - Reporta el estado del repositorio Git a la plataforma TenMinute IA",
5
5
  "main": "index.mjs",
6
6
  "bin": {