agent-mp 0.5.11 → 0.5.13
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 +296 -114
- package/package.json +1 -1
package/dist/core/engine.js
CHANGED
|
@@ -1021,125 +1021,280 @@ DIRECTORIO_TRABAJO: ${this.projectDir}
|
|
|
1021
1021
|
PROYECTO: ${this.config.project}
|
|
1022
1022
|
STACK: ${this.config.stack}
|
|
1023
1023
|
|
|
1024
|
-
ESTRUCTURA DE ARCHIVOS
|
|
1024
|
+
ESTRUCTURA DE ARCHIVOS (excluye .agent, node_modules, .git, dist, __pycache__, .venv, target, build):
|
|
1025
1025
|
${fsSnapshot}
|
|
1026
1026
|
|
|
1027
|
-
${existingMainArch ? `===
|
|
1028
|
-
${existingComponentDocs ? `===
|
|
1027
|
+
${existingMainArch ? `=== DOC EXISTENTE: architecture.md (principal) ===\n${existingMainArch.slice(0, 2000)}\n` : ''}
|
|
1028
|
+
${existingComponentDocs ? `=== DOC EXISTENTE por componente ===\n${existingComponentDocs.slice(0, 3000)}\n` : ''}
|
|
1029
1029
|
|
|
1030
|
-
|
|
1031
|
-
|
|
1030
|
+
================================================================
|
|
1031
|
+
OBJETIVO
|
|
1032
|
+
================================================================
|
|
1033
|
+
Generar documentacion ESCALONADA en 3 niveles, util TANTO para personas funcionales (PM, negocio) como tecnicas (devs).
|
|
1034
|
+
Detallada pero NO excesiva. Concreta, con datos REALES leidos de los archivos. Cero especulaciones.
|
|
1035
|
+
|
|
1036
|
+
================================================================
|
|
1037
|
+
REGLA DE ORO — PROHIBIDO INVENTAR
|
|
1038
|
+
================================================================
|
|
1039
|
+
NO uses jamas: "Inferido", "Probablemente", "Posiblemente", "Asumido", "(supuesto)", "(quizas)", "parece ser".
|
|
1040
|
+
Si no podes verificar un dato leyendo un archivo concreto → OMITELO. Es mejor una doc corta y veraz que una larga llena de suposiciones.
|
|
1041
|
+
Cada puerto, version, endpoint, env var, schema o ruta que aparezca en la doc DEBE haber sido leido de un archivo real.
|
|
1032
1042
|
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1043
|
+
================================================================
|
|
1044
|
+
WORKFLOW QUE TENES QUE EJECUTAR (usa tus tools de read_file/grep_search/list_directory)
|
|
1045
|
+
================================================================
|
|
1046
|
+
1. Lista DIRECTORIO_TRABAJO. Identifica los componentes (apps/services/libs). Descarta lo trivial (solo configs/docs/scripts).
|
|
1047
|
+
2. Para CADA componente no trivial, LEE COMO MINIMO:
|
|
1048
|
+
a. Manifest del proyecto: package.json | requirements.txt | pyproject.toml | pom.xml | build.gradle | Cargo.toml | go.mod
|
|
1049
|
+
→ de ahi sacas: nombre, version, framework, dependencias clave con sus versiones, scripts/tasks, entry point
|
|
1050
|
+
b. Entry point real: src/main.ts | index.js | app.py | Application.java | cmd/main.go (segun stack)
|
|
1051
|
+
→ de ahi sacas: puerto, middlewares, modulos cargados, configuracion inicial
|
|
1052
|
+
c. Archivo de variables de entorno: .env | .env.example | application.yml | config.* | settings.py
|
|
1053
|
+
→ de ahi sacas: variables reales con su proposito
|
|
1054
|
+
d. Al menos 2-3 controladores/routers/handlers principales
|
|
1055
|
+
→ de ahi extraes endpoints REALES (metodo, ruta, parametros)
|
|
1056
|
+
e. Al menos 2-3 modelos/schemas/entities principales
|
|
1057
|
+
→ de ahi extraes el shape de datos
|
|
1058
|
+
f. README.md del componente si existe
|
|
1059
|
+
3. Mapea RELACIONES REALES entre componentes (no asumas):
|
|
1060
|
+
- Buscando URLs/hosts de otros servicios en .env
|
|
1061
|
+
- Buscando imports cross-component
|
|
1062
|
+
- Buscando cadenas de conexion a BBDD/colas/cache
|
|
1063
|
+
4. Recien con esa informacion concreta, genera los archivos de documentacion.
|
|
1038
1064
|
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1065
|
+
================================================================
|
|
1066
|
+
LENGUAJE DUAL (regla critica)
|
|
1067
|
+
================================================================
|
|
1068
|
+
Cada seccion abre con UNA linea en lenguaje simple (que entienda un PM/negocio), DESPUES viene el detalle tecnico.
|
|
1069
|
+
- MAL: "El microservicio orquesta la persistencia mediante un repositorio."
|
|
1070
|
+
- BIEN: "Guarda la informacion del usuario en la base. Internamente usa un repositorio que abstrae la conexion a MongoDB."
|
|
1043
1071
|
|
|
1044
|
-
|
|
1072
|
+
================================================================
|
|
1073
|
+
ESTRUCTURA DE LOS 3 NIVELES
|
|
1074
|
+
================================================================
|
|
1045
1075
|
|
|
1046
|
-
|
|
1047
|
-
|
|
1076
|
+
────────────────────────────────────────────────────────────────
|
|
1077
|
+
NIVEL 0 — architecture.md (raiz de .agent/context/)
|
|
1078
|
+
Indice global. Objetivo: 50-150 lineas. Concreto.
|
|
1079
|
+
────────────────────────────────────────────────────────────────
|
|
1080
|
+
Secciones obligatorias:
|
|
1048
1081
|
|
|
1049
|
-
|
|
1082
|
+
# ${this.config.project} — Arquitectura Global (NIVEL 0)
|
|
1050
1083
|
|
|
1051
|
-
|
|
1084
|
+
> Indice de servicios y relaciones. Lectura escalonada:
|
|
1085
|
+
> NIVEL 0: este archivo
|
|
1086
|
+
> NIVEL 1: .agent/context/[componente]/architecture.md
|
|
1087
|
+
> NIVEL 2: .agent/context/[componente]/modules/[modulo].md
|
|
1052
1088
|
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
| datamart-data-access-api | API Backend | NestJS | Acceso a datos | src/main.ts |
|
|
1056
|
-
| nexus-core-api | API Backend | NestJS | Core business logic | src/main.ts |
|
|
1089
|
+
## 1. Overview funcional
|
|
1090
|
+
2-4 lineas en lenguaje simple: que es el sistema, para quien sirve, que problema resuelve.
|
|
1057
1091
|
|
|
1058
|
-
##
|
|
1092
|
+
## 2. Componentes del proyecto
|
|
1093
|
+
| Componente | Tipo | Stack + version | Puerto | Proposito (negocio) | Entry point |
|
|
1094
|
+
|------------|------|-----------------|--------|---------------------|-------------|
|
|
1095
|
+
(una fila por componente, con datos REALES)
|
|
1059
1096
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1097
|
+
## 3. Relaciones entre componentes
|
|
1098
|
+
| Origen | Destino | Tipo (HTTP / Import / DB / Queue / CORS) | Proposito |
|
|
1099
|
+
|--------|---------|------------------------------------------|-----------|
|
|
1100
|
+
(una fila por cada relacion confirmada)
|
|
1064
1101
|
|
|
1065
|
-
|
|
1102
|
+
## 4. Diagrama de arquitectura
|
|
1066
1103
|
\`\`\`
|
|
1067
|
-
[Frontend
|
|
1068
|
-
|
|
1104
|
+
[Frontend Web] ──HTTP──> [API Auth :8081]
|
|
1105
|
+
│ │
|
|
1106
|
+
│ v
|
|
1107
|
+
└──HTTP──> [API Core :8080] ──> [MongoDB]
|
|
1069
1108
|
\`\`\`
|
|
1070
1109
|
|
|
1071
|
-
##
|
|
1072
|
-
|
|
1073
|
-
-
|
|
1110
|
+
## 5. Flujos end-to-end principales (3-5)
|
|
1111
|
+
Mappings funcional → tecnico, paso a paso. Ejemplo:
|
|
1112
|
+
- **"Un usuario crea un pedido"**: WebApp → POST /orders (API Core) → valida JWT contra API Auth → guarda en MongoDB → devuelve 201 con el pedido.
|
|
1113
|
+
|
|
1114
|
+
## 6. Prerequisitos para levantar el proyecto
|
|
1115
|
+
Versiones REALES leidas de los manifests (no rangos genericos).
|
|
1074
1116
|
|
|
1075
|
-
## Comandos de
|
|
1117
|
+
## 7. Comandos globales de desarrollo
|
|
1076
1118
|
| Comando | Descripcion | Directorio |
|
|
1077
|
-
|---------|-------------|------------|
|
|
1078
|
-
| ... | ... | ... |
|
|
1079
1119
|
|
|
1080
|
-
|
|
1081
|
-
|
|
1120
|
+
## 8. Decisiones de arquitectura globales (opcional, solo si hay)
|
|
1121
|
+
|
|
1122
|
+
────────────────────────────────────────────────────────────────
|
|
1123
|
+
NIVEL 1 — [componente]/architecture.md
|
|
1124
|
+
Detalle del componente. Objetivo: 80-200 lineas. Crear UNO POR CADA componente NO trivial.
|
|
1125
|
+
────────────────────────────────────────────────────────────────
|
|
1126
|
+
Secciones obligatorias:
|
|
1127
|
+
|
|
1128
|
+
# [componente] — Arquitectura (NIVEL 1)
|
|
1129
|
+
|
|
1130
|
+
## Que hace
|
|
1131
|
+
2-3 lineas en lenguaje simple, sin tecnicismos.
|
|
1082
1132
|
|
|
1083
|
-
|
|
1133
|
+
## Casos de uso principales
|
|
1134
|
+
3-6 bullets en formato negocio:
|
|
1135
|
+
- "Permite al usuario X..."
|
|
1136
|
+
- "El sistema usa este servicio para Y..."
|
|
1084
1137
|
|
|
1085
|
-
##
|
|
1138
|
+
## Stack tecnico
|
|
1139
|
+
| Item | Valor |
|
|
1140
|
+
|------|-------|
|
|
1141
|
+
| Lenguaje | TypeScript 5.3 |
|
|
1142
|
+
| Framework | NestJS 11.0.1 |
|
|
1143
|
+
| ORM | Mongoose 9.3.3 |
|
|
1144
|
+
| Auth | Passport JWT |
|
|
1145
|
+
(datos reales del manifest)
|
|
1146
|
+
|
|
1147
|
+
## Puerto y URLs
|
|
1148
|
+
- **Puerto:** 8085 (de PORT en .env)
|
|
1149
|
+
- **Swagger / docs:** http://localhost:8085/api/docs (si aplica)
|
|
1150
|
+
- **Health check:** GET /health (si existe)
|
|
1151
|
+
|
|
1152
|
+
## Estructura interna (arbol real)
|
|
1086
1153
|
\`\`\`
|
|
1087
1154
|
src/
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1155
|
+
├── main.ts # entry point, configura CORS y swagger
|
|
1156
|
+
├── auth/ # autenticacion JWT
|
|
1157
|
+
├── leads/ # gestion de leads
|
|
1158
|
+
└── ...
|
|
1092
1159
|
\`\`\`
|
|
1093
1160
|
|
|
1094
|
-
## Modulos
|
|
1095
|
-
| Modulo |
|
|
1096
|
-
|
|
1097
|
-
|
|
|
1098
|
-
|
|
|
1161
|
+
## Modulos internos
|
|
1162
|
+
| Modulo | Proposito (negocio) | Doc tecnica |
|
|
1163
|
+
|--------|---------------------|-------------|
|
|
1164
|
+
| auth | Login y validacion de tokens | modules/auth.md |
|
|
1165
|
+
| leads | Listado y consulta de negocios | modules/leads.md |
|
|
1166
|
+
|
|
1167
|
+
## Endpoints principales
|
|
1168
|
+
| Metodo | Ruta | Modulo | Que hace (lenguaje simple) |
|
|
1169
|
+
|--------|------|--------|----------------------------|
|
|
1170
|
+
| GET | /leads | leads | Lista negocios filtrables |
|
|
1171
|
+
| GET | /leads/:id | leads | Detalle de un negocio |
|
|
1172
|
+
(SOLO endpoints reales extraidos de los controllers)
|
|
1173
|
+
|
|
1174
|
+
## Variables de entorno
|
|
1175
|
+
| Variable | Default | Proposito |
|
|
1176
|
+
|----------|---------|-----------|
|
|
1177
|
+
| PORT | 8085 | Puerto del servicio |
|
|
1178
|
+
| MONGODB_URI | mongodb://... | Conexion principal |
|
|
1179
|
+
|
|
1180
|
+
## Integraciones con otros servicios / sistemas
|
|
1181
|
+
| Servicio externo | Tipo (HTTP/DB/Queue) | Proposito |
|
|
1099
1182
|
|
|
1100
|
-
## Como
|
|
1101
|
-
- **Instalar deps:**
|
|
1102
|
-
- **Servicios necesarios:**
|
|
1103
|
-
- **
|
|
1104
|
-
- **Comando para iniciar:** \`...\`
|
|
1183
|
+
## Como levantar
|
|
1184
|
+
- **Instalar deps:** \`npm install\`
|
|
1185
|
+
- **Servicios necesarios:** MongoDB corriendo, security-api accesible
|
|
1186
|
+
- **Comando para iniciar:** \`npm run start:dev\`
|
|
1105
1187
|
|
|
1106
|
-
## Comandos
|
|
1188
|
+
## Comandos disponibles
|
|
1107
1189
|
| Comando | Que hace |
|
|
1108
|
-
|---------|----------|
|
|
1109
|
-
| ... | ... |
|
|
1110
1190
|
|
|
1111
|
-
##
|
|
1112
|
-
|
|
1113
|
-
- Protocolo (fetch, HTTP, gRPC, etc.)
|
|
1191
|
+
## Decisiones tecnicas relevantes
|
|
1192
|
+
(solo si hay decisiones notables; si no, omitir esta seccion)
|
|
1114
1193
|
|
|
1115
|
-
|
|
1116
|
-
|
|
1194
|
+
────────────────────────────────────────────────────────────────
|
|
1195
|
+
NIVEL 2 — [componente]/modules/[modulo].md
|
|
1196
|
+
Detalle de un modulo interno. Objetivo: 40-120 lineas. Crear UNO POR cada modulo significativo.
|
|
1197
|
+
────────────────────────────────────────────────────────────────
|
|
1198
|
+
Secciones obligatorias:
|
|
1117
1199
|
|
|
1118
|
-
|
|
1119
|
-
Que hace este modulo especifico.
|
|
1200
|
+
# Modulo: [nombre] — [componente]
|
|
1120
1201
|
|
|
1121
|
-
##
|
|
1122
|
-
-
|
|
1123
|
-
- **Funciones/Clases principales**
|
|
1202
|
+
## Funcion (lenguaje simple)
|
|
1203
|
+
1-2 lineas: "Permite al usuario gestionar X" / "El sistema usa este modulo para Y".
|
|
1124
1204
|
|
|
1125
|
-
##
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1205
|
+
## Funcion (tecnica)
|
|
1206
|
+
1-2 lineas: como esta implementado a alto nivel.
|
|
1207
|
+
|
|
1208
|
+
## Flujos / casos de uso (1-3)
|
|
1209
|
+
Escenarios paso a paso. Ejemplo:
|
|
1210
|
+
- **Crear un pedido:** Cliente → POST /orders → middleware valida JWT → service.create() → guarda en DB → responde 201
|
|
1211
|
+
|
|
1212
|
+
## Endpoints / interfaces publicas (si aplica)
|
|
1213
|
+
| Metodo | Ruta | Body | Respuesta |
|
|
1214
|
+
|--------|------|------|-----------|
|
|
1215
|
+
|
|
1216
|
+
## Modelos / schemas relevantes
|
|
1217
|
+
\`\`\`typescript
|
|
1218
|
+
// shape REAL extraido del archivo de schema/model
|
|
1219
|
+
{
|
|
1220
|
+
_id: ObjectId,
|
|
1221
|
+
name: string,
|
|
1222
|
+
createdAt: Date,
|
|
1223
|
+
...
|
|
1224
|
+
}
|
|
1225
|
+
\`\`\`
|
|
1226
|
+
|
|
1227
|
+
## Reglas de negocio
|
|
1228
|
+
- Validaciones: ...
|
|
1229
|
+
- Condiciones especiales: ...
|
|
1230
|
+
- Excepciones: ...
|
|
1231
|
+
|
|
1232
|
+
## Archivos clave
|
|
1233
|
+
| Archivo | Rol |
|
|
1234
|
+
|---------|-----|
|
|
1235
|
+
| src/leads/leads.controller.ts | Endpoints /leads |
|
|
1236
|
+
| src/leads/leads.service.ts | Logica de negocio |
|
|
1129
1237
|
|
|
1130
1238
|
## Dependencias
|
|
1131
|
-
- **Internas
|
|
1132
|
-
- **Externas:**
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
-
|
|
1139
|
-
-
|
|
1140
|
-
-
|
|
1141
|
-
-
|
|
1142
|
-
- Si
|
|
1239
|
+
- **Internas (mismo componente):** auth, common
|
|
1240
|
+
- **Externas:** mongoose, class-validator
|
|
1241
|
+
- **Cross-component:** llama a security-api via HTTP para validar JWT
|
|
1242
|
+
|
|
1243
|
+
================================================================
|
|
1244
|
+
CALIBRACION DE DETALLE
|
|
1245
|
+
================================================================
|
|
1246
|
+
- NIVEL 0: 50-150 lineas (no menos, no mas)
|
|
1247
|
+
- NIVEL 1: 80-200 lineas por componente
|
|
1248
|
+
- NIVEL 2: 40-120 lineas por modulo
|
|
1249
|
+
- Si te queda corto → leiste pocos archivos, lee mas
|
|
1250
|
+
- Si te queda largo → estas repitiendo o agregando relleno, recorta
|
|
1251
|
+
|
|
1252
|
+
================================================================
|
|
1253
|
+
QUE NO HACER
|
|
1254
|
+
================================================================
|
|
1255
|
+
- NO usar "Inferido", "Probablemente", "(asumido)", "(quizas)", "parece"
|
|
1256
|
+
- NO repetir lo mismo entre niveles sin agregar valor (cada nivel zoomea mas)
|
|
1257
|
+
- NO dejar tablas vacias ni con placeholders tipo "..."
|
|
1258
|
+
- NO mezclar lenguaje tecnico puro: SIEMPRE empezar funcional, despues tecnico
|
|
1259
|
+
- NO documentar componentes triviales (scripts, docs, configs sueltas) con su propia carpeta — mencionalos en NIVEL 0 y listo
|
|
1260
|
+
- NO inventar endpoints, env vars, puertos o schemas que no leiste
|
|
1261
|
+
|
|
1262
|
+
================================================================
|
|
1263
|
+
FORMATO DE SALIDA — OBLIGATORIO
|
|
1264
|
+
================================================================
|
|
1265
|
+
Devolve UNICAMENTE bloques de archivos separados por marcadores ===. Nada de explicaciones extra fuera de los bloques.
|
|
1266
|
+
|
|
1267
|
+
IMPORTANTE: TODAS las rutas son RELATIVAS al directorio del proyecto.
|
|
1268
|
+
Los archivos se escriben SIEMPRE dentro de .agent/context/
|
|
1269
|
+
|
|
1270
|
+
Ejemplos de marcadores:
|
|
1271
|
+
=== .agent/context/architecture.md ===
|
|
1272
|
+
=== .agent/context/datamart-data-access-api/architecture.md ===
|
|
1273
|
+
=== .agent/context/datamart-data-access-api/modules/auth.md ===
|
|
1274
|
+
=== .agent/context/nexus-core-api/architecture.md ===
|
|
1275
|
+
=== .agent/context/nexus-core-api/modules/users.md ===
|
|
1276
|
+
|
|
1277
|
+
=== .agent/context/architecture.md ===
|
|
1278
|
+
[contenido completo del NIVEL 0]
|
|
1279
|
+
|
|
1280
|
+
=== .agent/context/nombre-componente-1/architecture.md ===
|
|
1281
|
+
[contenido completo del NIVEL 1 del componente 1]
|
|
1282
|
+
|
|
1283
|
+
=== .agent/context/nombre-componente-1/modules/auth.md ===
|
|
1284
|
+
[contenido completo del NIVEL 2 del modulo auth]
|
|
1285
|
+
|
|
1286
|
+
=== .agent/context/nombre-componente-1/modules/leads.md ===
|
|
1287
|
+
[contenido completo del NIVEL 2 del modulo leads]
|
|
1288
|
+
|
|
1289
|
+
=== .agent/context/nombre-componente-2/architecture.md ===
|
|
1290
|
+
...
|
|
1291
|
+
|
|
1292
|
+
REGLAS DE PATHS:
|
|
1293
|
+
- El archivo principal SIEMPRE es: === .agent/context/architecture.md ===
|
|
1294
|
+
- Por componente: === .agent/context/[nombre-componente]/architecture.md ===
|
|
1295
|
+
- Por modulo interno: === .agent/context/[nombre-componente]/modules/[nombre-modulo].md ===
|
|
1296
|
+
- Documenta TODOS los componentes no triviales del DIRECTORIO_TRABAJO
|
|
1297
|
+
- Si existe documentacion previa, ACTUALIZALA preservando lo que sigue siendo valido y agregando lo nuevo`;
|
|
1143
1298
|
const res = await this.runWithFallback('explorer', prompt, 'Exploracion');
|
|
1144
1299
|
const text = extractCliText(res);
|
|
1145
1300
|
// Parse sections separated by === path/file.md === markers
|
|
@@ -1154,37 +1309,33 @@ REGLAS:
|
|
|
1154
1309
|
content = content.replace(/^```markdown\s*/i, '').replace(/^```\s*$/gm, '').trim();
|
|
1155
1310
|
try {
|
|
1156
1311
|
let targetPath;
|
|
1157
|
-
|
|
1312
|
+
// Normalize: strip any .agent/context/ prefix from the marker
|
|
1313
|
+
let relPath = fileName.replace(/^\.agent\/context\//i, '');
|
|
1314
|
+
if (relPath === 'architecture.md' || relPath === 'ARCHITECTURE.md' || relPath === fileName) {
|
|
1158
1315
|
// Main architecture doc
|
|
1159
|
-
|
|
1316
|
+
if (relPath === 'architecture.md' || relPath === 'ARCHITECTURE.md') {
|
|
1317
|
+
targetPath = mainArchPath;
|
|
1318
|
+
}
|
|
1319
|
+
else {
|
|
1320
|
+
// Fallback for unrecognized paths: skip
|
|
1321
|
+
continue;
|
|
1322
|
+
}
|
|
1160
1323
|
}
|
|
1161
1324
|
else {
|
|
1162
|
-
//
|
|
1163
|
-
|
|
1164
|
-
// or "/home/user/project/datamart-data-access-api/architecture.md" (BAD — must ignore prefix)
|
|
1165
|
-
// We only want the components relative to contextDir
|
|
1166
|
-
// Remove any leading absolute path by extracting the last meaningful path segments
|
|
1167
|
-
const cleanName = fileName.replace(/^.*[\/\\]/, ''); // strip any prefix
|
|
1168
|
-
// Check if it's a component architecture file: "component/architecture.md" or "component/modules/mod.md"
|
|
1169
|
-
const pathParts = fileName.split(/[\/\\]/).filter(Boolean);
|
|
1170
|
-
// Keep only the last 2-3 parts (component name + file)
|
|
1171
|
-
// e.g. ["/home", "user", "proj", "datamart", "architecture.md"] → ["datamart", "architecture.md"]
|
|
1172
|
-
// e.g. ["datamart-data-access-api", "architecture.md"] → same
|
|
1173
|
-
// e.g. ["datamart-data-access-api", "modules", "config.md"] → same
|
|
1174
|
-
let relPath;
|
|
1325
|
+
// Component doc: component/architecture.md or component/modules/mod.md
|
|
1326
|
+
const pathParts = relPath.split(/[\/\\]/).filter(Boolean);
|
|
1175
1327
|
if (pathParts.length >= 3 && pathParts[pathParts.length - 2] === 'modules') {
|
|
1176
1328
|
// component/modules/file.md
|
|
1177
|
-
|
|
1329
|
+
targetPath = path.join(contextDir, pathParts[pathParts.length - 3], 'modules', pathParts[pathParts.length - 1]);
|
|
1178
1330
|
}
|
|
1179
1331
|
else if (pathParts.length >= 2) {
|
|
1180
1332
|
// component/file.md
|
|
1181
|
-
|
|
1333
|
+
targetPath = path.join(contextDir, pathParts[pathParts.length - 2], pathParts[pathParts.length - 1]);
|
|
1182
1334
|
}
|
|
1183
1335
|
else {
|
|
1184
|
-
//
|
|
1185
|
-
|
|
1336
|
+
// Fallback
|
|
1337
|
+
continue;
|
|
1186
1338
|
}
|
|
1187
|
-
targetPath = path.join(contextDir, relPath);
|
|
1188
1339
|
}
|
|
1189
1340
|
await fs.mkdir(path.dirname(targetPath), { recursive: true });
|
|
1190
1341
|
await writeFile(targetPath, content);
|
|
@@ -1230,16 +1381,47 @@ PROYECTO: ${this.config.project}
|
|
|
1230
1381
|
${existingArch ? `DOCUMENTACION EXISTENTE:\n${existingArch.slice(0, 3000)}\n` : 'Sin documentacion previa.\n'}
|
|
1231
1382
|
CONTEXTO: ${context.slice(0, 2000)}
|
|
1232
1383
|
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
-
|
|
1384
|
+
OBJETIVO
|
|
1385
|
+
Generar documentacion ESCALONADA en 3 niveles (global / componente / modulo), util para perfiles funcionales y tecnicos. Detallada pero concreta. Cero suposiciones.
|
|
1386
|
+
|
|
1387
|
+
REGLA DE ORO — PROHIBIDO ESPECULAR
|
|
1388
|
+
NO uses "Inferido", "Probablemente", "Asumido", "(quizas)", "parece". Si no podes verificar un dato leyendo un archivo, OMITELO. Cada puerto, version, endpoint, env var y schema debe haber sido leido de un archivo real.
|
|
1389
|
+
|
|
1390
|
+
WORKFLOW (usa tus tools)
|
|
1391
|
+
1. Lista DIRECTORIO_TRABAJO y detecta los componentes no triviales.
|
|
1392
|
+
2. Para cada componente, LEE como minimo:
|
|
1393
|
+
- Manifest (package.json | requirements.txt | pom.xml | build.gradle | go.mod | Cargo.toml)
|
|
1394
|
+
- Entry point (main.ts | index.js | app.py | Application.java | cmd/main.go)
|
|
1395
|
+
- .env / .env.example / application.yml / settings.py
|
|
1396
|
+
- 2-3 controladores/routers principales (para endpoints reales)
|
|
1397
|
+
- 2-3 schemas/models principales (para shapes reales)
|
|
1398
|
+
3. Mapea relaciones reales (URLs en .env, imports cross-component, conexiones a DB/colas).
|
|
1399
|
+
|
|
1400
|
+
LENGUAJE DUAL
|
|
1401
|
+
Cada seccion abre con UNA linea simple (que entienda un PM). Despues, el detalle tecnico.
|
|
1402
|
+
- MAL: "El microservicio orquesta la persistencia mediante un repositorio."
|
|
1403
|
+
- BIEN: "Guarda la informacion del usuario. Internamente usa un repositorio que abstrae MongoDB."
|
|
1404
|
+
|
|
1405
|
+
NIVEL 0 — ${archPath} (50-150 lineas)
|
|
1406
|
+
Secciones: Overview funcional · Tabla de componentes (con stack+version, puerto, proposito, entry point) · Tabla de relaciones (origen, destino, tipo, proposito) · Diagrama ASCII · 3-5 flujos end-to-end (mapping funcional → tecnico) · Prerequisitos · Comandos globales.
|
|
1407
|
+
|
|
1408
|
+
NIVEL 1 — ${contextDir}/<componente>/architecture.md (80-200 lineas, uno por componente)
|
|
1409
|
+
Secciones: Que hace (simple) · Casos de uso (3-6 bullets en formato negocio) · Stack tecnico (tabla con versiones reales) · Puerto y URLs · Estructura interna (arbol real) · Tabla de modulos · Tabla de endpoints reales · Tabla de variables de entorno · Integraciones · Como levantar · Comandos.
|
|
1410
|
+
|
|
1411
|
+
NIVEL 2 — ${contextDir}/<componente>/modules/<modulo>.md (40-120 lineas, uno por modulo significativo)
|
|
1412
|
+
Secciones: Funcion (simple) · Funcion (tecnica) · Flujos / casos de uso paso a paso · Endpoints / interfaces · Schemas reales en codigo · Reglas de negocio · Archivos clave · Dependencias internas/externas/cross-component.
|
|
1413
|
+
|
|
1414
|
+
CALIBRACION
|
|
1415
|
+
- NIVEL 0: 50-150 lineas. NIVEL 1: 80-200 por componente. NIVEL 2: 40-120 por modulo.
|
|
1416
|
+
- Si te queda corto, leiste pocos archivos. Si te queda largo, recorta el relleno.
|
|
1417
|
+
- Componentes triviales (solo scripts/docs): mencionalos en NIVEL 0 y NO les crees subcarpeta.
|
|
1418
|
+
|
|
1419
|
+
REGLAS DE ESCRITURA
|
|
1420
|
+
- Solo podes escribir archivos dentro de ${contextDir}/
|
|
1421
|
+
- NO crees archivos sueltos en la raiz de ${contextDir}/ (excepto architecture.md)
|
|
1422
|
+
- Por componente usa: ${contextDir}/<componente>/architecture.md
|
|
1423
|
+
- Por modulo usa: ${contextDir}/<componente>/modules/<modulo>.md
|
|
1424
|
+
- Si existe documentacion previa, ACTUALIZALA preservando lo valido`);
|
|
1243
1425
|
let result;
|
|
1244
1426
|
const sp = this._startSpinner(`agent-explorer ${role.model}`);
|
|
1245
1427
|
try {
|