@aitytech/agentkits-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 (116) hide show
  1. package/README.md +250 -0
  2. package/dist/cache-manager.d.ts +134 -0
  3. package/dist/cache-manager.d.ts.map +1 -0
  4. package/dist/cache-manager.js +407 -0
  5. package/dist/cache-manager.js.map +1 -0
  6. package/dist/cli/save.d.ts +20 -0
  7. package/dist/cli/save.d.ts.map +1 -0
  8. package/dist/cli/save.js +94 -0
  9. package/dist/cli/save.js.map +1 -0
  10. package/dist/cli/setup.d.ts +18 -0
  11. package/dist/cli/setup.d.ts.map +1 -0
  12. package/dist/cli/setup.js +163 -0
  13. package/dist/cli/setup.js.map +1 -0
  14. package/dist/cli/viewer.d.ts +21 -0
  15. package/dist/cli/viewer.d.ts.map +1 -0
  16. package/dist/cli/viewer.js +182 -0
  17. package/dist/cli/viewer.js.map +1 -0
  18. package/dist/hnsw-index.d.ts +111 -0
  19. package/dist/hnsw-index.d.ts.map +1 -0
  20. package/dist/hnsw-index.js +781 -0
  21. package/dist/hnsw-index.js.map +1 -0
  22. package/dist/hooks/cli.d.ts +20 -0
  23. package/dist/hooks/cli.d.ts.map +1 -0
  24. package/dist/hooks/cli.js +102 -0
  25. package/dist/hooks/cli.js.map +1 -0
  26. package/dist/hooks/context.d.ts +31 -0
  27. package/dist/hooks/context.d.ts.map +1 -0
  28. package/dist/hooks/context.js +64 -0
  29. package/dist/hooks/context.js.map +1 -0
  30. package/dist/hooks/index.d.ts +16 -0
  31. package/dist/hooks/index.d.ts.map +1 -0
  32. package/dist/hooks/index.js +20 -0
  33. package/dist/hooks/index.js.map +1 -0
  34. package/dist/hooks/observation.d.ts +30 -0
  35. package/dist/hooks/observation.d.ts.map +1 -0
  36. package/dist/hooks/observation.js +79 -0
  37. package/dist/hooks/observation.js.map +1 -0
  38. package/dist/hooks/service.d.ts +102 -0
  39. package/dist/hooks/service.d.ts.map +1 -0
  40. package/dist/hooks/service.js +454 -0
  41. package/dist/hooks/service.js.map +1 -0
  42. package/dist/hooks/session-init.d.ts +30 -0
  43. package/dist/hooks/session-init.d.ts.map +1 -0
  44. package/dist/hooks/session-init.js +54 -0
  45. package/dist/hooks/session-init.js.map +1 -0
  46. package/dist/hooks/summarize.d.ts +30 -0
  47. package/dist/hooks/summarize.d.ts.map +1 -0
  48. package/dist/hooks/summarize.js +74 -0
  49. package/dist/hooks/summarize.js.map +1 -0
  50. package/dist/hooks/types.d.ts +193 -0
  51. package/dist/hooks/types.d.ts.map +1 -0
  52. package/dist/hooks/types.js +137 -0
  53. package/dist/hooks/types.js.map +1 -0
  54. package/dist/index.d.ts +173 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +564 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/mcp/index.d.ts +9 -0
  59. package/dist/mcp/index.d.ts.map +1 -0
  60. package/dist/mcp/index.js +9 -0
  61. package/dist/mcp/index.js.map +1 -0
  62. package/dist/mcp/server.d.ts +22 -0
  63. package/dist/mcp/server.d.ts.map +1 -0
  64. package/dist/mcp/server.js +368 -0
  65. package/dist/mcp/server.js.map +1 -0
  66. package/dist/mcp/tools.d.ts +14 -0
  67. package/dist/mcp/tools.d.ts.map +1 -0
  68. package/dist/mcp/tools.js +110 -0
  69. package/dist/mcp/tools.js.map +1 -0
  70. package/dist/mcp/types.d.ts +100 -0
  71. package/dist/mcp/types.d.ts.map +1 -0
  72. package/dist/mcp/types.js +9 -0
  73. package/dist/mcp/types.js.map +1 -0
  74. package/dist/migration.d.ts +77 -0
  75. package/dist/migration.d.ts.map +1 -0
  76. package/dist/migration.js +457 -0
  77. package/dist/migration.js.map +1 -0
  78. package/dist/sqljs-backend.d.ts +128 -0
  79. package/dist/sqljs-backend.d.ts.map +1 -0
  80. package/dist/sqljs-backend.js +623 -0
  81. package/dist/sqljs-backend.js.map +1 -0
  82. package/dist/types.d.ts +481 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +73 -0
  85. package/dist/types.js.map +1 -0
  86. package/hooks.json +46 -0
  87. package/package.json +67 -0
  88. package/src/__tests__/index.test.ts +407 -0
  89. package/src/__tests__/sqljs-backend.test.ts +410 -0
  90. package/src/cache-manager.ts +515 -0
  91. package/src/cli/save.ts +109 -0
  92. package/src/cli/setup.ts +203 -0
  93. package/src/cli/viewer.ts +218 -0
  94. package/src/hnsw-index.ts +1013 -0
  95. package/src/hooks/__tests__/handlers.test.ts +298 -0
  96. package/src/hooks/__tests__/integration.test.ts +431 -0
  97. package/src/hooks/__tests__/service.test.ts +487 -0
  98. package/src/hooks/__tests__/types.test.ts +341 -0
  99. package/src/hooks/cli.ts +121 -0
  100. package/src/hooks/context.ts +77 -0
  101. package/src/hooks/index.ts +23 -0
  102. package/src/hooks/observation.ts +102 -0
  103. package/src/hooks/service.ts +582 -0
  104. package/src/hooks/session-init.ts +70 -0
  105. package/src/hooks/summarize.ts +89 -0
  106. package/src/hooks/types.ts +365 -0
  107. package/src/index.ts +755 -0
  108. package/src/mcp/__tests__/server.test.ts +181 -0
  109. package/src/mcp/index.ts +9 -0
  110. package/src/mcp/server.ts +441 -0
  111. package/src/mcp/tools.ts +113 -0
  112. package/src/mcp/types.ts +109 -0
  113. package/src/migration.ts +574 -0
  114. package/src/sql.js.d.ts +70 -0
  115. package/src/sqljs-backend.ts +789 -0
  116. package/src/types.ts +715 -0
