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,275 @@
1
+ /**
2
+ * 관계 그래프 서비스
3
+ * 기억 간의 관계를 저장하고 관리하는 서비스
4
+ *
5
+ * 주요 기능:
6
+ * - 관계 추가/삭제/조회
7
+ * - 순환 참조 감지 (DFS)
8
+ * - N-hop 관계 탐색 (BFS)
9
+ * - 신뢰도 갱신
10
+ * - 캐싱 계층 (L1: MemoryCache 10분, L2: PersistentCache 7일)
11
+ * - 배치 삽입 최적화
12
+ */
13
+ import Database from 'better-sqlite3';
14
+ import type { MemoryRelation, RelationMetadata, GetRelationsOptions, GetRelatedMemoriesOptions, AddRelationOptions, IRelationGraph } from '../types/relation-graph.js';
15
+ import type { RelationType } from '../types/relation.js';
16
+ /**
17
+ * 관계 그래프 서비스
18
+ */
19
+ export declare class RelationGraph implements IRelationGraph {
20
+ private db;
21
+ private l1Cache;
22
+ private l2Cache;
23
+ private cacheKeyIndex;
24
+ constructor(db: Database.Database);
25
+ /**
26
+ * 관계 추가
27
+ * UNIQUE 제약 검증 및 순환 참조 감지를 수행합니다.
28
+ *
29
+ * 트랜잭션 내에서 실행하여 순환 참조 감지와 관계 추가를 원자적으로 처리합니다.
30
+ * 이를 통해 경쟁 조건을 방지하고 일관성을 보장합니다.
31
+ *
32
+ * @param sourceId 소스 기억 ID
33
+ * @param targetId 타겟 기억 ID
34
+ * @param relationType 관계 유형
35
+ * @param options 추가 옵션
36
+ * @returns 추가된 관계 ID
37
+ */
38
+ addRelation(sourceId: string, targetId: string, relationType: RelationType, options?: AddRelationOptions): Promise<number>;
39
+ /**
40
+ * 관계 추가 내부 로직
41
+ * 기존 관계 확인 및 새 관계 추가를 수행합니다.
42
+ *
43
+ * @param sourceId 소스 기억 ID
44
+ * @param targetId 타겟 기억 ID
45
+ * @param relationType 관계 유형
46
+ * @param confidence 신뢰도
47
+ * @param metadata 메타데이터
48
+ * @param metadataJson 메타데이터 JSON 문자열
49
+ * @param updateOnConflict 충돌 시 업데이트 여부
50
+ * @param allowCyclic 순환 참조 허용 여부
51
+ * @returns 관계 ID
52
+ */
53
+ private addRelationInternal;
54
+ /**
55
+ * 관계 추가 에러 처리
56
+ * 동시성 문제로 인한 UNIQUE constraint 에러를 처리합니다.
57
+ *
58
+ * @param error 발생한 에러
59
+ * @param sourceId 소스 기억 ID
60
+ * @param targetId 타겟 기억 ID
61
+ * @param relationType 관계 유형
62
+ * @param confidence 신뢰도
63
+ * @param metadata 메타데이터
64
+ * @param updateOnConflict 충돌 시 업데이트 여부
65
+ * @returns 관계 ID 또는 에러를 throw
66
+ */
67
+ private handleRelationAddError;
68
+ /**
69
+ * 관계 입력 검증
70
+ *
71
+ * @param sourceId 소스 기억 ID
72
+ * @param targetId 타겟 기억 ID
73
+ */
74
+ private validateRelationInput;
75
+ /**
76
+ * 순환 참조 확인
77
+ * 트랜잭션 내에서 호출되는 경우 중첩 트랜잭션을 방지하기 위해
78
+ * 트랜잭션 상태를 확인합니다.
79
+ *
80
+ * @param sourceId 소스 기억 ID
81
+ * @param targetId 타겟 기억 ID
82
+ * @param relationType 관계 유형
83
+ */
84
+ private checkForCyclicRelation;
85
+ /**
86
+ * 메타데이터 준비
87
+ *
88
+ * @param options 추가 옵션
89
+ * @param allowCyclic 순환 참조 허용 여부
90
+ * @returns 준비된 메타데이터
91
+ */
92
+ private prepareMetadata;
93
+ /**
94
+ * 기존 관계 조회
95
+ *
96
+ * @param sourceId 소스 기억 ID
97
+ * @param targetId 타겟 기억 ID
98
+ * @param relationType 관계 유형
99
+ * @returns 기존 관계 정보 또는 null
100
+ */
101
+ private findExistingRelation;
102
+ /**
103
+ * 기존 관계 처리
104
+ *
105
+ * @param existing 기존 관계 정보
106
+ * @param sourceId 소스 기억 ID
107
+ * @param targetId 타겟 기억 ID
108
+ * @param relationType 관계 유형
109
+ * @param confidence 신뢰도
110
+ * @param metadata 메타데이터
111
+ * @param updateOnConflict 충돌 시 업데이트 여부
112
+ * @returns 관계 ID
113
+ */
114
+ private handleExistingRelation;
115
+ /**
116
+ * 새 관계 추가
117
+ *
118
+ * @param sourceId 소스 기억 ID
119
+ * @param targetId 타겟 기억 ID
120
+ * @param relationType 관계 유형
121
+ * @param confidence 신뢰도
122
+ * @param metadataJson 메타데이터 JSON 문자열
123
+ * @param allowCyclic 순환 참조 허용 여부
124
+ * @returns 추가된 관계 ID
125
+ */
126
+ private insertNewRelation;
127
+ /**
128
+ * 순환 참조 플래그 업데이트
129
+ *
130
+ * @param relationId 관계 ID
131
+ */
132
+ private updateCyclicFlag;
133
+ /**
134
+ * 관계 조회
135
+ *
136
+ * @param memoryId 기억 ID
137
+ * @param options 조회 옵션
138
+ * @returns 관계 목록
139
+ */
140
+ getRelations(memoryId: string, options?: GetRelationsOptions): Promise<MemoryRelation[]>;
141
+ /**
142
+ * 관련 기억 조회 (N-hop 관계 탐색)
143
+ * BFS 알고리즘을 사용하여 N-hop 관계를 탐색합니다.
144
+ *
145
+ * @param memoryId 시작 기억 ID
146
+ * @param options 탐색 옵션
147
+ * @returns 관련 기억 ID 목록과 hop 거리
148
+ */
149
+ getRelatedMemories(memoryId: string, options?: GetRelatedMemoriesOptions): Promise<Array<{
150
+ memory_id: string;
151
+ hop_distance: number;
152
+ relation_path: Array<{
153
+ source_id: string;
154
+ target_id: string;
155
+ relation_type: RelationType;
156
+ }>;
157
+ }>>;
158
+ /**
159
+ * 관계 삭제
160
+ *
161
+ * @param sourceId 소스 기억 ID
162
+ * @param targetId 타겟 기억 ID
163
+ * @param relationType 관계 유형
164
+ * @returns 삭제 성공 여부
165
+ */
166
+ removeRelation(sourceId: string, targetId: string, relationType: RelationType): Promise<boolean>;
167
+ /**
168
+ * 신뢰도 갱신
169
+ *
170
+ * @param sourceId 소스 기억 ID
171
+ * @param targetId 타겟 기억 ID
172
+ * @param relationType 관계 유형
173
+ * @param newConfidence 새로운 신뢰도
174
+ * @param reason 갱신 이유
175
+ * @returns 갱신 성공 여부
176
+ */
177
+ updateConfidence(sourceId: string, targetId: string, relationType: RelationType, newConfidence: number, reason?: string): Promise<boolean>;
178
+ /**
179
+ * 순환 참조 감지 (DFS)
180
+ *
181
+ * 트랜잭션 내에서 실행하여 경쟁 조건을 방지합니다.
182
+ * 순환 참조 감지 중에 다른 프로세스/스레드에서 관계가 추가되는 것을 방지하기 위해
183
+ * 트랜잭션 격리 수준을 사용합니다.
184
+ *
185
+ * 성능 최적화:
186
+ * - 최대 탐색 깊이 제한 (기본값: 10)
187
+ * - 대규모 그래프에서 무한 루프 방지
188
+ *
189
+ * @param sourceId 소스 기억 ID
190
+ * @param targetId 타겟 기억 ID
191
+ * @param relationType 관계 유형
192
+ * @param maxDepth 최대 탐색 깊이 (기본값: 10)
193
+ * @returns 순환 참조 여부
194
+ */
195
+ /**
196
+ * 순환 참조 감지 내부 로직 (트랜잭션 없이 실행)
197
+ *
198
+ * @param sourceId 소스 기억 ID
199
+ * @param targetId 타겟 기억 ID
200
+ * @param relationType 관계 유형
201
+ * @param maxDepth 최대 탐색 깊이
202
+ * @returns 순환 참조 여부
203
+ */
204
+ private detectCycleInternal;
205
+ /**
206
+ * 순환 참조 감지 (공개 메서드)
207
+ * 트랜잭션을 자동으로 관리합니다.
208
+ *
209
+ * @param sourceId 소스 기억 ID
210
+ * @param targetId 타겟 기억 ID
211
+ * @param relationType 관계 유형
212
+ * @param maxDepth 최대 탐색 깊이 (기본값: 10)
213
+ * @returns 순환 참조 여부
214
+ */
215
+ detectCycle(sourceId: string, targetId: string, relationType: RelationType, maxDepth?: number): Promise<boolean>;
216
+ /**
217
+ * 캐시 키 생성
218
+ * 공통 유틸리티를 사용하여 일관된 캐시 키를 생성합니다.
219
+ *
220
+ * @param memoryId 기억 ID
221
+ * @param options 조회 옵션
222
+ * @returns 캐시 키
223
+ */
224
+ private generateCacheKey;
225
+ /**
226
+ * 캐시 키를 인덱스에 추가
227
+ * 정확한 캐시 무효화를 위해 사용
228
+ *
229
+ * @param memoryId 기억 ID
230
+ * @param cacheKey 캐시 키
231
+ */
232
+ private addCacheKeyToIndex;
233
+ /**
234
+ * 캐시 무효화
235
+ * 특정 메모리 ID와 관련된 캐시를 정확하게 무효화합니다.
236
+ *
237
+ * 최적화 전략:
238
+ * 1. 캐시 키 인덱스를 우선 사용하여 O(1) 접근으로 정확한 캐시 키 삭제
239
+ * 2. 인덱스가 없는 경우에만 패턴 기반 삭제 수행 (fallback)
240
+ *
241
+ * 성능 고려사항:
242
+ * - 인덱스가 있는 경우: O(n) where n = 해당 memoryId의 캐시 키 수
243
+ * - 인덱스가 없는 경우: O(m) where m = 전체 캐시 키 수 (최악의 경우)
244
+ * - 일반적으로 인덱스가 있으므로 효율적
245
+ *
246
+ * @param memoryId 기억 ID
247
+ */
248
+ private invalidateCache;
249
+ /**
250
+ * 배치 관계 추가
251
+ * 여러 관계를 한 번에 추가하여 성능을 최적화합니다.
252
+ *
253
+ * @param relations 추가할 관계 목록
254
+ * @returns 배치 처리 결과 (성공한 관계 ID 목록 및 실패한 관계 정보)
255
+ */
256
+ addRelationsBatch(relations: Array<{
257
+ source_id: string;
258
+ target_id: string;
259
+ relation_type: RelationType;
260
+ confidence?: number;
261
+ metadata?: RelationMetadata;
262
+ }>): Promise<{
263
+ insertedIds: number[];
264
+ failed: Array<{
265
+ source_id: string;
266
+ target_id: string;
267
+ relation_type: RelationType;
268
+ error: string;
269
+ }>;
270
+ total: number;
271
+ success: number;
272
+ failedCount: number;
273
+ }>;
274
+ }
275
+ //# sourceMappingURL=relation-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-graph.d.ts","sourceRoot":"","sources":["../../src/services/relation-graph.ts"],"names":[],"mappings":"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"}