memento-mcp-server 1.15.0 → 1.16.0-b

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 (61) hide show
  1. package/dist/domains/relation/tools/visualize-relations-tool.d.ts +2 -2
  2. package/dist/infrastructure/database/database/migration/migrations/009-quality-assurance-schema.d.ts +60 -0
  3. package/dist/infrastructure/database/database/migration/migrations/009-quality-assurance-schema.d.ts.map +1 -0
  4. package/dist/infrastructure/database/database/migration/migrations/009-quality-assurance-schema.js +276 -0
  5. package/dist/infrastructure/database/database/migration/migrations/009-quality-assurance-schema.js.map +1 -0
  6. package/dist/infrastructure/database/database/migration/migrations/009-quality-assurance-schema.sql +128 -0
  7. package/dist/infrastructure/scheduler/batch-scheduler.d.ts +17 -0
  8. package/dist/infrastructure/scheduler/batch-scheduler.d.ts.map +1 -1
  9. package/dist/infrastructure/scheduler/batch-scheduler.js +130 -0
  10. package/dist/infrastructure/scheduler/batch-scheduler.js.map +1 -1
  11. package/dist/infrastructure/scheduler/jobs/quality-measurement-batch-job.d.ts +108 -0
  12. package/dist/infrastructure/scheduler/jobs/quality-measurement-batch-job.d.ts.map +1 -0
  13. package/dist/infrastructure/scheduler/jobs/quality-measurement-batch-job.js +184 -0
  14. package/dist/infrastructure/scheduler/jobs/quality-measurement-batch-job.js.map +1 -0
  15. package/dist/server/http-server.d.ts.map +1 -1
  16. package/dist/server/http-server.js +3 -0
  17. package/dist/server/http-server.js.map +1 -1
  18. package/dist/server/routes/quality.routes.d.ts +14 -0
  19. package/dist/server/routes/quality.routes.d.ts.map +1 -0
  20. package/dist/server/routes/quality.routes.js +460 -0
  21. package/dist/server/routes/quality.routes.js.map +1 -0
  22. package/dist/services/quality-assurance/quality-assurance-service.d.ts +207 -0
  23. package/dist/services/quality-assurance/quality-assurance-service.d.ts.map +1 -0
  24. package/dist/services/quality-assurance/quality-assurance-service.js +247 -0
  25. package/dist/services/quality-assurance/quality-assurance-service.js.map +1 -0
  26. package/dist/services/quality-assurance/quality-evaluator.d.ts +163 -0
  27. package/dist/services/quality-assurance/quality-evaluator.d.ts.map +1 -0
  28. package/dist/services/quality-assurance/quality-evaluator.js +256 -0
  29. package/dist/services/quality-assurance/quality-evaluator.js.map +1 -0
  30. package/dist/services/quality-assurance/quality-metrics-collector.d.ts +221 -0
  31. package/dist/services/quality-assurance/quality-metrics-collector.d.ts.map +1 -0
  32. package/dist/services/quality-assurance/quality-metrics-collector.js +796 -0
  33. package/dist/services/quality-assurance/quality-metrics-collector.js.map +1 -0
  34. package/dist/services/quality-assurance/quality-recorder.d.ts +108 -0
  35. package/dist/services/quality-assurance/quality-recorder.d.ts.map +1 -0
  36. package/dist/services/quality-assurance/quality-recorder.js +281 -0
  37. package/dist/services/quality-assurance/quality-recorder.js.map +1 -0
  38. package/dist/services/quality-assurance/quality-reporter.d.ts +189 -0
  39. package/dist/services/quality-assurance/quality-reporter.d.ts.map +1 -0
  40. package/dist/services/quality-assurance/quality-reporter.js +558 -0
  41. package/dist/services/quality-assurance/quality-reporter.js.map +1 -0
  42. package/dist/services/quality-assurance/quality-threshold-manager.d.ts +102 -0
  43. package/dist/services/quality-assurance/quality-threshold-manager.d.ts.map +1 -0
  44. package/dist/services/quality-assurance/quality-threshold-manager.js +252 -0
  45. package/dist/services/quality-assurance/quality-threshold-manager.js.map +1 -0
  46. package/dist/shared/utils/database.d.ts +7 -0
  47. package/dist/shared/utils/database.d.ts.map +1 -1
  48. package/dist/shared/utils/database.js +24 -0
  49. package/dist/shared/utils/database.js.map +1 -1
  50. package/dist/test/helpers/search-quality-metrics.d.ts +96 -0
  51. package/dist/test/helpers/search-quality-metrics.d.ts.map +1 -0
  52. package/dist/test/helpers/search-quality-metrics.js +185 -0
  53. package/dist/test/helpers/search-quality-metrics.js.map +1 -0
  54. package/dist/test/helpers/vector-search-quality-metrics.d.ts +1287 -0
  55. package/dist/test/helpers/vector-search-quality-metrics.d.ts.map +1 -0
  56. package/dist/test/helpers/vector-search-quality-metrics.js +2214 -0
  57. package/dist/test/helpers/vector-search-quality-metrics.js.map +1 -0
  58. package/package.json +5 -1
  59. package/scripts/generate-ground-truth.ts +353 -0
  60. package/scripts/quality-report.ts +166 -0
  61. package/scripts/quality-thresholds.ts +279 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-metrics-collector.js","sourceRoot":"","sources":["../../../src/services/quality-assurance/quality-metrics-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Quality Recorder
