memento-mcp-server 1.14.0 → 1.15.0

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 (77) 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/remember-tool.d.ts.map +1 -1
  6. package/dist/domains/memory/tools/remember-tool.js +182 -1
  7. package/dist/domains/memory/tools/remember-tool.js.map +1 -1
  8. package/dist/infrastructure/database/database/migration/migrations/005-relation-engine-schema.sql +7 -7
  9. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.d.ts +65 -0
  10. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.d.ts.map +1 -0
  11. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.js +250 -0
  12. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.js.map +1 -0
  13. package/dist/infrastructure/database/database/migration/migrations/008-arigraph-schema-expansion.sql +86 -0
  14. package/dist/infrastructure/logging/triple-extraction-logger.d.ts +92 -0
  15. package/dist/infrastructure/logging/triple-extraction-logger.d.ts.map +1 -0
  16. package/dist/infrastructure/logging/triple-extraction-logger.js +194 -0
  17. package/dist/infrastructure/logging/triple-extraction-logger.js.map +1 -0
  18. package/dist/infrastructure/scheduler/batch-scheduler.d.ts +57 -0
  19. package/dist/infrastructure/scheduler/batch-scheduler.d.ts.map +1 -1
  20. package/dist/infrastructure/scheduler/batch-scheduler.js +220 -0
  21. package/dist/infrastructure/scheduler/batch-scheduler.js.map +1 -1
  22. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.d.ts +194 -0
  23. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.d.ts.map +1 -0
  24. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.js +639 -0
  25. package/dist/infrastructure/scheduler/jobs/triple-extraction-batch-job.js.map +1 -0
  26. package/dist/services/semantic-memory/semantic-memory-statistics.d.ts +64 -0
  27. package/dist/services/semantic-memory/semantic-memory-statistics.d.ts.map +1 -0
  28. package/dist/services/semantic-memory/semantic-memory-statistics.js +113 -0
  29. package/dist/services/semantic-memory/semantic-memory-statistics.js.map +1 -0
  30. package/dist/services/semantic-memory/semantic-memory-update-service.d.ts +257 -0
  31. package/dist/services/semantic-memory/semantic-memory-update-service.d.ts.map +1 -0
  32. package/dist/services/semantic-memory/semantic-memory-update-service.js +696 -0
  33. package/dist/services/semantic-memory/semantic-memory-update-service.js.map +1 -0
  34. package/dist/services/triple-extraction/entity-linker.d.ts +55 -0
  35. package/dist/services/triple-extraction/entity-linker.d.ts.map +1 -0
  36. package/dist/services/triple-extraction/entity-linker.js +154 -0
  37. package/dist/services/triple-extraction/entity-linker.js.map +1 -0
  38. package/dist/services/triple-extraction/predicate-canonicalizer.d.ts +63 -0
  39. package/dist/services/triple-extraction/predicate-canonicalizer.d.ts.map +1 -0
  40. package/dist/services/triple-extraction/predicate-canonicalizer.js +166 -0
  41. package/dist/services/triple-extraction/predicate-canonicalizer.js.map +1 -0
  42. package/dist/services/triple-extraction/triple-extraction-service.d.ts +181 -0
  43. package/dist/services/triple-extraction/triple-extraction-service.d.ts.map +1 -0
  44. package/dist/services/triple-extraction/triple-extraction-service.js +907 -0
  45. package/dist/services/triple-extraction/triple-extraction-service.js.map +1 -0
  46. package/dist/services/triple-extraction/triple-extraction-statistics.d.ts +74 -0
  47. package/dist/services/triple-extraction/triple-extraction-statistics.d.ts.map +1 -0
  48. package/dist/services/triple-extraction/triple-extraction-statistics.js +146 -0
  49. package/dist/services/triple-extraction/triple-extraction-statistics.js.map +1 -0
  50. package/dist/shared/types/index.d.ts +1 -0
  51. package/dist/shared/types/index.d.ts.map +1 -1
  52. package/dist/shared/types/index.js.map +1 -1
  53. package/dist/shared/types/triple-extraction.d.ts +99 -0
  54. package/dist/shared/types/triple-extraction.d.ts.map +1 -0
  55. package/dist/shared/types/triple-extraction.js +6 -0
  56. package/dist/shared/types/triple-extraction.js.map +1 -0
  57. package/dist/shared/utils/pii-masker.d.ts +67 -0
  58. package/dist/shared/utils/pii-masker.d.ts.map +1 -0
  59. package/dist/shared/utils/pii-masker.js +205 -0
  60. package/dist/shared/utils/pii-masker.js.map +1 -0
  61. package/dist/shared/utils/prompt-template-loader.d.ts +42 -0
  62. package/dist/shared/utils/prompt-template-loader.d.ts.map +1 -0
  63. package/dist/shared/utils/prompt-template-loader.js +92 -0
  64. package/dist/shared/utils/prompt-template-loader.js.map +1 -0
  65. package/dist/shared/utils/triple-cache.d.ts +90 -0
  66. package/dist/shared/utils/triple-cache.d.ts.map +1 -0
  67. package/dist/shared/utils/triple-cache.js +124 -0
  68. package/dist/shared/utils/triple-cache.js.map +1 -0
  69. package/dist/tools/index.d.ts +2 -1
  70. package/dist/tools/index.d.ts.map +1 -1
  71. package/dist/tools/index.js +3 -1
  72. package/dist/tools/index.js.map +1 -1
  73. package/dist/tools/types.d.ts +1 -0
  74. package/dist/tools/types.d.ts.map +1 -1
  75. package/dist/tools/types.js +2 -0
  76. package/dist/tools/types.js.map +1 -1
  77. 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":"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"}
@@ -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":"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"}
1
+ {"version":3,"file":"batch-scheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/batch-scheduler.ts"],"names":[],"mappings":"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"}