agent-mp 0.5.19 → 0.5.21
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/commands/repl.js +9 -6
- package/dist/commands/setup.js +9 -6
- package/dist/core/engine.js +34 -101
- package/package.json +1 -1
package/dist/commands/repl.js
CHANGED
|
@@ -405,12 +405,15 @@ async function cmdSetup(rl) {
|
|
|
405
405
|
await writeJson(path.join(projectDir, '.agent', 'config.json'), agentConfig);
|
|
406
406
|
console.log(chalk.green(' .agent/config.json generated'));
|
|
407
407
|
const templates = {
|
|
408
|
-
'.agent/INDEX.md': `# ${projectName}
|
|
409
|
-
'.agent/rules/workflow.md':
|
|
410
|
-
'.agent/rules/
|
|
411
|
-
'.agent/rules/
|
|
412
|
-
'.agent/
|
|
413
|
-
'.agent/
|
|
408
|
+
'.agent/INDEX.md': `# ${projectName} — Agent Entry Point\n\n> Leé este archivo antes de cualquier accion.\n\n## Proyecto\n${projectName}\n\n## Navegacion por rol\n| Si sos... | Lee primero... | Luego... |\n|-----------|----------------|----------|\n| ORCHESTRATOR | .agent/rules/workflow.md | .agent/rules/orchestrator.md |\n| IMPLEMENTOR | .agent/rules/implementor.md | .agent/tasks/{ID}/plan.json |\n| REVIEWER | .agent/rules/reviewer.md | .agent/rules/workflow.md |\n\n## Contexto del proyecto\n- Arquitectura: .agent/context/architecture.md\n- Stack: ver .agent/config.json\n`,
|
|
409
|
+
'.agent/rules/workflow.md': `# Workflow Contract — ${projectName}\n\n## Flujo general\n\`\`\`\n[ORCHESTRATOR] planifica → genera plan.json\n ↓\n[IMPLEMENTOR] ejecuta el plan → modifica archivos\n ↓\n[REVIEWER] valida → genera result.md\n\`\`\`\n\n## REGLA #1 — Separacion de roles\nCada CLI opera SOLO en su rol. Nunca ejecuta acciones de otro rol.\n\n## REGLA #2 — Orden estricto\nOrchestrator siempre primero. Implementor no actua sin plan. Reviewer no actua sin implementacion.\n\n## REGLA #3 — Sin inventar\nCada rol trabaja con los archivos reales del proyecto. No asume ni infiere sin leer.\n`,
|
|
410
|
+
'.agent/rules/orchestrator.md': `# Rol: ORCHESTRATOR — ${projectName}\n\n## Responsabilidad\nAnalizar el requerimiento, leer el contexto del proyecto y generar un plan de tareas claro y ejecutable.\n\n## Antes de planificar\n1. Leer .agent/context/architecture.md para entender los componentes\n2. Leer .agent/rules/structure.md para saber qué dirs son validos\n3. Leer .agent/rules/patterns.md para respetar convenciones del proyecto\n\n## Al generar el plan\n- Dividir el trabajo en pasos atomicos (1 paso = 1 cambio verificable)\n- Especificar rutas de archivos REALES (no genericas)\n- Indicar dependencias entre pasos si las hay\n\n## Prohibido\n- Modificar archivos de codigo directamente\n- Ejecutar comandos de build o test\n`,
|
|
411
|
+
'.agent/rules/implementor.md': `# Rol: IMPLEMENTOR — ${projectName}\n\n## Responsabilidad\nEjecutar el plan generado por el Orchestrator. Modificar archivos de codigo siguiendo las instrucciones exactas del plan.\n\n## Antes de implementar\n1. Leer .agent/tasks/{ID}/plan.json completo\n2. Leer .agent/rules/structure.md — no crear archivos en dirs prohibidos\n3. Leer .agent/rules/patterns.md — respetar convenciones\n\n## Al implementar\n- Seguir el plan paso a paso, en orden\n- No agregar cambios fuera del scope del plan\n- Marcar cada paso como completado al terminarlo\n\n## Prohibido\n- Modificar el plan\n- Hacer refactors no solicitados\n`,
|
|
412
|
+
'.agent/rules/reviewer.md': `# Rol: REVIEWER — ${projectName}\n\n## Responsabilidad\nValidar que la implementacion cumple el plan y respeta las reglas del proyecto.\n\n## Checklist de revision\n- [ ] Cada paso del plan fue implementado\n- [ ] No se modificaron archivos fuera del scope\n- [ ] Se respetan las convenciones de .agent/rules/patterns.md\n- [ ] La estructura cumple .agent/rules/structure.md\n- [ ] No hay codigo muerto ni imports sin usar\n\n## Al generar result.md\n- Indicar cada item como OK / FAIL / SKIP con razon\n- Si hay FAILs: describir exactamente que falta y en que archivo\n\n## Prohibido\n- Modificar archivos de codigo directamente\n- Aprobar implementaciones incompletas\n`,
|
|
413
|
+
'.agent/rules/structure.md': `# Estructura del proyecto — ${projectName}\n\n## Directorios aprobados\n- . (raiz del proyecto)\n\n## Directorios prohibidos\n- node_modules/\n- dist/\n- .git/\n- build/\n- target/\n- __pycache__/\n`,
|
|
414
|
+
'.agent/rules/patterns.md': `# Patrones y convenciones — ${projectName}\n\n## Nombrado\n- Archivos: kebab-case\n- Clases: PascalCase\n- Variables y funciones: camelCase\n- Constantes: UPPER_SNAKE_CASE\n\n## Reglas generales\n- No dejar console.log de debug en codigo productivo\n- Un archivo = una responsabilidad principal\n`,
|
|
415
|
+
'.agent/context/architecture.md': '# Arquitectura — NIVEL 0\n\n> Ejecuta `agent-mp explorer` para generar documentacion automatica.\n\n| Componente | Stack | Puerto | Proposito |\n|------------|-------|--------|-----------|\n| - | - | - | - |\n',
|
|
416
|
+
'.agent/AGENT.md': `# Instrucciones para Sub-Agentes — ${projectName}\n\n## Paso 1: Identificar tu rol\nLee .agent/INDEX.md para saber que archivo leer segun tu rol.\n\n## Paso 2: Leer el contexto\nAntes de cualquier accion, lee .agent/context/architecture.md.\n\n## Paso 3: Actua SOLO dentro de tu rol\nVer .agent/rules/workflow.md para las reglas de separacion de roles.\n`,
|
|
414
417
|
};
|
|
415
418
|
for (const [fp, content] of Object.entries(templates)) {
|
|
416
419
|
await fs.mkdir(path.join(projectDir, path.dirname(fp)), { recursive: true });
|
package/dist/commands/setup.js
CHANGED
|
@@ -293,12 +293,15 @@ export function setupCommand(program) {
|
|
|
293
293
|
console.log(chalk.green(' ✓ .agent/config.json generated'));
|
|
294
294
|
// Generate templates
|
|
295
295
|
const templates = {
|
|
296
|
-
'.agent/INDEX.md': `# ${projectName} — Agent Entry Point\n\n> Leé este archivo antes de cualquier accion.\n\n## Proyecto\n\n## Navegacion por rol\n| Si sos... | Lee primero... |\n
|
|
297
|
-
'.agent/rules/workflow.md':
|
|
298
|
-
'.agent/rules/
|
|
299
|
-
'.agent/rules/
|
|
300
|
-
'.agent/
|
|
301
|
-
'.agent/
|
|
296
|
+
'.agent/INDEX.md': `# ${projectName} — Agent Entry Point\n\n> Leé este archivo antes de cualquier accion.\n\n## Proyecto\n${projectName}\n\n## Navegacion por rol\n| Si sos... | Lee primero... | Luego... |\n|-----------|----------------|----------|\n| ORCHESTRATOR | .agent/rules/workflow.md | .agent/rules/orchestrator.md |\n| IMPLEMENTOR | .agent/rules/implementor.md | .agent/tasks/{ID}/plan.json |\n| REVIEWER | .agent/rules/reviewer.md | .agent/rules/workflow.md |\n\n## Contexto del proyecto\n- Arquitectura: .agent/context/architecture.md\n- Stack: ver .agent/config.json\n`,
|
|
297
|
+
'.agent/rules/workflow.md': `# Workflow Contract — ${projectName}\n\n## Flujo general\n\`\`\`\n[ORCHESTRATOR] planifica → genera plan.json\n ↓\n[IMPLEMENTOR] ejecuta el plan → modifica archivos\n ↓\n[REVIEWER] valida → genera result.md\n\`\`\`\n\n## REGLA #1 — Separacion de roles\nCada CLI opera SOLO en su rol. Nunca ejecuta acciones de otro rol.\n\n## REGLA #2 — Orden estricto\nOrchestrator siempre primero. Implementor no actua sin plan. Reviewer no actua sin implementacion.\n\n## REGLA #3 — Sin inventar\nCada rol trabaja con los archivos reales del proyecto. No asume ni infiere sin leer.\n\n## REGLA #4 — Escalada\nSi un rol encuentra un bloqueante, lo reporta. No lo omite ni lo parchea silenciosamente.\n`,
|
|
298
|
+
'.agent/rules/orchestrator.md': `# Rol: ORCHESTRATOR — ${projectName}\n\n## Responsabilidad\nAnalizar el requerimiento, leer el contexto del proyecto y generar un plan de tareas claro y ejecutable.\n\n## Antes de planificar\n1. Leer .agent/context/architecture.md para entender los componentes\n2. Leer .agent/rules/structure.md para saber qué dirs son validos\n3. Leer .agent/rules/patterns.md para respetar convenciones del proyecto\n\n## Al generar el plan\n- Dividir el trabajo en pasos atómicos (1 paso = 1 cambio verificable)\n- Especificar rutas de archivos REALES (no genéricas)\n- Indicar dependencias entre pasos si las hay\n- Estimar impacto: qué puede romperse con cada cambio\n\n## Prohibido\n- Modificar archivos de código directamente\n- Ejecutar comandos de build o test\n- Tomar decisiones de arquitectura sin documentarlas en el plan\n`,
|
|
299
|
+
'.agent/rules/implementor.md': `# Rol: IMPLEMENTOR — ${projectName}\n\n## Responsabilidad\nEjecutar el plan generado por el Orchestrator. Modificar archivos de código siguiendo las instrucciones exactas del plan.\n\n## Antes de implementar\n1. Leer .agent/tasks/{ID}/plan.json completo\n2. Leer .agent/rules/structure.md — no crear archivos en dirs prohibidos\n3. Leer .agent/rules/patterns.md — respetar convenciones de nombres y estructura\n\n## Al implementar\n- Seguir el plan paso a paso, en orden\n- Si un paso no es claro, documentar la ambigüedad, no improvisar\n- Marcar cada paso como completado al terminarlo\n- No agregar cambios fuera del scope del plan\n\n## Prohibido\n- Modificar el plan (eso es rol del Orchestrator)\n- Hacer refactors no solicitados\n- Ignorar pasos del plan aunque parezcan redundantes\n`,
|
|
300
|
+
'.agent/rules/reviewer.md': `# Rol: REVIEWER — ${projectName}\n\n## Responsabilidad\nValidar que la implementacion cumple el plan, no rompe nada existente y respeta las reglas del proyecto.\n\n## Checklist de revision\n- [ ] Cada paso del plan fue implementado\n- [ ] No se modificaron archivos fuera del scope del plan\n- [ ] Se respetan las convenciones de .agent/rules/patterns.md\n- [ ] La estructura de dirs cumple .agent/rules/structure.md\n- [ ] No hay codigo muerto ni imports sin usar introducidos\n- [ ] Si hay tests, pasaron\n\n## Al generar result.md\n- Indicar cada item del checklist como OK / FAIL / SKIP con razon\n- Si hay FAILs: describir exactamente qué falta y en qué archivo\n- Si todo OK: marcar la tarea como DONE\n\n## Prohibido\n- Modificar archivos de código directamente\n- Aprobar implementaciones incompletas\n- Omitir items del checklist\n`,
|
|
301
|
+
'.agent/rules/structure.md': `# Estructura del proyecto — ${projectName}\n\n## Directorios aprobados\n- . (raiz del proyecto)\n\n## Directorios prohibidos (no crear ni modificar archivos aca)\n- node_modules/\n- dist/\n- .git/\n- build/\n- target/\n- __pycache__/\n- .venv/\n\n## Convenciones de ubicacion\n- Codigo fuente: src/\n- Tests: src/**/*.test.* o tests/\n- Config: raiz del componente\n- Scripts: scripts/\n`,
|
|
302
|
+
'.agent/rules/patterns.md': `# Patrones y convenciones — ${projectName}\n\n## Nombrado\n- Archivos: kebab-case (mi-archivo.ts)\n- Clases: PascalCase (MiClase)\n- Variables y funciones: camelCase (miVariable)\n- Constantes: UPPER_SNAKE_CASE (MI_CONSTANTE)\n\n## Estructura de commits\n- feat: nueva funcionalidad\n- fix: correccion de bug\n- chore: tareas de mantenimiento\n- docs: solo documentacion\n\n## Reglas generales\n- No dejar console.log / print de debug en código productivo\n- Un archivo = una responsabilidad principal\n- Preferir cambios pequeños y verificables sobre refactors grandes\n`,
|
|
303
|
+
'.agent/context/architecture.md': '# Arquitectura — NIVEL 0\n\n> Ejecuta `agent-mp explorer` para generar documentacion automatica.\n\n| Componente | Stack | Puerto | Proposito |\n|------------|-------|--------|-----------|\n| - | - | - | - |\n',
|
|
304
|
+
'.agent/AGENT.md': `# Instrucciones para Sub-Agentes — ${projectName}\n\n## Paso 1: Identificar tu rol\nLee .agent/INDEX.md para saber que archivo leer segun tu rol.\n\n## Paso 2: Leer el contexto\nAntes de cualquier accion, lee .agent/context/architecture.md.\n\n## Paso 3: Actua SOLO dentro de tu rol\nVer .agent/rules/workflow.md para las reglas de separacion de roles.\n`,
|
|
302
305
|
};
|
|
303
306
|
for (const [fp, content] of Object.entries(templates)) {
|
|
304
307
|
await fs.mkdir(path.join(projectDir, path.dirname(fp)), { recursive: true });
|
package/dist/core/engine.js
CHANGED
|
@@ -1194,9 +1194,29 @@ INSTRUCCIONES:
|
|
|
1194
1194
|
const agentDir = path.join(this.projectDir, '.agent');
|
|
1195
1195
|
const contextDir = path.join(agentDir, 'context');
|
|
1196
1196
|
const docsDir = path.join(agentDir, 'docs');
|
|
1197
|
+
const rulesDir = path.join(agentDir, 'rules');
|
|
1197
1198
|
await fs.mkdir(contextDir, { recursive: true });
|
|
1198
1199
|
await fs.mkdir(docsDir, { recursive: true });
|
|
1199
|
-
await fs.mkdir(
|
|
1200
|
+
await fs.mkdir(rulesDir, { recursive: true });
|
|
1201
|
+
// Seed rules files if they don't exist yet (idempotent — never overwrites)
|
|
1202
|
+
const proj = this.config.project;
|
|
1203
|
+
const rulesSeeds = {
|
|
1204
|
+
'workflow.md': `# Workflow Contract — ${proj}\n\n\`\`\`\n[ORCHESTRATOR] planifica → genera plan.json\n ↓\n[IMPLEMENTOR] ejecuta el plan → modifica archivos\n ↓\n[REVIEWER] valida → genera result.md\n\`\`\`\n\n## REGLA #1 — Separacion de roles\nCada CLI opera SOLO en su rol.\n\n## REGLA #2 — Orden estricto\nOrchestrator primero. Implementor no actua sin plan. Reviewer no actua sin implementacion.\n\n## REGLA #3 — Sin inventar\nCada rol trabaja con los archivos reales del proyecto.\n`,
|
|
1205
|
+
'orchestrator.md': `# Rol: ORCHESTRATOR — ${proj}\n\n## Responsabilidad\nAnalizar el requerimiento, leer el contexto y generar un plan de tareas ejecutable.\n\n## Antes de planificar\n1. Leer .agent/context/architecture.md\n2. Leer .agent/rules/structure.md\n3. Leer .agent/rules/patterns.md\n\n## Al generar el plan\n- Pasos atomicos (1 paso = 1 cambio verificable)\n- Rutas de archivos REALES\n- Dependencias entre pasos si las hay\n\n## Prohibido\n- Modificar archivos de codigo directamente\n- Ejecutar comandos de build o test\n`,
|
|
1206
|
+
'implementor.md': `# Rol: IMPLEMENTOR — ${proj}\n\n## Responsabilidad\nEjecutar el plan del Orchestrator. Modificar archivos de codigo siguiendo las instrucciones exactas.\n\n## Antes de implementar\n1. Leer .agent/tasks/{ID}/plan.json completo\n2. Leer .agent/rules/structure.md\n3. Leer .agent/rules/patterns.md\n\n## Al implementar\n- Seguir el plan paso a paso, en orden\n- No agregar cambios fuera del scope\n- Marcar cada paso como completado\n\n## Prohibido\n- Modificar el plan\n- Hacer refactors no solicitados\n`,
|
|
1207
|
+
'reviewer.md': `# Rol: REVIEWER — ${proj}\n\n## Responsabilidad\nValidar que la implementacion cumple el plan y respeta las reglas del proyecto.\n\n## Checklist\n- [ ] Cada paso del plan fue implementado\n- [ ] Sin archivos modificados fuera del scope\n- [ ] Convenciones de patterns.md respetadas\n- [ ] Estructura de structure.md respetada\n- [ ] Sin codigo muerto ni imports sin usar\n\n## Al generar result.md\n- Indicar cada item: OK / FAIL / SKIP con razon\n- Si FAILs: describir qué falta y en qué archivo\n\n## Prohibido\n- Modificar archivos de codigo\n- Aprobar implementaciones incompletas\n`,
|
|
1208
|
+
'structure.md': `# Estructura — ${proj}\n\n## Directorios aprobados\n- . (raiz del proyecto)\n\n## Prohibidos\n- node_modules/, dist/, .git/, build/, target/, __pycache__/, .venv/\n`,
|
|
1209
|
+
'patterns.md': `# Patrones — ${proj}\n\n## Nombrado\n- Archivos: kebab-case\n- Clases: PascalCase\n- Variables/funciones: camelCase\n- Constantes: UPPER_SNAKE_CASE\n\n## Reglas generales\n- Sin console.log de debug en produccion\n- Un archivo = una responsabilidad principal\n`,
|
|
1210
|
+
};
|
|
1211
|
+
for (const [name, content] of Object.entries(rulesSeeds)) {
|
|
1212
|
+
const fp = path.join(rulesDir, name);
|
|
1213
|
+
try {
|
|
1214
|
+
await fs.access(fp);
|
|
1215
|
+
}
|
|
1216
|
+
catch {
|
|
1217
|
+
await writeFile(fp, content);
|
|
1218
|
+
} // only create if missing
|
|
1219
|
+
}
|
|
1200
1220
|
// NOTE: cleanup of stray files moved to AFTER successful parse, to avoid
|
|
1201
1221
|
// wiping previous docs when the explorer fails (e.g. tool-call hallucination).
|
|
1202
1222
|
// Build a quick filesystem snapshot to give the explorer context
|
|
@@ -1513,73 +1533,6 @@ QUE NO HACER
|
|
|
1513
1533
|
- NO documentar componentes triviales (scripts, docs, configs sueltas) con su propia carpeta — mencionalos en NIVEL 0 y listo
|
|
1514
1534
|
- NO inventar endpoints, env vars, puertos o schemas que no leiste
|
|
1515
1535
|
|
|
1516
|
-
================================================================
|
|
1517
|
-
DIRECTORIO .agent/docs/ — FLUJOS POR FUNCIONALIDAD (orientado a desarrolladores)
|
|
1518
|
-
================================================================
|
|
1519
|
-
Ademas de los archivos de context/, generar docs de flujos. Objetivo: un dev que llega al proyecto puede buscar "como funciona el login" o "donde esta el endpoint de clientes" y encontrar exactamente que archivos tocar, en que orden, y por que.
|
|
1520
|
-
|
|
1521
|
-
Generar UN archivo por cada flujo funcional principal que puedas identificar de los CONTROLLER/ROUTER leidos.
|
|
1522
|
-
Si no hay controllers, inferir los flujos desde el MANIFEST y el ENTRY POINT.
|
|
1523
|
-
|
|
1524
|
-
INDICE OBLIGATORIO:
|
|
1525
|
-
=== .agent/docs/README.md ===
|
|
1526
|
-
# Flujos del proyecto — Indice
|
|
1527
|
-
|
|
1528
|
-
| Flujo | Descripcion | Componente(s) |
|
|
1529
|
-
|-------|-------------|---------------|
|
|
1530
|
-
| [nombre-flujo](nombre-flujo.md) | 1 linea que explica que hace | componente-a, componente-b |
|
|
1531
|
-
...
|
|
1532
|
-
|
|
1533
|
-
POR CADA FLUJO:
|
|
1534
|
-
=== .agent/docs/[nombre-flujo].md ===
|
|
1535
|
-
Nombre del archivo: kebab-case del nombre del flujo (auth.md, crear-cliente.md, consulta-ventas.md)
|
|
1536
|
-
|
|
1537
|
-
Estructura de cada archivo de flujo:
|
|
1538
|
-
|
|
1539
|
-
# Flujo: [Nombre legible]
|
|
1540
|
-
|
|
1541
|
-
## Qué hace
|
|
1542
|
-
1 linea en lenguaje de negocio: "Permite al usuario X hacer Y"
|
|
1543
|
-
|
|
1544
|
-
## Componentes involucrados
|
|
1545
|
-
- [componente-a]: rol en este flujo
|
|
1546
|
-
- [componente-b]: rol en este flujo
|
|
1547
|
-
|
|
1548
|
-
## Traza técnica paso a paso
|
|
1549
|
-
Numberar cada paso. Incluir archivo y funcion/clase cuando fue leido.
|
|
1550
|
-
1. Cliente/Frontend → METODO /ruta/endpoint (archivo: ruta/al/Controller)
|
|
1551
|
-
2. Middleware/Guard/Filter valida/transforma (archivo: ruta/al/Filter o Config)
|
|
1552
|
-
3. Service/UseCase ejecuta la logica (archivo: ruta/al/Service)
|
|
1553
|
-
4. Repository/DAO consulta o escribe en DB (archivo: ruta/al/Repository → tabla o coleccion)
|
|
1554
|
-
5. Respuesta: codigo HTTP + shape de respuesta
|
|
1555
|
-
|
|
1556
|
-
## Archivos involucrados y por qué
|
|
1557
|
-
Esta tabla es lo mas importante para un dev nuevo: tiene que saber QUE archivo y POR QUE esta en el flujo.
|
|
1558
|
-
| Archivo (ruta relativa al componente) | Por que esta en este flujo |
|
|
1559
|
-
|---------------------------------------|---------------------------|
|
|
1560
|
-
| ruta/Controller | Recibe el request y delega |
|
|
1561
|
-
| ruta/Service | Contiene la logica de negocio |
|
|
1562
|
-
| ruta/Repository | Lee o escribe en la base de datos |
|
|
1563
|
-
| ruta/Entity o Schema | Define la forma del dato |
|
|
1564
|
-
| ruta/Config o Filter | Aplica seguridad / transformacion |
|
|
1565
|
-
|
|
1566
|
-
## Variables / configuracion relevante
|
|
1567
|
-
Solo las que afectan directamente este flujo (env vars, properties, feature flags).
|
|
1568
|
-
|
|
1569
|
-
## Como probar este flujo
|
|
1570
|
-
- Endpoint: METODO /ruta
|
|
1571
|
-
- Body o params de ejemplo
|
|
1572
|
-
- Respuesta exitosa: codigo + campos
|
|
1573
|
-
- Errores comunes: codigo + cuando ocurre
|
|
1574
|
-
|
|
1575
|
-
================================================================
|
|
1576
|
-
CALIBRACION DE DETALLE — docs/
|
|
1577
|
-
================================================================
|
|
1578
|
-
- README.md: una fila por flujo, no mas
|
|
1579
|
-
- Por flujo: 30-80 lineas. Concreto. Si un paso no fue leido, omitirlo.
|
|
1580
|
-
- NO inventar nombres de archivos. Si no se leyo un Service para este flujo, no lo pongas.
|
|
1581
|
-
- Generar entre 2 y 8 flujos segun la cantidad de controllers/features encontrados.
|
|
1582
|
-
|
|
1583
1536
|
================================================================
|
|
1584
1537
|
FORMATO DE SALIDA — OBLIGATORIO
|
|
1585
1538
|
================================================================
|
|
@@ -1591,9 +1544,8 @@ Ejemplos de marcadores validos:
|
|
|
1591
1544
|
=== .agent/context/architecture.md ===
|
|
1592
1545
|
=== .agent/context/datamart-data-access-api/architecture.md ===
|
|
1593
1546
|
=== .agent/context/datamart-data-access-api/modules/auth.md ===
|
|
1594
|
-
=== .agent/
|
|
1595
|
-
=== .agent/
|
|
1596
|
-
=== .agent/docs/consulta-ventas.md ===
|
|
1547
|
+
=== .agent/context/nexus-core-api/architecture.md ===
|
|
1548
|
+
=== .agent/context/nexus-core-api/modules/clients.md ===
|
|
1597
1549
|
|
|
1598
1550
|
=== .agent/context/architecture.md ===
|
|
1599
1551
|
[contenido NIVEL 0]
|
|
@@ -1604,19 +1556,12 @@ Ejemplos de marcadores validos:
|
|
|
1604
1556
|
=== .agent/context/nombre-componente/modules/auth.md ===
|
|
1605
1557
|
[contenido NIVEL 2]
|
|
1606
1558
|
|
|
1607
|
-
=== .agent/docs/README.md ===
|
|
1608
|
-
[indice de flujos]
|
|
1609
|
-
|
|
1610
|
-
=== .agent/docs/auth.md ===
|
|
1611
|
-
[flujo de autenticacion]
|
|
1612
|
-
|
|
1613
1559
|
REGLAS DE PATHS:
|
|
1614
1560
|
- Arquitectura global: === .agent/context/architecture.md ===
|
|
1615
1561
|
- Por componente: === .agent/context/[nombre-componente]/architecture.md ===
|
|
1616
1562
|
- Por modulo interno: === .agent/context/[nombre-componente]/modules/[nombre-modulo].md ===
|
|
1617
|
-
- Indice de flujos: === .agent/docs/README.md ===
|
|
1618
|
-
- Por flujo: === .agent/docs/[nombre-flujo].md ===
|
|
1619
1563
|
- Documenta TODOS los componentes no triviales del DIRECTORIO_TRABAJO
|
|
1564
|
+
- NO escribir nada bajo .agent/docs/ — esa carpeta es de uso manual
|
|
1620
1565
|
- Si existe documentacion previa, ACTUALIZALA preservando lo que sigue siendo valido y agregando lo nuevo`;
|
|
1621
1566
|
const res = await this.runWithFallback('explorer', prompt, 'Exploracion');
|
|
1622
1567
|
const text = extractCliText(res);
|
|
@@ -1646,36 +1591,24 @@ REGLAS DE PATHS:
|
|
|
1646
1591
|
content = content.replace(/^```markdown\s*/i, '').replace(/^```\s*$/gm, '').trim();
|
|
1647
1592
|
if (!content)
|
|
1648
1593
|
continue;
|
|
1649
|
-
//
|
|
1650
|
-
const
|
|
1594
|
+
// All explorer output goes under .agent/context/ — docs/ is manual-only
|
|
1595
|
+
const relPath = fileName.replace(/^\.agent\/context\//i, '').replace(/^\/+/, '');
|
|
1651
1596
|
let targetPath = null;
|
|
1652
|
-
if (
|
|
1653
|
-
|
|
1654
|
-
// .agent/docs/auth.md → docsDir/auth.md
|
|
1655
|
-
const docsRel = fileName.replace(/^\.agent[\/\\]docs[\/\\]/i, '').replace(/^\/+/, '');
|
|
1656
|
-
if (docsRel && docsRel.endsWith('.md')) {
|
|
1657
|
-
targetPath = path.join(docsDir, ...docsRel.split(/[\/\\]/).filter(Boolean));
|
|
1658
|
-
}
|
|
1597
|
+
if (relPath === 'architecture.md' || relPath === 'ARCHITECTURE.md') {
|
|
1598
|
+
targetPath = mainArchPath;
|
|
1659
1599
|
}
|
|
1660
1600
|
else {
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
targetPath = mainArchPath;
|
|
1601
|
+
const pathParts = relPath.split(/[\/\\]/).filter(Boolean);
|
|
1602
|
+
if (pathParts.length >= 3 && pathParts[pathParts.length - 2] === 'modules') {
|
|
1603
|
+
targetPath = path.join(contextDir, pathParts[pathParts.length - 3], 'modules', pathParts[pathParts.length - 1]);
|
|
1665
1604
|
}
|
|
1666
|
-
else {
|
|
1667
|
-
|
|
1668
|
-
if (pathParts.length >= 3 && pathParts[pathParts.length - 2] === 'modules') {
|
|
1669
|
-
targetPath = path.join(contextDir, pathParts[pathParts.length - 3], 'modules', pathParts[pathParts.length - 1]);
|
|
1670
|
-
}
|
|
1671
|
-
else if (pathParts.length >= 2) {
|
|
1672
|
-
targetPath = path.join(contextDir, pathParts[pathParts.length - 2], pathParts[pathParts.length - 1]);
|
|
1673
|
-
}
|
|
1605
|
+
else if (pathParts.length >= 2) {
|
|
1606
|
+
targetPath = path.join(contextDir, pathParts[pathParts.length - 2], pathParts[pathParts.length - 1]);
|
|
1674
1607
|
}
|
|
1675
1608
|
}
|
|
1676
1609
|
if (!targetPath)
|
|
1677
1610
|
continue;
|
|
1678
|
-
pendingWrites.push({ targetPath, content, label:
|
|
1611
|
+
pendingWrites.push({ targetPath, content, label: relPath });
|
|
1679
1612
|
}
|
|
1680
1613
|
if (pendingWrites.length === 0) {
|
|
1681
1614
|
log.error('Explorer devolvio texto pero ningun bloque === *.md === fue parseable.');
|