memento-mcp-server 1.11.1 → 1.12.0-a1

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 (126) hide show
  1. package/README.en.md +21 -6
  2. package/README.md +38 -7
  3. package/dist/algorithms/hybrid-search-engine.d.ts +34 -1
  4. package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
  5. package/dist/algorithms/hybrid-search-engine.js +186 -17
  6. package/dist/algorithms/hybrid-search-engine.js.map +1 -1
  7. package/dist/algorithms/search-ranking.d.ts +15 -1
  8. package/dist/algorithms/search-ranking.d.ts.map +1 -1
  9. package/dist/algorithms/search-ranking.js +41 -4
  10. package/dist/algorithms/search-ranking.js.map +1 -1
  11. package/dist/config/environment.d.ts.map +1 -1
  12. package/dist/config/environment.js +4 -0
  13. package/dist/config/environment.js.map +1 -1
  14. package/dist/config/index.d.ts.map +1 -1
  15. package/dist/config/index.js +6 -0
  16. package/dist/config/index.js.map +1 -1
  17. package/dist/config/ranking-weights-loader.d.ts +37 -0
  18. package/dist/config/ranking-weights-loader.d.ts.map +1 -0
  19. package/dist/config/ranking-weights-loader.js +109 -0
  20. package/dist/config/ranking-weights-loader.js.map +1 -0
  21. package/dist/constants/relation-constants.d.ts +95 -0
  22. package/dist/constants/relation-constants.d.ts.map +1 -0
  23. package/dist/constants/relation-constants.js +95 -0
  24. package/dist/constants/relation-constants.js.map +1 -0
  25. package/dist/database/migration/migrations/005-relation-engine-schema.d.ts +65 -0
  26. package/dist/database/migration/migrations/005-relation-engine-schema.d.ts.map +1 -0
  27. package/dist/database/migration/migrations/005-relation-engine-schema.js +295 -0
  28. package/dist/database/migration/migrations/005-relation-engine-schema.js.map +1 -0
  29. package/dist/database/migration/migrations/005-relation-engine-schema.sql +64 -0
  30. package/dist/server/routes/admin.routes.d.ts.map +1 -1
  31. package/dist/server/routes/admin.routes.js +228 -0
  32. package/dist/server/routes/admin.routes.js.map +1 -1
  33. package/dist/services/anchor/anchor-interfaces.d.ts +1 -0
  34. package/dist/services/anchor/anchor-interfaces.d.ts.map +1 -1
  35. package/dist/services/anchor/anchor-interfaces.js.map +1 -1
  36. package/dist/services/anchor/anchor-search-service.d.ts +16 -0
  37. package/dist/services/anchor/anchor-search-service.d.ts.map +1 -1
  38. package/dist/services/anchor/anchor-search-service.js +136 -17
  39. package/dist/services/anchor/anchor-search-service.js.map +1 -1
  40. package/dist/services/batch-scheduler.d.ts +11 -0
  41. package/dist/services/batch-scheduler.d.ts.map +1 -1
  42. package/dist/services/batch-scheduler.js +99 -0
  43. package/dist/services/batch-scheduler.js.map +1 -1
  44. package/dist/services/llm-based-relation-extractor.d.ts +156 -0
  45. package/dist/services/llm-based-relation-extractor.d.ts.map +1 -0
  46. package/dist/services/llm-based-relation-extractor.js +1350 -0
  47. package/dist/services/llm-based-relation-extractor.js.map +1 -0
  48. package/dist/services/relation-extractor.d.ts +73 -0
  49. package/dist/services/relation-extractor.d.ts.map +1 -0
  50. package/dist/services/relation-extractor.js +231 -0
  51. package/dist/services/relation-extractor.js.map +1 -0
  52. package/dist/services/relation-graph.d.ts +275 -0
  53. package/dist/services/relation-graph.d.ts.map +1 -0
  54. package/dist/services/relation-graph.js +869 -0
  55. package/dist/services/relation-graph.js.map +1 -0
  56. package/dist/services/relation-quality-validator.d.ts +211 -0
  57. package/dist/services/relation-quality-validator.d.ts.map +1 -0
  58. package/dist/services/relation-quality-validator.js +415 -0
  59. package/dist/services/relation-quality-validator.js.map +1 -0
  60. package/dist/services/rule-based-relation-extractor.d.ts +66 -0
  61. package/dist/services/rule-based-relation-extractor.d.ts.map +1 -0
  62. package/dist/services/rule-based-relation-extractor.js +258 -0
  63. package/dist/services/rule-based-relation-extractor.js.map +1 -0
  64. package/dist/tools/add-relation-tool.d.ts +34 -0
  65. package/dist/tools/add-relation-tool.d.ts.map +1 -0
  66. package/dist/tools/add-relation-tool.js +163 -0
  67. package/dist/tools/add-relation-tool.js.map +1 -0
  68. package/dist/tools/extract-relations-tool.d.ts +28 -0
  69. package/dist/tools/extract-relations-tool.d.ts.map +1 -0
  70. package/dist/tools/extract-relations-tool.js +159 -0
  71. package/dist/tools/extract-relations-tool.js.map +1 -0
  72. package/dist/tools/get-relations-tool.d.ts +34 -0
  73. package/dist/tools/get-relations-tool.d.ts.map +1 -0
  74. package/dist/tools/get-relations-tool.js +155 -0
  75. package/dist/tools/get-relations-tool.js.map +1 -0
  76. package/dist/tools/index.d.ts.map +1 -1
  77. package/dist/tools/index.js +11 -3
  78. package/dist/tools/index.js.map +1 -1
  79. package/dist/tools/remember-tool.d.ts +17 -0
  80. package/dist/tools/remember-tool.d.ts.map +1 -1
  81. package/dist/tools/remember-tool.js +195 -26
  82. package/dist/tools/remember-tool.js.map +1 -1
  83. package/dist/tools/remove-relation-tool.d.ts +45 -0
  84. package/dist/tools/remove-relation-tool.d.ts.map +1 -0
  85. package/dist/tools/remove-relation-tool.js +142 -0
  86. package/dist/tools/remove-relation-tool.js.map +1 -0
  87. package/dist/tools/search-local-tool.d.ts.map +1 -1
  88. package/dist/tools/search-local-tool.js +10 -3
  89. package/dist/tools/search-local-tool.js.map +1 -1
  90. package/dist/tools/types.d.ts +2 -0
  91. package/dist/tools/types.d.ts.map +1 -1
  92. package/dist/tools/types.js.map +1 -1
  93. package/dist/tools/visualize-relations-tool.d.ts +46 -0
  94. package/dist/tools/visualize-relations-tool.d.ts.map +1 -0
  95. package/dist/tools/visualize-relations-tool.js +157 -0
  96. package/dist/tools/visualize-relations-tool.js.map +1 -0
  97. package/dist/types/index.d.ts +8 -0
  98. package/dist/types/index.d.ts.map +1 -1
  99. package/dist/types/index.js +1 -0
  100. package/dist/types/index.js.map +1 -1
  101. package/dist/types/relation-graph.d.ts +215 -0
  102. package/dist/types/relation-graph.d.ts.map +1 -0
  103. package/dist/types/relation-graph.js +6 -0
  104. package/dist/types/relation-graph.js.map +1 -0
  105. package/dist/types/relation.d.ts +112 -0
  106. package/dist/types/relation.d.ts.map +1 -0
  107. package/dist/types/relation.js +67 -0
  108. package/dist/types/relation.js.map +1 -0
  109. package/dist/utils/cache-key-generator.d.ts +63 -0
  110. package/dist/utils/cache-key-generator.d.ts.map +1 -0
  111. package/dist/utils/cache-key-generator.js +76 -0
  112. package/dist/utils/cache-key-generator.js.map +1 -0
  113. package/dist/utils/database.d.ts.map +1 -1
  114. package/dist/utils/database.js +37 -17
  115. package/dist/utils/database.js.map +1 -1
  116. package/dist/utils/relation-visualizer.d.ts +81 -0
  117. package/dist/utils/relation-visualizer.d.ts.map +1 -0
  118. package/dist/utils/relation-visualizer.js +239 -0
  119. package/dist/utils/relation-visualizer.js.map +1 -0
  120. package/dist/utils/type-guards.d.ts +100 -0
  121. package/dist/utils/type-guards.d.ts.map +1 -0
  122. package/dist/utils/type-guards.js +144 -0
  123. package/dist/utils/type-guards.js.map +1 -0
  124. package/package.json +7 -2
  125. package/scripts/generate-relation-report.ts +481 -0
  126. package/scripts/weekly-relation-validation.ts +423 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Migration: 005 - Relation Engine Schema
