memgrid 0.5.4 → 0.7.0

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 (44) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/learn/index.js +4 -4
  3. package/dist/learn/index.js.map +1 -1
  4. package/dist/learn/nlp.d.ts +32 -0
  5. package/dist/learn/nlp.d.ts.map +1 -0
  6. package/dist/learn/nlp.js +214 -0
  7. package/dist/learn/nlp.js.map +1 -0
  8. package/dist/retrieve/index.js +1 -1
  9. package/dist/retrieve/index.js.map +1 -1
  10. package/dist/scanner/config.d.ts.map +1 -1
  11. package/dist/scanner/config.js +1 -0
  12. package/dist/scanner/config.js.map +1 -1
  13. package/dist/scanner/golang.js +1 -1
  14. package/dist/scanner/golang.js.map +1 -1
  15. package/dist/scanner/typescript.d.ts.map +1 -1
  16. package/dist/scanner/typescript.js +1 -0
  17. package/dist/scanner/typescript.js.map +1 -1
  18. package/dist/serve/cli.js +42 -2
  19. package/dist/serve/cli.js.map +1 -1
  20. package/dist/serve/mcp-server.d.ts.map +1 -1
  21. package/dist/serve/mcp-server.js +32 -57
  22. package/dist/serve/mcp-server.js.map +1 -1
  23. package/dist/shared/types.d.ts +23 -0
  24. package/dist/shared/types.d.ts.map +1 -1
  25. package/dist/sync/index.d.ts.map +1 -1
  26. package/dist/sync/index.js +23 -0
  27. package/dist/sync/index.js.map +1 -1
  28. package/dist/sync/phases/architecture.d.ts +12 -0
  29. package/dist/sync/phases/architecture.d.ts.map +1 -0
  30. package/dist/sync/phases/architecture.js +104 -0
  31. package/dist/sync/phases/architecture.js.map +1 -0
  32. package/dist/sync/phases/associations.d.ts +12 -0
  33. package/dist/sync/phases/associations.d.ts.map +1 -0
  34. package/dist/sync/phases/associations.js +202 -0
  35. package/dist/sync/phases/associations.js.map +1 -0
  36. package/dist/sync/phases/learning.d.ts +13 -0
  37. package/dist/sync/phases/learning.d.ts.map +1 -0
  38. package/dist/sync/phases/learning.js +73 -0
  39. package/dist/sync/phases/learning.js.map +1 -0
  40. package/dist/sync/phases/patterns.d.ts +13 -0
  41. package/dist/sync/phases/patterns.d.ts.map +1 -0
  42. package/dist/sync/phases/patterns.js +102 -0
  43. package/dist/sync/phases/patterns.js.map +1 -0
  44. package/package.json +2 -2
