@grec0/memory-bank-mcp 0.1.1 → 0.1.3
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/README.md +160 -4
- package/dist/common/projectKnowledgeService.js +74 -0
- package/dist/index.js +393 -20
- package/dist/tools/analyzeCoverage.js +1 -1
- package/dist/tools/initializeMemoryBank.js +364 -0
- package/dist/tools/recordDecision.js +208 -0
- package/dist/tools/trackProgress.js +355 -0
- package/dist/tools/updateContext.js +201 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -40,12 +40,19 @@ Con Memory Bank, las IAs:
|
|
|
40
40
|
- **🔒 Privacidad**: Vector store local, respeta .gitignore y .memoryignore
|
|
41
41
|
- **🔀 Multi-Proyecto**: Consulta cualquier proyecto indexado usando su `projectId`
|
|
42
42
|
|
|
43
|
-
### Project Knowledge Layer (Conocimiento Global)
|
|
43
|
+
### Project Knowledge Layer (Conocimiento Global)
|
|
44
44
|
- **📄 Documentación Automática**: Genera 6 documentos markdown estructurados del proyecto
|
|
45
45
|
- **🧠 IA con Razonamiento**: Usa OpenAI Responses API con modelos de razonamiento (gpt-5-mini)
|
|
46
46
|
- **🔄 Actualización Inteligente**: Solo regenera documentos afectados por cambios
|
|
47
47
|
- **📚 Contexto Global**: Complementa búsqueda precisa con visión de alto nivel
|
|
48
48
|
|
|
49
|
+
### Context Management (Gestión de Sesión) 🆕
|
|
50
|
+
- **🚀 Inicialización Rápida**: Crea estructura de Memory Bank con plantillas iniciales (sin IA)
|
|
51
|
+
- **📝 Tracking de Sesión**: Registra contexto activo, cambios recientes y próximos pasos
|
|
52
|
+
- **📋 Log de Decisiones**: Documenta decisiones técnicas con rationale y alternativas
|
|
53
|
+
- **📊 Seguimiento de Progreso**: Gestiona tareas, milestones y blockers
|
|
54
|
+
- **📡 MCP Resources**: Acceso directo de solo lectura a documentos via URIs
|
|
55
|
+
|
|
49
56
|
## 📋 Requisitos
|
|
50
57
|
|
|
51
58
|
- **Node.js** >= 18.0.0
|
|
@@ -446,6 +453,153 @@ Lee la documentación del proyecto generada por IA.
|
|
|
446
453
|
|
|
447
454
|
---
|
|
448
455
|
|
|
456
|
+
## 🔄 Herramientas de Gestión de Contexto (Cline-style)
|
|
457
|
+
|
|
458
|
+
Estas herramientas permiten gestionar el contexto del proyecto de forma manual, complementando la generación automática con IA.
|
|
459
|
+
|
|
460
|
+
### `memorybank_initialize`
|
|
461
|
+
|
|
462
|
+
Inicializa el Memory Bank para un proyecto nuevo. Crea la estructura de directorios y 7 documentos markdown con plantillas iniciales. **No usa IA**.
|
|
463
|
+
|
|
464
|
+
**Parámetros:**
|
|
465
|
+
- `projectId` **(REQUERIDO)**: Identificador único del proyecto
|
|
466
|
+
- `projectPath` **(REQUERIDO)**: Ruta absoluta del proyecto
|
|
467
|
+
- `projectName` (opcional): Nombre legible del proyecto
|
|
468
|
+
- `description` (opcional): Descripción inicial del proyecto
|
|
469
|
+
|
|
470
|
+
**Ejemplo:**
|
|
471
|
+
```json
|
|
472
|
+
{
|
|
473
|
+
"projectId": "my-project",
|
|
474
|
+
"projectPath": "C:/workspaces/my-project",
|
|
475
|
+
"projectName": "My Awesome Project",
|
|
476
|
+
"description": "A web application for..."
|
|
477
|
+
}
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
**Documentos creados:**
|
|
481
|
+
- `projectBrief.md` - Descripción general
|
|
482
|
+
- `productContext.md` - Contexto de producto
|
|
483
|
+
- `systemPatterns.md` - Patrones de arquitectura
|
|
484
|
+
- `techContext.md` - Stack tecnológico
|
|
485
|
+
- `activeContext.md` - Contexto de sesión
|
|
486
|
+
- `progress.md` - Seguimiento de progreso
|
|
487
|
+
- `decisionLog.md` - Log de decisiones
|
|
488
|
+
|
|
489
|
+
### `memorybank_update_context`
|
|
490
|
+
|
|
491
|
+
Actualiza el contexto activo con información de la sesión actual. Mantiene historial de las últimas 10 sesiones. **No usa IA**.
|
|
492
|
+
|
|
493
|
+
**Parámetros:**
|
|
494
|
+
- `projectId` **(REQUERIDO)**: Identificador del proyecto
|
|
495
|
+
- `currentSession` (opcional): Información de sesión (date, mode, task)
|
|
496
|
+
- `recentChanges` (opcional): Lista de cambios recientes
|
|
497
|
+
- `openQuestions` (opcional): Preguntas pendientes
|
|
498
|
+
- `nextSteps` (opcional): Próximos pasos planificados
|
|
499
|
+
- `notes` (opcional): Notas adicionales
|
|
500
|
+
|
|
501
|
+
**Ejemplo:**
|
|
502
|
+
```json
|
|
503
|
+
{
|
|
504
|
+
"projectId": "my-project",
|
|
505
|
+
"currentSession": {
|
|
506
|
+
"mode": "development",
|
|
507
|
+
"task": "Implementing authentication"
|
|
508
|
+
},
|
|
509
|
+
"recentChanges": ["Added JWT middleware", "Created user model"],
|
|
510
|
+
"nextSteps": ["Add refresh token", "Create login endpoint"]
|
|
511
|
+
}
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
### `memorybank_record_decision`
|
|
515
|
+
|
|
516
|
+
Registra decisiones técnicas con rationale en el log de decisiones. **No usa IA**.
|
|
517
|
+
|
|
518
|
+
**Parámetros:**
|
|
519
|
+
- `projectId` **(REQUERIDO)**: Identificador del proyecto
|
|
520
|
+
- `decision` **(REQUERIDO)**: Objeto con información de la decisión
|
|
521
|
+
- `title` **(REQUERIDO)**: Título de la decisión
|
|
522
|
+
- `description` **(REQUERIDO)**: Qué se decidió
|
|
523
|
+
- `rationale` **(REQUERIDO)**: Por qué se tomó esta decisión
|
|
524
|
+
- `alternatives` (opcional): Alternativas consideradas
|
|
525
|
+
- `impact` (opcional): Impacto esperado
|
|
526
|
+
- `category` (opcional): architecture, technology, dependencies, etc.
|
|
527
|
+
|
|
528
|
+
**Ejemplo:**
|
|
529
|
+
```json
|
|
530
|
+
{
|
|
531
|
+
"projectId": "my-project",
|
|
532
|
+
"decision": {
|
|
533
|
+
"title": "JWT Authentication",
|
|
534
|
+
"description": "Use JWT tokens for API authentication",
|
|
535
|
+
"rationale": "Stateless, scalable, works well with microservices",
|
|
536
|
+
"alternatives": ["Session-based auth", "OAuth only"],
|
|
537
|
+
"category": "architecture"
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
### `memorybank_track_progress`
|
|
543
|
+
|
|
544
|
+
Actualiza el seguimiento de progreso con tareas, milestones y blockers. **No usa IA**.
|
|
545
|
+
|
|
546
|
+
**Parámetros:**
|
|
547
|
+
- `projectId` **(REQUERIDO)**: Identificador del proyecto
|
|
548
|
+
- `progress` (opcional): Tareas a actualizar
|
|
549
|
+
- `completed`: Tareas completadas
|
|
550
|
+
- `inProgress`: Tareas en progreso
|
|
551
|
+
- `blocked`: Tareas bloqueadas
|
|
552
|
+
- `upcoming`: Próximas tareas
|
|
553
|
+
- `milestone` (opcional): Milestone a añadir/actualizar (name, status, targetDate, notes)
|
|
554
|
+
- `blockers` (opcional): Lista de blockers con severidad (low/medium/high)
|
|
555
|
+
- `phase` (opcional): Fase actual del proyecto
|
|
556
|
+
- `phaseStatus` (opcional): Estado de la fase
|
|
557
|
+
|
|
558
|
+
**Ejemplo:**
|
|
559
|
+
```json
|
|
560
|
+
{
|
|
561
|
+
"projectId": "my-project",
|
|
562
|
+
"progress": {
|
|
563
|
+
"completed": ["Setup project structure", "Configure ESLint"],
|
|
564
|
+
"inProgress": ["Implement user authentication"],
|
|
565
|
+
"upcoming": ["Add unit tests"]
|
|
566
|
+
},
|
|
567
|
+
"milestone": {
|
|
568
|
+
"name": "MVP",
|
|
569
|
+
"status": "in_progress",
|
|
570
|
+
"targetDate": "2026-02-01"
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
---
|
|
576
|
+
|
|
577
|
+
## 📡 MCP Resources (Acceso Directo)
|
|
578
|
+
|
|
579
|
+
Memory Bank expone recursos MCP para acceso directo de solo lectura a los documentos del proyecto.
|
|
580
|
+
|
|
581
|
+
| Resource URI | Contenido |
|
|
582
|
+
|--------------|-----------|
|
|
583
|
+
| `memory://{projectId}/active` | Contexto activo de sesión |
|
|
584
|
+
| `memory://{projectId}/progress` | Seguimiento de progreso |
|
|
585
|
+
| `memory://{projectId}/decisions` | Log de decisiones técnicas |
|
|
586
|
+
| `memory://{projectId}/context` | Contexto del proyecto (brief + tech) |
|
|
587
|
+
| `memory://{projectId}/patterns` | Patrones de sistema |
|
|
588
|
+
| `memory://{projectId}/brief` | Descripción del proyecto |
|
|
589
|
+
|
|
590
|
+
**Ejemplo de uso:**
|
|
591
|
+
```
|
|
592
|
+
// Acceder al contexto activo del proyecto "my-project"
|
|
593
|
+
memory://my-project/active
|
|
594
|
+
|
|
595
|
+
// Acceder al log de decisiones
|
|
596
|
+
memory://my-project/decisions
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
Los recursos son de solo lectura. Para modificar documentos, usa las herramientas correspondientes (`memorybank_update_context`, `memorybank_record_decision`, etc.).
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
449
603
|
## 📋 Plantillas de Instrucciones para Agentes
|
|
450
604
|
|
|
451
605
|
Memory Bank incluye plantillas de instrucciones en dos formatos para configurar el comportamiento del agente:
|
|
@@ -751,7 +905,7 @@ npm test -- --coverage
|
|
|
751
905
|
1. **Aumenta `minScore`**: Usa 0.8 o 0.9 para resultados más precisos
|
|
752
906
|
2. **Usa filtros**: `filterByFile` o `filterByLanguage`
|
|
753
907
|
3. **Reformula la query**: Sé más específico y descriptivo
|
|
754
|
-
4. **Reindexa**: `memorybank_index_code({
|
|
908
|
+
4. **Reindexa**: `memorybank_index_code({ path: "..." })` (detecta cambios automáticamente por hash)
|
|
755
909
|
|
|
756
910
|
### Error: "projectId is required"
|
|
757
911
|
|
|
@@ -763,15 +917,17 @@ npm test -- --coverage
|
|
|
763
917
|
memorybank_get_stats({})
|
|
764
918
|
```
|
|
765
919
|
|
|
766
|
-
Si `pendingFiles` muestra archivos pendientes:
|
|
920
|
+
Si `pendingFiles` muestra archivos pendientes, reindexa el directorio:
|
|
767
921
|
|
|
768
922
|
```json
|
|
769
923
|
{
|
|
770
924
|
"projectId": "my-project",
|
|
771
|
-
"
|
|
925
|
+
"path": "C:/workspaces/mi-proyecto/src"
|
|
772
926
|
}
|
|
773
927
|
```
|
|
774
928
|
|
|
929
|
+
El sistema detecta cambios por hash automáticamente. Solo usa `forceReindex: true` si necesitas regenerar embeddings aunque no haya cambios.
|
|
930
|
+
|
|
775
931
|
---
|
|
776
932
|
|
|
777
933
|
## 📖 Documentación Adicional
|
|
@@ -607,6 +607,80 @@ ${chunk.content}
|
|
|
607
607
|
documents: documents,
|
|
608
608
|
};
|
|
609
609
|
}
|
|
610
|
+
// ==========================================
|
|
611
|
+
// Project-specific document methods (for MCP Resources)
|
|
612
|
+
// ==========================================
|
|
613
|
+
/**
|
|
614
|
+
* Gets the docs path for a specific project
|
|
615
|
+
*/
|
|
616
|
+
getProjectDocsPath(projectId) {
|
|
617
|
+
const storagePath = process.env.MEMORYBANK_STORAGE_PATH || ".memorybank";
|
|
618
|
+
return path.join(storagePath, "projects", projectId, "docs");
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Checks if a project's Memory Bank is initialized
|
|
622
|
+
*/
|
|
623
|
+
isProjectInitialized(projectId) {
|
|
624
|
+
const docsPath = this.getProjectDocsPath(projectId);
|
|
625
|
+
return fs.existsSync(docsPath);
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* Reads a specific document for a project (for MCP Resources)
|
|
629
|
+
*/
|
|
630
|
+
getProjectDocument(projectId, docName) {
|
|
631
|
+
const docsPath = this.getProjectDocsPath(projectId);
|
|
632
|
+
// Map document names to filenames
|
|
633
|
+
const docMap = {
|
|
634
|
+
"projectBrief": "projectBrief.md",
|
|
635
|
+
"productContext": "productContext.md",
|
|
636
|
+
"systemPatterns": "systemPatterns.md",
|
|
637
|
+
"techContext": "techContext.md",
|
|
638
|
+
"activeContext": "activeContext.md",
|
|
639
|
+
"progress": "progress.md",
|
|
640
|
+
"decisionLog": "decisionLog.md",
|
|
641
|
+
"decisions": "decisionLog.md", // Alias
|
|
642
|
+
"active": "activeContext.md", // Alias
|
|
643
|
+
"context": "projectBrief.md", // Alias - returns project brief
|
|
644
|
+
"patterns": "systemPatterns.md", // Alias
|
|
645
|
+
"brief": "projectBrief.md", // Alias
|
|
646
|
+
"tech": "techContext.md", // Alias
|
|
647
|
+
"product": "productContext.md", // Alias
|
|
648
|
+
};
|
|
649
|
+
const filename = docMap[docName] || `${docName}.md`;
|
|
650
|
+
const filePath = path.join(docsPath, filename);
|
|
651
|
+
if (!fs.existsSync(filePath)) {
|
|
652
|
+
return null;
|
|
653
|
+
}
|
|
654
|
+
return fs.readFileSync(filePath, "utf-8");
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* Gets combined project context (projectBrief + techContext)
|
|
658
|
+
*/
|
|
659
|
+
getProjectContext(projectId) {
|
|
660
|
+
const brief = this.getProjectDocument(projectId, "projectBrief");
|
|
661
|
+
const tech = this.getProjectDocument(projectId, "techContext");
|
|
662
|
+
if (!brief && !tech)
|
|
663
|
+
return null;
|
|
664
|
+
let content = "# Project Context\n\n";
|
|
665
|
+
if (brief) {
|
|
666
|
+
content += brief + "\n\n---\n\n";
|
|
667
|
+
}
|
|
668
|
+
if (tech) {
|
|
669
|
+
content += tech;
|
|
670
|
+
}
|
|
671
|
+
return content;
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Lists all available documents for a project
|
|
675
|
+
*/
|
|
676
|
+
listProjectDocuments(projectId) {
|
|
677
|
+
const docsPath = this.getProjectDocsPath(projectId);
|
|
678
|
+
if (!fs.existsSync(docsPath)) {
|
|
679
|
+
return [];
|
|
680
|
+
}
|
|
681
|
+
const files = fs.readdirSync(docsPath);
|
|
682
|
+
return files.filter(f => f.endsWith(".md"));
|
|
683
|
+
}
|
|
610
684
|
}
|
|
611
685
|
/**
|
|
612
686
|
* Creates a Project Knowledge Service from environment variables
|