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.
@@ -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} - Agent Entry Point\n\n## Navegacion por rol\n| Si sos... | Lee primero... |\n|-----------|----------------|\n| ORCHESTRATOR | .agent/rules/workflow.md |\n| IMPLEMENTOR | .agent/tasks/{ID}/plan.json |\n| REVIEWER | .agent/rules/workflow.md |\n`,
409
- '.agent/rules/workflow.md': '# Agent Workflow Contract\n\n## REGLA #1 - Separacion de roles\nUn rol NUNCA ejecuta acciones de otro rol.\n\n## Roles\n- ORCHESTRATOR: planifica\n- IMPLEMENTOR: ejecuta\n- REVIEWER: valida\n',
410
- '.agent/rules/structure.md': '# Estructura\n\n## Aprobados\n.\n\n## Prohibidos\nnode_modules, dist, .git\n',
411
- '.agent/rules/patterns.md': '# Patrones\n\n- kebab-case: archivos\n- PascalCase: clases\n- camelCase: variables\n',
412
- '.agent/context/architecture.md': '# Arquitectura - NIVEL 0\n\n| Servicio | Stack | Puerto | Detalle |\n|----------|-------|--------|---------|\n| - | - | - | - |\n',
413
- '.agent/AGENT.md': '# Sub-Agentes\n\n1. Lee .agent/INDEX.md\n2. Lee .agent/rules/workflow.md\n3. Actua SOLO dentro de tu rol\n',
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 });
@@ -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|-----------|----------------|\n| ORCHESTRATOR | .agent/rules/workflow.md |\n| IMPLEMENTOR | .agent/tasks/{ID}/plan.json |\n| REVIEWER | .agent/rules/workflow.md |\n`,
297
- '.agent/rules/workflow.md': '# Agent Workflow Contract\n\n## REGLA #1 — Separacion de roles\nUn rol NUNCA ejecuta acciones de otro rol.\n\n## REGLA #2 — Un CLI NO cambia de rol\n\n## Roles\n- ORCHESTRATOR: planifica, genera plan.json\n- IMPLEMENTOR: ejecuta el plan\n- REVIEWER: valida, genera result.md\n',
298
- '.agent/rules/structure.md': '# Estructura\n\n## Aprobados\n.\n\n## Prohibidos\nnode_modules, dist, .git\n',
299
- '.agent/rules/patterns.md': '# Patrones\n\n- kebab-case para archivos\n- PascalCase para clases\n- camelCase para variables\n',
300
- '.agent/context/architecture.md': '# ArquitecturaNIVEL 0\n\n| Servicio | Stack | Puerto | Detalle |\n|----------|-------|--------|---------|\n| - | - | - | - |\n',
301
- '.agent/AGENT.md': '# Sub-Agentes\n\n1. Lee .agent/INDEX.md\n2. Lee .agent/rules/workflow.md\n3. Actua SOLO dentro de tu rol\n',
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 });
@@ -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(path.join(agentDir, 'rules'), { recursive: true });
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/docs/README.md ===
1595
- === .agent/docs/auth.md ===
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
- // Detect routing: .agent/docs/ docsDir, .agent/context/ contextDir
1650
- const isDocsFile = /^\.agent[\/\\]docs[\/\\]/i.test(fileName);
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 (isDocsFile) {
1653
- // .agent/docs/README.md → docsDir/README.md
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
- // .agent/context/ files (existing behaviour)
1662
- const relPath = fileName.replace(/^\.agent\/context\//i, '').replace(/^\/+/, '');
1663
- if (relPath === 'architecture.md' || relPath === 'ARCHITECTURE.md') {
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
- const pathParts = relPath.split(/[\/\\]/).filter(Boolean);
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: fileName.trim() });
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.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-mp",
3
- "version": "0.5.19",
3
+ "version": "0.5.21",
4
4
  "description": "Deterministic multi-agent CLI orchestrator — plan, code, review",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",