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.
Files changed (2) hide show
  1. package/dist/core/engine.js +182 -132
  2. package/package.json +1 -1
@@ -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
- Secciones obligatorias:
1338
+ NIVEL 0 — architecture.md (raiz de .agent/context/)
1339
+ Objetivo: 80-150 lineas. Panorama global real, no generico.
1340
+ ────────────────────────────────────────────────────────────────
1341
1341
 
1342
- # ${this.config.project} — Arquitectura Global (NIVEL 0)
1342
+ # [Nombre del proyecto] — Arquitectura Global (NIVEL 0)
1343
1343
 
1344
- > Indice de servicios y relaciones. Lectura escalonada:
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 en lenguaje simple: que es el sistema, para quien sirve, que problema resuelve.
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 | Tipo | Stack + version | Puerto | Proposito (negocio) | Entry point |
1354
- |------------|------|-----------------|--------|---------------------|-------------|
1355
- (una fila por componente, con datos REALES)
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 (HTTP / Import / DB / Queue / CORS) | Proposito |
1359
- |--------|---------|------------------------------------------|-----------|
1360
- (una fila por cada relacion confirmada)
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
- [Frontend Web] ──HTTP──> [API Auth :8081]
1365
- │ │
1366
- │ v
1367
- └──HTTP──> [API Core :8080] ──> [MongoDB]
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 (3-5)
1371
- Mappings funcional → tecnico, paso a paso. Ejemplo:
1372
- - **"Un usuario crea un pedido"**: WebApp → POST /orders (API Core) → valida JWT contra API Auth guarda en MongoDBdevuelve 201 con el pedido.
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-serviceescribe en SQL Server responde 201.
1373
1384
 
1374
- ## 6. Prerequisitos para levantar el proyecto
1375
- Versiones REALES leidas de los manifests (no rangos genericos).
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 globales de desarrollo
1388
+ ## 7. Comandos de desarrollo
1378
1389
  | Comando | Descripcion | Directorio |
