memento-mcp-server 1.14.0 → 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/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,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triple 추출 전용 로거
|
|
3
|
+
*
|
|
4
|
+
* rawLLMOutput을 로그 파일에 저장합니다.
|
|
5
|
+
*
|
|
6
|
+
* 보안 정책:
|
|
7
|
+
* - PII/비밀 정보 마스킹 적용
|
|
8
|
+
* - logs/triple-extraction/ 디렉토리에 저장
|
|
9
|
+
* - 날짜별 파일로 저장 (예: 2025-01-15.log)
|
|
10
|
+
* - 30일 로테이션 (2.16에서 구현)
|
|
11
|
+
* - 성공 케이스 10% 샘플링, 실패 케이스 100% 저장 (2.15에서 구현)
|
|
12
|
+
*/
|
|
13
|
+
import type { TripleExtractionResult } from '../../shared/types/triple-extraction.js';
|
|
14
|
+
/**
|
|
15
|
+
* Triple 추출 로그 엔트리
|
|
16
|
+
*/
|
|
17
|
+
export interface TripleExtractionLogEntry {
|
|
18
|
+
timestamp: string;
|
|
19
|
+
memory_id?: string;
|
|
20
|
+
extraction_result: 'success' | 'failed';
|
|
21
|
+
triples_count: number;
|
|
22
|
+
failure_reason?: string;
|
|
23
|
+
steps?: {
|
|
24
|
+
canonicalization: boolean;
|
|
25
|
+
entityLinking: boolean;
|
|
26
|
+
};
|
|
27
|
+
raw_llm_output?: string;
|
|
28
|
+
observation_preview?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Triple 추출 로거 설정
|
|
32
|
+
*/
|
|
33
|
+
export interface TripleExtractionLoggerConfig {
|
|
34
|
+
/**
|
|
35
|
+
* 로그 디렉토리 (기본: process.cwd()/logs/triple-extraction)
|
|
36
|
+
*/
|
|
37
|
+
logDir?: string;
|
|
38
|
+
/**
|
|
39
|
+
* 로깅 활성화 여부 (기본: true)
|
|
40
|
+
*/
|
|
41
|
+
enabled?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* PII 마스킹 활성화 여부 (기본: true)
|
|
44
|
+
*/
|
|
45
|
+
enablePIIMasking?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Triple 추출 전용 로거
|
|
49
|
+
*/
|
|
50
|
+
export declare class TripleExtractionLogger {
|
|
51
|
+
private config;
|
|
52
|
+
private logDir;
|
|
53
|
+
constructor(config?: TripleExtractionLoggerConfig);
|
|
54
|
+
/**
|
|
55
|
+
* Triple 추출 결과 로깅
|
|
56
|
+
*
|
|
57
|
+
* @param result Triple 추출 결과
|
|
58
|
+
* @param memoryId Episodic Memory ID (선택사항)
|
|
59
|
+
* @param observation Observation 텍스트 (선택사항, 미리보기용)
|
|
60
|
+
*/
|
|
61
|
+
logExtraction(result: TripleExtractionResult, memoryId?: string, observation?: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* 로그 엔트리 생성
|
|
64
|
+
*/
|
|
65
|
+
private createLogEntry;
|
|
66
|
+
/**
|
|
67
|
+
* 로그 디렉토리 생성
|
|
68
|
+
*/
|
|
69
|
+
private ensureLogDirectory;
|
|
70
|
+
/**
|
|
71
|
+
* 날짜별 로그 파일 경로 반환
|
|
72
|
+
* 형식: YYYY-MM-DD.log
|
|
73
|
+
*/
|
|
74
|
+
private getLogFilePath;
|
|
75
|
+
/**
|
|
76
|
+
* 로그 파일 목록 조회
|
|
77
|
+
*
|
|
78
|
+
* @returns 로그 파일 경로 배열
|
|
79
|
+
*/
|
|
80
|
+
listLogFiles(): Promise<string[]>;
|
|
81
|
+
/**
|
|
82
|
+
* 오래된 로그 파일 삭제 (30일 이상)
|
|
83
|
+
*
|
|
84
|
+
* @param retentionDays 보존 기간 (일) (기본: 30일)
|
|
85
|
+
*/
|
|
86
|
+
deleteOldLogs(retentionDays?: number): Promise<number>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 싱글톤 인스턴스
|
|
90
|
+
*/
|
|
91
|
+
export declare const tripleExtractionLogger: TripleExtractionLogger;
|
|
92
|
+
//# sourceMappingURL=triple-extraction-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triple-extraction-logger.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/logging/triple-extraction-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEtF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,SAAS,GAAG,QAAQ,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,gBAAgB,EAAE,OAAO,CAAC;QAC1B,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,4BAAiC;IASrD;;;;;;OAMG;IACG,aAAa,CACjB,MAAM,EAAE,sBAAsB,EAC9B,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;IACH,OAAO,CAAC,cAAc;IA4DtB;;OAEG;YACW,kBAAkB;IAShC;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBvC;;;;OAIG;IACG,aAAa,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CA+BjE;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triple 추출 전용 로거
|
|
3
|
+
*
|
|
4
|
+
* rawLLMOutput을 로그 파일에 저장합니다.
|
|
5
|
+
*
|
|
6
|
+
* 보안 정책:
|
|
7
|
+
* - PII/비밀 정보 마스킹 적용
|
|
8
|
+
* - logs/triple-extraction/ 디렉토리에 저장
|
|
9
|
+
* - 날짜별 파일로 저장 (예: 2025-01-15.log)
|
|
10
|
+
* - 30일 로테이션 (2.16에서 구현)
|
|
11
|
+
* - 성공 케이스 10% 샘플링, 실패 케이스 100% 저장 (2.15에서 구현)
|
|
12
|
+
*/
|
|
13
|
+
import fs from 'fs';
|
|
14
|
+
import fsPromises from 'fs/promises';
|
|
15
|
+
import path from 'path';
|
|
16
|
+
import { PIIMasker } from '../../shared/utils/pii-masker.js';
|
|
17
|
+
/**
|
|
18
|
+
* Triple 추출 전용 로거
|
|
19
|
+
*/
|
|
20
|
+
export class TripleExtractionLogger {
|
|
21
|
+
config;
|
|
22
|
+
logDir;
|
|
23
|
+
constructor(config = {}) {
|
|
24
|
+
this.config = {
|
|
25
|
+
logDir: config.logDir ?? path.join(process.cwd(), 'logs', 'triple-extraction'),
|
|
26
|
+
enabled: config.enabled ?? true,
|
|
27
|
+
enablePIIMasking: config.enablePIIMasking !== false
|
|
28
|
+
};
|
|
29
|
+
this.logDir = this.config.logDir;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Triple 추출 결과 로깅
|
|
33
|
+
*
|
|
34
|
+
* @param result Triple 추출 결과
|
|
35
|
+
* @param memoryId Episodic Memory ID (선택사항)
|
|
36
|
+
* @param observation Observation 텍스트 (선택사항, 미리보기용)
|
|
37
|
+
*/
|
|
38
|
+
async logExtraction(result, memoryId, observation) {
|
|
39
|
+
if (!this.config.enabled) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
// 로그 디렉토리 생성
|
|
44
|
+
await this.ensureLogDirectory();
|
|
45
|
+
// 로그 엔트리 생성
|
|
46
|
+
const entry = this.createLogEntry(result, memoryId, observation);
|
|
47
|
+
// 날짜별 로그 파일 경로
|
|
48
|
+
const logFilePath = this.getLogFilePath();
|
|
49
|
+
// 로그 엔트리 포맷팅 (JSON Lines 형식)
|
|
50
|
+
const logLine = JSON.stringify(entry) + '\n';
|
|
51
|
+
// 파일에 추가 (비동기)
|
|
52
|
+
await fsPromises.appendFile(logFilePath, logLine);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// 파일 로깅 실패는 무시 (콘솔 로거 사용)
|
|
56
|
+
console.error('TripleExtractionLogger: 로그 파일 쓰기 실패', {
|
|
57
|
+
error: error instanceof Error ? error.message : String(error)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 로그 엔트리 생성
|
|
63
|
+
*/
|
|
64
|
+
createLogEntry(result, memoryId, observation) {
|
|
65
|
+
const extractionResult = result.triples.length > 0 ? 'success' : 'failed';
|
|
66
|
+
// rawLLMOutput 마스킹
|
|
67
|
+
let maskedRawOutput;
|
|
68
|
+
if (result.extractionInfo.rawLLMOutput) {
|
|
69
|
+
if (this.config.enablePIIMasking) {
|
|
70
|
+
const maskingResult = PIIMasker.mask(result.extractionInfo.rawLLMOutput);
|
|
71
|
+
maskedRawOutput = maskingResult.masked;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
maskedRawOutput = result.extractionInfo.rawLLMOutput;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// observation 미리보기 마스킹 (최대 200자)
|
|
78
|
+
let observationPreview;
|
|
79
|
+
if (observation) {
|
|
80
|
+
const preview = observation.length > 200
|
|
81
|
+
? observation.substring(0, 200) + '...'
|
|
82
|
+
: observation;
|
|
83
|
+
if (this.config.enablePIIMasking) {
|
|
84
|
+
const maskingResult = PIIMasker.mask(preview);
|
|
85
|
+
observationPreview = maskingResult.masked;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
observationPreview = preview;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const entry = {
|
|
92
|
+
timestamp: new Date().toISOString(),
|
|
93
|
+
memory_id: memoryId,
|
|
94
|
+
extraction_result: extractionResult,
|
|
95
|
+
triples_count: result.triples.length,
|
|
96
|
+
steps: result.extractionInfo.steps
|
|
97
|
+
};
|
|
98
|
+
// 실패 시 failure_reason 추가
|
|
99
|
+
if (result.extractionInfo.failureReason) {
|
|
100
|
+
entry.failure_reason = result.extractionInfo.failureReason;
|
|
101
|
+
}
|
|
102
|
+
// rawLLMOutput 추가 (마스킹된)
|
|
103
|
+
if (maskedRawOutput) {
|
|
104
|
+
entry.raw_llm_output = maskedRawOutput;
|
|
105
|
+
}
|
|
106
|
+
// observation 미리보기 추가 (마스킹된)
|
|
107
|
+
if (observationPreview) {
|
|
108
|
+
entry.observation_preview = observationPreview;
|
|
109
|
+
}
|
|
110
|
+
return entry;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 로그 디렉토리 생성
|
|
114
|
+
*/
|
|
115
|
+
async ensureLogDirectory() {
|
|
116
|
+
try {
|
|
117
|
+
await fsPromises.access(this.logDir);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// 디렉토리가 없으면 생성
|
|
121
|
+
await fsPromises.mkdir(this.logDir, { recursive: true });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 날짜별 로그 파일 경로 반환
|
|
126
|
+
* 형식: YYYY-MM-DD.log
|
|
127
|
+
*/
|
|
128
|
+
getLogFilePath() {
|
|
129
|
+
const today = new Date();
|
|
130
|
+
const dateStr = today.toISOString().split('T')[0]; // YYYY-MM-DD
|
|
131
|
+
const fileName = `${dateStr}.log`;
|
|
132
|
+
return path.join(this.logDir, fileName);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 로그 파일 목록 조회
|
|
136
|
+
*
|
|
137
|
+
* @returns 로그 파일 경로 배열
|
|
138
|
+
*/
|
|
139
|
+
async listLogFiles() {
|
|
140
|
+
try {
|
|
141
|
+
await this.ensureLogDirectory();
|
|
142
|
+
const files = await fsPromises.readdir(this.logDir);
|
|
143
|
+
return files
|
|
144
|
+
.filter(file => file.endsWith('.log'))
|
|
145
|
+
.map(file => path.join(this.logDir, file))
|
|
146
|
+
.sort()
|
|
147
|
+
.reverse(); // 최신 파일 먼저
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.error('TripleExtractionLogger: 로그 파일 목록 조회 실패', {
|
|
151
|
+
error: error instanceof Error ? error.message : String(error)
|
|
152
|
+
});
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* 오래된 로그 파일 삭제 (30일 이상)
|
|
158
|
+
*
|
|
159
|
+
* @param retentionDays 보존 기간 (일) (기본: 30일)
|
|
160
|
+
*/
|
|
161
|
+
async deleteOldLogs(retentionDays = 30) {
|
|
162
|
+
try {
|
|
163
|
+
await this.ensureLogDirectory();
|
|
164
|
+
const files = await fsPromises.readdir(this.logDir);
|
|
165
|
+
const now = Date.now();
|
|
166
|
+
const retentionMs = retentionDays * 24 * 60 * 60 * 1000;
|
|
167
|
+
let deletedCount = 0;
|
|
168
|
+
for (const file of files) {
|
|
169
|
+
if (!file.endsWith('.log')) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const filePath = path.join(this.logDir, file);
|
|
173
|
+
const stats = await fsPromises.stat(filePath);
|
|
174
|
+
const fileAge = now - stats.mtimeMs;
|
|
175
|
+
if (fileAge > retentionMs) {
|
|
176
|
+
await fsPromises.unlink(filePath);
|
|
177
|
+
deletedCount++;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return deletedCount;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
console.error('TripleExtractionLogger: 오래된 로그 파일 삭제 실패', {
|
|
184
|
+
error: error instanceof Error ? error.message : String(error)
|
|
185
|
+
});
|
|
186
|
+
return 0;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* 싱글톤 인스턴스
|
|
192
|
+
*/
|
|
193
|
+
export const tripleExtractionLogger = new TripleExtractionLogger();
|
|
194
|
+
//# sourceMappingURL=triple-extraction-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triple-extraction-logger.js","sourceRoot":"","sources":["../../../src/infrastructure/logging/triple-extraction-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAwC7D;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAyC;IAC/C,MAAM,CAAS;IAEvB,YAAY,SAAuC,EAAE;QACnD,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,mBAAmB,CAAC;YAC9E,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;YAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,KAAK,KAAK;SACpD,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CACjB,MAA8B,EAC9B,QAAiB,EACjB,WAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,aAAa;YACb,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEhC,YAAY;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAEjE,eAAe;YACf,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,6BAA6B;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAE7C,eAAe;YACf,MAAM,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0BAA0B;YAC1B,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE;gBACnD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,MAA8B,EAC9B,QAAiB,EACjB,WAAoB;QAEpB,MAAM,gBAAgB,GACpB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEnD,mBAAmB;QACnB,IAAI,eAAmC,CAAC;QACxC,IAAI,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACzE,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC;YACvD,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,kBAAsC,CAAC;QAC3C,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG;gBACtC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;gBACvC,CAAC,CAAC,WAAW,CAAC;YAEhB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9C,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,kBAAkB,GAAG,OAAO,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAA6B;YACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,gBAAgB;YACnC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YACpC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK;SACnC,CAAC;QAEF,yBAAyB;QACzB,IAAI,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;YACxC,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC;QAC7D,CAAC;QAED,yBAAyB;QACzB,IAAI,eAAe,EAAE,CAAC;YACpB,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC;QACzC,CAAC;QAED,6BAA6B;QAC7B,IAAI,kBAAkB,EAAE,CAAC;YACvB,KAAK,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;QACjD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;YACf,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;QAChE,MAAM,QAAQ,GAAG,GAAG,OAAO,MAAM,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,OAAO,KAAK;iBACT,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACrC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBACzC,IAAI,EAAE;iBACN,OAAO,EAAE,CAAC,CAAC,WAAW;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE;gBACtD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,gBAAwB,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACxD,IAAI,YAAY,GAAG,CAAC,CAAC;YAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC9C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;gBAEpC,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBAC1B,MAAM,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAClC,YAAY,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE;gBACvD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC"}
|
|
@@ -20,6 +20,11 @@ export interface BatchJobConfig {
|
|
|
20
20
|
relationValidationInterval: number;
|
|
21
21
|
relationValidationDayOfWeek: number;
|
|
22
22
|
relationValidationHour: number;
|
|
23
|
+
logRotationInterval: number;
|
|
24
|
+
tripleExtractionInterval: number;
|
|
25
|
+
tripleExtractionHour?: number;
|
|
26
|
+
tripleExtractionBatchSize: number;
|
|
27
|
+
tripleExtractionTimeout: number;
|
|
23
28
|
maxBatchSize: number;
|
|
24
29
|
enableLogging: boolean;
|
|
25
30
|
enableNotifications: boolean;
|
|
@@ -77,6 +82,7 @@ export declare class BatchScheduler {
|
|
|
77
82
|
private healthChecker;
|
|
78
83
|
private fileLogger;
|
|
79
84
|
private relationValidatorExecutor;
|
|
85
|
+
private tripleExtractionBatchJob;
|
|
80
86
|
constructor(config?: Partial<BatchJobConfig>, dependencies?: {
|
|
81
87
|
jobQueue?: JobQueue;
|
|
82
88
|
retryManager?: RetryManager;
|
|
@@ -113,8 +119,24 @@ export declare class BatchScheduler {
|
|
|
113
119
|
/**
|
|
114
120
|
* 큐에 작업 추가 (중복 방지 포함)
|
|
115
121
|
* 동일 이름의 잡이 이미 큐에 있거나 실행 중이면 추가하지 않음
|
|
122
|
+
*
|
|
123
|
+
* PRD 6.2: 기존 배치 작업과 충돌 방지
|
|
124
|
+
* - 중복 방지: 동일 이름의 작업이 이미 큐에 있거나 실행 중이면 추가하지 않음
|
|
125
|
+
* - Triple 추출 배치 작업도 이 메커니즘을 통해 중복 실행 방지
|
|
126
|
+
* - 우선순위 기반 큐 관리로 중요한 작업 우선 처리
|
|
116
127
|
*/
|
|
117
128
|
private addJobToQueue;
|
|
129
|
+
/**
|
|
130
|
+
* 외부에서 작업을 큐에 추가하는 public 메서드
|
|
131
|
+
* AriGraph Pipeline 등 외부 컴포넌트에서 사용
|
|
132
|
+
*
|
|
133
|
+
* @param name 작업 이름 (고유 식별자)
|
|
134
|
+
* @param job 실행할 작업 함수
|
|
135
|
+
* @param priority 우선순위 (낮을수록 높은 우선순위, 기본값: 10)
|
|
136
|
+
* @param retryCount 재시도 횟수 (기본값: 0)
|
|
137
|
+
* @returns 추가 성공 여부
|
|
138
|
+
*/
|
|
139
|
+
addJob(name: string, job: () => Promise<void>, priority?: number, retryCount?: number): boolean;
|
|
118
140
|
/**
|
|
119
141
|
* 작업 스케줄링
|
|
120
142
|
* 시작 시 maxConcurrentJobs를 보장하기 위해 무조건 큐를 통해 실행
|
|
@@ -124,6 +146,11 @@ export declare class BatchScheduler {
|
|
|
124
146
|
/**
|
|
125
147
|
* 작업 큐 처리기 시작
|
|
126
148
|
* 재시도 큐에서도 동일한 래퍼(타임아웃+상태 관리)를 사용하도록 수정
|
|
149
|
+
*
|
|
150
|
+
* PRD 6.2: 기존 배치 작업과 충돌 방지
|
|
151
|
+
* - maxConcurrentJobs 설정을 통해 동시 실행 작업 수 제한
|
|
152
|
+
* - Triple 추출 배치 작업도 이 제한에 포함되어 다른 배치 작업과 충돌 방지
|
|
153
|
+
* - 우선순위 기반 실행으로 중요한 작업 우선 처리
|
|
127
154
|
*/
|
|
128
155
|
private startJobProcessor;
|
|
129
156
|
/**
|
|
@@ -210,6 +237,36 @@ export declare class BatchScheduler {
|
|
|
210
237
|
* 스케줄러 헬스체크
|
|
211
238
|
*/
|
|
212
239
|
private checkSchedulerHealth;
|
|
240
|
+
/**
|
|
241
|
+
* Triple 추출 배치 작업 실행
|
|
242
|
+
*
|
|
243
|
+
* PRD 6.1: 주기적 배치 실행
|
|
244
|
+
* - 대상: triple_extracted=false 또는 null인 Episodic Memory
|
|
245
|
+
* - 재시도 정책 적용 (최대 시도 횟수 확인)
|
|
246
|
+
* - abandoned 상태는 제외
|
|
247
|
+
*/
|
|
248
|
+
private runTripleExtractionBatch;
|
|
249
|
+
/**
|
|
250
|
+
* Triple 추출 배치 작업 스케줄링
|
|
251
|
+
*
|
|
252
|
+
* PRD 6.1: 주기적 배치 실행
|
|
253
|
+
* - 주기: 매일 새벽 2시 (설정 가능, tripleExtractionInterval, tripleExtractionHour 설정)
|
|
254
|
+
* - tripleExtractionHour가 지정된 경우 해당 시간에만 실행
|
|
255
|
+
* - tripleExtractionHour가 지정되지 않은 경우 interval마다 실행
|
|
256
|
+
*
|
|
257
|
+
* PRD 6.2: 기존 배치 작업과 충돌 방지
|
|
258
|
+
* - BatchScheduler의 maxConcurrentJobs 설정 고려
|
|
259
|
+
* - Triple 추출 배치 작업은 다른 배치 작업과 동시 실행되지 않도록 스케줄링
|
|
260
|
+
* - Triple Extraction Job은 독립적인 작업 큐로 관리
|
|
261
|
+
* - 우선순위 6 설정 (로그 로테이션 다음, 다른 중요 작업보다 낮은 우선순위)
|
|
262
|
+
* - JobQueue를 통해 실행하여 maxConcurrentJobs 제한 및 중복 방지 적용
|
|
263
|
+
*/
|
|
264
|
+
private scheduleTripleExtractionBatch;
|
|
265
|
+
/**
|
|
266
|
+
* 로그 로테이션 실행
|
|
267
|
+
* 30일 이상 된 Triple 추출 로그 파일을 삭제합니다.
|
|
268
|
+
*/
|
|
269
|
+
private runLogRotation;
|
|
213
270
|
/**
|
|
214
271
|
* 스케줄러 통계 조회
|
|
215
272
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-scheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/batch-scheduler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"batch-scheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/batch-scheduler.ts"],"names":[],"mappings":"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"}
|