@@ -0,0 +1,12 @@
1
+ import type { MemoryUnit } from '../../shared/types.js';
2
+ /**
3
+ * Phase 3: Rebuild associations for changed files.
4
+ *
5
+ * When code changes, existing associations (calls, imports, dependencies)
6
+ * may become stale. This phase re-analyzes changed files and updates
7
+ * method units with fresh associations.
8
+ */
9
+ export declare function analyzeAssociations(projectRoot: string, changedFiles: string[], units: Map<string, MemoryUnit>): {
10
+ newAssociations: number;
11
+ };
12
+ //# sourceMappingURL=associations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"associations.d.ts","sourceRoot":"","sources":["../../../src/sync/phases/associations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAC7B;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CA4F7B"}
@@ -0,0 +1,202 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Phase 3: Rebuild associations for changed files.
5
+ *
6
+ * When code changes, existing associations (calls, imports, dependencies)
7
+ * may become stale. This phase re-analyzes changed files and updates
8
+ * method units with fresh associations.
9
+ */
10
+ export function analyzeAssociations(projectRoot, changedFiles, units) {
11
+ let newAssociations = 0;
12
+ const unitByFile = new Map();
13
+ for (const unit of units.values()) {
14
+ if (!unit.source?.file)
15
+ continue;
16
+ const list = unitByFile.get(unit.source.file) || [];
17
+ list.push(unit);
18
+ unitByFile.set(unit.source.file, list);
19
+ }
20
+ for (const file of changedFiles) {
21
+ const abs = path.join(projectRoot, file);
22
+ if (!fs.existsSync(abs))
23
+ continue;
24
+ if (!file.endsWith('.ts') && !file.endsWith('.tsx'))
25
+ continue;
26
+ try {
27
+ const code = fs.readFileSync(abs, 'utf-8');
28
+ const importMap = buildImportMap(file, code, projectRoot);
29
+ const callMap = buildCallMap(code);
30
+ const fileUnits = unitByFile.get(file) || [];
31
+ for (const unit of fileUnits) {
32
+ if (unit.type !== 'method')
33
+ continue;
34
+ // Clear old associations (after task, rebuild fresh)
35
+ const oldCount = unit.associations.length;
36
+ unit.associations = [];
37
+ // Add dependencies from imports
38
+ for (const [importName, sourceFile] of importMap) {
39
+ if (!unit.signatures.some((s) => s.includes(importName)) &&
40
+ !unit.content.dependencies?.includes(importName))
41
+ continue;
42
+ const targetUnitId = findUnitByFile(units, sourceFile, importName);
43
+ if (targetUnitId) {
44
+ unit.associations.push({
45
+ to: targetUnitId,
46
+ relation: 'calls',
47
+ weight: 0.7,
48
+ });
49
+ }
50
+ }
51
+ // Add calls from call graph
52
+ const calls = callMap.get(unit.id) || [];
53
+ for (const callee of calls) {
54
+ const targetId = findUnitBySignature(units, callee);
55
+ if (targetId && targetId !== unit.id) {
56
+ if (!unit.associations.some((a) => a.to === targetId)) {
57
+ unit.associations.push({
58
+ to: targetId,
59
+ relation: 'calls',
60
+ weight: 0.6,
61
+ });
62
+ }
63
+ }
64
+ }
65
+ // Detect imports of architecture patterns
66
+ for (const [importName] of importMap) {
67
+ if (importName === 'Module' && code.includes('@Module(')) {
68
+ const moduleUnits = fileUnits.filter((u) => u.summary.includes('Module') || u.id.includes('_module'));
69
+ for (const moduleUnit of moduleUnits) {
70
+ if (moduleUnit.id !== unit.id) {
71
+ unit.associations.push({
72
+ to: moduleUnit.id,
73
+ relation: 'belongs_to_module',
74
+ weight: 0.5,
75
+ });
76
+ }
77
+ }
78
+ }
79
+ }
80
+ if (unit.associations.length > oldCount) {
81
+ newAssociations += unit.associations.length - oldCount;
82
+ }
83
+ else if (oldCount > 0 && unit.associations.length === 0) {
84
+ // Associations were rebuilt but total count changed - track delta
85
+ newAssociations += unit.associations.length;
86
+ }
87
+ }
88
+ }
89
+ catch {
90
+ // Skip unparseable files
91
+ }
92
+ }
93
+ return { newAssociations };
94
+ }
95
+ /**
96
+ * Build a map of imported names → their source file paths.
97
+ */
98
+ function buildImportMap(currentFile, code, projectRoot) {
99
+ const map = new Map();
100
+ // Match: import { X, Y } from './foo'
101
+ const namedImportRe = /import\s*\{([^}]*)\}\s*from\s*['"]([^'"]+)['"]/g;
102
+ let match;
103
+ while ((match = namedImportRe.exec(code)) !== null) {
104
+ const names = match[1]
105
+ .split(',')
106
+ .map((n) => n.trim())
107
+ .filter(Boolean);
108
+ const source = match[2];
109
+ if (source.startsWith('.')) {
110
+ const absSource = resolveRelativeImport(currentFile, source, projectRoot);
111
+ for (const name of names) {
112
+ map.set(name, absSource);
113
+ }
114
+ }
115
+ }
116
+ // Match: import X from './foo'
117
+ const defaultImportRe = /import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;
118
+ while ((match = defaultImportRe.exec(code)) !== null) {
119
+ const name = match[1];
120
+ const source = match[2];
121
+ if (source.startsWith('.')) {
122
+ map.set(name, resolveRelativeImport(currentFile, source, projectRoot));
123
+ }
124
+ }
125
+ return map;
126
+ }
127
+ /**
128
+ * Resolve a relative import path to an absolute file path.
129
+ * Handles barrel exports (./foo → ./foo/index.ts).
130
+ */
131
+ function resolveRelativeImport(currentFile, importPath, projectRoot) {
132
+ const currentDir = path.dirname(path.join(projectRoot, currentFile));
133
+ const resolved = path.resolve(currentDir, importPath);
134
+ // Try exact path with .ts extension
135
+ if (fs.existsSync(resolved + '.ts'))
136
+ return resolved + '.ts';
137
+ if (fs.existsSync(resolved + '.tsx'))
138
+ return resolved + '.tsx';
139
+ // Try barrel export (directory → index.ts)
140
+ if (fs.existsSync(path.join(resolved, 'index.ts'))) {
141
+ return path.join(resolved, 'index.ts');
142
+ }
143
+ if (fs.existsSync(path.join(resolved, 'index.tsx'))) {
144
+ return path.join(resolved, 'index.tsx');
145
+ }
146
+ return resolved + '.ts'; // best guess
147
+ }
148
+ /**
149
+ * Build a map of unit ID → called function names.
150
+ */
151
+ function buildCallMap(code) {
152
+ const map = new Map();
153
+ // Match this.xxxService.yyy() calls
154
+ const thisCallRe = /this\.(\w+)\.(\w+)\s*\(/g;
155
+ let match;
156
+ while ((match = thisCallRe.exec(code)) !== null) {
157
+ const receiver = match[1];
158
+ const method = match[2];
159
+ const calls = map.get(receiver) || [];
160
+ calls.push(method);
161
+ map.set(receiver, calls);
162
+ }
163
+ return map;
164
+ }
165
+ /**
166
+ * Find a unit by its source file and exported name.
167
+ */
168
+ function findUnitByFile(units, targetFile, importName) {
169
+ // Normalize: strip projectRoot prefix
170
+ const normalized = targetFile.replace(/\\/g, '/');
171
+ // Try exact file match + signature match
172
+ for (const unit of units.values()) {
173
+ if (!unit.source?.file)
174
+ continue;
175
+ const unitFile = unit.source.file.replace(/\\/g, '/');
176
+ if (normalized.endsWith(unitFile) || unitFile.endsWith(normalized)) {
177
+ if (unit.signatures.some((s) => s.includes(importName))) {
178
+ return unit.id;
179
+ }
180
+ }
181
+ }
182
+ // Try signature-only match (for packages like @nestjs/common)
183
+ for (const unit of units.values()) {
184
+ if (unit.signatures.some((s) => s.toLowerCase().includes(importName.toLowerCase()))) {
185
+ return unit.id;
186
+ }
187
+ }
188
+ return null;
189
+ }
190
+ /**
191
+ * Find a unit by its signature (method name).
192
+ */
193
+ function findUnitBySignature(units, name) {
194
+ const lower = name.toLowerCase();
195
+ for (const unit of units.values()) {
196
+ if (unit.signatures.some((s) => s.toLowerCase().includes(lower))) {
197
+ return unit.id;
198
+ }
199
+ }
200
+ return null;
201
+ }
202
+ //# sourceMappingURL=associations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"associations.js","sourceRoot":"","sources":["../../../src/sync/phases/associations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { FileStore } from '../../store/file-store.js';
2
+ import type { SyncPattern, SyncAlert } from '../../shared/types.js';
3
+ /**
4
+ * Phase 6: Learning engine integration.
5
+ *
6
+ * After sync detects code changes, patterns, and architecture alerts,
7
+ * this phase converts that raw data into learning suggestions and
8
+ * auto-applies them to the grid.
9
+ */
10
+ export declare function generateLearnings(store: FileStore, changedFiles: string[], patterns: SyncPattern[], alerts: SyncAlert[]): {
11
+ autoUnitsCreated: number;
12
+ };
13
+ //# sourceMappingURL=learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../../src/sync/phases/learning.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,SAAS,EAAE,GAClB;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAsE9B"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Phase 6: Learning engine integration.
3
+ *
4
+ * After sync detects code changes, patterns, and architecture alerts,
5
+ * this phase converts that raw data into learning suggestions and
6
+ * auto-applies them to the grid.
7
+ */
8
+ export function generateLearnings(store, changedFiles, patterns, alerts) {
9
+ let autoUnitsCreated = 0;
10
+ // 1. Convert detected patterns into memory units
11
+ for (const pattern of patterns) {
12
+ if (pattern.confidence < 0.4)
13
+ continue;
14
+ const unit = {
15
+ id: `auto_${pattern.type}_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
16
+ type: pattern.type,
17
+ summary: pattern.summary,
18
+ source: { file: pattern.file },
19
+ signatures: [pattern.summary],
20
+ content: { description: pattern.summary },
21
+ associations: [],
22
+ meta: {
23
+ created: new Date().toISOString(),
24
+ updated: new Date().toISOString(),
25
+ confidence: pattern.confidence,
26
+ usage_count: 0,
27
+ status: pattern.confidence >= 0.6 ? 'active' : 'stale',
28
+ },
29
+ };
30
+ store.ensureDirs();
31
+ store.saveUnit(unit);
32
+ autoUnitsCreated++;
33
+ }
34
+ // 2. Convert architecture alerts into error_solution units
35
+ for (const alert of alerts) {
36
+ if (alert.level === 'error') {
37
+ const unit = {
38
+ id: `auto_error_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
39
+ type: 'error_solution',
40
+ summary: `Architecture violation: ${alert.message.slice(0, 80)}`,
41
+ source: { file: alert.file },
42
+ signatures: [alert.message],
43
+ content: {
44
+ description: `Architecture check triggered in ${alert.file}: ${alert.message}`,
45
+ },
46
+ associations: [],
47
+ meta: {
48
+ created: new Date().toISOString(),
49
+ updated: new Date().toISOString(),
50
+ confidence: 0.5,
51
+ usage_count: 0,
52
+ status: 'stale',
53
+ },
54
+ };
55
+ store.ensureDirs();
56
+ store.saveUnit(unit);
57
+ autoUnitsCreated++;
58
+ }
59
+ }
60
+ // 3. Boost confidence of existing units from changed files
61
+ if (changedFiles.length > 0) {
62
+ const existingUnits = store.listUnitsSync?.() || [];
63
+ for (const unit of existingUnits) {
64
+ if (unit.source?.file && changedFiles.includes(unit.source.file)) {
65
+ unit.meta.confidence = Math.min(1.0, unit.meta.confidence + 0.05);
66
+ unit.meta.usage_count++;
67
+ store.saveUnit(unit);
68
+ }
69
+ }
70
+ }
71
+ return { autoUnitsCreated };
72
+ }
73
+ //# sourceMappingURL=learning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning.js","sourceRoot":"","sources":["../../../src/sync/phases/learning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { SyncPattern } from '../../shared/types.js';
2
+ /**
3
+ * Phase 4: Detect semantic patterns from code changes.
4
+ *
5
+ * Reads changed files and identifies:
6
+ * - New error handling patterns (try-catch, BusinessException)
7
+ * - New design patterns (Builder, decorator usage)
8
+ * - New architecture decisions (config changes, new dependencies)
9
+ */
10
+ export declare function detectPatterns(projectRoot: string, changedFiles: string[]): {
11
+ patterns: SyncPattern[];
12
+ };
13
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/sync/phases/patterns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,GACrB;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAkG7B"}
@@ -0,0 +1,102 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Phase 4: Detect semantic patterns from code changes.
5
+ *
6
+ * Reads changed files and identifies:
7
+ * - New error handling patterns (try-catch, BusinessException)
8
+ * - New design patterns (Builder, decorator usage)
9
+ * - New architecture decisions (config changes, new dependencies)
10
+ */
11
+ export function detectPatterns(projectRoot, changedFiles) {
12
+ const patterns = [];
13
+ for (const file of changedFiles) {
14
+ const abs = path.join(projectRoot, file);
15
+ if (!fs.existsSync(abs))
16
+ continue;
17
+ try {
18
+ const code = fs.readFileSync(abs, 'utf-8');
19
+ // Detect new try-catch blocks → error_solution
20
+ if (code.includes('try {') && code.includes('catch')) {
21
+ const match = code.match(/catch\s*\(([^)]*)\)\s*\{([^}]*)\}/);
22
+ if (match) {
23
+ patterns.push({
24
+ type: 'error_solution',
25
+ summary: `Error handling pattern in ${path.basename(file)}`,
26
+ file,
27
+ confidence: 0.4,
28
+ });
29
+ }
30
+ }
31
+ // Detect throw new BusinessException → error_solution
32
+ const businessExRe = /throw new\s+(\w*[Ee]xception\w*)\s*\(/g;
33
+ let bMatch;
34
+ while ((bMatch = businessExRe.exec(code)) !== null) {
35
+ patterns.push({
36
+ type: 'error_solution',
37
+ summary: `${bMatch[1]} thrown in ${path.basename(file)}`,
38
+ file,
39
+ confidence: 0.5,
40
+ });
41
+ }
42
+ // Detect @Injectable/@Module/@Controller → NestJS pattern
43
+ if (code.includes('@Injectable()')) {
44
+ patterns.push({
45
+ type: 'pattern',
46
+ summary: `Injectable service in ${path.basename(file)}`,
47
+ file,
48
+ confidence: 0.6,
49
+ });
50
+ }
51
+ if (code.includes('@Module(')) {
52
+ patterns.push({
53
+ type: 'pattern',
54
+ summary: `NestJS Module: ${path.basename(file)}`,
55
+ file,
56
+ confidence: 0.7,
57
+ });
58
+ }
59
+ // Detect Builder pattern
60
+ if (code.includes('extends') && code.includes('builder') && code.includes('return this')) {
61
+ patterns.push({
62
+ type: 'pattern',
63
+ summary: `Builder pattern in ${path.basename(file)}`,
64
+ file,
65
+ confidence: 0.5,
66
+ });
67
+ }
68
+ // Detect new imports of infrastructure patterns
69
+ if (code.includes("from '@nestjs/common'") && code.includes('forwardRef')) {
70
+ patterns.push({
71
+ type: 'decision',
72
+ summary: `forwardRef() used in ${path.basename(file)} — may indicate circular dependency`,
73
+ file,
74
+ confidence: 0.3,
75
+ });
76
+ }
77
+ // Detect strategy/template method pattern via abstract classes
78
+ if (code.includes('abstract class') && code.includes('extends')) {
79
+ patterns.push({
80
+ type: 'pattern',
81
+ summary: `Strategy/Template pattern in ${path.basename(file)}`,
82
+ file,
83
+ confidence: 0.4,
84
+ });
85
+ }
86
+ }
87
+ catch {
88
+ // skip
89
+ }
90
+ }
91
+ // Deduplicate by summary
92
+ const seen = new Set();
93
+ const unique = patterns.filter((p) => {
94
+ const key = p.summary;
95
+ if (seen.has(key))
96
+ return false;
97
+ seen.add(key);
98
+ return true;
99
+ });
100
+ return { patterns: unique };
101
+ }
102
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/sync/phases/patterns.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memgrid",
3
- "version": "0.5.4",
3
+ "version": "0.7.0",
4
4
  "description": "Project-level semantic memory system for AI coding agents. Replaces full-codebase context loading with a self-evolving knowledge-mesh.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "license": "MIT",
41
41
  "repository": {
42
42
  "type": "git",
43
- "url": "https://github.com/wenliangw/memgrid"
43
+ "url": "git+https://github.com/wenliangw/memgrid.git"
44
44
  },
45
45
  "dependencies": {
46
46
  "@modelcontextprotocol/sdk": "^1",