memento-mcp-server 1.14.0-b → 1.15.0-c
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/dist/domains/memory/tools/convert-episodic-to-semantic-tool.d.ts +18 -0
- package/dist/domains/memory/tools/convert-episodic-to-semantic-tool.d.ts.map +1 -0
- package/dist/domains/memory/tools/convert-episodic-to-semantic-tool.js +346 -0
- package/dist/domains/memory/tools/convert-episodic-to-semantic-tool.js.map +1 -0
- package/dist/domains/memory/tools/recall-tool.d.ts +177 -0
- package/dist/domains/memory/tools/recall-tool.d.ts.map +1 -1
- package/dist/domains/memory/tools/recall-tool.js +329 -3
- package/dist/domains/memory/tools/recall-tool.js.map +1 -1
- package/dist/domains/memory/tools/remember-tool.d.ts.map +1 -1
- package/dist/domains/memory/tools/remember-tool.js +182 -1
- package/dist/domains/memory/tools/remember-tool.js.map +1 -1
- package/dist/infrastructure/database/database/migration/migrations/005-relation-engine-schema.sql +7 -7
- package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.d.ts +65 -0
- package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.d.ts.map +1 -0
- package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.js +250 -0
- package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.js.map +1 -0
- package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.sql +86 -0
- package/dist/infrastructure/logging/triple-extraction-logger.d.ts +92 -0
- package/dist/infrastructure/logging/triple-extraction-logger.d.ts.map +1 -0
- package/dist/infrastructure/logging/triple-extraction-logger.js +194 -0
- package/dist/infrastructure/logging/triple-extraction-logger.js.map +1 -0
- package/dist/infrastructure/scheduler/batch-scheduler.d.ts +57 -0
- package/dist/infrastructure/scheduler/batch-scheduler.d.ts.map +1 -1
- package/dist/infrastructure/scheduler/batch-scheduler.js +220 -0
- package/dist/infrastructure/scheduler/batch-scheduler.js.map +1 -1
- package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.d.ts +194 -0
- package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.d.ts.map +1 -0
- package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.js +639 -0
- package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.js.map +1 -0
- package/dist/services/semantic-memory/semantic-memory-statistics.d.ts +64 -0
- package/dist/services/semantic-memory/semantic-memory-statistics.d.ts.map +1 -0
- package/dist/services/semantic-memory/semantic-memory-statistics.js +113 -0
- package/dist/services/semantic-memory/semantic-memory-statistics.js.map +1 -0
- package/dist/services/semantic-memory/semantic-memory-update-service.d.ts +257 -0
- package/dist/services/semantic-memory/semantic-memory-update-service.d.ts.map +1 -0
- package/dist/services/semantic-memory/semantic-memory-update-service.js +696 -0
- package/dist/services/semantic-memory/semantic-memory-update-service.js.map +1 -0
- package/dist/services/triple-extraction/entity-linker.d.ts +55 -0
- package/dist/services/triple-extraction/entity-linker.d.ts.map +1 -0
- package/dist/services/triple-extraction/entity-linker.js +154 -0
- package/dist/services/triple-extraction/entity-linker.js.map +1 -0
- package/dist/services/triple-extraction/predicate-canonicalizer.d.ts +63 -0
- package/dist/services/triple-extraction/predicate-canonicalizer.d.ts.map +1 -0
- package/dist/services/triple-extraction/predicate-canonicalizer.js +166 -0
- package/dist/services/triple-extraction/predicate-canonicalizer.js.map +1 -0
- package/dist/services/triple-extraction/triple-extraction-service.d.ts +181 -0
- package/dist/services/triple-extraction/triple-extraction-service.d.ts.map +1 -0
- package/dist/services/triple-extraction/triple-extraction-service.js +907 -0
- package/dist/services/triple-extraction/triple-extraction-service.js.map +1 -0
- package/dist/services/triple-extraction/triple-extraction-statistics.d.ts +74 -0
- package/dist/services/triple-extraction/triple-extraction-statistics.d.ts.map +1 -0
- package/dist/services/triple-extraction/triple-extraction-statistics.js +146 -0
- package/dist/services/triple-extraction/triple-extraction-statistics.js.map +1 -0
- package/dist/shared/types/index.d.ts +1 -0
- package/dist/shared/types/index.d.ts.map +1 -1
- package/dist/shared/types/index.js.map +1 -1
- package/dist/shared/types/triple-extraction.d.ts +99 -0
- package/dist/shared/types/triple-extraction.d.ts.map +1 -0
- package/dist/shared/types/triple-extraction.js +6 -0
- package/dist/shared/types/triple-extraction.js.map +1 -0
- package/dist/shared/utils/pii-masker.d.ts +67 -0
- package/dist/shared/utils/pii-masker.d.ts.map +1 -0
- package/dist/shared/utils/pii-masker.js +205 -0
- package/dist/shared/utils/pii-masker.js.map +1 -0
- package/dist/shared/utils/prompt-template-loader.d.ts +42 -0
- package/dist/shared/utils/prompt-template-loader.d.ts.map +1 -0
- package/dist/shared/utils/prompt-template-loader.js +92 -0
- package/dist/shared/utils/prompt-template-loader.js.map +1 -0
- package/dist/shared/utils/triple-cache.d.ts +90 -0
- package/dist/shared/utils/triple-cache.d.ts.map +1 -0
- package/dist/shared/utils/triple-cache.js +124 -0
- package/dist/shared/utils/triple-cache.js.map +1 -0
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.d.ts +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PII (Personally Identifiable Information) 마스킹 유틸리티
|
|
3
|
+
*
|
|
4
|
+
* 로그 파일에 저장되는 rawLLMOutput에서 민감한 정보를 마스킹합니다.
|
|
5
|
+
*
|
|
6
|
+
* 마스킹 대상:
|
|
7
|
+
* - 이메일 주소
|
|
8
|
+
* - 전화번호
|
|
9
|
+
* - API 키
|
|
10
|
+
* - 비밀번호
|
|
11
|
+
* - 토큰 (Bearer, JWT 등)
|
|
12
|
+
* - 기타 credential 정보
|
|
13
|
+
*
|
|
14
|
+
* 보안 정책:
|
|
15
|
+
* - 모든 민감 정보는 [TYPE] 형식으로 마스킹
|
|
16
|
+
* - 원본 정보는 복구 불가능하도록 완전히 제거
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* PII 마스킹기
|
|
20
|
+
*/
|
|
21
|
+
export class PIIMasker {
|
|
22
|
+
/**
|
|
23
|
+
* 텍스트에서 모든 PII를 마스킹합니다.
|
|
24
|
+
*
|
|
25
|
+
* @param text 원본 텍스트
|
|
26
|
+
* @param options 마스킹 옵션
|
|
27
|
+
* @returns 마스킹 결과
|
|
28
|
+
*/
|
|
29
|
+
static mask(text, options = {}) {
|
|
30
|
+
if (!text || typeof text !== 'string') {
|
|
31
|
+
return {
|
|
32
|
+
masked: text || '',
|
|
33
|
+
maskedCount: 0,
|
|
34
|
+
maskedTypes: []
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const usePlaceholder = options.usePlaceholder !== false;
|
|
38
|
+
const types = options.types || ['email', 'phone', 'api_key', 'password', 'token', 'credential'];
|
|
39
|
+
let masked = text;
|
|
40
|
+
const maskedTypes = [];
|
|
41
|
+
let totalMaskedCount = 0;
|
|
42
|
+
// 이메일 주소 마스킹
|
|
43
|
+
if (types.includes('email')) {
|
|
44
|
+
const emailPattern = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
|
|
45
|
+
const emailMatches = masked.match(emailPattern);
|
|
46
|
+
if (emailMatches) {
|
|
47
|
+
masked = masked.replace(emailPattern, usePlaceholder ? '[EMAIL]' : '');
|
|
48
|
+
maskedTypes.push('email');
|
|
49
|
+
totalMaskedCount += emailMatches.length;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 전화번호 마스킹 (한국 형식 포함)
|
|
53
|
+
if (types.includes('phone')) {
|
|
54
|
+
// 한국 전화번호: 010-1234-5678, 01012345678, +82-10-1234-5678 등
|
|
55
|
+
const koreanPhonePattern = /(\+82[-.\s]?)?0?1[0-9]{1}[-.\s]?[0-9]{3,4}[-.\s]?[0-9]{4}/g;
|
|
56
|
+
const koreanMatches = masked.match(koreanPhonePattern);
|
|
57
|
+
if (koreanMatches) {
|
|
58
|
+
masked = masked.replace(koreanPhonePattern, usePlaceholder ? '[PHONE]' : '');
|
|
59
|
+
if (!maskedTypes.includes('phone')) {
|
|
60
|
+
maskedTypes.push('phone');
|
|
61
|
+
}
|
|
62
|
+
totalMaskedCount += koreanMatches.length;
|
|
63
|
+
}
|
|
64
|
+
// 국제 전화번호: +1-234-567-8900 등
|
|
65
|
+
const internationalPhonePattern = /\+\d{1,3}[-.\s]?\d{1,4}[-.\s]?\d{1,4}[-.\s]?\d{1,9}/g;
|
|
66
|
+
const internationalMatches = masked.match(internationalPhonePattern);
|
|
67
|
+
if (internationalMatches) {
|
|
68
|
+
masked = masked.replace(internationalPhonePattern, usePlaceholder ? '[PHONE]' : '');
|
|
69
|
+
if (!maskedTypes.includes('phone')) {
|
|
70
|
+
maskedTypes.push('phone');
|
|
71
|
+
}
|
|
72
|
+
totalMaskedCount += internationalMatches.length;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// API 키 마스킹
|
|
76
|
+
if (types.includes('api_key')) {
|
|
77
|
+
// OpenAI API 키: sk-... 또는 sk-proj-...
|
|
78
|
+
const openaiKeyPattern = /sk-[a-zA-Z0-9]{32,}/g;
|
|
79
|
+
const openaiMatches = masked.match(openaiKeyPattern);
|
|
80
|
+
if (openaiMatches) {
|
|
81
|
+
masked = masked.replace(openaiKeyPattern, usePlaceholder ? '[API_KEY]' : '');
|
|
82
|
+
if (!maskedTypes.includes('api_key')) {
|
|
83
|
+
maskedTypes.push('api_key');
|
|
84
|
+
}
|
|
85
|
+
totalMaskedCount += openaiMatches.length;
|
|
86
|
+
}
|
|
87
|
+
// Google API 키: AIza...
|
|
88
|
+
const googleKeyPattern = /AIza[0-9A-Za-z_-]{35}/g;
|
|
89
|
+
const googleMatches = masked.match(googleKeyPattern);
|
|
90
|
+
if (googleMatches) {
|
|
91
|
+
masked = masked.replace(googleKeyPattern, usePlaceholder ? '[API_KEY]' : '');
|
|
92
|
+
if (!maskedTypes.includes('api_key')) {
|
|
93
|
+
maskedTypes.push('api_key');
|
|
94
|
+
}
|
|
95
|
+
totalMaskedCount += googleMatches.length;
|
|
96
|
+
}
|
|
97
|
+
// 일반 API 키 패턴: api_key=..., apikey=... 등
|
|
98
|
+
const generalApiKeyPattern = /\b(api[_-]?key|apikey)[=:]\s*[a-zA-Z0-9_-]{20,}/gi;
|
|
99
|
+
const generalMatches = masked.match(generalApiKeyPattern);
|
|
100
|
+
if (generalMatches) {
|
|
101
|
+
masked = masked.replace(generalApiKeyPattern, (match) => {
|
|
102
|
+
const prefix = match.match(/^[^=:]+[=:]\s*/)?.[0] || '';
|
|
103
|
+
return prefix + (usePlaceholder ? '[API_KEY]' : '');
|
|
104
|
+
});
|
|
105
|
+
if (!maskedTypes.includes('api_key')) {
|
|
106
|
+
maskedTypes.push('api_key');
|
|
107
|
+
}
|
|
108
|
+
totalMaskedCount += generalMatches.length;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// 비밀번호 마스킹
|
|
112
|
+
if (types.includes('password')) {
|
|
113
|
+
const passwordPattern = /\b(password|pwd|passwd)[=:]\s*[^\s&"']+/gi;
|
|
114
|
+
const passwordMatches = masked.match(passwordPattern);
|
|
115
|
+
if (passwordMatches) {
|
|
116
|
+
masked = masked.replace(passwordPattern, (match) => {
|
|
117
|
+
const prefix = match.match(/^[^=:]+[=:]\s*/)?.[0] || '';
|
|
118
|
+
return prefix + (usePlaceholder ? '[PASSWORD]' : '');
|
|
119
|
+
});
|
|
120
|
+
maskedTypes.push('password');
|
|
121
|
+
totalMaskedCount += passwordMatches.length;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// 토큰 마스킹 (Bearer, JWT 등)
|
|
125
|
+
if (types.includes('token')) {
|
|
126
|
+
// Bearer 토큰
|
|
127
|
+
const bearerTokenPattern = /\b(bearer|token)[=:]\s*[a-zA-Z0-9._-]{20,}/gi;
|
|
128
|
+
const bearerMatches = masked.match(bearerTokenPattern);
|
|
129
|
+
if (bearerMatches) {
|
|
130
|
+
masked = masked.replace(bearerTokenPattern, (match) => {
|
|
131
|
+
const prefix = match.match(/^[^=:]+[=:]\s*/)?.[0] || '';
|
|
132
|
+
return prefix + (usePlaceholder ? '[TOKEN]' : '');
|
|
133
|
+
});
|
|
134
|
+
maskedTypes.push('token');
|
|
135
|
+
totalMaskedCount += bearerMatches.length;
|
|
136
|
+
}
|
|
137
|
+
// JWT 토큰 (xxx.yyy.zzz 형식)
|
|
138
|
+
const jwtPattern = /\beyJ[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+/g;
|
|
139
|
+
const jwtMatches = masked.match(jwtPattern);
|
|
140
|
+
if (jwtMatches) {
|
|
141
|
+
masked = masked.replace(jwtPattern, usePlaceholder ? '[JWT_TOKEN]' : '');
|
|
142
|
+
if (!maskedTypes.includes('token')) {
|
|
143
|
+
maskedTypes.push('token');
|
|
144
|
+
}
|
|
145
|
+
totalMaskedCount += jwtMatches.length;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// 기타 credential 정보 마스킹
|
|
149
|
+
if (types.includes('credential')) {
|
|
150
|
+
// secret=..., key=..., token=... 등 (이미 마스킹된 것은 제외)
|
|
151
|
+
const credentialPattern = /\b(secret|key|token|credential)[=:]\s*[a-zA-Z0-9._-]{10,}/gi;
|
|
152
|
+
const credentialMatches = masked.match(credentialPattern);
|
|
153
|
+
if (credentialMatches) {
|
|
154
|
+
// 이미 마스킹된 패턴은 제외 (예: [API_KEY], [TOKEN] 등)
|
|
155
|
+
const filteredMatches = credentialMatches.filter(match => !match.includes('[API_KEY]') &&
|
|
156
|
+
!match.includes('[TOKEN]') &&
|
|
157
|
+
!match.includes('[PASSWORD]'));
|
|
158
|
+
if (filteredMatches.length > 0) {
|
|
159
|
+
masked = masked.replace(credentialPattern, (match) => {
|
|
160
|
+
// 이미 마스킹된 것은 건너뛰기
|
|
161
|
+
if (match.includes('[') && match.includes(']')) {
|
|
162
|
+
return match;
|
|
163
|
+
}
|
|
164
|
+
const prefix = match.match(/^[^=:]+[=:]\s*/)?.[0] || '';
|
|
165
|
+
return prefix + (usePlaceholder ? '[CREDENTIAL]' : '');
|
|
166
|
+
});
|
|
167
|
+
maskedTypes.push('credential');
|
|
168
|
+
totalMaskedCount += filteredMatches.length;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
masked,
|
|
174
|
+
maskedCount: totalMaskedCount,
|
|
175
|
+
maskedTypes: [...new Set(maskedTypes)] // 중복 제거
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* 텍스트에 PII가 포함되어 있는지 확인합니다.
|
|
180
|
+
*
|
|
181
|
+
* @param text 확인할 텍스트
|
|
182
|
+
* @returns PII 포함 여부
|
|
183
|
+
*/
|
|
184
|
+
static hasPII(text) {
|
|
185
|
+
if (!text || typeof text !== 'string') {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
const result = this.mask(text, { usePlaceholder: false });
|
|
189
|
+
return result.maskedCount > 0;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* 텍스트에서 마스킹된 PII 타입 목록을 반환합니다.
|
|
193
|
+
*
|
|
194
|
+
* @param text 확인할 텍스트
|
|
195
|
+
* @returns 마스킹된 타입 목록
|
|
196
|
+
*/
|
|
197
|
+
static detectPIITypes(text) {
|
|
198
|
+
if (!text || typeof text !== 'string') {
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
const result = this.mask(text, { usePlaceholder: false });
|
|
202
|
+
return result.maskedTypes;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=pii-masker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pii-masker.js","sourceRoot":"","sources":["../../../src/shared/utils/pii-masker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 프롬프트 템플릿 로더 유틸리티
|
|
3
|
+
* prompts/ 디렉토리에서 템플릿 파일을 읽고 플레이스홀더를 치환합니다.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 프롬프트 템플릿 로더
|
|
7
|
+
*/
|
|
8
|
+
export declare class PromptTemplateLoader {
|
|
9
|
+
/**
|
|
10
|
+
* 템플릿 파일 로드
|
|
11
|
+
*
|
|
12
|
+
* @param templateName 템플릿 파일명 (예: 'triple-extraction')
|
|
13
|
+
* @returns 템플릿 내용
|
|
14
|
+
* @throws 파일이 없거나 읽을 수 없는 경우 에러 발생
|
|
15
|
+
*/
|
|
16
|
+
static loadTemplate(templateName: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* 템플릿에 변수 치환
|
|
19
|
+
*
|
|
20
|
+
* @param template 템플릿 문자열
|
|
21
|
+
* @param variables 변수 객체 (예: { observation: '...' })
|
|
22
|
+
* @returns 치환된 템플릿
|
|
23
|
+
*/
|
|
24
|
+
static renderTemplate(template: string, variables: Record<string, string>): string;
|
|
25
|
+
/**
|
|
26
|
+
* 템플릿 파일을 로드하고 변수 치환
|
|
27
|
+
*
|
|
28
|
+
* @param templateName 템플릿 파일명
|
|
29
|
+
* @param variables 변수 객체
|
|
30
|
+
* @returns 치환된 프롬프트
|
|
31
|
+
*/
|
|
32
|
+
static loadAndRender(templateName: string, variables: Record<string, string>): string;
|
|
33
|
+
/**
|
|
34
|
+
* 캐시 초기화 (테스트용)
|
|
35
|
+
*/
|
|
36
|
+
static clearCache(): void;
|
|
37
|
+
/**
|
|
38
|
+
* 템플릿 파일 경로 확인 (테스트용)
|
|
39
|
+
*/
|
|
40
|
+
static getTemplatePath(templateName: string): string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=prompt-template-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-template-loader.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/prompt-template-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAyBjD;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAYlF;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAKrF;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAGrD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 프롬프트 템플릿 로더 유틸리티
|
|
3
|
+
* prompts/ 디렉토리에서 템플릿 파일을 읽고 플레이스홀더를 치환합니다.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from 'fs';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
/**
|
|
11
|
+
* 프로젝트 루트 디렉토리 경로
|
|
12
|
+
* src/shared/utils/에서 prompts/로 가려면 ../../prompts/
|
|
13
|
+
*/
|
|
14
|
+
const PROJECT_ROOT = join(__dirname, '../../..');
|
|
15
|
+
const PROMPTS_DIR = join(PROJECT_ROOT, 'prompts');
|
|
16
|
+
/**
|
|
17
|
+
* 템플릿 캐시 (메모리 캐시)
|
|
18
|
+
*/
|
|
19
|
+
const templateCache = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* 프롬프트 템플릿 로더
|
|
22
|
+
*/
|
|
23
|
+
export class PromptTemplateLoader {
|
|
24
|
+
/**
|
|
25
|
+
* 템플릿 파일 로드
|
|
26
|
+
*
|
|
27
|
+
* @param templateName 템플릿 파일명 (예: 'triple-extraction')
|
|
28
|
+
* @returns 템플릿 내용
|
|
29
|
+
* @throws 파일이 없거나 읽을 수 없는 경우 에러 발생
|
|
30
|
+
*/
|
|
31
|
+
static loadTemplate(templateName) {
|
|
32
|
+
// 캐시 확인
|
|
33
|
+
if (templateCache.has(templateName)) {
|
|
34
|
+
return templateCache.get(templateName);
|
|
35
|
+
}
|
|
36
|
+
// 파일 경로 구성
|
|
37
|
+
const templatePath = join(PROMPTS_DIR, `${templateName}.txt`);
|
|
38
|
+
try {
|
|
39
|
+
// 파일 읽기
|
|
40
|
+
const content = readFileSync(templatePath, 'utf-8');
|
|
41
|
+
// 캐시에 저장
|
|
42
|
+
templateCache.set(templateName, content);
|
|
43
|
+
return content;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
47
|
+
throw new Error(`프롬프트 템플릿 파일을 찾을 수 없습니다: ${templatePath}`);
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`프롬프트 템플릿 파일 읽기 실패: ${error instanceof Error ? error.message : String(error)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 템플릿에 변수 치환
|
|
54
|
+
*
|
|
55
|
+
* @param template 템플릿 문자열
|
|
56
|
+
* @param variables 변수 객체 (예: { observation: '...' })
|
|
57
|
+
* @returns 치환된 템플릿
|
|
58
|
+
*/
|
|
59
|
+
static renderTemplate(template, variables) {
|
|
60
|
+
let rendered = template;
|
|
61
|
+
// {variable} 형태의 플레이스홀더를 변수 값으로 치환
|
|
62
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
63
|
+
const placeholder = `{${key}}`;
|
|
64
|
+
rendered = rendered.replace(new RegExp(placeholder.replace(/[{}]/g, '\\$&'), 'g'), value);
|
|
65
|
+
}
|
|
66
|
+
return rendered;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 템플릿 파일을 로드하고 변수 치환
|
|
70
|
+
*
|
|
71
|
+
* @param templateName 템플릿 파일명
|
|
72
|
+
* @param variables 변수 객체
|
|
73
|
+
* @returns 치환된 프롬프트
|
|
74
|
+
*/
|
|
75
|
+
static loadAndRender(templateName, variables) {
|
|
76
|
+
const template = this.loadTemplate(templateName);
|
|
77
|
+
return this.renderTemplate(template, variables);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 캐시 초기화 (테스트용)
|
|
81
|
+
*/
|
|
82
|
+
static clearCache() {
|
|
83
|
+
templateCache.clear();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 템플릿 파일 경로 확인 (테스트용)
|
|
87
|
+
*/
|
|
88
|
+
static getTemplatePath(templateName) {
|
|
89
|
+
return join(PROMPTS_DIR, `${templateName}.txt`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=prompt-template-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-template-loader.js","sourceRoot":"","sources":["../../../src/shared/utils/prompt-template-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;GAGG;AACH,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,YAAoB;QACtC,QAAQ;QACR,IAAI,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,aAAa,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;QAC1C,CAAC;QAED,WAAW;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,YAAY,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,QAAQ;YACR,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAEpD,SAAS;YACT,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAEzC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzE,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,QAAgB,EAAE,SAAiC;QACvE,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAExB,mCAAmC;QACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,GAAG,GAAG,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,YAAoB,EAAE,SAAiC;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU;QACf,aAAa,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,YAAoB;QACzC,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,YAAY,MAAM,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triple 추출 결과 캐시 서비스
|
|
3
|
+
*
|
|
4
|
+
* PRD 7.3: 캐싱 (TTL 조정 및 설정 가능)
|
|
5
|
+
* - 동일한 content에 대한 Triple 추출 결과 캐싱
|
|
6
|
+
* - 캐시 키: content의 해시값 (content_hash)
|
|
7
|
+
* - 캐싱 TTL: 6시간 (기본값, 설정 가능)
|
|
8
|
+
* - 캐시 크기: 100개 항목 (설정 가능)
|
|
9
|
+
* - LRU 캐시 활용
|
|
10
|
+
*/
|
|
11
|
+
import type { TripleExtractionResult } from '../types/triple-extraction.js';
|
|
12
|
+
/**
|
|
13
|
+
* Triple 추출 결과 캐시 서비스
|
|
14
|
+
*/
|
|
15
|
+
export declare class TripleCacheService {
|
|
16
|
+
private cache;
|
|
17
|
+
private readonly defaultTTL;
|
|
18
|
+
private readonly maxSize;
|
|
19
|
+
/**
|
|
20
|
+
* @param maxSize 최대 캐시 크기 (기본값: 100)
|
|
21
|
+
* @param ttl TTL (밀리초, 기본값: 6시간)
|
|
22
|
+
*/
|
|
23
|
+
constructor(maxSize?: number, ttl?: number);
|
|
24
|
+
/**
|
|
25
|
+
* 캐시 키 생성 (content_hash 기반)
|
|
26
|
+
*
|
|
27
|
+
* PRD 6.12: 캐시 키 생성 로직 구현
|
|
28
|
+
* - content의 해시값을 사용하여 캐시 키 생성
|
|
29
|
+
* - SHA-256 해시 사용 (충돌 방지)
|
|
30
|
+
*
|
|
31
|
+
* @param content Episodic Memory의 content (observation 텍스트)
|
|
32
|
+
* @returns 캐시 키
|
|
33
|
+
*/
|
|
34
|
+
generateCacheKey(content: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* 캐시에서 Triple 추출 결과 가져오기
|
|
37
|
+
*
|
|
38
|
+
* PRD 6.14: TripleExtractionService에 캐싱 통합
|
|
39
|
+
* - 캐시 히트 시 LLM 호출 생략
|
|
40
|
+
*
|
|
41
|
+
* @param content Episodic Memory의 content
|
|
42
|
+
* @returns Triple 추출 결과 또는 null (캐시 미스)
|
|
43
|
+
*/
|
|
44
|
+
get(content: string): TripleExtractionResult | null;
|
|
45
|
+
/**
|
|
46
|
+
* 캐시에 Triple 추출 결과 저장
|
|
47
|
+
*
|
|
48
|
+
* PRD 6.14: TripleExtractionService에 캐싱 통합
|
|
49
|
+
* - 성공한 Triple 추출 결과만 캐시에 저장
|
|
50
|
+
*
|
|
51
|
+
* @param content Episodic Memory의 content
|
|
52
|
+
* @param result Triple 추출 결과
|
|
53
|
+
* @param ttl TTL (밀리초, 선택사항, 기본값 사용)
|
|
54
|
+
*/
|
|
55
|
+
set(content: string, result: TripleExtractionResult, ttl?: number): void;
|
|
56
|
+
/**
|
|
57
|
+
* 캐시에서 항목 삭제
|
|
58
|
+
*
|
|
59
|
+
* @param content Episodic Memory의 content
|
|
60
|
+
* @returns 삭제 성공 여부
|
|
61
|
+
*/
|
|
62
|
+
delete(content: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* 캐시 비우기
|
|
65
|
+
*/
|
|
66
|
+
clear(): void;
|
|
67
|
+
/**
|
|
68
|
+
* 캐시 통계 반환
|
|
69
|
+
*
|
|
70
|
+
* @returns 캐시 통계
|
|
71
|
+
*/
|
|
72
|
+
getStats(): import("../../infrastructure/cache/cache-service.js").CacheStats;
|
|
73
|
+
/**
|
|
74
|
+
* TTL 기반 자동 무효화
|
|
75
|
+
*
|
|
76
|
+
* PRD 6.13: 캐시 TTL 기반 자동 무효화 구현
|
|
77
|
+
* - 만료된 항목 자동 제거
|
|
78
|
+
* - CacheService의 내장 TTL 체크 활용
|
|
79
|
+
*
|
|
80
|
+
* @returns 정리된 항목 수
|
|
81
|
+
*/
|
|
82
|
+
cleanup(): number;
|
|
83
|
+
/**
|
|
84
|
+
* 캐시 크기 반환
|
|
85
|
+
*
|
|
86
|
+
* @returns 현재 캐시 크기
|
|
87
|
+
*/
|
|
88
|
+
size(): number;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=triple-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triple-cache.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/triple-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;OAGG;gBACS,OAAO,GAAE,MAAY,EAAE,GAAG,GAAE,MAA2B;IAMnE;;;;;;;;;OASG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAQzC;;;;;;;;OAQG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAKnD;;;;;;;;;OASG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IASxE;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,QAAQ;IAIR;;;;;;;;OAQG;IACH,OAAO,IAAI,MAAM;IAMjB;;;;OAIG;IACH,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triple 추출 결과 캐시 서비스
|
|
3
|
+
*
|
|
4
|
+
* PRD 7.3: 캐싱 (TTL 조정 및 설정 가능)
|
|
5
|
+
* - 동일한 content에 대한 Triple 추출 결과 캐싱
|
|
6
|
+
* - 캐시 키: content의 해시값 (content_hash)
|
|
7
|
+
* - 캐싱 TTL: 6시간 (기본값, 설정 가능)
|
|
8
|
+
* - 캐시 크기: 100개 항목 (설정 가능)
|
|
9
|
+
* - LRU 캐시 활용
|
|
10
|
+
*/
|
|
11
|
+
import { CacheService } from '../../infrastructure/cache/cache-service.js';
|
|
12
|
+
import { createHash } from 'crypto';
|
|
13
|
+
/**
|
|
14
|
+
* Triple 추출 결과 캐시 서비스
|
|
15
|
+
*/
|
|
16
|
+
export class TripleCacheService {
|
|
17
|
+
cache;
|
|
18
|
+
defaultTTL;
|
|
19
|
+
maxSize;
|
|
20
|
+
/**
|
|
21
|
+
* @param maxSize 최대 캐시 크기 (기본값: 100)
|
|
22
|
+
* @param ttl TTL (밀리초, 기본값: 6시간)
|
|
23
|
+
*/
|
|
24
|
+
constructor(maxSize = 100, ttl = 6 * 60 * 60 * 1000) {
|
|
25
|
+
this.maxSize = maxSize;
|
|
26
|
+
this.defaultTTL = ttl;
|
|
27
|
+
this.cache = new CacheService(maxSize, ttl);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 캐시 키 생성 (content_hash 기반)
|
|
31
|
+
*
|
|
32
|
+
* PRD 6.12: 캐시 키 생성 로직 구현
|
|
33
|
+
* - content의 해시값을 사용하여 캐시 키 생성
|
|
34
|
+
* - SHA-256 해시 사용 (충돌 방지)
|
|
35
|
+
*
|
|
36
|
+
* @param content Episodic Memory의 content (observation 텍스트)
|
|
37
|
+
* @returns 캐시 키
|
|
38
|
+
*/
|
|
39
|
+
generateCacheKey(content) {
|
|
40
|
+
// PRD 6.12: content_hash 기반 캐시 키 생성
|
|
41
|
+
// SHA-256 해시 사용하여 충돌 방지
|
|
42
|
+
const hash = createHash('sha256');
|
|
43
|
+
hash.update(content);
|
|
44
|
+
return `triple:${hash.digest('hex')}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 캐시에서 Triple 추출 결과 가져오기
|
|
48
|
+
*
|
|
49
|
+
* PRD 6.14: TripleExtractionService에 캐싱 통합
|
|
50
|
+
* - 캐시 히트 시 LLM 호출 생략
|
|
51
|
+
*
|
|
52
|
+
* @param content Episodic Memory의 content
|
|
53
|
+
* @returns Triple 추출 결과 또는 null (캐시 미스)
|
|
54
|
+
*/
|
|
55
|
+
get(content) {
|
|
56
|
+
const cacheKey = this.generateCacheKey(content);
|
|
57
|
+
return this.cache.get(cacheKey);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 캐시에 Triple 추출 결과 저장
|
|
61
|
+
*
|
|
62
|
+
* PRD 6.14: TripleExtractionService에 캐싱 통합
|
|
63
|
+
* - 성공한 Triple 추출 결과만 캐시에 저장
|
|
64
|
+
*
|
|
65
|
+
* @param content Episodic Memory의 content
|
|
66
|
+
* @param result Triple 추출 결과
|
|
67
|
+
* @param ttl TTL (밀리초, 선택사항, 기본값 사용)
|
|
68
|
+
*/
|
|
69
|
+
set(content, result, ttl) {
|
|
70
|
+
// PRD 7.3: 성공한 Triple 추출 결과만 캐시에 저장
|
|
71
|
+
// 실패한 결과는 캐시하지 않음 (재시도 가능성 고려)
|
|
72
|
+
if (result.triples.length > 0) {
|
|
73
|
+
const cacheKey = this.generateCacheKey(content);
|
|
74
|
+
this.cache.set(cacheKey, result, ttl);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 캐시에서 항목 삭제
|
|
79
|
+
*
|
|
80
|
+
* @param content Episodic Memory의 content
|
|
81
|
+
* @returns 삭제 성공 여부
|
|
82
|
+
*/
|
|
83
|
+
delete(content) {
|
|
84
|
+
const cacheKey = this.generateCacheKey(content);
|
|
85
|
+
return this.cache.delete(cacheKey);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 캐시 비우기
|
|
89
|
+
*/
|
|
90
|
+
clear() {
|
|
91
|
+
this.cache.clear();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 캐시 통계 반환
|
|
95
|
+
*
|
|
96
|
+
* @returns 캐시 통계
|
|
97
|
+
*/
|
|
98
|
+
getStats() {
|
|
99
|
+
return this.cache.getStats();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* TTL 기반 자동 무효화
|
|
103
|
+
*
|
|
104
|
+
* PRD 6.13: 캐시 TTL 기반 자동 무효화 구현
|
|
105
|
+
* - 만료된 항목 자동 제거
|
|
106
|
+
* - CacheService의 내장 TTL 체크 활용
|
|
107
|
+
*
|
|
108
|
+
* @returns 정리된 항목 수
|
|
109
|
+
*/
|
|
110
|
+
cleanup() {
|
|
111
|
+
// CacheService의 cleanup 메서드 호출
|
|
112
|
+
// TTL이 만료된 항목 자동 제거
|
|
113
|
+
return this.cache.cleanup();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 캐시 크기 반환
|
|
117
|
+
*
|
|
118
|
+
* @returns 현재 캐시 크기
|
|
119
|
+
*/
|
|
120
|
+
size() {
|
|
121
|
+
return this.cache.size();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=triple-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triple-cache.js","sourceRoot":"","sources":["../../../src/shared/utils/triple-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,KAAK,CAAuC;IACnC,UAAU,CAAS;IACnB,OAAO,CAAS;IAEjC;;;OAGG;IACH,YAAY,UAAkB,GAAG,EAAE,MAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QACjE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAyB,OAAO,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAC,OAAe;QAC9B,oCAAoC;QACpC,wBAAwB;QACxB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACxC,CAAC;IAED;;;;;;;;OAQG;IACH,GAAG,CAAC,OAAe;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;OASG;IACH,GAAG,CAAC,OAAe,EAAE,MAA8B,EAAE,GAAY;QAC/D,oCAAoC;QACpC,+BAA+B;QAC/B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAe;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO;QACL,+BAA+B;QAC/B,oBAAoB;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ import { SearchLocalTool } from '../domains/anchor/tools/search-local-tool.js';
|
|
|
16
16
|
import { ClearAnchorTool } from '../domains/anchor/tools/clear-anchor-tool.js';
|
|
17
17
|
import { RestoreAnchorsTool } from '../domains/anchor/tools/restore-anchors-tool.js';
|
|
18
18
|
import { MigrateEmbeddingsTool } from './migrate-embeddings-tool.js';
|
|
19
|
+
import { ConvertEpisodicToSemanticTool } from '../domains/memory/tools/convert-episodic-to-semantic-tool.js';
|
|
19
20
|
/**
|
|
20
21
|
* MCP 클라이언트용 도구 레지스트리 생성 및 등록
|
|
21
22
|
*/
|
|
@@ -36,5 +37,5 @@ export declare function getAllTools(): import("./types.js").ToolDefinition[];
|
|
|
36
37
|
* 도구 실행
|
|
37
38
|
*/
|
|
38
39
|
export declare function executeTool(name: string, params: any, context: any): Promise<import("./types.js").ToolResult>;
|
|
39
|
-
export { RememberTool, RecallTool, ForgetTool, PinTool, UnpinTool, MemoryInjectionPrompt, GetMemoryNeighborsTool, SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool, MigrateEmbeddingsTool, };
|
|
40
|
+
export { RememberTool, RecallTool, ForgetTool, PinTool, UnpinTool, MemoryInjectionPrompt, GetMemoryNeighborsTool, SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool, MigrateEmbeddingsTool, ConvertEpisodicToSemanticTool, };
|
|
40
41
|
//# 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,0CAA0C,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,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,0CAA0C,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8DAA8D,CAAC;AA6B7G;;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,EAClB,qBAAqB,EACrB,6BAA6B,GAE9B,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { SearchLocalTool } from '../domains/anchor/tools/search-local-tool.js';
|
|
|
16
16
|
import { ClearAnchorTool } from '../domains/anchor/tools/clear-anchor-tool.js';
|
|
17
17
|
import { RestoreAnchorsTool } from '../domains/anchor/tools/restore-anchors-tool.js';
|
|
18
18
|
import { MigrateEmbeddingsTool } from './migrate-embeddings-tool.js';
|
|
19
|
+
import { ConvertEpisodicToSemanticTool } from '../domains/memory/tools/convert-episodic-to-semantic-tool.js';
|
|
19
20
|
// 관계 엔진 도구들은 HTTP API로만 제공 (MCP에서 제거)
|
|
20
21
|
// 관계 추출은 remember 도구에서 자동으로 수행됨
|
|
21
22
|
/**
|
|
@@ -37,6 +38,7 @@ const coreTools = [
|
|
|
37
38
|
new ClearAnchorTool(),
|
|
38
39
|
new RestoreAnchorsTool(),
|
|
39
40
|
new MigrateEmbeddingsTool(),
|
|
41
|
+
new ConvertEpisodicToSemanticTool(), // AriGraph Pipeline 수동 변환 도구
|
|
40
42
|
// 관계 엔진 도구들은 제거됨 (HTTP API로만 제공)
|
|
41
43
|
// - extract_relations: remember에서 자동 실행
|
|
42
44
|
// - get_relations, add_relation, remove_relation, visualize_relations: HTTP API로 제공
|
|
@@ -74,7 +76,7 @@ export async function executeTool(name, params, context) {
|
|
|
74
76
|
// 핵심 도구들만 export
|
|
75
77
|
export { RememberTool, RecallTool, ForgetTool, PinTool, UnpinTool, MemoryInjectionPrompt, GetMemoryNeighborsTool,
|
|
76
78
|
// 앵커 시스템 도구들
|
|
77
|
-
SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool, MigrateEmbeddingsTool,
|
|
79
|
+
SetAnchorTool, GetAnchorTool, SearchLocalTool, ClearAnchorTool, RestoreAnchorsTool, MigrateEmbeddingsTool, ConvertEpisodicToSemanticTool,
|
|
78
80
|
// 관계 엔진 도구들은 HTTP API로만 제공되므로 export하지 않음
|
|
79
81
|
};
|
|
80
82
|
//# 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,0CAA0C,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,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,IAAI,qBAAqB,EAAE;IAC3B,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,EAClB,qBAAqB;
|
|
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,0CAA0C,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8DAA8D,CAAC;AAC7G,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,IAAI,qBAAqB,EAAE;IAC3B,IAAI,6BAA6B,EAAE,EAAE,6BAA6B;IAClE,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,EAClB,qBAAqB,EACrB,6BAA6B;AAC7B,0CAA0C;EAC3C,CAAC"}
|
package/dist/tools/types.d.ts
CHANGED
|
@@ -91,5 +91,6 @@ export declare const CommonSchemas: {
|
|
|
91
91
|
SkillName: z.ZodOptional<z.ZodString>;
|
|
92
92
|
TriggerConditions: z.ZodOptional<z.ZodString>;
|
|
93
93
|
UpdateMode: z.ZodOptional<z.ZodEnum<["replace", "incremental", "versioned"]>>;
|
|
94
|
+
EnableTripleExtraction: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
94
95
|
};
|
|
95
96
|
//# sourceMappingURL=types.d.ts.map
|