@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
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Memory Migration Utility for AgentKits
3
+ *
4
+ * Migrates existing .claude/memory/*.md files to SQLite database.
5
+ * Preserves all content and metadata from markdown frontmatter.
6
+ *
7
+ * @module @agentkits/memory/migration
8
+ */
9
+ import { EventEmitter } from 'node:events';
10
+ import { MigrationConfig, MigrationProgress, MigrationResult, MemoryEntry, EmbeddingGenerator } from './types.js';
11
+ /**
12
+ * Memory Migration Manager for AgentKits
13
+ *
14
+ * Handles migration from:
15
+ * - Markdown files (.claude/memory/*.md)
16
+ * - JSON exports
17
+ * - Other SQLite databases
18
+ */
19
+ export declare class MemoryMigrator extends EventEmitter {
20
+ private config;
21
+ private embeddingGenerator?;
22
+ private progress;
23
+ private storeFunction;
24
+ constructor(storeFunction: (entry: MemoryEntry) => Promise<void>, config: Partial<MigrationConfig>, embeddingGenerator?: EmbeddingGenerator);
25
+ /**
26
+ * Run the migration
27
+ */
28
+ migrate(): Promise<MigrationResult>;
29
+ /**
30
+ * Get current migration progress
31
+ */
32
+ getProgress(): MigrationProgress;
33
+ private loadFromSource;
34
+ /**
35
+ * Load entries from .claude/memory/*.md files
36
+ */
37
+ private loadFromMarkdown;
38
+ /**
39
+ * Get all markdown files in directory
40
+ */
41
+ private getMarkdownFiles;
42
+ /**
43
+ * Parse a markdown file with frontmatter and sections
44
+ */
45
+ private parseMarkdownFile;
46
+ /**
47
+ * Convert parsed markdown to memory entries
48
+ */
49
+ private markdownToEntries;
50
+ /**
51
+ * Map filename to standard namespace
52
+ */
53
+ private mapFilenameToNamespace;
54
+ /**
55
+ * Load entries from JSON file
56
+ */
57
+ private loadFromJSON;
58
+ /**
59
+ * Convert JSON item to MemoryEntry
60
+ */
61
+ private jsonItemToEntry;
62
+ /**
63
+ * Load entries from existing SQLite database
64
+ */
65
+ private loadFromSQLite;
66
+ private initializeProgress;
67
+ private validateEntry;
68
+ private addError;
69
+ private generateSummary;
70
+ private slugify;
71
+ }
72
+ /**
73
+ * Convenience function to migrate markdown files
74
+ */
75
+ export declare function migrateMarkdownMemory(memoryDir: string, storeFunction: (entry: MemoryEntry) => Promise<void>, options?: Partial<MigrationConfig>): Promise<MigrationResult>;
76
+ export default MemoryMigrator;
77
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EAGf,WAAW,EAGX,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAyBpB;;;;;;;GAOG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,aAAa,CAAwC;gBAG3D,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,EACpD,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,EAChC,kBAAkB,CAAC,EAAE,kBAAkB;IASzC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAqFzC;;OAEG;IACH,WAAW,IAAI,iBAAiB;YAMlB,cAAc;IAa5B;;OAEG;YACW,gBAAgB;IAwB9B;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwEzB;;OAEG;YACW,iBAAiB;IA4E/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;YACW,YAAY;IA+B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;YACW,cAAc;IAW5B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,OAAO;CAMhB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,EACpD,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GACrC,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,457 @@
1
+ /**
2
+ * Memory Migration Utility for AgentKits
3
+ *
4
+ * Migrates existing .claude/memory/*.md files to SQLite database.
5
+ * Preserves all content and metadata from markdown frontmatter.
6
+ *
7
+ * @module @agentkits/memory/migration
8
+ */
9
+ import { EventEmitter } from 'node:events';
10
+ import { promises as fs } from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import { createDefaultEntry, DEFAULT_NAMESPACES, NAMESPACE_TYPE_MAP, } from './types.js';
13
+ /**
14
+ * Default migration configuration
15
+ */
16
+ const DEFAULT_MIGRATION_CONFIG = {
17
+ batchSize: 50,
18
+ generateEmbeddings: false, // Default false for speed
19
+ validateData: true,
20
+ continueOnError: true,
21
+ };
22
+ /**
23
+ * Memory Migration Manager for AgentKits
24
+ *
25
+ * Handles migration from:
26
+ * - Markdown files (.claude/memory/*.md)
27
+ * - JSON exports
28
+ * - Other SQLite databases
29
+ */
30
+ export class MemoryMigrator extends EventEmitter {
31
+ config;
32
+ embeddingGenerator;
33
+ progress;
34
+ storeFunction;
35
+ constructor(storeFunction, config, embeddingGenerator) {
36
+ super();
37
+ this.storeFunction = storeFunction;
38
+ this.config = { ...DEFAULT_MIGRATION_CONFIG, ...config };
39
+ this.embeddingGenerator = embeddingGenerator;
40
+ this.progress = this.initializeProgress();
41
+ }
42
+ /**
43
+ * Run the migration
44
+ */
45
+ async migrate() {
46
+ const startTime = Date.now();
47
+ this.progress = this.initializeProgress();
48
+ this.emit('migration:started', { source: this.config.source });
49
+ try {
50
+ // Load entries from source
51
+ const entries = await this.loadFromSource();
52
+ this.progress.total = entries.length;
53
+ this.emit('migration:progress', { ...this.progress });
54
+ // Process entries
55
+ for (const entry of entries) {
56
+ try {
57
+ // Validate if enabled
58
+ if (this.config.validateData) {
59
+ const validation = this.validateEntry(entry);
60
+ if (!validation.valid) {
61
+ if (this.config.continueOnError) {
62
+ this.addError(entry.key, validation.reason || 'Validation failed', 'VALIDATION_ERROR', false);
63
+ this.progress.skipped++;
64
+ continue;
65
+ }
66
+ else {
67
+ throw new Error(validation.reason);
68
+ }
69
+ }
70
+ }
71
+ // Store entry
72
+ await this.storeFunction(entry);
73
+ this.progress.migrated++;
74
+ this.progress.percentage = Math.round((this.progress.migrated / this.progress.total) * 100);
75
+ this.emit('migration:progress', { ...this.progress });
76
+ }
77
+ catch (error) {
78
+ if (this.config.continueOnError) {
79
+ this.addError(entry.key, error.message, 'STORE_ERROR', true);
80
+ this.progress.failed++;
81
+ }
82
+ else {
83
+ throw error;
84
+ }
85
+ }
86
+ }
87
+ const duration = Date.now() - startTime;
88
+ const result = {
89
+ success: this.progress.failed === 0 || this.config.continueOnError,
90
+ progress: { ...this.progress },
91
+ duration,
92
+ summary: this.generateSummary(),
93
+ };
94
+ this.emit('migration:completed', result);
95
+ return result;
96
+ }
97
+ catch (error) {
98
+ const duration = Date.now() - startTime;
99
+ const result = {
100
+ success: false,
101
+ progress: { ...this.progress },
102
+ duration,
103
+ summary: `Migration failed: ${error.message}`,
104
+ };
105
+ this.emit('migration:failed', { error, result });
106
+ return result;
107
+ }
108
+ }
109
+ /**
110
+ * Get current migration progress
111
+ */
112
+ getProgress() {
113
+ return { ...this.progress };
114
+ }
115
+ // ===== Source Loaders =====
116
+ async loadFromSource() {
117
+ switch (this.config.source) {
118
+ case 'markdown':
119
+ return this.loadFromMarkdown();
120
+ case 'json':
121
+ return this.loadFromJSON();
122
+ case 'sqlite':
123
+ return this.loadFromSQLite();
124
+ default:
125
+ throw new Error(`Unknown migration source: ${this.config.source}`);
126
+ }
127
+ }
128
+ /**
129
+ * Load entries from .claude/memory/*.md files
130
+ */
131
+ async loadFromMarkdown() {
132
+ const entries = [];
133
+ const basePath = this.config.sourcePath;
134
+ try {
135
+ const files = await this.getMarkdownFiles(basePath);
136
+ for (const filePath of files) {
137
+ try {
138
+ const content = await fs.readFile(filePath, 'utf-8');
139
+ const parsed = this.parseMarkdownFile(content);
140
+ const fileEntries = await this.markdownToEntries(filePath, parsed, basePath);
141
+ entries.push(...fileEntries);
142
+ }
143
+ catch (error) {
144
+ this.addError(filePath, error.message, 'PARSE_ERROR', true);
145
+ }
146
+ }
147
+ return entries;
148
+ }
149
+ catch (error) {
150
+ throw new Error(`Failed to load Markdown: ${error.message}`);
151
+ }
152
+ }
153
+ /**
154
+ * Get all markdown files in directory
155
+ */
156
+ async getMarkdownFiles(dir) {
157
+ const files = [];
158
+ try {
159
+ const entries = await fs.readdir(dir, { withFileTypes: true });
160
+ for (const entry of entries) {
161
+ const fullPath = path.join(dir, entry.name);
162
+ if (entry.isFile() && entry.name.endsWith('.md')) {
163
+ files.push(fullPath);
164
+ }
165
+ }
166
+ }
167
+ catch {
168
+ // Directory doesn't exist
169
+ }
170
+ return files;
171
+ }
172
+ /**
173
+ * Parse a markdown file with frontmatter and sections
174
+ */
175
+ parseMarkdownFile(content) {
176
+ const result = {
177
+ frontmatter: {},
178
+ content: content,
179
+ sections: [],
180
+ };
181
+ // Extract frontmatter if present
182
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
183
+ if (frontmatterMatch) {
184
+ const frontmatterText = frontmatterMatch[1];
185
+ result.content = frontmatterMatch[2];
186
+ // Parse YAML-like frontmatter
187
+ for (const line of frontmatterText.split('\n')) {
188
+ const colonIndex = line.indexOf(':');
189
+ if (colonIndex > 0) {
190
+ const key = line.substring(0, colonIndex).trim();
191
+ let value = line.substring(colonIndex + 1).trim();
192
+ // Parse common types
193
+ if (value === 'true')
194
+ value = true;
195
+ else if (value === 'false')
196
+ value = false;
197
+ else if (typeof value === 'string' && /^\d+$/.test(value))
198
+ value = parseInt(value, 10);
199
+ else if (typeof value === 'string' && value.startsWith('[') && value.endsWith(']')) {
200
+ try {
201
+ value = JSON.parse(value.replace(/'/g, '"'));
202
+ }
203
+ catch {
204
+ // Keep as string
205
+ }
206
+ }
207
+ result.frontmatter[key] = value;
208
+ }
209
+ }
210
+ }
211
+ // Parse sections (## headers)
212
+ const sectionRegex = /^(#{1,6})\s+(.+)$/gm;
213
+ let lastIndex = 0;
214
+ let match;
215
+ const sections = [];
216
+ while ((match = sectionRegex.exec(result.content)) !== null) {
217
+ sections.push({
218
+ title: match[2],
219
+ level: match[1].length,
220
+ startIndex: match.index,
221
+ });
222
+ }
223
+ // Extract section content
224
+ for (let i = 0; i < sections.length; i++) {
225
+ const section = sections[i];
226
+ const nextSection = sections[i + 1];
227
+ const endIndex = nextSection ? nextSection.startIndex : result.content.length;
228
+ const sectionContent = result.content
229
+ .substring(section.startIndex, endIndex)
230
+ .replace(/^#{1,6}\s+.+\n/, '') // Remove header line
231
+ .trim();
232
+ result.sections.push({
233
+ title: section.title,
234
+ level: section.level,
235
+ content: sectionContent,
236
+ });
237
+ }
238
+ return result;
239
+ }
240
+ /**
241
+ * Convert parsed markdown to memory entries
242
+ */
243
+ async markdownToEntries(filePath, parsed, basePath) {
244
+ const entries = [];
245
+ // Derive namespace from filename (e.g., 'active-context.md' -> 'active-context')
246
+ const filename = path.basename(filePath, '.md');
247
+ const namespace = this.mapFilenameToNamespace(filename);
248
+ const type = NAMESPACE_TYPE_MAP[namespace] || 'semantic';
249
+ // Create main entry for the file
250
+ const mainEntry = createDefaultEntry({
251
+ key: filename,
252
+ content: parsed.content.trim(),
253
+ type,
254
+ namespace,
255
+ tags: Array.isArray(parsed.frontmatter.tags)
256
+ ? parsed.frontmatter.tags
257
+ : [],
258
+ metadata: {
259
+ ...parsed.frontmatter,
260
+ sourceFile: filePath,
261
+ migratedAt: Date.now(),
262
+ },
263
+ });
264
+ // Generate embedding if enabled
265
+ if (this.config.generateEmbeddings && this.embeddingGenerator && parsed.content.trim()) {
266
+ try {
267
+ mainEntry.embedding = await this.embeddingGenerator(parsed.content.trim());
268
+ }
269
+ catch (error) {
270
+ this.emit('migration:warning', {
271
+ message: `Failed to generate embedding for ${filename}: ${error.message}`,
272
+ });
273
+ }
274
+ }
275
+ entries.push(mainEntry);
276
+ // Optionally create entries for each section
277
+ for (const section of parsed.sections) {
278
+ if (section.content.length > 100) { // Only create entries for substantial sections
279
+ const sectionKey = `${filename}:${this.slugify(section.title)}`;
280
+ const sectionEntry = createDefaultEntry({
281
+ key: sectionKey,
282
+ content: section.content,
283
+ type,
284
+ namespace,
285
+ tags: ['section', `level-${section.level}`],
286
+ metadata: {
287
+ parentKey: filename,
288
+ sectionTitle: section.title,
289
+ sectionLevel: section.level,
290
+ sourceFile: filePath,
291
+ },
292
+ references: [mainEntry.id],
293
+ });
294
+ // Generate embedding for section if enabled
295
+ if (this.config.generateEmbeddings && this.embeddingGenerator) {
296
+ try {
297
+ sectionEntry.embedding = await this.embeddingGenerator(section.content);
298
+ }
299
+ catch {
300
+ // Skip embedding for this section
301
+ }
302
+ }
303
+ entries.push(sectionEntry);
304
+ }
305
+ }
306
+ return entries;
307
+ }
308
+ /**
309
+ * Map filename to standard namespace
310
+ */
311
+ mapFilenameToNamespace(filename) {
312
+ const mapping = {
313
+ 'project-context': DEFAULT_NAMESPACES.CONTEXT,
314
+ 'active-context': DEFAULT_NAMESPACES.ACTIVE,
315
+ 'session-state': DEFAULT_NAMESPACES.SESSION,
316
+ 'progress': DEFAULT_NAMESPACES.PROGRESS,
317
+ 'patterns': DEFAULT_NAMESPACES.PATTERNS,
318
+ 'decisions': DEFAULT_NAMESPACES.DECISIONS,
319
+ 'errors': DEFAULT_NAMESPACES.ERRORS,
320
+ };
321
+ return mapping[filename] || filename;
322
+ }
323
+ /**
324
+ * Load entries from JSON file
325
+ */
326
+ async loadFromJSON() {
327
+ const filePath = this.config.sourcePath;
328
+ try {
329
+ const content = await fs.readFile(filePath, 'utf-8');
330
+ const data = JSON.parse(content);
331
+ // Handle different JSON formats
332
+ if (Array.isArray(data)) {
333
+ return data.map((item) => this.jsonItemToEntry(item));
334
+ }
335
+ else if (data.entries && Array.isArray(data.entries)) {
336
+ return data.entries.map((item) => this.jsonItemToEntry(item));
337
+ }
338
+ else if (typeof data === 'object') {
339
+ // Assume it's a namespace -> entries map
340
+ const entries = [];
341
+ for (const [namespace, namespaceEntries] of Object.entries(data)) {
342
+ if (Array.isArray(namespaceEntries)) {
343
+ for (const item of namespaceEntries) {
344
+ entries.push(this.jsonItemToEntry({ ...item, namespace }));
345
+ }
346
+ }
347
+ }
348
+ return entries;
349
+ }
350
+ return [];
351
+ }
352
+ catch (error) {
353
+ throw new Error(`Failed to load JSON: ${error.message}`);
354
+ }
355
+ }
356
+ /**
357
+ * Convert JSON item to MemoryEntry
358
+ */
359
+ jsonItemToEntry(item) {
360
+ return createDefaultEntry({
361
+ key: item.key || item.id || `entry_${Date.now()}`,
362
+ content: typeof item.content === 'string'
363
+ ? item.content
364
+ : typeof item.value === 'string'
365
+ ? item.value
366
+ : JSON.stringify(item.value || item.content || item),
367
+ type: item.type || 'semantic',
368
+ namespace: item.namespace || 'default',
369
+ tags: item.tags || [],
370
+ metadata: item.metadata || {},
371
+ });
372
+ }
373
+ /**
374
+ * Load entries from existing SQLite database
375
+ */
376
+ async loadFromSQLite() {
377
+ // Would need sql.js to read existing database
378
+ // For now, return empty and log warning
379
+ this.emit('migration:warning', {
380
+ message: 'SQLite migration requires sql.js to be loaded. Use JSON export instead.',
381
+ });
382
+ return [];
383
+ }
384
+ // ===== Helper Methods =====
385
+ initializeProgress() {
386
+ return {
387
+ total: 0,
388
+ migrated: 0,
389
+ failed: 0,
390
+ skipped: 0,
391
+ percentage: 0,
392
+ errors: [],
393
+ };
394
+ }
395
+ validateEntry(entry) {
396
+ if (!entry.key || typeof entry.key !== 'string') {
397
+ return { valid: false, reason: 'Missing or invalid key' };
398
+ }
399
+ if (!entry.content || typeof entry.content !== 'string') {
400
+ return { valid: false, reason: 'Missing or invalid content' };
401
+ }
402
+ if (entry.key.length > 500) {
403
+ return { valid: false, reason: 'Key too long (max 500 chars)' };
404
+ }
405
+ return { valid: true };
406
+ }
407
+ addError(entryId, message, code, recoverable) {
408
+ const error = {
409
+ entryId,
410
+ message,
411
+ code,
412
+ recoverable,
413
+ };
414
+ this.progress.errors.push(error);
415
+ this.emit('migration:error', error);
416
+ }
417
+ generateSummary() {
418
+ const { migrated, failed, skipped, total, errors } = this.progress;
419
+ let summary = `Migrated ${migrated}/${total} entries`;
420
+ if (failed > 0) {
421
+ summary += `, ${failed} failed`;
422
+ }
423
+ if (skipped > 0) {
424
+ summary += `, ${skipped} skipped`;
425
+ }
426
+ if (errors.length > 0) {
427
+ const errorTypes = new Map();
428
+ for (const error of errors) {
429
+ errorTypes.set(error.code, (errorTypes.get(error.code) || 0) + 1);
430
+ }
431
+ const errorSummary = Array.from(errorTypes.entries())
432
+ .map(([code, count]) => `${code}: ${count}`)
433
+ .join(', ');
434
+ summary += `. Errors: ${errorSummary}`;
435
+ }
436
+ return summary;
437
+ }
438
+ slugify(text) {
439
+ return text
440
+ .toLowerCase()
441
+ .replace(/[^a-z0-9]+/g, '-')
442
+ .replace(/^-|-$/g, '');
443
+ }
444
+ }
445
+ /**
446
+ * Convenience function to migrate markdown files
447
+ */
448
+ export async function migrateMarkdownMemory(memoryDir, storeFunction, options = {}) {
449
+ const migrator = new MemoryMigrator(storeFunction, {
450
+ source: 'markdown',
451
+ sourcePath: memoryDir,
452
+ ...options,
453
+ });
454
+ return migrator.migrate();
455
+ }
456
+ export default MemoryMigrator;
457
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}