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.
Files changed (81) hide show
  1. package/dist/domains/memory/tools/convert-episodic-to-semantic-tool.d.ts +18 -0
  2. package/dist/domains/memory/tools/convert-episodic-to-semantic-tool.d.ts.map +1 -0
  3. package/dist/domains/memory/tools/convert-episodic-to-semantic-tool.js +346 -0
  4. package/dist/domains/memory/tools/convert-episodic-to-semantic-tool.js.map +1 -0
  5. package/dist/domains/memory/tools/recall-tool.d.ts +177 -0
  6. package/dist/domains/memory/tools/recall-tool.d.ts.map +1 -1
  7. package/dist/domains/memory/tools/recall-tool.js +329 -3
  8. package/dist/domains/memory/tools/recall-tool.js.map +1 -1
  9. package/dist/domains/memory/tools/remember-tool.d.ts.map +1 -1
  10. package/dist/domains/memory/tools/remember-tool.js +182 -1
  11. package/dist/domains/memory/tools/remember-tool.js.map +1 -1
  12. package/dist/infrastructure/database/database/migration/migrations/005-relation-engine-schema.sql +7 -7
  13. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.d.ts +65 -0
  14. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.d.ts.map +1 -0
  15. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.js +250 -0
  16. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.js.map +1 -0
  17. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.sql +86 -0
  18. package/dist/infrastructure/logging/triple-extraction-logger.d.ts +92 -0
  19. package/dist/infrastructure/logging/triple-extraction-logger.d.ts.map +1 -0
  20. package/dist/infrastructure/logging/triple-extraction-logger.js +194 -0
  21. package/dist/infrastructure/logging/triple-extraction-logger.js.map +1 -0
  22. package/dist/infrastructure/scheduler/batch-scheduler.d.ts +57 -0
  23. package/dist/infrastructure/scheduler/batch-scheduler.d.ts.map +1 -1
  24. package/dist/infrastructure/scheduler/batch-scheduler.js +220 -0
  25. package/dist/infrastructure/scheduler/batch-scheduler.js.map +1 -1
  26. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.d.ts +194 -0
  27. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.d.ts.map +1 -0
  28. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.js +639 -0
  29. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.js.map +1 -0
  30. package/dist/services/semantic-memory/semantic-memory-statistics.d.ts +64 -0
  31. package/dist/services/semantic-memory/semantic-memory-statistics.d.ts.map +1 -0
  32. package/dist/services/semantic-memory/semantic-memory-statistics.js +113 -0
  33. package/dist/services/semantic-memory/semantic-memory-statistics.js.map +1 -0
  34. package/dist/services/semantic-memory/semantic-memory-update-service.d.ts +257 -0
  35. package/dist/services/semantic-memory/semantic-memory-update-service.d.ts.map +1 -0
  36. package/dist/services/semantic-memory/semantic-memory-update-service.js +696 -0
  37. package/dist/services/semantic-memory/semantic-memory-update-service.js.map +1 -0
  38. package/dist/services/triple-extraction/entity-linker.d.ts +55 -0
  39. package/dist/services/triple-extraction/entity-linker.d.ts.map +1 -0
  40. package/dist/services/triple-extraction/entity-linker.js +154 -0
  41. package/dist/services/triple-extraction/entity-linker.js.map +1 -0
  42. package/dist/services/triple-extraction/predicate-canonicalizer.d.ts +63 -0
  43. package/dist/services/triple-extraction/predicate-canonicalizer.d.ts.map +1 -0
  44. package/dist/services/triple-extraction/predicate-canonicalizer.js +166 -0
  45. package/dist/services/triple-extraction/predicate-canonicalizer.js.map +1 -0
  46. package/dist/services/triple-extraction/triple-extraction-service.d.ts +181 -0
  47. package/dist/services/triple-extraction/triple-extraction-service.d.ts.map +1 -0
  48. package/dist/services/triple-extraction/triple-extraction-service.js +907 -0
  49. package/dist/services/triple-extraction/triple-extraction-service.js.map +1 -0
  50. package/dist/services/triple-extraction/triple-extraction-statistics.d.ts +74 -0
  51. package/dist/services/triple-extraction/triple-extraction-statistics.d.ts.map +1 -0
  52. package/dist/services/triple-extraction/triple-extraction-statistics.js +146 -0
  53. package/dist/services/triple-extraction/triple-extraction-statistics.js.map +1 -0
  54. package/dist/shared/types/index.d.ts +1 -0
  55. package/dist/shared/types/index.d.ts.map +1 -1
  56. package/dist/shared/types/index.js.map +1 -1
  57. package/dist/shared/types/triple-extraction.d.ts +99 -0
  58. package/dist/shared/types/triple-extraction.d.ts.map +1 -0
  59. package/dist/shared/types/triple-extraction.js +6 -0
  60. package/dist/shared/types/triple-extraction.js.map +1 -0
  61. package/dist/shared/utils/pii-masker.d.ts +67 -0
  62. package/dist/shared/utils/pii-masker.d.ts.map +1 -0
  63. package/dist/shared/utils/pii-masker.js +205 -0
  64. package/dist/shared/utils/pii-masker.js.map +1 -0
  65. package/dist/shared/utils/prompt-template-loader.d.ts +42 -0
  66. package/dist/shared/utils/prompt-template-loader.d.ts.map +1 -0
  67. package/dist/shared/utils/prompt-template-loader.js +92 -0
  68. package/dist/shared/utils/prompt-template-loader.js.map +1 -0
  69. package/dist/shared/utils/triple-cache.d.ts +90 -0
  70. package/dist/shared/utils/triple-cache.d.ts.map +1 -0
  71. package/dist/shared/utils/triple-cache.js +124 -0
  72. package/dist/shared/utils/triple-cache.js.map +1 -0
  73. package/dist/tools/index.d.ts +2 -1
  74. package/dist/tools/index.d.ts.map +1 -1
  75. package/dist/tools/index.js +3 -1
  76. package/dist/tools/index.js.map +1 -1
  77. package/dist/tools/types.d.ts +1 -0
  78. package/dist/tools/types.d.ts.map +1 -1
  79. package/dist/tools/types.js +2 -0
  80. package/dist/tools/types.js.map +1 -1
  81. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Convert Episodic to Semantic Tool - Episodic Memory를 Semantic Memory로 변환하는 도구
