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.
Files changed (120) hide show
  1. package/AGENTS.md +25 -0
  2. package/LICENSE +21 -0
  3. package/bin/kratos-cli +7 -0
  4. package/dist/cli/capture-handler.d.ts +13 -0
  5. package/dist/cli/capture-handler.d.ts.map +1 -0
  6. package/dist/cli/capture-handler.js +112 -0
  7. package/dist/cli/capture-handler.js.map +1 -0
  8. package/dist/cli/commands/ask.d.ts +5 -0
  9. package/dist/cli/commands/ask.d.ts.map +1 -0
  10. package/dist/cli/commands/ask.js +64 -0
  11. package/dist/cli/commands/ask.js.map +1 -0
  12. package/dist/cli/commands/capture.d.ts +5 -0
  13. package/dist/cli/commands/capture.d.ts.map +1 -0
  14. package/dist/cli/commands/capture.js +31 -0
  15. package/dist/cli/commands/capture.js.map +1 -0
  16. package/dist/cli/commands/forget.d.ts +3 -0
  17. package/dist/cli/commands/forget.d.ts.map +1 -0
  18. package/dist/cli/commands/forget.js +12 -0
  19. package/dist/cli/commands/forget.js.map +1 -0
  20. package/dist/cli/commands/get.d.ts +3 -0
  21. package/dist/cli/commands/get.d.ts.map +1 -0
  22. package/dist/cli/commands/get.js +28 -0
  23. package/dist/cli/commands/get.js.map +1 -0
  24. package/dist/cli/commands/hooks.d.ts +2 -0
  25. package/dist/cli/commands/hooks.d.ts.map +1 -0
  26. package/dist/cli/commands/hooks.js +136 -0
  27. package/dist/cli/commands/hooks.js.map +1 -0
  28. package/dist/cli/commands/migrate.d.ts +5 -0
  29. package/dist/cli/commands/migrate.d.ts.map +1 -0
  30. package/dist/cli/commands/migrate.js +56 -0
  31. package/dist/cli/commands/migrate.js.map +1 -0
  32. package/dist/cli/commands/recent.d.ts +6 -0
  33. package/dist/cli/commands/recent.d.ts.map +1 -0
  34. package/dist/cli/commands/recent.js +21 -0
  35. package/dist/cli/commands/recent.js.map +1 -0
  36. package/dist/cli/commands/save.d.ts +8 -0
  37. package/dist/cli/commands/save.d.ts.map +1 -0
  38. package/dist/cli/commands/save.js +31 -0
  39. package/dist/cli/commands/save.js.map +1 -0
  40. package/dist/cli/commands/scan.d.ts +5 -0
  41. package/dist/cli/commands/scan.d.ts.map +1 -0
  42. package/dist/cli/commands/scan.js +28 -0
  43. package/dist/cli/commands/scan.js.map +1 -0
  44. package/dist/cli/commands/search.d.ts +8 -0
  45. package/dist/cli/commands/search.d.ts.map +1 -0
  46. package/dist/cli/commands/search.js +45 -0
  47. package/dist/cli/commands/search.js.map +1 -0
  48. package/dist/cli/commands/status.d.ts +3 -0
  49. package/dist/cli/commands/status.d.ts.map +1 -0
  50. package/dist/cli/commands/status.js +89 -0
  51. package/dist/cli/commands/status.js.map +1 -0
  52. package/dist/cli/commands/switch.d.ts +3 -0
  53. package/dist/cli/commands/switch.d.ts.map +1 -0
  54. package/dist/cli/commands/switch.js +18 -0
  55. package/dist/cli/commands/switch.js.map +1 -0
  56. package/dist/cli/core.d.ts +15 -0
  57. package/dist/cli/core.d.ts.map +1 -0
  58. package/dist/cli/core.js +18 -0
  59. package/dist/cli/core.js.map +1 -0
  60. package/dist/cli/index.d.ts +3 -0
  61. package/dist/cli/index.d.ts.map +1 -0
  62. package/dist/cli/index.js +157 -0
  63. package/dist/cli/index.js.map +1 -0
  64. package/dist/cli/output.d.ts +22 -0
  65. package/dist/cli/output.d.ts.map +1 -0
  66. package/dist/cli/output.js +74 -0
  67. package/dist/cli/output.js.map +1 -0
  68. package/dist/compression/factory.d.ts +6 -0
  69. package/dist/compression/factory.d.ts.map +1 -0
  70. package/dist/compression/factory.js +8 -0
  71. package/dist/compression/factory.js.map +1 -0
  72. package/dist/compression/index.d.ts +10 -0
  73. package/dist/compression/index.d.ts.map +1 -0
  74. package/dist/compression/index.js +2 -0
  75. package/dist/compression/index.js.map +1 -0
  76. package/dist/compression/rule-compressor.d.ts +9 -0
  77. package/dist/compression/rule-compressor.d.ts.map +1 -0
  78. package/dist/compression/rule-compressor.js +43 -0
  79. package/dist/compression/rule-compressor.js.map +1 -0
  80. package/dist/memory-server/concept-store-enhanced.d.ts +88 -0
  81. package/dist/memory-server/concept-store-enhanced.d.ts.map +1 -0
  82. package/dist/memory-server/concept-store-enhanced.js +392 -0
  83. package/dist/memory-server/concept-store-enhanced.js.map +1 -0
  84. package/dist/memory-server/concept-store.d.ts +58 -0
  85. package/dist/memory-server/concept-store.d.ts.map +1 -0
  86. package/dist/memory-server/concept-store.js +329 -0
  87. package/dist/memory-server/concept-store.js.map +1 -0
  88. package/dist/memory-server/context-broker.d.ts +63 -0
  89. package/dist/memory-server/context-broker.d.ts.map +1 -0
  90. package/dist/memory-server/context-broker.js +340 -0
  91. package/dist/memory-server/context-broker.js.map +1 -0
  92. package/dist/memory-server/database.d.ts +108 -0
  93. package/dist/memory-server/database.d.ts.map +1 -0
  94. package/dist/memory-server/database.js +690 -0
  95. package/dist/memory-server/database.js.map +1 -0
  96. package/dist/project-manager.d.ts +77 -0
  97. package/dist/project-manager.d.ts.map +1 -0
  98. package/dist/project-manager.js +226 -0
  99. package/dist/project-manager.js.map +1 -0
  100. package/dist/security/data-retention.d.ts +104 -0
  101. package/dist/security/data-retention.d.ts.map +1 -0
  102. package/dist/security/data-retention.js +444 -0
  103. package/dist/security/data-retention.js.map +1 -0
  104. package/dist/security/encryption.d.ts +48 -0
  105. package/dist/security/encryption.d.ts.map +1 -0
  106. package/dist/security/encryption.js +131 -0
  107. package/dist/security/encryption.js.map +1 -0
  108. package/dist/security/pii-detector.d.ts +61 -0
  109. package/dist/security/pii-detector.d.ts.map +1 -0
  110. package/dist/security/pii-detector.js +220 -0
  111. package/dist/security/pii-detector.js.map +1 -0
  112. package/dist/types/index.d.ts +151 -0
  113. package/dist/types/index.d.ts.map +1 -0
  114. package/dist/types/index.js +2 -0
  115. package/dist/types/index.js.map +1 -0
  116. package/dist/utils/logger.d.ts +9 -0
  117. package/dist/utils/logger.d.ts.map +1 -0
  118. package/dist/utils/logger.js +10 -0
  119. package/dist/utils/logger.js.map +1 -0
  120. 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":"AAQA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAChB,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAoBlD,OAAO,CAAC,gBAAgB;IA6DxB,OAAO,CAAC,aAAa;IAOrB,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAiElB,MAAM,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,YAAY,EAAE;IAsDlB,eAAe,CAAC,MAAM,EAAE;QACtB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,oBAAoB;IAuGxB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,aAAa;IAmErB,SAAS,CAAC,MAAM,EAAE;QAChB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,MAAM,EAAE;IAiCZ,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgB9B,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE;IA+B3D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IA6CrD,OAAO,CAAC,MAAM;IAsCd,OAAO,CAAC,cAAc;IAUtB,aAAa,CAAC,MAAM,EAAE;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG;QACF,OAAO,EAAE;YACP,YAAY,EAAE,MAAM,CAAC;YACrB,kBAAkB,EAAE,MAAM,CAAC;YAC3B,eAAe,EAAE;gBACf,QAAQ,EAAE,MAAM,CAAC;gBACjB,SAAS,EAAE,MAAM,CAAC;gBAClB,KAAK,EAAE,MAAM,EAAE,CAAC;gBAChB,eAAe,EAAE,MAAM,EAAE,CAAC;aAC3B,CAAC;YACF,cAAc,EAAE,KAAK,CAAC;gBACpB,OAAO,EAAE,MAAM,CAAC;gBAChB,YAAY,EAAE,MAAM,CAAC;gBACrB,cAAc,EAAE,MAAM,CAAC;aACxB,CAAC,CAAC;SACJ,CAAC;QACF,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;IA0LD,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,kBAAkB;IAM1B,KAAK;CAGN"}