1379
-
1380
- ## 8. Decisiones de arquitectura globales (opcional, solo si hay)
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
- Detalle del componente. Objetivo: 80-200 lineas. Crear UNO POR CADA componente NO trivial.
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
- 2-3 lineas en lenguaje simple, sin tecnicismos.
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
- 3-6 bullets en formato negocio:
1395
- - "Permite al usuario X..."
1396
- - "El sistema usa este servicio para Y..."
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 | TypeScript 5.3 |
1402
- | Framework | NestJS 11.0.1 |
1403
- | ORM | Mongoose 9.3.3 |
1404
- | Auth | Passport JWT |
1405
- (datos reales del manifest)
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
- - **Puerto:** 8085 (de PORT en .env)
1409
- - **Swagger / docs:** http://localhost:8085/api/docs (si aplica)
1410
- - **Health check:** GET /health (si existe)
1411
-
1412
- ## Estructura interna (arbol real)
1413
- Listar DIRECTORIOS clave + los archivos que leiste (los CONTROLLER/ROUTER y SCHEMA/MODEL del prefetch).
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
- ├── main.ts # entry point, configura CORS y swagger
1417
- ├── auth/
1418
- │ ├── auth.controller.ts # endpoints /auth/login, /auth/refresh
1419
- │ └── auth.service.ts # logica de validacion JWT
1420
- ├── leads/
1421
- │ ├── leads.controller.ts # endpoints /leads
1422
- │ └── lead.schema.ts # modelo Lead { name, email, status }
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
- Para Java, usar el arbol de packages: src/main/java/.../controller/, .../domain/, .../service/, etc.
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
- IMPORTANTE: nombrar cada modulo por su FEATURE (clients, sales, products), no por su capa (web, data, service).
1430
- Los modulos surgen de los controllers que se leyeron: un controller → un modulo.
1431
- | Modulo | Proposito (negocio) | Doc tecnica |
1432
- |--------|---------------------|-------------|
1433
- | auth | Login y validacion de tokens | modules/auth.md |
1434
- | leads | Listado y consulta de negocios | modules/leads.md |
1435
-
1436
- ## Endpoints principales
1437
- | Metodo | Ruta | Modulo | Que hace (lenguaje simple) |
1438
- |--------|------|--------|----------------------------|
1439
- | GET | /leads | leads | Lista negocios filtrables |
1440
- | GET | /leads/:id | leads | Detalle de un negocio |
1441
- (SOLO endpoints reales extraidos de los controllers metodo HTTP, ruta, y descripcion en 1 linea)
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
- - **Instalar deps:** \`npm install\`
1454
- - **Servicios necesarios:** MongoDB corriendo, security-api accesible
1455
- - **Comando para iniciar:** \`npm run start:dev\`
1456
-
1457
- ## Comandos disponibles
1458
- | Comando | Que hace |
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
- ## Decisiones tecnicas relevantes
1461
- (solo si hay decisiones notables; si no, omitir esta seccion)
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
- Detalle de un modulo interno. Objetivo: 40-120 lineas. Crear UNO POR cada modulo significativo.
1506
+ Objetivo: 50-120 lineas. Un archivo por modulo significativo.
1466
1507
  ────────────────────────────────────────────────────────────────
1467
- Secciones obligatorias:
1468
1508
 
1469
- # Modulo: [nombre] — [componente]
1509
+ # Modulo: [Nombre] — [componente]
1470
1510
 
1471
1511
  ## Funcion (lenguaje simple)
1472
- 1-2 lineas: "Permite al usuario gestionar X" / "El sistema usa este modulo para Y".
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 a alto nivel.
1476
-
1477
- ## Flujos / casos de uso (1-3)
1478
- Escenarios paso a paso. Ejemplo:
1479
- - **Crear un pedido:** Cliente POST /orders middleware valida JWT → service.create() → guarda en DB → responde 201
1480
-
1481
- ## Endpoints / interfaces publicas (si aplica)
1482
- | Metodo | Ruta | Body | Respuesta |
1483
- |--------|------|------|-----------|
1484
-
1485
- ## Modelos / schemas relevantes
1486
- \`\`\`typescript
1487
- // shape REAL extraido del archivo de schema/model
1488
- {
1489
- _id: ObjectId,
1490
- name: string,
1491
- createdAt: Date,
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
- ## Reglas de negocio
1497
- - Validaciones: ...
1498
- - Condiciones especiales: ...
1499
- - Excepciones: ...
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
- OBLIGATORIO: listar los archivos FUENTE reales que encontraste en los pre-fetched data.
1503
- NO poner solo el manifest. Si no hay fuentes leidas para este modulo, omitir la seccion.
1504
- | Archivo (ruta relativa al componente) | Rol |
1505
- |---------------------------------------|-----|
1506
- | src/main/java/.../ClientController.java | Expone endpoints REST /clients |
1507
- | src/main/java/.../Client.java | Entidad JPA mapeada a tabla CLIENTS |
1508
- | src/main/java/.../ClientRepository.java | Acceso a datos via JPA |
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
- - **Internas (mismo componente):** auth, common
1514
- - **Externas:** mongoose, class-validator
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: 50-150 lineas (no menos, no mas)
1521
- - NIVEL 1: 80-200 lineas por componente
1522
- - NIVEL 2: 40-120 lineas por modulo
1523
- - Si te queda corto → leiste pocos archivos, no agregues relleno simplemente genera con lo que hay
1524
- - Si te queda largo → estas repitiendo o agregando relleno, recorta
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 mezclar lenguaje tecnico puro: SIEMPRE empezar funcional, despues tecnico
1533
- - NO documentar componentes triviales (scripts, docs, configs sueltas) con su propia carpeta — mencionalos en NIVEL 0 y listo
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-mp",
3
- "version": "0.5.21",
3
+ "version": "0.5.22",
4
4
  "description": "Deterministic multi-agent CLI orchestrator — plan, code, review",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",