3
+ *
4
+ * AriGraph Pipeline의 수동 변환 기능을 제공합니다.
5
+ * 기존 Episodic Memory에 대해 Triple 추출 및 Semantic Memory 생성을 수행합니다.
6
+ */
7
+ import { BaseTool } from '../../../tools/base-tool.js';
8
+ import type { ToolContext, ToolResult } from '../../../tools/types.js';
9
+ export declare class ConvertEpisodicToSemanticTool extends BaseTool {
10
+ constructor();
11
+ /**
12
+ * Given: memory_id 또는 필터 조건
13
+ * When: convert_episodic_to_semantic 호출
14
+ * Then: Triple 추출 및 Semantic Memory 생성 결과 반환
15
+ */
16
+ handle(params: any, context: ToolContext): Promise<ToolResult>;
17
+ }
18
+ //# sourceMappingURL=convert-episodic-to-semantic-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-episodic-to-semantic-tool.d.ts","sourceRoot":"","sources":["../../../../src/domains/memory/tools/convert-episodic-to-semantic-tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAkBvE,qBAAa,6BAA8B,SAAQ,QAAQ;;IAmCzD;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAuVrE"}
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Convert Episodic to Semantic Tool - Episodic Memory를 Semantic Memory로 변환하는 도구
3
+ *
4
+ * AriGraph Pipeline의 수동 변환 기능을 제공합니다.
5
+ * 기존 Episodic Memory에 대해 Triple 추출 및 Semantic Memory 생성을 수행합니다.
6
+ */
7
+ import { z } from 'zod';
8
+ import { BaseTool } from '../../../tools/base-tool.js';
9
+ import { DatabaseUtils } from '../../../shared/utils/database.js';
10
+ import { TripleExtractionService } from '../../../services/triple-extraction/triple-extraction-service.js';
11
+ import { SemanticMemoryUpdateService } from '../../../services/semantic-memory/semantic-memory-update-service.js';
12
+ import { logger } from '../../../shared/utils/logger.js';
13
+ import { UnifiedEmbeddingService } from '../../../domains/embedding/services/unified-embedding-service.js';
14
+ /**
15
+ * Convert Episodic to Semantic 스키마
16
+ */
17
+ const ConvertEpisodicToSemanticSchema = z.object({
18
+ memory_id: z.string().optional(), // 단일 Episodic Memory ID (선택)
19
+ // 필터 조건 (memory_id가 없을 때 사용)
20
+ skip_converted: z.boolean().default(true).optional(), // 이미 변환된 항목 건너뛰기 (기본값: true)
21
+ retry_failed: z.boolean().default(false).optional(), // 실패한 항목 재시도 (기본값: false)
22
+ limit: z.number().min(1).max(100).default(10).optional(), // 배치 처리 시 최대 개수 (기본값: 10)
23
+ });
24
+ export class ConvertEpisodicToSemanticTool extends BaseTool {
25
+ constructor() {
26
+ super('convert_episodic_to_semantic', '기존 Episodic Memory를 Semantic Memory로 변환합니다. Triple 추출 및 Semantic Memory 생성을 수행합니다.', {
27
+ type: 'object',
28
+ properties: {
29
+ memory_id: {
30
+ type: 'string',
31
+ description: '변환할 Episodic Memory ID (단일 변환 시 사용, 선택)'
32
+ },
33
+ skip_converted: {
34
+ type: 'boolean',
35
+ description: '이미 변환된 항목 건너뛰기 여부 (기본값: true)',
36
+ default: true
37
+ },
38
+ retry_failed: {
39
+ type: 'boolean',
40
+ description: '실패한 항목 재시도 여부 (기본값: false)',
41
+ default: false
42
+ },
43
+ limit: {
44
+ type: 'number',
45
+ minimum: 1,
46
+ maximum: 100,
47
+ description: '배치 처리 시 최대 개수 (기본값: 10)',
48
+ default: 10
49
+ }
50
+ },
51
+ required: [] // memory_id 또는 필터 조건 중 하나는 필수
52
+ });
53
+ }
54
+ /**
55
+ * Given: memory_id 또는 필터 조건
56
+ * When: convert_episodic_to_semantic 호출
57
+ * Then: Triple 추출 및 Semantic Memory 생성 결과 반환
58
+ */
59
+ async handle(params, context) {
60
+ try {
61
+ const { memory_id, skip_converted = true, retry_failed = false, limit = 10 } = ConvertEpisodicToSemanticSchema.parse(params);
62
+ const db = context.db;
63
+ if (!db) {
64
+ return this.createErrorResult('DATABASE_NOT_AVAILABLE', '데이터베이스가 사용 가능하지 않습니다');
65
+ }
66
+ // PRD 5.9: 수동 변환 로직 구현
67
+ // 선택된 Episodic Memory에 대해 Triple 추출 및 Semantic Memory 생성
68
+ let episodicMemories = [];
69
+ if (memory_id) {
70
+ // 단일 Episodic Memory 변환
71
+ // skip_converted 옵션 확인
72
+ let memory;
73
+ // 먼저 메모리 존재 여부 확인
74
+ const memoryExists = DatabaseUtils.get(db, `
75
+ SELECT id, triple_extracted, triple_extracted_status FROM memory_item
76
+ WHERE id = ? AND type = 'episodic'
77
+ `, [memory_id]);
78
+ if (!memoryExists) {
79
+ // 메모리가 존재하지 않는 경우
80
+ return this.createErrorResult('MEMORY_NOT_FOUND', `Episodic Memory를 찾을 수 없습니다: ${memory_id}`);
81
+ }
82
+ // skip_converted=true이고 이미 변환된 경우 skipped로 처리
83
+ if (skip_converted && memoryExists.triple_extracted === 1 && memoryExists.triple_extracted_status === 'success') {
84
+ return this.createSuccessResult({
85
+ total: 1,
86
+ success: 0,
87
+ failed: 0,
88
+ skipped: 1,
89
+ semantic_memory_ids: []
90
+ });
91
+ }
92
+ // skip_converted=true인 경우: 이미 변환된 항목은 조회하지 않음
93
+ if (skip_converted) {
94
+ memory = DatabaseUtils.get(db, `
95
+ SELECT id, content, importance, triple_extracted, triple_extracted_status FROM memory_item
96
+ WHERE id = ? AND type = 'episodic'
97
+ AND (triple_extracted IS NULL OR triple_extracted = 0)
98
+ `, [memory_id]);
99
+ }
100
+ else {
101
+ memory = DatabaseUtils.get(db, `
102
+ SELECT id, content, importance, triple_extracted, triple_extracted_status FROM memory_item
103
+ WHERE id = ? AND type = 'episodic'
104
+ `, [memory_id]);
105
+ }
106
+ if (!memory) {
107
+ // skip_converted=true이고 이미 변환된 경우 (위에서 처리했지만 이중 검증)
108
+ if (skip_converted) {
109
+ return this.createSuccessResult({
110
+ total: 1,
111
+ success: 0,
112
+ failed: 0,
113
+ skipped: 1,
114
+ semantic_memory_ids: []
115
+ });
116
+ }
117
+ // 이 경우는 발생하지 않아야 하지만 안전을 위해
118
+ return this.createErrorResult('MEMORY_NOT_FOUND', `Episodic Memory를 찾을 수 없습니다: ${memory_id}`);
119
+ }
120
+ episodicMemories = [{ id: memory.id, content: memory.content, importance: memory.importance }];
121
+ }
122
+ else {
123
+ // PRD 5.10: 배치 처리 지원 - 필터 조건에 따라 Episodic Memory 조회
124
+ // PRD 5.11: 변환 상태 추적 로직 (이미 변환된 항목 건너뛰기, 실패한 항목 재시도 옵션)
125
+ // WHERE 조건 구성
126
+ const conditions = ["type = 'episodic'"];
127
+ const params = [];
128
+ // skip_converted=true인 경우: 이미 변환된 항목 건너뛰기
129
+ // triple_extracted IS NULL (미처리) 또는 triple_extracted = 0 (실패)
130
+ if (skip_converted) {
131
+ conditions.push("(triple_extracted IS NULL OR triple_extracted = 0)");
132
+ }
133
+ // retry_failed 옵션에 따른 조건 추가
134
+ if (retry_failed) {
135
+ // 실패한 항목 재시도: triple_extracted_status='failed' 포함
136
+ // skip_converted와 함께 사용 시 실패한 항목만 재시도
137
+ if (skip_converted) {
138
+ conditions.push("triple_extracted_status = 'failed'");
139
+ }
140
+ }
141
+ else {
142
+ // retry_failed=false인 경우: 실패한 항목 제외
143
+ conditions.push("(triple_extracted_status IS NULL OR triple_extracted_status != 'failed')");
144
+ }
145
+ // 포기된 항목은 제외 (수동 재시도 필요)
146
+ conditions.push("(triple_extracted_status IS NULL OR triple_extracted_status != 'abandoned')");
147
+ // 쿼리 실행
148
+ const query = `
149
+ SELECT id, content, importance FROM memory_item
150
+ WHERE ${conditions.join(' AND ')}
151
+ ORDER BY created_at ASC
152
+ LIMIT ?
153
+ `;
154
+ params.push(limit);
155
+ episodicMemories = DatabaseUtils.all(db, query, params);
156
+ if (episodicMemories.length === 0) {
157
+ return this.createSuccessResult({
158
+ total: 0,
159
+ success: 0,
160
+ failed: 0,
161
+ skipped: 0,
162
+ semantic_memory_ids: [],
163
+ message: '변환할 Episodic Memory가 없습니다.'
164
+ });
165
+ }
166
+ }
167
+ // 변환 결과 추적
168
+ const results = {
169
+ total: episodicMemories.length,
170
+ success: 0,
171
+ failed: 0,
172
+ skipped: 0,
173
+ semantic_memory_ids: []
174
+ };
175
+ // 각 Episodic Memory에 대해 Triple 추출 및 Semantic Memory 생성
176
+ for (const episodicMemory of episodicMemories) {
177
+ try {
178
+ // PRD 5.11: 변환 상태 추적 로직
179
+ // 이미 변환된 항목 건너뛰기 (skip_converted=true인 경우 쿼리에서 이미 필터링됨)
180
+ // 하지만 안전을 위해 한 번 더 확인
181
+ if (skip_converted) {
182
+ const existing = DatabaseUtils.get(db, `
183
+ SELECT triple_extracted, triple_extracted_status FROM memory_item WHERE id = ?
184
+ `, [episodicMemory.id]);
185
+ if (existing?.triple_extracted === true && existing?.triple_extracted_status === 'success') {
186
+ results.skipped++;
187
+ logger.info('이미 변환된 Episodic Memory 건너뛰기', {
188
+ episodic_memory_id: episodicMemory.id
189
+ });
190
+ continue;
191
+ }
192
+ }
193
+ // Triple 추출 서비스 초기화
194
+ const tripleExtractionService = new TripleExtractionService();
195
+ // Triple 추출
196
+ const extractionResult = await tripleExtractionService.extractTriples(episodicMemory.content, {}, episodicMemory.id);
197
+ // Triple이 추출된 경우 Semantic Memory 생성/업데이트
198
+ if (extractionResult.triples.length > 0) {
199
+ const embeddingService = context.services.embeddingService || new UnifiedEmbeddingService();
200
+ const semanticMemoryUpdateService = new SemanticMemoryUpdateService(db, embeddingService, context.services.relationGraph);
201
+ const updateResult = await semanticMemoryUpdateService.updateSemanticMemory(extractionResult, {
202
+ episodicMemoryId: episodicMemory.id,
203
+ episodicImportance: episodicMemory.importance || 0.5
204
+ });
205
+ // PRD 5.5, 5.5a, 5.6: Triple 추출 성공 시 상태 업데이트
206
+ const confidenceValues = [];
207
+ try {
208
+ const relations = DatabaseUtils.all(db, `
209
+ SELECT confidence FROM memory_relation
210
+ WHERE source_id = ? AND relation_type = 'extracted_from'
211
+ `, [episodicMemory.id]);
212
+ for (const rel of relations) {
213
+ if (rel.confidence !== null && rel.confidence !== undefined) {
214
+ confidenceValues.push(rel.confidence);
215
+ }
216
+ }
217
+ }
218
+ catch (err) {
219
+ logger.warn('Confidence 수집 실패', {
220
+ memory_id: episodicMemory.id,
221
+ error: err instanceof Error ? err.message : String(err)
222
+ });
223
+ }
224
+ const confidenceAvg = confidenceValues.length > 0
225
+ ? confidenceValues.reduce((sum, c) => sum + c, 0) / confidenceValues.length
226
+ : null;
227
+ const metadata = {
228
+ triple_count: extractionResult.triples.length,
229
+ ...(confidenceAvg !== null && { confidence_avg: confidenceAvg }),
230
+ extracted_at: new Date().toISOString()
231
+ };
232
+ await DatabaseUtils.run(db, `
233
+ UPDATE memory_item SET
234
+ triple_extracted = ?,
235
+ triple_extracted_status = ?,
236
+ triple_extraction_metadata = ?
237
+ WHERE id = ?
238
+ `, [
239
+ 1, // SQLite에서는 boolean을 INTEGER로 변환
240
+ 'success',
241
+ JSON.stringify(metadata),
242
+ episodicMemory.id
243
+ ]);
244
+ results.success++;
245
+ results.semantic_memory_ids.push(...updateResult.semanticMemoryIds);
246
+ logger.info('Episodic Memory 변환 성공', {
247
+ episodic_memory_id: episodicMemory.id,
248
+ triple_count: extractionResult.triples.length,
249
+ semantic_memory_count: updateResult.semanticMemoryIds.length,
250
+ confidence_avg: confidenceAvg
251
+ });
252
+ }
253
+ else {
254
+ // Triple 추출 실패 시 상태 업데이트
255
+ const failureReason = extractionResult.extractionInfo.failureReason || 'no_triple';
256
+ let retryCount = 0;
257
+ try {
258
+ const existing = DatabaseUtils.get(db, `
259
+ SELECT triple_extraction_metadata FROM memory_item WHERE id = ?
260
+ `, [episodicMemory.id]);
261
+ if (existing?.triple_extraction_metadata) {
262
+ const existingMeta = JSON.parse(existing.triple_extraction_metadata);
263
+ retryCount = (existingMeta.retry_count || 0) + 1;
264
+ }
265
+ else {
266
+ retryCount = 1;
267
+ }
268
+ }
269
+ catch (err) {
270
+ retryCount = 1;
271
+ }
272
+ const metadata = {
273
+ failureReason,
274
+ retry_count: retryCount,
275
+ last_attempt: new Date().toISOString()
276
+ };
277
+ await DatabaseUtils.run(db, `
278
+ UPDATE memory_item SET
279
+ triple_extracted = ?,
280
+ triple_extracted_status = ?,
281
+ triple_extraction_metadata = ?
282
+ WHERE id = ?
283
+ `, [
284
+ 0, // SQLite에서는 boolean을 INTEGER로 변환
285
+ 'failed',
286
+ JSON.stringify(metadata),
287
+ episodicMemory.id
288
+ ]);
289
+ results.failed++;
290
+ logger.warn('Episodic Memory 변환 실패', {
291
+ episodic_memory_id: episodicMemory.id,
292
+ failure_reason: failureReason,
293
+ retry_count: retryCount
294
+ });
295
+ }
296
+ }
297
+ catch (error) {
298
+ results.failed++;
299
+ // 에러 발생 시에도 상태 업데이트 (PRD 5.5, 5.5a, 5.6)
300
+ try {
301
+ await DatabaseUtils.run(db, `
302
+ UPDATE memory_item SET
303
+ triple_extracted = ?,
304
+ triple_extracted_status = ?,
305
+ triple_extraction_metadata = ?
306
+ WHERE id = ?
307
+ `, [
308
+ 0, // SQLite에서는 boolean을 INTEGER로 변환
309
+ 'failed',
310
+ JSON.stringify({
311
+ failureReason: 'conversion_error',
312
+ error: error instanceof Error ? error.message : String(error),
313
+ last_attempt: new Date().toISOString()
314
+ }),
315
+ episodicMemory.id
316
+ ]);
317
+ }
318
+ catch (updateError) {
319
+ logger.warn('상태 업데이트 실패', {
320
+ episodic_memory_id: episodicMemory.id,
321
+ error: updateError instanceof Error ? updateError.message : String(updateError)
322
+ });
323
+ }
324
+ logger.error('Episodic Memory 변환 중 에러 발생', {
325
+ episodic_memory_id: episodicMemory.id,
326
+ error: error instanceof Error ? error.message : String(error)
327
+ });
328
+ }
329
+ }
330
+ return this.createSuccessResult({
331
+ total: results.total,
332
+ success: results.success,
333
+ failed: results.failed,
334
+ skipped: results.skipped,
335
+ semantic_memory_ids: results.semantic_memory_ids
336
+ });
337
+ }
338
+ catch (error) {
339
+ logger.error('ConvertEpisodicToSemanticTool: 에러 발생', {
340
+ error: error instanceof Error ? error.message : String(error)
341
+ });
342
+ return this.createErrorResult('CONVERSION_ERROR', error instanceof Error ? error.message : String(error));
343
+ }
344
+ }
345
+ }
346
+ //# sourceMappingURL=convert-episodic-to-semantic-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-episodic-to-semantic-tool.js","sourceRoot":"","sources":["../../../../src/domains/memory/tools/convert-episodic-to-semantic-tool.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,161 @@
4
4
  */
