memgrid 0.5.3 → 0.6.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.
- package/CHANGELOG.md +22 -0
- package/dist/learn/index.js +4 -4
- package/dist/learn/index.js.map +1 -1
- package/dist/learn/nlp.d.ts +32 -0
- package/dist/learn/nlp.d.ts.map +1 -0
- package/dist/learn/nlp.js +214 -0
- package/dist/learn/nlp.js.map +1 -0
- package/dist/memgrid.d.ts.map +1 -1
- package/dist/memgrid.js +9 -2
- package/dist/memgrid.js.map +1 -1
- package/dist/retrieve/index.js +1 -1
- package/dist/retrieve/index.js.map +1 -1
- package/dist/scanner/config.d.ts.map +1 -1
- package/dist/scanner/config.js +1 -0
- package/dist/scanner/config.js.map +1 -1
- package/dist/scanner/golang.js +1 -1
- package/dist/scanner/golang.js.map +1 -1
- package/dist/scanner/typescript.d.ts +3 -2
- package/dist/scanner/typescript.d.ts.map +1 -1
- package/dist/scanner/typescript.js +6 -85
- package/dist/scanner/typescript.js.map +1 -1
- package/dist/serve/cli.js +42 -2
- package/dist/serve/cli.js.map +1 -1
- package/dist/serve/mcp-server.d.ts.map +1 -1
- package/dist/serve/mcp-server.js +32 -57
- package/dist/serve/mcp-server.js.map +1 -1
- package/dist/shared/types.d.ts +23 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +23 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/phases/architecture.d.ts +12 -0
- package/dist/sync/phases/architecture.d.ts.map +1 -0
- package/dist/sync/phases/architecture.js +104 -0
- package/dist/sync/phases/architecture.js.map +1 -0
- package/dist/sync/phases/associations.d.ts +12 -0
- package/dist/sync/phases/associations.d.ts.map +1 -0
- package/dist/sync/phases/associations.js +202 -0
- package/dist/sync/phases/associations.js.map +1 -0
- package/dist/sync/phases/learning.d.ts +13 -0
- package/dist/sync/phases/learning.d.ts.map +1 -0
- package/dist/sync/phases/learning.js +73 -0
- package/dist/sync/phases/learning.js.map +1 -0
- package/dist/sync/phases/patterns.d.ts +13 -0
- package/dist/sync/phases/patterns.d.ts.map +1 -0
- package/dist/sync/phases/patterns.js +102 -0
- package/dist/sync/phases/patterns.js.map +1 -0
- package/package.json +1 -1
|
@@ -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.
|
|
3
|
+
"version": "0.6.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",
|