memento-mcp-server 1.11.1 → 1.12.0-a

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 (124) 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/services/anchor/anchor-interfaces.d.ts +1 -0
  31. package/dist/services/anchor/anchor-interfaces.d.ts.map +1 -1
  32. package/dist/services/anchor/anchor-interfaces.js.map +1 -1
  33. package/dist/services/anchor/anchor-search-service.d.ts +16 -0
  34. package/dist/services/anchor/anchor-search-service.d.ts.map +1 -1
  35. package/dist/services/anchor/anchor-search-service.js +136 -17
  36. package/dist/services/anchor/anchor-search-service.js.map +1 -1
  37. package/dist/services/batch-scheduler.d.ts +11 -0
  38. package/dist/services/batch-scheduler.d.ts.map +1 -1
  39. package/dist/services/batch-scheduler.js +99 -0
  40. package/dist/services/batch-scheduler.js.map +1 -1
  41. package/dist/services/llm-based-relation-extractor.d.ts +156 -0
  42. package/dist/services/llm-based-relation-extractor.d.ts.map +1 -0
  43. package/dist/services/llm-based-relation-extractor.js +1350 -0
  44. package/dist/services/llm-based-relation-extractor.js.map +1 -0
  45. package/dist/services/relation-extractor.d.ts +73 -0
  46. package/dist/services/relation-extractor.d.ts.map +1 -0
  47. package/dist/services/relation-extractor.js +231 -0
  48. package/dist/services/relation-extractor.js.map +1 -0
  49. package/dist/services/relation-graph.d.ts +275 -0
  50. package/dist/services/relation-graph.d.ts.map +1 -0
  51. package/dist/services/relation-graph.js +869 -0
  52. package/dist/services/relation-graph.js.map +1 -0
  53. package/dist/services/relation-quality-validator.d.ts +211 -0
  54. package/dist/services/relation-quality-validator.d.ts.map +1 -0
  55. package/dist/services/relation-quality-validator.js +415 -0
  56. package/dist/services/relation-quality-validator.js.map +1 -0
  57. package/dist/services/rule-based-relation-extractor.d.ts +66 -0
  58. package/dist/services/rule-based-relation-extractor.d.ts.map +1 -0
  59. package/dist/services/rule-based-relation-extractor.js +258 -0
  60. package/dist/services/rule-based-relation-extractor.js.map +1 -0
  61. package/dist/tools/add-relation-tool.d.ts +34 -0
  62. package/dist/tools/add-relation-tool.d.ts.map +1 -0
  63. package/dist/tools/add-relation-tool.js +163 -0
  64. package/dist/tools/add-relation-tool.js.map +1 -0
  65. package/dist/tools/extract-relations-tool.d.ts +28 -0
  66. package/dist/tools/extract-relations-tool.d.ts.map +1 -0
  67. package/dist/tools/extract-relations-tool.js +159 -0
  68. package/dist/tools/extract-relations-tool.js.map +1 -0
  69. package/dist/tools/get-relations-tool.d.ts +34 -0
  70. package/dist/tools/get-relations-tool.d.ts.map +1 -0
  71. package/dist/tools/get-relations-tool.js +155 -0
  72. package/dist/tools/get-relations-tool.js.map +1 -0
  73. package/dist/tools/index.d.ts +6 -1
  74. package/dist/tools/index.d.ts.map +1 -1
  75. package/dist/tools/index.js +16 -2
  76. package/dist/tools/index.js.map +1 -1
  77. package/dist/tools/remember-tool.d.ts +17 -0
  78. package/dist/tools/remember-tool.d.ts.map +1 -1
  79. package/dist/tools/remember-tool.js +195 -26
  80. package/dist/tools/remember-tool.js.map +1 -1
  81. package/dist/tools/remove-relation-tool.d.ts +45 -0
  82. package/dist/tools/remove-relation-tool.d.ts.map +1 -0
  83. package/dist/tools/remove-relation-tool.js +142 -0
  84. package/dist/tools/remove-relation-tool.js.map +1 -0
  85. package/dist/tools/search-local-tool.d.ts.map +1 -1
  86. package/dist/tools/search-local-tool.js +10 -3
  87. package/dist/tools/search-local-tool.js.map +1 -1
  88. package/dist/tools/types.d.ts +2 -0
  89. package/dist/tools/types.d.ts.map +1 -1
  90. package/dist/tools/types.js.map +1 -1
  91. package/dist/tools/visualize-relations-tool.d.ts +46 -0
  92. package/dist/tools/visualize-relations-tool.d.ts.map +1 -0
  93. package/dist/tools/visualize-relations-tool.js +157 -0
  94. package/dist/tools/visualize-relations-tool.js.map +1 -0
  95. package/dist/types/index.d.ts +8 -0
  96. package/dist/types/index.d.ts.map +1 -1
  97. package/dist/types/index.js +1 -0
  98. package/dist/types/index.js.map +1 -1
  99. package/dist/types/relation-graph.d.ts +215 -0
  100. package/dist/types/relation-graph.d.ts.map +1 -0
  101. package/dist/types/relation-graph.js +6 -0
  102. package/dist/types/relation-graph.js.map +1 -0
  103. package/dist/types/relation.d.ts +112 -0
  104. package/dist/types/relation.d.ts.map +1 -0
  105. package/dist/types/relation.js +67 -0
  106. package/dist/types/relation.js.map +1 -0
  107. package/dist/utils/cache-key-generator.d.ts +63 -0
  108. package/dist/utils/cache-key-generator.d.ts.map +1 -0
  109. package/dist/utils/cache-key-generator.js +76 -0
  110. package/dist/utils/cache-key-generator.js.map +1 -0
  111. package/dist/utils/database.d.ts.map +1 -1
  112. package/dist/utils/database.js +37 -17
  113. package/dist/utils/database.js.map +1 -1
  114. package/dist/utils/relation-visualizer.d.ts +81 -0
  115. package/dist/utils/relation-visualizer.d.ts.map +1 -0
  116. package/dist/utils/relation-visualizer.js +239 -0
  117. package/dist/utils/relation-visualizer.js.map +1 -0
  118. package/dist/utils/type-guards.d.ts +100 -0
  119. package/dist/utils/type-guards.d.ts.map +1 -0
  120. package/dist/utils/type-guards.js +144 -0
  121. package/dist/utils/type-guards.js.map +1 -0
  122. package/package.json +7 -2
  123. package/scripts/generate-relation-report.ts +481 -0
  124. package/scripts/weekly-relation-validation.ts +423 -0
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Extract Relations Tool - 관계 추출 도구
3
+ * 특정 메모리에 대해 관계를 추출합니다.
4
+ */
5
+ import { z } from 'zod';
6
+ import { BaseTool } from './base-tool.js';
7
+ import { DatabaseUtils } from '../utils/database.js';
8
+ import { RelationExtractor } from '../services/relation-extractor.js';
9
+ import { RelationGraph } from '../services/relation-graph.js';
10
+ import { logger } from '../utils/logger.js';
11
+ import { isMemoryRow, convertMemoryRowToItem } from '../utils/type-guards.js';
12
+ const ExtractRelationsSchema = z.object({
13
+ memory_id: z.string().min(1, 'memory_id는 필수입니다'),
14
+ force: z.boolean().optional().default(false).describe('강제 재추출 여부 (캐시 무시)')
15
+ });
16
+ export class ExtractRelationsTool extends BaseTool {
17
+ constructor() {
18
+ super('extract_relations', '특정 메모리에 대해 기존 메모리들과의 관계를 추출합니다', {
19
+ type: 'object',
20
+ properties: {
21
+ memory_id: {
22
+ type: 'string',
23
+ description: '관계를 추출할 메모리 ID'
24
+ },
25
+ force: {
26
+ type: 'boolean',
27
+ description: '강제 재추출 여부 (캐시 무시, 기본값: false)',
28
+ default: false
29
+ }
30
+ },
31
+ required: ['memory_id']
32
+ });
33
+ }
34
+ /**
35
+ * Given: memory_id와 force 옵션
36
+ * When: 관계 추출 수행
37
+ * Then: 추출된 관계 목록 반환
38
+ */
39
+ async handle(params, context) {
40
+ const { memory_id, force } = ExtractRelationsSchema.parse(params);
41
+ const db = context.db;
42
+ try {
43
+ // Given: 메모리 존재 확인
44
+ const memoryResult = DatabaseUtils.get(db, `
45
+ SELECT id, type, content, importance, privacy_scope, created_at
46
+ FROM memory_item
47
+ WHERE id = ?
48
+ `, [memory_id]);
49
+ if (!memoryResult || !isMemoryRow(memoryResult)) {
50
+ return {
51
+ content: [{
52
+ type: 'text',
53
+ text: JSON.stringify({
54
+ success: false,
55
+ error: 'MEMORY_NOT_FOUND',
56
+ message: `메모리를 찾을 수 없습니다: ${memory_id}`
57
+ }, null, 2)
58
+ }]
59
+ };
60
+ }
61
+ // MemoryItem으로 변환 (타입 안전성 보장)
62
+ const memoryItem = convertMemoryRowToItem(memoryResult);
63
+ if (!memoryItem) {
64
+ return {
65
+ content: [{
66
+ type: 'text',
67
+ text: JSON.stringify({
68
+ success: false,
69
+ error: 'INVALID_MEMORY_TYPE',
70
+ message: `메모리 타입이 유효하지 않습니다: ${memory_id}`
71
+ }, null, 2)
72
+ }]
73
+ };
74
+ }
75
+ // 기존 메모리 목록 조회 (자기 자신 제외)
76
+ const existingMemoriesResult = DatabaseUtils.all(db, `
77
+ SELECT id, type, content, importance, privacy_scope, created_at
78
+ FROM memory_item
79
+ WHERE id != ?
80
+ ORDER BY created_at DESC
81
+ LIMIT 1000
82
+ `, [memory_id]);
83
+ // 타입 가드를 사용하여 안전하게 변환
84
+ const existingMemoryItems = existingMemoriesResult
85
+ .map(row => {
86
+ if (!isMemoryRow(row)) {
87
+ logger.warn('기존 메모리 조회 결과 타입 검증 실패', { row });
88
+ return null;
89
+ }
90
+ return convertMemoryRowToItem(row);
91
+ })
92
+ .filter((item) => item !== null);
93
+ if (existingMemoryItems.length === 0) {
94
+ return this.createSuccessResult({
95
+ memory_id,
96
+ extracted_count: 0,
97
+ relations: [],
98
+ message: '관계를 추출할 기존 메모리가 없습니다'
99
+ });
100
+ }
101
+ // When: 관계 추출 수행
102
+ const relationExtractor = new RelationExtractor();
103
+ // force가 true이면 캐시를 무시하고 즉시 처리
104
+ const extractOptions = {
105
+ immediate: force, // force가 true면 즉시 처리 (캐시 무시), false면 캐시 사용
106
+ minConfidence: 0.5
107
+ };
108
+ const candidates = await relationExtractor.extractRelations(memoryItem, existingMemoryItems, extractOptions);
109
+ // 추출된 관계를 RelationGraph에 저장
110
+ let savedCount = 0;
111
+ if (candidates.length > 0) {
112
+ // RelationGraph 인스턴스 생성 (context에 없으면 새로 생성)
113
+ const relationGraph = context.services.relationGraph || new RelationGraph(db);
114
+ for (const candidate of candidates) {
115
+ try {
116
+ await relationGraph.addRelation(candidate.source_id, candidate.target_id, candidate.relation_type, { confidence: candidate.confidence });
117
+ savedCount++;
118
+ }
119
+ catch (error) {
120
+ // 중복 관계나 순환 관계는 무시
121
+ const errorMessage = error instanceof Error ? error.message : String(error);
122
+ logger.warn('관계 저장 실패', {
123
+ source_id: candidate.source_id,
124
+ target_id: candidate.target_id,
125
+ relation_type: candidate.relation_type,
126
+ error: errorMessage
127
+ });
128
+ }
129
+ }
130
+ }
131
+ // Then: 결과 반환
132
+ return this.createSuccessResult({
133
+ memory_id,
134
+ extracted_count: candidates.length,
135
+ saved_count: savedCount,
136
+ relations: candidates.map(c => ({
137
+ source_id: c.source_id,
138
+ target_id: c.target_id,
139
+ relation_type: c.relation_type,
140
+ confidence: c.confidence
141
+ })),
142
+ message: `${candidates.length}개의 관계를 추출했습니다 (${savedCount}개 저장됨)`
143
+ });
144
+ }
145
+ catch (error) {
146
+ return {
147
+ content: [{
148
+ type: 'text',
149
+ text: JSON.stringify({
150
+ success: false,
151
+ error: 'EXTRACTION_FAILED',
152
+ message: error instanceof Error ? error.message : String(error)
153
+ }, null, 2)
154
+ }]
155
+ };
156
+ }
157
+ }
158
+ }
159
+ //# sourceMappingURL=extract-relations-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-relations-tool.js","sourceRoot":"","sources":["../../src/tools/extract-relations-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Get Relations Tool - 관계 조회 도구
3
+ * 특정 메모리의 관계를 조회합니다.
4
+ */
5
+ import { z } from 'zod';
6
+ import { BaseTool } from './base-tool.js';
7
+ import type { ToolContext, ToolResult } from './types.js';
8
+ declare const GetRelationsSchema: z.ZodObject<{
9
+ memory_id: z.ZodString;
10
+ relation_type: z.ZodOptional<z.ZodEnum<["CAUSES", "DEPENDS_ON", "FOLLOWS", "CONTRASTS_WITH", "REFERENCES", "BELONGS_TO"]>>;
11
+ category: z.ZodOptional<z.ZodEnum<["Causal", "Temporal", "Structural", "Semantic"]>>;
12
+ direction: z.ZodDefault<z.ZodOptional<z.ZodEnum<["incoming", "outgoing", "both"]>>>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ direction: "outgoing" | "incoming" | "both";
15
+ memory_id: string;
16
+ relation_type?: "CAUSES" | "DEPENDS_ON" | "FOLLOWS" | "CONTRASTS_WITH" | "REFERENCES" | "BELONGS_TO" | undefined;
17
+ category?: "Causal" | "Temporal" | "Structural" | "Semantic" | undefined;
18
+ }, {
19
+ memory_id: string;
20
+ relation_type?: "CAUSES" | "DEPENDS_ON" | "FOLLOWS" | "CONTRASTS_WITH" | "REFERENCES" | "BELONGS_TO" | undefined;
21
+ direction?: "outgoing" | "incoming" | "both" | undefined;
22
+ category?: "Causal" | "Temporal" | "Structural" | "Semantic" | undefined;
23
+ }>;
24
+ export declare class GetRelationsTool extends BaseTool {
25
+ constructor();
26
+ /**
27
+ * Given: memory_id와 필터 옵션
28
+ * When: 관계 조회 수행
29
+ * Then: 조회된 관계 목록 반환
30
+ */
31
+ handle(params: z.infer<typeof GetRelationsSchema>, context: ToolContext): Promise<ToolResult>;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=get-relations-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-relations-tool.d.ts","sourceRoot":"","sources":["../../src/tools/get-relations-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO1D,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;EAKtB,CAAC;AAEH,qBAAa,gBAAiB,SAAQ,QAAQ;;IAkC5C;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAkHpG"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Get Relations Tool - 관계 조회 도구
3
+ * 특정 메모리의 관계를 조회합니다.
4
+ */
5
+ import { z } from 'zod';
6
+ import { BaseTool } from './base-tool.js';
7
+ import { DatabaseUtils } from '../utils/database.js';
8
+ import { RelationGraph } from '../services/relation-graph.js';
9
+ import { RELATION_TYPE_CATEGORY_MAP, getRelationCategory } from '../types/relation.js';
10
+ const GetRelationsSchema = z.object({
11
+ memory_id: z.string().min(1, 'memory_id는 필수입니다'),
12
+ relation_type: z.enum(['CAUSES', 'DEPENDS_ON', 'FOLLOWS', 'CONTRASTS_WITH', 'REFERENCES', 'BELONGS_TO']).optional(),
13
+ category: z.enum(['Causal', 'Temporal', 'Structural', 'Semantic']).optional(),
14
+ direction: z.enum(['incoming', 'outgoing', 'both']).optional().default('both')
15
+ });
16
+ export class GetRelationsTool extends BaseTool {
17
+ constructor() {
18
+ super('get_relations', '특정 메모리의 관계를 조회합니다', {
19
+ type: 'object',
20
+ properties: {
21
+ memory_id: {
22
+ type: 'string',
23
+ description: '관계를 조회할 메모리 ID'
24
+ },
25
+ relation_type: {
26
+ type: 'string',
27
+ enum: ['CAUSES', 'DEPENDS_ON', 'FOLLOWS', 'CONTRASTS_WITH', 'REFERENCES', 'BELONGS_TO'],
28
+ description: '관계 유형 필터 (선택)'
29
+ },
30
+ category: {
31
+ type: 'string',
32
+ enum: ['Causal', 'Temporal', 'Structural', 'Semantic'],
33
+ description: '관계 카테고리 필터 (선택)'
34
+ },
35
+ direction: {
36
+ type: 'string',
37
+ enum: ['incoming', 'outgoing', 'both'],
38
+ description: '관계 방향 (기본값: both)',
39
+ default: 'both'
40
+ }
41
+ },
42
+ required: ['memory_id']
43
+ });
44
+ }
45
+ /**
46
+ * Given: memory_id와 필터 옵션
47
+ * When: 관계 조회 수행
48
+ * Then: 조회된 관계 목록 반환
49
+ */
50
+ async handle(params, context) {
51
+ const { memory_id, relation_type, category, direction } = GetRelationsSchema.parse(params);
52
+ const db = context.db;
53
+ try {
54
+ // Given: 메모리 존재 확인
55
+ const memory = DatabaseUtils.get(db, `
56
+ SELECT id FROM memory_item WHERE id = ?
57
+ `, [memory_id]);
58
+ if (!memory) {
59
+ return {
60
+ content: [{
61
+ type: 'text',
62
+ text: JSON.stringify({
63
+ success: false,
64
+ error: 'MEMORY_NOT_FOUND',
65
+ message: `메모리를 찾을 수 없습니다: ${memory_id}`
66
+ }, null, 2)
67
+ }]
68
+ };
69
+ }
70
+ // RelationGraph 인스턴스 생성 (context에 없으면 새로 생성)
71
+ const relationGraph = context.services.relationGraph || new RelationGraph(db);
72
+ // When: 관계 조회 수행
73
+ const options = {
74
+ direction: direction || 'both',
75
+ minConfidence: 0.0 // 모든 신뢰도 포함
76
+ };
77
+ // relation_type 필터 적용
78
+ if (relation_type) {
79
+ options.relationTypes = [relation_type];
80
+ }
81
+ // category 필터 적용
82
+ if (category) {
83
+ // category를 relation_type 배열로 변환 (RELATION_TYPE_CATEGORY_MAP의 역방향 매핑)
84
+ const categoryToTypes = [];
85
+ for (const [relationType, relationCategory] of Object.entries(RELATION_TYPE_CATEGORY_MAP)) {
86
+ if (relationCategory === category) {
87
+ categoryToTypes.push(relationType);
88
+ }
89
+ }
90
+ if (categoryToTypes.length > 0) {
91
+ if (options.relationTypes && options.relationTypes.length > 0) {
92
+ // relation_type과 category 모두 지정된 경우 교집합
93
+ options.relationTypes = options.relationTypes.filter((type) => categoryToTypes.includes(type));
94
+ // 교집합이 비어있으면 빈 배열로 설정하여 결과 없음을 명시
95
+ }
96
+ else {
97
+ options.relationTypes = categoryToTypes;
98
+ }
99
+ }
100
+ else {
101
+ // category에 해당하는 relation_type이 없으면 빈 배열로 설정
102
+ options.relationTypes = [];
103
+ }
104
+ }
105
+ // relationTypes가 빈 배열이면 조회하지 않고 빈 결과 반환
106
+ if (options.relationTypes && options.relationTypes.length === 0) {
107
+ return this.createSuccessResult({
108
+ memory_id,
109
+ relation_count: 0,
110
+ relations: [],
111
+ filters: {
112
+ relation_type: relation_type || null,
113
+ category: category || null,
114
+ direction: direction || 'both'
115
+ },
116
+ message: '0개의 관계를 찾았습니다'
117
+ });
118
+ }
119
+ const relations = await relationGraph.getRelations(memory_id, options);
120
+ // Then: 결과 반환
121
+ return this.createSuccessResult({
122
+ memory_id,
123
+ relation_count: relations.length,
124
+ relations: relations.map((r) => ({
125
+ relation_id: r.id,
126
+ source_id: r.source_id,
127
+ target_id: r.target_id,
128
+ relation_type: r.relation_type,
129
+ confidence: r.confidence,
130
+ metadata: r.metadata,
131
+ created_at: r.created_at
132
+ })),
133
+ filters: {
134
+ relation_type: relation_type || null,
135
+ category: category || null,
136
+ direction: direction || 'both'
137
+ },
138
+ message: `${relations.length}개의 관계를 찾았습니다`
139
+ });
140
+ }
141
+ catch (error) {
142
+ return {
143
+ content: [{
144
+ type: 'text',
145
+ text: JSON.stringify({
146
+ success: false,
147
+ error: 'QUERY_FAILED',
148
+ message: error instanceof Error ? error.message : String(error)
149
+ }, null, 2)
150
+ }]
151
+ };
152
+ }
153
+ }
154
+ }
155
+ //# sourceMappingURL=get-relations-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-relations-tool.js","sourceRoot":"","sources":["../../src/tools/get-relations-tool.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,11 @@ import { GetAnchorTool } from './get-anchor-tool.js';
15
15
  import { SearchLocalTool } from './search-local-tool.js';
16
16
  import { ClearAnchorTool } from './clear-anchor-tool.js';
17
17
  import { RestoreAnchorsTool } from './restore-anchors-tool.js';
18
+ import { ExtractRelationsTool } from './extract-relations-tool.js';
19
+ import { GetRelationsTool } from './get-relations-tool.js';
20
+ import { AddRelationTool } from './add-relation-tool.js';
21
+ import { RemoveRelationTool } from './remove-relation-tool.js';
22
+ import { VisualizeRelationsTool } from './visualize-relations-tool.js';
18
23
  /**
19
24
  * MCP 클라이언트용 도구 레지스트리 생성 및 등록
20
25
  */
@@ -35,5 +40,5 @@ export declare function getAllTools(): import("./types.js").ToolDefinition[];
35
40
  * 도구 실행
36
41
  */
37
42
  export declare function executeTool(name: string, params: any, context: any): Promise<import("./types.js").ToolResult>;
38
- export { RememberTool, RecallTool, ForgetTool, PinTool, UnpinTool, MemoryInjectionPrompt, GetMemoryNeighborsTool, SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool, };
43
+ export { RememberTool, RecallTool, ForgetTool, PinTool, UnpinTool, MemoryInjectionPrompt, GetMemoryNeighborsTool, SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool, ExtractRelationsTool, GetRelationsTool, AddRelationTool, RemoveRelationTool, VisualizeRelationsTool, };
39
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAqB/D;;GAEG;AACH,eAAO,MAAM,YAAY,cAAqB,CAAC;AAK/C;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,mDAEnC;AAED;;GAEG;AACH,wBAAgB,WAAW,0CAE1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,4CAExE;AAGD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,sBAAsB,EAEtB,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,kBAAkB,GACnB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AA2BvE;;GAEG;AACH,eAAO,MAAM,YAAY,cAAqB,CAAC;AAK/C;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,mDAEnC;AAED;;GAEG;AACH,wBAAgB,WAAW,0CAE1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,4CAExE;AAGD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,sBAAsB,EAEtB,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,kBAAkB,EAElB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,sBAAsB,GACvB,CAAC"}
@@ -15,8 +15,14 @@ import { GetAnchorTool } from './get-anchor-tool.js';
15
15
  import { SearchLocalTool } from './search-local-tool.js';
16
16
  import { ClearAnchorTool } from './clear-anchor-tool.js';
17
17
  import { RestoreAnchorsTool } from './restore-anchors-tool.js';
18
+ // 관계 엔진 도구들
19
+ import { ExtractRelationsTool } from './extract-relations-tool.js';
20
+ import { GetRelationsTool } from './get-relations-tool.js';
21
+ import { AddRelationTool } from './add-relation-tool.js';
22
+ import { RemoveRelationTool } from './remove-relation-tool.js';
23
+ import { VisualizeRelationsTool } from './visualize-relations-tool.js';
18
24
  /**
19
- * 핵심 도구 인스턴스 생성 (12개: 기존 7개 + 앵커 5개)
25
+ * 핵심 도구 인스턴스 생성 (17개: 기존 7개 + 앵커 5개 + 관계 엔진 5개)
20
26
  */
21
27
  const coreTools = [
22
28
  new RememberTool(),
@@ -32,6 +38,12 @@ const coreTools = [
32
38
  new SearchLocalTool(),
33
39
  new ClearAnchorTool(),
34
40
  new RestoreAnchorsTool(),
41
+ // 관계 엔진 도구들
42
+ new ExtractRelationsTool(),
43
+ new GetRelationsTool(),
44
+ new AddRelationTool(),
45
+ new RemoveRelationTool(),
46
+ new VisualizeRelationsTool(),
35
47
  ];
36
48
  /**
37
49
  * MCP 클라이언트용 도구 레지스트리 생성 및 등록
@@ -66,5 +78,7 @@ export async function executeTool(name, params, context) {
66
78
  // 핵심 도구들만 export
67
79
  export { RememberTool, RecallTool, ForgetTool, PinTool, UnpinTool, MemoryInjectionPrompt, GetMemoryNeighborsTool,
68
80
  // 앵커 시스템 도구들
69
- SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool, };
81
+ SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool,
82
+ // 관계 엔진 도구들
83
+ ExtractRelationsTool, GetRelationsTool, AddRelationTool, RemoveRelationTool, VisualizeRelationsTool, };
70
84
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;GAEG;AACH,MAAM,SAAS,GAAG;IAChB,IAAI,YAAY,EAAE;IAClB,IAAI,UAAU,EAAE;IAChB,IAAI,UAAU,EAAE;IAChB,IAAI,OAAO,EAAE;IACb,IAAI,SAAS,EAAE;IACf,IAAI,qBAAqB,EAAE;IAC3B,IAAI,sBAAsB,EAAE;IAC5B,aAAa;IACb,IAAI,aAAa,EAAE;IACnB,IAAI,aAAa,EAAE;IACnB,IAAI,eAAe,EAAE;IACrB,IAAI,eAAe,EAAE;IACrB,IAAI,kBAAkB,EAAE;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAE/C,aAAa;AACb,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,MAAW,EAAE,OAAY;IACvE,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,iBAAiB;AACjB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,sBAAsB;AACtB,aAAa;AACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,kBAAkB,GACnB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,22 @@ import type { ToolContext, ToolResult } from './types.js';
6
6
  export declare class RememberTool extends BaseTool {
7
7
  constructor();
8
8
  handle(params: any, context: ToolContext): Promise<ToolResult>;
9
+ /**
10
+ * 관계 추출을 위한 기존 기억들 조회
11
+ *
12
+ * @param db 데이터베이스 연결
13
+ * @param excludeId 제외할 기억 ID (새로 저장된 기억)
14
+ * @param limit 조회할 기억 수 제한
15
+ * @returns 기존 기억 목록
16
+ */
17
+ private getExistingMemoriesForRelationExtraction;
18
+ /**
19
+ * ID로 기억 조회
20
+ *
21
+ * @param db 데이터베이스 연결
22
+ * @param id 기억 ID
23
+ * @returns 기억 정보
24
+ */
25
+ private getMemoryById;
9
26
  }
10
27
  //# sourceMappingURL=remember-tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remember-tool.d.ts","sourceRoot":"","sources":["../../src/tools/remember-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmD1D,qBAAa,YAAa,SAAQ,QAAQ;;IA4ElC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAmSrE"}
1
+ {"version":3,"file":"remember-tool.d.ts","sourceRoot":"","sources":["../../src/tools/remember-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqD1D,qBAAa,YAAa,SAAQ,QAAQ;;IA4ElC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAiYpE;;;;;;;OAOG;YACW,wCAAwC;IAqCtD;;;;;;OAMG;YACW,aAAa;CAmC5B"}