5
5
  import { BaseTool } from '../../../tools/base-tool.js';
6
6
  import type { ToolContext, ToolResult } from '../../../tools/types.js';
7
+ /**
8
+ * 앵커 설정 메타데이터 타입
9
+ */
10
+ export interface AnchorSetMetadata {
11
+ memory_id: string;
12
+ slot: 'A';
13
+ agent_id: string;
14
+ }
15
+ /**
16
+ * 이웃 기억 항목 타입
17
+ */
18
+ export interface NeighborMemoryItem {
19
+ id: string;
20
+ content: string;
21
+ similarity: number;
22
+ [key: string]: any;
23
+ }
24
+ /**
25
+ * Recall 응답 항목 타입 (neighbors 필드 포함)
26
+ *
27
+ * @property neighbors - 이웃 기억 배열 (optional)
28
+ * - include_neighbors=true이고 상위 neighbors_limit개 결과에만 포함됨
29
+ * - neighbors_limit보다 많은 결과는 neighbors 필드가 없음 (undefined)
30
+ * - 이웃 기억 조회 실패 시 빈 배열 []로 설정됨
31
+ */
32
+ export interface RecallResultItem {
33
+ memory_id: string;
34
+ id?: string;
35
+ content: string;
36
+ type: string;
37
+ importance: number;
38
+ created_at: string;
39
+ final_score: number;
40
+ neighbors?: NeighborMemoryItem[];
41
+ [key: string]: any;
42
+ }
43
+ /**
44
+ * Recall 응답 메타데이터 타입
45
+ *
46
+ * @property anchor_set - 앵커 설정 정보 (auto_set_anchor=true일 때만 설정)
47
+ * - 성공 시: {memory_id, slot: "A", agent_id} 객체
48
+ * - 실패/건너뜀/비활성화 시: null
49
+ * @property anchor_set_error - 앵커 설정 실패 여부 (optional)
50
+ * - anchor_set=null이고 anchor_set_error=true: 앵커 설정 실패
51
+ * @property anchor_set_skipped - 앵커 설정 건너뜀 여부 (optional)
52
+ * - anchor_set=null이고 anchor_set_skipped=true: 앵커 설정 건너뜀 (pinned 앵커 보호 등)
53
+ * @property anchor_set_skipped_reason - 앵커 설정 건너뜀 사유 (optional)
54
+ * - "pinned_anchor_protected": 슬롯 A에 pinned 앵커가 있어서 보호됨
55
+ */
56
+ export interface RecallResponseMetadata {
57
+ anchor_set: AnchorSetMetadata | null;
58
+ anchor_set_error?: boolean;
59
+ anchor_set_skipped?: boolean;
60
+ anchor_set_skipped_reason?: string;
61
+ [key: string]: any;
62
+ }
63
+ /**
64
+ * Recall 응답 타입
65
+ *
66
+ * @example 앵커 설정 성공 + 이웃 기억 포함
67
+ * ```json
68
+ * {
69
+ * "items": [
70
+ * {
71
+ * "memory_id": "mem_12345",
72
+ * "content": "검색 결과 내용",
73
+ * "type": "episodic",
74
+ * "importance": 0.8,
75
+ * "created_at": "2024-01-01T00:00:00Z",
76
+ * "final_score": 0.95,
77
+ * "neighbors": [
78
+ * {
79
+ * "id": "mem_67890",
80
+ * "content": "관련 기억 내용",
81
+ * "similarity": 0.85
82
+ * }
83
+ * ]
84
+ * },
85
+ * {
86
+ * "memory_id": "mem_11111",
87
+ * "content": "두 번째 결과",
88
+ * "neighbors": []
89
+ * },
90
+ * {
91
+ * "memory_id": "mem_22222",
92
+ * "content": "세 번째 결과 (neighbors_limit 초과로 neighbors 필드 없음)"
93
+ * }
94
+ * ],
95
+ * "total_count": 3,
96
+ * "query_time": 150,
97
+ * "search_type": "hybrid",
98
+ * "metadata": {
99
+ * "anchor_set": {
100
+ * "memory_id": "mem_12345",
101
+ * "slot": "A",
102
+ * "agent_id": "default"
103
+ * }
104
+ * }
105
+ * }
106
+ * ```
107
+ *
108
+ * @example 앵커 설정 실패
109
+ * ```json
110
+ * {
111
+ * "items": [...],
112
+ * "metadata": {
113
+ * "anchor_set": null,
114
+ * "anchor_set_error": true
115
+ * }
116
+ * }
117
+ * ```
118
+ *
119
+ * @example 앵커 설정 건너뜀 (pinned 앵커 보호)
120
+ * ```json
121
+ * {
122
+ * "items": [...],
123
+ * "metadata": {
124
+ * "anchor_set": null,
125
+ * "anchor_set_skipped": true,
126
+ * "anchor_set_skipped_reason": "pinned_anchor_protected"
127
+ * }
128
+ * }
129
+ * ```
130
+ *
131
+ * @example 앵커 설정 비활성화
132
+ * ```json
133
+ * {
134
+ * "items": [...],
135
+ * "metadata": {
136
+ * "anchor_set": null
137
+ * }
138
+ * }
139
+ * ```
140
+ *
141
+ * @example 이웃 기억 미포함 (include_neighbors=false)
142
+ * ```json
143
+ * {
144
+ * "items": [
145
+ * {
146
+ * "memory_id": "mem_12345",
147
+ * "content": "검색 결과",
148
+ * "neighbors": undefined // neighbors 필드 없음
149
+ * }
150
+ * ]
151
+ * }
152
+ * ```
153
+ */
154
+ export interface RecallResponse {
155
+ items: RecallResultItem[];
156
+ total_count: number;
157
+ query_time: number;
158
+ search_type: string;
159
+ metadata?: RecallResponseMetadata;
160
+ [key: string]: any;
161
+ }
7
162
  export declare class RecallTool extends BaseTool {
8
163
  constructor();
9
164
  handle(params: any, context: ToolContext): Promise<ToolResult>;
@@ -28,6 +183,28 @@ export declare class RecallTool extends BaseTool {
28
183
  * 적용된 필터 정보 반환
29
184
  */
30
185
  private getAppliedFilters;
186
+ /**
187
+ * 자동 앵커 설정 처리
188
+ * 가장 관련성 높은 기억(첫 번째 결과)을 슬롯 A에 앵커로 설정
189
+ *
190
+ * @param searchItems - 검색 결과 항목 배열
191
+ * @param agentId - 에이전트 ID
192
+ * @param context - 도구 컨텍스트
193
+ * @returns 앵커 설정 결과 (성공/실패/건너뜀 상태 포함)
194
+ */
195
+ private handleAutoSetAnchor;
196
+ /**
197
+ * 자동 이웃 기억 포함 처리
198
+ * 검색 결과의 상위 항목에 대해 이웃 기억을 자동으로 포함
199
+ *
200
+ * @param searchItems - 검색 결과 항목 배열
201
+ * @param neighborsLimit - 이웃 기억을 포함할 상위 결과의 개수
202
+ * @param neighborsPerItem - 각 검색 결과 항목당 조회할 이웃 기억의 최대 개수
203
+ * @param neighborsSimilarityThreshold - 이웃 기억 조회 시 유사도 임계값
204
+ * @param context - 도구 컨텍스트
205
+ * @returns 각 검색 결과 항목에 대한 이웃 기억 배열 (순서 보존)
206
+ */
207
+ private handleIncludeNeighbors;
31
208
  /**
32
209
  * 검색 쿼리 검증
33
210
  */
@@ -1 +1 @@
1
- {"version":3,"file":"recall-tool.d.ts","sourceRoot":"","sources":["../../../../src/domains/memory/tools/recall-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAuEvE,qBAAa,UAAW,SAAQ,QAAQ;;IAkIhC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAgYpE;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,yBAAyB;IA6EjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuF5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;;;;;;;OASG;YACW,gCAAgC;CAuH/C"}
1
+ {"version":3,"file":"recall-tool.d.ts","sourceRoot":"","sources":["../../../../src/domains/memory/tools/recall-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAkBvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAiED,qBAAa,UAAW,SAAQ,QAAQ;;IAiKhC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAsbpE;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,yBAAyB;IA6EjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuF5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;;;;;;;OAQG;YACW,mBAAmB;IA4JjC;;;;;;;;;;OAUG;YACW,sBAAsB;IAmIpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;;;;;;;OASG;YACW,gCAAgC;CAuH/C"}