3
+ * Description: Create memory_relation and relation_type_registry tables for semantic relation engine
4
+ * Version: 5.0
5
+ * Date: 2025-01-XX
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { Migration } from '../types.js';
9
+ /**
10
+ * Relation Engine Schema Migration
11
+ *
12
+ * This migration:
13
+ * 1. Creates memory_relation table for storing semantic relations between memories
14
+ * 2. Creates relation_type_registry table for managing relation types
15
+ * 3. Creates indexes for performance optimization
16
+ * 4. Inserts initial relation types (CAUSES, DEPENDS_ON, FOLLOWS, CONTRASTS_WITH, REFERENCES, BELONGS_TO)
17
+ * 5. Migrates existing memory_link data to memory_relation
18
+ */
19
+ export declare class RelationEngineSchemaMigration implements Migration {
20
+ version: string;
21
+ name: string;
22
+ description: string;
23
+ /**
24
+ * Load SQL file content
25
+ */
26
+ private loadSQLFile;
27
+ /**
28
+ * Execute SQL script
29
+ * Removes transaction commands (BEGIN TRANSACTION, COMMIT) as MigrationRunner manages transactions
30
+ */
31
+ private executeSQL;
32
+ /**
33
+ * Check if table exists
34
+ */
35
+ private tableExists;
36
+ /**
37
+ * Check if index exists
38
+ */
39
+ private indexExists;
40
+ /**
41
+ * Check if column exists in table
42
+ */
43
+ private columnExists;
44
+ /**
45
+ * Map old memory_link relation_type to new memory_relation relation_type
46
+ */
47
+ private mapRelationType;
48
+ /**
49
+ * Validate before migration
50
+ */
51
+ validateBefore(db: Database.Database): Promise<void>;
52
+ /**
53
+ * Execute migration (Up)
54
+ */
55
+ up(db: Database.Database): Promise<void>;
56
+ /**
57
+ * Rollback migration (Down)
58
+ */
59
+ down(db: Database.Database): Promise<void>;
60
+ /**
61
+ * Validate after migration
62
+ */
63
+ validateAfter(db: Database.Database): Promise<void>;
64
+ }
65
+ //# sourceMappingURL=005-relation-engine-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"005-relation-engine-schema.d.ts","sourceRoot":"","sources":["../../../../src/database/migration/migrations/005-relation-engine-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C;;;;;;;;;GASG;AACH,qBAAa,6BAA8B,YAAW,SAAS;IAC7D,OAAO,SAAS;IAChB,IAAI,SAA4B;IAChC,WAAW,SAA2F;IAEtG;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B1D;;OAEG;IACG,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkE9C;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhD;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAsH1D"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Migration: 005 - Relation Engine Schema
3
+ * Description: Create memory_relation and relation_type_registry tables for semantic relation engine
4
+ * Version: 5.0
5
+ * Date: 2025-01-XX
6
+ */
7
+ import { readFileSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import { DependencyValidator } from '../dependency-validator.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ /**
14
+ * Relation Engine Schema Migration
15
+ *
16
+ * This migration:
17
+ * 1. Creates memory_relation table for storing semantic relations between memories
18
+ * 2. Creates relation_type_registry table for managing relation types
19
+ * 3. Creates indexes for performance optimization
20
+ * 4. Inserts initial relation types (CAUSES, DEPENDS_ON, FOLLOWS, CONTRASTS_WITH, REFERENCES, BELONGS_TO)
21
+ * 5. Migrates existing memory_link data to memory_relation
22
+ */
23
+ export class RelationEngineSchemaMigration {
24
+ version = '5.0';
25
+ name = 'relation-engine-schema';
26
+ description = 'Create memory_relation and relation_type_registry tables for semantic relation engine';
27
+ /**
28
+ * Load SQL file content
29
+ */
30
+ loadSQLFile(filename) {
31
+ const filePath = join(__dirname, filename);
32
+ return readFileSync(filePath, 'utf-8');
33
+ }
34
+ /**
35
+ * Execute SQL script
36
+ * Removes transaction commands (BEGIN TRANSACTION, COMMIT) as MigrationRunner manages transactions
37
+ */
38
+ executeSQL(db, sql) {
39
+ // MigrationRunner가 트랜잭션을 관리하므로 SQL에서 트랜잭션 명령 제거
40
+ let cleanedSQL = sql
41
+ // BEGIN TRANSACTION 제거
42
+ .replace(/BEGIN\s+TRANSACTION\s*;/gi, '')
43
+ // COMMIT 제거
44
+ .replace(/COMMIT\s*;/gi, '')
45
+ // PRAGMA foreign_keys 명령은 유지 (트랜잭션 외부에서도 작동)
46
+ .trim();
47
+ // 빈 줄 제거 및 정리
48
+ cleanedSQL = cleanedSQL
49
+ .split('\n')
50
+ .map(line => line.trim())
51
+ .filter(line => line.length > 0)
52
+ .join('\n');
53
+ if (cleanedSQL.length > 0) {
54
+ db.exec(cleanedSQL);
55
+ }
56
+ }
57
+ /**
58
+ * Check if table exists
59
+ */
60
+ tableExists(db, tableName) {
61
+ const result = db.prepare(`
62
+ SELECT name FROM sqlite_master
63
+ WHERE type='table' AND name=?
64
+ `).get(tableName);
65
+ return !!result;
66
+ }
67
+ /**
68
+ * Check if index exists
69
+ */
70
+ indexExists(db, indexName) {
71
+ const result = db.prepare(`
72
+ SELECT name FROM sqlite_master
73
+ WHERE type='index' AND name=?
74
+ `).get(indexName);
75
+ return !!result;
76
+ }
77
+ /**
78
+ * Check if column exists in table
79
+ */
80
+ columnExists(db, tableName, columnName) {
81
+ const columns = db.prepare(`PRAGMA table_info(${tableName})`).all();
82
+ return columns.some(col => col.name === columnName);
83
+ }
84
+ /**
85
+ * Map old memory_link relation_type to new memory_relation relation_type
86
+ */
87
+ mapRelationType(oldType) {
88
+ const mapping = {
89
+ 'cause_of': 'CAUSES',
90
+ 'derived_from': 'DEPENDS_ON',
91
+ 'contradicts': 'CONTRASTS_WITH'
92
+ // 'duplicates'는 새로운 관계 유형으로 처리하지 않음 (제거)
93
+ };
94
+ return mapping[oldType] || null;
95
+ }
96
+ /**
97
+ * Validate before migration
98
+ */
99
+ async validateBefore(db) {
100
+ // Check if memory_item table exists (required for foreign key)
101
+ if (!this.tableExists(db, 'memory_item')) {
102
+ throw new Error('memory_item table does not exist. Cannot proceed with migration.');
103
+ }
104
+ // Check if migration has already been applied
105
+ if (this.tableExists(db, 'memento_schema_version')) {
106
+ const version = db.prepare(`
107
+ SELECT version FROM memento_schema_version WHERE version = ?
108
+ `).get('5.0');
109
+ if (version) {
110
+ throw new Error('Migration 005 has already been applied. Current schema version: 5.0');
111
+ }
112
+ }
113
+ // Check if memory_relation table already exists (should not exist)
114
+ if (this.tableExists(db, 'memory_relation')) {
115
+ throw new Error('memory_relation table already exists. Migration may have been partially applied.');
116
+ }
117
+ // Check if relation_type_registry table already exists (should not exist)
118
+ if (this.tableExists(db, 'relation_type_registry')) {
119
+ throw new Error('relation_type_registry table already exists. Migration may have been partially applied.');
120
+ }
121
+ }
122
+ /**
123
+ * Execute migration (Up)
124
+ */
125
+ async up(db) {
126
+ // 1. Load and execute SQL script
127
+ const sqlScript = this.loadSQLFile('005-relation-engine-schema.sql');
128
+ this.executeSQL(db, sqlScript);
129
+ // 2. Migrate existing memory_link data to memory_relation
130
+ if (this.tableExists(db, 'memory_link')) {
131
+ const memoryLinks = db.prepare(`
132
+ SELECT source_id, target_id, relation_type, created_at
133
+ FROM memory_link
134
+ `).all();
135
+ const insertStmt = db.prepare(`
136
+ INSERT INTO memory_relation (source_id, target_id, relation_type, confidence, created_at, updated_at, metadata)
137
+ VALUES (?, ?, ?, ?, ?, ?, ?)
138
+ `);
139
+ let migratedCount = 0;
140
+ for (const link of memoryLinks) {
141
+ const newRelationType = this.mapRelationType(link.relation_type);
142
+ // 매핑되지 않은 관계 유형은 건너뜀 (예: 'duplicates')
143
+ if (!newRelationType) {
144
+ continue;
145
+ }
146
+ // 기본 신뢰도는 0.7, 메타데이터에 마이그레이션 정보 추가
147
+ const metadata = JSON.stringify({
148
+ extraction_method: 'migration',
149
+ migration_source: 'memory_link',
150
+ original_relation_type: link.relation_type,
151
+ migrated_at: new Date().toISOString()
152
+ });
153
+ try {
154
+ insertStmt.run(link.source_id, link.target_id, newRelationType, 0.7, // default confidence
155
+ link.created_at, link.created_at, // updated_at = created_at initially
156
+ metadata);
157
+ migratedCount++;
158
+ }
159
+ catch (error) {
160
+ // UNIQUE 제약 위반 시 무시 (이미 존재하는 관계)
161
+ if (error instanceof Error && error.message.includes('UNIQUE')) {
162
+ continue;
163
+ }
164
+ throw error;
165
+ }
166
+ }
167
+ console.log(`[Migration 005] Migrated ${migratedCount} relations from memory_link to memory_relation`);
168
+ }
169
+ // Note: Schema version is recorded by MigrationRunner, not here
170
+ // MigrationRunner.recordVersion() will be called after successful migration
171
+ }
172
+ /**
173
+ * Rollback migration (Down)
174
+ */
175
+ async down(db) {
176
+ // Drop indexes first
177
+ const indexes = [
178
+ 'idx_memory_relation_source',
179
+ 'idx_memory_relation_target',
180
+ 'idx_memory_relation_type',
181
+ 'idx_memory_relation_confidence',
182
+ 'idx_memory_relation_source_type',
183
+ 'idx_memory_relation_target_type',
184
+ 'idx_relation_type_registry_category'
185
+ ];
186
+ for (const indexName of indexes) {
187
+ db.exec(`DROP INDEX IF EXISTS ${indexName}`);
188
+ }
189
+ // Drop tables
190
+ db.exec('DROP TABLE IF EXISTS memory_relation');
191
+ db.exec('DROP TABLE IF EXISTS relation_type_registry');
192
+ // Remove schema version record
193
+ db.prepare('DELETE FROM memento_schema_version WHERE version = ?').run('5.0');
194
+ }
195
+ /**
196
+ * Validate after migration
197
+ */
198
+ async validateAfter(db) {
199
+ // Verify memory_relation table exists
200
+ if (!this.tableExists(db, 'memory_relation')) {
201
+ throw new Error('memory_relation table was not created');
202
+ }
203
+ // Verify relation_type_registry table exists
204
+ if (!this.tableExists(db, 'relation_type_registry')) {
205
+ throw new Error('relation_type_registry table was not created');
206
+ }
207
+ // Verify memory_relation table structure (check columns)
208
+ const relationColumns = db.prepare(`PRAGMA table_info(memory_relation)`).all();
209
+ const relationColumnNames = relationColumns.map(col => col.name);
210
+ const requiredRelationColumns = [
211
+ 'id',
212
+ 'source_id',
213
+ 'target_id',
214
+ 'relation_type',
215
+ 'confidence',
216
+ 'created_at',
217
+ 'updated_at',
218
+ 'metadata'
219
+ ];
220
+ for (const column of requiredRelationColumns) {
221
+ if (!relationColumnNames.includes(column)) {
222
+ throw new Error(`Column ${column} was not created in memory_relation table`);
223
+ }
224
+ }
225
+ // Verify relation_type_registry table structure (check columns)
226
+ const registryColumns = db.prepare(`PRAGMA table_info(relation_type_registry)`).all();
227
+ const registryColumnNames = registryColumns.map(col => col.name);
228
+ const requiredRegistryColumns = [
229
+ 'type_name',
230
+ 'category',
231
+ 'description',
232
+ 'applicable_types',
233
+ 'default_confidence',
234
+ 'search_boost',
235
+ 'created_at'
236
+ ];
237
+ for (const column of requiredRegistryColumns) {
238
+ if (!registryColumnNames.includes(column)) {
239
+ throw new Error(`Column ${column} was not created in relation_type_registry table`);
240
+ }
241
+ }
242
+ // Verify indexes were created
243
+ const requiredIndexes = [
244
+ 'idx_memory_relation_source',
245
+ 'idx_memory_relation_target',
246
+ 'idx_memory_relation_type',
247
+ 'idx_memory_relation_confidence',
248
+ 'idx_memory_relation_source_type',
249
+ 'idx_memory_relation_target_type',
250
+ 'idx_relation_type_registry_category'
251
+ ];
252
+ for (const index of requiredIndexes) {
253
+ if (!this.indexExists(db, index)) {
254
+ throw new Error(`Index ${index} was not created`);
255
+ }
256
+ }
257
+ // Verify initial relation types were inserted
258
+ const relationTypes = db.prepare(`
259
+ SELECT type_name FROM relation_type_registry
260
+ `).all();
261
+ const expectedTypes = ['CAUSES', 'DEPENDS_ON', 'FOLLOWS', 'CONTRASTS_WITH', 'REFERENCES', 'BELONGS_TO'];
262
+ const actualTypes = relationTypes.map(r => r.type_name);
263
+ for (const expectedType of expectedTypes) {
264
+ if (!actualTypes.includes(expectedType)) {
265
+ throw new Error(`Relation type ${expectedType} was not inserted into registry`);
266
+ }
267
+ }
268
+ // Verify UNIQUE constraint exists on memory_relation
269
+ const uniqueCheck = db.prepare(`
270
+ SELECT sql FROM sqlite_master
271
+ WHERE type='table' AND name='memory_relation'
272
+ `).get();
273
+ if (!uniqueCheck || !uniqueCheck.sql.includes('UNIQUE(source_id, target_id, relation_type)')) {
274
+ throw new Error('UNIQUE constraint on (source_id, target_id, relation_type) was not created');
275
+ }
276
+ // Verify foreign key constraints
277
+ const tableInfo = db.prepare(`
278
+ SELECT sql FROM sqlite_master
279
+ WHERE type='table' AND name='memory_relation'
280
+ `).get();
281
+ if (!tableInfo || !tableInfo.sql.includes('FOREIGN KEY') || !tableInfo.sql.includes('ON DELETE CASCADE')) {
282
+ throw new Error('Foreign key constraint with ON DELETE CASCADE was not created');
283
+ }
284
+ // Verify existing dependencies are intact using DependencyValidator
285
+ const dependencyReport = await DependencyValidator.validateAll(db);
286
+ if (!dependencyReport.success) {
287
+ const errors = dependencyReport.results
288
+ .filter(r => !r.success)
289
+ .map(r => `${r.name}: ${r.error}`)
290
+ .join('; ');
291
+ throw new Error(`Dependency validation failed: ${errors}`);
292
+ }
293
+ }
294
+ }
295
+ //# sourceMappingURL=005-relation-engine-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"005-relation-engine-schema.js","sourceRoot":"","sources":["../../../../src/database/migration/migrations/005-relation-engine-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ -- Migration: 005 - Relation Engine Schema
2
+ -- Description: Create memory_relation and relation_type_registry tables for semantic relation engine
3
+ -- Version: 5.0
4
+ -- Date: 2025-01-XX
5
+
6
+ -- 1. Create memory_relation table
7
+ CREATE TABLE IF NOT EXISTS memory_relation (
8
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
9
+ source_id TEXT NOT NULL,
10
+ target_id TEXT NOT NULL,
11
+ relation_type TEXT NOT NULL,
12
+ confidence REAL NOT NULL DEFAULT 0.7 CHECK (confidence >= 0.0 AND confidence <= 1.0),
13
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
14
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
15
+ metadata TEXT, -- JSON: extraction method, timestamp, cyclic flag, refinement history
16
+ FOREIGN KEY (source_id) REFERENCES memory_item(id) ON DELETE CASCADE,
17
+ FOREIGN KEY (target_id) REFERENCES memory_item(id) ON DELETE CASCADE,
18
+ UNIQUE(source_id, target_id, relation_type)
19
+ );
20
+
21
+ -- 2. Create relation_type_registry table
22
+ CREATE TABLE IF NOT EXISTS relation_type_registry (
23
+ type_name TEXT PRIMARY KEY,
24
+ category TEXT NOT NULL, -- 'Causal', 'Temporal', 'Structural', 'Semantic'
25
+ description TEXT,
26
+ applicable_types TEXT, -- JSON array: ['episodic', 'semantic'] etc.
27
+ default_confidence REAL DEFAULT 0.7,
28
+ search_boost REAL DEFAULT 1.0, -- Search ranking weight
29
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
30
+ );
31
+
32
+ -- 3. Create indexes for memory_relation table
33
+ CREATE INDEX idx_memory_relation_source ON memory_relation(source_id);
34
+ CREATE INDEX idx_memory_relation_target ON memory_relation(target_id);
35
+ CREATE INDEX idx_memory_relation_type ON memory_relation(relation_type);
36
+ CREATE INDEX idx_memory_relation_confidence ON memory_relation(confidence);
37
+ CREATE INDEX idx_memory_relation_source_type ON memory_relation(source_id, relation_type);
38
+ CREATE INDEX idx_memory_relation_target_type ON memory_relation(target_id, relation_type);
39
+
40
+ -- 4. Create index for relation_type_registry table
41
+ CREATE INDEX idx_relation_type_registry_category ON relation_type_registry(category);
42
+
43
+ -- 5. Insert initial relation types into registry
44
+ -- Causal (인과 관계군)
45
+ INSERT INTO relation_type_registry (type_name, category, description, applicable_types, default_confidence, search_boost)
46
+ VALUES ('CAUSES', 'Causal', '인과 관계: 한 기억이 다른 기억의 원인이 되는 관계', '["episodic", "semantic"]', 0.7, 1.2);
47
+
48
+ -- Temporal (시간 관계군)
49
+ INSERT INTO relation_type_registry (type_name, category, description, applicable_types, default_confidence, search_boost)
50
+ VALUES ('FOLLOWS', 'Temporal', '시간적 순서: 한 기억이 다른 기억 이후에 발생하는 관계', '["episodic", "procedural"]', 0.7, 1.0);
51
+
52
+ -- Structural (구조 관계군)
53
+ INSERT INTO relation_type_registry (type_name, category, description, applicable_types, default_confidence, search_boost)
54
+ VALUES ('DEPENDS_ON', 'Structural', '의존 관계: 한 기억이 다른 기억에 의존하는 관계', '["semantic", "procedural"]', 0.7, 1.1);
55
+
56
+ INSERT INTO relation_type_registry (type_name, category, description, applicable_types, default_confidence, search_boost)
57
+ VALUES ('BELONGS_TO', 'Structural', '포함 관계: 한 기억이 다른 기억에 속하는 관계', '["semantic", "episodic"]', 0.7, 1.0);
58
+
59
+ -- Semantic (의미 관계군)
60
+ INSERT INTO relation_type_registry (type_name, category, description, applicable_types, default_confidence, search_boost)
61
+ VALUES ('CONTRASTS_WITH', 'Semantic', '대조 관계: 한 기억이 다른 기억과 대조되는 관계', '["semantic", "episodic"]', 0.7, 0.9);
62
+
63
+ INSERT INTO relation_type_registry (type_name, category, description, applicable_types, default_confidence, search_boost)
64
+ VALUES ('REFERENCES', 'Semantic', '참조 관계: 한 기억이 다른 기억을 참조하는 관계', '["working", "episodic", "semantic", "procedural"]', 0.7, 0.8);
@@ -1 +1 @@
1
- {"version":3,"file":"admin.routes.d.ts","sourceRoot":"","sources":["../../../src/server/routes/admin.routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAoVtE"}
1
+ {"version":3,"file":"admin.routes.d.ts","sourceRoot":"","sources":["../../../src/server/routes/admin.routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAa3C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAolBtE"}