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.
- package/README.en.md +21 -6
- package/README.md +38 -7
- package/dist/algorithms/hybrid-search-engine.d.ts +34 -1
- package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
- package/dist/algorithms/hybrid-search-engine.js +186 -17
- package/dist/algorithms/hybrid-search-engine.js.map +1 -1
- package/dist/algorithms/search-ranking.d.ts +15 -1
- package/dist/algorithms/search-ranking.d.ts.map +1 -1
- package/dist/algorithms/search-ranking.js +41 -4
- package/dist/algorithms/search-ranking.js.map +1 -1
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +4 -0
- package/dist/config/environment.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/ranking-weights-loader.d.ts +37 -0
- package/dist/config/ranking-weights-loader.d.ts.map +1 -0
- package/dist/config/ranking-weights-loader.js +109 -0
- package/dist/config/ranking-weights-loader.js.map +1 -0
- package/dist/constants/relation-constants.d.ts +95 -0
- package/dist/constants/relation-constants.d.ts.map +1 -0
- package/dist/constants/relation-constants.js +95 -0
- package/dist/constants/relation-constants.js.map +1 -0
- package/dist/database/migration/migrations/005-relation-engine-schema.d.ts +65 -0
- package/dist/database/migration/migrations/005-relation-engine-schema.d.ts.map +1 -0
- package/dist/database/migration/migrations/005-relation-engine-schema.js +295 -0
- package/dist/database/migration/migrations/005-relation-engine-schema.js.map +1 -0
- package/dist/database/migration/migrations/005-relation-engine-schema.sql +64 -0
- package/dist/server/routes/admin.routes.d.ts.map +1 -1
- package/dist/server/routes/admin.routes.js +228 -0
- package/dist/server/routes/admin.routes.js.map +1 -1
- package/dist/services/anchor/anchor-interfaces.d.ts +1 -0
- package/dist/services/anchor/anchor-interfaces.d.ts.map +1 -1
- package/dist/services/anchor/anchor-interfaces.js.map +1 -1
- package/dist/services/anchor/anchor-search-service.d.ts +16 -0
- package/dist/services/anchor/anchor-search-service.d.ts.map +1 -1
- package/dist/services/anchor/anchor-search-service.js +136 -17
- package/dist/services/anchor/anchor-search-service.js.map +1 -1
- package/dist/services/batch-scheduler.d.ts +11 -0
- package/dist/services/batch-scheduler.d.ts.map +1 -1
- package/dist/services/batch-scheduler.js +99 -0
- package/dist/services/batch-scheduler.js.map +1 -1
- package/dist/services/llm-based-relation-extractor.d.ts +156 -0
- package/dist/services/llm-based-relation-extractor.d.ts.map +1 -0
- package/dist/services/llm-based-relation-extractor.js +1350 -0
- package/dist/services/llm-based-relation-extractor.js.map +1 -0
- package/dist/services/relation-extractor.d.ts +73 -0
- package/dist/services/relation-extractor.d.ts.map +1 -0
- package/dist/services/relation-extractor.js +231 -0
- package/dist/services/relation-extractor.js.map +1 -0
- package/dist/services/relation-graph.d.ts +275 -0
- package/dist/services/relation-graph.d.ts.map +1 -0
- package/dist/services/relation-graph.js +869 -0
- package/dist/services/relation-graph.js.map +1 -0
- package/dist/services/relation-quality-validator.d.ts +211 -0
- package/dist/services/relation-quality-validator.d.ts.map +1 -0
- package/dist/services/relation-quality-validator.js +415 -0
- package/dist/services/relation-quality-validator.js.map +1 -0
- package/dist/services/rule-based-relation-extractor.d.ts +66 -0
- package/dist/services/rule-based-relation-extractor.d.ts.map +1 -0
- package/dist/services/rule-based-relation-extractor.js +258 -0
- package/dist/services/rule-based-relation-extractor.js.map +1 -0
- package/dist/tools/add-relation-tool.d.ts +34 -0
- package/dist/tools/add-relation-tool.d.ts.map +1 -0
- package/dist/tools/add-relation-tool.js +163 -0
- package/dist/tools/add-relation-tool.js.map +1 -0
- package/dist/tools/extract-relations-tool.d.ts +28 -0
- package/dist/tools/extract-relations-tool.d.ts.map +1 -0
- package/dist/tools/extract-relations-tool.js +159 -0
- package/dist/tools/extract-relations-tool.js.map +1 -0
- package/dist/tools/get-relations-tool.d.ts +34 -0
- package/dist/tools/get-relations-tool.d.ts.map +1 -0
- package/dist/tools/get-relations-tool.js +155 -0
- package/dist/tools/get-relations-tool.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +11 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/remember-tool.d.ts +17 -0
- package/dist/tools/remember-tool.d.ts.map +1 -1
- package/dist/tools/remember-tool.js +195 -26
- package/dist/tools/remember-tool.js.map +1 -1
- package/dist/tools/remove-relation-tool.d.ts +45 -0
- package/dist/tools/remove-relation-tool.d.ts.map +1 -0
- package/dist/tools/remove-relation-tool.js +142 -0
- package/dist/tools/remove-relation-tool.js.map +1 -0
- package/dist/tools/search-local-tool.d.ts.map +1 -1
- package/dist/tools/search-local-tool.js +10 -3
- package/dist/tools/search-local-tool.js.map +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/visualize-relations-tool.d.ts +46 -0
- package/dist/tools/visualize-relations-tool.d.ts.map +1 -0
- package/dist/tools/visualize-relations-tool.js +157 -0
- package/dist/tools/visualize-relations-tool.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/relation-graph.d.ts +215 -0
- package/dist/types/relation-graph.d.ts.map +1 -0
- package/dist/types/relation-graph.js +6 -0
- package/dist/types/relation-graph.js.map +1 -0
- package/dist/types/relation.d.ts +112 -0
- package/dist/types/relation.d.ts.map +1 -0
- package/dist/types/relation.js +67 -0
- package/dist/types/relation.js.map +1 -0
- package/dist/utils/cache-key-generator.d.ts +63 -0
- package/dist/utils/cache-key-generator.d.ts.map +1 -0
- package/dist/utils/cache-key-generator.js +76 -0
- package/dist/utils/cache-key-generator.js.map +1 -0
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +37 -17
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/relation-visualizer.d.ts +81 -0
- package/dist/utils/relation-visualizer.d.ts.map +1 -0
- package/dist/utils/relation-visualizer.js +239 -0
- package/dist/utils/relation-visualizer.js.map +1 -0
- package/dist/utils/type-guards.d.ts +100 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +144 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/package.json +7 -2
- package/scripts/generate-relation-report.ts +481 -0
- 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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGvF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAChD,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnH,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CAC/E,CAAC,CAAC;AAEH,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAC5C;QACE,KAAK,CACH,eAAe,EACf,mBAAmB,EACnB;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gBAAgB;iBAC9B;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,CAAC;oBACvF,WAAW,EAAE,eAAe;iBAC7B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC;oBACtD,WAAW,EAAE,iBAAiB;iBAC/B;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC;oBACtC,WAAW,EAAE,mBAAmB;oBAChC,OAAO,EAAE,MAAM;iBAChB;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAA0C,EAAE,OAAoB;QAC3E,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3F,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QAEtB,IAAI,CAAC;YACH,mBAAmB;YACnB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE;;OAEpC,EAAE,CAAC,SAAS,CAAC,CAA+B,CAAC;YAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,OAAO,EAAE,KAAK;gCACd,KAAK,EAAE,kBAAkB;gCACzB,OAAO,EAAE,mBAAmB,SAAS,EAAE;6BACxC,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,6CAA6C;YAC7C,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YAE9E,iBAAiB;YACjB,MAAM,OAAO,GAAwB;gBACnC,SAAS,EAAE,SAAS,IAAI,MAAM;gBAC9B,aAAa,EAAE,GAAG,CAAC,YAAY;aAChC,CAAC;YAEF,sBAAsB;YACtB,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,CAAC,aAAa,GAAG,CAAC,aAAa,CAAC,CAAC;YAC1C,CAAC;YAED,iBAAiB;YACjB,IAAI,QAAQ,EAAE,CAAC;gBACb,sEAAsE;gBACtE,MAAM,eAAe,GAAmB,EAAE,CAAC;gBAC3C,KAAK,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE,CAAC;oBAC1F,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;wBAClC,eAAe,CAAC,IAAI,CAAC,YAA4B,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;gBAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9D,wCAAwC;wBACxC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAkB,EAAE,EAAE,CAC1E,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC/B,CAAC;wBACF,kCAAkC;oBACpC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,aAAa,GAAG,eAAe,CAAC;oBAC1C,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,6CAA6C;oBAC7C,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,wCAAwC;YACxC,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChE,OAAO,IAAI,CAAC,mBAAmB,CAAC;oBAC9B,SAAS;oBACT,cAAc,EAAE,CAAC;oBACjB,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE;wBACP,aAAa,EAAE,aAAa,IAAI,IAAI;wBACpC,QAAQ,EAAE,QAAQ,IAAI,IAAI;wBAC1B,SAAS,EAAE,SAAS,IAAI,MAAM;qBAC/B;oBACD,OAAO,EAAE,eAAe;iBACzB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEvE,cAAc;YACd,OAAO,IAAI,CAAC,mBAAmB,CAAC;gBAC9B,SAAS;gBACT,cAAc,EAAE,SAAS,CAAC,MAAM;gBAChC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC;oBAC/C,WAAW,EAAE,CAAC,CAAC,EAAE;oBACjB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB,CAAC,CAAC;gBACH,OAAO,EAAE;oBACP,aAAa,EAAE,aAAa,IAAI,IAAI;oBACpC,QAAQ,EAAE,QAAQ,IAAI,IAAI;oBAC1B,SAAS,EAAE,SAAS,IAAI,MAAM;iBAC/B;gBACD,OAAO,EAAE,GAAG,SAAS,CAAC,MAAM,cAAc;aAC3C,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,cAAc;4BACrB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAChE,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;aACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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;
|
|
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;AA2B/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,GAEnB,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -15,11 +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
|
+
// 관계 엔진 도구들은 HTTP API로만 제공 (MCP에서 제거)
|
|
19
|
+
// 관계 추출은 remember 도구에서 자동으로 수행됨
|
|
18
20
|
/**
|
|
19
|
-
* 핵심 도구 인스턴스 생성 (12개:
|
|
21
|
+
* 핵심 도구 인스턴스 생성 (12개: 핵심 7개 + 앵커 5개)
|
|
22
|
+
* 관계 엔진 도구 5개는 HTTP API로만 제공 (관리자용)
|
|
20
23
|
*/
|
|
21
24
|
const coreTools = [
|
|
22
|
-
new RememberTool(),
|
|
25
|
+
new RememberTool(), // 자동으로 관계 추출 포함
|
|
23
26
|
new RecallTool(),
|
|
24
27
|
new ForgetTool(),
|
|
25
28
|
new PinTool(),
|
|
@@ -32,6 +35,9 @@ const coreTools = [
|
|
|
32
35
|
new SearchLocalTool(),
|
|
33
36
|
new ClearAnchorTool(),
|
|
34
37
|
new RestoreAnchorsTool(),
|
|
38
|
+
// 관계 엔진 도구들은 제거됨 (HTTP API로만 제공)
|
|
39
|
+
// - extract_relations: remember에서 자동 실행
|
|
40
|
+
// - get_relations, add_relation, remove_relation, visualize_relations: HTTP API로 제공
|
|
35
41
|
];
|
|
36
42
|
/**
|
|
37
43
|
* MCP 클라이언트용 도구 레지스트리 생성 및 등록
|
|
@@ -66,5 +72,7 @@ export async function executeTool(name, params, context) {
|
|
|
66
72
|
// 핵심 도구들만 export
|
|
67
73
|
export { RememberTool, RecallTool, ForgetTool, PinTool, UnpinTool, MemoryInjectionPrompt, GetMemoryNeighborsTool,
|
|
68
74
|
// 앵커 시스템 도구들
|
|
69
|
-
SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool,
|
|
75
|
+
SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool,
|
|
76
|
+
// 관계 엔진 도구들은 HTTP API로만 제공되므로 export하지 않음
|
|
77
|
+
};
|
|
70
78
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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;
|
|
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;AAC/D,sCAAsC;AACtC,gCAAgC;AAEhC;;;GAGG;AACH,MAAM,SAAS,GAAG;IAChB,IAAI,YAAY,EAAE,EAAS,gBAAgB;IAC3C,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;IACxB,iCAAiC;IACjC,wCAAwC;IACxC,oFAAoF;CACrF,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;AAClB,0CAA0C;EAC3C,CAAC"}
|
|
@@ -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;
|
|
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"}
|