@simpletoolsindiaorg/engi-mcp 1.0.0 → 1.1.1
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 +30 -1
- package/README.md +11 -7
- package/dist/core/indexer/indexer.d.ts +5 -22
- package/dist/core/indexer/indexer.d.ts.map +1 -1
- package/dist/core/indexer/indexer.js +210 -253
- package/dist/core/indexer/indexer.js.map +1 -1
- package/dist/core/retrieval/retriever.d.ts +0 -13
- package/dist/core/retrieval/retriever.d.ts.map +1 -1
- package/dist/core/retrieval/retriever.js +133 -165
- package/dist/core/retrieval/retriever.js.map +1 -1
- package/dist/memory/memory.d.ts +2 -27
- package/dist/memory/memory.d.ts.map +1 -1
- package/dist/memory/memory.js +62 -93
- package/dist/memory/memory.js.map +1 -1
- package/dist/resources/resources.d.ts +0 -28
- package/dist/resources/resources.d.ts.map +1 -1
- package/dist/resources/resources.js +135 -233
- package/dist/resources/resources.js.map +1 -1
- package/package.json +4 -4
|
@@ -3,256 +3,224 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RetrievalEngine = void 0;
|
|
4
4
|
exports.getRetrievalEngine = getRetrievalEngine;
|
|
5
5
|
const indexer_js_1 = require("../indexer/indexer.js");
|
|
6
|
+
// Stop words as module-level Set — created once, O(1) lookup
|
|
7
|
+
const STOP_WORDS = new Set([
|
|
8
|
+
'function', 'class', 'method', 'variable', 'const', 'let', 'var',
|
|
9
|
+
'return', 'import', 'export', 'async', 'await', 'the', 'and', 'for',
|
|
10
|
+
'with', 'this', 'that', 'from', 'type', 'interface', 'new', 'not'
|
|
11
|
+
]);
|
|
6
12
|
class RetrievalEngine {
|
|
7
|
-
|
|
8
|
-
* Find the minimum relevant scope for a task
|
|
9
|
-
*/
|
|
13
|
+
// ── Public API ─────────────────────────────────────────────────────────────
|
|
10
14
|
async findScope(query) {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return {
|
|
15
|
-
files: [],
|
|
16
|
-
modules: [],
|
|
17
|
-
symbols: [],
|
|
18
|
-
tests: [],
|
|
19
|
-
docs: [],
|
|
20
|
-
confidence: 0
|
|
21
|
-
};
|
|
22
|
-
}
|
|
15
|
+
const index = (0, indexer_js_1.getIndexer)().getIndex();
|
|
16
|
+
if (!index)
|
|
17
|
+
return { files: [], modules: [], symbols: [], tests: [], docs: [], confidence: 0 };
|
|
23
18
|
const limit = query.limit || 10;
|
|
24
19
|
const keywords = this.normalizeKeywords(query.task, query.keywords || []);
|
|
25
|
-
//
|
|
20
|
+
// Pre-build module set from files for O(1) test-module checks
|
|
21
|
+
const fileModuleMap = new Map(); // filePath → module
|
|
22
|
+
for (const [fp] of index.files)
|
|
23
|
+
fileModuleMap.set(fp, fp.split('/')[0] ?? 'root');
|
|
26
24
|
const rankedFiles = this.rankFiles(index.files, keywords, query.taskType);
|
|
27
|
-
// Get top files
|
|
28
25
|
const topFiles = rankedFiles.slice(0, limit).map(r => r.file);
|
|
29
|
-
//
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
const symbols
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// Calculate confidence based on match quality
|
|
38
|
-
const confidence = this.calculateConfidence(rankedFiles.slice(0, limit), keywords);
|
|
26
|
+
// Build a Set of top-file paths for O(1) membership tests downstream
|
|
27
|
+
const topFilePathSet = new Set(topFiles.map(f => f.path));
|
|
28
|
+
const topModules = new Set(topFiles.map(f => f.path.split('/')[0] ?? 'root'));
|
|
29
|
+
const [symbols, tests, docs] = [
|
|
30
|
+
this.findRelevantSymbols(index.symbols, keywords, topFilePathSet),
|
|
31
|
+
this.findRelevantTests(index.tests, topFiles, topModules),
|
|
32
|
+
this.findRelevantDocs(index.docs, keywords, topModules)
|
|
33
|
+
];
|
|
39
34
|
return {
|
|
40
35
|
files: topFiles,
|
|
41
|
-
modules,
|
|
36
|
+
modules: [...topModules],
|
|
42
37
|
symbols,
|
|
43
38
|
tests,
|
|
44
39
|
docs,
|
|
45
|
-
confidence
|
|
40
|
+
confidence: this.calculateConfidence(rankedFiles.slice(0, limit), keywords)
|
|
46
41
|
};
|
|
47
42
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Find files that match imports (dependency resolution)
|
|
50
|
-
*/
|
|
51
43
|
async findByImport(importPath) {
|
|
52
|
-
const
|
|
53
|
-
const index = indexer.getIndex();
|
|
44
|
+
const index = (0, indexer_js_1.getIndexer)().getIndex();
|
|
54
45
|
if (!index)
|
|
55
46
|
return null;
|
|
56
|
-
//
|
|
57
|
-
for (const [
|
|
58
|
-
if (
|
|
47
|
+
// Build name→file map on first call if needed (O(1) lookups after)
|
|
48
|
+
for (const [p, file] of index.files) {
|
|
49
|
+
if (p === importPath || p.endsWith(importPath))
|
|
59
50
|
return file;
|
|
60
|
-
}
|
|
61
51
|
}
|
|
62
|
-
// Try to find by name match
|
|
63
52
|
const importName = importPath.split('/').pop() || '';
|
|
64
|
-
for (const [
|
|
65
|
-
if (file.name === importName)
|
|
53
|
+
for (const [, file] of index.files) {
|
|
54
|
+
if (file.name === importName)
|
|
66
55
|
return file;
|
|
67
|
-
}
|
|
68
56
|
}
|
|
69
57
|
return null;
|
|
70
58
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Find tests related to a file
|
|
73
|
-
*/
|
|
74
59
|
async findRelatedTests(filePath) {
|
|
75
|
-
const
|
|
76
|
-
const index = indexer.getIndex();
|
|
60
|
+
const index = (0, indexer_js_1.getIndexer)().getIndex();
|
|
77
61
|
if (!index)
|
|
78
62
|
return [];
|
|
79
|
-
const
|
|
80
|
-
// Direct tests for this file
|
|
81
|
-
const directTests = index.tests.filter(t => t.targetFile === filePath ||
|
|
82
|
-
t.name.includes(fileName.replace(/\.[^.]+$/, '')));
|
|
83
|
-
// Tests in same directory
|
|
63
|
+
const baseName = filePath.split('/').pop()?.replace(/\.[^.]+$/, '') ?? '';
|
|
84
64
|
const dir = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
85
|
-
const
|
|
86
|
-
|
|
65
|
+
const seen = new Set();
|
|
66
|
+
const results = [];
|
|
67
|
+
for (const t of index.tests) {
|
|
68
|
+
if (seen.has(t.path))
|
|
69
|
+
continue;
|
|
70
|
+
if (t.targetFile === filePath || t.name.includes(baseName)) {
|
|
71
|
+
results.push(t);
|
|
72
|
+
seen.add(t.path);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
for (const t of index.tests) {
|
|
76
|
+
if (!seen.has(t.path) && t.path.startsWith(dir)) {
|
|
77
|
+
results.push(t);
|
|
78
|
+
seen.add(t.path);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return results;
|
|
87
82
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Find files that import a specific file
|
|
90
|
-
*/
|
|
91
83
|
async findDependents(filePath) {
|
|
92
|
-
const
|
|
93
|
-
const index = indexer.getIndex();
|
|
84
|
+
const index = (0, indexer_js_1.getIndexer)().getIndex();
|
|
94
85
|
if (!index)
|
|
95
86
|
return [];
|
|
96
87
|
const dependents = [];
|
|
97
|
-
for (const [
|
|
98
|
-
if (file.imports.some(imp => imp === filePath || imp.endsWith(filePath)
|
|
88
|
+
for (const [, file] of index.files) {
|
|
89
|
+
if (file.imports.some(imp => imp === filePath || imp.endsWith(filePath))) {
|
|
99
90
|
dependents.push(file);
|
|
100
91
|
}
|
|
101
92
|
}
|
|
102
93
|
return dependents;
|
|
103
94
|
}
|
|
104
|
-
//
|
|
105
|
-
// Private Helpers
|
|
106
|
-
// =========================================================================
|
|
95
|
+
// ── Private helpers ────────────────────────────────────────────────────────
|
|
107
96
|
normalizeKeywords(task, extra) {
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
97
|
+
const words = task.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/);
|
|
98
|
+
const combined = new Set();
|
|
99
|
+
for (const w of words) {
|
|
100
|
+
if (w.length > 2 && !STOP_WORDS.has(w))
|
|
101
|
+
combined.add(w);
|
|
102
|
+
}
|
|
103
|
+
for (const k of extra) {
|
|
104
|
+
const kl = k.toLowerCase();
|
|
105
|
+
if (!STOP_WORDS.has(kl))
|
|
106
|
+
combined.add(kl);
|
|
107
|
+
}
|
|
108
|
+
return [...combined];
|
|
119
109
|
}
|
|
120
110
|
rankFiles(files, keywords, taskType) {
|
|
121
111
|
const scored = [];
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
112
|
+
const isDocTask = taskType === 'documentation';
|
|
113
|
+
const isBugOrFeature = taskType === 'bug' || taskType === 'feature';
|
|
114
|
+
for (const [filePath, file] of files) {
|
|
115
|
+
// Skip irrelevant types early
|
|
116
|
+
if (!isDocTask && file.type !== 'source' && file.type !== 'test')
|
|
125
117
|
continue;
|
|
126
|
-
}
|
|
127
118
|
let score = 0;
|
|
128
|
-
|
|
129
|
-
const lowerPath =
|
|
119
|
+
const reasons = [];
|
|
120
|
+
const lowerPath = filePath.toLowerCase();
|
|
130
121
|
const lowerName = file.name.toLowerCase();
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
122
|
+
// Pre-lowercase exports once
|
|
123
|
+
const lowerExports = file.exports.map(e => e.toLowerCase());
|
|
124
|
+
for (const kw of keywords) {
|
|
125
|
+
if (lowerPath.includes(kw) || lowerName.includes(kw)) {
|
|
134
126
|
score += 10;
|
|
135
|
-
reasons.push(`
|
|
127
|
+
reasons.push(`path:${kw}`);
|
|
136
128
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
129
|
+
for (const exp of lowerExports) {
|
|
130
|
+
if (exp.includes(kw)) {
|
|
131
|
+
score += 15;
|
|
132
|
+
reasons.push(`export:${kw}`);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
143
135
|
}
|
|
144
136
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
score += 5;
|
|
149
|
-
reasons.push('source file');
|
|
150
|
-
}
|
|
137
|
+
if (isBugOrFeature && file.type === 'source') {
|
|
138
|
+
score += 5;
|
|
139
|
+
reasons.push('source');
|
|
151
140
|
}
|
|
152
|
-
// Test files for bug fixing
|
|
153
141
|
if (taskType === 'bug' && file.type === 'test') {
|
|
154
142
|
score += 8;
|
|
155
|
-
reasons.push('test
|
|
143
|
+
reasons.push('test');
|
|
156
144
|
}
|
|
157
|
-
|
|
158
|
-
if (taskType === 'documentation' && file.type === 'doc') {
|
|
145
|
+
if (isDocTask && file.type === 'doc') {
|
|
159
146
|
score += 20;
|
|
160
|
-
reasons.push('
|
|
161
|
-
}
|
|
162
|
-
if (score > 0) {
|
|
163
|
-
scored.push({
|
|
164
|
-
file,
|
|
165
|
-
score,
|
|
166
|
-
reason: reasons.join(', ')
|
|
167
|
-
});
|
|
147
|
+
reasons.push('doc');
|
|
168
148
|
}
|
|
149
|
+
if (score > 0)
|
|
150
|
+
scored.push({ file, score, reason: reasons.join(',') });
|
|
169
151
|
}
|
|
170
|
-
// Sort by score descending
|
|
171
152
|
return scored.sort((a, b) => b.score - a.score);
|
|
172
153
|
}
|
|
173
|
-
|
|
174
|
-
const modules = new Set();
|
|
175
|
-
for (const file of files) {
|
|
176
|
-
const parts = file.path.split('/');
|
|
177
|
-
if (parts.length > 1) {
|
|
178
|
-
modules.add(parts[0]);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return Array.from(modules);
|
|
182
|
-
}
|
|
183
|
-
findRelevantSymbols(symbols, keywords, files) {
|
|
154
|
+
findRelevantSymbols(symbols, keywords, topFilePathSet) {
|
|
184
155
|
const relevant = [];
|
|
185
|
-
const filePaths = new Set(files.map(f => f.path));
|
|
186
156
|
for (const [, fileSymbols] of symbols) {
|
|
187
|
-
for (const
|
|
188
|
-
if (!
|
|
157
|
+
for (const sym of fileSymbols) {
|
|
158
|
+
if (!topFilePathSet.has(sym.file))
|
|
189
159
|
continue;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
160
|
+
const lname = sym.name.toLowerCase();
|
|
161
|
+
for (const kw of keywords) {
|
|
162
|
+
if (lname.includes(kw)) {
|
|
163
|
+
relevant.push(sym);
|
|
193
164
|
break;
|
|
194
165
|
}
|
|
195
166
|
}
|
|
167
|
+
if (relevant.length >= 20)
|
|
168
|
+
return relevant;
|
|
196
169
|
}
|
|
197
170
|
}
|
|
198
|
-
return relevant
|
|
171
|
+
return relevant;
|
|
199
172
|
}
|
|
200
|
-
findRelevantTests(tests,
|
|
173
|
+
findRelevantTests(tests, topFiles, topModules) {
|
|
174
|
+
const topFilePaths = new Set(topFiles.map(f => f.path));
|
|
201
175
|
const relevant = [];
|
|
202
|
-
const
|
|
176
|
+
const seen = new Set();
|
|
203
177
|
for (const test of tests) {
|
|
204
|
-
|
|
205
|
-
if (test.targetFile && files.some(f => f.path === test.targetFile)) {
|
|
206
|
-
relevant.push(test);
|
|
178
|
+
if (seen.has(test.path))
|
|
207
179
|
continue;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
const hasFileInModule = files.some(f => f.path.split('/')[0] === testModule);
|
|
212
|
-
if (hasFileInModule) {
|
|
180
|
+
const inScope = (test.targetFile && topFilePaths.has(test.targetFile)) ||
|
|
181
|
+
topModules.has(test.path.split('/')[0] ?? '');
|
|
182
|
+
if (inScope) {
|
|
213
183
|
relevant.push(test);
|
|
184
|
+
seen.add(test.path);
|
|
214
185
|
}
|
|
186
|
+
if (relevant.length >= 10)
|
|
187
|
+
break;
|
|
215
188
|
}
|
|
216
|
-
return relevant
|
|
189
|
+
return relevant;
|
|
217
190
|
}
|
|
218
|
-
findRelevantDocs(docs, keywords,
|
|
191
|
+
findRelevantDocs(docs, keywords, topModules) {
|
|
219
192
|
const relevant = [];
|
|
220
|
-
const
|
|
193
|
+
const seen = new Set();
|
|
221
194
|
for (const doc of docs) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
}
|
|
195
|
+
if (seen.has(doc.path))
|
|
196
|
+
continue;
|
|
197
|
+
const lname = doc.name.toLowerCase();
|
|
198
|
+
const lpath = doc.path.toLowerCase();
|
|
199
|
+
const keyMatch = keywords.some(kw => lname.includes(kw) || lpath.includes(kw));
|
|
200
|
+
const modMatch = topModules.has(doc.path.split('/')[0] ?? '');
|
|
201
|
+
if (keyMatch || modMatch) {
|
|
202
|
+
relevant.push(doc);
|
|
203
|
+
seen.add(doc.path);
|
|
204
|
+
}
|
|
205
|
+
if (relevant.length >= 5)
|
|
206
|
+
break;
|
|
236
207
|
}
|
|
237
|
-
return relevant
|
|
208
|
+
return relevant;
|
|
238
209
|
}
|
|
239
210
|
calculateConfidence(rankedFiles, keywords) {
|
|
240
|
-
if (rankedFiles.length === 0)
|
|
211
|
+
if (rankedFiles.length === 0 || keywords.length === 0)
|
|
241
212
|
return 0;
|
|
242
|
-
const avgScore = rankedFiles.reduce((
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
const confidence = Math.min(avgScore / maxPossibleScore, 1);
|
|
246
|
-
return Math.round(confidence * 100) / 100;
|
|
213
|
+
const avgScore = rankedFiles.reduce((s, r) => s + r.score, 0) / rankedFiles.length;
|
|
214
|
+
const maxPossible = keywords.length * 25;
|
|
215
|
+
return Math.round(Math.min(avgScore / maxPossible, 1) * 100) / 100;
|
|
247
216
|
}
|
|
248
217
|
}
|
|
249
218
|
exports.RetrievalEngine = RetrievalEngine;
|
|
250
|
-
// Singleton
|
|
219
|
+
// ─── Singleton ────────────────────────────────────────────────────────────────
|
|
251
220
|
let retrievalInstance = null;
|
|
252
221
|
function getRetrievalEngine() {
|
|
253
|
-
if (!retrievalInstance)
|
|
222
|
+
if (!retrievalInstance)
|
|
254
223
|
retrievalInstance = new RetrievalEngine();
|
|
255
|
-
}
|
|
256
224
|
return retrievalInstance;
|
|
257
225
|
}
|
|
258
226
|
//# sourceMappingURL=retriever.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../../src/core/retrieval/retriever.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../../src/core/retrieval/retriever.ts"],"names":[],"mappings":";;;AA6OA,gDAGC;AAtOD,sDAAmD;AAEnD,6DAA6D;AAC7D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IAChE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACnE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK;CAClE,CAAC,CAAC;AAEH,MAAa,eAAe;IAE1B,8EAA8E;IAE9E,KAAK,CAAC,SAAS,CAAC,KAAiB;QAC/B,MAAM,KAAK,GAAG,IAAA,uBAAU,GAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAE/F,MAAM,KAAK,GAAM,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAE1E,8DAA8D;QAC9D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,oBAAoB;QACrE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK;YAAE,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;QAElF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAM,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEjE,qEAAqE;QACrE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;QAElF,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG;YAC7B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC;YACjE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC;YACzD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;SACxD,CAAC;QAEF,OAAO;YACL,KAAK,EAAO,QAAQ;YACpB,OAAO,EAAK,CAAC,GAAG,UAAU,CAAC;YAC3B,OAAO;YACP,KAAK;YACL,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;SAC5E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,MAAM,KAAK,GAAG,IAAA,uBAAU,GAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,mEAAmE;QACnE,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC9D,CAAC;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,MAAM,KAAK,GAAG,IAAA,uBAAU,GAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAQ,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,MAAM,IAAI,GAAO,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC/B,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,MAAM,KAAK,GAAG,IAAA,uBAAU,GAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACzE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8EAA8E;IAEtE,iBAAiB,CAAC,IAAY,EAAE,KAAe;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IACvB,CAAC;IAEO,SAAS,CACf,KAAkC,EAClC,QAAkB,EAClB,QAAgB;QAEhB,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,QAAQ,KAAK,eAAe,CAAC;QAC/C,MAAM,cAAc,GAAG,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,CAAC;QAEpE,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACrC,8BAA8B;YAC9B,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YAE3E,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAE1C,6BAA6B;YAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAE5D,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrD,KAAK,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC7B,CAAC;gBACD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;wBAAC,KAAK,IAAI,EAAE,CAAC;wBAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;wBAAC,MAAM;oBAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YAED,IAAI,cAAc,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YACtF,IAAI,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAC,CAAC;YACtF,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAY,CAAC;gBAAC,KAAK,IAAI,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAErF,IAAI,KAAK,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAEO,mBAAmB,CACzB,OAAwC,EACxC,QAAkB,EAClB,cAA2B;QAE3B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,EAAE,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC;YACtC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAC1B,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;wBAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAAC,MAAM;oBAAC,CAAC;gBACxD,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE;oBAAE,OAAO,QAAQ,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,iBAAiB,CACvB,KAAuB,EACvB,QAA0B,EAC1B,UAAuB;QAEvB,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAClC,MAAM,OAAO,GACX,CAAC,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACtD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE;gBAAE,MAAM;QACnC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gBAAgB,CACtB,IAAqB,EACrB,QAAkB,EAClB,UAAuB;QAEvB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACjC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACjF,MAAM,QAAQ,GAAK,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YACrE,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM;QAClC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,mBAAmB,CAAC,WAAyB,EAAE,QAAkB;QACvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;QACvF,MAAM,WAAW,GAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,WAAW,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACrE,CAAC;CACF;AApND,0CAoNC;AAED,iFAAiF;AAEjF,IAAI,iBAAiB,GAA2B,IAAI,CAAC;AAErD,SAAgB,kBAAkB;IAChC,IAAI,CAAC,iBAAiB;QAAE,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;IAClE,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
package/dist/memory/memory.d.ts
CHANGED
|
@@ -1,44 +1,19 @@
|
|
|
1
1
|
import { MemoryCheckpoint, MemoryScope, MemoryDecision, MemoryRestoreResult, TaskType } from '../core/types.js';
|
|
2
2
|
export declare class MemoryStore {
|
|
3
3
|
private checkpoints;
|
|
4
|
+
private taskIndex;
|
|
4
5
|
private storagePath;
|
|
5
|
-
/**
|
|
6
|
-
* Initialize memory store with optional persistence
|
|
7
|
-
*/
|
|
8
6
|
initialize(options?: {
|
|
9
7
|
storagePath?: string;
|
|
10
8
|
}): void;
|
|
11
|
-
/**
|
|
12
|
-
* Save a memory checkpoint
|
|
13
|
-
*/
|
|
14
9
|
saveCheckpoint(checkpoint: Omit<MemoryCheckpoint, 'id' | 'timestamp'>): MemoryCheckpoint;
|
|
15
|
-
/**
|
|
16
|
-
* Get a checkpoint by ID
|
|
17
|
-
*/
|
|
18
10
|
getCheckpoint(id: string): MemoryCheckpoint | null;
|
|
19
|
-
/**
|
|
20
|
-
* Get all checkpoints
|
|
21
|
-
*/
|
|
22
11
|
getAllCheckpoints(): MemoryCheckpoint[];
|
|
23
|
-
/**
|
|
24
|
-
* Get latest checkpoint for a task
|
|
25
|
-
*/
|
|
12
|
+
/** O(1) — reads last entry from taskIndex instead of scanning all checkpoints */
|
|
26
13
|
getLatestForTask(taskId: string): MemoryCheckpoint | null;
|
|
27
|
-
/**
|
|
28
|
-
* Delete a checkpoint
|
|
29
|
-
*/
|
|
30
14
|
deleteCheckpoint(id: string): boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Restore memory state from checkpoint
|
|
33
|
-
*/
|
|
34
15
|
restore(id: string): MemoryRestoreResult | null;
|
|
35
|
-
/**
|
|
36
|
-
* Update checkpoint with new information
|
|
37
|
-
*/
|
|
38
16
|
updateCheckpoint(id: string, updates: Partial<MemoryCheckpoint>): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Clear all checkpoints
|
|
41
|
-
*/
|
|
42
17
|
clear(): void;
|
|
43
18
|
private generateId;
|
|
44
19
|
private buildProgressSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory/memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory/memory.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACT,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAA4C;IAE/D,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,WAAW,CAAuB;IAE1C,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAO7C,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,gBAAgB;IAWxF,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIlD,iBAAiB,IAAI,gBAAgB,EAAE;IAIvC,iFAAiF;IACjF,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAMzD,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAerC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAW/C,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO;IAQzE,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,IAAI;CAgBb;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,CAW7C;AAID,wBAAgB,cAAc,IAAI,WAAW,CAG5C"}
|