kratos-memory 1.0.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/AGENTS.md +25 -0
- package/LICENSE +21 -0
- package/bin/kratos-cli +7 -0
- package/dist/cli/capture-handler.d.ts +13 -0
- package/dist/cli/capture-handler.d.ts.map +1 -0
- package/dist/cli/capture-handler.js +112 -0
- package/dist/cli/capture-handler.js.map +1 -0
- package/dist/cli/commands/ask.d.ts +5 -0
- package/dist/cli/commands/ask.d.ts.map +1 -0
- package/dist/cli/commands/ask.js +64 -0
- package/dist/cli/commands/ask.js.map +1 -0
- package/dist/cli/commands/capture.d.ts +5 -0
- package/dist/cli/commands/capture.d.ts.map +1 -0
- package/dist/cli/commands/capture.js +31 -0
- package/dist/cli/commands/capture.js.map +1 -0
- package/dist/cli/commands/forget.d.ts +3 -0
- package/dist/cli/commands/forget.d.ts.map +1 -0
- package/dist/cli/commands/forget.js +12 -0
- package/dist/cli/commands/forget.js.map +1 -0
- package/dist/cli/commands/get.d.ts +3 -0
- package/dist/cli/commands/get.d.ts.map +1 -0
- package/dist/cli/commands/get.js +28 -0
- package/dist/cli/commands/get.js.map +1 -0
- package/dist/cli/commands/hooks.d.ts +2 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +136 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +5 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +56 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/recent.d.ts +6 -0
- package/dist/cli/commands/recent.d.ts.map +1 -0
- package/dist/cli/commands/recent.js +21 -0
- package/dist/cli/commands/recent.js.map +1 -0
- package/dist/cli/commands/save.d.ts +8 -0
- package/dist/cli/commands/save.d.ts.map +1 -0
- package/dist/cli/commands/save.js +31 -0
- package/dist/cli/commands/save.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +5 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +28 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/search.d.ts +8 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +45 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +89 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/switch.d.ts +3 -0
- package/dist/cli/commands/switch.d.ts.map +1 -0
- package/dist/cli/commands/switch.js +18 -0
- package/dist/cli/commands/switch.js.map +1 -0
- package/dist/cli/core.d.ts +15 -0
- package/dist/cli/core.d.ts.map +1 -0
- package/dist/cli/core.js +18 -0
- package/dist/cli/core.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +157 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +22 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +74 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/compression/factory.d.ts +6 -0
- package/dist/compression/factory.d.ts.map +1 -0
- package/dist/compression/factory.js +8 -0
- package/dist/compression/factory.js.map +1 -0
- package/dist/compression/index.d.ts +10 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/index.js +2 -0
- package/dist/compression/index.js.map +1 -0
- package/dist/compression/rule-compressor.d.ts +9 -0
- package/dist/compression/rule-compressor.d.ts.map +1 -0
- package/dist/compression/rule-compressor.js +43 -0
- package/dist/compression/rule-compressor.js.map +1 -0
- package/dist/memory-server/concept-store-enhanced.d.ts +88 -0
- package/dist/memory-server/concept-store-enhanced.d.ts.map +1 -0
- package/dist/memory-server/concept-store-enhanced.js +392 -0
- package/dist/memory-server/concept-store-enhanced.js.map +1 -0
- package/dist/memory-server/concept-store.d.ts +58 -0
- package/dist/memory-server/concept-store.d.ts.map +1 -0
- package/dist/memory-server/concept-store.js +329 -0
- package/dist/memory-server/concept-store.js.map +1 -0
- package/dist/memory-server/context-broker.d.ts +63 -0
- package/dist/memory-server/context-broker.d.ts.map +1 -0
- package/dist/memory-server/context-broker.js +340 -0
- package/dist/memory-server/context-broker.js.map +1 -0
- package/dist/memory-server/database.d.ts +108 -0
- package/dist/memory-server/database.d.ts.map +1 -0
- package/dist/memory-server/database.js +690 -0
- package/dist/memory-server/database.js.map +1 -0
- package/dist/project-manager.d.ts +77 -0
- package/dist/project-manager.d.ts.map +1 -0
- package/dist/project-manager.js +226 -0
- package/dist/project-manager.js.map +1 -0
- package/dist/security/data-retention.d.ts +104 -0
- package/dist/security/data-retention.d.ts.map +1 -0
- package/dist/security/data-retention.js +444 -0
- package/dist/security/data-retention.js.map +1 -0
- package/dist/security/encryption.d.ts +48 -0
- package/dist/security/encryption.d.ts.map +1 -0
- package/dist/security/encryption.js +131 -0
- package/dist/security/encryption.js.map +1 -0
- package/dist/security/pii-detector.d.ts +61 -0
- package/dist/security/pii-detector.d.ts.map +1 -0
- package/dist/security/pii-detector.js +220 -0
- package/dist/security/pii-detector.js.map +1 -0
- package/dist/types/index.d.ts +151 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +10 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { MemoryDatabase } from './database.js';
|
|
2
|
+
import { ConceptStore } from './concept-store.js';
|
|
3
|
+
import { Logger } from '../utils/logger.js';
|
|
4
|
+
const logger = new Logger('ContextBroker');
|
|
5
|
+
export class ContextBroker {
|
|
6
|
+
memoryDb;
|
|
7
|
+
conceptStore;
|
|
8
|
+
projectId;
|
|
9
|
+
projectRoot;
|
|
10
|
+
constructor(projectRoot, projectId) {
|
|
11
|
+
this.projectRoot = projectRoot;
|
|
12
|
+
this.projectId = projectId;
|
|
13
|
+
this.memoryDb = new MemoryDatabase(projectRoot, projectId);
|
|
14
|
+
this.conceptStore = ConceptStore.getInstance(projectId);
|
|
15
|
+
}
|
|
16
|
+
async preview(params) {
|
|
17
|
+
// Normalize parameter names and provide defaults
|
|
18
|
+
const { task, open_files = [], budget_bytes = 2048, top_k = 10, mode = 'smart' } = params;
|
|
19
|
+
// Extract path prefixes from open files
|
|
20
|
+
const pathPrefixes = this.inferPathPrefixes(open_files);
|
|
21
|
+
// Extract keywords from task for better search
|
|
22
|
+
const searchQuery = this.extractSearchTerms(task);
|
|
23
|
+
// Search memories with improved query
|
|
24
|
+
// For single words or short queries, also search in tags
|
|
25
|
+
let memoryResults = this.memoryDb.search({
|
|
26
|
+
q: searchQuery,
|
|
27
|
+
k: 50, // Get more candidates for scoring
|
|
28
|
+
require_path_match: false
|
|
29
|
+
});
|
|
30
|
+
// If we get no results with wildcard, try without wildcard
|
|
31
|
+
if (memoryResults.length === 0 && searchQuery.endsWith('*')) {
|
|
32
|
+
memoryResults = this.memoryDb.search({
|
|
33
|
+
q: searchQuery.slice(0, -1),
|
|
34
|
+
k: 50,
|
|
35
|
+
require_path_match: false
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Search concepts (based on mode)
|
|
39
|
+
let conceptResults = [];
|
|
40
|
+
if (mode === 'smart' || mode === 'soft') {
|
|
41
|
+
// In smart mode: use allowlist
|
|
42
|
+
// In soft mode: include all relevant concepts
|
|
43
|
+
const allowlist = mode === 'smart' ? await this.getProjectAllowlist() : undefined;
|
|
44
|
+
const concepts = this.conceptStore.search({
|
|
45
|
+
q: searchQuery, // Use the same improved query
|
|
46
|
+
k: 20,
|
|
47
|
+
allowlist,
|
|
48
|
+
projectId: mode === 'smart' ? this.projectId : undefined
|
|
49
|
+
});
|
|
50
|
+
// Filter by minimum score threshold
|
|
51
|
+
conceptResults = concepts
|
|
52
|
+
.filter(c => c.score > 0.5) // Only include relevant concepts
|
|
53
|
+
.map(c => ({ concept: c.concept, score: c.score }));
|
|
54
|
+
}
|
|
55
|
+
// Score and rank all candidates
|
|
56
|
+
const scoredCandidates = [
|
|
57
|
+
...this.scoreMemories(memoryResults, pathPrefixes, task),
|
|
58
|
+
...this.scoreConcepts(conceptResults, task)
|
|
59
|
+
].sort((a, b) => b.score - a.score);
|
|
60
|
+
// Apply budget and topK constraints
|
|
61
|
+
const selected = this.selectByBudget(scoredCandidates, budget_bytes, top_k);
|
|
62
|
+
// Calculate stats
|
|
63
|
+
const stats = {
|
|
64
|
+
projectMatches: memoryResults.filter(r => r.memory.project_id === this.projectId).length,
|
|
65
|
+
pathMatches: memoryResults.filter(r => this.hasPathMatch(r.memory.paths, pathPrefixes)).length,
|
|
66
|
+
conceptMatches: conceptResults.length,
|
|
67
|
+
totalCandidates: scoredCandidates.length
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
injections: selected,
|
|
71
|
+
budgetUsed: selected.reduce((sum, inj) => sum + inj.byteSize, 0),
|
|
72
|
+
budgetLimit: budget_bytes,
|
|
73
|
+
topK: top_k,
|
|
74
|
+
stats
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
scoreMemories(results, pathPrefixes, task) {
|
|
78
|
+
return results.map(result => {
|
|
79
|
+
const memory = result.memory;
|
|
80
|
+
// Base scoring formula from senior dev's spec
|
|
81
|
+
let score = 0;
|
|
82
|
+
// Project match bonus
|
|
83
|
+
score += 1.5 * +(memory.project_id === this.projectId);
|
|
84
|
+
// Check if single-word query for special handling
|
|
85
|
+
const words = task.toLowerCase().split(/\s+/).filter(w => w.length > 2);
|
|
86
|
+
const isSingleWord = words.length === 1;
|
|
87
|
+
// Path match bonus - SUPER STRONG for single-word queries
|
|
88
|
+
const pathScore = this.pathMatchStrength(memory.paths, pathPrefixes);
|
|
89
|
+
if (isSingleWord && pathScore > 0) {
|
|
90
|
+
// For single-word queries with path match, make path DOMINANT
|
|
91
|
+
score += 10.0 * pathScore; // Massive boost
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Normal path boost for multi-word queries
|
|
95
|
+
score += 2.0 * pathScore;
|
|
96
|
+
// Extra boost for strong path matches
|
|
97
|
+
if (pathScore > 0.5) {
|
|
98
|
+
score += 2.0; // Additional boost for strong path alignment
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Task relevance (tag matching)
|
|
102
|
+
const tagScore = this.taskMatchStrength(memory.tags, task);
|
|
103
|
+
score += 0.8 * tagScore;
|
|
104
|
+
// Single-word query boost if tag matches
|
|
105
|
+
if (isSingleWord && tagScore > 0) {
|
|
106
|
+
score += 3.0; // Strong boost for single-word matches
|
|
107
|
+
}
|
|
108
|
+
// Recency bonus (decay over time)
|
|
109
|
+
score += 0.6 * this.recencyScore(memory.created_at);
|
|
110
|
+
// Importance weight
|
|
111
|
+
score += 0.6 * (memory.importance || 3);
|
|
112
|
+
// Cross-project penalty
|
|
113
|
+
score -= 1.0 * +(memory.project_id !== this.projectId);
|
|
114
|
+
// FTS score integration
|
|
115
|
+
score += Math.min(result.score / 10, 1.0); // Normalize and cap FTS contribution
|
|
116
|
+
const content = this.formatMemoryForInjection(memory);
|
|
117
|
+
return {
|
|
118
|
+
id: memory.id,
|
|
119
|
+
type: 'memory',
|
|
120
|
+
summary: memory.summary,
|
|
121
|
+
content,
|
|
122
|
+
score,
|
|
123
|
+
source: `${memory.project_id}:${memory.id}`,
|
|
124
|
+
byteSize: Buffer.byteLength(content, 'utf8')
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
scoreConcepts(results, task) {
|
|
129
|
+
return results.map(({ concept, score: ftsScore }) => {
|
|
130
|
+
let score = 0;
|
|
131
|
+
// Concept base score (global knowledge value)
|
|
132
|
+
score += 2.0; // Concepts are valuable
|
|
133
|
+
// Task relevance
|
|
134
|
+
score += 0.8 * this.taskMatchStrength(concept.tags, task);
|
|
135
|
+
// Importance
|
|
136
|
+
score += 0.6 * concept.importance;
|
|
137
|
+
// FTS score
|
|
138
|
+
score += Math.min(ftsScore / 10, 1.0);
|
|
139
|
+
// No recency penalty for concepts (timeless knowledge)
|
|
140
|
+
const content = this.formatConceptForInjection(concept);
|
|
141
|
+
return {
|
|
142
|
+
id: concept.id,
|
|
143
|
+
type: 'concept',
|
|
144
|
+
summary: concept.title,
|
|
145
|
+
content,
|
|
146
|
+
score,
|
|
147
|
+
source: `global:${concept.id}`,
|
|
148
|
+
byteSize: Buffer.byteLength(content, 'utf8')
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
selectByBudget(candidates, budgetLimit, topK) {
|
|
153
|
+
const selected = [];
|
|
154
|
+
let budgetUsed = 0;
|
|
155
|
+
// Greedy selection with deduplication
|
|
156
|
+
const seen = new Set();
|
|
157
|
+
for (const candidate of candidates) {
|
|
158
|
+
if (selected.length >= topK)
|
|
159
|
+
break;
|
|
160
|
+
if (budgetUsed + candidate.byteSize > budgetLimit)
|
|
161
|
+
break;
|
|
162
|
+
// Dedupe by normalized summary
|
|
163
|
+
const dedupeKey = this.normalizeForDedupe(candidate.summary);
|
|
164
|
+
if (seen.has(dedupeKey))
|
|
165
|
+
continue;
|
|
166
|
+
selected.push(candidate);
|
|
167
|
+
budgetUsed += candidate.byteSize;
|
|
168
|
+
seen.add(dedupeKey);
|
|
169
|
+
}
|
|
170
|
+
return selected;
|
|
171
|
+
}
|
|
172
|
+
inferPathPrefixes(openFiles) {
|
|
173
|
+
const prefixes = new Set();
|
|
174
|
+
for (const file of openFiles) {
|
|
175
|
+
// Use the file path directly (don't make it relative)
|
|
176
|
+
// Split by / to handle both absolute and relative paths
|
|
177
|
+
const parts = file.split('/').filter(p => p);
|
|
178
|
+
// Build prefixes as absolute-style paths
|
|
179
|
+
for (let i = 1; i <= parts.length; i++) {
|
|
180
|
+
const prefix = '/' + parts.slice(0, i).join('/');
|
|
181
|
+
prefixes.add(prefix);
|
|
182
|
+
// Also add with wildcard for glob matching
|
|
183
|
+
if (i < parts.length) {
|
|
184
|
+
prefixes.add(prefix + '/*');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return Array.from(prefixes);
|
|
189
|
+
}
|
|
190
|
+
pathMatchStrength(memoryPaths, prefixes) {
|
|
191
|
+
if (memoryPaths.length === 0 || prefixes.length === 0)
|
|
192
|
+
return 0;
|
|
193
|
+
let maxMatch = 0;
|
|
194
|
+
for (const memPath of memoryPaths) {
|
|
195
|
+
// Remove wildcard from memory path for comparison
|
|
196
|
+
const memPathClean = memPath.replace(/\*$/, '');
|
|
197
|
+
for (const prefix of prefixes) {
|
|
198
|
+
// Remove wildcard from prefix for comparison
|
|
199
|
+
const prefixClean = prefix.replace(/\*$/, '');
|
|
200
|
+
// Check for exact match or prefix match
|
|
201
|
+
if (memPathClean === prefixClean) {
|
|
202
|
+
// Exact match is perfect
|
|
203
|
+
maxMatch = 1.0;
|
|
204
|
+
}
|
|
205
|
+
else if (prefixClean.startsWith(memPathClean) || memPathClean.startsWith(prefixClean)) {
|
|
206
|
+
// Partial match based on overlap
|
|
207
|
+
const overlap = Math.min(memPathClean.length, prefixClean.length);
|
|
208
|
+
const longer = Math.max(memPathClean.length, prefixClean.length);
|
|
209
|
+
const score = overlap / longer;
|
|
210
|
+
maxMatch = Math.max(maxMatch, score);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return maxMatch;
|
|
215
|
+
}
|
|
216
|
+
hasPathMatch(memoryPaths, prefixes) {
|
|
217
|
+
return this.pathMatchStrength(memoryPaths, prefixes) > 0.3;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Extract meaningful search terms from a task description
|
|
221
|
+
* This improves FTS search by focusing on key terms
|
|
222
|
+
*/
|
|
223
|
+
extractSearchTerms(task) {
|
|
224
|
+
// Remove common stop words that don't help search
|
|
225
|
+
const stopWords = new Set([
|
|
226
|
+
'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
|
|
227
|
+
'of', 'with', 'by', 'from', 'up', 'about', 'into', 'through', 'during',
|
|
228
|
+
'how', 'when', 'where', 'why', 'what', 'which', 'who', 'whom', 'this',
|
|
229
|
+
'that', 'these', 'those', 'am', 'is', 'are', 'was', 'were', 'be', 'been',
|
|
230
|
+
'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would',
|
|
231
|
+
'should', 'could', 'may', 'might', 'must', 'can', 'need', 'new', 'create',
|
|
232
|
+
'implement', 'fix', 'update', 'add', 'remove', 'change', 'modify'
|
|
233
|
+
]);
|
|
234
|
+
// Extract meaningful words
|
|
235
|
+
const words = task.toLowerCase()
|
|
236
|
+
.split(/\s+/)
|
|
237
|
+
.filter(word => {
|
|
238
|
+
// Keep word if it's not a stop word and has meaningful length
|
|
239
|
+
return word.length > 2 && !stopWords.has(word);
|
|
240
|
+
})
|
|
241
|
+
.slice(0, 5); // Limit to top 5 keywords to avoid dilution
|
|
242
|
+
// For single-word queries, use wildcard to catch partial matches
|
|
243
|
+
if (words.length === 1) {
|
|
244
|
+
return `${words[0]}*`; // Use wildcard for broader matching
|
|
245
|
+
}
|
|
246
|
+
// If we have keywords, join them with OR for FTS
|
|
247
|
+
// If no keywords extracted, fallback to original task
|
|
248
|
+
return words.length > 0 ? words.join(' OR ') : task;
|
|
249
|
+
}
|
|
250
|
+
taskMatchStrength(tags, task) {
|
|
251
|
+
const taskWords = task.toLowerCase().split(/\s+/);
|
|
252
|
+
let matches = 0;
|
|
253
|
+
for (const tag of tags) {
|
|
254
|
+
const tagLower = tag.toLowerCase();
|
|
255
|
+
for (const word of taskWords) {
|
|
256
|
+
// More lenient matching: check if either contains the other
|
|
257
|
+
// or if they share at least 3 characters in common
|
|
258
|
+
if (tagLower.includes(word) || word.includes(tagLower)) {
|
|
259
|
+
matches++;
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
// Additional check for partial matches (e.g., "auth" matches "authentication")
|
|
263
|
+
if (word.length >= 3 && tagLower.length >= 3) {
|
|
264
|
+
const minLen = Math.min(word.length, tagLower.length);
|
|
265
|
+
if (word.substring(0, minLen) === tagLower.substring(0, minLen)) {
|
|
266
|
+
matches++;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return tags.length > 0 ? matches / tags.length : 0;
|
|
273
|
+
}
|
|
274
|
+
recencyScore(createdAt) {
|
|
275
|
+
const ageHours = (Date.now() - createdAt) / (1000 * 60 * 60);
|
|
276
|
+
// Decay function: full score for < 24h, half at 7 days, minimal after 30 days
|
|
277
|
+
if (ageHours < 24)
|
|
278
|
+
return 1.0;
|
|
279
|
+
if (ageHours < 168)
|
|
280
|
+
return 0.8; // 7 days
|
|
281
|
+
if (ageHours < 720)
|
|
282
|
+
return 0.5; // 30 days
|
|
283
|
+
return 0.2;
|
|
284
|
+
}
|
|
285
|
+
formatMemoryForInjection(memory) {
|
|
286
|
+
const parts = [
|
|
287
|
+
`## ${memory.summary}`,
|
|
288
|
+
memory.text
|
|
289
|
+
];
|
|
290
|
+
if (memory.paths.length > 0) {
|
|
291
|
+
parts.push(`**Paths:** ${memory.paths.join(', ')}`);
|
|
292
|
+
}
|
|
293
|
+
if (memory.tags.length > 0) {
|
|
294
|
+
parts.push(`**Tags:** ${memory.tags.join(', ')}`);
|
|
295
|
+
}
|
|
296
|
+
return parts.join('\n\n');
|
|
297
|
+
}
|
|
298
|
+
formatConceptForInjection(concept) {
|
|
299
|
+
return `## ${concept.title}\n\n${concept.body}\n\n**Tags:** ${concept.tags.join(', ')}`;
|
|
300
|
+
}
|
|
301
|
+
normalizeForDedupe(summary) {
|
|
302
|
+
return summary
|
|
303
|
+
.toLowerCase()
|
|
304
|
+
.replace(/[^\w\s]/g, '')
|
|
305
|
+
.replace(/\s+/g, ' ')
|
|
306
|
+
.trim();
|
|
307
|
+
}
|
|
308
|
+
async getProjectAllowlist() {
|
|
309
|
+
try {
|
|
310
|
+
const result = this.conceptStore.updateAllowlist({
|
|
311
|
+
projectId: this.projectId,
|
|
312
|
+
list: true
|
|
313
|
+
});
|
|
314
|
+
return result.allowlist || [];
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
logger.warn(`Failed to get allowlist for project ${this.projectId}:`, error);
|
|
318
|
+
return [];
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Context rules management
|
|
322
|
+
contextRules = {
|
|
323
|
+
maxMemoryAge: 30 * 24 * 60 * 60 * 1000, // 30 days
|
|
324
|
+
minImportance: 2,
|
|
325
|
+
pathBoostMultiplier: 2.0,
|
|
326
|
+
conceptImportanceThreshold: 3,
|
|
327
|
+
dedupeThreshold: 0.8
|
|
328
|
+
};
|
|
329
|
+
getRules() {
|
|
330
|
+
return { ...this.contextRules };
|
|
331
|
+
}
|
|
332
|
+
setRules(rules) {
|
|
333
|
+
Object.assign(this.contextRules, rules);
|
|
334
|
+
logger.info('Context rules updated:', rules);
|
|
335
|
+
}
|
|
336
|
+
close() {
|
|
337
|
+
this.memoryDb.close();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=context-broker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-broker.js","sourceRoot":"","sources":["../../src/memory-server/context-broker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export interface Memory {
|
|
2
|
+
id: string;
|
|
3
|
+
project_id: string;
|
|
4
|
+
summary: string;
|
|
5
|
+
text: string;
|
|
6
|
+
tags: string[];
|
|
7
|
+
paths: string[];
|
|
8
|
+
importance: number;
|
|
9
|
+
created_at: number;
|
|
10
|
+
updated_at: number;
|
|
11
|
+
ttl?: number;
|
|
12
|
+
expires_at?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface SearchResult {
|
|
15
|
+
memory: Memory;
|
|
16
|
+
score: number;
|
|
17
|
+
snippet?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface EnhancedSearchResult {
|
|
20
|
+
results: SearchResult[];
|
|
21
|
+
debug_info: {
|
|
22
|
+
original_query: string;
|
|
23
|
+
queries_tried: string[];
|
|
24
|
+
fallback_used?: string;
|
|
25
|
+
total_memories_scanned: number;
|
|
26
|
+
search_time_ms: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export declare class MemoryDatabase {
|
|
30
|
+
private db;
|
|
31
|
+
private projectId;
|
|
32
|
+
private projectRoot;
|
|
33
|
+
constructor(projectRoot: string, projectId: string);
|
|
34
|
+
private initializeSchema;
|
|
35
|
+
private setupTriggers;
|
|
36
|
+
save(params: {
|
|
37
|
+
summary: string;
|
|
38
|
+
text: string;
|
|
39
|
+
tags?: string[];
|
|
40
|
+
paths?: string[];
|
|
41
|
+
importance?: number;
|
|
42
|
+
ttl?: number;
|
|
43
|
+
}): {
|
|
44
|
+
id: string;
|
|
45
|
+
};
|
|
46
|
+
search(params: {
|
|
47
|
+
q: string;
|
|
48
|
+
k?: number;
|
|
49
|
+
require_path_match?: boolean;
|
|
50
|
+
tags?: string[];
|
|
51
|
+
include_expired?: boolean;
|
|
52
|
+
}): SearchResult[];
|
|
53
|
+
searchWithDebug(params: {
|
|
54
|
+
q: string;
|
|
55
|
+
k?: number;
|
|
56
|
+
require_path_match?: boolean;
|
|
57
|
+
tags?: string[];
|
|
58
|
+
include_expired?: boolean;
|
|
59
|
+
}): EnhancedSearchResult;
|
|
60
|
+
private getTotalMemoryCount;
|
|
61
|
+
private executeSearch;
|
|
62
|
+
getRecent(params: {
|
|
63
|
+
k?: number;
|
|
64
|
+
path_prefix?: string;
|
|
65
|
+
include_expired?: boolean;
|
|
66
|
+
}): Memory[];
|
|
67
|
+
get(id: string): Memory | null;
|
|
68
|
+
getMultiple(ids: string[]): {
|
|
69
|
+
[id: string]: Memory | null;
|
|
70
|
+
};
|
|
71
|
+
forget(id: string): {
|
|
72
|
+
ok: boolean;
|
|
73
|
+
message?: string;
|
|
74
|
+
};
|
|
75
|
+
private update;
|
|
76
|
+
private cleanupExpired;
|
|
77
|
+
searchPreview(params: {
|
|
78
|
+
q: string;
|
|
79
|
+
k?: number;
|
|
80
|
+
require_path_match?: boolean;
|
|
81
|
+
tags?: string[];
|
|
82
|
+
include_expired?: boolean;
|
|
83
|
+
}): {
|
|
84
|
+
preview: {
|
|
85
|
+
would_return: number;
|
|
86
|
+
search_explanation: string;
|
|
87
|
+
query_breakdown: {
|
|
88
|
+
original: string;
|
|
89
|
+
processed: string;
|
|
90
|
+
terms: string[];
|
|
91
|
+
filters_applied: string[];
|
|
92
|
+
};
|
|
93
|
+
match_examples: Array<{
|
|
94
|
+
summary: string;
|
|
95
|
+
match_reason: string;
|
|
96
|
+
score_estimate: string;
|
|
97
|
+
}>;
|
|
98
|
+
};
|
|
99
|
+
suggestions: string[];
|
|
100
|
+
};
|
|
101
|
+
private generateId;
|
|
102
|
+
private computeDedupeHash;
|
|
103
|
+
private escapeQuery;
|
|
104
|
+
private rowToMemory;
|
|
105
|
+
private getActiveProjectId;
|
|
106
|
+
close(): void;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/memory-server/database.ts"],"names":[],"mappings":"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"}
|