@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.
- package/index.mjs +97 -95
- 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
|
|
206
|
-
const AGENT_VERSION = '1.4.
|
|
207
|
-
let AGENT_MODE = '
|
|
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
|
-
|
|
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
|
-
-
|
|
410
|
-
-
|
|
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é
|
|
417
|
-
"improved_message": "mensaje mejorado
|
|
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(
|
|
1210
|
+
async function runAgent() {
|
|
1187
1211
|
// Matar agente anterior y guardar PID
|
|
1188
1212
|
killPreviousAgent();
|
|
1189
1213
|
savePid();
|
|
1190
|
-
AGENT_MODE =
|
|
1214
|
+
AGENT_MODE = 'smart';
|
|
1191
1215
|
|
|
1192
1216
|
printBanner([
|
|
1193
|
-
'DGP Agent -
|
|
1194
|
-
|
|
1195
|
-
], '
|
|
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
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
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
|
-
|
|
1208
|
-
|
|
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
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
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('
|
|
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)
|
|
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 -
|
|
1347
|
-
${colors.gray}@deinossrl/dgp-agent
|
|
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
|
|
1351
|
-
|
|
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
|
|
1359
|
-
${colors.cyan}dgp-agent
|
|
1360
|
-
${colors.cyan}dgp-agent
|
|
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}
|
|
1367
|
-
${colors.
|
|
1368
|
-
${colors.
|
|
1369
|
-
|
|
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}
|
|
1373
|
-
${colors.yellow}
|
|
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
|
|
1380
|
-
$
|
|
1381
|
-
|
|
1382
|
-
#
|
|
1383
|
-
$
|
|
1384
|
-
|
|
1385
|
-
#
|
|
1386
|
-
$
|
|
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(
|
|
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(
|
|
1583
|
+
runAgent(); // Agente inteligente (siempre escucha + IA si disponible)
|
|
1582
1584
|
}
|