agent-mp 0.5.21 → 0.5.22
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/dist/core/engine.js +182 -132
- package/package.json +1 -1
package/dist/core/engine.js
CHANGED
|
@@ -1334,204 +1334,254 @@ ESTRUCTURA DE LOS 3 NIVELES
|
|
|
1334
1334
|
================================================================
|
|
1335
1335
|
|
|
1336
1336
|
────────────────────────────────────────────────────────────────
|
|
1337
|
-
NIVEL 0 — architecture.md (raiz de .agent/context/)
|
|
1338
|
-
Indice global. Objetivo: 50-150 lineas. Concreto.
|
|
1339
1337
|
────────────────────────────────────────────────────────────────
|
|
1340
|
-
|
|
1338
|
+
NIVEL 0 — architecture.md (raiz de .agent/context/)
|
|
1339
|
+
Objetivo: 80-150 lineas. Panorama global real, no generico.
|
|
1340
|
+
────────────────────────────────────────────────────────────────
|
|
1341
1341
|
|
|
1342
|
-
#
|
|
1342
|
+
# [Nombre del proyecto] — Arquitectura Global (NIVEL 0)
|
|
1343
1343
|
|
|
1344
|
-
>
|
|
1344
|
+
> Lectura escalonada:
|
|
1345
1345
|
> NIVEL 0: este archivo
|
|
1346
1346
|
> NIVEL 1: .agent/context/[componente]/architecture.md
|
|
1347
1347
|
> NIVEL 2: .agent/context/[componente]/modules/[modulo].md
|
|
1348
1348
|
|
|
1349
1349
|
## 1. Overview funcional
|
|
1350
|
-
2-4 lineas
|
|
1350
|
+
2-4 lineas. Que es el sistema, para quien sirve, que problema resuelve.
|
|
1351
|
+
Si hay multiples componentes con roles distintos, nombrarlos y contrastarlos en el overview:
|
|
1352
|
+
ej. "X es la API de ingesta (escritura, batch), Y es la API de gestion (CRUD, portal Nexus)."
|
|
1351
1353
|
|
|
1352
1354
|
## 2. Componentes del proyecto
|
|
1353
|
-
| Componente |
|
|
1354
|
-
|
|
1355
|
-
(
|
|
1355
|
+
| Componente | Stack (version exacta) | Puerto | Rol principal | Consumers tipicos |
|
|
1356
|
+
|---|---|---|---|---|
|
|
1357
|
+
(datos REALES del manifest. "Consumers tipicos" = quien llama a este componente: frontend, proceso batch, sistema externo)
|
|
1356
1358
|
|
|
1357
1359
|
## 3. Relaciones entre componentes
|
|
1358
|
-
| Origen | Destino | Tipo
|
|
1359
|
-
|
|
1360
|
-
(
|
|
1360
|
+
| Origen | Destino | Tipo | Proposito |
|
|
1361
|
+
|---|---|---|---|
|
|
1362
|
+
(incluir URLs/hosts reales si aparecen en .env o config: ej. "http://57.151.96.13:8000/v1/validate")
|
|
1361
1363
|
|
|
1362
1364
|
## 4. Diagrama de arquitectura
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1365
|
+
Usar box-drawing (┌─┐│└┘┬┴├┤) y flechas (→ ──> ▼ ▲). Mostrar puertos REALES.
|
|
1366
|
+
Incluir endpoints clave inline en los componentes cuando se conocen.
|
|
1367
|
+
\`\`\`text
|
|
1368
|
+
┌─────────────────────┐ ┌──────────────────────┐
|
|
1369
|
+
│ componente-a :8083 │ │ componente-b :8084 │
|
|
1370
|
+
│ POST /api/sales │ │ GET /api/nexus/combos │
|
|
1371
|
+
│ POST /api/stock │────────>│ PUT /api/nexus/... │
|
|
1372
|
+
└──────────┬──────────┘ └──────────────────────┘
|
|
1373
|
+
│ │
|
|
1374
|
+
▼ ▼
|
|
1375
|
+
┌──────────────┐ ┌──────────────┐
|
|
1376
|
+
│ SQL Server │ │ Auth Service│
|
|
1377
|
+
│ :31434 │ │ :8000 │
|
|
1378
|
+
└──────────────┘ └──────────────┘
|
|
1368
1379
|
\`\`\`
|
|
1369
1380
|
|
|
1370
|
-
## 5. Flujos end-to-end principales
|
|
1371
|
-
|
|
1372
|
-
- **"
|
|
1381
|
+
## 5. Flujos end-to-end principales
|
|
1382
|
+
Concretos, con componentes, endpoints y acciones reales. 2-5 flujos.
|
|
1383
|
+
- **"Nombre del flujo":** Actor → POST /endpoint (componente-a) → valida JWT con auth-service → escribe en SQL Server → responde 201.
|
|
1373
1384
|
|
|
1374
|
-
## 6. Prerequisitos para levantar
|
|
1375
|
-
|
|
1385
|
+
## 6. Prerequisitos para levantar
|
|
1386
|
+
Solo lo que es real: acceso de red a hosts externos, herramientas requeridas. Sin generalidades.
|
|
1376
1387
|
|
|
1377
|
-
## 7. Comandos
|
|
1388
|
+
## 7. Comandos de desarrollo
|
|
1378
1389
|
| Comando | Descripcion | Directorio |
|
|
1379
|
-
|
|
1380
|
-
|
|
1390
|
+
|---|---|---|
|
|
1391
|
+
(comandos reales del Makefile, run.sh, package.json scripts, mvnw, etc.)
|
|
1381
1392
|
|
|
1382
1393
|
────────────────────────────────────────────────────────────────
|
|
1383
1394
|
NIVEL 1 — [componente]/architecture.md
|
|
1384
|
-
|
|
1395
|
+
Objetivo: 120-250 lineas. Un archivo por cada componente no trivial.
|
|
1385
1396
|
────────────────────────────────────────────────────────────────
|
|
1386
|
-
Secciones obligatorias:
|
|
1387
1397
|
|
|
1388
1398
|
# [componente] — Arquitectura (NIVEL 1)
|
|
1389
1399
|
|
|
1390
1400
|
## Que hace
|
|
1391
|
-
|
|
1401
|
+
Parrafo 1: describe el rol del componente en lenguaje de negocio + quien lo consume.
|
|
1402
|
+
Parrafo 2 (si hay componentes hermanos): contrasta con ellos. ej. "A diferencia de X que solo escribe en bulk, esta API expone CRUD con paginacion y filtros para el portal."
|
|
1392
1403
|
|
|
1393
1404
|
## Casos de uso principales
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1405
|
+
Tabla con: Caso de uso | Actor (quien lo dispara) | Descripcion + endpoint si se conoce.
|
|
1406
|
+
| Caso de uso | Actor | Descripcion |
|
|
1407
|
+
|---|---|---|
|
|
1408
|
+
| Ingesta de ventas | Proceso batch BAT | POST /api/sales — upsert bulk de ventas finales |
|
|
1409
|
+
| Consulta de productos | Portal Nexus | GET /api/products?eanCode=XXX |
|
|
1397
1410
|
|
|
1398
1411
|
## Stack tecnico
|
|
1399
1412
|
| Item | Valor |
|
|
1400
|
-
|
|
1401
|
-
| Lenguaje |
|
|
1402
|
-
| Framework |
|
|
1403
|
-
| ORM |
|
|
1404
|
-
|
|
|
1405
|
-
(
|
|
1413
|
+
|---|---|
|
|
1414
|
+
| Lenguaje | Java 21 (Temurin LTS) |
|
|
1415
|
+
| Framework | Spring Boot 3.5.6 |
|
|
1416
|
+
| ORM | Spring Data JPA + Hibernate |
|
|
1417
|
+
| Seguridad | Spring Security 6 + JJWT |
|
|
1418
|
+
(versiones REALES del manifest. Si hay librerias clave como POI, MapStruct, HikariCP: incluirlas)
|
|
1406
1419
|
|
|
1407
1420
|
## Puerto y URLs
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1421
|
+
| Recurso | URL |
|
|
1422
|
+
|---|---|
|
|
1423
|
+
| API base | http://localhost:8084 |
|
|
1424
|
+
| Swagger / docs | http://localhost:8084/swagger-ui/index.html |
|
|
1425
|
+
| Perfil activo | development (application-development.properties) |
|
|
1426
|
+
|
|
1427
|
+
## Estructura de capas / paquetes
|
|
1428
|
+
Arbol con los archivos y directorios REALES que leiste. Usar → para anotar inline que hace cada clase o directorio.
|
|
1429
|
+
\`\`\`text
|
|
1430
|
+
paquete.raiz/
|
|
1431
|
+
├── controller/ → endpoints REST, delegan a service, responden ApiResponse<T>
|
|
1432
|
+
│ ├── ClientController → CRUD /api/clients
|
|
1433
|
+
│ ├── SaleController → POST /api/sales, /api/sales/interim-sales
|
|
1434
|
+
│ └── ExportController → GET /api/export/combos (genera .xlsx)
|
|
1435
|
+
├── service/ → interfaces de logica de negocio
|
|
1436
|
+
│ └── impl/ → implementaciones (@Transactional aqui)
|
|
1437
|
+
├── repository/ → Spring Data JPA Repositories
|
|
1438
|
+
├── domain/ → Entidades JPA (@Entity)
|
|
1439
|
+
│ ├── Client, InterimClient → clientes finales y en staging
|
|
1440
|
+
│ ├── Sale, InterimSale → ventas finales y en staging
|
|
1441
|
+
│ └── compositekeys/ → @IdClass para PKs compuestas
|
|
1442
|
+
├── dto/ → contratos de API (Request/Response DTOs)
|
|
1443
|
+
├── mapper/ → MapStruct: Entity ↔ DTO
|
|
1444
|
+
├── security/ → filtros JWT, validacion, handler 401
|
|
1445
|
+
└── configuration/ → CORS, Swagger, SecurityConfig
|
|
1414
1446
|
\`\`\`
|
|
1415
|
-
src
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1447
|
+
(Adaptar a la estructura real del proyecto: puede ser src/, app/, pkg/, etc.)
|
|
1448
|
+
|
|
1449
|
+
## Endpoints reales
|
|
1450
|
+
SOLO los que se leyeron en los CONTROLLER/ROUTER files. Incluir columna Auth si se conoce.
|
|
1451
|
+
| Metodo | Ruta | Auth | Funcion |
|
|
1452
|
+
|---|---|---|---|
|
|
1453
|
+
| GET | /api/clients | JWT | Lista clientes (paginado, filtrable) |
|
|
1454
|
+
| POST | /api/sales | JWT | Upsert bulk de ventas finales |
|
|
1455
|
+
| GET | /api/export/combos | JWT/Azure | Descarga Excel con combos |
|
|
1456
|
+
(querystring params relevantes en la ruta, ej. ?eanCode= , ?page=&size= )
|
|
1457
|
+
|
|
1458
|
+
## Formato de respuesta (si hay wrapper estandar)
|
|
1459
|
+
Si el codigo muestra un wrapper comun para todas las respuestas, documentarlo:
|
|
1460
|
+
\`\`\`json
|
|
1461
|
+
{
|
|
1462
|
+
"status": 200,
|
|
1463
|
+
"message": "Operacion exitosa",
|
|
1464
|
+
"data": [...],
|
|
1465
|
+
"pagination": { "page": 1, "size": 15, "totalElements": 120, "totalPages": 8 }
|
|
1466
|
+
}
|
|
1424
1467
|
\`\`\`
|
|
1425
|
-
|
|
1426
|
-
Si no se leyo el codigo fuente, mencionar solo los directorios visibles en la estructura de archivos.
|
|
1468
|
+
Si no hay wrapper, omitir esta seccion.
|
|
1427
1469
|
|
|
1428
1470
|
## Modulos internos
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
|
1432
|
-
|
|
1433
|
-
|
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
##
|
|
1437
|
-
|
|
|
1438
|
-
|
|
1439
|
-
|
|
|
1440
|
-
|
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
## Variables de entorno
|
|
1444
|
-
| Variable | Default | Proposito |
|
|
1445
|
-
|----------|---------|-----------|
|
|
1446
|
-
| PORT | 8085 | Puerto del servicio |
|
|
1447
|
-
| MONGODB_URI | mongodb://... | Conexion principal |
|
|
1448
|
-
|
|
1449
|
-
## Integraciones con otros servicios / sistemas
|
|
1450
|
-
| Servicio externo | Tipo (HTTP/DB/Queue) | Proposito |
|
|
1471
|
+
| Modulo | Proposito | Doc tecnica |
|
|
1472
|
+
|---|---|---|
|
|
1473
|
+
| seguridad | Autenticacion JWT/Azure, roles, filtro HTTP | modules/security.md |
|
|
1474
|
+
| acceso-datos | JPA, Specifications, pool, entidades | modules/data-access.md |
|
|
1475
|
+
| api-web | Controladores, DTOs, validacion, exportacion | modules/web-api.md |
|
|
1476
|
+
(Agrupar por responsabilidad tecnica real, no inventar modulos)
|
|
1477
|
+
|
|
1478
|
+
## Variables de configuracion clave
|
|
1479
|
+
| Propiedad / Variable | Valor actual | Proposito |
|
|
1480
|
+
|---|---|---|
|
|
1481
|
+
| server.port | 8084 | Puerto de la API |
|
|
1482
|
+
| spring.datasource.url | jdbc:sqlserver://... | Conexion SQL Server |
|
|
1483
|
+
| auth.url | http://57.151.96.13:8000/v1/validate | Servicio externo de validacion JWT |
|
|
1484
|
+
(Valores REALES del archivo de config/env leido. Si no se leyo el archivo, omitir la tabla)
|
|
1451
1485
|
|
|
1452
1486
|
## Como levantar
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1487
|
+
Comando principal primero. Luego paso a paso si existe.
|
|
1488
|
+
\`\`\`bash
|
|
1489
|
+
./run.sh # compila y levanta todo en uno (si existe)
|
|
1490
|
+
\`\`\`
|
|
1491
|
+
O paso a paso:
|
|
1492
|
+
\`\`\`bash
|
|
1493
|
+
source ./scripts/env.sh
|
|
1494
|
+
npm install && npm run dev
|
|
1495
|
+
\`\`\`
|
|
1459
1496
|
|
|
1460
|
-
##
|
|
1461
|
-
|
|
1497
|
+
## Testing (si hay tests en el proyecto)
|
|
1498
|
+
Frameworks, comando para correr, cobertura minima si se menciona en el manifest o config.
|
|
1499
|
+
\`\`\`bash
|
|
1500
|
+
npm test # todos los tests
|
|
1501
|
+
npm test -- --watch # modo watch
|
|
1502
|
+
\`\`\`
|
|
1462
1503
|
|
|
1463
1504
|
────────────────────────────────────────────────────────────────
|
|
1464
1505
|
NIVEL 2 — [componente]/modules/[modulo].md
|
|
1465
|
-
|
|
1506
|
+
Objetivo: 50-120 lineas. Un archivo por modulo significativo.
|
|
1466
1507
|
────────────────────────────────────────────────────────────────
|
|
1467
|
-
Secciones obligatorias:
|
|
1468
1508
|
|
|
1469
|
-
# Modulo: [
|
|
1509
|
+
# Modulo: [Nombre] — [componente]
|
|
1470
1510
|
|
|
1471
1511
|
## Funcion (lenguaje simple)
|
|
1472
|
-
1-2 lineas: "
|
|
1512
|
+
1-2 lineas: "Protege todos los endpoints /api/**. Cada request debe llevar un token JWT valido."
|
|
1473
1513
|
|
|
1474
1514
|
## Funcion (tecnica)
|
|
1475
|
-
1-2 lineas: como esta implementado
|
|
1476
|
-
|
|
1477
|
-
##
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1515
|
+
1-2 lineas: como esta implementado. ej. "Filtro OncePerRequestFilter que extrae el JWT del header Authorization, lo valida contra el servicio externo auth.url, y si es valido establece el SecurityContext."
|
|
1516
|
+
|
|
1517
|
+
## Flujo principal (diagrama ASCII)
|
|
1518
|
+
Para modulos de seguridad, acceso a datos, o cualquiera con logica de decision/secuencia:
|
|
1519
|
+
mostrar el flujo con ASCII art y nombres REALES de clases/metodos.
|
|
1520
|
+
\`\`\`text
|
|
1521
|
+
HTTP Request
|
|
1522
|
+
│
|
|
1523
|
+
▼
|
|
1524
|
+
AuthFilter (OncePerRequestFilter)
|
|
1525
|
+
│
|
|
1526
|
+
├── X-User-Source == "Azure"?
|
|
1527
|
+
│ ▼ SI
|
|
1528
|
+
│ AzureHeaderValidator → construye usuario virtual desde headers
|
|
1529
|
+
│
|
|
1530
|
+
└── NO
|
|
1531
|
+
▼
|
|
1532
|
+
JwtValidator → POST http://auth-service/validate → carga usuario de BD
|
|
1533
|
+
│
|
|
1534
|
+
▼
|
|
1535
|
+
SecurityContextHolder.setAuthentication(...)
|
|
1536
|
+
│
|
|
1537
|
+
▼
|
|
1538
|
+
@PreAuthorize("hasAnyAuthority('ROLE_A','ROLE_B')") en el controller
|
|
1494
1539
|
\`\`\`
|
|
1495
1540
|
|
|
1496
|
-
##
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1541
|
+
## Entidades / modelos relevantes (si aplica)
|
|
1542
|
+
Para modulos de acceso a datos: tabla de entidades con su proposito y notas.
|
|
1543
|
+
| Entidad | Proposito | Notas |
|
|
1544
|
+
|---|---|---|
|
|
1545
|
+
| Client | Clientes finales | Clave compuesta: ClientId |
|
|
1546
|
+
| InterimClient | Clientes en staging | Tabla intermedia antes de procesar |
|
|
1547
|
+
|
|
1548
|
+
## Reglas del modulo
|
|
1549
|
+
- Rutas protegidas: /api/** → autenticacion obligatoria
|
|
1550
|
+
- Rutas publicas: OPTIONS /**, /swagger-ui/**, /*
|
|
1551
|
+
- Sin sesion: STATELESS — sin cookies
|
|
1552
|
+
- ddl-auto=validate → el schema nunca se auto-modifica
|
|
1500
1553
|
|
|
1501
1554
|
## Archivos clave
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
|
1507
|
-
|
|
|
1508
|
-
|
|
|
1509
|
-
| src/clients/clients.controller.ts | Endpoints /clients (Node.js) |
|
|
1510
|
-
| src/clients/clients.service.ts | Logica de negocio (Node.js) |
|
|
1555
|
+
Rutas RELATIVAS al directorio raiz del componente (no rutas absolutas, no solo el manifest).
|
|
1556
|
+
| Archivo | Rol |
|
|
1557
|
+
|---|---|
|
|
1558
|
+
| security/AuthFilter.java | Filtro principal — intercepta y valida cada request |
|
|
1559
|
+
| security/JwtValidator.java | Extrae username del JWT, verifica firma y expiracion |
|
|
1560
|
+
| configuration/SecurityConfig.java | Define SecurityFilterChain, rutas publicas/protegidas |
|
|
1561
|
+
| application-development.properties | auth.url, security.token.secret, security.token.expiration |
|
|
1511
1562
|
|
|
1512
1563
|
## Dependencias
|
|
1513
|
-
-
|
|
1514
|
-
-
|
|
1515
|
-
- **Cross-component:** llama a security-api via HTTP para validar JWT
|
|
1564
|
+
- Librerias clave con version si se conoce: io.jsonwebtoken:jjwt:0.9.1, spring-boot-starter-security
|
|
1565
|
+
- Cross-component si corresponde: "llama a http://auth-service:8000/v1/validate para validar tokens"
|
|
1516
1566
|
|
|
1517
1567
|
================================================================
|
|
1518
1568
|
CALIBRACION DE DETALLE
|
|
1519
1569
|
================================================================
|
|
1520
|
-
- NIVEL 0:
|
|
1521
|
-
- NIVEL 1:
|
|
1522
|
-
- NIVEL 2:
|
|
1523
|
-
- Si te queda corto →
|
|
1524
|
-
- Si te queda largo → estas repitiendo o agregando relleno
|
|
1570
|
+
- NIVEL 0: 80-150 lineas
|
|
1571
|
+
- NIVEL 1: 120-250 lineas por componente
|
|
1572
|
+
- NIVEL 2: 50-120 lineas por modulo
|
|
1573
|
+
- Si te queda corto → incluir mas endpoints reales, mas clases en el arbol, mas config values
|
|
1574
|
+
- Si te queda largo → estas repitiendo entre niveles o agregando relleno; recorta
|
|
1525
1575
|
|
|
1526
1576
|
================================================================
|
|
1527
1577
|
QUE NO HACER
|
|
1528
1578
|
================================================================
|
|
1529
1579
|
- NO usar "Inferido", "Probablemente", "(asumido)", "(quizas)", "parece"
|
|
1530
1580
|
- NO repetir lo mismo entre niveles sin agregar valor (cada nivel zoomea mas)
|
|
1531
|
-
- NO dejar tablas vacias ni con placeholders tipo "..."
|
|
1532
|
-
- NO
|
|
1533
|
-
- NO documentar componentes triviales (scripts
|
|
1534
|
-
- NO inventar endpoints, env vars, puertos o schemas que no leiste
|
|
1581
|
+
- NO dejar tablas vacias ni con placeholders tipo "..." o "ver manifest"
|
|
1582
|
+
- NO escribir overview que podria aplicar a cualquier proyecto (tiene que ser especifico de ESTE proyecto)
|
|
1583
|
+
- NO documentar componentes triviales (scripts sueltos, configs simples) con carpeta propia — mencionalos en NIVEL 0 y listo
|
|
1584
|
+
- NO inventar endpoints, env vars, puertos, hosts, clases o schemas que no leiste en los archivos reales
|
|
1535
1585
|
|
|
1536
1586
|
================================================================
|
|
1537
1587
|
FORMATO DE SALIDA — OBLIGATORIO
|