3
+ *
4
+ * 품질 측정 결과 기록 서비스
5
+ *
6
+ * 주요 기능:
7
+ * - 측정 결과를 quality_measurement_history 테이블에 저장
8
+ * - 측정 결과를 quality_metrics 테이블에 저장 (최신 값 유지)
9
+ * - Meta-Quality Memory 저장
10
+ *
11
+ * PRD FR-1.1: Recorder 역할 - 측정 결과를 기억으로 저장 (Meta-Quality Memory)
12
+ */
13
+ import Database from 'better-sqlite3';
14
+ import type { CollectedMetrics } from './quality-metrics-collector.js';
15
+ import type { QualityEvaluationResult } from './quality-evaluator.js';
16
+ /**
17
+ * 측정 타입
18
+ */
19
+ export type MeasurementType = 'batch' | 'test' | 'manual';
20
+ /**
21
+ * 측정 이력 상태
22
+ */
23
+ export type MeasurementHistoryStatus = 'success' | 'warning' | 'error';
24
+ /**
25
+ * 품질 지표 상태
26
+ */
27
+ export type QualityMetricStatus = 'pass' | 'warning' | 'fail';
28
+ /**
29
+ * 측정 결과 기록 옵션
30
+ */
31
+ export interface RecordOptions {
32
+ /**
33
+ * 측정 타입 (기본값: 'batch')
34
+ */
35
+ measurement_type?: MeasurementType;
36
+ /**
37
+ * 컨텍스트 (기본값: 'default')
38
+ */
39
+ context?: string;
40
+ }
41
+ /**
42
+ * Quality Recorder
43
+ *
44
+ * PRD FR-1.1: Recorder 역할 - 측정 결과를 기억으로 저장 (Meta-Quality Memory)
45
+ */
46
+ export declare class QualityRecorder {
47
+ private db;
48
+ constructor(db: Database.Database);
49
+ /**
50
+ * ID 생성 유틸리티
51
+ */
52
+ private generateId;
53
+ /**
54
+ * 측정 결과 기록
55
+ *
56
+ * quality_measurement_history와 quality_metrics 테이블에 저장
57
+ *
58
+ * @param collectedMetrics - 수집된 품질 지표
59
+ * @param evaluationResult - 평가 결과
60
+ * @param options - 기록 옵션
61
+ * @returns 기록된 측정 이력 ID
62
+ */
63
+ recordMeasurement(collectedMetrics: CollectedMetrics, evaluationResult: QualityEvaluationResult, options?: RecordOptions): Promise<string>;
64
+ /**
65
+ * 여러 네임스페이스의 측정 결과 기록
66
+ *
67
+ * @param collectedMetricsList - 수집된 품질 지표 목록
68
+ * @param evaluationResults - 평가 결과 목록
69
+ * @param options - 기록 옵션
70
+ * @returns 기록된 측정 이력 ID 목록
71
+ */
72
+ recordAllMeasurements(collectedMetricsList: CollectedMetrics[], evaluationResults: QualityEvaluationResult[], options?: RecordOptions): Promise<string[]>;
73
+ /**
74
+ * 측정 이력 조회
75
+ *
76
+ * @param namespace - 네임스페이스 필터 (선택적)
77
+ * @param context - 컨텍스트 필터 (선택적)
78
+ * @param from - 시작 시간 (선택적)
79
+ * @param to - 종료 시간 (선택적)
80
+ * @param limit - 최대 개수 (기본값: 100)
81
+ * @returns 측정 이력 목록
82
+ */
83
+ getMeasurementHistory(namespace?: string, context?: string, from?: string, to?: string, limit?: number): Array<{
84
+ id: string;
85
+ measurement_type: string;
86
+ measured_at: string;
87
+ status: string;
88
+ created_at: string;
89
+ }>;
90
+ /**
91
+ * 최신 품질 지표 조회
92
+ *
93
+ * @param namespace - 네임스페이스 필터 (선택적)
94
+ * @param context - 컨텍스트 필터 (선택적)
95
+ * @returns 최신 품질 지표 목록
96
+ */
97
+ getLatestMetrics(namespace?: string, context?: string): Array<{
98
+ metric_namespace: string;
99
+ metric_key: string;
100
+ context: string;
101
+ metric_value: number;
102
+ measured_at: string;
103
+ status: string;
104
+ threshold_value: number | null;
105
+ updated_at: string;
106
+ }>;
107
+ }
108
+ //# sourceMappingURL=quality-recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-recorder.d.ts","sourceRoot":"","sources":["../../../src/services/quality-assurance/quality-recorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGtE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,eAAe,CAAC;IAEnC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAMzC;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;;;;;;;;OASG;IACG,iBAAiB,CACrB,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,uBAAuB,EACzC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC;IAwIlB;;;;;;;OAOG;IACG,qBAAqB,CACzB,oBAAoB,EAAE,gBAAgB,EAAE,EACxC,iBAAiB,EAAE,uBAAuB,EAAE,EAC5C,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BpB;;;;;;;;;OASG;IACH,qBAAqB,CACnB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,KAAK,GAAE,MAAY,GAClB,KAAK,CAAC;QACP,EAAE,EAAE,MAAM,CAAC;QACX,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAoDF;;;;;;OAMG;IACH,gBAAgB,CACd,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,KAAK,CAAC;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CA4CH"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Quality Recorder
3
+ *
4
+ * 품질 측정 결과 기록 서비스
5
+ *
6
+ * 주요 기능:
7
+ * - 측정 결과를 quality_measurement_history 테이블에 저장
8
+ * - 측정 결과를 quality_metrics 테이블에 저장 (최신 값 유지)
9
+ * - Meta-Quality Memory 저장
10
+ *
11
+ * PRD FR-1.1: Recorder 역할 - 측정 결과를 기억으로 저장 (Meta-Quality Memory)
12
+ */
13
+ import Database from 'better-sqlite3';
14
+ import { DatabaseUtils } from '../../shared/utils/database.js';
15
+ import { logger } from '../../shared/utils/logger.js';
16
+ /**
17
+ * Quality Recorder
18
+ *
19
+ * PRD FR-1.1: Recorder 역할 - 측정 결과를 기억으로 저장 (Meta-Quality Memory)
20
+ */
21
+ export class QualityRecorder {
22
+ db;
23
+ constructor(db) {
24
+ this.db = db;
25
+ if (!db) {
26
+ throw new Error('Database instance is required');
27
+ }
28
+ }
29
+ /**
30
+ * ID 생성 유틸리티
31
+ */
32
+ generateId() {
33
+ const timestamp = Date.now();
34
+ const random = Math.random().toString(36).substring(2, 11);
35
+ return `quality_${timestamp}_${random}`;
36
+ }
37
+ /**
38
+ * 측정 결과 기록
39
+ *
40
+ * quality_measurement_history와 quality_metrics 테이블에 저장
41
+ *
42
+ * @param collectedMetrics - 수집된 품질 지표
43
+ * @param evaluationResult - 평가 결과
44
+ * @param options - 기록 옵션
45
+ * @returns 기록된 측정 이력 ID
46
+ */
47
+ async recordMeasurement(collectedMetrics, evaluationResult, options = {}) {
48
+ const { measurement_type = 'batch', context = 'default' } = options;
49
+ const measurementId = this.generateId();
50
+ const now = new Date().toISOString();
51
+ // 평가 결과의 status를 measurement_history의 status로 매핑
52
+ // evaluationResult.status: 'pass' | 'warning' | 'fail'
53
+ // measurement_history.status: 'success' | 'warning' | 'error'
54
+ let historyStatus = 'success';
55
+ if (evaluationResult.status === 'fail') {
56
+ historyStatus = 'error';
57
+ }
58
+ else if (evaluationResult.status === 'warning') {
59
+ historyStatus = 'warning';
60
+ }
61
+ // metrics JSON 생성 (평가 결과 포함)
62
+ const metricsJson = JSON.stringify({
63
+ namespace: collectedMetrics.namespace,
64
+ context,
65
+ measured_at: collectedMetrics.measured_at,
66
+ metrics: collectedMetrics.metrics,
67
+ evaluation: {
68
+ status: evaluationResult.status,
69
+ passed_count: evaluationResult.passedCount,
70
+ failed_count: evaluationResult.failedCount,
71
+ total_count: evaluationResult.totalCount
72
+ },
73
+ metric_results: evaluationResult.metricResults.map(r => ({
74
+ key: r.key,
75
+ value: r.value,
76
+ passed: r.passed,
77
+ threshold_value: r.threshold?.threshold_value || null,
78
+ threshold_type: r.threshold?.threshold_type || null,
79
+ difference: r.difference
80
+ }))
81
+ });
82
+ // warnings JSON 생성
83
+ const warningsJson = evaluationResult.warnings.length > 0
84
+ ? JSON.stringify(evaluationResult.warnings)
85
+ : null;
86
+ // 1. quality_measurement_history에 저장
87
+ const historySql = `
88
+ INSERT INTO quality_measurement_history (
89
+ id,
90
+ measurement_type,
91
+ measured_at,
92
+ metrics,
93
+ status,
94
+ warnings,
95
+ created_at
96
+ )
97
+ VALUES (?, ?, ?, ?, ?, ?, ?)
98
+ `;
99
+ DatabaseUtils.run(this.db, historySql, [
100
+ measurementId,
101
+ measurement_type,
102
+ collectedMetrics.measured_at,
103
+ metricsJson,
104
+ historyStatus,
105
+ warningsJson,
106
+ now
107
+ ]);
108
+ // 2. quality_metrics에 저장 (각 지표별로 UPSERT)
109
+ for (const [key, value] of Object.entries(collectedMetrics.metrics)) {
110
+ const metricResult = evaluationResult.metricResults.find(r => r.key === key);
111
+ const thresholdValue = metricResult?.threshold?.threshold_value || null;
112
+ // 각 지표별 상태 결정:
113
+ // - passed: 'pass'
114
+ // - !passed && threshold 존재: 'fail'
115
+ // - !passed && threshold 없음: 'warning'
116
+ let metricStatus = 'pass';
117
+ if (metricResult) {
118
+ if (metricResult.passed) {
119
+ metricStatus = 'pass';
120
+ }
121
+ else if (metricResult.threshold !== null) {
122
+ metricStatus = 'fail';
123
+ }
124
+ else {
125
+ metricStatus = 'warning';
126
+ }
127
+ }
128
+ const metricsSql = `
129
+ INSERT INTO quality_metrics (
130
+ metric_namespace,
131
+ metric_key,
132
+ context,
133
+ metric_value,
134
+ measured_at,
135
+ status,
136
+ threshold_value,
137
+ updated_at
138
+ )
139
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
140
+ ON CONFLICT(metric_namespace, metric_key, context)
141
+ DO UPDATE SET
142
+ metric_value = excluded.metric_value,
143
+ measured_at = excluded.measured_at,
144
+ status = excluded.status,
145
+ threshold_value = excluded.threshold_value,
146
+ updated_at = excluded.updated_at
147
+ `;
148
+ DatabaseUtils.run(this.db, metricsSql, [
149
+ collectedMetrics.namespace,
150
+ key,
151
+ context,
152
+ value,
153
+ collectedMetrics.measured_at,
154
+ metricStatus,
155
+ thresholdValue,
156
+ now
157
+ ]);
158
+ }
159
+ logger.info(`품질 측정 결과 기록: ${collectedMetrics.namespace} (${context}) - ${historyStatus}`, {
160
+ measurement_id: measurementId,
161
+ namespace: collectedMetrics.namespace,
162
+ context,
163
+ status: historyStatus,
164
+ metrics_count: Object.keys(collectedMetrics.metrics).length,
165
+ passed_count: evaluationResult.passedCount,
166
+ failed_count: evaluationResult.failedCount
167
+ });
168
+ return measurementId;
169
+ }
170
+ /**
171
+ * 여러 네임스페이스의 측정 결과 기록
172
+ *
173
+ * @param collectedMetricsList - 수집된 품질 지표 목록
174
+ * @param evaluationResults - 평가 결과 목록
175
+ * @param options - 기록 옵션
176
+ * @returns 기록된 측정 이력 ID 목록
177
+ */
178
+ async recordAllMeasurements(collectedMetricsList, evaluationResults, options = {}) {
179
+ if (collectedMetricsList.length !== evaluationResults.length) {
180
+ throw new Error('collectedMetricsList and evaluationResults must have the same length');
181
+ }
182
+ const measurementIds = [];
183
+ for (let i = 0; i < collectedMetricsList.length; i++) {
184
+ const metrics = collectedMetricsList[i];
185
+ const evaluation = evaluationResults[i];
186
+ if (!metrics) {
187
+ throw new Error(`collectedMetricsList[${i}] is undefined`);
188
+ }
189
+ if (!evaluation) {
190
+ throw new Error(`evaluationResults[${i}] is undefined`);
191
+ }
192
+ const id = await this.recordMeasurement(metrics, evaluation, options);
193
+ measurementIds.push(id);
194
+ }
195
+ return measurementIds;
196
+ }
197
+ /**
198
+ * 측정 이력 조회
199
+ *
200
+ * @param namespace - 네임스페이스 필터 (선택적)
201
+ * @param context - 컨텍스트 필터 (선택적)
202
+ * @param from - 시작 시간 (선택적)
203
+ * @param to - 종료 시간 (선택적)
204
+ * @param limit - 최대 개수 (기본값: 100)
205
+ * @returns 측정 이력 목록
206
+ */
207
+ getMeasurementHistory(namespace, context, from, to, limit = 100) {
208
+ let sql = `
209
+ SELECT
210
+ id,
211
+ measurement_type,
212
+ measured_at,
213
+ status,
214
+ created_at
215
+ FROM quality_measurement_history
216
+ `;
217
+ const params = [];
218
+ const conditions = [];
219
+ if (namespace) {
220
+ // metrics JSON에서 namespace 추출 (JSON_EXTRACT 사용)
221
+ conditions.push(`JSON_EXTRACT(metrics, '$.namespace') = ?`);
222
+ params.push(namespace);
223
+ }
224
+ if (context) {
225
+ // metrics JSON에서 context 추출
226
+ conditions.push(`JSON_EXTRACT(metrics, '$.context') = ?`);
227
+ params.push(context);
228
+ }
229
+ if (from) {
230
+ conditions.push('measured_at >= ?');
231
+ params.push(from);
232
+ }
233
+ if (to) {
234
+ conditions.push('measured_at <= ?');
235
+ params.push(to);
236
+ }
237
+ if (conditions.length > 0) {
238
+ sql += ' WHERE ' + conditions.join(' AND ');
239
+ }
240
+ sql += ' ORDER BY measured_at DESC LIMIT ?';
241
+ params.push(limit);
242
+ return DatabaseUtils.all(this.db, sql, params);
243
+ }
244
+ /**
245
+ * 최신 품질 지표 조회
246
+ *
247
+ * @param namespace - 네임스페이스 필터 (선택적)
248
+ * @param context - 컨텍스트 필터 (선택적)
249
+ * @returns 최신 품질 지표 목록
250
+ */
251
+ getLatestMetrics(namespace, context) {
252
+ let sql = `
253
+ SELECT
254
+ metric_namespace,
255
+ metric_key,
256
+ context,
257
+ metric_value,
258
+ measured_at,
259
+ status,
260
+ threshold_value,
261
+ updated_at
262
+ FROM quality_metrics
263
+ `;
264
+ const params = [];
265
+ const conditions = [];
266
+ if (namespace) {
267
+ conditions.push('metric_namespace = ?');
268
+ params.push(namespace);
269
+ }
270
+ if (context) {
271
+ conditions.push('context = ?');
272
+ params.push(context);
273
+ }
274
+ if (conditions.length > 0) {
275
+ sql += ' WHERE ' + conditions.join(' AND ');
276
+ }
277
+ sql += ' ORDER BY metric_namespace, metric_key, context';
278
+ return DatabaseUtils.all(this.db, sql, params);
279
+ }
280
+ }
281
+ //# sourceMappingURL=quality-recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-recorder.js","sourceRoot":"","sources":["../../../src/services/quality-assurance/quality-recorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Quality Reporter
3
+ *
4
+ * 품질 리포트 생성 서비스
5
+ *
6
+ * 주요 기능:
7
+ * - Markdown, JSON, HTML 형식 리포트 생성
8
+ * - 네임스페이스, 컨텍스트, 시간 범위 필터링
9
+ * - 품질 지표 요약, 경고 정보, 이력 추이 포함
10
+ *
11
+ * PRD FR-1.1: Reporter 역할 - 회상용 리포트 생성
12
+ */
13
+ import Database from 'better-sqlite3';
14
+ /**
15
+ * 리포트 형식
16
+ */
17
+ export type ReportFormat = 'markdown' | 'json' | 'html';
18
+ /**
19
+ * 리포트 생성 옵션
20
+ */
21
+ export interface ReportOptions {
22
+ /**
23
+ * 리포트 형식 (기본값: 'markdown')
24
+ */
25
+ format?: ReportFormat;
26
+ /**
27
+ * 네임스페이스 필터 (선택적)
28
+ */
29
+ namespace?: string;
30
+ /**
31
+ * 컨텍스트 필터 (기본값: 'default')
32
+ */
33
+ context?: string;
34
+ /**
35
+ * 시작 시간 (ISO 8601 형식, 선택적)
36
+ */
37
+ from?: string;
38
+ /**
39
+ * 종료 시간 (ISO 8601 형식, 선택적)
40
+ */
41
+ to?: string;
42
+ /**
43
+ * 최대 이력 개수 (기본값: 100)
44
+ */
45
+ historyLimit?: number;
46
+ }
47
+ /**
48
+ * 리포트 데이터 구조
49
+ */
50
+ export interface QualityReport {
51
+ /**
52
+ * 리포트 생성 시간
53
+ */
54
+ generated_at: string;
55
+ /**
56
+ * 리포트 옵션
57
+ */
58
+ options: ReportOptions;
59
+ /**
60
+ * 전체 상태 요약
61
+ */
62
+ summary: {
63
+ /**
64
+ * 전체 상태: 'pass', 'warning', 'fail'
65
+ */
66
+ overall_status: 'pass' | 'warning' | 'fail';
67
+ /**
68
+ * 네임스페이스별 상태
69
+ */
70
+ namespace_status: Array<{
71
+ namespace: string;
72
+ status: 'pass' | 'warning' | 'fail';
73
+ metrics_count: number;
74
+ passed_count: number;
75
+ failed_count: number;
76
+ }>;
77
+ /**
78
+ * 총 지표 수
79
+ */
80
+ total_metrics: number;
81
+ /**
82
+ * 통과한 지표 수
83
+ */
84
+ passed_metrics: number;
85
+ /**
86
+ * 실패한 지표 수
87
+ */
88
+ failed_metrics: number;
89
+ /**
90
+ * 경고 지표 수
91
+ */
92
+ warning_metrics: number;
93
+ };
94
+ /**
95
+ * 최신 품질 지표
96
+ */
97
+ latest_metrics: Array<{
98
+ metric_namespace: string;
99
+ metric_key: string;
100
+ context: string;
101
+ metric_value: number;
102
+ measured_at: string;
103
+ status: 'pass' | 'warning' | 'fail';
104
+ threshold_value: number | null;
105
+ threshold_type: 'min' | 'max' | null;
106
+ }>;
107
+ /**
108
+ * 경고 정보
109
+ */
110
+ warnings: Array<{
111
+ metric_namespace: string;
112
+ metric_key: string;
113
+ context: string;
114
+ measured_value: number;
115
+ threshold_value: number;
116
+ threshold_type: 'min' | 'max';
117
+ difference: number;
118
+ message: string;
119
+ }>;
120
+ /**
121
+ * 측정 이력 (최근 N개)
122
+ */
123
+ history: Array<{
124
+ id: string;
125
+ measurement_type: string;
126
+ measured_at: string;
127
+ status: string;
128
+ namespace?: string;
129
+ context?: string;
130
+ }>;
131
+ }
132
+ /**
133
+ * Quality Reporter
134
+ *
135
+ * PRD FR-1.1: Reporter 역할 - 회상용 리포트 생성
136
+ */
137
+ export declare class QualityReporter {
138
+ private db;
139
+ private recorder;
140
+ private thresholdManager;
141
+ constructor(db: Database.Database);
142
+ /**
143
+ * 리포트 데이터 수집
144
+ *
145
+ * @param options - 리포트 옵션
146
+ * @returns 리포트 데이터
147
+ */
148
+ collectReportData(options?: ReportOptions): Promise<QualityReport>;
149
+ /**
150
+ * Markdown 형식 리포트 생성
151
+ *
152
+ * @param reportData - 리포트 데이터
153
+ * @returns Markdown 형식 리포트 문자열
154
+ */
155
+ generateMarkdownReport(reportData: QualityReport): string;
156
+ /**
157
+ * JSON 형식 리포트 생성
158
+ *
159
+ * @param reportData - 리포트 데이터
160
+ * @returns JSON 형식 리포트 문자열
161
+ */
162
+ generateJsonReport(reportData: QualityReport): string;
163
+ /**
164
+ * HTML 형식 리포트 생성
165
+ *
166
+ * @param reportData - 리포트 데이터
167
+ * @returns HTML 형식 리포트 문자열
168
+ */
169
+ generateHtmlReport(reportData: QualityReport): string;
170
+ /**
171
+ * 리포트 생성
172
+ *
173
+ * PRD FR-5.5: 리포트 생성 시 JSON 형식 로그 파일 저장
174
+ * `logs/quality-report-{timestamp}.json` 형식으로 저장
175
+ *
176
+ * @param options - 리포트 옵션
177
+ * @returns 리포트 문자열
178
+ */
179
+ generateReport(options?: ReportOptions): Promise<string>;
180
+ /**
181
+ * 리포트를 JSON 형식으로 파일에 저장
182
+ *
183
+ * PRD FR-5.5: `logs/quality-report-{timestamp}.json` 형식으로 저장
184
+ *
185
+ * @param reportData - 리포트 데이터
186
+ */
187
+ private saveReportToFile;
188
+ }
189
+ //# sourceMappingURL=quality-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-reporter.d.ts","sourceRoot":"","sources":["../../../src/services/quality-assurance/quality-reporter.ts"],"names":[],"mappings":"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"}