@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.
- package/README.md +250 -0
- package/dist/cache-manager.d.ts +134 -0
- package/dist/cache-manager.d.ts.map +1 -0
- package/dist/cache-manager.js +407 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/cli/save.d.ts +20 -0
- package/dist/cli/save.d.ts.map +1 -0
- package/dist/cli/save.js +94 -0
- package/dist/cli/save.js.map +1 -0
- package/dist/cli/setup.d.ts +18 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +163 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/viewer.d.ts +21 -0
- package/dist/cli/viewer.d.ts.map +1 -0
- package/dist/cli/viewer.js +182 -0
- package/dist/cli/viewer.js.map +1 -0
- package/dist/hnsw-index.d.ts +111 -0
- package/dist/hnsw-index.d.ts.map +1 -0
- package/dist/hnsw-index.js +781 -0
- package/dist/hnsw-index.js.map +1 -0
- package/dist/hooks/cli.d.ts +20 -0
- package/dist/hooks/cli.d.ts.map +1 -0
- package/dist/hooks/cli.js +102 -0
- package/dist/hooks/cli.js.map +1 -0
- package/dist/hooks/context.d.ts +31 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +64 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/index.d.ts +16 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +20 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/observation.d.ts +30 -0
- package/dist/hooks/observation.d.ts.map +1 -0
- package/dist/hooks/observation.js +79 -0
- package/dist/hooks/observation.js.map +1 -0
- package/dist/hooks/service.d.ts +102 -0
- package/dist/hooks/service.d.ts.map +1 -0
- package/dist/hooks/service.js +454 -0
- package/dist/hooks/service.js.map +1 -0
- package/dist/hooks/session-init.d.ts +30 -0
- package/dist/hooks/session-init.d.ts.map +1 -0
- package/dist/hooks/session-init.js +54 -0
- package/dist/hooks/session-init.js.map +1 -0
- package/dist/hooks/summarize.d.ts +30 -0
- package/dist/hooks/summarize.d.ts.map +1 -0
- package/dist/hooks/summarize.js +74 -0
- package/dist/hooks/summarize.js.map +1 -0
- package/dist/hooks/types.d.ts +193 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +137 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +173 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +564 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +9 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +9 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +368 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +14 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +110 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +100 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +9 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/migration.d.ts +77 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +457 -0
- package/dist/migration.js.map +1 -0
- package/dist/sqljs-backend.d.ts +128 -0
- package/dist/sqljs-backend.d.ts.map +1 -0
- package/dist/sqljs-backend.js +623 -0
- package/dist/sqljs-backend.js.map +1 -0
- package/dist/types.d.ts +481 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +73 -0
- package/dist/types.js.map +1 -0
- package/hooks.json +46 -0
- package/package.json +67 -0
- package/src/__tests__/index.test.ts +407 -0
- package/src/__tests__/sqljs-backend.test.ts +410 -0
- package/src/cache-manager.ts +515 -0
- package/src/cli/save.ts +109 -0
- package/src/cli/setup.ts +203 -0
- package/src/cli/viewer.ts +218 -0
- package/src/hnsw-index.ts +1013 -0
- package/src/hooks/__tests__/handlers.test.ts +298 -0
- package/src/hooks/__tests__/integration.test.ts +431 -0
- package/src/hooks/__tests__/service.test.ts +487 -0
- package/src/hooks/__tests__/types.test.ts +341 -0
- package/src/hooks/cli.ts +121 -0
- package/src/hooks/context.ts +77 -0
- package/src/hooks/index.ts +23 -0
- package/src/hooks/observation.ts +102 -0
- package/src/hooks/service.ts +582 -0
- package/src/hooks/session-init.ts +70 -0
- package/src/hooks/summarize.ts +89 -0
- package/src/hooks/types.ts +365 -0
- package/src/index.ts +755 -0
- package/src/mcp/__tests__/server.test.ts +181 -0
- package/src/mcp/index.ts +9 -0
- package/src/mcp/server.ts +441 -0
- package/src/mcp/tools.ts +113 -0
- package/src/mcp/types.ts +109 -0
- package/src/migration.ts +574 -0
- package/src/sql.js.d.ts +70 -0
- package/src/sqljs-backend.ts +789 -0
- 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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"}
|