package/dist/index.js ADDED
@@ -0,0 +1,564 @@
1
+ /**
2
+ * @agentkits/memory - Project-Scoped Memory System
3
+ *
4
+ * Provides persistent memory for Claude Code sessions within a project.
5
+ * Stores data in .claude/memory/memory.db using SQLite with optional
6
+ * HNSW vector indexing for semantic search.
7
+ *
8
+ * @module @agentkits/memory
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { ProjectMemoryService } from '@agentkits/memory';
13
+ *
14
+ * // Initialize memory for current project
15
+ * const memory = new ProjectMemoryService('.claude/memory');
16
+ * await memory.initialize();
17
+ *
18
+ * // Store an entry
19
+ * await memory.store({
20
+ * key: 'auth-pattern',
21
+ * content: 'Use JWT with refresh tokens for authentication',
22
+ * namespace: 'patterns',
23
+ * tags: ['auth', 'security'],
24
+ * });
25
+ *
26
+ * // Query entries
27
+ * const patterns = await memory.query({
28
+ * type: 'hybrid',
29
+ * namespace: 'patterns',
30
+ * tags: ['auth'],
31
+ * limit: 10,
32
+ * });
33
+ *
34
+ * // Semantic search (if embeddings enabled)
35
+ * const similar = await memory.semanticSearch('how to authenticate users', 5);
36
+ *
37
+ * // Session management
38
+ * await memory.startSession();
39
+ * await memory.checkpoint('Completed authentication setup');
40
+ * await memory.endSession('Successfully implemented auth');
41
+ * ```
42
+ */
43
+ import { EventEmitter } from 'node:events';
44
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
45
+ import * as path from 'node:path';
46
+ import { createDefaultEntry, generateSessionId, DEFAULT_NAMESPACES, } from './types.js';
47
+ import { SqlJsBackend } from './sqljs-backend.js';
48
+ import { CacheManager } from './cache-manager.js';
49
+ import { HNSWIndex } from './hnsw-index.js';
50
+ import { migrateMarkdownMemory } from './migration.js';
51
+ // Re-export types
52
+ export * from './types.js';
53
+ export { SqlJsBackend } from './sqljs-backend.js';
54
+ export { CacheManager, TieredCacheManager } from './cache-manager.js';
55
+ export { HNSWIndex } from './hnsw-index.js';
56
+ export { MemoryMigrator, migrateMarkdownMemory } from './migration.js';
57
+ /**
58
+ * Default configuration
59
+ */
60
+ const DEFAULT_CONFIG = {
61
+ baseDir: '.claude/memory',
62
+ dbFilename: 'memory.db',
63
+ enableVectorIndex: false, // Disabled by default for performance
64
+ dimensions: 384, // Local model dimensions (e.g., all-MiniLM-L6-v2)
65
+ cacheEnabled: true,
66
+ cacheSize: 1000,
67
+ cacheTtl: 300000, // 5 minutes
68
+ autoPersistInterval: 10000, // 10 seconds
69
+ maxEntries: 100000,
70
+ verbose: false,
71
+ };
72
+ /**
73
+ * Project-Scoped Memory Service
74
+ *
75
+ * High-level interface for project memory that provides:
76
+ * - Persistent storage in .claude/memory/memory.db
77
+ * - Session tracking and checkpoints
78
+ * - Optional semantic search with HNSW indexing
79
+ * - Migration from existing markdown files
80
+ * - Backward-compatible markdown exports
81
+ */
82
+ export class ProjectMemoryService extends EventEmitter {
83
+ config;
84
+ backend;
85
+ cache = null;
86
+ vectorIndex = null;
87
+ initialized = false;
88
+ currentSession = null;
89
+ constructor(baseDirOrConfig = {}) {
90
+ super();
91
+ // Handle string (baseDir) or config object
92
+ const configInput = typeof baseDirOrConfig === 'string'
93
+ ? { baseDir: baseDirOrConfig }
94
+ : baseDirOrConfig;
95
+ this.config = { ...DEFAULT_CONFIG, ...configInput };
96
+ // Ensure directory exists
97
+ if (!existsSync(this.config.baseDir)) {
98
+ mkdirSync(this.config.baseDir, { recursive: true });
99
+ }
100
+ // Initialize backend
101
+ const dbPath = path.join(this.config.baseDir, this.config.dbFilename);
102
+ this.backend = new SqlJsBackend({
103
+ databasePath: dbPath,
104
+ autoPersistInterval: this.config.autoPersistInterval,
105
+ maxEntries: this.config.maxEntries,
106
+ verbose: this.config.verbose,
107
+ });
108
+ // Initialize cache if enabled
109
+ if (this.config.cacheEnabled) {
110
+ this.cache = new CacheManager({
111
+ maxSize: this.config.cacheSize,
112
+ ttl: this.config.cacheTtl,
113
+ lruEnabled: true,
114
+ });
115
+ }
116
+ // Initialize vector index if enabled
117
+ if (this.config.enableVectorIndex) {
118
+ this.vectorIndex = new HNSWIndex({
119
+ dimensions: this.config.dimensions,
120
+ M: 16,
121
+ efConstruction: 200,
122
+ maxElements: this.config.maxEntries,
123
+ metric: 'cosine',
124
+ });
125
+ }
126
+ // Forward backend events
127
+ this.backend.on('entry:stored', (data) => this.emit('entry:stored', data));
128
+ this.backend.on('entry:updated', (data) => this.emit('entry:updated', data));
129
+ this.backend.on('entry:deleted', (data) => this.emit('entry:deleted', data));
130
+ this.backend.on('persisted', (data) => this.emit('persisted', data));
131
+ }
132
+ // ===== Lifecycle =====
133
+ async initialize() {
134
+ if (this.initialized)
135
+ return;
136
+ await this.backend.initialize();
137
+ // Rebuild vector index from existing embeddings
138
+ if (this.vectorIndex) {
139
+ await this.rebuildVectorIndex();
140
+ }
141
+ this.initialized = true;
142
+ this.emit('initialized', { dbPath: path.join(this.config.baseDir, this.config.dbFilename) });
143
+ }
144
+ async shutdown() {
145
+ if (!this.initialized)
146
+ return;
147
+ // End session if active
148
+ if (this.currentSession) {
149
+ await this.endSession('Session ended by shutdown');
150
+ }
151
+ // Shutdown components
152
+ if (this.cache) {
153
+ this.cache.shutdown();
154
+ }
155
+ await this.backend.shutdown();
156
+ this.initialized = false;
157
+ this.emit('shutdown');
158
+ }
159
+ // ===== IMemoryBackend Implementation =====
160
+ async store(entry) {
161
+ this.ensureInitialized();
162
+ // Generate embedding if enabled and not present
163
+ if (this.config.embeddingGenerator && !entry.embedding) {
164
+ try {
165
+ entry.embedding = await this.config.embeddingGenerator(entry.content);
166
+ }
167
+ catch (error) {
168
+ if (this.config.verbose) {
169
+ console.warn(`Failed to generate embedding: ${error.message}`);
170
+ }
171
+ }
172
+ }
173
+ // Add session ID if session active
174
+ if (this.currentSession && !entry.sessionId) {
175
+ entry.sessionId = this.currentSession.id;
176
+ }
177
+ // Store in backend
178
+ await this.backend.store(entry);
179
+ // Update cache
180
+ if (this.cache) {
181
+ this.cache.set(entry.id, entry);
182
+ this.cache.set(`${entry.namespace}:${entry.key}`, entry);
183
+ }
184
+ // Add to vector index
185
+ if (this.vectorIndex && entry.embedding) {
186
+ await this.vectorIndex.addPoint(entry.id, entry.embedding);
187
+ }
188
+ }
189
+ async get(id) {
190
+ this.ensureInitialized();
191
+ // Check cache first
192
+ if (this.cache) {
193
+ const cached = this.cache.get(id);
194
+ if (cached)
195
+ return cached;
196
+ }
197
+ const entry = await this.backend.get(id);
198
+ // Update cache
199
+ if (entry && this.cache) {
200
+ this.cache.set(id, entry);
201
+ }
202
+ return entry;
203
+ }
204
+ async getByKey(namespace, key) {
205
+ this.ensureInitialized();
206
+ const cacheKey = `${namespace}:${key}`;
207
+ // Check cache first
208
+ if (this.cache) {
209
+ const cached = this.cache.get(cacheKey);
210
+ if (cached)
211
+ return cached;
212
+ }
213
+ const entry = await this.backend.getByKey(namespace, key);
214
+ // Update cache
215
+ if (entry && this.cache) {
216
+ this.cache.set(cacheKey, entry);
217
+ this.cache.set(entry.id, entry);
218
+ }
219
+ return entry;
220
+ }
221
+ async update(id, update) {
222
+ this.ensureInitialized();
223
+ const updated = await this.backend.update(id, update);
224
+ if (updated) {
225
+ // Regenerate embedding if content changed
226
+ if (update.content && this.config.embeddingGenerator) {
227
+ try {
228
+ updated.embedding = await this.config.embeddingGenerator(updated.content);
229
+ await this.backend.store(updated);
230
+ // Update vector index
231
+ if (this.vectorIndex && updated.embedding) {
232
+ await this.vectorIndex.removePoint(id);
233
+ await this.vectorIndex.addPoint(id, updated.embedding);
234
+ }
235
+ }
236
+ catch {
237
+ // Ignore embedding errors
238
+ }
239
+ }
240
+ // Update cache
241
+ if (this.cache) {
242
+ this.cache.set(id, updated);
243
+ this.cache.set(`${updated.namespace}:${updated.key}`, updated);
244
+ }
245
+ }
246
+ return updated;
247
+ }
248
+ async delete(id) {
249
+ this.ensureInitialized();
250
+ const entry = await this.get(id);
251
+ if (!entry)
252
+ return false;
253
+ const result = await this.backend.delete(id);
254
+ if (result) {
255
+ // Remove from cache
256
+ if (this.cache) {
257
+ this.cache.delete(id);
258
+ this.cache.delete(`${entry.namespace}:${entry.key}`);
259
+ }
260
+ // Remove from vector index
261
+ if (this.vectorIndex) {
262
+ await this.vectorIndex.removePoint(id);
263
+ }
264
+ }
265
+ return result;
266
+ }
267
+ async query(query) {
268
+ this.ensureInitialized();
269
+ return this.backend.query(query);
270
+ }
271
+ async search(embedding, options) {
272
+ this.ensureInitialized();
273
+ if (this.vectorIndex) {
274
+ // Use HNSW index for fast search
275
+ const results = await this.vectorIndex.search(embedding, options.k);
276
+ // Fetch full entries and apply threshold
277
+ const searchResults = [];
278
+ for (const { id, distance } of results) {
279
+ const entry = await this.get(id);
280
+ if (entry) {
281
+ const score = 1 - distance; // Convert distance to similarity
282
+ if (!options.threshold || score >= options.threshold) {
283
+ searchResults.push({ entry, score, distance });
284
+ }
285
+ }
286
+ }
287
+ return searchResults;
288
+ }
289
+ // Fallback to brute-force search in backend
290
+ return this.backend.search(embedding, options);
291
+ }
292
+ async bulkInsert(entries) {
293
+ this.ensureInitialized();
294
+ for (const entry of entries) {
295
+ await this.store(entry);
296
+ }
297
+ this.emit('bulk:inserted', { count: entries.length });
298
+ }
299
+ async bulkDelete(ids) {
300
+ this.ensureInitialized();
301
+ let count = 0;
302
+ for (const id of ids) {
303
+ const success = await this.delete(id);
304
+ if (success)
305
+ count++;
306
+ }
307
+ return count;
308
+ }
309
+ async count(namespace) {
310
+ this.ensureInitialized();
311
+ return this.backend.count(namespace);
312
+ }
313
+ async listNamespaces() {
314
+ this.ensureInitialized();
315
+ return this.backend.listNamespaces();
316
+ }
317
+ async clearNamespace(namespace) {
318
+ this.ensureInitialized();
319
+ // Clear from cache
320
+ if (this.cache) {
321
+ this.cache.invalidatePattern(new RegExp(`^${namespace}:`));
322
+ }
323
+ return this.backend.clearNamespace(namespace);
324
+ }
325
+ async getStats() {
326
+ this.ensureInitialized();
327
+ const stats = await this.backend.getStats();
328
+ // Add HNSW stats if available
329
+ if (this.vectorIndex) {
330
+ stats.hnswStats = this.vectorIndex.getStats();
331
+ }
332
+ // Add cache stats if available
333
+ if (this.cache) {
334
+ stats.cacheStats = this.cache.getStats();
335
+ }
336
+ return stats;
337
+ }
338
+ async healthCheck() {
339
+ this.ensureInitialized();
340
+ return this.backend.healthCheck();
341
+ }
342
+ // ===== Convenience Methods =====
343
+ /**
344
+ * Store an entry from simple input
345
+ */
346
+ async storeEntry(input) {
347
+ const entry = createDefaultEntry(input);
348
+ await this.store(entry);
349
+ return entry;
350
+ }
351
+ /**
352
+ * Semantic search by content string
353
+ */
354
+ async semanticSearch(content, k = 10, threshold) {
355
+ if (!this.config.embeddingGenerator) {
356
+ throw new Error('Embedding generator not configured. Cannot perform semantic search.');
357
+ }
358
+ const embedding = await this.config.embeddingGenerator(content);
359
+ return this.search(embedding, { k, threshold });
360
+ }
361
+ /**
362
+ * Get entries by namespace (convenience method)
363
+ */
364
+ async getByNamespace(namespace, limit = 100) {
365
+ return this.query({
366
+ type: 'hybrid',
367
+ namespace,
368
+ limit,
369
+ });
370
+ }
371
+ /**
372
+ * Get or create an entry
373
+ */
374
+ async getOrCreate(namespace, key, creator) {
375
+ const existing = await this.getByKey(namespace, key);
376
+ if (existing)
377
+ return existing;
378
+ const input = await creator();
379
+ return this.storeEntry({ ...input, namespace, key });
380
+ }
381
+ // ===== Session Management =====
382
+ /**
383
+ * Start a new session
384
+ */
385
+ async startSession() {
386
+ const session = {
387
+ id: generateSessionId(),
388
+ startedAt: Date.now(),
389
+ status: 'active',
390
+ };
391
+ this.currentSession = session;
392
+ // Store session info
393
+ await this.storeEntry({
394
+ key: `session:${session.id}`,
395
+ content: JSON.stringify(session),
396
+ type: 'episodic',
397
+ namespace: DEFAULT_NAMESPACES.SESSION,
398
+ tags: ['session', 'active'],
399
+ metadata: { sessionId: session.id },
400
+ });
401
+ this.emit('session:started', session);
402
+ return session;
403
+ }
404
+ /**
405
+ * Get current session
406
+ */
407
+ getCurrentSession() {
408
+ return this.currentSession;
409
+ }
410
+ /**
411
+ * Create a checkpoint in current session
412
+ */
413
+ async checkpoint(description) {
414
+ if (!this.currentSession) {
415
+ throw new Error('No active session. Call startSession() first.');
416
+ }
417
+ this.currentSession.lastCheckpoint = description;
418
+ await this.storeEntry({
419
+ key: `checkpoint:${this.currentSession.id}:${Date.now()}`,
420
+ content: description,
421
+ type: 'episodic',
422
+ namespace: DEFAULT_NAMESPACES.SESSION,
423
+ tags: ['checkpoint'],
424
+ metadata: {
425
+ sessionId: this.currentSession.id,
426
+ timestamp: Date.now(),
427
+ },
428
+ });
429
+ this.emit('session:checkpoint', { session: this.currentSession, description });
430
+ }
431
+ /**
432
+ * End current session
433
+ */
434
+ async endSession(summary) {
435
+ if (!this.currentSession)
436
+ return null;
437
+ this.currentSession.endedAt = Date.now();
438
+ this.currentSession.summary = summary;
439
+ this.currentSession.status = 'completed';
440
+ // Update session entry
441
+ const sessionEntry = await this.getByKey(DEFAULT_NAMESPACES.SESSION, `session:${this.currentSession.id}`);
442
+ if (sessionEntry) {
443
+ await this.update(sessionEntry.id, {
444
+ content: JSON.stringify(this.currentSession),
445
+ tags: ['session', 'completed'],
446
+ });
447
+ }
448
+ const endedSession = { ...this.currentSession };
449
+ this.currentSession = null;
450
+ this.emit('session:ended', endedSession);
451
+ return endedSession;
452
+ }
453
+ /**
454
+ * Get recent sessions
455
+ */
456
+ async getRecentSessions(limit = 10) {
457
+ const entries = await this.query({
458
+ type: 'hybrid',
459
+ namespace: DEFAULT_NAMESPACES.SESSION,
460
+ tags: ['session'],
461
+ limit,
462
+ });
463
+ return entries
464
+ .map((e) => {
465
+ try {
466
+ return JSON.parse(e.content);
467
+ }
468
+ catch {
469
+ return null;
470
+ }
471
+ })
472
+ .filter((s) => s !== null);
473
+ }
474
+ // ===== Migration =====
475
+ /**
476
+ * Migrate from existing markdown memory files
477
+ */
478
+ async migrateFromMarkdown(options = {}) {
479
+ this.ensureInitialized();
480
+ const result = await migrateMarkdownMemory(this.config.baseDir, async (entry) => this.store(entry), {
481
+ generateEmbeddings: options.generateEmbeddings ?? false,
482
+ });
483
+ this.emit('migration:completed', result);
484
+ return result;
485
+ }
486
+ // ===== Export =====
487
+ /**
488
+ * Export namespace to markdown (for git-friendly backup)
489
+ */
490
+ async exportToMarkdown(namespace, outputPath) {
491
+ const entries = await this.getByNamespace(namespace);
492
+ const filePath = outputPath || path.join(this.config.baseDir, `${namespace}.md`);
493
+ let markdown = `---\nnamespace: ${namespace}\nexported: ${new Date().toISOString()}\nentries: ${entries.length}\n---\n\n`;
494
+ for (const entry of entries) {
495
+ markdown += `## ${entry.key}\n\n`;
496
+ markdown += entry.content;
497
+ markdown += '\n\n';
498
+ if (entry.tags.length > 0) {
499
+ markdown += `*Tags: ${entry.tags.join(', ')}*\n\n`;
500
+ }
501
+ markdown += '---\n\n';
502
+ }
503
+ writeFileSync(filePath, markdown, 'utf-8');
504
+ return filePath;
505
+ }
506
+ /**
507
+ * Export all namespaces to markdown
508
+ */
509
+ async exportAllToMarkdown() {
510
+ const namespaces = await this.listNamespaces();
511
+ const files = [];
512
+ for (const namespace of namespaces) {
513
+ const file = await this.exportToMarkdown(namespace);
514
+ files.push(file);
515
+ }
516
+ return files;
517
+ }
518
+ // ===== Private Methods =====
519
+ ensureInitialized() {
520
+ if (!this.initialized) {
521
+ throw new Error('ProjectMemoryService not initialized. Call initialize() first.');
522
+ }
523
+ }
524
+ async rebuildVectorIndex() {
525
+ if (!this.vectorIndex)
526
+ return;
527
+ // Get all entries with embeddings
528
+ const entries = await this.query({
529
+ type: 'hybrid',
530
+ limit: this.config.maxEntries,
531
+ });
532
+ const entriesWithEmbeddings = entries.filter((e) => e.embedding);
533
+ if (entriesWithEmbeddings.length > 0) {
534
+ await this.vectorIndex.rebuild(entriesWithEmbeddings.map((e) => ({
535
+ id: e.id,
536
+ vector: e.embedding,
537
+ })));
538
+ if (this.config.verbose) {
539
+ console.log(`Rebuilt vector index with ${entriesWithEmbeddings.length} entries`);
540
+ }
541
+ }
542
+ }
543
+ }
544
+ // ===== Factory Functions =====
545
+ /**
546
+ * Create a memory service for the current project
547
+ */
548
+ export function createProjectMemory(baseDir = '.claude/memory', options = {}) {
549
+ return new ProjectMemoryService({ baseDir, ...options });
550
+ }
551
+ /**
552
+ * Create a memory service with embedding support
553
+ */
554
+ export function createEmbeddingMemory(baseDir, embeddingGenerator, dimensions = 384) {
555
+ return new ProjectMemoryService({
556
+ baseDir,
557
+ embeddingGenerator,
558
+ dimensions,
559
+ enableVectorIndex: true,
560
+ });
561
+ }
562
+ // Default export
563
+ export default ProjectMemoryService;
564
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Module Exports
3
+ *
4
+ * @module @agentkits/memory/mcp
5
+ */
6
+ export * from './types.js';
7
+ export * from './tools.js';
8
+ export { default as MEMORY_TOOLS } from './tools.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Module Exports
3
+ *
4
+ * @module @agentkits/memory/mcp
5
+ */
6
+ export * from './types.js';
7
+ export * from './tools.js';
8
+ export { default as MEMORY_TOOLS } from './tools.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AgentKits Memory MCP Server
4
+ *
5
+ * Model Context Protocol server for Claude Code memory access.
6
+ * Provides tools for saving, searching, and recalling memories.
7
+ *
8
+ * Usage:
9
+ * Add to .mcp.json:
10
+ * {
11
+ * "mcpServers": {
12
+ * "memory": {
13
+ * "command": "npx",
14
+ * "args": ["agentkits-memory-server"]
15
+ * }
16
+ * }
17
+ * }
18
+ *
19
+ * @module @agentkits/memory/mcp/server
20
+ */
21
+ export {};
22
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG"}