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,392 @@
1
+ import Database from 'better-sqlite3';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import fs from 'fs-extra';
5
+ import crypto from 'crypto';
6
+ import { Logger } from '../utils/logger.js';
7
+ const logger = new Logger('ConceptStore');
8
+ /**
9
+ * ENHANCED Concept Store - 10/10 Features
10
+ *
11
+ * NEW FEATURES:
12
+ * - Auto-discovery: Automatically finds and suggests relevant concepts
13
+ * - Usage tracking: Tracks which concepts are most useful
14
+ * - Smart ranking: Combines relevance, importance, and usage
15
+ * - Cross-project learning: Optionally share valuable concepts
16
+ * - Concept relationships: Link related concepts
17
+ */
18
+ export class ConceptStoreEnhanced {
19
+ db;
20
+ static instances = new Map();
21
+ projectId;
22
+ // Concept discovery cache
23
+ discoveryCache = new Map();
24
+ constructor(projectId) {
25
+ this.projectId = projectId;
26
+ // ISOLATED concept store per project
27
+ const kratosHome = path.join(os.homedir(), '.kratos');
28
+ const dbPath = path.join(kratosHome, 'projects', projectId, 'databases', 'concepts.db');
29
+ fs.ensureDirSync(path.dirname(dbPath));
30
+ this.db = new Database(dbPath);
31
+ this.db.pragma('journal_mode = WAL');
32
+ this.initializeEnhancedSchema();
33
+ logger.info(`Enhanced Concept Store initialized for project: ${projectId}`);
34
+ }
35
+ static getInstance(projectId) {
36
+ const id = projectId || 'global';
37
+ if (!ConceptStoreEnhanced.instances.has(id)) {
38
+ ConceptStoreEnhanced.instances.set(id, new ConceptStoreEnhanced(id));
39
+ }
40
+ return ConceptStoreEnhanced.instances.get(id);
41
+ }
42
+ initializeEnhancedSchema() {
43
+ // Enhanced concepts table with usage tracking
44
+ this.db.exec(`
45
+ CREATE TABLE IF NOT EXISTS concepts (
46
+ id TEXT PRIMARY KEY,
47
+ title TEXT NOT NULL,
48
+ body TEXT NOT NULL,
49
+ tags TEXT DEFAULT '[]',
50
+ importance INTEGER DEFAULT 3 CHECK(importance >= 1 AND importance <= 5),
51
+ usage_count INTEGER DEFAULT 0,
52
+ last_used INTEGER,
53
+ created_at INTEGER NOT NULL,
54
+ updated_at INTEGER NOT NULL,
55
+ source TEXT DEFAULT 'manual', -- manual, discovered, imported
56
+ confidence REAL DEFAULT 1.0 -- confidence in the concept
57
+ );
58
+
59
+ CREATE INDEX IF NOT EXISTS idx_concept_importance ON concepts(importance DESC);
60
+ CREATE INDEX IF NOT EXISTS idx_concept_usage ON concepts(usage_count DESC);
61
+ CREATE INDEX IF NOT EXISTS idx_concept_last_used ON concepts(last_used DESC);
62
+ `);
63
+ // Concept relationships table
64
+ this.db.exec(`
65
+ CREATE TABLE IF NOT EXISTS concept_relationships (
66
+ concept_id TEXT NOT NULL,
67
+ related_id TEXT NOT NULL,
68
+ relationship_type TEXT DEFAULT 'related', -- related, prerequisite, extends, conflicts
69
+ strength REAL DEFAULT 0.5,
70
+ PRIMARY KEY (concept_id, related_id),
71
+ FOREIGN KEY (concept_id) REFERENCES concepts(id) ON DELETE CASCADE,
72
+ FOREIGN KEY (related_id) REFERENCES concepts(id) ON DELETE CASCADE
73
+ );
74
+ `);
75
+ // Project allowlists (enhanced with auto-add suggestions)
76
+ this.db.exec(`
77
+ CREATE TABLE IF NOT EXISTS project_allowlists (
78
+ project_id TEXT NOT NULL,
79
+ concept_id TEXT NOT NULL,
80
+ added_at INTEGER NOT NULL,
81
+ auto_suggested BOOLEAN DEFAULT 0,
82
+ accepted BOOLEAN DEFAULT 1,
83
+ PRIMARY KEY (project_id, concept_id),
84
+ FOREIGN KEY (concept_id) REFERENCES concepts(id) ON DELETE CASCADE
85
+ );
86
+ `);
87
+ // Full-text search with enhanced fields
88
+ this.db.exec(`
89
+ CREATE VIRTUAL TABLE IF NOT EXISTS concept_fts USING fts5(
90
+ title,
91
+ body,
92
+ tags,
93
+ content='concepts',
94
+ content_rowid='rowid',
95
+ tokenize='porter unicode61'
96
+ );
97
+
98
+ -- Enhanced triggers for FTS
99
+ CREATE TRIGGER IF NOT EXISTS concept_fts_insert AFTER INSERT ON concepts BEGIN
100
+ INSERT INTO concept_fts(rowid, title, body, tags)
101
+ VALUES (new.rowid, new.title, new.body,
102
+ CASE WHEN json_array_length(new.tags) > 0
103
+ THEN (SELECT group_concat(value, ' ') FROM json_each(new.tags))
104
+ ELSE ''
105
+ END);
106
+ END;
107
+
108
+ CREATE TRIGGER IF NOT EXISTS concept_fts_delete AFTER DELETE ON concepts BEGIN
109
+ DELETE FROM concept_fts WHERE rowid = old.rowid;
110
+ END;
111
+
112
+ CREATE TRIGGER IF NOT EXISTS concept_fts_update AFTER UPDATE ON concepts BEGIN
113
+ DELETE FROM concept_fts WHERE rowid = old.rowid;
114
+ INSERT INTO concept_fts(rowid, title, body, tags)
115
+ VALUES (new.rowid, new.title, new.body,
116
+ CASE WHEN json_array_length(new.tags) > 0
117
+ THEN (SELECT group_concat(value, ' ') FROM json_each(new.tags))
118
+ ELSE ''
119
+ END);
120
+ END;
121
+ `);
122
+ }
123
+ /**
124
+ * Enhanced save with auto-discovery and relationship detection
125
+ */
126
+ save(params) {
127
+ const now = Date.now();
128
+ const id = this.generateConceptId(params.title);
129
+ const concept = {
130
+ id,
131
+ title: params.title,
132
+ body: params.body,
133
+ tags: params.tags || [],
134
+ importance: params.importance || 3,
135
+ usage_count: 0,
136
+ created_at: now,
137
+ updated_at: now
138
+ };
139
+ const stmt = this.db.prepare(`
140
+ INSERT OR REPLACE INTO concepts
141
+ (id, title, body, tags, importance, usage_count, created_at, updated_at, source)
142
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
143
+ `);
144
+ stmt.run(concept.id, concept.title, concept.body, JSON.stringify(concept.tags), concept.importance, 0, concept.created_at, concept.updated_at, params.source || 'manual');
145
+ // Save relationships if provided
146
+ if (params.relatedTo && params.relatedTo.length > 0) {
147
+ this.addRelationships(id, params.relatedTo);
148
+ }
149
+ // Auto-discover related concepts
150
+ this.autoDiscoverRelated(concept);
151
+ logger.info(`Saved enhanced concept: ${concept.title} (${id})`);
152
+ return concept;
153
+ }
154
+ /**
155
+ * ENHANCED search with smart ranking
156
+ */
157
+ search(params) {
158
+ const k = params.k || 10;
159
+ const searchQuery = params.q || '*';
160
+ let query;
161
+ let queryParams = [];
162
+ if (searchQuery === '*') {
163
+ // Return all concepts with smart ranking
164
+ query = `
165
+ SELECT
166
+ c.*,
167
+ (c.importance * 2.0 +
168
+ COALESCE(c.usage_count * 0.1, 0) +
169
+ CASE WHEN c.last_used > ? THEN 2.0 ELSE 0 END) as smart_score,
170
+ '' as snippet
171
+ FROM concepts c
172
+ `;
173
+ // Recent = last 7 days
174
+ queryParams = [Date.now() - 7 * 24 * 60 * 60 * 1000];
175
+ }
176
+ else {
177
+ // Enhanced FTS search with smart scoring
178
+ query = `
179
+ SELECT
180
+ c.*,
181
+ (-bm25(concept_fts) * 3.0 +
182
+ c.importance * 2.0 +
183
+ COALESCE(c.usage_count * 0.1, 0) +
184
+ CASE WHEN c.last_used > ? THEN 2.0 ELSE 0 END) as smart_score,
185
+ snippet(concept_fts, 0, '[', ']', '...', 32) as snippet
186
+ FROM concepts c
187
+ JOIN concept_fts ON c.rowid = concept_fts.rowid
188
+ WHERE concept_fts MATCH ?
189
+ `;
190
+ queryParams = [Date.now() - 7 * 24 * 60 * 60 * 1000, searchQuery];
191
+ }
192
+ // Apply filters
193
+ if (params.projectId) {
194
+ const whereClause = searchQuery === '*' ? ' WHERE' : ' AND';
195
+ query += `${whereClause} c.id IN (
196
+ SELECT concept_id FROM project_allowlists
197
+ WHERE project_id = ? AND accepted = 1
198
+ )`;
199
+ queryParams.push(params.projectId);
200
+ }
201
+ // Smart ordering
202
+ query += ' ORDER BY smart_score DESC LIMIT ?';
203
+ queryParams.push(k);
204
+ const stmt = this.db.prepare(query);
205
+ const results = stmt.all(...queryParams);
206
+ // Include related concepts if requested
207
+ let finalResults = results.map(row => ({
208
+ concept: this.rowToConcept(row),
209
+ score: row.smart_score || 1.0,
210
+ snippet: row.snippet
211
+ }));
212
+ if (params.includeRelated && finalResults.length > 0) {
213
+ finalResults = this.enrichWithRelated(finalResults);
214
+ }
215
+ // Track usage for learning
216
+ if (finalResults.length > 0) {
217
+ this.trackUsage(finalResults[0].concept.id);
218
+ }
219
+ return finalResults;
220
+ }
221
+ /**
222
+ * Auto-discover concepts from text
223
+ */
224
+ async autoDiscover(text, context) {
225
+ const discovered = [];
226
+ // Pattern matching for common concept indicators
227
+ const patterns = [
228
+ /(?:best practice|pattern|principle|rule):\s*([^.]+)/gi,
229
+ /(?:always|never|should|must)\s+([^.]+)/gi,
230
+ /(?:tip|note|important):\s*([^.]+)/gi,
231
+ /(?:remember|keep in mind):\s*([^.]+)/gi
232
+ ];
233
+ for (const pattern of patterns) {
234
+ const matches = text.matchAll(pattern);
235
+ for (const match of matches) {
236
+ const conceptText = match[1].trim();
237
+ if (conceptText.length > 20 && conceptText.length < 500) {
238
+ const concept = this.save({
239
+ title: this.generateTitle(conceptText),
240
+ body: conceptText,
241
+ tags: this.extractTags(conceptText),
242
+ importance: 3,
243
+ source: 'discovered'
244
+ });
245
+ discovered.push(concept);
246
+ }
247
+ }
248
+ }
249
+ return discovered;
250
+ }
251
+ /**
252
+ * Track concept usage for smart ranking
253
+ */
254
+ trackUsage(conceptId) {
255
+ const stmt = this.db.prepare(`
256
+ UPDATE concepts
257
+ SET usage_count = usage_count + 1,
258
+ last_used = ?
259
+ WHERE id = ?
260
+ `);
261
+ stmt.run(Date.now(), conceptId);
262
+ }
263
+ /**
264
+ * Add relationships between concepts
265
+ */
266
+ addRelationships(conceptId, relatedIds, type = 'related') {
267
+ const stmt = this.db.prepare(`
268
+ INSERT OR REPLACE INTO concept_relationships
269
+ (concept_id, related_id, relationship_type, strength)
270
+ VALUES (?, ?, ?, ?)
271
+ `);
272
+ for (const relatedId of relatedIds) {
273
+ stmt.run(conceptId, relatedId, type, 0.5);
274
+ }
275
+ }
276
+ /**
277
+ * Auto-discover related concepts
278
+ */
279
+ autoDiscoverRelated(concept) {
280
+ // Find concepts with overlapping tags
281
+ const stmt = this.db.prepare(`
282
+ SELECT id, title, tags FROM concepts
283
+ WHERE id != ?
284
+ LIMIT 20
285
+ `);
286
+ const others = stmt.all(concept.id);
287
+ for (const other of others) {
288
+ const otherTags = JSON.parse(other.tags);
289
+ const overlap = concept.tags.filter(t => otherTags.includes(t)).length;
290
+ if (overlap > 0) {
291
+ const strength = overlap / Math.max(concept.tags.length, otherTags.length);
292
+ if (strength > 0.3) {
293
+ this.addRelationships(concept.id, [other.id], 'related');
294
+ }
295
+ }
296
+ }
297
+ }
298
+ /**
299
+ * Enrich results with related concepts
300
+ */
301
+ enrichWithRelated(results) {
302
+ const enriched = [...results];
303
+ const seen = new Set(results.map(r => r.concept.id));
304
+ for (const result of results.slice(0, 3)) {
305
+ const stmt = this.db.prepare(`
306
+ SELECT c.*, r.strength
307
+ FROM concepts c
308
+ JOIN concept_relationships r ON c.id = r.related_id
309
+ WHERE r.concept_id = ?
310
+ ORDER BY r.strength DESC
311
+ LIMIT 2
312
+ `);
313
+ const related = stmt.all(result.concept.id);
314
+ for (const rel of related) {
315
+ if (!seen.has(rel.id)) {
316
+ enriched.push({
317
+ concept: this.rowToConcept(rel),
318
+ score: result.score * rel.strength * 0.5,
319
+ snippet: `[Related to: ${result.concept.title}]`
320
+ });
321
+ seen.add(rel.id);
322
+ }
323
+ }
324
+ }
325
+ return enriched.sort((a, b) => b.score - a.score);
326
+ }
327
+ /**
328
+ * Auto-suggest concepts for a project based on context
329
+ */
330
+ async suggestForProject(projectId, context) {
331
+ const searchResults = this.search({
332
+ q: context,
333
+ k: 5,
334
+ boostRecent: true
335
+ });
336
+ const suggestions = searchResults
337
+ .filter(r => r.score > 2.0)
338
+ .map(r => r.concept);
339
+ // Add to allowlist as suggestions
340
+ const stmt = this.db.prepare(`
341
+ INSERT OR IGNORE INTO project_allowlists
342
+ (project_id, concept_id, added_at, auto_suggested, accepted)
343
+ VALUES (?, ?, ?, 1, 0)
344
+ `);
345
+ for (const concept of suggestions) {
346
+ stmt.run(projectId, concept.id, Date.now());
347
+ }
348
+ return suggestions;
349
+ }
350
+ generateConceptId(title) {
351
+ const slug = title.toLowerCase()
352
+ .replace(/[^a-z0-9]+/g, '-')
353
+ .replace(/^-|-$/g, '')
354
+ .substring(0, 50);
355
+ const hash = crypto.randomBytes(3).toString('hex');
356
+ return `${slug}-${hash}`;
357
+ }
358
+ generateTitle(text) {
359
+ const words = text.split(' ').slice(0, 5).join(' ');
360
+ return words.charAt(0).toUpperCase() + words.slice(1);
361
+ }
362
+ extractTags(text) {
363
+ const keywords = text.toLowerCase()
364
+ .split(/\s+/)
365
+ .filter(word => word.length > 4)
366
+ .filter(word => !['should', 'would', 'could', 'might', 'must'].includes(word))
367
+ .slice(0, 5);
368
+ return [...new Set(keywords)];
369
+ }
370
+ rowToConcept(row) {
371
+ return {
372
+ id: row.id,
373
+ title: row.title,
374
+ body: row.body,
375
+ tags: JSON.parse(row.tags),
376
+ importance: row.importance,
377
+ usage_count: row.usage_count || 0,
378
+ last_used: row.last_used,
379
+ created_at: row.created_at,
380
+ updated_at: row.updated_at
381
+ };
382
+ }
383
+ get(id) {
384
+ const stmt = this.db.prepare('SELECT * FROM concepts WHERE id = ?');
385
+ const row = stmt.get(id);
386
+ return row ? this.rowToConcept(row) : null;
387
+ }
388
+ close() {
389
+ this.db.close();
390
+ }
391
+ }
392
+ //# sourceMappingURL=concept-store-enhanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concept-store-enhanced.js","sourceRoot":"","sources":["../../src/memory-server/concept-store-enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ export interface Concept {
2
+ id: string;
3
+ title: string;
4
+ body: string;
5
+ tags: string[];
6
+ importance: number;
7
+ created_at: number;
8
+ updated_at: number;
9
+ }
10
+ export interface ConceptSearchResult {
11
+ concept: Concept;
12
+ score: number;
13
+ snippet?: string;
14
+ }
15
+ export declare class ConceptStore {
16
+ private db;
17
+ private static instances;
18
+ private projectId;
19
+ private constructor();
20
+ static getInstance(projectId?: string): ConceptStore;
21
+ private initializeSchema;
22
+ private seedInitialConcepts;
23
+ search(params: {
24
+ q: string;
25
+ k?: number;
26
+ allowlist?: string[];
27
+ projectId?: string;
28
+ }): ConceptSearchResult[];
29
+ get(id: string): Concept | null;
30
+ save(params: {
31
+ id?: string;
32
+ title: string;
33
+ body: string;
34
+ tags?: string[];
35
+ importance?: number;
36
+ }): {
37
+ id: string;
38
+ };
39
+ updateAllowlist(params: {
40
+ projectId: string;
41
+ add?: string[];
42
+ remove?: string[];
43
+ list?: boolean;
44
+ }): {
45
+ allowlist?: string[];
46
+ added?: string[];
47
+ removed?: string[];
48
+ };
49
+ linkToProject(conceptId: string, projectId: string): {
50
+ memoryId: string;
51
+ };
52
+ private generateConceptId;
53
+ private normalizeSearchQuery;
54
+ private escapeQuery;
55
+ private rowToConcept;
56
+ close(): void;
57
+ }
58
+ //# sourceMappingURL=concept-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concept-store.d.ts","sourceRoot":"","sources":["../../src/memory-server/concept-store.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAwC;IAChE,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAeP,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY;IASpD,OAAO,CAAC,gBAAgB;IAqDxB,OAAO,CAAC,mBAAmB;IAgE3B,MAAM,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,mBAAmB,EAAE;IAyEzB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAO/B,IAAI,CAAC,MAAM,EAAE;QACX,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAiDlB,eAAe,CAAC,MAAM,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;IAyDlE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAczE,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAYpB,KAAK;CAGN"}